
A veces \\*
no es suficiente para evitar un salto de línea. Agregar {\widowpenalty10000 \par}
o {\clubpenalty10000 \par}
ayuda si la línea separada es el final del párrafo y está bloqueada en la parte superior de una página ("viuda") o el inicio del párrafo y está bloqueada en la parte inferior de una página ("huérfana").
Aquí hay un ejemplo:
\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}
En este código, el salto de línea entre las páginas 1 y 2 ( \twolines
) dividirá un fragmento de 2 líneas (a pesar de \\*
), mientras que esto no sucede entre las páginas 3 y 4 ( \twolinesInseparable
, que establece un "infinito" ( 10000
) \widowpenalty
).
¿Estos dos parámetros interactúan de manera significativa en un párrafo de 2 líneas?
(Esta es una pregunta teórica. No tengo una aplicación práctica en este momento aparte del experimento mental de asegurarme de que las diferentes macros que incluyen \widowpenalty
o \clubpenalty
no entren en conflicto o creen restricciones sin sentido o conflictivas).
Respuesta1
Veamos lo que obtenemos cuando sumamos \showoutput
. Solo muestro los mensajes de diagnóstico relativos al primer par de líneas:
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
Está bastante claro lo que sucede: el comando \\*
lo hace \vadjust{\penalty10000}
y este \vadjust
elemento encuentra su camino después de la línea que contiene line 1
. Pero también se añade la penalización normal propia de los apartados. En este caso, se inserta la suma de \clubpenalty
y , lo que da como resultado . Cualquier penalización en la lista vertical exterior es un punto de salto de página factible, y TeX\widowpenalty
\penalty300
poderyhaceelíjalo en el séptimo par de dos líneas.
¿Qué quiere decir esto? Simplemente, eso \\*
no debe usarse en un párrafo para inhibir un salto de página. En general, \\
no debe usarse para romper una línea, a decir verdad.