Zeilenumbrüche feinsteuern

Innerhalb eines Blocksatzes optimiert LaTeX automatisch, wo Zeilen umgebrochen werden sollen. Normalerweise reicht das aus – aber manchmal möchte man sagen: „Hier brechen“ oder „Hier nicht brechen“. Auf dieser Seite geht es nicht um das Trennen von Absätzen (siehe dazu „Zeilen- und Absatzumbrüche“). Es handelt sich um das Toolkit zur Feinabstimmung der Zeilenumbrüche *innerhalb* eines Absatzes: Umbrüche erzwingen, verhindern, Silbentrennung steuern und mit den Warnungen „Übervoll“/„Untervoll“ leben.

Eine Grundregel zuerst: Das Trennen von Absätzen (durch eine Leerzeile) unterscheidet sich von der hier behandelten Zeilenumbruch-Optimierung. Eine Leerzeile beginnt mit ihrem Einzug und dem Abstand zwischen den Absätzen einen neuen Absatz. Was folgt, verschiebt sich stattdessen dahingehend, wo die *Enden* der Zeile innerhalb eines einzelnen Absatzes liegen. Wenn Ihnen diese Unterscheidung unklar vorkommt, lesen Sie zuerst „Zeilen- und Absatzumbrüche“.

Erzwingen eines Zeilenumbruchs

Um einen Umbruch mitten im Absatz zu erzwingen, gibt es zwei Befehlsfamilien. Der erste ist \\ und \newline. Beide beenden lediglich die Zeile hier, ohne den Absatzmodus zu verlassen. Entscheidend ist, dass sie bei der natürlichen Länge des Textes brechen, ohne ihn zu strecken – die Zeile endet also kurz vor dem rechten Rand und bleibt kurz. Dies eignet sich für Adressen oder Verse, bei denen jede Zeile genau an der gewünschten Stelle enden sollte.

Der zweite ist \linebreak. Es unterbricht *und* streckt die Wortzwischenräume, sodass die Zeile am rechten Rand ausgerichtet ist. Im Gegensatz zu \\ wird die Zeile also nie zu kurz gelassen – stattdessen kann es zu Lücken in den Wortabständen kommen. Seine Stärke wird durch \linebreak[n] (n eine ganze Zahl von 0–4) festgelegt: 4 bedeutet „die Pause erzwingen“ (die Standardeinstellung ohne Argument), während 1 ein mildes „eine andere Stelle könnte besser sein, aber hier ist akzeptabel“ ist. Kurz gesagt, \linebreak ist ein *Vorschlag*, wo unterbrochen werden soll, und die endgültige Dehnung der Zeile bleibt der Begründung von LaTeX überlassen.

Der Kontrast ist offensichtlich, sobald Sie es kompilieren. Setzen Sie \\ in die Mitte des Satzes und die Zeile wird dort abgebrochen, sodass auf der rechten Seite Leerraum verbleibt, während sie weitergeht. Setzen Sie \linebreak an derselben Stelle und die Linie erstreckt sich bis zum rechten Rand, wodurch unangenehme Lücken zwischen den Wörtern entstehen. Die Mnemonik: \\ zum Kürzen, \linebreak zum Blocksatz bis zum Rand. Beachten Sie, dass \\ Erweiterungen hat – eine Länge in eckigen Klammern, wie in \\[2ex], fügt nach dieser Zeile vertikalen Abstand hinzu, und \\* verbietet einen Seitenumbruch an dieser Stelle (siehe „Zeilen- und Absatzumbrüche“).

latex
% \\ は短く折る/\linebreak は右端まで引き伸ばす
第一の道は険しく\\
第二の道はなだらかだ。

非常に長い一文をここで\linebreak 区切ると、左側の語間が広がります。

Im Absatzmodus ist \newline gleich \\, aber innerhalb einer Tabelle (tabular) sind ihre Rollen aufgeteilt: In einer Absatzerstellungszelle wie einer p{...}-Spalte bricht \newline nur innerhalb der Zelle, während \\ die gesamte Zeile umbricht. Verwenden Sie \newline, wenn Sie eine Adresse in zwei Zeilen innerhalb einer Zelle haben möchten, ohne die Zeile zu beenden. Und wenn Sie \\ verwenden, wenn es keine Zeile zum Ende gibt (z. B. direkt am Anfang eines Absatzes), wird der Fehler There's no line here to end ausgelöst.

Verhindert einen Zeilenumbruch

Für das gegenteilige Bedürfnis – „hier nicht kaputt gehen“ – gibt es ein passendes Werkzeugset. Am praktischsten ist die Tilde ~ (ein „Unentschieden“): ein geschützter Zwischenwortraum, der dazu dient, das, was auf beiden Seiten steht, in derselben Zeile zu halten, wie in Fig.~3, Dr.~Smith, Chapter~12 oder equation~\ref{eq:1}. Ein ~ ist die Breite eines gewöhnlichen Zwischenwortraums; Der einzige Unterschied besteht darin, dass dort kein Zeilenumbruch erfolgen darf. Da es immer noch die Silbentrennung benachbarter Wörter zulässt, ist es sanfter als das Zusammenkleben eines ganzen Wortes mit \mbox und normalerweise die erste Wahl.

