Der Seitenumbruch in LaTeX funktioniert völlig anders als der Zeilenumbruch. Ein Absatz wird umbrochen, indem alle möglichen Aufteilungen gleichzeitig bewertet und die insgesamt beste gewählt wird; eine Seite dagegen wird, einmal beendet, nie wieder revidiert. Wer also \newpage tippt, ohne zu verstehen, warum die Seite dort endete, reißt womöglich die nächsten vierzig Seiten mit. Diese Seite vermisst die Mechanik des Seitenrhythmus – Hurenkinder und Schusterjungen (\widowpenalty und \clubpenalty, beide standardmäßig 150), den Unterschied zwischen \raggedbottom und \flushbottom und die Art, wie Gleitobjekte den Text verschieben – und entwickelt daraus ein Verfahren, einen schlechten Umbruch zu diagnostizieren statt ihn zu erzwingen.
Warum eine Seite dort endet, wo sie endet – der eine Unterschied zum Zeilenumbruch
Wo eine Seite endet, entscheidet sich allein aus den Informationen, die beim Aufbau genau dieser Seite vorliegen. TeX lässt den Text nach unten einfließen, beobachtet die zwischen den Zeilen auftauchenden zulässigen Umbruchstellen, und sobald die aufgelaufene Höhe das Ziel überschreitet, kehrt es zum bisher günstigsten Kandidaten zurück und trennt dort. Der Zeilenumbruch innerhalb eines Absatzes ist eine globale Optimierung über alle möglichen Anordnungen; der Seitenumbruch ist eine sequentielle Entscheidung im Vorwärtsgang. Das ist der Unterschied, der in der Praxis zählt, und deshalb verschiebt eine Korrektur auf Seite 40 alles ab Seite 41.
Sequentiell zu entscheiden heißt auch: nachverhandelt wird nicht. TeX bleibt nur ein Mittel, um in Zahlen auszudrücken, wie ungern es an einer Stelle trennt – die Penalty. Eine Penalty ist eine ganze Zahl an einer Umbruchstelle; je größer sie ist, desto widerwilliger trennt TeX dort. 10000 ist der Sonderwert „hier niemals trennen“, -10000 bedeutet umgekehrt „hier auf jeden Fall trennen“. Der Mechanismus gegen vereinzelte Absatzzeilen, die Platzierung von Gleitobjekten und das Verbot eines Umbruchs direkt nach einer Überschrift sind allesamt mit dieser einen Zahlensorte formuliert. Seitenumbrüche zu justieren heißt also faktisch, Penalties zu justieren.
Hurenkinder und Schusterjungen: \widowpenalty und \clubpenalty stehen beide auf 150
In der Klasse article gemessen, stehen \widowpenalty und \clubpenalty beide auf 150, \displaywidowpenalty auf 50. Ein Hurenkind ist die letzte Zeile eines Absatzes, die allein am Kopf einer Seite hängen bleibt; ein Schusterjunge ist die erste Zeile, die allein am Fuß stehen bleibt. Über den Namen stolpert man zuerst: Der Parameter gegen den Schusterjungen heißt nicht \orphanpenalty – eine solche Variable gibt es weder in TeX noch in LaTeX –, sondern \clubpenalty, ein Überbleibsel des alten Druckerworts club line für eine vereinzelte Anfangszeile.
% Print the defaults into the .log yourself:
% pdflatex penalties.tex -> grep MEASURE penalties.log
\documentclass{article}
\begin{document}
\typeout{MEASURE widowpenalty=\the\widowpenalty}
\typeout{MEASURE clubpenalty=\the\clubpenalty}
\typeout{MEASURE displaywidowpenalty=\the\displaywidowpenalty}
\typeout{MEASURE brokenpenalty=\the\brokenpenalty}
x
\end{document}Die Zahl 150 hat eine Ahnenreihe. In TeX Live 2024 stehen diese drei Zuweisungen in den Zeilen 514–516 von latex.ltx – und dieselben drei Zeilen finden sich in Knuths plain.tex in den Zeilen 290–292. LaTeX hat also schlicht die Vorgaben von plain TeX übernommen und sie in vierzig Jahren nie überprüft. Und 150 richtet in der Praxis kaum etwas aus. Die Hässlichkeit – die badness –, eine Seite um eine Zeile zu verkürzen, übersteigt im Fließtext, wo kaum dehnbarer Leerraum vorhanden ist, mühelos 1000. Eine Penalty von 150 verliert diesen Streit fast immer.
| Parameter | Standardwert | Was verhindert wird |
|---|---|---|
\widowpenalty | 150 | die letzte Absatzzeile allein am Seitenkopf |
\clubpenalty | 150 | die erste Absatzzeile allein am Seitenfuß |
\displaywidowpenalty | 50 | eine einzelne Zeile unmittelbar vor einer abgesetzten Formel |
\brokenpenalty | 100 | ein Seitenumbruch direkt nach einer getrennten Zeile |
\interlinepenalty | 0 | ein Umbruch irgendwo im Absatz (standardmäßig nicht erschwert) |
\predisplaypenalty | 10000 | ein Umbruch unmittelbar vor einer abgesetzten Formel (faktisch verboten) |
An genau einer Stelle gibt LaTeX diese Vorgaben selbst auf. Die Umgebung thebibliography in article.cls ruft beim Betreten \sloppy auf und setzt \clubpenalty4000 sowie \widowpenalty4000 (Zeilen 576–579 der mit TeX Live 2024 ausgelieferten article.cls). Ein Literaturverzeichnis ist eine lange Folge kurzer Einträge, Hurenkinder treten dort häufig auf, und ein über zwei Seiten zerrissener Eintrag ist wirklich schwer zu lesen – deshalb strengt sich die Standardklasse ausgerechnet hier an. Umgekehrt heißt das: Im Fließtext tut die Standardklasse nichts für Sie.
Was \widowpenalty=10000 wirklich kostet – der Handel, nachgemessen
Das Hurenkind verschwindet, und an seiner Stelle erscheint eine kurze Seite. Ein Dokument mit 20 Zeilen pro Seite und sechszeiligen Absätzen im \flushbottom-Modus, nachgemessen: Mit den Vorgaben nimmt Seite 1 23 Zeilen auf, und die letzte Zeile des vierten Absatzes bleibt allein am Kopf von Seite 2 hängen. Mit \widowpenalty=10000 sinkt Seite 1 auf 22 Zeilen, die letzten beiden Zeilen wandern gemeinsam weiter, und das Hurenkind ist weg. Dafür wächst das Protokoll um eine Zeile:
Underfull \vbox (badness 10000) has occurred while \output is active []Die Warnung besagt, dass TeX die Seite nicht bis zur Zielhöhe füllen konnte, und sie erscheint nur bei \flushbottom. Dasselbe Experiment unter \raggedbottom löst sie kein einziges Mal aus – die Seite darf kürzer bleiben, es gibt also nichts zu füllen. Der Preis von \widowpenalty=10000 zeigt sich demnach als ungleichmäßig gedehnter Durchschuss bei \flushbottom und als wechselnder Weißraum am Fuß bei \raggedbottom. In beiden Fällen ist er nicht null. Dennoch ist 10000 für ein überwiegend aus Fließtext bestehendes Manuskript vertretbar: Eine vereinzelte Zeile fällt zuverlässig auf, eine Seite, die eine Zeile früher endet, den meisten nie.
% A defensible pair of settings for a text-heavy manuscript.
\widowpenalty=10000
\clubpenalty=10000
% Also stop a two-line gap opening before a displayed formula:
\displaywidowpenalty=10000
% Prefer this over sprinkling \newpage through the source.\raggedbottom gegen \flushbottom – und welches Sie bereits haben
\flushbottom dehnt vertikalen Raum, damit jede Seite auf derselben Höhe endet; \raggedbottom lässt die Unterkanten variieren. Und hier irrt sehr viel veröffentlichter Rat: Die Vorgabe für einen einseitigen article ist \raggedbottom, nicht \flushbottom. article.cls, report.cls und book.cls führen am Ende alle \if@twoside \else \raggedbottom \fi aus – wer also nicht twoside verlangt hat, arbeitet im Ragged-Bottom-Modus. Nur book, das standardmäßig twoside ist, bleibt auf der Flush-Bottom-Seite. Bei zwei Spalten ruft jede dieser Klassen \flushbottom ausdrücklich auf.
| Klassenoptionen | Was tatsächlich gilt | Wie der Fuß aussieht |
|---|---|---|
\documentclass{article} | \raggedbottom | der Fuß liegt auf jeder Seite anders hoch |
\documentclass[twoside]{article} | \flushbottom | die Füße fluchten; der Durchschuss kann gedehnt werden |
\documentclass{book} | \flushbottom | book ist standardmäßig twoside, daher dies |
\documentclass[twocolumn]{article} | \flushbottom | von der Klasse ausdrücklich aufgerufen; ungleiche Spalten fallen auf |
Der Mechanismus ist fast enttäuschend simpel. In latex.ltx ist \raggedbottom als \def\@textbottom{\vskip \z@ \@plus.0001fil} definiert und \flushbottom als \let\@textbottom\relax. Das erste setzt ganz unten auf der Seite einen Leim der Länge null, der sich unendlich dehnen kann; dieses fil überwiegt die kleine endliche Dehnbarkeit im Text darüber, sodass der gesamte Überschuss am Fuß aufgesogen wird. Lässt man \meaning\@textbottom ausgeben, antwortet article mit macro:->\vskip \z@ \@plus .0001fil und book mit \relax – eine Zeile in der Präambel verrät also, in welchem Modus das eigene Dokument steht.
% Which bottom mode am I in? Put this in the preamble and read the .log.
\makeatletter
\AtBeginDocument{\typeout{MEASURE textbottom=\meaning\@textbottom}}
\makeatother
% article -> macro:->\vskip \z@ \@plus .0001fil (\raggedbottom)
% book -> \relax (\flushbottom)Wenn Gleitobjekte den Text verdrängen: \topfraction und \textfraction
Wirkt ein Seitenumbruch unerklärlich, ist meist ein Gleitobjekt schuld. Bevor LaTeX eine Abbildung oder Tabelle setzt, prüft es, welchen Anteil der Seite sie einnehmen darf und wie viele schon dort stehen. In den Standardklassen gemessen: Obere Gleitobjekte dürfen bis zu \topfraction = .7 der Texthöhe füllen, untere bis \bottomfraction = .3, mindestens \textfraction = .2 muss echter Text bleiben, und eine Seite fasst höchstens totalnumber = 3 Gleitobjekte (topnumber = 2 oben, bottomnumber = 1 unten). Eine Abbildung, die auch nur eine dieser Prüfungen nicht besteht, wird nicht auf dieser Seite gesetzt, sondern auf eine spätere verschoben. Verschobene Gleitobjekte erscheinen vor dem ihnen folgenden Text – so landet die Prosa auf Seite 12 und ihre Abbildung auf Seite 14.
| Parameter | Standardwert | Bedeutung |
|---|---|---|
\topfraction | .7 | Anteil der Texthöhe, den obere Gleitobjekte belegen dürfen |
\bottomfraction | .3 | Anteil, den untere Gleitobjekte belegen dürfen |
\textfraction | .2 | Mindestanteil einer Seite, der Text bleiben muss |
\floatpagefraction | .5 | Mindestfüllung, ab der eine reine Gleitobjektseite erlaubt ist |
totalnumber | 3 | insgesamt erlaubte Gleitobjekte pro Seite |
topnumber | 2 | am Seitenkopf erlaubte Gleitobjekte |
bottomnumber | 1 | am Seitenfuß erlaubte Gleitobjekte |
Ist ein Gleitobjekt schuld, meldet es das Protokoll zuerst. Kann eine mit [h] markierte Abbildung dort nicht stehen, verkündet LaTeX LaTeX Warning: 'h' float specifier changed to 'ht'. und schiebt sie stillschweigend nach oben. Stauen sich zu viele verschobene Objekte, bricht es mit ! LaTeX Error: Too many unprocessed floats. ab (die Meldung \@fltovf in latex.ltx). Übliche Abhilfe in der Praxis: \FloatBarrier aus placeins an den Abschnittsgrenzen, das Abbildungen im zugehörigen Abschnitt festhält, oder \afterpage{\clearpage} aus dem Paket afterpage, das die Warteschlange erst leert, wenn die laufende Seite fertig ist. Ein blankes \clearpage an Ort und Stelle hinterlässt ein großes Loch mitten im Text.
\usepackage{placeins} % \FloatBarrier
\usepackage{afterpage} % \afterpage{\clearpage}
% Keep every figure inside the section that discusses it:
\let\oldsection\section
\renewcommand\section{\FloatBarrier\oldsection}
% Or loosen the rules instead of forcing breaks:
\renewcommand{\topfraction}{0.85}
\renewcommand{\textfraction}{0.1}
\renewcommand{\floatpagefraction}{0.75}Einen schlechten Seitenumbruch beheben – was vor dem Erzwingen kommt
Die Reihenfolge steht fest: erst die Ursache bestimmen, dann eine globale Einstellung korrigieren und erst danach die eine Seite von Hand anfassen, die immer noch falsch ist. Umgekehrt zerstört ein einziger zusätzlicher Satz weiter oben die ganze Handarbeit. Die Bestimmung beginnt im .log. Ein Underfull \vbox heißt, dass \flushbottom und die Penalties gegeneinander ziehen; eine Meldung float specifier changed weist auf ein Gleitobjekt hin; eine Reihe von Overfull \hbox bedeutet, dass das Problem im Zeilenumbruch liegt – und das ist das Revier einer anderen Seite. Steht die Ursache fest, lässt sich entscheiden, was bewegt wird: eine Penalty, ein Gleitobjekt-Anteil oder die Länge des Absatzes selbst.
- Das
.loglesen. ObUnderfull \vbox,float specifier changedoderOverfull \hboxerscheint, verrät den Schuldigen. \widowpenaltyund\clubpenaltyin der Präambel anheben. Weil es dokumentweit gilt, bleibt Behobenes behoben.- Liegt es an einem Gleitobjekt:
\FloatBarriereinsetzen oder\topfractionanpassen. Auch eine breitere Platzierungsangabe wie[htbp]hilft. - Den Absatz selbst um eine Zeile kürzen oder verlängern. Eine einzige umformulierte Wendung ist oft die haltbarste Korrektur.
\enlargethispage{\baselineskip}macht genau diese Seite eine Zeile höher. Erst hier beginnt die Handarbeit.\newpageund\pagebreaksind das letzte Mittel. Einmal gesetzt, müssen sie bei jeder Textänderung überprüft werden.
\looseness ist das Mittel, um TeX um „eine Zeile kürzer“ zu bitten. Innerhalb eines Absatzes bedeutet \looseness=-1 „setze ihn nach Möglichkeit eine Zeile kürzer“, +1 entsprechend eine Zeile länger. Die Messung ist allerdings ernüchternd. In einem Absatz mit \tolerance=9999 und \emergencystretch=3em dehnte \looseness=1 sechs Zeilen tatsächlich auf sieben – um den Preis von sechs Underfull \hbox-Warnungen. Und \looseness=-1, die Richtung, die alle eigentlich wollen, änderte die Zeilenzahl überhaupt nicht, weil es innerhalb der \tolerance keine kürzere Lösung gab. \looseness ist ein Versuch wert, aber kein verlässlicher Hebel. Wirkt es nicht, ist ein gestrichenes Wort im Manuskript schneller.
% Ask for one line fewer inside the paragraph itself.
% \looseness is reset by every \par, so it must sit inside the paragraph.
\tolerance=9999 \emergencystretch=3em
Some paragraph text ... \looseness=-1
% Only after the above has failed: one page, one line taller.
\enlargethispage{\baselineskip}Wo \pagebreak, \linebreak und \- behandelt werden
Diese Seite behandelt den dokumentweiten Rhythmus; die einzelnen Umbruchbefehle gehören anderswohin. Die seitenbezogenen – \pagebreak[n] und \nopagebreak[n] (n von 0 bis 4), das unbedingte \newpage, \clearpage, das auch wartende Gleitobjekte ausspült, und \cleardoublepage, das im doppelseitigen Satz eine Leerseite einfügt – stehen bei der Feinabstimmung des Seitenumbruchs. Die zeilenbezogenen – \\, \newline, \linebreak[n], \nolinebreak[n], der bedingte Trennstrich \-, die Ausnahmeliste \hyphenation{man-u-script} in der Präambel und das Paket hyphenat – stehen bei der Feinabstimmung des Zeilenumbruchs. Absatzstruktur und \par gehören der Absatzseite. Und Overfull \hbox, \sloppy sowie \emergencystretch haben eine eigene Fehlerseite, auf der \sloppy als nichts weiter als vier Zuweisungen vermessen ist (\tolerance 9999, \emergencystretch 3em, \hfuzz .5\p@, \vfuzz\hfuzz).
Zum Schluss: Ein Mitglied dieser Familie setzt LaTeX bereits stillschweigend für Sie ein. Die Gliederungsbefehle heben \clubpenalty für den Absatz nach einer Überschrift vorübergehend auf 10000, damit unmittelbar danach kein Seitenumbruch fallen kann – dafür ist die \@clubpenalty-Mechanik in latex.ltx da. Deshalb kommt eine allein am Seitenfuß hängende Überschrift im unveränderten LaTeX praktisch nie vor. Passiert es doch, hat ein selbstgebautes Makro den Gliederungsbefehl ersetzt.