TeX で「グルー」の縮小限界を知るにはどうすればよいでしょうか?

TeX で「グルー」の縮小限界を知るにはどうすればよいでしょうか?

69ページTeXbook について、図があります: ここに画像の説明を入力してください

70ページTeXbook について、と言う

接着剤は、指定された収縮可能範囲を超えて収縮することはありません。たとえば、図の最初の接着剤の塊は、幅が 8 単位未満になることは決してありません。また、TEX は、指定された水平リストを、合計幅が 49 単位未満になるように縮小することはありません。

ここで著者は縮小限界をどのように計算するのでしょうか?

答え1

縮小は単位で指定されます。\setlength\baselineskip{15pt minus 2pt}縮小は2ptで最小サイズはです。また、無限大や単位13ptにすることもできますfil。たとえば、はの略です。fillfilll\vss\vskip 0pt plus 1fil minus 1fil

答え2

次に例を示します。

\def\ruleA{\vrule height1pt width45pt depth0pt}
\def\ruleB{\vrule height1pt width30pt depth0pt}
\noindent
\vrule height1pt width100pt depth0pt\par
\hbox to 100pt{\ruleA\hskip 20pt plus 4pt minus 15pt\ruleA} % case 1
\hbox to 100pt{\ruleA\hskip 20pt plus 4pt minus 10pt\ruleA} % case 2
\hbox to 100pt{\ruleA\hskip 20pt plus 4pt minus 3pt \ruleA} % case 3
\hbox to 100pt{\ruleB\hskip 20pt plus 4pt minus 3pt \ruleB} % case 4

\bye

ここに画像の説明を入力してください

2 つのルールを定義しました (1 つは幅 45pt、もう 1 つは 30pt)。そして、幅 100pt の水平ボックス内に接着剤を使用してルールをまとめました。

  • ケース 1 ~ 3 では、2 つのルールの合計幅は 90 pt なので、自然な幅は 20 pt なので、接着幅は 10 pt 縮小する必要があります。

    • ケース1とケース2は、それぞれ15pt、10ptの縮小率なので、それが可能です。しかし
    • ケース 3 では、接着の最小幅は 20pt-3pt = 17pt です (そのため警告がOverfull \hbox (7.0pt too wide) detected at line 7出されます)。
  • ケース 4 では、グルーは です20pt plus 4pt minus 3ptが、グルーの最大幅が 24pt であることを意味するわけではありません。実際、グルーは、正の伸縮成分を持つときはいつでも、任意の距離まで伸縮できます。また、スクリーンショットでわかるように、最後のグルーの幅は 100pt-30pt*2 = 40pt です (伸縮量は 20pt > 4pt)。そして、このケースでは警告が出されますUnderfull \hbox (badness 10000)

答え3

最初の接着剤の塊は なのでspace 9 stretch 3 shrink 1、最も狭くなるのは 9 − 1 = 8 です。(最も広くなるのは 9 + 3 = 12 だと思うかもしれませんが、引用した部分の直後の 70 ページのテキストでは、これは実際には正しくなく、より広く伸びる可能性があることが説明されています。)

すべての幅とスペースを合計すると、自然な幅は 5 + 9 + 6 + 9 + 3 + 12 + 8 = 52 になります。ただし、縮みも含めると、最も狭くなる幅は 5 + (9 − 1) + 6 + (9 − 2) + 3 + (12 − 0) + 8 = 49 になります。

52、8、49 はこのように計算されます。(他の数字はくじ引きで決まります。)

答え4

ここに画像の説明を入力してください

以下のコードで、何が起こっているのかを視覚的に確認できます。グルーをバネとして考えると分かりやすいでしょう。バネは伸びたり縮んだりして、一連のボックスを他のボックスに配置することができます。下の図では、それらは空白で表されています。線幅が 35mm で TeX が構築されているときに、段落box4が 2 行目にドロップされていることがわかります。49mm でちょうど収まります。図は、ボックスを表に挿入することでレンダリングされます。値を変更して試してみてください。手動で計算するには、すべてのグルーの正の値と負の値を加えて、伸縮性または収縮性を取得します。

\documentclass{article}
\usepackage{array,xcolor}
\fboxsep=0pt\fboxrule=0pt
\NewDocumentCommand\Fbox{m m}
{
 \colorbox{cyan}{\hbox to#1{box$_#2$\strut}}
}
\parindent0pt
\setlength\arraycolsep{0pt}
\long\def\maketable#1{\par\leavevmode
\begin{tabular}{l|@{}p{#1}@{}|@{}}
#1 &\Fbox{14mm}{1}\hskip\skipa  
\Fbox{15mm}{2}\hskip\skipb  
\Fbox{8mm}{3}\hskip
\skipc \Fbox{8mm}{4}
\end{tabular}
\smallskip
}
% set the skips
\newskip \skipa
\newskip \skipb
\newskip \skipc
\skipa=0mm plus 3mm minus 1mm
\skipb=0mm plus6mm minus 2mm
\skipc=0mm plus0mm minus 0mm
\begin{document}
%make the tables
\maketable{35mm}
\maketable{49mm}
\maketable{52mm}
\maketable{55mm}
\end{document}

関連情報