Auf Seite 69 vonDas TeXbookgibt es eine Abbildung:
Auf Seite 70 vonDas TeXbook, heißt es
Der Kleber schrumpft nie mehr als die angegebene Schrumpfbarkeit. Beispielsweise darf der erste Kleberklecks in unserer Abbildung nie schmaler als 8 Einheiten werden, und TEX schrumpft die angegebene horizontale Liste nie so weit, dass ihre Gesamtbreite weniger als 49 Einheiten beträgt.
Wie berechnet der Autor hier die Schrumpfgrenzen?
Antwort1
Die Verkleinerung wird in Einheiten angegeben. Wenn Sie gehen, \setlength\baselineskip{15pt minus 2pt}
beträgt die Verkleinerung 2pt und die Mindestgröße ist 13pt
Es kann auch unendlich oder Einheiten sein fil
, also ist beispielsweise die Abkürzung fürfill
filll
\vss
\vskip 0pt plus 1fil minus 1fil
Antwort2
Hier ist ein Beispiel:
\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
Ich habe zwei Linien definiert (eine mit einer Breite von 45 pt und die andere mit einer Breite von 30 pt). Und ich habe die Linien mit einem Kleber in einem horizontalen Feld mit einer Breite von 100 pt zusammengefügt.
In den Fällen 1 bis 3 beträgt die Gesamtbreite der beiden Linien 90 pt. Der Kleber sollte also um 10 pt schrumpfen, da seine natürliche Breite 20 pt beträgt.
- Fall 1 und Fall 2 können das, weil ihre Schrumpfungsfähigkeit 15pt bzw. 10pt beträgt. Aber
- Fall 3 nicht, die Mindestbreite des Klebers beträgt 20pt-3pt = 17pt (deshalb
Overfull \hbox (7.0pt too wide) detected at line 7
wird eine Warnung ausgegeben.)
Im Fall 4 ist der Kleber
20pt plus 4pt minus 3pt
, was nicht bedeutet, dass die maximale Breite des Klebers 24pt beträgt. Tatsächlich darf sich Kleber beliebig weit ausdehnen, wenn er eine positive Dehnungskomponente hat. Und wie Sie im Screenshot sehen können, beträgt die Breite des letzten Klebers 100pt-30pt*2 = 40pt (Dehnungsbetrag ist 20pt > 4pt). Und dieser Fall gibt eineUnderfull \hbox (badness 10000)
Warnung aus.
Antwort3
Der erste Klecks Klebstoff ist space 9 stretch 3 shrink 1
, also kann er maximal 9 − 1 = 8 schmaler werden. (Sie könnten meinen, die breiteste Stelle sei 9 + 3 = 12, aber im Text auf Seite 70 direkt nach dem von Ihnen zitierten Teil wird erklärt, dass dies nicht stimmt und er sich noch weiter ausdehnen kann.)
Wenn wir alle Breiten und Zwischenräume addieren, erhalten wir 5 + 9 + 6 + 9 + 3 + 12 + 8 = 52 als natürliche Breite; wenn wir aber auch die Schrumpfungen einbeziehen, dann erhalten wir 5 + (9 − 1) + 6 + (9 − 2) + 3 + (12 − 0) + 8 = 49 als schmalste mögliche Breite.
So werden 52, 8 und 49 berechnet. (Die anderen Zahlen werden einfach aus dem Hut gezogen.)
Antwort4
Der folgende Code kann Ihnen eine Visualisierung dessen geben, was passiert. Es ist aufschlussreich, sich Klebstoffe als Federn vorzustellen, die sich ausdehnen oder zusammenziehen können, um eine Reihe von Kästchen in anderen Kästchen anzuordnen. Im folgenden Diagramm werden sie durch die weißen Bereiche dargestellt. Sie können beobachten, dass bei einer Zeilenbreite von 35 mm und beim Erstellen durch TeX ein Absatz box4
in eine zweite Zeile verschoben wird. Bei 49 mm passt er gerade so. Die Abbildung wird durch Einfügen der Kästchen in eine Tabelle gerendert. Experimentieren Sie mit der Änderung der Werte. Um alle Klebstoffe manuell zu berechnen, addieren Sie die positiven und negativen Werte, um die Dehnbarkeit oder Schrumpfbarkeit zu erhalten.
\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}