对于两行段落,\widowpenalty 和 \clubpenalty 是如何相互作用的?

对于两行段落,\widowpenalty 和 \clubpenalty 是如何相互作用的?

有时\\*不足以防止换行。如果分隔行位于段落末尾且滞留在页面顶部(“寡行”)或位于段落开头且滞留在页面底部(“孤行”),则添加{\widowpenalty10000 \par}或会有所帮助。{\clubpenalty10000 \par}

以下是一个例子:

\documentclass{article}

\newcommand*{\twolines}{%
  line 1 \\*
  line 2 \par%
}
\newcommand*{\twolinesInseparable}{%
  line 1 \\*
  line 2 {\widowpenalty10000 \par}%
}

\begin{document}

\vspace*{32\baselineskip}
\twolines\twolines\twolines
\twolines\twolines\twolines
\twolines\twolines\twolines

\newpage

\vspace*{32\baselineskip}
\twolinesInseparable\twolinesInseparable\twolinesInseparable
\twolinesInseparable\twolinesInseparable\twolinesInseparable
\twolinesInseparable\twolinesInseparable\twolinesInseparable

\end{document}

在此代码中,第 1 页和第 2 页之间的换行符 ( \twolines) 将拆分为两行块(尽管\\*),而第 3 页和第 4 页之间不会发生这种情况(\twolinesInseparable,它设置了一个“无限” ( 10000) \widowpenalty)。

对于两行段落来说,这两个参数是否以有意义的方式相互作用?

\widowpenalty(这是一个理论问题。除了确保包含或的不同宏\clubpenalty不会发生冲突或产生无意义或冲突的约束的思想实验之外,我现在没有实际应用。 )

答案1

让我们看看添加后会得到什么\showoutput。我只显示与第一对行相关的诊断消息:

Completed box being shipped out [1]
\vbox(633.0+0.0)x407.0
.\glue 16.0
.\vbox(617.0+0.0)x345.0, shifted 62.0
..\vbox(12.0+0.0)x345.0, glue set 12.0fil
...\glue 0.0 plus 1.0fil
...\hbox(0.0+0.0)x345.0
..\glue 25.0
..\glue(\lineskip) 0.0
..\vbox(550.0+0.0)x345.0
...\write-{}
...\glue(\topskip) 10.0
...\rule(0.0+0.0)x*
...\penalty 10000
...\glue 384.0
...\glue 0.0
...\glue(\parskip) 0.0 plus 1.0
...\glue(\baselineskip) 5.05556
...\hbox(6.94444+0.0)x345.0, glue set 306.11107fil
....\hbox(0.0+0.0)x15.0
....\OT1/cmr/m/n/10 l
....\OT1/cmr/m/n/10 i
....\OT1/cmr/m/n/10 n
....\OT1/cmr/m/n/10 e
....\glue 3.33333 plus 1.66666 minus 1.11111
....\OT1/cmr/m/n/10 1
....\penalty 10000
....\glue 0.0 plus 1.0fil
....\penalty -10000
....\glue(\rightskip) 0.0
....\glue(\rightskip) 0.0
...\penalty 10000
...\penalty 300
...\glue(\baselineskip) 5.05556
...\hbox(6.94444+0.0)x345.0, glue set 321.11107fil
....\OT1/cmr/m/n/10 l
....\OT1/cmr/m/n/10 i
....\OT1/cmr/m/n/10 n
....\OT1/cmr/m/n/10 e
....\glue 3.33333 plus 1.66666 minus 1.11111
....\OT1/cmr/m/n/10 2
....\penalty 10000
....\glue(\parfillskip) 0.0 plus 1.0fil
....\glue(\rightskip) 0.0
...\glue(\parskip) 0.0 plus 1.0
...\glue(\baselineskip) 5.05556

发生的事情非常清楚:命令\\*执行\vadjust{\penalty10000},并且该\vadjust项目在包含 的行之后找到它line 1。但还添加了与段落相关的正常惩罚。在这种情况下,插入\clubpenalty和的总和\widowpenalty,结果为\penalty300。外部垂直列表中的任何惩罚都是可行的分页点,并且 TeX在第七对两行中选择它。

这是什么意思?简单地说,它\\*不应该在段落中用于阻止分页。\\说实话,一般来说,它不应该用于换行。

相关内容