![脚注中的长表导致页面过满](https://linux22.com/image/246212/%E8%84%9A%E6%B3%A8%E4%B8%AD%E7%9A%84%E9%95%BF%E8%A1%A8%E5%AF%BC%E8%87%B4%E9%A1%B5%E9%9D%A2%E8%BF%87%E6%BB%A1.png)
虽然longtable
它擅长逐行分页,但我在脚注中使用一些分页功能时遇到了问题。似乎在发送页面时,没有“猜测”表格大小的足够空间,结果表格根本没有分页,最终被写在页面的底部边缘。(注意:有时这样做是正确的,但并非总是如此。)任何建议都会受到欢迎,尽管“不要在那里使用表格”是目前最不理想的解决方案。
\documentclass[12pt]{article}
\usepackage{booktabs,longtable,lipsum}
\newcommand{\twolines}{Lorem ipsum dolor sit amet, consectetuer
adipiscing elit. Ut purus elit, vestibulum ut, placerat ac,
adipiscing vitae, felis. Curabitur dictum gravida}%
\newcommand{\threelines}{Lorem ipsum dolor sit amet, consectetuer
adipiscing elit. Ut purus elit, vestibulum ut, placerat ac,
adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu
libero, nonummy eget, consectetuer id, vulputate a}%
\begin{document}
\lipsum[1]\footnote{\threelines\twolines}
\lipsum[2]\footnote{\threelines\twolines}
New paragraph.%
\footnote{Note this table (with was designed for hanging footnotes):
%
\begin{longtable}{@{}p{1em} p{1.75cm} p{10.5cm}}% for hanging footnotes
& Abbrev1 & \twolines\\
% & Abbrev2 & \threelines\\ % uncommenting these lines show
% & Abbrev3 & \threelines\\ % another unhappy outcome
\end{longtable}
}% <--- end of footnote
\threelines.
\lipsum[4]
\end{document}
编辑:也许我应该补充一点,我并不坚持使用 longtable 解决方案,但我希望可以模拟带有p{}
列的表格(即多行单单元格内容),它可以跨页中断,同时停留在脚注中(...大声说出来听起来很多)。话虽如此,我认为 longtable 是实现此目的的最简单方法。
答案1
修改后的答案
您需要确保分页器可以在表格的每一行之后拆分表格,这意味着确保有合适的胶水和惩罚,并确保任何框都未被装箱。
longtable
确实将所有行都保留为未装箱状态,以允许在脚注中进行分页,但这里的问题是行的深度很大(从列开始p
),这使得\vsplit
拆分脚注的隐式操作很难找到要拆分的地方。仅使用\parbox
es 而不是longtable
根本不使用 es 都可能重现这种不良行为(所以这不是我的错 :-) 我在最后附上了目前我能想到的最好的方法,即仅使用\parbox
es,理论上,如果更方便的话,可以从语法中生成惩罚和粘合组合longtable
,但 TeX 在这里似乎相当脆弱,并且有几种变体(使用和不使用longtable
)导致(显然)在输出例程中循环并且文档不终止。以下做终止,并且做分裂....
\documentclass[12pt]{article}
\usepackage{lipsum}
\newcommand{\twolines}{Lorem ipsum dolor sit amet, consectetuer
adipiscing elit. Ut purus elit, vestibulum ut, placerat ac,
adipiscing vitae, felis. Curabitur dictum gravida}%
\newcommand{\threelines}{Lorem ipsum dolor sit amet, consectetuer
adipiscing elit. Ut purus elit, vestibulum ut, placerat ac,
adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu
libero, nonummy eget, consectetuer id, vulputate a}%
\begin{document}
\makeatletter
\def\@oddfoot{\reset@font\dotfill\thepage\dotfill}
\lipsum[1]x\footnote{\threelines\twolines}
\lipsum[2]y\footnote{\threelines\twolines}
New paragraph.%
\footnote{Note this table (with was designed for hanging footnotes):
\splitmaxdepth\maxdimen
\def\goodbreak{\penalty-9000 }
Abrev1\quad\parbox[t]{10.5cm}{\twolines}
\filbreak
Abbrev2\quad \parbox[t]{10.5cm}{\threelines}
\filbreak
Abbrev3\quad\parbox[t]{10.5cm}{\threelines}
}% <--- end of footnote
\threelines.
\lipsum[4]
\end{document}
答案2
您始终可以使用:
\usepackage{tabu}
并使用longtabu
环境。根据禁忌文档,tabu 中允许使用脚注和索引词,与 tabularx 不同,脚注链接与 hyperref 一起使用时不会中断。tabu\footnote [number]{htexti}
和 longtabu 中允许使用这种语法(longtable 中尚未实现此语法...)