Mikrotypografie (microtype)

Dasselbe Manuskript zweimal setzen. Ein 11pt-article, 180pt Satzbreite, hundert lipsum-Absätze. Ohne microtype ergibt das 1731 Zeilen und 117 Overfull-Boxen. Eine einzige Zeile \usepackage{microtype} in der Präambel, und es sind 1702 Zeilen und 6 Overfull-Boxen. Mikrotypografie besteht aus nicht mehr als dem: Satzzeichen um Haaresbreite in den Rand hängen lassen und Glyphenbreiten um deutlich unter ein Prozent dehnen. Diese Seite betrachtet, was LaTeXs microtype tatsächlich tut – Protrusion, Font-Expansion und Tracking – samt den gemessenen Zahlen.

Was microtype tatsächlich tut

microtype setzt selbst nichts. Es ist eine einheitliche LaTeX-Schnittstelle zu den mikrotypografischen Funktionen, die pdfTeX einführte und die später teilweise zu LuaTeX und XeTeX gelangten. Geschrieben hat es R. Schlicht. Im Zentrum stehen zwei Dinge – Zeichenprotrusion (auch margin kerning) und Font-Expansion –, gefolgt von Tracking (Sperrung), dem Abschalten von Ligaturen sowie der Anpassung von Wortzwischenräumen und zusätzlichem Kerning. Protrusion und Expansion sind standardmäßig aktiv, sofern das Paket sicher annehmen kann, dass sie auf der jeweiligen Engine funktionieren.

Die Herkunft beider ist genau dokumentiert. Hàn Thế Thành implementierte sie in pdfTeX im Rahmen seiner Dissertation, die er 2000 an der Masaryk-Universität in Brünn einreichte: „Micro-typographic extensions to the TeX typesetting system“, veröffentlicht als TUGboat Band 21, Heft 4, Seiten 317–434. Dieselbe Arbeit erklärt margin kerning als notwendig für die optische Ausrichtung, weil mechanisch ausgeglichene Ränder dem Auge eher ausgefranst erscheinen, und definiert font expansion als Ersatz durch eine breitere Variante in einer lockeren und eine schmalere in einer engen Zeile, damit die Wortzwischenräume weniger schwanken. Was microtype umsetzt, geht mit anderen Worten von einer Beobachtung darüber aus, wie das menschliche Auge eine gerade Kante missdeutet.

Eine Bemerkung zum Geltungsbereich: Dies sind Verfeinerungen für westlichen Text in lateinischer Schrift. Japanisch folgt einem anderen Satzmodell – Umbruchverbote am Zeilenanfang und -ende, Abstände zwischen japanischen und westlichen Zeichen –, um das sich Werkzeuge wie luatexja kümmern; das Laden von microtype ändert daran nichts. Die grundlegendere automatische Verarbeitung westlichen Textes, Ligaturen und Kerning, gehört auf eine Schwesterseite.

Wie viel bringt microtype? Eine Messung

Je schmaler die Satzbreite, desto größer der Nutzen. Unter TeX Live 2024 wurden in einem 11pt-article mit \usepackage[T1]{fontenc} und 180pt Satzbreite – etwa eine Spalte eines zweispaltigen Layouts – hundert lipsum-Absätze gesetzt und Zeilen wie Overfull \hbox-Meldungen gezählt. Die Ergebnisse stehen in der Tabelle unten: Mit microtype sinkt die Gesamtzahl von 1731 auf 1702 Zeilen, −1,7 %, und die Überläufe von 117 auf 6. Wiederholt man die Messung bei 345pt, nahe der Textbreite eines a4paper-article, schrumpft der Abstand auf 921 → 909 Zeilen, −1,3 %. Der Effekt ist echt, aber keine dramatische Verkürzung.

EinstellungZeilen gesamt (180pt Breite, 100 Absätze)Overfull-hbox-Meldungen
(package not loaded)1731117
expansion=false1718 (nur Protrusion)102
protrusion=false1711 (nur Expansion)9
\usepackage{microtype}1702 (beide, Standard)6

