TeX wurde für Schriften mit 256 Zeichen entworfen. Chinesisch braucht Zehntausende. Die Antwort des Pakets CJK lautete 1994 denkbar direkt: die Schrift in Stücke zu je 256 Glyphen zerlegen und jeweils nur das Stück laden, in das das nächste Zeichen fällt. Läuft pdfLaTeX heute über einen chinesischen Absatz, kommt genau das heraus — ein PDF mit gbsnu4e, gbsnu5b, gbsnu65, eine Teilschrift pro Unicode-Block. Diese Seite behandelt CJK in LaTeX außerhalb der pTeX-Welt: CJK/CJKutf8 unter pdfLaTeX, xeCJK unter XeLaTeX, ctex für Chinesisch und kotex für Koreanisch. Jeder dieser Wege scheitert zuerst an der Schrift, deshalb steht hier auch, welche CJK-Schriften ein unverändertes TeX Live 2024 tatsächlich mitbringt.
Chinesisch und Koreanisch unter pdfLaTeX: CJKutf8 funktioniert weiterhin
An pdfLaTeX gebunden zu sein hindert niemanden daran, Chinesisch oder Koreanisch zu setzen. Unter TeX Live 2024 genügt \usepackage{CJKutf8} samt einer CJK*-Umgebung um den Text — ganz ohne Schriftinstallation. Gemessen wurde: Kurzzeichen (gbsn), Langzeichen (bsmi), Koreanisch (mj) und Japanisch (min) übersetzten jeweils im ersten Lauf und betteten Type-1-Teilschriften in das PDF ein. Das Paket stammt von Werner Lemberg, der Copyright-Vermerk nennt 1994–2021, und die in TeX Live enthaltene Fassung ist 4.8.5 vom 16. Oktober 2021. Es ist eingefroren, nicht kaputt. Der Haken: CJK liest ausschließlich Schriften, die vorab für TeX konvertiert wurden; eine im Betriebssystem installierte OpenType-Schrift bleibt unerreichbar. Genau diese eine Einschränkung trennt es von XeLaTeX.
% pdflatex — simplified Chinese, no extra fonts needed
\documentclass{article}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK*}{UTF8}{gbsn}
这是一段中文,混排 English words 也没问题。
\CJKfamily{gkai}换成楷体。
\end{CJK*}
\end{document}Das erste Argument der Umgebung ist die Kodierung, das zweite die Schriftfamilie — und was dort stehen darf, hängt allein davon ab, welche vorkonvertierten Schriften vorhanden sind. Acht Familien übersetzten unter TeX Live 2024 unverändert; sie stehen in der Tabelle unten. Nur song scheiterte, mit Font cyberb30 at 600 not found: Es setzt Cyberbit voraus, eine separat zu beschaffende Schrift. Der zweite Stolperstein, den jede und jeder einmal erlebt, ist CJK-Text außerhalb der Umgebung. Das ergibt ! LaTeX Error: Unicode character 日 (U+65E5) not set up for use with LaTeX. — ein Fehler pro Zeichen, ein versehentlicher Absatz also Dutzende davon. Maßgeblich ist der erste Fehler im Log, nicht ihre Anzahl.
| Familie | Sprache | Zugrunde liegende Schrift | TeX Live 2024 |
|---|---|---|---|
gbsn | Kurzzeichen | Arphic GB Song (arphic) | enthalten, übersetzt direkt |
gkai | Kurzzeichen | Arphic GB Kai (arphic) | enthalten, übersetzt direkt |
bsmi | Langzeichen | Arphic Big5 Ming (arphic) | enthalten, übersetzt direkt |
bkai | Langzeichen | Arphic Big5 Kai (arphic) | enthalten, übersetzt direkt |
mj | Koreanisch | UHC Myeongjo (uhc) | enthalten; kotex ist der bessere Weg |
min | Japanisch | Wadalab Mincho (wadalab) | enthalten; upLaTeX ist der bessere Weg |
goth | Japanisch | Wadalab Gothic (wadalab) | enthalten, übersetzt direkt |
maru | Japanisch | Wadalab Maru Gothic (wadalab) | enthalten, übersetzt direkt |
song | Chinesisch | Cyberbit (separat beschaffen) | scheitert mit Font cyberb30 at 600 not found |
Der Unterschied zwischen CJK und CJK* ist nicht kosmetisch. Ein Kommentar in CJK.sty sagt es unumwunden: CJK* verschluckt das Leerzeichen nach einem CJK-Zeichen, CJK nicht. In echten Manuskripten wird ein chinesischer Satz über mehrere Quellzeilen umbrochen, und dieser Zeilenumbruch ist für TeX ein Leerzeichen. In CJK lautete das Ergebnis 汉字之间不应该 出现空格。 mit einer Lücke mitten im Satz; in CJK* kam korrekt geschlossen 汉字之间不应该出现空格。 heraus. Für Chinesisch und Japanisch ist CJK* die Standardwahl. Aus demselben Grund gehört unmittelbar nach \begin{CJK*}{UTF8}{gbsn} ein Zeilenumbruch — alles auf derselben Zeile wird gelesen, bevor die CJK-Bedeutungen gelten. Für einen Schriftwechsel mitten im Text dient \CJKfamily{gkai}; Umgebungen müssen dafür nicht verschachtelt werden.
Muss Japanisch unter pdfLaTeX gesetzt werden, ist bxcjkjatype (von ZR; in TeX Live 2024 v0.5 vom 23. Juli 2023), das auf CJK aufsetzt, deutlich angenehmer. \usepackage[whole]{bxcjkjatype} umschließt das gesamte Dokument selbsttätig, sodass keine CJK*-Umgebung von Hand nötig ist, und kümmert sich sowohl um das Leerzeichen aus dem Zeilenumbruch als auch um den Abstand zwischen Japanisch und lateinischer Schrift. Gemessen wurde korrekt geschlossener Satz und die Einbettung von ipaex-type1, also IPAex Mincho in Type-1-Form. Es bleibt gleichwohl eine Notlösung für den Fall, dass pdfLaTeX vorgegeben ist; steht die Engine frei, gilt der folgende Abschnitt.
CJK unter XeLaTeX: wo die xeCJK-Schrifteinrichtung scheitert
xeCJK läuft nur unter XeLaTeX, und ob es übersetzt oder abstürzt, entscheidet sich an der Schreibweise des Schriftnamens. Schon \usepackage{xeCJK} allein liefert ein PDF ohne einen einzigen Fehler, denn standardmäßig wird Fandol Song geladen. Fandol Song ist aber eine chinesische Schrift. Mischt man Koreanisch in dasselbe Dokument, füllt sich das Log mit Missing character: There is no 한 (U+D55C) in font [FandolSong-Regular.otf], während der Rückgabewert 0 bleibt und die Hangeul-Zeichen schlicht aus dem PDF verschwinden. Die Textextraktion bestätigte es: Der koreanische Satz war überhaupt nicht vorhanden. Wer xeCJK für ein Dokument mit mehreren Schriftsystemen einsetzt, muss je Schriftsystem eine Schrift benennen.
% xelatex — one font per script; file names, not family names
\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{FandolSong-Regular.otf}[
BoldFont = FandolSong-Bold.otf,
ItalicFont = FandolKai-Regular.otf]
\setCJKsansfont{FandolHei-Regular.otf}
\newCJKfontfamily\korean{UnBatang.ttf}
\begin{document}
这是一段中文。{\korean 한국어 문장입니다.}
\end{document}Entscheidend ist hier, dass XeTeX seine Schriften beim Betriebssystem erfragt. \setCJKmainfont{FandolSong-Regular.otf} ist ein Dateiname, wird im TeX-Baum aufgelöst und funktioniert. Dieselbe Schrift als Familienname geschrieben, \setCJKmainfont{Fandol Song}, endet mit ! Package fontspec Error: The font "Fandol Song" cannot be found. — obwohl sie mit TeX Live geliefert wird. Umgekehrt ließen sich Schriften, die das Betriebssystem kennt — Songti SC, PingFang SC, Hiragino Sans unter macOS — anstandslos über den Familiennamen ansprechen. Das viel kopierte \setCJKmainfont{Noto Sans CJK SC} scheitert genauso, denn Noto CJK liegt TeX Live nicht bei; ohne eigene Installation erscheint The font "Noto Sans CJK SC" cannot be found. Die Regel ist schlicht: Schriften aus dem TeX-Baum über den Dateinamen samt Endung, Schriften des Betriebssystems über den Familiennamen. Das zugrunde liegende Verhalten behandelt die XeTeX-Seite ausführlich.
Sind die Schriften geklärt, folgen die Abstände. xeCJK legt seine Zeichenabstände über \xeCJKsetup{...} offen: CJKglue ist der Abstand zwischen CJK-Zeichen, CJKecglue der zwischen CJK und lateinischer Schrift. Unter TeX Live 2024 lauten die Vorgaben 0pt plus 0.08\baselineskip für CJKglue und ~ für CJKecglue — es wird also ein volles Wortzwischenraum zwischen chinesischem Zeichen und englischem Wort eingefügt. Für pTeX-Kundige: dieselbe Idee wie \kanjiskip und \xkanjiskip, nur mit anderen Vorgaben; jene behandelt die Seite zu den Details des japanischen Satzes. Die Interpunktionsstauchung steuert PunctStyle, den Zeilenumbruch zwischen Satzzeichen AllowBreakBetweenPuncts. Wird xeCJK unter LuaLaTeX geladen, endet das mit ! Critical Package xeCJK Error: The xeCJK package requires XeTeX to function. Der Name ist nicht dekorativ.
Für Chinesisch ctex — und das fontset immer festlegen
Für ein chinesisches Dokument ist ctex schneller, als xeCJK von Hand einzurichten. Entweder \documentclass{ctexart} (daneben gibt es ctexrep, ctexbook und ctexbeamer) oder \usepackage[UTF8]{ctex} über einer vorhandenen Klasse — und Schriftschnitte, Durchschuss, chinesische Überschriftenform, Interpunktionsstauchung sowie Kapitelnummern in chinesischen Ziffern sind in einem Zug erledigt. ctex erkennt die Engine selbsttätig, und zwar denkbar schlicht: Es prüft, ob eine Datei namens ctex-engine-<Engine>.def existiert. Unterstützt sind xelatex, lualatex, pdflatex, uplatex und aplatex; alles andere endet mit Engine '...' is not yet supported, ctex will abort! Die in TeX Live 2024 enthaltene Fassung ist 2.5.10.
% xelatex or lualatex — fandol is the only fontset TeX Live guarantees
\documentclass[fontset=fandol]{ctexart}
\begin{document}
\section{中文标题}
这是一段中文,混排 English words。今天是\today。
\end{document}Das Problem ist nicht die Engine, sondern der Schriftsatz. ctex versucht auch, das Betriebssystem zu erkennen — windows unter Windows, mac unter macOS, sonst fandol. Der macOS-Test ist reizvoll: Er prüft, ob die Datei /System/Library/Fonts/Menlo.ttc vorhanden ist. Ein Satzpaket erkennt das Betriebssystem an einer dicktengleichen Programmiererschrift. Solange die Vermutung stimmt, ist das angenehm; stimmt sie nicht, scheitert es lautstark. Gemessen: ctexart ohne fontset gestartet, gelang unter XeLaTeX, doch LuaLaTeX starb mit ! Package fontspec Error: The font "STHeiti" cannot be found. und pdfLaTeX mit ! Critical Class ctexart Error: CTeX fontset 'mac' is unavailable in current mode. Die Folgerung ist eindeutig: fontset= immer selbst schreiben. Fandol ist die einzige chinesische Familie, die TeX Live garantiert mitbringt, also ist fontset=fandol die sichere Wahl für ein Dokument, das weitergegeben wird. Selbst dann meldet pdfLaTeX CTeX fontset 'fandol' is unavailable in current mode., denn fandol gilt nur für Unicode-Engines. Unter pdfLaTeX lädt ctex intern CJKutf8 samt CJKpunct/CJKspace und setzt Windows-Schriften voraus. Muss es für Chinesisch pdfLaTeX sein, ist der Rückzug auf CJKutf8 mit gbsn sinnvoller, als sich mit ctex zu streiten.
Koreanisch mit kotex: eine Zeile, jede Engine
Koreanisch braucht eine Zeile — \usepackage{kotex} — und läuft unter pdfLaTeX, XeLaTeX wie LuaLaTeX gleichermaßen. Das ist die freundlichste Lage der drei CJK-Sprachen, und ein Blick in kotex.sty erklärt sie: Die Datei ist weniger ein Paket als ein Verteiler. Sie sucht nach \directlua und \XeTeXrevision und lädt dann eines von drei inhaltlich völlig verschiedenen Paketen — kotexutf (cjk-ko) unter pdfTeX, xetexko unter XeTeX, luatexko unter LuaTeX. Optionen werden unverändert weitergereicht, sodass beim Schreiben nie überlegt werden muss, welcher Weg gerade gilt. Auch die Schriften liegen tatsächlich bei: Gemessen bettete der pdfLaTeX-Weg Type-1-Teilschriften von Nanum Myeongjo ein (nanumtype1), der XeLaTeX-Weg UnBatang (unfonts-core). Die Textextraktion war in beiden Fällen korrekt.
% pdflatex, xelatex or lualatex — all three work unchanged
\documentclass{article}
\usepackage[hangul]{kotex}
\begin{document}
\section{한국어 시험}
오늘은 \today 입니다.
\end{document}Mit [hangul] werden auch Dokumentzeichenketten und Datum koreanisch: Gemessen wurde \today zu 2026년 8월 13일 und die Abbildungsbeschriftung zu 그림 1: (ohne die Option bleibt es bei August 13, 2026). Beim Schriftwechsel schlägt XeLaTeXs Eigenart der Namensauflösung erneut zu: \setmainhangulfont{UnBatang} starb mit ! Package fontspec Error: The font "UnBatang" cannot be found., während \setmainhangulfont{UnBatang.ttf} funktionierte. UnBatang.ttf liegt im TeX-Baum, und dennoch findet der Familienname sie nicht. xetexko lässt sich auch direkt laden, doch der Umweg über kotex legt im Quelltext keine Engine fest, was gemeinsames Schreiben und Einreichungen erleichtert.
Welche CJK-Schriften in TeX Live wirklich vorhanden sind
Im Schriftbaum von TeX Live 2024 gibt es kein Noto CJK. Keine einzige Datei namens NotoSansCJK oder NotoSerifCJK ist vorhanden, und das noto-Paket von TeX Live liefert tatsächlich NotoSerif, NotoSans und NotoSansMono — die lateinischen Familien. Das im Netz kursierende \setCJKmainfont{Noto Sans CJK SC} funktioniert nur, weil die schreibende Person Noto CJK im Betriebssystem installiert hatte. Steht diese Zeile in einem weitergegebenen Dokument oder in einem Container-Abbild, scheitert sie auf fremden Rechnern. Was wirklich mitgeliefert wird, steht in der Tabelle unten, und sie zeigt, wie dünn die chinesische Seite ist: Fandol ist die einzige OpenType-Familie, Arphic gibt es nur in der für das CJK-Paket vorkonvertierten Form. Japanisch (Harano Aji, IPAex) und Koreanisch (Un-Schriften, Baekmuk, Nanum) lassen deutlich mehr Auswahl.
| TeX-Live-Paket | Sprache | Format | Verwendet von |
|---|---|---|---|
fandol | Chinesisch | OpenType | Vorgabe von xeCJK, fontset=fandol in ctex |
arphic | Chinesisch | Type-1-Teilschriften | Familien gbsn/gkai/bsmi/bkai in CJKutf8 |
arphic-ttf | Chinesisch | TrueType | Unicode-Engines, über den Dateinamen |
haranoaji | Japanisch | OpenType | Vorgabe für LuaTeX-ja, zxjatype und Verwandte |
ipaex | Japanisch | TrueType | Unicode-Engines, über den Dateinamen |
wadalab | Japanisch | Type-1-Teilschriften | Familien min/goth/maru in CJKutf8 |
unfonts-core | Koreanisch | TrueType | Vorgabe für xetexko und luatexko |
nanumtype1 | Koreanisch | Type-1-Teilschriften | kotex unter pdfLaTeX (cjk-ko) |
uhc | Koreanisch | Type-1-Teilschriften | Familie mj in CJKutf8 |
Welchen Weg wählen
Wenn die Engine frei wählbar ist: ctex unter XeLaTeX oder LuaLaTeX für Chinesisch, kotex für Koreanisch, upLaTeX oder LuaTeX-ja für Japanisch. Der Rückzug auf CJK/CJKutf8 lohnt nur, wenn eine Klasse oder Vorlage auf pdfLaTeX festlegt — typischerweise die Einreichungsregeln einer Zeitschrift. Japanisch ist die eine Sprache, bei der die Rechnung anders ausfällt: Sobald Kinsoku, JFM, Ruby und vertikaler Satz ins Spiel kommen, reicht xeCJK nicht an das heran, was die pTeX-Familie und LuaTeX-ja angesammelt haben. Der Vergleich der japanischen Wege gehört auf die Seite zu den japanischen Satzmethoden, die feine Abstandsarbeit auf die Seite zu den Details des japanischen Satzes. Bei sprachübergreifenden Dokumenten — etwa einem deutschen Text mit chinesischem Zitat — geht es um babel, polyglossia und Schriftwechsel; dafür ist die Seite zur Mehrsprachigkeit zuständig.
- Chinesisch →
\documentclass[fontset=fandol]{ctexart}unter XeLaTeX oder LuaLaTeX;fontsetimmer ausdrücklich angeben. - Koreanisch →
\usepackage{kotex}auf beliebiger Engine;[hangul]ergänzen, damit auch die Dokumentzeichenketten koreanisch werden. - Kein Weg weg von pdfLaTeX →
CJKutf8mitCJK*-Umgebung;gbsn/bsmifür Chinesisch,kotexfür Koreanisch (fällt intern auf cjk-ko zurück). - Mehrere Schriftsysteme unter XeLaTeX →
xeCJKplus je ein\newCJKfontfamilypro Schriftsystem. Sonst verschwinden fehlende Zeichen stillschweigend. - Japanisch → hier nicht behandelt; stattdessen upLaTeX oder LuaTeX-ja wählen.