|
Die Beeinflussung von TeX's Zeilenumbruchs-Algorithmus (der ja auch LaTeX zugrunde liegt) ist bisweilen nicht ganz einfach. Es gibt eine Vielzahl von Registern die das Verhalten beeinflussen. Die Register und ihre Bedeutung soll hier einmal kurz beschrieben werden. Zuvor aber noch einige allgemeine Bemerkungen zum Zeilenumbruch.
TeX betrachtet bei der Berechnung einer geeigneten Stelle für einen Zeilenumbruch – d.h. ob und wo getrennt werden soll – immer den ganzen Absatz. Dabei werden unterschiedliche Alternativen durchprobiert und versucht, dass der Umbruch jeder Zeile einen möglichst geringen Beitrag zu den »Unschönheitspunkten« des Gesamten Absatzes beiträgt. Mit »unschön« sind dabei zu große Dehnungen zwischen den Wörtern oder über den Seitenrand hinausstehender Text gemeint. Die Berechnung selbst erfolgt in drei Durchgängen über die Dehnungspunkte zwischen den Wörtern.
1. Durchgang
Es wird versucht, einen Absatz ohne Worttrennung zu realisieren; hier kommen als Trennstellen im wesentlichen nur Wortzwischenräume und leere Trennstellen in Frage. Dieser Umbruch wird akzeptiert, falls die Dehnungspunkte (badness) jeder umgebrochenen Zeile den Wert von \pretolerance nicht überschreiten.
2. Durchgang
Es wird versucht einen Absatz mit Worttrennungen zu realisieren; hier kommen als Trennstellen die Stellen in Frage, die TeX durch seinen Trennalgorithmus findet. Dazu werden Trenntabellen verwendet, die von der jeweilig benutzten Sprache abhängen. Der Umbruch wird akzeptiert, falls die Dehnungspunkte (badness) jeder umgebrochenen Zeile den Wert von \tolerance nicht überschreiten.
Wird auf einen dritten Versuch verzichtet – das geschieht bei einem positiven Wert von \emergencystretch und falls \tolerance den Wert 10000 hat –, dann kommen \hfuzz und \hbadness zum Tragen (vgl. unten).
3. Durchgang
Der Wert von \emergencystretch wird zur Dehnungsmöglichkeit jeder Zeile hinzuaddiert und ein erneuter Umbruchversuch gestartet; durch diese Addition werden die Dehnungspunkte jeder Zeile verringert. Schließlich erfolgt eine Entscheidung mit Hilfe der Register \hfuzz und \hbadness (vgl. unten).
Eine zusammenfassende Übersicht der für die Dehnungspunkte relevanten Register und ihrer Bedeutung liefert folgende Auflistung (aus Schwarz, 1991, teilweise abgeändert oder ergänzt). (Anm.: Werte von -10000 bzw. 10000 gelten bei TeX als negativ unendlich bzw. positiv unendlich.)
\pretolerance=100 · Textsatz: interner Parameter zur Steuerung des Zeilenumbruchs. Er enthält die maximale Minuspunktzahl, die ein Absatz beim Umbruch haben darf, wobei diese für den ersten Durchgang ohne Trennungen gilt. Setzt man \pretolerance=10000, gilt der Absatz immer als akzeptiert; es wird also nicht getrennt.
\tolerance=200 · Bewertungsgrenzwert für noch zu akzeptierende schlecht umgebrochene Zeilen, und zwar mit erlaubten Trennungen (zweiter Durchgang). Wird \tolerance vergrößert, so kommt es auch zu mehr Leerraum zwichen einzelnen Wörtern. Bei \tolerance=10000 wird auf den dritten Durchgang verzichtet.
\hfuzz=0.1pt · Grenze, ab der eine overfull hbox gemeldet wird. (Wert, den eine Zeile mit der Länge \hsize überschreiten darf.)
\vfuzz=0.1pt · Grenzwert, ab dem die Überfüllung einer \vbox protokolliert wird.
\hbadness=1000 · Grenzwert für »schlechte« Zeilen, bzw. Boxen, der angibt, ab welcher Negativbewertung eine \hbox protokolliert
wird.
\vbadness=1000 · Grenzwert, ab dem eine »schlechte« \vbox protokolliert wird.
\emergencystretch · Definiert zusätzlichen dynamischen Leerraum, der falls er von 0 Punkten verschieden ist, beim Absatzumbruch einen dritten Versuch bewirkt, wenn bei den beiden ersten Durchläufen kein Umbruch ohne eine overfull hbox gelungen ist. \emergencystretch definiert dann den Leerraum, der innerhalb einer Zeile zusätzlich verteilt werden darf.
Strafpunkte (penalties)
Zusätzlich zu den Dehnungspunkten gibt es noch sogenannte Strafpunkteregister (penalties). Sie enthalten Minuspunkte, die für bestimmte Umbruchkonstellationen zu dem »Unschönheitsfaktor« hinzuaddiert werden und damit letztendlich die Bewertung dieser Konstellation bilden: Es wird diejenige Alternative gewählt, die die wenigsten Strafpunkte ergibt.
\linepenalty=10 · Grundlast, die für jede Zeile berechnet wird. Wird dieser Wert erhöht, so versucht das Programm, die Zeilenanzahl für einen Absatz möglichst klein zu halten.
\hyphenpenalty=50 · Wird für eine einfache Trennung beim Absatzumbruch aufgerechnet.
\exhyphenpenalty=50 · Wird für einen Zeilenwechsel nach einem expliziten Trennstrich aufgerechnet.
\binoppenalty=700 · Mathematiksatz: Gibt es für das Trennen einer Formel im text-style nach einem binären Operator.
\relpenalty=500 · Wird beim Trennen einer mathematischen Formel im text-style (nach einer Relation) aufgerechnet.
\clubpenalty=150 · Wird beim Seitenumbruch vergeben, falls die erste Zeile eines Absatzes allein auf der vorangehenden Seite verbleibt.
\widowpenalty=150 · Wird beim Seitenumbruch aufgerechnet, falls die letzte Zeile gerade noch auf die nächste Seite umgebrochen wird.
\displaywidowpenalty=50 · Wird während des Seitenumbruchs für einen Seitenwechsel angerechnet, falls die letzte Zeile eines Absatzes gerade noch auf die nächste Seite kommt, und zwar in dem Spezialfall, dass direkt danach eine hervorgehobene Formel folgt.
\brokenpenalty=100 · Wird während des Seitenumbruchs für einen Seitenwechsel angerechnet, bei dem die letzte Zeile einer Seite mit einer Trennung endet.
\doublehyphendemerits=10000 · Für zwei aufeinanderfolgende Zeilen, wobei in beiden getrennt wird.
\finalhyphendemerits=5000 · Wird für die Trennung in der vorletzten Zeile eines Absatzes aufgerechnet.
\adjdemerits=10000 · Wird beim Absatzumbruch für zwei »visuell inkompatible« Zeilen aufgerechnet. Dies sind zwei aufeinanderfolgende Zeilen, bei denen die eine mit extra viel Leerraum durchgeschossen wurde und die andere mit wenig.
\interdisplaylinepenalty=100 · Wird für das Umbrechen einer mit \displaylines entstandenen Formelfolge über eine Seitengrenze hinweg berechnet.
\interfootnotelinepenalty=100 · Wird für das Umbrechen einer Fußnote über Seitengrenzen hinweg berechnet. Der Befehl \footnote setzt die \interlinepenalty auf den angegebenen Wert.
\interlinepenalty · Für den Umbruch eines Absatzes über eine Seitengrenze.
\predisplaypenalty=10000 · Für einen Seitenwechsel direkt vor einer Formel im display-style.
\postdisplaypenalty=0 · Für einen Seitenwechsel direkt nach einer Formel im display-style.
|