Die Aufschlüsselung zeigt, dass beide Funktionen verschiedene Aufgaben erledigen. Die meisten Zeilen spart Expansion (1731 → 1711), doch Protrusion steuert dreizehn eigene bei. Das Beseitigen von Overfull-Boxen ist dagegen fast ausschließlich das Werk der Expansion: 117 sinken auf 9, während Protrusion allein nur auf 102 kommt. Ragt eine Zeile in den Rand hinaus, hilft Expansion; wirkt bloß die rechte Kante ausgefranst, hilft Protrusion. Das ist die Faustregel, wenn zu entscheiden ist, welche der beiden abzuschalten ist. Nebenbei: Das Laden von microtype setzt sowohl \pdfprotrudechars als auch \pdfadjustspacing auf 2 (ohne das Paket stehen beide auf 0); ein \the auf diese beiden verrät also, ob überhaupt etwas aktiv ist.

Zeichenprotrusion – eine optische Täuschung ausgleichen

Protrusion (margin kerning) lässt Zeichen am Zeilenanfang und -ende einen Hauch über den Rand hinausragen; der Zweck ist, eine Täuschung auszugleichen. Setzt man Punkt, Komma oder Bindestrich – oder einen Buchstaben mit runder oder schräger Kontur wie o, A, v – bündig an die Textkante, lässt der Seitenraum der Glyphe die Kante nach innen einsinken. Ragen solche Zeichen ein wenig hinaus, wirkt die Kante optisch gerade. Wie weit jedes Zeichen hinausragt, ist verschieden: viel bei Satzzeichen, weniger bei runden Buchstaben, gar nichts bei geradlinigen wie H – und microtype liefert für jede Schrift Konfigurationsdateien mit diesen Werten mit.

Um das Gesamtmaß der Protrusion anzuheben oder abzusenken, dient die Option factor (factor=1100 ergibt das 1,1-Fache der Vorgaben). Wirkungslos bleibt Protrusion dort, wo TeX keinen Rand sieht – bei den Punkten einer itemize, an den Zellenkanten einer tabular. Für solche Stellen bietet microtype \leftprotrusion und \rightprotrusion, die die dortige erste bzw. letzte Glyphe hinausragen lassen, als stünde sie an einem gewöhnlichen Außenrand. In einer Tabelle, deren linke Spalte mit Klammern oder Anführungszeichen beginnt, verändert schon deren Einsatz das Bild.

Font-Expansion – Glyphenbreiten übernehmen die Arbeit der Wortzwischenräume

Font-Expansion dehnt oder staucht die Glyphen jeder Zeile waagerecht um ein Winziges – meist Bruchteile eines Prozents bis wenige Prozent –, damit die Zeile in die Breite passt. Im Blocksatz entsteht die Zeilenbreite normalerweise allein durch das Dehnen und Stauchen des Wortzwischenraums. Übernimmt ein Teil davon die Glyphenbreite, müssen die Wortzwischenräume weniger schwanken, wodurch sich die Abstände von Zeile zu Zeile angleichen und der Absatz eine gleichmäßigere Farbe bekommt. In der obigen Messung war es die Expansion, die die Overfull-Boxen von 117 auf 9 drückte. Grenzen setzt man mit stretch und shrink, die Schrittweite mit step; die Vorgaben genügen aber für den Anfang.

Hier gibt es eine harte Grenze. Expansion funktioniert nur mit pdfTeX und LuaTeX, nicht mit XeTeX. microtype unter XeLaTeX ohne Optionen zu laden, führt zu keinem Fehler: Das Paket aktiviert nur, was sicher läuft, also arbeiten Protrusion und Tracking, während die Expansion still abgeschaltet wird. Fordert man sie mit \usepackage[expansion=true]{microtype} ausdrücklich an, bricht der Lauf jedoch hiermit ab:

log
$ xelatex xe.tex
! Package microtype Error: Font expansion does not work with xetex.

See the microtype package documentation for explanation.

% The reason is one missing primitive. Asking each engine directly:
%   pdftex : has \efcode, has \lpcode
%   xetex  : NO \efcode, has \lpcode
%   luatex : has \efcode, has \lpcode
% XeTeX can shift glyphs into the margin, but it cannot scale their widths.

