
Às vezes \\*
não é suficiente para evitar uma quebra de linha. Adicionar {\widowpenalty10000 \par}
ou {\clubpenalty10000 \par}
ajuda se a linha separada estiver no final do parágrafo e presa no topo de uma página ("viúva") ou no início do parágrafo e presa na parte inferior de uma página ("órfã").
Aqui está um exemplo:
\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}
Neste código, a quebra de linha entre as páginas 1 e 2 ( \twolines
) dividirá um pedaço de 2 linhas (apesar do \\*
), enquanto isso não acontece entre as páginas 3 e 4 ( \twolinesInseparable
, que define um "infinito" ( 10000
) \widowpenalty
).
Esses dois parâmetros interagem de maneira significativa em um parágrafo de 2 linhas?
(Esta é uma questão teórica. Não tenho uma aplicação prática no momento além do experimento mental de garantir que diferentes macros que incluem \widowpenalty
ou \clubpenalty
não entrem em conflito ou criem restrições absurdas ou conflitantes.)
Responder1
Vejamos o que obtemos quando adicionamos \showoutput
. Apenas mostro as mensagens de diagnóstico relativas ao primeiro par de linhas:
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
É bastante claro o que acontece: o comando \\*
faz \vadjust{\penalty10000}
e este \vadjust
item encontra seu caminho após a linha que contém line 1
. Mas também são acrescentadas as penalidades normais relativas aos parágrafos. Neste caso, a soma de \clubpenalty
e \widowpenalty
é inserida, resultando em \penalty300
. Qualquer penalidade na lista vertical externa é um ponto de quebra de página viável, e o TeXpodeefazescolha-o no sétimo par de duas linhas.
O que isto significa? Simplesmente isso \\*
não deve ser usado em um parágrafo para inibir uma quebra de página. Em geral \\
não deve ser usado para quebrar linha, para falar toda a verdade.