Westlichen Text schreiben

Tippt man schlichten lateinschriftlichen Text in LaTeX, kommt er mit erstaunlicher Sorgfalt heraus: office verschmilzt das ffi zu einer Glyphe, das Paar AV rückt um 1,11084 pt zusammen, und die Zeilenumbrüche werden anhand des ganzen Absatzes gewählt. Doch diese Automatik lässt auch Lücken – sie trennt wolffish bereitwillig als wolff-ish. Und bricht man die Ligatur mit \/ auf, um das zu beheben, verschwindet die Silbentrennung des Wortes vollständig. Diese Seite legt mit Messungen dar, welche Entscheidungen beim Setzen westlicher Texte bei der Autorin bleiben: wann eine Ligatur zu brechen ist, was babel zu deklarieren ist, wie Versalien und Kapitälchen einzusetzen sind und was sich ändert, wenn westliche Passagen in einem japanischen Manuskript stehen.

Die fünf Ligaturen, die LaTeX bildet: ff, fi, fl, ffi, ffl

Eine Ligatur verschmilzt benachbarte Buchstaben zu einer einzigen Glyphe; LaTeX bildet standardmäßig fünf: ff, fi, fl, ffi und ffl. Tippt man office oder fluffier in den Fließtext, geschieht die Ersetzung, ohne dass in der Quelle eine Spur bleibt. Der Grund ist die Form: Der Auslauf oben rechts am f stößt an den Punkt eines folgenden i oder die Oberlänge eines l, weshalb f-Ligaturen seit der Zeit des Bleisatzes gegossen werden. Gemessen in 10 pt T1-Computer-Modern ist die fi-Ligatur 5,5542 pt breit, das getrennte f{}i 5,83191 pt – die Ligatur ist 0,27771 pt schmaler, und genau das ist der durch das Zusammenrücken gesparte Raum.

Dieselbe Mechanik greift auch bei der Interpunktion. Zwei aufeinanderfolgende Bindestriche -- ergeben einen Halbgeviertstrich für Zahlenbereiche, drei --- einen Geviertstrich für Einschübe, und zwei Gravis-Zeichen samt zwei später folgenden Apostrophen liefern die typografischen öffnenden und schließenden doppelten Anführungszeichen. Diese Umwandlungen stecken in den Schriftmetriken, ein Befehl ist nicht nötig (welcher Strich wann passt, steht ausführlich auf der Seite zu Anführungszeichen und Strichen).

Drei Wege, eine Ligatur zu brechen – nur einer erhält die Silbentrennung

Eine Ligatur, die eine Morphemgrenze überspannt – die Naht, an der ein Wort aus Teilen gebaut wurde –, schadet der Lesbarkeit, statt ihr zu nützen. Klassisches Beispiel ist shelfful (shelf + ful): Verschmilzt man das ff, verschwindet die Fuge zwischen beiden Teilen. Das Wort steht bei Knuth selbst, auf Seite 19 des TeXbook, worauf die Dokumentation des Pakets selnolig bis heute verweist. cufflink, offload, wolffish und halflife sind von derselben Art. Überliefert sind drei Wege, die Ligatur zu brechen: shelf\/ful (eine Kursivkorrektur), shelf{}ful (eine leere Gruppe) und shelf\kern0pt ful (ein Kern der Breite null).

Hier liegt ein Unterschied, den erst die Messung zeigt. Fragt man \showhyphens nach den Trennstellen, wird schlichtes wolffish als wolff-ish getrennt – wo die Morpheme wolf-fish verlangten. Auch wolf{}fish wird wolff-ish: Die Ligatur ist fort, die Silbentrennung bleibt unberührt. wolf\/fish und wolf\kern0pt fish dagegen haben überhaupt keine Trennstellen mehr, und ein eingeschobenes \mbox{} ebenso wenig. Der Grund ist einfach: \/ und \kern fügen je einen Satzknoten ein, und TeXs Suche nach dem Wort endet dort. {} hinterlässt nichts, das Wort bleibt ein Wort – womit {} der einzige Ligaturbrecher ist, der die Silbentrennung erhält.

