未满的垂直框,几何包

未满的垂直框,几何包

我使用了带有 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 设置为具有少量的拉伸度和收缩度,以便在所有行之间无形地增加(或减少)额外的空间。如果您让读者阅读长段落,则需要其中之一。

相关内容