Estou brincando um pouco com os líderes do TeX e me deparei com um problema que não entendo. Dado o seguinte código de exemplo:
\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
deveria, pelo que entendi, gerar no máximo um \textbullet
centralizado no espaço disponível se houver algum espaço horizontal livre de 5 pontos a 15 pontos. Aqui está o resultado:
Na primeira linha restam apenas 4 pontos, então nenhum marcador ocorre. Na linha 2, o marcador pode assumir sua largura natural e caber exatamente uma vez. Na terceira linha, ele precisa ser esticado até a largura máxima. Esses casos estão bem. Os que não entendo estão nas próximas duas linhas.
A linha 4 deve deixar um espaço de 8 pontos onde uma bala possa caber confortavelmente. Nenhuma bala ocorre, no entanto. Por que?
O problema oposto está na linha 5. Aqui o trecho máximo é excedido, portanto o TeX emite um underfull \hbox
aviso. Mas por que ele produz três caixas?
Seção 9.3.3 deTeX por tópicoafirma explicitamente que você deve usar \copy
com os vários comandos líderes para garantir que o registro da caixa não esteja vazio depois de ter sido usado primeiro. Na verdade, esse é exatamente o efeito que quero alcançar, por isso usei \box
. A saída ainda tem três marcadores.
Alguém poderia explicar por que isso está acontecendo (e também como consertar)?
Responder1
A cola com um componente elástico diferente de zero esticará para preencher de qualquer maneira, às custas da maldade.
No quinto exemplo, com \showoutput
, você veria
...\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
onde o fator de estiramento da cola é 4. Portanto, a cola conta como 10+4*5=30 pt. Sem solução, é assim que deve funcionar.
Nota: \tensy
é porque eu escrevi a coisa com TeX simples para evitar que partes irrelevantes apareçam.
Com o seu documento, o diagnóstico relevante seria
..........\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