SchreibweiseBreite (10pt, T1 CM)Was showhyphens meldet
shelfful30,88135 ptshelf-ful – Ligatur erhalten, Trennstelle erhalten
shelf{}ful31,15906 ptshelf-ful – Ligatur weg, Trennstelle bleibt
shelf\kern0pt ful31,15906 ptkeine Trennstellen – Silbentrennung verloren
shelf\/ful31,93665 ptkeine Trennstellen, dazu 0,77759 pt Kursivkorrektur auf dem f

Die praktische Folgerung: Bricht man eine Ligatur von Hand, nimmt man {}. \/ ist die ehrwürdige Form aus dem TeXbook und lässt sich damit rechtfertigen, dass sie den Raum des f-Überhangs zurückgibt – doch sie verhindert den Umbruch des Wortes am Zeilenende. Bei kurzen Wörtern ist der Schaden gering; bei einem langen Kompositum wie selffulfilling dehnt der Verlust aller Trennstellen die Wortzwischenräume dieser Zeile und lässt den ganzen Absatz mager wirken. Steht LuaLaTeX zur Verfügung, ist selnolig die schönste Antwort: Es trägt englische und deutsche Morphologie als Muster und unterdrückt die unerwünschten Ligaturen in shelfful oder offload ohne jede Auszeichnung im Text (Version 0.302 in TeX Live 2024, nur LuaLaTeX).

latex
% \showhyphens output, TeX Live 2024, T1 Computer Modern:
%   shelfful           -> shelf-ful   (ligature, break point kept)
%   shelf{}ful         -> shelf-ful   (ligature broken, break point kept)
%   shelf\kern0pt ful  -> shelfful    (no break points)
%   shelf\/ful         -> shelfful    (no break points)
%   wolffish           -> wolff-ish   (a break TeX gets wrong on its own)

A shelf{}ful of books, one cuff{}link, an off{}load.

% LuaLaTeX only: handles the whole word list for you
% \usepackage{selnolig}

Kerning rückt AV um 1,11084 pt zusammen – und {} hebt auch das auf

Ein Kern verändert den Abstand eines bestimmten Buchstabenpaares, verengt oder weitet ihn, damit die Abstände gleichmäßig wirken. Paare mit schrägen Formen wie AV, To, Wa und LT sehen unbehandelt lückenhaft aus. Gemessen in 10 pt T1-Computer-Modern misst AV 13,8855 pt, A{}V mit einer leeren Gruppe dazwischen dagegen 14,99634 pt – die von der Schrift geforderten 1,11084 pt Verengung sind fort. Die Kerning-Tabelle steckt in den Schriftmetriken (eine .tfm-Datei in der pdfLaTeX-Welt, eine Tabelle in der Schrift bei OpenType), und TeX liest sie zur Abstandsbestimmung aus. Die Autorin schreibt nichts.

Eine Warnung fällt von hier auf den vorigen Abschnitt zurück: Bricht man eine Ligatur mit {}, entfällt auch der Kern, der an dieser Stelle stand. War zwischen den beiden f ein Kern definiert, ist er ebenfalls fort. Bei shelf{}ful sind das die 0,27771 pt, um die 30,88135 pt auf 31,15906 pt anwuchsen. Fürs Auge ist das nicht sichtbar, doch wo die Passung der Buchstaben exakt stimmen muss – ein Logo, eine Wortmarke –, ist ein \kern mit eigenem Wert sicherer als der Griff zu {}. Umgekehrt gilt: Soll ein ganzes Wort gleichmäßig gesperrt werden (Tracking, Sperrsatz), streue man keine eigenen \kerns, sondern nehme \textls{...} aus microtype, das die Silbentrennung intakt lässt.

Silbentrennung ist sprachabhängig – mit babel deklarieren