Der Grund lässt sich auf ein fehlendes Primitiv zurückführen. \lpcode und \rpcode, die Beträge der linken und rechten Protrusion, gibt es auf allen drei Engines, doch \efcode, das die Expansion braucht, existiert in XeTeX nicht (pdfTeX und LuaTeX besitzen es). XeTeX kann eine Glyphe in den Rand schieben, hat aber kein Mittel, ihre Breite zu skalieren. Wer auf XeTeX die volle Behandlung einschließlich Expansion will, wechselt folgerichtig zu LuaTeX.

Tracking (\textls) – Sperren, ohne die Trennung zu zerstören

Tracking, also Sperren, vergrößert den Abstand zwischen den Buchstaben gleichmäßig. Das Gute an der Umsetzung in microtype ist, dass sie keinen Raum zwischen die Zeichen schiebt, sondern eine Kopie der Schrift mit breiteren Glyphen erzeugt und verwendet. Das Wort bleibt damit ein Wort, und die Trennung wird nicht zerstört. Streut man dagegen von Hand \kerns in ein Wort – der klassische Weg –, kann dieses Wort am Zeilenende nie mehr umbrochen werden. Für punktuelles Sperren dient \textls{...}, für alles Folgende \lsstyle, das bis zum Ende der Gruppe wirkt. Bei Überschriften, wo davor und danach kein zusätzliches Kerning erwünscht ist, hilft das gesternte \textls*{...}.

document.tex
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{microtype}
% Space out small caps by 40/1000 em wherever they appear
\SetTracking{encoding = *, shape = sc}{40}
\begin{document}
\textsc{Small Caps}, and an ad-hoc \textls[200]{wide run of letters}.

% \lsstyle stays on until the end of the group
{\lsstyle everything here is letterspaced}

% The starred form adds no kerning before or after - good for headings
\section*{\textls*{Chapter Title}}
\end{document}

Die Beträge sind Tausendstel eines Gevierts; laut microtype-Handbuch beträgt der Standard 100/1000 em = 0,1 em. Einen einmaligen Wert gibt man im optionalen Argument an, etwa \textls[200]{...}, für ganze Schriftmengen deklariert man ihn in der Präambel, etwa mit \SetTracking{encoding=*, shape=sc}{40} (dieses Beispiel sperrt Kapitälchen um 40/1000). Ein Hinweis ist angebracht: Das Handbuch selbst schreibt, dass gesperrter Kleinbuchstabentext „is held in abhorrence“, und mahnt, man solle nur Versalien oder Kapitälchen sperren, sofern man nicht genau wisse, was man tue. Tracking funktioniert mit pdfTeX und LuaTeX – die README von microtype nennt die Versionsanforderungen ausdrücklich. Wer Sperren auch in plain TeX braucht, findet im Paket letterspace genau diesen Teil.

Ligaturen abschalten, Abstände anfassen – \DisableLigatures, kerning, spacing

Die Anlässe, Ligaturen abzuschalten, sind selten, dann aber dringend – etwa ein Satz mit Code, in dem -- keinesfalls zum Halbgeviertstrich verschmelzen darf. \DisableLigatures schaltet sie für eine benannte Schriftmenge ab: \DisableLigatures{encoding = T1, family = tt*} erfasst nur die Schreibmaschinenfamilie in T1. Zu bedenken ist jedoch, dass das Abschalten aller Ligaturen einer Schrift auch deren Kerning ausschaltet – das Handbuch sagt es ausdrücklich. Führt man die ligaturbeginnenden Zeichen im optionalen Argument auf, stoppen nur die gewählten Ligaturen, etwa \DisableLigatures[?,!]{encoding = T1}. Der Befehl darf nur in der Präambel und nur einmal verwendet werden.

