Estoy jugando un poco con los líderes de TeX y me encontré con un problema que no entiendo. Dado el siguiente código de ejemplo:
\documentclass{article}
\begin{document}
\def\bul{%
\begingroup
\setbox0=\hbox to 10pt{\hss\textbullet\hss}%
\skip0=\wd0 plus 0.5\wd0 minus 0.5\wd0
% \skip0=10pt plus 5pt minus 5pt % the same as above
\cleaders\box0\hskip\skip0
\endgroup
}
1: \fbox{\hbox to 30pt{\null\hskip13pt\bul\hskip13pt\null}} okay, too few space
2: \fbox{\hbox to 30pt{\null\hskip10pt\bul\hskip10pt\null}} okay, space fits exactly
3: \fbox{\hbox to 30pt{\null\hskip7.5pt\bul\hskip7.5pt\null}} okay, maximum stretch
\medskip
4: \fbox{\hbox to 30pt{\null\hskip11pt\bul\hskip11pt\null}} wrong, still enough space left
5: \fbox{\hbox to 30pt{\null\bul\null}} wrong, too many bullets
\end{document}
\bul
Según tengo entendido, debería generar como máximo uno \textbullet
centrado en el espacio disponible si hay un espacio horizontal libre de 5 puntos a 15 puntos. Aquí está el resultado:
En la primera línea solo quedan 4 puntos, por lo que no aparece ninguna viñeta. En la línea 2, la bala puede tomar su ancho natural y encajar exactamente una vez. En la tercera línea debe estirarse hasta su ancho máximo. Esos casos están bien. Los que no entiendo están en las dos líneas siguientes.
La línea 4 debe dejar un espacio de 8 puntos en el que una bala pueda caber cómodamente. Sin embargo, no ocurre ninguna bala. ¿Por qué?
El problema opuesto ocurre en la línea 5. Aquí se excede el tramo máximo, por lo que TeX da una underfull \hbox
advertencia. Pero, ¿por qué genera tres cuadros?
Sección 9.3.3 deTeX por temaindica explícitamente que debe usar \copy
con los distintos comandos líderes para asegurarse de que el registro del cuadro no esté vacío después de haberlo usado por primera vez. En realidad, este es exactamente el efecto que quiero lograr, por eso usé \box
. La salida todavía tiene tres balas.
¿Alguien podría explicar por qué sucede esto (y también cómo solucionarlo)?
Respuesta1
El pegamento con un componente de estiramiento distinto de cero se estirará hasta llenarse de todos modos, a expensas del mal funcionamiento.
En el quinto ejemplo, con \showoutput
, verías
...\hbox(4.44444+0.0)x30.0, glue set 4.0
....\hbox(0.0+0.0)x0.0
....\cleaders 10.0 plus 5.0 minus 5.0
.....\hbox(4.44444+0.0)x10.0, glue set 2.5fil
......\glue 0.0 plus 1.0fil minus 1.0fil
......\mathon
......\tensy ^^O
......\mathoff
......\glue 0.0 plus 1.0fil minus 1.0fil
....\hbox(0.0+0.0)x0.0
donde el factor de estiramiento del pegamento es 4. Por lo tanto, el pegamento cuenta como 10+4*5=30 pt. No hay solución, así es como se supone que funciona.
Nota: \tensy
es porque compuse el texto con TeX simple para evitar que aparezcan partes irrelevantes.
Con su documento el diagnóstico pertinente sería
..........\hbox(4.44444+0.0)x30.0, glue set 4.0
...........\hbox(0.0+0.0)x0.0
...........\cleaders 10.0 plus 5.0 minus 5.0
............\hbox(4.44444+0.0)x10.0, glue set 2.5fil
.............\glue 0.0 plus 1.0fil minus 1.0fil
.............\OMS/cmsy/m/n/10 ^^O
.............\glue 0.0 plus 1.0fil minus 1.0fil
...........\hbox(0.0+0.0)x0.0