Dieselbe Schreibung bricht je nach Sprache an anderen Stellen. Fragt man \showhyphens, ergibt signature unter englischen Mustern sig-na-ture, unter französischen si-gna-ture und unter spanischen sig-na-tu-re – die Trennstellen selbst wandern. Kongress ist krasser: Unter englischen Mustern findet sich überhaupt keine Trennstelle. Ein guter Teil der Klagen über „die Zeilen packen nicht“ oder „die Wortabstände dehnen sich ständig“ geht auf ein Dokument zurück, das seine Sprache nie deklariert hat. \usepackage[french]{babel} – unter XeLaTeX und LuaLaTeX polyglossia – ist kein Schmuck, sondern Voraussetzung für korrekten Satz.

Wortenglishfrenchngermanspanish
signaturesig-na-turesi-gna-turesi-gna-turesig-na-tu-re
AnalyseAnal-yseAna-lyseAna-ly-seAnaly-se
KongressKongress (keine Trennstellen)Kon-gressKon-gressKon-gress
impossibleim-pos-si-bleim-pos-sibleim-pos-si-bleim-pos-si-ble
transatlantiquetransat-lan-tiquetrans-at-lan-tiquetrans-at-lan-ti-quetrans-atlan-ti-que

Auch bei deklarierter Sprache verschätzt sich die Automatik bei Eigennamen und Fachbegriffen. Die Abhilfen kommen in drei Stufen. (1) Soll ein Wort stets nur an bestimmten Stellen brechen, listet man es in der Präambel in \hyphenation{...} und markiert die erlaubten Stellen mit -, die Wörter durch Leerzeichen getrennt. Unter den voreingestellten (US-englischen) Mustern hat manuscript überhaupt keine Trennstelle, weshalb \hyphenation{man-u-script} seit Jahrzehnten das Standardbeispiel ist. (2) Für den Einzelfall setzt man \- (einen bedingten Trennstrich) ins Wort – doch ein Wort mit \- bricht dann nur noch dort. (3) Soll gar nicht getrennt werden, umschließt man es mit \mbox{...}. Wie oben gemessen, nimmt \mbox{} alle Trennstellen fort – hier gerade der Zweck.

latex
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}          % loads the English hyphenation patterns
\hyphenation{man-u-script data-base FORTRAN}   % global exceptions
\begin{document}
We rewrote the manuscript in \mbox{FORTRAN} overnight,
and the data\-base held.
\end{document}

% \showhyphens{...} prints the break points to the log --
% the fastest way to see what the current patterns actually do.

babel ändert mehr als die Silbentrennung – es ändert den Text selbst

Übergibt man babel eine Sprache, kommen deren typografische Konventionen mit. Am deutlichsten zeigt es das Französische. Misst man dieselbe Eingabe Bonjour: oui!: ohne babel 58,48572 pt breit, mit \usepackage[french]{babel} 62,37366 pt – 3,88794 pt mehr. Zieht man den Text aus dem PDF, ist der Grund offensichtlich: Ausgegeben wird Bonjour : oui !. Die französische Typografie setzt vor die hohen Satzzeichen (:, ;, !, ?) einen Abstand, und babel fügt ihn selbsttätig ein. Mit \og ... \fg{} erhält man zudem die Guillemets « ».

Deutsch liefert über seine Anführungskürzel die unteren und oberen Anführungszeichen „ … “, und Spanisch wie Italienisch bringen ihre eigenen Konventionen auf dieselbe Weise mit. Hier lauert eine Falle: In dem Moment, in dem man babels Sprache wechselt, taucht Abstand an Stellen auf, wo zuvor keiner war – der Zeilenumbruch ändert sich vollständig und das Layout verrutscht. Genau das steckt hinter „Ich habe während der Gutachterrunde eine Sprachoption ergänzt, und nun sind die Gleitobjekte auf ganz anderen Seiten verschoben.“ Die Sprache legt man in der ersten Präambel fest, und in mehrsprachigen Dokumenten benennt man die Hauptsprache ausdrücklich mit main=.

Kapitälchen und Versalien: \textsc{UNESCO} wird nicht klein