Die Optionen kerning und spacing aktivieren zusätzliches Kerning bzw. die Anpassung des Wortzwischenraums und sind beide nur unter pdfTeX wirksam (unter LuaTeX und XeTeX tun sie nichts). Beide sind standardmäßig aus; man nennt sie nur bei Bedarf. Einstellungen nach dem Laden ändert \microtypesetup{...} – um etwa die Protrusion nur während des Inhaltsverzeichnisaufbaus abzuschalten, klammert man es mit \microtypesetup{protrusion=false} und \microtypesetup{protrusion=true} ein. Soll ein Teil des Dokuments anders eingestellt sein, wechselt man den Kontext mit \microtypecontext{...} oder der Umgebung microtypecontext. Die Option draft schaltet die Mikrotypografie insgesamt ab, final erzwingt sie umgekehrt selbst dann, wenn die Dokumentklasse im Entwurfsmodus läuft – ein nützliches Paar für Vorher-Nachher-Versuche.

Welche Funktionen zur Verfügung stehen, hängt von der Engine ab

Zwei Dinge zum Merken: Expansion steht unter XeTeX nicht zur Verfügung, und Wortzwischenraum sowie zusätzliches Kerning gibt es nur unter pdfTeX. Die leistungsfähigste Engine ist somit pdfTeX (Protrusion + Expansion + Tracking + Kerning + Spacing), gefolgt von LuaTeX (Protrusion + Expansion + Tracking); XeTeX bietet allein Protrusion und Tracking. microtype aktiviert automatisch nur, was auf der jeweiligen Engine sicher läuft, weshalb ein Laden ohne Optionen nie einen Fehler erzeugt – und genau deshalb muss man selbst wissen, was gerade nicht wirkt.

FunktionpdfTeX / LuaTeX / XeTeXHinweise
protrusionja / ja / jaalle drei besitzen \lpcode und \rpcode; standardmäßig an
expansionja / ja / neinXeTeX hat kein \efcode; ausdrückliches Anfordern ergibt einen Package microtype Error
trackingja / ja / ja\textls und \lsstyle; standardmäßig aus, mit tracking einschaltbar
kerningja / nein / neinnur pdfTeX; standardmäßig aus
spacingja / nein / neinnur pdfTeX; Anpassung des Wortzwischenraums

Was tatsächlich in die Präambel gehört

Der Grundfall ist die einzige Zeile \usepackage{microtype}. Damit sind Protrusion und Expansion standardmäßig an (soweit die Engine sie unterstützt), und die meisten Dokumente werden dadurch spürbar besser. microtype ist stabil und nahezu nebenwirkungsfrei – es schadet praktisch nie, es hinzuzufügen. Auf den pdfTeX-Engines kombiniert man es üblicherweise mit \usepackage[T1]{fontenc}, auch weil die Konfigurationsdateien für Protrusion und Expansion nach Kodierung geordnet sind. Das Beispiel unten geht etwas weiter: Es aktiviert Protrusion und Expansion ausdrücklich, sperrt Kapitälchen leicht und schaltet Ligaturen nur für die zur Codedarstellung genutzte Schreibmaschinenfamilie ab.

preamble.tex
\documentclass{article}
\usepackage[T1]{fontenc}
% protrusion and expansion explicitly on;
% "final" forces them on even when the class is in draft mode
\usepackage[activate={true,nocompatibility},final]{microtype}

% letterspace small caps a little (40/1000 em)
\SetTracking{encoding = *, shape = sc}{40}

% no ligatures in the typewriter family, so "--" stays two hyphens
\DisableLigatures{encoding = T1, family = tt*}

\begin{document}
% turn protrusion off just while the table of contents is built
\microtypesetup{protrusion=false}
\tableofcontents
\microtypesetup{protrusion=true}
\end{document}

Zum Schluss eine Kalibrierung der Erwartungen. Solche Korrekturen sind zurückhaltend, und auf einer einzelnen Seite sieht man sie womöglich gar nicht – die Messung ergab nur 1,7 Prozent weniger Zeilen, und das bei schmaler Satzbreite. Im Schreiballtag zählt mehr, dass die Overfull-Boxen von 117 auf 6 fielen: Jeder ausbleibende Überlauf ist ein Satz, den man nicht umformulieren muss, damit er passt. Der Wert von microtype liegt weniger im Kürzen als darin, die Zahl der Eingriffe von Hand zu senken.