如何知道 TeX 中「膠水」的收縮極限?

如何知道 TeX 中「膠水」的收縮極限?

第 69 頁教材,有一個圖: 在此輸入影像描述

在第 70 頁教材,是說

膠水的收縮率絕不會超過其規定的收縮率。例如,我們插圖中的第一個膠水團永遠不會允許變得比 8 個單位寬更窄,並且 TEX 永遠不會縮小給定的水平列表以使其總寬度小於 49 個單位。

這裡作者是如何計算收縮極限的呢?

答案1

收縮以單位指定,如果你去,\setlength\baselineskip{15pt minus 2pt}那麼收縮是 2pt 並且最小尺寸是13pt它也可以是無限的filfill或者filll單位所以\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

在此輸入影像描述

我定義了兩條規則(一條寬度為 45pt,另一條寬度為 30pt)。我用膠水把規則放在一個寬度為 100pt 的水平盒子裡。

  • 在情況 1-3 中,兩條規則的總寬度為 90pt,因此黏合應收縮 10pt,因為其自然寬度為 20pt。

    • 案例 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。解釋了這一點這實際上不是真的,它可以延伸得更廣。

將所有寬度和空間相加,我們得到 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會下降到第二行。 49 毫米,恰到好處。該圖是透過在表格中插入方塊來呈現的。嘗試更改值。手動計算所有膠水將正數加在一起,負數加在一起,以獲得拉伸性或收縮性。

\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}

相關內容