是否有像“垂直”\tolerance这样的参数?

是否有像“垂直”\tolerance这样的参数?

我一直尝试\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像我上面那样简单地使用)。读者的练习 :-)

相关内容