\pagebreak[number] 仅当数字 = 4 时才分页

\pagebreak[number] 仅当数字 = 4 时才分页

我想尝试一下令人鼓舞分页符的使用\pagebreak[number]

就目前而言,只有当我定义时它才会破坏页面\pagebreak[4](在任何其他情况下它都不会起作用)。

有人能向我解释一下它应该如何工作吗?

如果我在页面底部有一个新的部分并且我使用它则\pagebreak[3]不会\section{xxxxx}破坏它。

手册上写道:

\pagebreak 命令告诉 LaTeX 在命令处中断当前页面。使用可选参数 number,您可以将 \pagebreak 命令从命令转换为请求。number 必须是 0 到 4 之间的数字。数字越大,请求越迫切。

答案1

该命令\pagebreak[3]仅修改分页符出现在该位置的概率。也就是说,它将分页符的惩罚减少了301。该命令\pagebreak[4]将惩罚减少了10000,这是一种“TeX 的无穷大”,它通过不花费任何代价来强制分页符。

但是,\pagebreak[3]如果 LaTeX 认为输出没有任何问题(例如章节标题非常靠近页面底部),则无法工作。因此,您必须告诉 LaTeX 将底部标题视为坏事,最简单的方法是使用包裹titlesec

\usepackage[nobottomtitles]{titlesec}

它的理念很简单:如果页面上剩余空间不多,则强制分页。具体实现起来比较复杂,我肯定无法在这里很好地解释清楚。

答案2

广泛了解分页工作原理会有所帮助。TeX 在主垂直列表,主要是在分割段落后的行,但也有插入行之间的“胶水”。其他材料可以出现在这个垂直列表中,例如在分段标题之前和之后插入的胶水,用于垂直分隔它们。还有其他东西,但完整的描述会花费太长时间;分页的其他主要成分是处罚

惩罚可以自动插入(通过 TeX 程序)或手动插入(通常嵌入宏中,因此用户无需注意)。自动惩罚会插入在段落的第一行之后(数量由参数指定\clubpenalty)和倒数第二行之后(\widowpenalty)。典型的手动惩罚由 插入\pagebreak

这些惩罚告诉 TeX 在该点(总是在行之间,因为当 TeX 寻找分页点时,已经执行了分段)是否需要分页。如果惩罚为正,则分页是不可取的,如果为负,则分页是可取的;范围是-10000..10000:-10000 惩罚强制分页,10000 惩罚不允许分页。

可以进行分页胶水或者处罚(实际上,这不是完全的事实,但非常接近事实。)在惩罚或其他粘连之前紧接着的粘连处不会发生分页符,但对于分页符,惩罚总是被考虑的。

当 TeX 积累材料时,它会跟踪成本在每个可行的断点处分页。TeXbook(第 15 章)中解释了此成本的精确计算。10000 的惩罚会导致“最大成本”(100000)。此成本还取决于累积材料的高度,因此当页面仍然几乎为空时,成本将为此最大值,但是当累积材料高于为页面保留的空间时,它将变为无限。当开始新页面时(更准确地说,当弹出页面后将第一个项目附加到主垂直列表时),为页面保留的空间包含在\pagegoal等于的内部参数中\textwidth(在 LaTeXspeak 中\vsize是原始参数),但如果在处理过程中发现脚注或浮动,则它可能会减少。

命令

\pagebreak[0] \pagebreak[1] \pagebreak[2] \pagebreak[3] \pagebreak[4]

在罚球点插入罚球。如果指令是在段落之间发出的,它将精确地出现在罚球点上;如果指令是在段落中发出的,罚球将插入到指令所在行的后面,线间胶水。用量为

0 \@lowpenalty \@medpenalty \@highpenalty 10000

(它们的对立面由类似的命令插入\nopagebreak)。文档类固定了中间值;对于标准类,它们是

\@lowpenalty  =  51
\@medpenalty  = 151
\@highpenalty = 301

TeX 会跟踪成本,标记“迄今为止最佳”,当它发现分页的成本是无限时,它会回退并按最近的“迄今为止最佳”成本分割页面。当一个分页点被另一个“迄今为止最佳”取代时,与该分页相关的惩罚(当然可能没有)将被丢弃,并且它们将不再影响计算。

因此,如果在距离下一个分页符足够远的位置发出\pagebreak[3],即在它之后的页面中可以容纳更多材料,则惩罚将被忽略。相反,\pagebreak[4](或者,等同地,简单地\pagebreak)将产生 -10000 的成本,根据规则,即使累积的材料仍然远离,也会强制分页\pagegoal

LaTeX 的分段命令会注意在它们之后开始的第一个段落前面有一个 10000 惩罚,因此标题和第一个段落或紧随其后的分段标题之间不能出现分页符。因此,下一个可行的分页点位于第二下一段的行(因为宏也暂时设置\clubpenalty为 10000)。

\pagegoal此行为是可修改的,因为可以随时检查当前值和“迄今为止的高度”,并且负责排版部分标题的宏可以决定可用空间是否低于某个阈值,并在必要时发出\pagebreak命令。

该软件包needspace提供了一个用户界面,用于根据可用空间决定是否过早分页。titlesec带有 nobottomtitles*选项的软件包可以执行类似操作(但插入的惩罚是 9999 而不是 10000)。


最后要注意的是:分页符所在的惩罚或粘连会被移到下一页,然后消失,因为 TeX 在开始构建新页面时总是会丢弃这些项目。一些聪明的输出例程可以利用这一事实,在丢弃这些项目之前执行一些操作。事实上,LaTeX 输出例程会这样做,以便在需要时容纳页面浮动:发出的惩罚是\clearpage-10001,因此输出例程可以知道分页符是的结果,\clearpage并且它会刷新浮动队列。

相关内容