diff options
Diffstat (limited to 'macros/mtex/documentation/mdoc5.tex')
-rw-r--r-- | macros/mtex/documentation/mdoc5.tex | 1123 |
1 files changed, 1123 insertions, 0 deletions
diff --git a/macros/mtex/documentation/mdoc5.tex b/macros/mtex/documentation/mdoc5.tex new file mode 100644 index 0000000000..2b64cd0ecd --- /dev/null +++ b/macros/mtex/documentation/mdoc5.tex @@ -0,0 +1,1123 @@ +\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} + +\indent\hbox{|\vskip |}\<Dimensionsangabe>% +$\lbrack$|plus |\<Dimensionsangabe>$\rbrack$% +$\lbrack$|minus |\<Dimensionsangabe>$\rbrack$% +\par\indent +\hbox{|\hskip |}\<Dimensionsangabe>% +$\lbrack$|plus |\<Dimensionsangabe>$\rbrack$% +$\lbrack$|minus |\<Dimensionsangabe>$\rbrack$ +\par\indent +\hbox{|\kern |}\<Dimensionsangabe>\par\indent +\hbox{|\leaders |}\<Box oder Rule>\<Glueangabe>\par +\verbatimon\rm + +\subsubheading{Anwendung f"ur den Notensatz} + +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 + +\hbox to\hsize{\hfill +\leaders\hrule\hskip20pt\kern-5pt{\music\char\hex21}% +\vrule height 16pt depth 0pt +\vbox to16pt{\offinterlineskip\hbox{}\hbox{\music +\char\hex29}\vss\hbox{}}% +\leaders\hrule\hskip20pt\kern-3pt\vrule height 0pt +depth16pt\vtop to 16pt{\offinterlineskip\hbox{}\vss\hbox{\music\char +\hex2E}\hbox{}}{\music\char\hex21}\kern-5pt +\leaders\hrule\hskip20pt \hfill} + +\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. + +\vfill\eject |