Soll ein Akronym oder ein Name im westlichen Fließtext hervortreten, stören Kapitälchen den Grauwert der Zeile weniger als eine Folge von Versalien. Der Befehl lautet \textsc{...} – und hier liegt eine häufige Verwechslung. Eine Kapitälchenschrift ist eine, in der auf den Kleinbuchstabenplätzen kleine Großbuchstaben stehen. Was man \textsc übergibt, muss folglich kleingeschrieben sein. Gemessen in 10 pt T1-Computer-Modern misst \textsc{unesco} 34,68042 pt, \textsc{UNESCO} dagegen 46,09985 pt – Letzteres ist breiter als ein gewöhnliches UNESCO (42,35077 pt). Wer verkleinern wollte, hat die breiteste der drei Varianten erzeugt.

Kapitälchen haben einen zweiten Preis, auf der PDF-Seite. Lässt man pdftotext über ein PDF laufen, das \textsc{unesco} gesetzt hat, kommt unesco zurück – weiterhin klein. Die Glyphen sind Großbuchstaben, die Textebene enthält Kleinbuchstaben. Eine Arbeit, die Organisations- oder Normnamen in Kapitälchen setzt, wird deshalb bei einer Suche nach ihnen womöglich nicht gefunden. Zählen bibliografische Daten und Auffindbarkeit, setzt man Akronyme in gewöhnlichen Versalien und hebt sich \textsc für die Stellen auf, an denen der Kontrast wirklich gewollt ist. \MakeUppercase behandelt in neueren Kernen Akzente korrekt: \MakeUppercase{stra\ss e caf\'e na\"\i ve} ergibt STRASSE CAFÉ NAÏVE, wobei sich ß konventionsgemäß zu SS öffnet.

Noch etwas: Der Schriftschrank hat Grenzen. Computer Modern besitzt keine kursiven Kapitälchen, daher erzeugt \textit{\textsc{unesco}} die Meldung LaTeX Font Warning: Font shape T1/cmr/m/scit undefined und ersetzt sie stillschweigend durch geneigte Kapitälchen. Es ist eine Warnung, kein Fehler, und reist deshalb gern unbemerkt bis in die Veröffentlichung mit. Werden kursive Kapitälchen wirklich gebraucht, bleibt die Wahl zwischen einer anderen Schrift – Latin Modern eingeschlossen – und dem Verzicht auf die Kombination.

latex
\textsc{unesco}          % 34.68042pt -- real small caps
\textsc{UNESCO}          % 46.09985pt -- full-size caps in the SC font
UNESCO                   % 42.35077pt -- ordinary capitals

% pdftotext of the first line gives "unesco", in lowercase

\MakeUppercase{stra\ss e caf\'e}   % -> STRASSE CAFÉ

% English abbreviations keep the period, and the period is not a sentence end:
e.g.\ and i.e.\ and cf.\ and et al.\ -- see the punctuation page

Den rechten Rand bändigen: microtype und Overfull-hbox

Das Paket, das westlichen Satz um eine ganze Stufe hebt, ist microtype. Die eine Zeile \usepackage{microtype} bringt zwei mikrotypografische Verfeinerungen ins Spiel. Zeichenvorstoß (protrusion) schiebt Satzzeichen am Zeilenende sowie runde oder schräge Buchstaben wie o und A haarfein über den Rand hinaus und erzeugt eine optisch gerade Kante. Schriftdehnung (expansion) dehnt oder staucht die Glyphen jeder Zeile um Bruchteile eines Prozents und übernimmt einen Teil der Arbeit, die sonst der Wortzwischenraum leisten müsste. Welche Funktionen zur Verfügung stehen, hängt von der Engine ab: microtype-xetex.def enthält die Fehler Font expansion does not work with xetex und Letterspacing currently doesn't work with xetex – unter XeLaTeX ist also nur mit protrusion zu rechnen.

Trotzdem bleiben Zeilen, die über den rechten Rand hinausragen; die Meldung Overfull \hbox im Log ist das Signal. TeX wählte diese Umbrüche, indem es den Absatz als Ganzes abwog – der Knuth–Plass-Algorithmus, 1981 von Donald Knuth und Michael Plass in Software: Practice and Experience veröffentlicht. Eine überlaufende Zeile heißt daher nicht, dass der Algorithmus dort aufgab, sondern dass ihm keine Anordnung des ganzen Absatzes besser gefiel. Zwei Deklarationen regeln, wie dicht ein Absatz packt: \sloppy nimmt größere Wortabstände in Kauf, um ein Überlaufen zu vermeiden, \fussy (die Voreinstellung) hält die Abstände streng und lässt das Überlaufen zu. Um einen einzelnen Absatz zu lockern, packt man ihn in die Umgebung sloppypar. Die Reihenfolge zählt jedoch: \sloppy kommt zuletzt. Erst microtype laden, dann ein Wort umformulieren oder ein einzelnes \- ergänzen – meist ist die Sache damit erledigt, und der Absatz sieht besser aus.

Wenn eine japanische Autorin ein westlichsprachiges Dokument setzt

Beginnt man in einer japanischen Umgebung einen englischen Aufsatz, kommt meist zuerst dieser Fehler: ! LaTeX Error: Unicode character   (U+3000) not set up for use with LaTeX. Schuld ist ein Vollbreiten-Leerzeichen; ein einziges, das die Eingabemethode mitten in der Umwandlung zurückgelassen hat, bringt pdfLaTeX zum Stehen. (U+FF08) und (U+FF09) scheitern genauso, mit not set up for use with LaTeX. Heikel ist, dass sie auf dem Bildschirm von einem halbbreiten Leerzeichen oder einer gewöhnlichen Klammer nicht zu unterscheiden sind. Wer am Tag, an dem der englische Entwurf beginnt, eine Minute darauf verwendet, Vollbreiten-Leerzeichen, -Klammern und -Kommas zu suchen und zu tilgen, ist diese Fehlerklasse ein für alle Mal los.

Zweitens zählt die Wahl von Dokumentklasse und Engine. Setzt man ein englisches Dokument mit einer japanischen Klasse wie jsarticle oder mit upLaTeX, steht das japanische Satzmodell weiterhin dahinter und schiebt Arbeit ein, die der westliche Text nicht braucht. Für ein rein englisches Manuskript ist der schlichte Wechsel zu article mit pdfLaTeX – oder LuaLaTeX mit fontspec – der sichere Weg. Umgekehrt geraten in einem überwiegend japanischen Manuskript die Satzabstände der westlichen Passagen leicht ungleichmäßig, sodass \frenchspacing eine Überlegung wert ist (der Mechanismus steht auf der Seite zur Interpunktion). Und microtypes protrusion und expansion sind für westliche Texte gedacht; den japanischen Satz übernehmen Werkzeuge wie luatexja nach einem anderen Modell.

  • Am ersten Tag die Vollbreitenzeichen ausräumen. Nach dem Vollbreiten-Leerzeichen U+3000, den Vollbreitenklammern () und dem Vollbreitenkomma suchen und sie löschen. Genau darum geht es bei not set up for use with LaTeX.
  • Die Sprache vor dem Schreiben deklarieren. Wird \usepackage[english]{babel} erst später ergänzt, ändert sich der Zeilenumbruch und mit ihm die Lage der Gleitobjekte.
  • Ligaturen von Hand mit {} brechen. \/ und \kern0pt löschen die Silbentrennung des Wortes. Unter LuaLaTeX übernimmt selnolig die Arbeit.
  • Akronyme in gewöhnlichen Versalien setzen. \textsc hinterlässt Kleinbuchstaben in der PDF-Textebene und ist damit das falsche Werkzeug für ein Wort, das gefunden werden soll.
  • \sloppy ist das letzte Mittel. Erst microtype, dann eine Umformulierung oder ein einzelnes \-. Die Overfull \hbox-Meldungen zählt man danach, nicht davor.