Memoir 提供了命令\sloppybottom
“让 TeX 在页面底部添加一行以避免下一页出现孤行。”[1] 但是它似乎还设置了\raggedbottom
不是我想要的。如果我在命令\flushbottom
后添加一个,我会得到一个有点奇怪的行为,TeX 会在页面顶部添加一个额外的行以避免出现孤行。有没有办法让 TeX 像使用时\sloppybottom
一样填充页面,但仍然让所有页面的顶部对齐?\flushbottom
\sloppybottom
(也就是说,底部会对齐,除非需要多加一行以避免出现孤行)
答案1
\sloppybottom
\topskip
通过设置非标准值来完成其工作:
\topskip=1\topskip plus 0.625\topskip minus .95\topskip
此粘连插入到页面上的第一个框之前,但自然长度会缩短第一个框的高度(如果该值为负数,则设置为零)。
让我们举个例子。假设\topskip=10pt
(10 点文档大小的通常值);如果页面的第一行包含最高字符“A”,其高度为 6.83331pt,则插入的粘连为 3.16669pt。
当\sloppybottom
生效时,插入的胶水将是
3.16669pt plus 6.25pt minus 9.5pt
这样页面的可拉伸性为 6.25pt,可收缩性为 9.5pt,这样就可以挤进一行了。
然而,当页面被发送出去时,回忆录将其他胶水放在页面的顶部和底部:
\vskip 0pt plus -0.625\topskip minus -0.95\topskip
放在顶部,
\vskip 0pt plus.0001fil minus .95\topskip
放在底部。页面前面的粘连的作用是抵消 的拉伸和收缩分量\topskip
,这样第一行就会进入其正常位置。底部的粘连是必要的,以补偿可能添加的行,因为输出例程总是想说类似于
\vbox to \vsize{<what's to be output}
以便将页脚放在所有页面的相同位置。如果您说\flushbottom
让 TeX 不在顶部和底部插入两个粘连,但非标准\toskip
粘连已经存在,因此无法对其进行补偿:结果是第一行会从其正常位置移开。
\enlargethispage
它的工作方式非常不同,但需要在我们希望放大的页面上明确指定。