\heading{\TeX\ - Konzepte}
In diesem Kapitel sollen die Konzepte von \TeX\ erl"autert werden, die
die Grundlage f"ur das entwickelte Notensatzsystem sind. Dies ist im
wesentlichen das Box-Glue-Konzept f"ur den Seitenaufbau, das f"ur die
Konstruktion der Notenschriftelemente verwendet wurde, und der
Zeilen- und Seitenumbruchalgorithmus.
Alle anderen Konzepte (z.B. Definitionen von Makros und
die Definition und
Behandlung der internen Parameter) will ich als bekannt voraussetzen und
f"ur Informationen dazu auf das \TeX book \lit{\Texbook}
verweisen. Daf"ur seien die
obigen Konzepte ausf"uhrlicher dargestellt.
Das vorliegende Kapitel ist im wesentlichen eine Zusammenfassung der
Kapitel~14 und~15 des \TeX book unter Ber"ucksichtigung des Artikels
``Breaking Paragraphs Into Lines'' von D. E. Knuth und M. Plass
\lit\Knuth. Dabei wurden die verwendeten Begriffe: Box, Glue, Penalty,
Kern, Rule, Badness, Interline Glue und Interword Glue
als Fachbegriffe "ubernommen und nicht "ubersetzt.
\subheading{Basiselemente}
Eine \TeX-Seite wird im wesentlichen aus zwei verschiedenen
Basiselementen aufgebaut:
$$\align &\hbox{1. Box,}\cr&\hbox{2. Glue.}\endalign$$
Boxes k"onnen nebeneinander oder untereinander geheftet werden, wobei
sie durch Glue verbunden werden.
Die verschiedenen Formen, in denen Boxes und Glue auftreten k"onnen, und
die Verfahren, wie sie aneinandergeheftet werden, sollen
Gegenstand dieses Abschnitts sein.
\subsubheading{Die Box}
Eine \defi{Box}
ist ein zweidimensionales Gebilde von rechteckiger Gestalt, die
durch das Tripel $(w,h,d)\in\rz^3 $ vollst"andig
beschrieben ist. Dabei gibt $w$ die Breite, $h$ die H"ohe und $d$ die
Tiefe an. Durch $h$ und $d$ ist die Grundlinie (\tex{baseline}) oder auch
Schriftlinie der Box definiert. Der linke Endpunkt der Grundlinie ist
als Referenzpunkt (\tex{reference point}) ausgezeichnet.
\medskip
{\eightpoint
\setbox0=\hbox{$\uparrow$}
\setbox1=\hbox to \wd0{$\hss\mid\hss$} % with luck, they'll line up
\setbox2=\vbox{\copy0
\nointerlineskip \kern-.5pt \copy1
\nointerlineskip \kern-.5pt \copy1
\moveleft 1em\hbox{H"ohe}
\copy1 \nointerlineskip \kern-.5pt
\copy1 \nointerlineskip \kern-.5pt
\hbox{$\downarrow$}
\kern.2pt}
\setbox3=\vbox{\kern.2pt\copy0
\moveleft 1em\hbox{Tiefe}
\hbox{$\downarrow$}
\kern0pt}
\setbox4=\vtop{\kern-3pt % this cancels the null text above the samplebox
\hbox{\samplebox{\ht2}{\ht3}{6em}{}%
\kern-6em
\raise3pt\hbox to 6em{\hss Grundlinie\hss}}
\kern3pt
\arrows{6em}{Breite}}
\medskip\indent\hskip30pt
\setbox0=\hbox{$\vcenter{}$}% \ht0 is the axis height
\lower\ht0\hbox{Referenzpunkt$-$\kern-.2em$\rightarrow$\kern2pt}%
\raise\ht2\box4
\kern1.5em
\raise\ht2\vtop{\kern0pt\box2\nointerlineskip\box3}}
\medskip
\Beispiel
Die Box wird zur Beschreibung der Schriftelemente verwendet, z.B.
Buchstaben eines Zeichensatzes (\tex{characters}), aber auch Elemente,
die aus
mehreren Zeichen zusammen gesetzt sind, z.B. \`a oder eine mathematische
Formel $\root n \of {x^n+y^n}$. \item{}
Ein Spezialfall ist ein ausgef"ulltes
Rechteck, eine sogenannte \defi{Rule}.
\endBeispiel
\Bemerkung
F"ur alle Berechnungen werden nur die Werte von $w$, $h$ und $d$
verwendet, unabh"angig von Inhalt der Box. Viele Zeichen sind z.B. so
konstruiert, da\3 sie entweder die Box nicht ganz ausf"ullen oder
"uber den Rand hinaus ragen, wie z.B. bei \tex{kursiver} Schrift.
Wie sich sp"ater zeigen wird, ist dies eine n"utzliche Eigenschaft. Man
kann Boxes konstruieren, die nichts zur horizontalen Berechnung
beitragen und somit andere Zeichen "uberlappen.
\endBemerkung
Wie oben bemerkt, kann eine Box wiederum aus mehreren Elementen
bestehen. Diese Elemente k"onnen wiederum Boxes, aber auch Glue sein.
Man unterscheidet Boxes, deren Elemente horizontal aneinander gereiht
werden, von solchen, deren Elemente vertikal untereinandergeheftet
werden.
\subsubheading{Der Glue}
\defi{Glue}
beschreibt das Ausschlu\3material, das Hilfsmaterial zum F"ullen
der Zeilen. Glue mu\3 also wie der Ausschlu\3 beim Handsatz sowohl
erweiterbar als auch verringerbar sein, um gleiche Zeilenl"angen zu
erhalten. (F"ur die satztechnische Definition der Begriffe: Ausschlu\3,
Erweiterung und Verringerung, verweise ich auf das Buch von F. Genzmer,
``Das Buch des Setzers'' \lit{\genzmer}.)
Glue wird durch das Tripel $(w,y,z)\in\rz^3 $ vollst"andig
beschrieben. Dabei gibt die Gr"o\3e
$w$ den nat"urlichen Abstand (\tex{natural
space}) an, $y$ den Wert, um den der Abstand erweitert werden kann,
und $z$ den Wert, um den der Abstand verk"urzt werden
kann. D. E. Knuth und M. Plass \lit\Knuth\ beschreiben
die ``variablen'' Gr"o\3en $y$ und $z$ mit ``\tex{strechability}'' und
``\tex{shrinkability}''.
F"ur das folgende Zeilenumbruchverfahren ist es wichtig, da\3
die Gr"o\3en, die den Glue bestimmen, nach bestimmten Kriterien gew"ahlt
werden. Da
$w$ der Betrag ist, um den in horizontaler bzw. vertikaler Richtung
vorger"uckt (falls $w>0$) bzw. zur"uckgesetzt wird (falls $w<0$),
sollte dieser Wert
so gew"ahlt werden, da\3 der Abstand zwischen den Boxes
optisch gef"allig aussieht. Die ``variablen'' Gr"o\3en $y$ und $z$
sollten so gew"ahlt werden, da\3
beim Ausschlu\3 der Zeile der freie Raum $w+y$ bzw. $w+z$ noch akzeptabel
ist. Es sei dabei betont, da\3
$w$, $y$ und $z$ auch negative Werte annehmen k"onnen.
\Bemerkung
Dimensionen:\par
\item{}
Eine der leistungsf"ahigsten Eigenschaften des Glue-Konzeptes ist,
Streck- und Stauchwerte verschiedener St"arke angeben zu
k"onnen. Es gibt neben den gew"ohnlichen Dimensionsangaben, z.B. 10 \pt\
(s.\lit{\Texbook, Kapitel 10}),
drei Ma\3einheiten, mit denen ``unbegrenzter'' Glue beschrieben werden
kann. Diese werden in
Einheiten von \fil, \fill\ und \filll\ angegeben.
Im folgenden bezeichne \defi{Glue der Ordnung} $j\in\{0,\ldots,3\}
$
Glue, dessen Streck- bzw. Stauchwerte in Einheiten von
\pt, \fil, \fill, oder \filll\ angegeben wurden. Glue der
Ordnung 0 ist also ``begrenzter Glue''.
\item{}Im folgenden Ausschlu\3verfahren (\the\chap.2\XX)
wird die Wirkung der verschiedenen M"oglichkeiten, Glue anzugeben,
noch n"aher betrachtet.
\endBemerkung
Ein Spezialfall von Glue ist \defi{Kern}. Darunter versteht man einen
Freiraum, der nicht variabel ist. Er wird benutzt, um Zeichen zu einer
Einheit zu verbinden, z.B. f"ur das \TeX-Logo, wobei die einzelnen
Buchstaben T, E und X durch Kern ineinander geschoben sind.
Die Einf"uhrung von Kern im Unterschied zu Glue ohne Streck- und
Stauchwerte ist notwendig, um Glue, an dem eine
Zeile oder Seite umgebrochen werden darf, von Freiraum zu unterscheiden,
bei dem dies verboten ist. (Das \TeX-Logo kann nicht getrennt
werden.)
Ein weiterer Spezialfall f"ur Glue ist das Ausf"ullen von Leerraum mit
Boxes \verbatimon(|\leaders|).
Dabei wird die Box oder auch Rule so oft gesetzt, wie Glue
daf"ur vorhanden ist. Dies wird z.B. beim Auf{}f"ullen einer Zeile mit
Punkten benutzt \leaders\hbox to 5pt{\hss.\hss}\hfill.
\subsubheading{Kontrollsequenzen im Zusammenhang mit Box und
Glue}
Im folgenden seien einige Kontrollsequenzen angegeben. (Die Angaben in
eckigen Klammern ($\lit{ }$) bedeuten, da\3 diese Angabe optional ist.)
\subsubsubheading{Box-Kontrollsequenzen}
$\left \{{\hbox{\vo|\vbox|\voff}\atop\hbox{\vo|\vtop|\voff}}\right\}
\hbox{\vo| to |\voff}\text{\<Dimensionsangabe>}\{\text
{\<Material f"ur eine vertikale Liste>}\}$\par
\indent\hbox{\vo|\hbox to |\voff}\<Dimensionsangabe>$\{$\<%
Material f"ur eine horizontale Liste>$\}$\par
\verbatimon\rm
\indent\hbox{|\hrule |}$\lbrack$
|width | \<Dimensionsangabe>$\rbrack$%
$\lbrack$|height |\<Dimensionsangabe>$\rbrack$%
$\lbrack$|depth |\<Dimensionsangabe>$\rbrack$%
\par
\indent\hbox{|\vrule |}$\lbrack$%
|width |\<Dimensionsangabe>$\rbrack$%
$\lbrack$|height |\<Dimensionsangabe>$\rbrack$%
$\lbrack$|depth |\<Dimensionsangabe>$\rbrack$%
\par
\subsubsubheading{Glue-Kontrollsequenzen}
Da eine Box einen rechtwinkligen Umri\3 besitzt, k"onnen Boxes nur
horizontaler und vertikaler Richtung aneinandergeheftet werden.
Es besteht daher zun"achst keine M"oglichkeit,
Linien in beliebiger Richtung zu setzen. Dies ist jedoch f"ur den
Notensatz zur korrekten Darstellung der Balken notwendig.
Dieses Problem tritt bei allen
pixel-orientierten Graphiksystemen auf.
Mit dem \TeX-Konzept kann es gel"ost werden durch eine
geeignete Zerlegung der Linie in mehrere Rules, die passend
aneinandergeheftet werden.
Das folgende Beispiel zeigt einen Balken, der gegen die
Horizontale um 45 Grad geneigt ist, wobei die verwendeten Rules jeweils
1\pt\ breit sind. Mit
{\obeylines
\begindisplay
|\def\vr{\vrule width 1pt height 4pt depth 0pt}|\cr
|\def\diag#1#2{\length=#1 \gradient=#2pt \m=0|\cr
| \hbox{\loop\advance\length by -1 $\raise\m\gradient\hbox{\vr}$|\cr
| \advance\m by 1|\cr
| \ifnum\length>0 \repeat}|\cr
\enddisplay
}
\def\vr{\vrule width 1pt height 4pt depth 0pt}
\def\diag#1#2{\count1=0 \count2=#1 \dimen3=#2pt%
\hbox{\loop\advance\count2 by -1 $\raise\count1\dimen3\hbox{\vr}$%
\advance\count1 by 1
\ifnum\count2>0 \repeat}}
ergibt |\diag{20}{1}| : \hskip20pt{\diag{20}{1}}
Die Anwendung dieses Verfahrens f"ur den Notensatz
ist jedoch
sehr zeit- und speicherplatzintensiv, wenn eine hohe Aufl"osung erreicht
werden soll, da auf einem Notenblatt eine gro\3e Anzahl solcher Balken
zu setzen sind.
Da \TeX\ selbst keine bessere L"osung dieses Problems bietet, wurden
die notwendigen Balken``linien'' in einem Zeichensatz erzeugt (s. Kapitel
{\advance\chap4 \the\chap}).
\subheading{Verfahren zum Ausschlu\3 einer Box auf gew"unschte Breite
bzw. H"ohe}
\defi{Ausschlu\3} (\tex{setting the glue}) ist der Proze\3,
Glue innerhalb
einer Box so zu erweitern oder zu verringern, da\3 eine bestimmte
Breite erreicht wird.
Fa\3t man eine Zeile als horizontale Liste von Box- und
Glue-Elementen auf, so bedeutet Zeilenausschlu\3 das Vergr"o\3ern oder
Verkleinern der Glue-Elemente dieser Liste auf die gew"unschte
Zeilenl"ange. Ebenso bedeutet Seitenausschlu\3 das Erweitern oder
Verringern der Glue-Elemente einer Seite, die als vertikale Liste
aufgefa\3t werden kann.
\subsubheading{Ausschlu\3 einer horizontalen Box}
Der Ausschlu\3 einer horizontalen Box
(\hbox{\vo|\hbox|})
erfolgt in drei Schritten:
\item{1)}
Bestimmung der nat"urlichen Breite $x\in\rz$ (\tex{natural width}) der
Box und der zur Verf"ugung stehenden totalen Streck- und
Stauchbarkeit $Y$ bzw. $Z$.
\item{2)} Sei $\omega>0$ die gew"unschte Breite der Box. Dann wird der
Proportionalit"atsfaktor $r$ (\tex{glue set}) bestimmt, der $x$ in
$\omega$
"uberf"uhrt, abh"angig von der Ordnung des Ausschlu\3materials $i$
(\tex{glue set order}).
\item{3)}
Bestimmung der H"ohe und Tiefe der neuen Box und Festlegung ihres
Referenzpunktes.
\medskip
Diese sollen im folgenden n"aher erl"autert werden.
Seien $x_1,\ldots,x_m$ die Basiselemente der horizontalen Liste
und $(w_1,y_1,z_1),\ldots ,(w_m,y_m,z_m)$ die zu\-ge\-h"o\-ri\-gen
Tripel, wobei, falls ein $x_j, j\in \{1,\ldots,m\}$ eine Box oder Kern
beschreibt, die Variablen $y_j$ und
$z_j$ verschwinden. Dann erh"alt man die
na\-t"ur\-liche Breite
durch Aufsummieren aller na\-t"ur\-lichen Ab\-st"ande:
$x=\sum_{j=1}^m w_j$.
Die totale Streckbarkeit $Y$ bzw. Stauchbarkeit $Z$ ergibt sich
ebenfalls durch Bilden von
$Y=\sum_{j=1}^m y_j$ und $Z=\sum_{j=1}^m z_j$. Da die $y_i$ bzw $z_i$
jeweils Werte verschiedener Ordnungen (im Sinne von \the\chap.1.2)
darstellen,
k"onnen diese
Summen nach den jeweiligen Einheiten aufgespalten werden, d.h. in
$$Y=Y_0+Y_1\fil+Y_2\fill+Y_3\filll$$
und
$$Z=Z_0+Z_1\fil+Z_2\fill+Z_3\filll\;,$$
wobei $Y_k$ bzw. $Z_k$, $k\in\{0,\ldots,3\}$ Anzahl der Einheiten von
Glue der Ordnung $k$
angeben. Dabei bezeichnet $k=0$ ``begrenzten''
Glue (in Einheiten von z.B. \pt).
Die \defi{Ordnung des Ausschlu\3materials}
$i$ wird definiert als:
$$i:=\cases 0\;,&\text{falls f"ur alle }k\in\{0,\ldots,3\}\text{ gilt: }
Y_k=0\\\max_{k\in\{0,\ldots.3\}}\{k,Y_k\ne0\}\;,&
\text{sonst}\endcases$$bzw.
$$i:=\cases 0\;,&\text{falls f"ur alle }k\in\{0,\ldots,3\}\text{ gilt: }
Z_k=0\\\max_{k\in\{0,\ldots.3\}}\{k,Z_k\ne0\}\;,&
\text{sonst}\;.\endcases$$
\medskip
Der Proportionalit"atsfaktor $r$ berechnet sich wie folgt:
\hfil\break
Sei $\omega>0$ die gew"unschte Breite der Box.
F"ur $x= \omega$ gilt: $r=0$ und jeder Glue erh"alt seinen
nat"urlichen Abstand.
F"ur $x< \omega$ ist eine Erweiterung erforderlich und es gilt:
$$r= \cases (\omega -x)/Y_i,&\text{falls $i\ne0$,}\\
(\omega -x)/Y_0,&\text{falls $i=0$ und $Y_0\ne0$,}\\
0, &\text{falls $i=0$ und $Y_0=0$.}\endcases$$
F"ur $x> \omega$ ist ein Verringern erforderlich und es gilt:
$$r= \cases (x -\omega )/Z_i,&\text{falls $i\ne0$,}\\
(x -\omega )/Z_0,&\text{falls $i=0$ und $((x-\omega)\le Z_0
$,}\\
0,&\text{falls $i=0$ und $Z_0=0$,}\\
1,&\text{falls $i=0$ und $(x-\omega)>Z_0$.}\endcases$$
\medskip
Damit ergibt sich f"ur jeden Glue $(w,y,z)$ der horizontalen Liste mit
einem Streckwert $y$ von $j$-ter Ordnung und einem
Stauchwert $z$ von $k$-ter Ordnung die neue Breite
\item{a)}bei Erweiterung: $\; w_{{\rm neu}}=\cases w+r\cdot y\;,&
\text{f"ur $j=i$,}\\
w\;,&\text{sonst,}\endcases$\par
\item{b)}bei Verringerung: $w_{{\rm neu}}=\cases w-r\cdot z\;,&
\text{falls $k=i$,}\\
w\;,&\text{sonst.}\endcases$
\Bemerkung
\item{1)}Da die Glue-Elemente $w$, $y$, $z$ auch negative Werte annehmen
k"onnen, ist es m"oglich, da\3 die Werte f"ur $Y$ und $Z$ auch negativ
werden k"onnen. Dies soll jedoch ausgeschlossen sein, da $\omega$ nur
positive Werte annimmt.
\item{2)}Der Glue wird nur erweitert bzw. verringert, falls die
zugeh"orige Ordnung des Glue der Ordnung des Ausschlu\3materials
$i$ entspricht. Das Einf"ugen von Glue hoher Ordnung kann
also eine Erweiterung oder Verringerung an anderen Stellen
unterdr"ucken. Ebenso kann es vorkommen, da\3 Glue h"oherer Ordnung
ausgel"oscht wird.
\endBemerkung
\medskip
Alle Boxelemente werden so aneinandergereiht, da\3 ihre
Referenzpunkte auf einer Horizontalen liegen. Die Grundlinie der neuen
Box ist demnach die gemeinsame Grundlinie der inneren Elemente. Die
H"ohe bzw. Tiefe der neuen Box ergibt sich als der Maximum der Tiefen
bzw. H"ohen der eingeschlossenen
Boxes. Eine horizontale Box
kann demnach keine negative H"ohe bzw. Tiefe besitzen jedoch eine
negative Breite.
\Bemerkung
Um bei der Eingabe von Texten nicht hinter jedem Wort eine
Kontrollsequenz
einf"ugen zu m"ussen, die den Zwischenraum zum n"achsten Wort angibt,
wird das erste Leerzeichen hinter einem Wort als
Glue interpretiert.
(Gleiches kann mit \hbox{{|\|\tt\char`\ }} erreicht werden.)
Der Wert des Glue richtet sich nach dem
dem aktuell g"ultigen Zeichensatz (\defi{Interword Glue}).
Jedem Zeichensatz ist ein solcher Glue zugeordnet.
In einem Zeichensatz, der f"ur Textsatz verwendet wird,
entspricht der nat"urliche Abstand
der gew"unschten Breite eines Leerzeichens.
Da bei mathematischen
Formeln ein anderer Ausschlu\3 verwendet wird und einige
mathematische Zeichen (z.B. gro\3e Klammern) aus mehreren Elementen der
mathematischen Zeichens"atze zusammengesetzt werden, ist der
{Interword
Glue} in diesem Fall mit |0pt plus 0pt minus 0pt| vorbelegt.
Der {Interword Glue} kann
durch "Andern des Wertes des Parameters |\spaceskip|
ver"andert werden.
Verschwindet dieser Wert nicht, so wird der Wert
dieses Parameters an Stelle des Glue des aktuellen Fonts eingef"ugt.
Da im Notensatz der Glue abh"angig vom Notenwert der vorangegangenen
Note gesetzt werden mu\3, ist dies eine M"oglichkeit, den Glue zwischen
den Noten zu variieren.
\endBemerkung
\verbatimon
\subsubheading{Beispiele und Anwendungen zum horizontalen Ausschlu\3}
\item{1)}Im Notensatz ist es oft notwendig, die Breite eines
oder mehrerer Zeichen zu ignorieren (z.B. f"ur die Oktavstellung von
Versetzungszeichen (s. {\advance\chap3 \the\chap}.1),
f"ur die Textunterlage ({\advance\chap5 \the\chap}.2) oder auch
f"ur die Unterlage des Notenliniensystems).
Dies ist eine einfache Anwendung des
Ausschlu\3verfahrens. Man kann eine Box der Breite Null erzeugen, wobei
der Boxinhalt links- oder rechts"uberlappend erscheint. Das Prinzip soll
am mathematische Zeichen $\ne$ demonstriert werden. Es kann
erzeugt werden durch die Eingabe
\begindisplay
|\hbox to 0pt{/\hskip0pt minus1fil}=|
\enddisplay
\item{}Durch den Glue der Ordnung 1 ist gen"ugend
Stauchm"oglichkeit vorhanden. Das Zeichen |/| wird gesetzt, ohne jedoch
in die horizontale Berechnung einzugehen. Es wird also rechts "uber den
``Rand'' der Box hinausgeschoben. Anschlie\3end wird das
Gleichheitszeichen gesetzt, und man erh"alt $\ne$.
\item{}Umgekehrt kann das Ergebnis auch erreicht werden durch die Eingabe
\begindisplay
|/\hbox to 0pt{\hskip0pt minus1fil=}|
\enddisplay
\item{}
In diesem Fall wird der Inhalt der Box "uber den linken ``Rand'' der
Box hinausgeschoben.
\item{2)} Die Zeichen |ab| k"onnen in einer Zeile zentriert werden durch
die Eingabe
\begindisplay
|\hbox to\hsize{\hskip0pt plus1fil ab\hskip0pt plus1fil}|
\enddisplay
\item{}Man erh"alt
\hbox to\hsize{\hskip\iindent\hskip0pt plus1fil \bf ab\hskip0pt plus1fil}
\item{}
Auf beiden Seiten der Zeichen befindet sich Glue der
Ordnung 1. Die Box wird auf Zeilenbreite (|\hsize|)
ausgeschlossen, indem der zur Verf"ugung stehende Raum zu gleichen
Teilen vor |a| bzw. nach |b| aufgeteilt wird.
Verwendet man
\begindisplay
|\hbox to\hsize{\hskip0pt plus2fil ab\hskip0pt plus1fil}|
\enddisplay
\item{}so erh"alt man\par\nobreak
\hbox to\hsize{\hskip\iindent\hskip0pt plus2fil \bf ab\hskip0pt plus1fil}
\item{}
In diesem Fall wird der Glue im Verh"altnis 2:1 aufgeteilt. F"ugt man
zwischen |a| und |b| Glue der Ordnung 2 ein durch die
Eingabe
\begindisplay
\hskip-20pt|\hbox to\hsize{\hskip0pt plus2fil a\hskip0pt plus1fill
b\hskip0pt plus1fil}|
\enddisplay
\item{}so erh"alt man:\par
\hbox to\hsize{\hskip\iindent\hskip0pt plus2fil \bf a\hskip0pt plus1fill
b\hskip0pt plus1fil}
\item{}In diesem Fall werden also die Streckwerte der
Ordnung 1
unterdr"uckt und die Zeichen jeweils an den linken bzw. rechten
Zeilenrand geschoben.
Die Ausl"oschung von Glue h"oherer Ordnung sei mit dem folgenden Beispiel
demonstriert. Die Eingabe
\begindisplay
\hskip-20pt|\hbox to\hsize{\hskip0pt plus1fill a\hskip0pt plus1fil
b\hskip0pt plus-1fill}|
\enddisplay
\item{}ergibt
\hbox to\hsize{\hskip\iindent\hskip0pt plus1fill \bf a\hskip0pt plus1fil
b\hskip0pt plus-1fill}
\item{3)} Als weiteres Beispiel sei ein spezielles Notensatzproblem
angef"uhrt:
\item{}
Unabh"angig von der Umgebung, in der eine Note auftritt, soll
die Breite der Noten
immer auf gleiche Art in
die horizontale Rechnung eingehen, d.h. gleich auch f"ur Noten mit und
ohne Hilfslinien (dies sind
kurze Notenlinien, die die Bestimmung der Tonh"ohe
einer Note erleichtert, die nicht au\3erhalb des
Liniensystems plaziert wurde)
denn die Breite solcher Hilfslinien soll nicht
ber"ucksichtigt werden.
\verbatimon
\item{}Die Hilfslinien sind (horizontal) zentriert den Noten zu
unterlegen. Dies geschieht am einfachsten, indem man Note und Hilfslinien
in je einer Box der Breite Null zentriert und diese zusammen zu einer
Box der Breite |\nhw| ausschlie\3t.
Mit
\begindisplay
|\hbox to\nhw{\hskip0pt plus1fil minus 1fil|\cr
|\hbox to0pt{\hskip0pt minus1fil |\<Note>|\hskip0pt minus1fil}|\cr
\hskip2\iindent
|\hbox to0pt{\hskip0pt minus1fil |\<Hilfslinien>|\hskip0pt minus1fil}|\cr
|\hskip0pt minus1fil}|
\enddisplay
\item{}erh"alt man z.B. \quad \v{14}\global\sk=0pt
\subsubheading{Ausschlu\3 einer vertikalen Box}
Der Ausschlu\3 einer vertikalen Box
(\hbox{\vo |\vbox| oder |\vtop|})
verl"auft "ahnlich wie bei der
horizontalen Box, jedoch erfolgt die Aneinanderheftung nach einem
komplizierteren Schema.
Ist kein Glue angegeben, wird der Zeilenzwischenraum nach folgendem
Verfahren berechnet:
Um einen gleichm"a\3igen Ausschlu\3 zu erhalten, sollte der Abstand
zwischen den Grundlinien m"oglichst gleich bleiben.
Sei der gew"unschte Abstand der Grundlinien
(\hbox{\vo|\baselineskip|\voff})
zweier
benachbarter Zeilen durch Glue der Form $b$ |plus| $y$ |minus| $z$
(s. \the\chap.3.2)
gegeben. Sei $l$ Glue (|\lineskip|),
der eingef"ugt werden soll, falls der
berechnete Zwischenraum den Wert $\bar l$
(\hbox{\vo|\lineskiplimit|\voff}) unterschreitet. Weiter sei
$d$ die Tiefe der oberen Box und $h$ die H"ohe der unteren Box.
Dann ergibt sich f"ur den Glue, der zwischen den Boxes eingef"ugt wird
(\defi{Interline Glue}):
\item{1)} Falls $d\le-1000\pt$, wird kein {Interline Glue}
eingef"ugt.
\item{2)} Falls $d>1000\pt$ und $(b-d-h)\ge \bar l$,
wird ein {Interline Glue} von $(b-d-h)$ |plus| $y$ |minus| $z$
vor der unteren Box eingef"ugt.
\item{3)}Gilt weder 1) noch 2), wird $l$ als {Interline Glue}
eingef"ugt.
\par
\midinsert
\medskip
{\eightpoint
\setbox0=\hbox{$\uparrow$}
\setbox1=\hbox to \wd0{$\hss\mid\hss$} % with luck, they'll line up
\setbox2=\vbox{\copy0
\nointerlineskip \kern-.5pt \copy1
\moveleft0em\hbox{$h$}%
\copy1 \nointerlineskip \kern-.5pt
\hbox{$\downarrow$}%
\kern.2pt}
\setbox3=\vbox{\kern.2pt\copy0
\moveleft 0em\hbox{$d$}%
\hbox{$\downarrow$}%
\kern0pt}
\setbox4=\vbox{\kern.2pt\copy0
\moveleft 1em\hbox{$(b-d-h)$}%
\hbox{$\downarrow$}%
\kern0pt}
\setbox5=\vbox to 0pt{\vss\copy0
\nointerlineskip \kern-.5pt \copy1
\nointerlineskip \kern-.5pt \copy1
\nointerlineskip \kern-.5pt \copy1
\nointerlineskip \kern-.5pt \copy1
\nointerlineskip \kern-.5pt \copy1
\moveleft0em\hbox{$b$}
\copy1 \nointerlineskip \kern-.5pt
\copy1 \nointerlineskip \kern-.5pt
\copy1 \nointerlineskip \kern-.5pt
\copy1 \nointerlineskip \kern-.5pt
\hbox to \wd0{$\hss\vrule height4pt\hss$}\nointerlineskip \kern-.5pt
\hbox{$\downarrow$}%
\kern.2pt}
\setbox6=\vtop{\kern-3pt % this cancels the null text above the samplebox
\hbox{\samplebox{\ht2}{\ht3}{6em}{}%
\kern-6em
\lower\ht3\hbox to 6em{\hskip1em \vtop{\copy3\nointerlineskip
\copy4}\hss}}%
\kern-3.4pt
\hbox{\samplebox{\ht2}{\ht3}{6em}{}%
\kern-6em
\hbox to 6em{\hbox to 0pt{\hss\box5\hskip1em}\hskip1em \copy2\hss}}%
}
\hbox to \hsize{\hfil\box6\hfil}
}
\medskip
\centerline{{\eightrm Skizze zum Verdeutlichen des Interline Glue
(\the\chap.2.3) }}
\endinsert
\goodbreak
\Bemerkung
\item{1)}
Vor oder hinter einer Rule wird dieser Algorithmus nicht angewendet.
\item{2)}Dieses Verfahren wurde so konzipiert, da\3
zwischen den Zeilen
immer ein Mindestabstand eingehalten wird,
falls der nat"urliche Abstand von $l$ gleich $\bar l$ ist.
Jedoch k"onnen durch
Ver"andern der Parameter $b$, $l$, $\bar l$ auch andere Effekte erzielt
werden, z.B. wird mit |\baselineskip -10000pt| |\lineskip 0pt| und
|\lineskiplimit 0pt| kein {Interline Glue}
zwischen den Zeilen eingef"ugt.
%Dies wird durch die Kontrollsequenz |\offinterlineskip| erreicht.
\endBemerkung
\goodbreak
Die vertikale Box wird nach folgendem Verfahren
ausgeschlossen:\item{1)}Bestimmung der ``nat"urlichen H"ohe'', der Tiefe
und Breite sowie des Referenzpunktes,
\item{2)}Bestimmung des Proportionalfaktors $r$.
\medskip
Dazu werden die
Elemente einer vertikalen Liste werden unter
Einbeziehung des {Interline Glue}
so untereinander geheftet, da\3 ihre
Referenzpunkte auf einer Vertikalen liegen.
{}Der neue Referenzpunkt ist, falls
|\vbox| verwendet wurde, der
Referenzpunkt der untersten inneren Box, bei |\vtop| der der obersten.
{}Das genaue Verfahren zur Bestimmung des Referenzpunktes, der
nat"urlichen H"ohe $h$ und Tiefe $d$ bei |\vbox| lautet:
\item{I)} Enth"alt die Liste keine Box, gilt $d=0\pt$.
\item{} Ebenso, falls das letzte Element keine Box ist.
Der neue
Referenzpunkt ist also in diesem Fall die linke untere Ecke der
umfassenden Box.
\item{}
Ist das letzte Element eine Box mit Tiefe $\bar d$, gilt $d=\bar d $.
\item{II)}
Ist $d>\hbox{\vo|\boxmaxdepth|\voff}$, wobei dies die Tiefe
ist, die eine Box h"ochstens annehmen kann, gilt
$d:=\hbox{\vo|\boxmaxdepth|\voff}$.
Dieser Paramter wurde eingef"uhrt, damit die Box der letzten Zeile
vollst"andig auf der Seite erscheint.
\item{}Der "Uberschu\3 wird in diesem Fall
zur nat"urlichen H"ohe addiert, was eine Verschiebung des
Referenzpunktes nach unten bewirkt.
\item{III)}Die Breite der neuen Box ist das Maximum des Abstandes
einer eingeschlossenen Box rechts vom Referenzpunkt der neuen Box.
Die Breite einer vertikalen Box ist also immer nicht-negativ.
\medskip
Der Proportionalfaktor $r$ wird wie bei einer horizontalen Box berechnet
in Abh"angigkeit von der Differenz nat"urlicher
H"ohe $h$, die sich aus dem Maximalabstand der inneren Boxes
oberhalb der Grundlinie zur Grundlinie ergibt,
und gew"unschter H"ohe $\omega$
und den zur Verf"ugung stehenden Dehn- und Stauchm"oglichkeiten.
\medskip
Das genaue Verfahren zur Bestimmung des Referenzpunktes, der
nat"urlichen H"ohe $h$ und Tiefe $d$ bei \hbox{\vo|\vtop|\voff} lautet:
\item{i)}Die Konstruktion und der Ausschlu\3 erfolgt wie in den Regeln
f"ur \hbox{\vo|\vbox|\voff}.
Dabei wird die nat"urliche H"ohe $\bar d $ und Tiefe $\bar h$ bestimmt.
\item{ii)}F"ur die endg"ultige H"ohe $h$ gilt:
$$h=\cases 0\pt\;,&
\text{falls das 1. Listenelement keine Box ist,}\\
\text{die H"ohe der obersten Box, }&\text{sonst.}\endcases$$
\item{iii)}Der Referenzpunkt wird so verschoben, da\3 gilt:
$d:= \bar h+\bar d-h$.
\subsubheading{Beispiele und Anwendungen zum vertikalen Ausschlu\3}
Im folgenden sollen die Unterschiede von |\vtop| und
|\vbox| bei verschiedenen Anwendungen verdeutlicht werden.
\item{1)}Als einfache Anwendung ergibt sich zun"achst der Aufbau des
Liniensystems. Da nach Rules kein Interline Glue eingef"ugt wird, ergibt
sich das Liniensystem durch f"unfmaliges Auf{}f"uhren einer Rule der
L"ange der Zeilenbreite, die durch Kern voneinander getrennt sind:
\begindisplay
|\vbox{|\<Linie>\<Kern>\<Linie>\<Kern>\<Linie>\<Kern>\<Linie>\<Kern>%
\<Linie>|}|
\enddisplay
\item{}
Dies ergibt eine Box, deren Grundlinie die unterste Linie ist, ohne Tiefe
und mit einer H"ohe vom F"unf{}fachen
der Linienh"ohe und Vierfachen des Kern.
W"urde man in diesem Beispiel |\vtop| verwenden, so erg"abe sich als
Grundlinie die oberste Linie, wobei die H"ohe der Box die H"ohe der
Linie betr"agt, und die Tiefe das Vierfache
der Linienh"ohe und des Kerns. Dies wird zum Beispiel bei der
Konstruktion der Hilfslinien unterhalb des Liniensystems ben"otigt.
\item{2)}
Das Ansetzen der F"ahnchen an den Notenhals:
\item{}Da die Notenhalsl"angen variabel sind (s. Kapitel %\XX
{\advance\chap3 \the\chap}), k"onnen
die F"ahnchen nicht zusammen mit dem Notenhals als ein Zeichen in den
Zeichensatz aufgenommen werden. Es gilt nun, eine Konstruktion zu finden,
so da\3 die F"ahnchen am jeweiligen Notenhalsende positioniert werden.
\item{}Dies kann f"ur den nach oben gestielten Hals durch eine
|\vbox|-Konstruktion und f"ur den nach unten gestielten Hals durch eine
|\vtop|-Konstruktion erreicht werden. Zu beachten ist, da\3 in beiden
F"allen kein Interline Glue eingef"ugt werden darf.
\begindisplay
|\vbox to|\<Notenhalsl"ange>|{\hbox{}|\<F"ahnchen>%
|\vskip0pt plus 1fil}|\cr
|\vtop to|\<Notenhalsl"ange>|{\hbox{}\vskip0pt plus1fil|\<F"ahnchen>%
|\hbox{}}|
\enddisplay
\item{}Nach den oben angegebenen Regeln f"ur den Ausschlu\3 der
vertikalen Box ist also der Referenzpunkt die linke untere Ecke
der umfassenden Box, die zu der H"ohe der aktuellen Notenhalsl"ange
ausgeschlossen wurde, so da\3, unabh"angig von der H"ohe und Tiefe
des F"ahnchens, der obere Rand des F"ahnchens mit dem oberen Rand der
Box abschlie\3t. Umgekehrt ist dies im zweiten Fall. Diese Box erh"alt
als Tiefe die Notenhalsl"ange, w"ahrend die H"ohe verschwindet. Der
Referenzpunkt ist also die obere linke Ecke der Box.
\item{3)}F"ur das genaue Ansetzen der Balken an den Notenhals ist es
notwendig, die Box, in der der Balken zusammengesetzt wurde (s.
\the\chap.1.4), so auszuschlie\3en, da\3 die H"ohe bzw. Tiefe des
Balkens nicht in die
vertikale Berechnung eingeht.
Die Box, in der der Balken zusammengesetzt wurde, hat nach den obigen
Regeln als Breite $w$ den (horizontalen) Abstand des ersten und letzten
Notenhalses der zu verbalkenden Noten. Die H"ohe ergibt sich als Produkt
der Steigung des Balkens mit $w$ zuz"uglich der
Balkenst"arke. Die Tiefe betr"agt
in diesem Fall gleich Null. F"ur die weitere Plazierung anderer
Notenschriftelemente in der N"ahe
einer solchen Box sind diese Ausma\3e hinderlich.
Es reicht aus, den Balken so zu setzen, da\3 die H"ohe nicht in die
Berechnungen eingeht. Dazu wird die Box noch einmal in einer vertikalen
Box ausgeschlossen, so da\3 der Referenzpunkt der ``Balkenbox'' mit dem
Ansatzpunkt des Balkens "ubereinstimmt und die Box keine H"ohe und keine
Tiefe besitzt.
Dies kann "ahnlich wie in den Beispielen
zum horizontalen Ausschlu\3 durch Einf"ugen von Glue der
Ordnung 1 erreicht werden.
\item{}
F"ur positive Steigungen wird dazu die
|\vbox|-Konstruktion
\begindisplay
|\vbox to0pt{\vskip0pt minus1fil\diag{20}{1}\hbox{}}|,
\enddisplay\item{}
verwendet,
w"ahrend f"ur negative Steigungen die
|\vtop|-Konstruktion
\begindisplay
|\vtop to0pt{\hbox{}\diag{20}{1}\vskip0pt minus1fil}|
\enddisplay
benutzt wird. Der so gewonnene Ansatzpunkt soll in der folgenden Skizze
verdeutlicht werden.
\par\par\vskip30pt
{\offinterlineskip
\hbox to\hsize{\hfill \leaders\hrule\hskip20pt
\hbox to0pt{\vbox to0pt{\vskip0pt minus1fil\diag{20}{1}\hbox{}}\hss}%
\leaders\hrule\hskip20pt
\hbox to0pt{\vtop to0pt{\hbox{}\diag{20}{-1}\vskip0pt minus1fil}\hss}%
\leaders\hrule\hskip40pt\hfill}}
\vskip20pt
\item{}Weitere Beispiele im Zusammenhang findet man
in den Notenbeispielen von Kapitel {\advance\chap4 \the\chap}
und im Anhang A.
\subheading{Der Zeilenumbruchalgorithmus}
F"ur ein Textsatzsystem ist es notwendig, ein Verfahren bereitzustellen,
das eine Folge von Schriftelemen\-ten, d.h. einen Absatz, in Zeilen
einteilt, so da\3 ein gleich\-m"a\3iges Bild entsteht.
Zu l"osen ist also das Optimierungsproblem:
{\leftskip30pt \sl
Finde eine Folge von Umbruchpunkten,
so da\3 der gesamte Absatz ``m"oglichst gleichm"a\3ig'' umbrochen
wird.\par}
Ob ein Absatz (\tex{paragraph}) gut ausgeschlossen ist, wird nach drei
Kriterien beurteilt:
\item{$\bullet$}Ist ein Bruch der Zeile an \disp{dieser} Stelle geeignet?
\item{}Dies ist ein lokales Kriterium. Es wird bewertet, ob zum Beispiel
eine Formel ung"unstig getrennt wurde.
\item{$\bullet$}Ist der Ausschlu\3 der Zeile angenehm?
\item{}Dies ist ein globales Kriterum f"ur die Zeile. Bewertet wird, ob
z.B. eine Zeile zu locker oder zu eng ausgeschlossen wurde.
\item{$\bullet$}Gibt es gro\3e Unterschiede im Ausschlu\3 benachbarter
Zeilen?
\item{}Bewertet wird, ob z.B. eine Zeile eng ausgeschlossen wurde und
die folgende sehr locker.
Es ist also eine Bewertungsfunktion gesucht, die diese Kriterien
ber"ucksichtigt, und das Optimierungsproblem wird durch Minimierung
dieser Bewertungsfunktion gel"ost.
\subsubheading{Die Penalty}
D. E. Knuth f"uhrt ein weiteres Basiselement
ein, das eine Bewertung nach dem ersten Kriterium er\-m"oglicht. Die
\defi{Penalty} $p\in\rz$ beschreibt die ``"asthetischen Kosten'' f"ur
einen Umbruch an einer Stelle. Kleine Penalty-Werte bedeuten dabei
einen g"unstigen Umbruch, gro\3e einen ung"unstigen. \par
F"ur
$p\le-10\,000$ wird erzwungen, da\3 die Zeile an dieser Stelle
gebrochen wird,
w"ahrend $p\ge10\,000$ dies verhindert.
Ein Spezialfall ist eine Penalty, der eine Breite $w$ zugeordnet ist.
Diese wird im Falle eines Umbruchs ber"ucksichtigt. Mu\3 z.B. ein Wort
getrennt werden, so ist $w$ die Breite des einzuf"ugenden
Trennungsstriches `-'. Es ist also m"oglich, zwischen Text, der
innerhalb einer Zeile gesetzt werden soll, und Text, der am Zeilenrand
auftritt, zu unterscheiden und ihm eine andere Bewertung zuzuordnen.
Das zugeh"orige Kommando lautet:
\begindisplay
\hbox{\vo|\discretionary{|\voff}\<pre-break text>|}|%
|{|\<post-break text>|}{|\<no-break
text>|}|\;,\enddisplay
wobei die jeweiligen Textelemente vom Typ Box oder Kern sein m"ussen.
Wird die Zeile and dieser Stelle gebrochen,
wird der \tex{pre-break text} am Zeilenende und
der \tex{post-break text} am neuen Zeilenanfang eingef"ugt. Ist dies
nicht der Fall, so wird der \tex{no-break text} gesetzt. Der Wert der
Penalty an einem \tex{discretionary}-Kommando ist der Wert des
Parameters \hbox{\vo|\hyphenpenalty|\voff},
falls ein \tex{pre-break text} angegeben wurde,
und der Wert des Parameters \hbox{\vo|\exhyphenpenalty|\voff}, falls der
\tex{pre-break text} fehlt.
\goodbreak
\subsubheading{Vereinbarung}
Im folgenden beschreibe die Folge \folg xn einen Absatz, wobei die
\folgi xjn Basis-Elemente sind. Die Folge \folgi tjn gebe den Typ des
jeweiligen Basis-Elementes an, d.h.
$t_j=\tbox$, falls $x_j$ eine Box\footnote{$^*$}{\noindent\verbatimon
F"ur die folgenden
"Uberlegungen bezeichne \tbox\ alle nicht entfernbaren Elemente. Dazu
geh"oren: Box-Elemente, wie sie in \XX\the\chap.1.1 beschrieben wurden,
|\discretionary|-Komandos
sowie |\special|-,
|\mark|-, |\vadjust|-
und
|\insert|-Kommandos,
die im \TeX-Book \lit{\Texbook} n"aher beschrieben
sind.}
ist,
$t_j=\tglue$, falls $x_j$ Glue ist,
$t_j=\tkern$, falls $x_j$ Kern ist und
$t_j=\tpenalty$, falls $x_j$ eine Penalty ist.
\folg wn , \folg yn und \folg zn seien
die jeweils zugeh"origen Attribute wie in \the\chap.1.2\XX, wobei
$y_j=z_j=0$ f"ur $t_j=\tbox$ oder $t_j=\tkern$ oder $t_j=\tpenalty$.
\subsubheading{Definition der Umbruchpunkte}
Ein \defi{m"oglicher Umbruchpunkt} ist ein Index $e\in\{1,\ldots,n\}$,
f"ur den eine der folgenden Bedingungen (I)--(IV) erf"ullt ist:
\item{(I)} $t_e=\tglue$ und $t_{e-1}=\tbox$,
\item{(II)} $t_e=\tkern$ und $t_{e+1}=\tglue$,
\item{(III)} $t_e=\tpenalty$, wobei $w_e=0$,
\item{(IV)} $x_e$ ist ein \tex{discretionary}-Kommando.
Jedem Umbruchpunkt wird eine Penalty zugewiesen.
Dabei ist f"ur die F"alle
(I) und (II) $p_e=0$. F"ur (III) ist $p_e$ der Wert von $x_e$.
Der Wert der Penalty von (IV) ist, wie oben erw"ahnt, der
Wert von \hbox{\vo|\hypenpenalty|\voff}
bzw. von \hbox{\vo|\exhyphenpenalty|\voff}.
Nicht jeder Umbruchpunkt ist jedoch als Zeilenendpunkt geeignet,
falls dadurch z.B. die
Zeile zu locker oder zu eng ausgeschlossen werden m"u\3te. "Ubersteigt
die Bewertung des Zeilenausschlusses (s. \the\chap.3.4\XX)
eine bestimmte Toleranzgrenze (i.e. der
Wert von \hbox{\vo|\tolerance|\voff}),
so wird dieser Umbruchpunkt aus der Liste der
m"oglichen Umbruchpunkte entfernt. Ein Punkt, dessen Bewertung kleiner
als die Toleranzgrenze ausf"allt, hei\3t \defi{legaler Umbruchpunkt}.
\subsubheading{Bewertung der G"ute des Zeilenausschlusses}
Sei $r$ der zum Zeilenausschlu\3 geh"orige Proportionalfaktor
(s. \the\chap.2.1\XX)
mit der zugeh"origen Ordnung $i$ des Ausschlu\3materials
der Zeile. Die G"ute des Zeilenausschlusses wird quantitativ durch die
folgende Funktion ausgedr"uckt:
$$\beta(r,i)=\cases 0,&i\ne0\,,\\\min(100\,r^3,10000),&i=0\,.\endcases$$
D. E. Knuth bezeichnet den Wert $\bar\beta=\beta(r,i)$ als
\defi{Badness} der Zeile.
Diese Funktion ist heuristisch so festgelegt worden, da\3 sie f"ur
kleine $r$ niedrige Werte liefert und f"ur gr"o\3ere $r$ schnell
anw"achst.
Mit dieser Funktion k"onnen nun die Zeilenausschl"usse klassifiziert
werden:
{\advance\iindent by 40pt
\item{$\bar\beta>100$}
Dieser Wert kann nur durch eine Erweiterung der Zeile
erreicht werden. In diesem Fall gilt $r>1$. Dies bedeutet eine
Streckung um "uber 100\% der totalen Streckbarkeit.
Eine solche Zeile wird als \disp{sehr locker} (\tex{very loose})
klassifiziert.
\item{$12.5<\bar\beta\le100$}In diesem Fall gilt $0.5\le r\le 1$.
Es ist eine
Streckung bzw. Stauchung um mindestes 50\% der totalen Steckbarkeit bzw.
Stauchbarkeit notwendig.
Die Zeile wird daher bei Erweiterung als \disp{locker}
(\tex{loose}) und bei
Verringerung als \disp{eng} (\tex{tight}) klassifiziert.
\item{$0<\bar\beta\le12.5$} Es gilt $0\le r<0.5$ in beiden F"allen.
Eine solche Zeile wird als \disp{%
unauf\-f"allig} (\tex{decent}) klassifiziert.
}
Man erh"alt also vier Klassen: {sehr locker, locker, unauff"allig
} und
{eng}.
Man definiert zwei aufeinanderfolgende Zeilen als
\defi{optisch inkompatibel},
wenn sie nicht in der gleichen und nicht in benachbarten Klassen liegen.
\Bemerkung
Die Festlegung der Bewertungsfunktion $\beta(r,i)$ und damit die
Klassifizierung beruht auf der Annahme, da\3 die einzelnen
Gluekomponenten wie in \the\chap.1.2
gew"ahlt wurden, so da\3 im Fall $r=1$ der
dadurch entstehende Freiraum noch akzeptabel ist. Bei Zeilenerweiterung
ist $r>1$ zul"assig, aber unerw"unscht, so da\3 die Funktion in diesem
Fall schnell hohe Werte annimmt.
\endBemerkung
\subsubheading{Bewertung der Zeilen}
Eine Indexfolge
$b_1<\ldots<b_k$ legaler Umbruchpunkte eines Absatzes von
$k$ Zeilen, so da\3
%Folgenelement $b_j$ angenommen wird, da\3
$x_{b_j}$ letztes Element
der $j$-ten Zeile des Absatzes ist, hei\3t Zeilenendpunktfolge.
\Bemerkung
Jeder erzwungene Umbruchpunkt mu\3 in jeder solchen Folge enthalten
sein. Es gilt immer $b_k=n$, denn beim Abschlie\3en einer horizontalen
Liste wird das letzte Element, falls es
Glue ist, entfernt. Gleichzeitig werden als weitere
Elemente
\begindisplay \verbatimon
|\penalty10000\hskip\parfillskip\penalty-10000|\verbatimoff
\enddisplay
\verbatimon
eingef"ugt. $x_n$ ist also immer eine Penalty, die erzwingt, da\3 die
Zeile an dieser Stelle gebrochen wird.
\endBemerkung
Sei nun
$b_1<\ldots<b_k$
die Folge von Zeilenendpunkten. Dann ist
dieser eine Indexfolge
$a_1<\ldots<a_k$ f"ur Zeilenelemente $x_{a_j}$
zugeordnet, die jeweils
den Anfang der Zeile zu den jeweiligen Endpunkten markiert.
Diese Punkte werden festgelegt, indem man die Zeile an den Umbruchpunkten
$b_j$ teilt und zu Beginn jeder neuen Zeile alle Glue- und
Penalty-Elemente entfernt. Der Zeilenanfangspunkt $a_{j+1}$ ist dann
das erste Element f"ur das gilt $t_{a_{j+1}}=\tbox$.
Genauer gilt: Sei $b_0=0 $. Ist
$$I_j =\{b_{j-1}<i<b_j\mid t_i=\tbox \text{ oder }t_i=\tpenalty
\text{ mit } p_i\ge-10000\}\;$$ aus allen Elementen der $j$-ten Zeile.
Dann ist $$a_j= \cases b_j\;,&\text{falls }I_j =\emptyset\\
\min I_j\;,&\text{sonst.}\endcases$$
Die $j$-te Zeile enth"alt dann also alle Elemente $x_i$ mit
$a_j\le i \le b_j$ und $i=b_j$, falls $t_{b_j}=\tpenalty$.
\Bemerkung
Die legalen Umbruchpunkte werden im Verfahren
so gew"ahlt, da\3 normalerweise kein
Glue am Zeilenende und am Zeilenanfang
steht, es sei denn durch ausdr"uckliches Kommando. Glue am Zeilenende
ist im Notensatz
jedoch erforderlich f"ur den Fall eines Zeilenumbruchs in der Taktmitte,
d.h. nach einer Note innerhalb des Taktes.\item{}
Glue am Zeilenende erh"alt man, indem man den {%
Interword Glue} ersetzt
durch eine Glue-Penalty-Folge der Art:
\begindisplay
|\penalty10000\hskip|$w$|\penalty0|,
\enddisplay
\item{}
wobei $w$ den zu setzenden Wert des Glue bezeichnet.
\item{}
Die Penalty 10000 unterdr"uckt, da\3 die Zeile an dieser Stelle gebrochen
wird.
Der Glue
wird nicht in die Liste der m"oglichen Umbruchpunkte aufgenommen, da die
Bedingung (I) nicht erf"ullt ist. Als Ausgleich wird die Penalty 0 in
die Liste aufgenommen. Wird die Zeile an dieser Stelle gebrochen, so
erscheint also Glue am Zeilenende.
\item{}
Glue am Zeilenanfang erh"alt man, indem man dem normalen
{Interword Glue}
die Box-Glue-Penalty-Folge
\begindisplay
|\penalty0\hskip|$-w$|\penalty10000\hskip|$w$
\enddisplay
\item{}
hinzuf"ugt.
\item{}
Innerhalb der Zeile heben sich die Glues auf. Der einzige m"ogliche
Umbruchpunkt in dieser Folge ist die erste Penalty. Wird die Zeile an
dieser Stelle gebrochen, so wird der Glue bis zur Box entfernt, und es
erscheint Glue am Zeilenanfang. Ein Fehlen der leeren Box w"urde also
auch die Entfernung des zweiten Glues im Falle eines Zeilenbruchs an der
ersten Penalty bewirken.
\endBemerkung
Mit diesen Voraussetzungen kann nun die Bewertung der einzelnen Zeilen
erfolgen.
Seien $\beta_j$ und $p_j$ die dem Zeilenendpunkt der $j$-ten Zeile
zugeordnete Badness bzw. Penalty. Dann sind die sogenannten Kosten
(\tex{demerits}) $d_j$ f"ur diese Zeile definiert durch:
$$d_j=\cases (l_j+\beta_j)^2 + p_j^2\;,&\text{falls }0\le p_j<10000,\\
(l_j+\beta_j)^2 - p_j^2\;,&\text{falls }-10000< p_j<0,\\
(l_j+\beta_j)^2\;,\hfill &\text{falls }p_j\le-10000,\endcases$$
wobei $l_j$ ein Parameter ist, der je nach Wert die Gesamtkosten
erh"ohen oder senken kann. Dabei ist $l_j$ der aktuelle Wert von
\hbox{\vo|\linepenalty|\voff}.
\Bemerkung
Die Unstetigkeitsstelle der Funktion f"ur $p_j\le-10000$ ist aus
programmiertechnischen Gr"unden eingef"ugt worden. Da in diesem Fall
$\beta_j$ in jeder Zeilenendpunktfolge enthalten ist, tr"agt es auch
nicht zur Minimierung der Bewertungsfunktion des gesamten
Absatzes bei (s. \the\chap.3.8\XX).
Es wird in diesem Fall also nicht zus"atzlich
noch ein gro\3er Wert abgezogen, um einem arithmetischen "Uberlauf
vorzubeugen.
\endBemerkung
Zus"atzlich werden zu $d_j$ noch Kosten in Abh"angigkeit von der
Umgebung der Zeile addiert, und zwar:
der Wert von \hbox{\vo|\adjdemerits|\voff}, falls die Zeilen
$j-1$ und $j$ inkompatibel sind,
der Wert von {\vo|\doublehyphendemerits|\voff},
falls sowohl $x_{b_{j-1}}$ als auch $x_{b_j}$ ein
\tex{discretionary}-Kommando ist, und
der Wert von {\vo|\finalhyphendemerits|\voff},
falls $x_{b_{k-1}}$ ein \tex{discretionary}-Kommando ist.
\subsubheading{Bewertung des Absatzes}
Die Folge $b_1<\ldots<b_k$ von Umbruchpunkten, f"ur die
$\sum_{j=1}^k d_j$ minimal ist (Minimum der Summe der Quadrate der
Penalties und Badness jeder Zeile) wird als endg"ultige Folge
ausgew"ahlt. Damit wird meistens auch
$\max \beta_j$ minimiert,
aber nicht notwendigerweise. Dies ist auch nicht
erw"unscht, da mit der Methode der kleinsten Quadrate ein gleichm"a\3iger
Ausschlu\3 des gesamten Absatzes erzielt werden soll.
\subsubheading{Bemerkungen zum Zeilenumbruch
und zur Wahl von Parametern}
\item{1)}Durch Ver"andern der Parameter k"onnen verschiedenen Effekte
erzielt werden, z.B.:
\itemitem{a)}F"ur normalen Textsatz wird man
\hbox{\vo|\parfillskip 0pt plus 1fil|\voff} verwenden.
Setzt man
\hbox{\vo|\parfillskip 0pt|\voff}, so wird die letzte Zeile des
Absatzes bis zum Ende ausgeschlossen, was f"ur den Notensatz
erforderlich ist.
Ist der Text nicht lang genug oder
zu schmal, gibt es Schwierigkeiten, da zu wenig Streckm"oglichkeit
vorhanden ist und nicht gen"ugend Umbruchpunkte zur Wahl stehen.
\itemitem{b)}
Durch Erh"ohen von \hbox{\vo|\adjdemerits|\voff} kann man verhindern,
da\3 die Zeilen zu unterschiedlich ausgeschlossen werden.
\item{2)} Der \TeX-Zeilenumbruchalgorithmus ist so konzipiert,
da\3 nicht sofort bei
der ersten Gelegenheit, sondern abh"angig von
den benachbarten Zeilen umgebrochen wird. Der
Algorithmus ist also in gewisser Weise voraus- bzw.
zur"uckschauend.
\subheading{Der Seitenumbruch}
Ist die optimale Folge von Umbruchpunkten gefunden, werden die einzelnen
Zeilen, verbunden durch {Interline Glue} (s. \the\chap.2.3\XX)
an die aktuelle ``Seitenliste'' angef"ugt.
Zus"atzlich wird vor jedem Glue eine Penalty
eingef"ugt und danach vertikales Material,
das aus
der jeweiligen Zeile mit
\hbox{\vo|\vadjust{|\voff}\<vertical list>|}| ausgelagert wurde
in der Reihenfolge des Erscheinens (d.h. von links nach rechts).
Dieses eingef"ugte vertikale Material beeinflu\3t also nicht den
{Interline Glue}.
\subsubheading{Die Seitenumbruchpunkte}
Das Verfahren f"ur den Seitenumbruch ist dem
Zeilenumbruchalgorithmus "ahnlich.
Ein Seitenumbruch kann stattfinden
\item{a)} vor Glue, dem unmittelbar eine Box
der vertikalen Liste vorangeht,
\item{b)} vor Kern, falls dieser unmittelbar von Glue gefolgt
wird,
\item{c)}an einer Penalty.
\subsubheading{Die Bewertung des Seitenumbruchs}
Eine Penalty $p\le-10000$ erzwingt somit einen Seitenumbruch.
Jede Seite wird einzeln bearbeitet, d.h. es wird nicht wie beim
Zeilenumbruch voraus- oder zu\-r"uck\-schauend gearbeitet,
da dies zu viel Speicherungsaufwand erfordern w"urde.
Zu jedem in
Erw"agung gezogenen Seitenumbruchpunkt werden mittels einer
Bewertungsfunktion die ``Kosten'' $c$ berechnet:
$$c=\cases \beta\;, &\text{falls }\beta<\infty\text{ und }
p\le-10000\;,\\
\beta+p\;, &\text{falls }\beta<10000 \text{ und }-10000<p<10000
\;,\\
100000,&\text{falls }\beta\ge10000\text{ und }-10000<p<10000
\;,\endcases$$
wobei $\beta$ die Badness und $p$ die
zugeordnete Penalty bezeichnet.
Die {Badness} einer vertikalen Liste
wird im wesentlichen genauso berechnet wie die der horizontalen Liste.
Die Kosten werden an jedem legalen Umbruchpunkt berechnet, solange bis
ein Umbruchpunkt gefunden wird, an dem das neuberechnete
$c$ gr"o\3er ist als das zuvorberechnete. Dann wird die Seite am
vorletzten Seitenumbruchpunkt umbrochen.
Nach dem Seitenumbruch werden alle folgenden
Glue-, Kern- und Penalty-Elemente der horizontalen
Liste solange entfernt, bis ein Box-Element erscheint.
Es kann also durch
\hbox{\vo|\penalty-10000\penalty-10000|\voff} in der vertikalen
Liste keine Leerseite erzeugt werden.