TeX のリーダーを少しいじっていたのですが、理解できない問題に遭遇しました。次のサンプル コードを示します。
\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
\textbullet
私の理解では、 5pt から 15pt までの水平方向の空きスペースがある場合、使用可能なスペースの中央に最大 1 つ出力されるはずです。結果は次のとおりです。
最初の行には 4pt しか残っていないため、箇条書きは表示されません。2 行目では、箇条書きは自然な幅になり、ちょうど 1 回収まります。3 行目では、最大幅まで伸ばす必要があります。これらのケースは問題ありません。理解できないのは次の 2 行です。
4 行目には、箇条書きがぴったり収まる 8 ポイントのスペースが必要です。しかし、箇条書きは表示されません。なぜでしょうか。
逆の問題は 5 行目にあります。ここでは最大伸長を超えているため、TeX は警告を発しますunderfull \hbox
。しかし、なぜ 3 つのボックスが出力されるのでしょうか?
セクション9.3.3トピック別TeXでは、ボックス レジスタが最初に使用された後に空にならないようにするために、さまざまなリーダー コマンドでを使用する必要があることが明示的に示されています\copy
。実際、これがまさに私が達成したい効果であるため、 を使用しました\box
。出力にはまだ 3 つの箇条書きがあります。
なぜこのようなことが起こるのか(また、それを修正する方法も)を誰か説明してもらえますか?
答え1
ゼロ以外の伸縮コンポーネントを持つグルーは、悪影響を伴いながらも、とにかく伸縮して埋め尽くされます。
5番目の例では\showoutput
、
...\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
接着剤の伸縮係数は 4 です。したがって、接着剤は 10+4*5=30 ポイントになります。修正はありません。これが動作の想定方法です。
注:\tensy
無関係な部分が表示されないように、プレーン TeX でタイプセットしたためです。
あなたの文書では、関連する診断は次のようになります
..........\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