對於 2 行段落, \widowpenalty 和 \clubpenalty 如何互動?

對於 2 行段落, \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) 將分割一個 2 行區塊(儘管有\\*),而第 3 頁和第 4 頁之間不會發生這種情況(\twolinesInseparable,這設定了「無限」( 10000) \widowpenalty)。

對於 2 行段落,這兩個參數是否以有意義的方式相互作用?

\widowpenalty(這是一個理論問題。除了確保包含 a或的不同巨集\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在第七個兩線對中選擇它。

這是什麼意思?簡而言之,\\*不應該在段落中使用它來禁止分頁。一般來說\\不應該用來斷線,要說出完整的事實。

相關內容