¿Cómo interactúan \widowpenalty y \clubpenalty en un párrafo de 2 líneas?

¿Cómo interactúan \widowpenalty y \clubpenalty en un párrafo de 2 líneas?

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 \widowpenaltyo \clubpenaltyno 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 \vadjustelemento 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 \clubpenaltyy , 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\penalty300poderyhaceelí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.

información relacionada