Der häufigste Rat zu mehrsprachigen Dokumenten in LaTeX lautet: „babel für pdfLaTeX, polyglossia für XeLaTeX“. Er ist überholt. Das babel in TeX Live 2024 stammt vom Februar 2024, unterstützt pdfTeX, XeTeX und LuaTeX gleichermaßen, weist mit \babelfont je Sprache Systemschriften zu und bringt auf LuaTeX eine eigene Umsetzung des bidirektionalen Unicode-Algorithmus mit. Zählt man die Lokaldaten auf der eigenen Platte, bietet babel 297 Sprachverzeichnisse und 387 .ini-Dateien. polyglossia dagegen hängt von fontspec ab und startet unter pdfLaTeX nicht einmal. Diese Seite behandelt, was für ein Dokument mit gemischten Schriftsystemen nötig ist: welches der beiden zu wählen ist, wie zwischen Sprachen gewechselt wird und wo Silbentrennung und Schriften lautlos versagen – jeweils mit den Meldungen, die dabei tatsächlich erscheinen.
babel oder polyglossia: Was man verwenden sollte
babel verwenden, sofern kein besonderer Grund dagegen spricht. Es läuft auf jeder Engine, liefert mehr Lokaldaten und wird von beiden am regsten weiterentwickelt. Das babel in TeX Live 2024 trägt 2024/02/07 v24.2 – die Versionsnummer ist ein Jahr, weil es davon mehrere Ausgaben pro Jahr gibt. Geschrieben hat es Johannes Braams, gepflegt wird es heute von Javier Bezos. polyglossia steht bei 2024/03/07 v2.1, bezeichnet sich in der eigenen Paketzeile als modernen mehrsprachigen Satz mit XeLaTeX und LuaLaTeX und stellt sich in der README als Alternative zu babel für Nutzer eben dieser beiden Engines vor. Die beiden sind also keine gleichrangigen Alternativen, sondern ineinander verschachtelt: babel deckt das ganze Feld ab, polyglossia nur die Unicode-Engines. Lädt man polyglossia unter pdfLaTeX, kommt der Abbruch nicht von polyglossia, sondern von dessen Abhängigkeit: ! Fatal Package fontspec Error: The fontspec package requires either XeTeX or LuaTeX.
| Aspekt | babel | polyglossia |
|---|---|---|
engines | pdfTeX, XeTeX und LuaTeX gleichermaßen | nur XeTeX und LuaTeX (fontspec erforderlich) |
locale data | 297 Sprachverzeichnisse und 387 .ini-Dateien (gemessen unter TeX Live 2024) | 242 gloss-Dateien, angekündigt für über 80 Sprachen |
declaring | \usepackage[french,english]{babel}; die letzte ist die Hauptsprache | \setmainlanguage{...} und \setotherlanguage{...}; Nebensprachen müssen explizit sein |
switching | \selectlanguage{...} für einen Block und \foreignlanguage{...}{...} im Fließtext | dieselben zwei, dazu \text plus Sprachname, etwa \textgreek{...} |
fonts | \babelfont{rm}{...} weist je Sprache oder Schriftsystem zu (nur Unicode-Engines) | fontspec-Befehle wie \newfontfamily\greekfont{...} |
bidi | Auf LuaTeX ist bidi=basic babels eigene Unicode-Umsetzung; auf XeTeX wird an das Paket bidi delegiert | gibt die Richtungssteuerung vollständig an bidi (XeTeX) und luabidi (LuaTeX) ab |
license | LPPL, Wartungsstatus maintained, Current Maintainer Javier Bezos | MIT-Lizenz |
Sprache wechseln mit selectlanguage und foreignlanguage
Für längere Passagen \selectlanguage{french}, für eine Wendung im Satz \foreignlanguage{french}{...}. Das Erste gilt ab dort fort, das Zweite nur innerhalb seines Arguments. Was sich ändert, sind nicht bloß die Trennregeln. \tableofcontents wird zu „Table des matières“, und das Wort vor einer Kapitelnummer zu „Chapitre“ – das ist die Übersetzung der Dokumentzeichenketten, und darin liegt babels praktischer Hauptwert. Bemerkenswerter noch: Der gesetzte Text selbst verändert sich. Wie auf der Seite zum westlichen Satz gemessen, belegt Bonjour: oui! blank 58,48572pt, dehnt sich unter [french]{babel} aber auf 62,37366pt, und pdftotext liefert Bonjour : oui ! zurück. Die französische Regel eines schmalen Abstands vor hoher Interpunktion ist als echter Zwischenraum vor Doppelpunkt und Ausrufezeichen umgesetzt worden. babel ist also kein Werkzeug, um eine Sprache zu etikettieren, sondern eines, um deren typografische Gewohnheiten anzuwenden.
% babel: the LAST option is the main language of the document
\usepackage[russian,french,english]{babel}
...
\foreignlanguage{french}{Bonjour : oui !} % inline, one phrase
\selectlanguage{french} % from here on
\tableofcontents % now "Table des matieres"
% polyglossia (XeLaTeX / LuaLaTeX only)
\usepackage{polyglossia}
\setmainlanguage{english}
\setotherlanguage{greek} % secondary languages must be declared
\textgreek{...} % \text + language nameWas geschieht, wenn eine Sprache keine Trennmuster hat
Es erscheint eine Warnung statt eines Fehlers, und der Text wird nach englischen Regeln getrennt. Grund ist eine Einschränkung von TeX: Trennmuster lassen sich zur Laufzeit nicht laden, sie werden beim Bau des Formats eingebrannt. Die language.dat von TeX Live 2024 führt – ohne die Aliaszeilen – 87 Sprachen auf, während babel .ldf-Dateien für mehr davon mitbringt; die beiden Mengen decken sich also nicht. Wählt man Albanisch mit \usepackage[albanian,english]{babel}, erscheint Package babel Warning: No hyphenation patterns were preloaded for the language 'Albanian' into the format. und darauf Now I will use the patterns preloaded for \language=0 instead. Und \language=0 ist Knuths ursprüngliches hyphen.tex, also amerikanisches Englisch. Das PDF entsteht anstandslos, der Rückgabewert ist 0; albanische Wörter werden lediglich nach englischen Regeln getrennt. Ohne einen Blick ins Protokoll merkt man nichts. Abhilfe schaffen das Paket mit den Mustern dieser Sprache samt Neuaufbau des Formats per fmtutil oder, auf einer Unicode-Engine, \babelprovide[import]{...}.
Schriften je Schriftsystem umschalten – der häufigste Fehler überhaupt
Eine Sprache zu deklarieren bringt keine Schrift mit. Das ist der mit Abstand häufigste Unfall in mehrsprachigen Dokumenten. Deklariert man unter XeLaTeX \setotherlanguage{russian} und schreibt \textrussian{Русский}, so verschwindet diese Passage von der Seite, weil das voreingestellte Latin Modern kein Kyrillisch enthält. Ein Fehler wird nicht gemeldet. Allein das Protokoll führt pro Zeichen eine Zeile der Art Missing character: There is no Р (U+0420) in font [lmroman10-regular]. Der Rückgabewert ist 0, das PDF existiert, nur das Russische fehlt – ein Fehlschlag, den man leichter übersieht als jeden anderen. Abhilfe schafft eine Schriftzuweisung je Schriftsystem: mit babel \babelfont[russian]{rm}{...}, mit polyglossia fontspecs \newfontfamily\russianfont{...}. Zu beachten ist, dass \babelfont nur für Unicode-Engines gilt; unter pdfLaTeX aufgerufen ergibt es eine undefinierte Kontrollsequenz, \babelfont ->\bbl@error@ {only-lua-xe}. Für nichtlateinische Schriften unter pdfLaTeX führt der Weg nicht über Schriften, sondern über die Kodierungen von fontenc – T2A für Kyrillisch, LGR für Griechisch.
% XeLaTeX / LuaLaTeX: give each script a font that actually has it
\usepackage[russian,greek,english]{babel}
\babelfont{rm}{Latin Modern Roman}
\babelfont[russian]{rm}{Times New Roman}
\babelfont[greek]{rm}{Times New Roman}
% pdfLaTeX has no \babelfont: match the encoding instead
% \usepackage[T2A,LGR,T1]{fontenc} % Cyrillic, Greek, Latin
% Without this the text is simply absent and the log says:
% Missing character: There is no Р (U+0420) in font [lmroman10-regular]Rechts-nach-links: für Arabisch und Hebräisch LuaLaTeX
Wer bidirektionalen Satz ernsthaft betreibt, hat nur eine Wahl: LuaLaTeX. Das ist keine Geschmacksfrage, sondern eine Frage, wo die Funktion sitzt. babel wählt seine Richtungsbehandlung mit der Option bidi=, und bidi=basic – der Modus, in dem babel den bidirektionalen Unicode-Algorithmus selbst umsetzt – läuft nur auf LuaTeX. Fordert man ihn unter XeLaTeX an, wird unumwunden mitgeteilt, dass die Ergebnisse falsch sein werden: ! Package babel Error: The bidi method 'basic' is available only in luatex. I'll continue with 'bidi=default', so expect wrong results. Die XeLaTeX-Option heißt bidi=bidi und gibt an das externe Paket bidi ab – doch schon das bloße Laden erzeugt Package babel Warning: Some functions for 'bidi=bidi' are tentative. They might not work as expected and their behavior could change in the future. polyglossia steht ebenso da, denn auch es überlässt die Richtung bidi und luabidi. Kombiniert man auf LuaLaTeX \babelprovide[import, main]{arabic} mit \babelfont{rm}{...}, übersetzt ein gemischt arabisch-englisches Dokument ohne jede Warnung.
Man kann auch das Paket bidi unmittelbar verwenden: \setRTL (Alias \setRL) lenkt den Fluss ab dort nach rechts-nach-links, \setLTR (Alias \setLR) wieder zurück. Unter XeTeX lässt sich die Richtung nicht automatisch erschließen, weshalb jede Stelle, an der LR und RL zusammentreffen, ausdrückliche Auszeichnung braucht – und genau diese Menge an Handarbeit schmerzt. LuaTeXs bidi=basic entscheidet solche Grenzen stattdessen nach den Unicode-Regeln und kehrt außerdem Layouts wie Tabellen und Ränder um. Für eine Sprache wie Persisch, rechtsläufig, aber mit eigenen Konventionen für Ziffern, bietet babel feinere Stellschrauben wie bidi.mapdigits. Das Fazit ist schlicht: Für jedes Dokument mit Arabisch, Hebräisch oder Persisch ist der Start auf LuaLaTeX am Ende der schnellste Weg.
% LuaLaTeX: babel handles direction with its own Unicode implementation
\usepackage[bidi=basic]{babel}
\babelprovide[import, main]{arabic}
\babelfont{rm}{Geeza Pro}
% mixed Arabic and English needs no manual direction marks here
% XeLaTeX must delegate to the bidi package, which babel calls tentative
% \usepackage[bidi=bidi]{babel}
% \setRTL % or \setRL -- switch the flow right-to-left
% \setLTR % or \setLR -- switch it backWie also wählen?
Die Entscheidung beginnt nicht bei „welche Sprachen mische ich?“, sondern bei „mit welcher Engine setze ich?“ Eine Mischung aus Lateinisch mit etwas Kyrillisch und Griechisch läuft mit pdfLaTeX, babel und fontenc einwandfrei; sollen es aber Systemschriften sein, oder kommen Arabisch, Hebräisch oder eine indische Schrift ins Spiel, braucht es eine Unicode-Engine. Erst wenn das geklärt ist, stellt sich überhaupt die Frage babel oder polyglossia. CJK ist eine eigene Geschichte: Japanisch ist Sache der pTeX-Engines und ihrer Klassen, während Chinesisch, Koreanisch und Japanisch außerhalb der pTeX-Welt zu CJKutf8, xeCJK, ctex und kotex gehören – beide haben eigene Seiten.
- Überwiegend Lateinisch mit etwas Kyrillisch oder Griechisch → pdfLaTeX mit
babelundfontenc(T2A/LGR). Der bestehende Arbeitsablauf bleibt unangetastet. - Systemschriften erwünscht oder mehrere Schriftsysteme gemischt → XeLaTeX oder LuaLaTeX mit
babelund\babelfont. - Arabisch, Hebräisch oder Persisch (RTL) ist beteiligt → LuaLaTeX mit babels
bidi=basic. Dieser Modus steht unter XeLaTeX nicht zur Verfügung. - Gründe für polyglossia → es liegen bereits dafür geschriebene Dokumente vor, oder die benötigte Sprache wird nur dort unterstützt. Für Neues ist babel die sicherere Wahl.
- Japanisch, Chinesisch oder Koreanisch → die eigenen Wege (die Seiten zum japanischen Satz und die CJK-Seite).