我使用了带有 heightrounded 选项的 geometry 包并设置了 parskip=0pt;然后我收到了 vbox 未满的消息(badness 10000)。但是在我设置 parskip=0pt 加上 .0001ex 后,这个消息就消失了(.00001 不起作用)。解释一下?
答案1
无论设置如何,您都可能会得到未满的页面heightrounded
(当\flushbottom
由于存在寡妇或俱乐部线路,
例如
\documentclass{article}
\usepackage[textheight=4cm,heightrounded]{geometry}
\usepackage{kantlipsum}
%\clubpenalty10000
%\widowpenalty10000
\flushbottom
\begin{document}
\kant[1-10]
\end{document}
不会产生未满页面,但只要我取消注释这两行,从而不允许俱乐部行和寡妇行,我就会得到三个未满页面。
如果你查看带有注释行的结果,你会注意到第一页有一个俱乐部行,因为第二段从第一页开始只有一行。如果\clubpenalty
设置为 10000,则不再接受此行,结果会导致页面不完整。
我认为设置灵活\baselineskip
并不是一个好的解决方法。请注意,您选择的值0.00001pt
与 1sp 相同。现在让我试试
\documentclass{article}
\usepackage[textheight=4cm,heightrounded,showframe]{geometry}
\usepackage{kantlipsum}
\clubpenalty10000
%\widowpenalty10000
\flushbottom
\begin{document}
\kant[1-10]
\end{document}
在哪里showframe
绘制一个围绕文本区域的框,我仍然得到
Underfull \vbox (badness 10000) has occurred while \output is active
第一页已经满了
为什么会这样?首先,回想一下,即使允许最小的拉伸分量也允许任意拉伸。我们必须用可用的拉伸覆盖“缺失”行的 12pt,并且可以将拉伸分布在八个行间空间上。可用的拉伸是 8sp,这意味着拉伸因子是
12 * 65536 / 8 = 98304
这当然会导致 badness 达到 10000,因为它是拉伸因子的立方的 100 倍,如果超过,则会在 10000 处截止。
在这种情况下,为了得到一个“完美的页面”,就计算出来的 badness 而言,你必须允许 1.5pt 的拉伸(需要 12/8)。事实上,设置
\baselineskip=1\baselineskip plus 1.5pt
没有给出“未满”警告。
可伸缩基线跳跃对于“无人值守排版”非常有用,因为这种排版不需要追求高质量。我有时也会使用它,这样在准备文档时就不会被这些信息所困扰;但高质量的排版绝对不会从中受益,除非我们正在排版一些小册子或类似的文档。
由于你说你的页面上有 42 行(并假设字体大小为 10pt),覆盖一行意味着将 12pt 分布在 40 个行间空间上;一旦超过该值,就会报告不良情况\vbadness
(默认为 1000),即当拉伸比超过 2.15(10 的立方根,因为 badness 是拉伸比的立方乘以 100)时,就会报告 badness。因此,为了使 badness 低于 1000;现在,如果s是所需的拉伸量,我们需要 12pt/(40 s)= 2.15,所以s= 0.645点。
如果基线跳过不同,请自行计算。
\looseness
有更好的方法来处理长句或寡句。例如,可以使用 来调整段落长度,或者更好的方法是通过重新措辞。
我认为,增加可拉伸性\parskip
并不是最好的选择,特别是如果一页中只有几个段落,因为所有的拉伸只会分布在段落的开头。
答案2
这与胶水有关,胶水是 TeX 中的基本构建块之一(在 LaTeX 中很少见到)。简而言之,胶水是构成跳跃(\parskip、\baselineskip 等)的材料,它可以拉伸或收缩以填充可用空间。胶水用于水平或垂直跳跃(\hskip、\vskip)。每个跳跃都有自己的拉伸量和收缩量,由正负量指定。如果它拉伸或收缩量超过指定的量,它就会“变坏”,而换行和分页算法的工作就是将不良程度降至最低。
垂直方向,可以在页面上的行之间使用胶水来将它们隔开(所有行都用具有相似弹性的胶水隔开),这样页面的高度就都一样(默认),或者通过在底部用非常(无穷大)有弹性的胶水块(\raggedbottom 选项)结尾来使间距均匀,所有剩余空间都在底部。或者这些事情的任何组合。
因此,在当前情况下,TeX 的分页算法试图制作一个应该可以很好地适应的页面,但由于页面上的所有粘连都没有可拉伸性,因此它只是因为微小的差异而失败。默认情况下,\baselineskip 没有可拉伸性,而 \parskip 有少量可拉伸性,但您需要覆盖默认的 \parskip,因此页面最终不会拉伸或收缩。如果段落之间有少量额外的可拉伸性,TeX 将不再抱怨它无法使页面适应要求的严格条件。输出页面将几乎相同。
更好的解决方案可能是使用 \raggedbottom 或以其他方式将页尾粘连设置为具有较小的拉伸度。或者,您可以将 \baselineskip 设置为具有少量的拉伸度和收缩度,以便在所有行之间无形地增加(或减少)额外的空间。如果您让读者阅读长段落,则需要其中之一。