Um festzulegen, wie stark Sie einem Bruch widerstehen, verwenden Sie \nolinebreak[n]. Der Spiegel von \linebreak, mit n von 0 bis 4: 4 (die Standardeinstellung) verbietet eine Unterbrechung dort vollständig, während 1 ein mildes „Bitte vermeiden Sie hier eine Unterbrechung“ ist. Wenn eine ganze Phrase nicht geteilt werden darf, ist \mbox{...} praktisch: Es behandelt seinen Inhalt als eine einzelne Box und bricht sie weder über Zeilen hinweg noch trennt er sie (denken Sie daran, zu verhindern, dass T-34 in T- und 34 aufgeteilt wird). \mbox ist das Äquivalent von LaTeX zum einfachen \hbox von TeX, und das direkte Schreiben von \hbox{...} verhält sich genauso. Der Low-Level-Befehl \nobreak setzt an diesem Punkt eine unendliche „Hier nicht unterbrechen“-Strafe und liegt Befehlen wie ~ zugrunde.

Eine Einschränkung: Ein in \mbox eingeschlossenes Wort kann niemals kaputt gehen. Wenn es also nicht passt, ragt es über den rechten Rand hinaus und wird zu einem überfüllten Kästchen. Das Einfrieren wirklich zerbrechlicher Dinge – lange URLs, chemische Namen – innerhalb von \mbox geht daher nach hinten los. Greifen Sie nach ~, wenn Sie nur ein Leerzeichen schützen möchten, und nach \mbox nur für eine kurze Phrase, die Sie nicht teilen dürfen.

Silbentrennung steuern

In westlichen Texten führt LaTeX automatisch eine Silbentrennung durch und fügt einen Bindestrich ein, um ein Wort über Zeilen hinweg zu trennen. Dies ist normalerweise sinnvoll, kann jedoch bei Eigennamen oder Fachjargon, die nicht im Wörterbuch enthalten sind, fehlschlagen. Für eine einmalige Korrektur verwenden Sie \- (Backslash-Bindestrich, den diskretionären oder optionalen Bindestrich). Es bettet die Erlaubnis in ein Wort ein – „Sie können hier bei Bedarf umbrechen“ – wenn Sie also beispielsweise man\-u\-script schreiben, wird das Wort nur an den markierten Stellen umgebrochen.

Hier lauert eine Feinheit. Fügen Sie auch nur einen \- in ein Wort ein und LaTeX trennt es *nur* an den von Ihnen markierten Stellen, niemals an den anderen, an denen es sich selbst gefunden hätte. \- bedeutet also nicht „Sie dürfen auch hier brechen“, sondern „Sie dürfen nur hier brechen.“ Sie müssen daher jede gewünschte Bruchstelle buchstabieren. Beachten Sie, dass \- keine Pause *erzwingt* – es heißt lediglich „Wenn Sie eine Pause machen, muss es eine dieser Stellen sein.“

Wenn das gleiche Wort im gesamten Dokument wiederkehrt, registrieren Sie Ausnahmen einmal in der Präambel, ohne den Text zu überladen. Listen Sie Wörter mit durch Bindestriche markierten Haltepunkten in \hyphenation{...} auf. Dies ist eine globale Einstellung, die für das gesamte Dokument gilt und mehrere Deklarationen ansammelt. Zwei Einschränkungen: Verwenden Sie Kleinbuchstaben und TeX stimmt genau überein – flektierte Formen (Pluralformen und dergleichen) werden separat behandelt. Wo \- „gerade hier, gerade jetzt“ steht, stellen Sie sich \hyphenation als „einen Wörterbucheintrag für das gesamte Dokument“ vor.

latex
% プリアンブルで分割例外を一括登録(小文字・分割点をハイフンで)
\hyphenation{man-u-script analy-sis FORTRAN}

% 本文では、その場かぎりの任意ハイフン
super\-cali\-fragi\-listic

Um umgekehrt die Silbentrennung eines bestimmten Worts vollständig zu verbieten, schließen Sie es in \mbox{...} ein: Der Inhalt einer Box wird niemals umgebrochen, sodass kein Bindestrich eingefügt wird. Wie oben erwähnt, kann ein unzerbrechliches Wort jedoch die Zeile überschreiten und ein überfülltes Feld verursachen. Japanischer Text hat in diesem Sinne keine Silbentrennung, daher sind \- und \hyphenation im Wesentlichen Werkzeuge für die westlichen Sprachteile.

Überfüllt/Unterfüllt \hbox Warnungen

Zur Kompilierungszeit haben Sie wahrscheinlich Overfull \hbox- oder Underfull \hbox-Warnungen gesehen. Ein \hbox (horizontales Feld) ist eine einzelne Satzzeile. Übervoll bedeutet „die Zeile passte nicht hinein und blieb über den rechten Rand hinaus“, während Untervoll bedeutet „die Zeile ist zu locker, mit zu großem Wortabstand.“ Knuth wollte lieber warnen, als minderwertigen Schriftsatz stillschweigend hinzunehmen, und überließ die Lösung Ihnen. Die Klassenoption draft druckt neben jeder überfüllten Zeile eine schwarze Linie, damit Sie sie erkennen können.

