我一直尝试\flushbottom
在文档中使用,而不是懒惰地\raggedbottom
制作具有更高印刷质量的文档(希望如此)。我想知道是否有一个类似于的参数\tolerance
,但用于决定分页符。
我希望 LaTeX 在分页方面做到以下几点(或者也许我认为我会这样做):如果页面无法填满,那么 LaTeX 应该尝试通过以下方式来填充它:(1)最大限度地拉伸/收缩垂直粘连,但不超过其最大拉伸/收缩量;(2)在完成(1)之后,在该点分页,即使在页面底部留下多余的空白。
我发现解决这个问题最接近的方法是添加页面底部的柔性垂直粘连,但这并不是我想要的。 避免过度拉伸
答案1
有趣的谜题,但并非无法解决。
确实,由于页面是逐页从卷轴上截下来的,因此不存在垂直公差,但我们可以确定以这种方式制作的每页的劣质程度。而您要求的是劣质程度不超过 100。
LaTeX 没有提供对输出例程这一部分的挂钩,但是这里有一个小实现可以实现你的规则:
\documentclass{article}
\usepackage{kantlipsum}
\flushbottom
\setlength\textheight{8\baselineskip}
%\showoutput
\AddToHook{cmd/@makecol/before}{%
\setbox0\vbox to\ht255{\unvcopy255}%
\typeout{==> Badness of this page body: \the\badness}%
\ifnum \badness > 100
\typeout{===> ... setting ragged}%
\setbox255\vbox{\unvbox255 \vfill}%
\else
\typeout{===> ... ok}%
\fi
}
\begin{document}
\kant[1][1-4]
\kant[2][1]
\kant[3][1]
\kant[4][1]
\kant[5][1]
\kant[6][1]
\end{document}
劣化程度的计算方法是将胶水拉伸或收缩的比率立方乘以 100,因此 100 表示拉伸量小于或等于允许拉伸的量。
然而,您会发现这太保守了,您可能应该允许拉伸两倍甚至更多(2.5/3?),因此 800 或 1600 或... 这个值更合适。
实际上,重读你的规则:你想将拉伸应用到最大值,然后填充,因此它会变得稍微复杂一些。在这种情况下,你还需要测量没有拉伸的自然高度 255,然后使用它来确定需要填充的缺失空间量,以及不良值来确定需要在底部添加多少胶水才能达到 100 的不良值(而不是\vfill
像我上面那样简单地使用)。读者的练习 :-)