如何\filbreak
与 协同工作\multicols
?
请参阅以下示例:
\documentclass[]{article}
\usepackage{lipsum}
\usepackage{multicol}
\begin{document}
\lipsum[2-4]
\filbreak
\lipsum[1] % fits on same page, so previous \filbreak has no effect
\filbreak
\lipsum[2-4] % does not fit on same page, so preview \filbreak introduces page break
\filbreak
\begin{multicols}{2} % does not fit on page, but previous \filbreak does not introduce pagebreak
\lipsum
\end{multicols}
\end{document}
为什么第三行不\filbreak
引入分页符,以便两列文本在新页面上开始?如何更改?
答案1
\filbreak
虽然在 LaTeX 中定义,但实际上并没有实现 LaTeX 概念,而是提供了一种简单的机制(最初在纯 TeX 中定义)来处理“简单”的样稿材料。这里的重点是“简单”。
基本上,它\filbreak
所做的就是添加一个垂直填充(可拉伸的空白),然后跟着一个惩罚,说“这是一个很好的休息位置”(-200
确切地说),然后再进行一个负拉伸。
因此,正常的换行符(惩罚值为0
)将不如用空白填充页面那么有吸引力。因此,对于普通文本,输出例程将优先考虑\filbreak
位置而不是其他换行符,因此它通常会从一个换行符跳转到\filbreak
下一个换行符。但是,已经有一个节标题可能会消除这种情况,因为它会-300
默认添加惩罚值,因此根据距离底部有多近以及页面上有多少其他空白空间,可能会采用它代替点\filbreak
。
现在multicol
这完全崩溃了,因为该环境的作用是:
- 它测量页面上剩余的空间
- 如果有足够的内容,它将暂时保存所有现有页面,然后开始收集 2 列或更多列的材料。
- 当它有足够的材料来填充之前计算的剩余空间(或者在那之前结束时)时,它会制作列,然后将保存的材料与这些列合并在一页中并输出该页面。
- 该材料末尾的“奇怪”的惩罚和延伸序列现在不再发挥任何作用,因为延伸被抵消了,并且惩罚不再被考虑。
您在上面问,当它无法获取此页面上的所有材料时,为什么它不在环境之前中断?答案是 a) 由于上述行为从简单到复杂的 OR 处理的变化,它没有收到任何中断信号;b) 因为即使它会以某种方式收到这样的信号,它也需要先处理整个环境(或至少是其中的大部分)以确定是否合适,而在决策点它根本没有这些数据。
multicol
因此,归根结底,这两种方法根本无法协同工作,如果没有足够的空间容纳整个环境,就不可能轻松地更改处理以从新页面开始。