Warum hinterlässt LaTeX eine Linie, die über den Rand hinausragt? Denn wenn TeX innerhalb der zulässigen Strecke keinen „darstellbaren“ Satz von Umbrüchen finden kann, zeigt es den Überlauf als Warnung an, anstatt die Zeile grotesk zu verteilen. Der übliche Schuldige ist ein langes Wort, eine URL oder ein Eigenname, der nicht umbricht. Die ersten Dinge, die Sie ausprobieren sollten, sind die lokalen Korrekturen aus den obigen Abschnitten: Geben Sie dem Wort Haltepunkte mit \-, fügen Sie ein \linebreak daneben ein oder entwirren Sie ein Leerzeichen mit ~. Oft ist das die Sache.

Wenn lokale Korrekturen mühsam sind und Sie etwas Lockerheit akzeptieren würden, um die Warnungen zu reduzieren, wechseln Sie zu den stumpfen Werkzeugen. Die \sloppy-Deklaration lockert die Pausentoleranz erheblich (wird \tolerance intern auf 9999 gesetzt) und akzeptiert lockere Wortabstände im Gegenzug zur Vermeidung überfüllter Kästchen. Der Standardwert ist \fussy, der gleichmäßige Abstände auf Kosten eines priorisiert gelegentlich übervoller Karton. Nachdem Sie \sloppy ausgegeben haben, kehren Sie am Ende des Abschnitts, den Sie beeinflussen wollten, zu \fussy zurück.

Diese Deklarationen haben jedoch eine Besonderheit. Der Zeilenumbruch unterliegt je nachdem, welche Deklaration am Ende des Absatzes in Kraft ist. Damit sich \sloppy auf einen bestimmten Absatz auswirkt, müssen Sie also die Leerzeile oder \par einschließen, die ihn innerhalb des Geltungsbereichs von \sloppy beendet. Um den Effekt auf einen einzelnen Absatz zu beschränken, ist die sloppypar-Umgebung sicherer: Nur der Text zwischen \begin{sloppypar} und \end{sloppypar} wird wie unter \sloppy gesetzt, und beim Beenden wird das normale Verhalten wieder aufgenommen.

Ein verfeinerterer Ansatz ist \emergencystretch – z.B. \setlength{\emergencystretch}{3em} – was eine zusätzliche Dehnung nur als letzten Ausweg zulässt und überfüllte Kartons schneidet, ohne den Abstand so stark zu stören wie \sloppy. Hilfreich ist auch das microtype-Paket, das Glyphen subtil erweitert oder verkleinert, um sie an den Rand anzupassen. Die folgende Tabelle fasst die Rolle jedes Befehls zusammen.

BefehlRolleVerlängert die Linie?
\\ , \newlineEinen Zeilenumbruch erzwingen (keinen Absatzumbruch)Nein – kurz gelassen
\linebreak[n]Schlagen Sie eine Pause vor (n=4 erzwingt sie)Ja – rechtfertigt den Rand
\nolinebreak[n]Dort eine Pause verbieten (n=4 vollständig)
~Geschütztes Leerzeichen (Unentschieden); erlaubt weiterhin die Silbentrennung
\mbox{...}Verpacken Sie den Inhalt in einem Karton. kein Umbruch, keine Silbentrennung
\-Freier Bindestrich; Brechen Sie das Wort nur hier
\hyphenation{...}Globale Unterbrechungsausnahmen in der Präambel (Kleinbuchstaben, genau)
\sloppy / \fussyRelax-Toleranz / Standard; Lokalisierung über sloppypar\sloppy neigt dazu, den Abstand zu lockern

Anordnung zur Behebung von Zeilenumbruchwarnungen

Wenn Sie die Warnungen „Übervoll“ oder „Untervoll“ mit \hbox unterdrücken, indem Sie \\ in der sichtbaren Zeile einfügen, wird später oft eine weitere Zeile unterbrochen. Die Reihenfolge lautet: Zuerst den Wortlaut überarbeiten, dann Möglichkeiten zur Silbentrennung hinzufügen, dann lokale Umbruch- oder Umbruchhinweise verwenden und zuletzt die Absatztoleranz lockern. TeX optimiert den Zeilenumbruch im gesamten Absatz, daher sollte das zeilenweise Erzwingen der letzte Schritt sein.

  • Lange Wörter, URLs und Formeln: Identifizieren Sie sie zuerst und prüfen Sie, ob sie auf natürliche Weise gekürzt oder mit einem speziellen Befehl gebrochen werden können.
  • Technische Begriffe: Fügen Sie \hyphenation{...} oder \- hinzu, damit das gleiche Wort nicht wiederholt manuell repariert werden muss.
  • Namen, Zahlen und Einheiten: Behalten Sie nur die nicht lesbaren Teilungen zusammen mit ~ oder \nolinebreak bei.
  • Letzter Ausweg: lokalisieren Sie sloppypar oder \emergencystretch; Verringern Sie nicht den Wortabstand im gesamten Dokument.