Wer beginnt, Japanisch mit LaTeX zu setzen, wird fast sicher aufgefordert, platex oder uplatex aufzurufen. Eine ausführbare Datei dieses Namens gibt es jedoch nicht. Beides sind Namen von Formaten, die eine einzige Engine lädt, nämlich euptex – nach dem Aufruf von platex erscheint als erste Zeile „This is e-upTeX“. Ist diese eine Tatsache verdaut, löst sich rund die Hälfte der Verwirrung um japanisches TeX auf. Diese Seite behandelt, warum Japanisch überhaupt eigene Maschinerie brauchte, worin sich die drei lebendigen Wege unterscheiden (pLaTeX/upLaTeX mit dvipdfmx, LuaLaTeX mit LuaTeX-ja und XeLaTeX) und womit das erste Dokument beginnen sollte.
Warum Japanisch eigene Engines brauchte
Der erste Grund ist schlicht: Das ursprüngliche TeX konnte nur 256 Zeichen pro Schrift ansprechen (in den Anfängen 128). Um einige tausend gebräuchliche Kanji unterzubringen – von den Zehntausenden der JIS-Sätze ganz zu schweigen –, brauchte es Kunstgriffe wie das Zerlegen einer Schrift in Subfonts zu je 256 Glyphen. Der zweite Grund reicht tiefer: Die Satzregeln selbst sind andere. Der westliche Satz beruht darauf, dass Zeilen zwischen Wörtern umbrechen und der Wortzwischenraum dehn- und schrumpfbar ist. Im Japanischen gibt es keine Wortgrenzen. Eine Zeile darf fast überall umbrechen, also muss dem System umgekehrt als Regel gesagt werden, wo ein Umbruch verboten ist.
Diese verbotenen Stellen sind die Kinsoku-Regeln: kein Satzzeichen, keine schließende Klammer, kein Dehnungszeichen und kein kleines Kana am Zeilenanfang, keine öffnende Klammer am Zeilenende. Hinzu kommen der Viertelgeviert-Abstand zwischen japanischem und westlichem Text (\xkanjiskip), der Abstand zwischen den japanischen Zeichen selbst (\kanjiskip), das Zusammenrücken der Satzzeichen und der vertikale Satz. Die pTeX-Familie löst all das, indem sie jeder Umbruchmöglichkeit einen Strafwert zuweist – so viele Punkte, wenn dieses Zeichen am Zeilenanfang landet – und jene Aufteilung des ganzen Absatzes wählt, deren Summe minimal ist. Die japanischen Regeln wurden also als Strafpunkte in jenen Mechanismus gegossen, den TeX ohnehin besaß: erst den ganzen Absatz überblicken, dann die besten Umbrüche wählen.
Der Unterschied zwischen platex und uplatex – und warum beide dieselbe Engine sind
Der Unterschied liegt im Zeichenumfang: platex bleibt innerhalb von JIS X 0208, uplatex deckt ganz Unicode ab. Und es sind nicht zwei Programme, sondern zwei Formate, die dieselbe Engine euptex lädt. Ein Blick in texmf-dist/web2c/fmtutil.cnf eines TeX-Live-Baums zeigt die Beziehung in zwei Zeilen: Die erste Spalte nennt das Format, die zweite die Engine, die es erzeugt. In beiden Zeilen steht dort euptex. Die Unterscheidung von Engine und Format tritt im Japanischen deutlicher zutage als sonst irgendwo.
# texmf-dist/web2c/fmtutil.cnf -- format, engine, hyphenation, ini file
platex euptex language.dat *platex.ini
uplatex euptex language.dat *uplatex.ini
# and so the banner names the engine, not the command you typed:
$ platex ... This is e-upTeX, Version 3.141592653-p4.1.1-u1.30-... (utf8.euc) (preloaded format=platex)
$ uplatex ... This is e-upTeX, Version 3.141592653-p4.1.1-u1.30-... (utf8.uptex) (preloaded format=uplatex)Dieses Banner lohnt genaues Lesen. 3.141592653 ist Knuths eingefrorene TeX-Version selbst, p4.1.1 die Stufe der pTeX-Erweiterung, u1.30 die von upTeX – drei Generationen in einer Zeile übereinandergeschichtet. Auch die Klammer am Ende zählt: platex meldet (utf8.euc), uplatex meldet (utf8.uptex). Die Quelle wird in beiden Fällen als UTF-8 geschrieben, doch die beiden Formate halten Kanji intern in unterschiedlichen Kodierungen. Das ist keine Abstraktion, es schlägt durch. Erhält platex ein Zeichen außerhalb von JIS X 0208 – etwa 髙, 𠮷 oder 鷗 –, bricht es mit dieser Fehlermeldung ab:
! LaTeX Error: Unicode character ^^e9^^ab^^99 (U+9AD9)
not set up for use with LaTeX.
# same file, same class, run through uplatex instead: compiles silently.Die praktische Schlussfolgerung ist einfach. Es gibt kaum einen Grund, ein neues Dokument auf pLaTeX zu beginnen; besser uplatex verwenden. Varianten in Personennamen, alte Zeichenformen, Ergänzungszeichen, ein Zitat auf Koreanisch oder Chinesisch – nichts davon ist exotisch, und jedes einzelne bringt platex zum Stehen. Es bleiben schmale Gründe für platex: Die vom Veranstaltungsort geforderte Klassendatei ist ausschließlich für pLaTeX geschrieben, oder es liegt eine bestehende Quelle vor. Engines und Makros der pTeX-Familie werden heute von der japanischen TeX-Entwicklungsgemeinschaft betreut.
Die drei heute lebendigen Wege
In der Praxis sind es drei. upLaTeX erzeugt eine DVI-Datei, die dvipdfmx in PDF verwandelt – der traditionelle Weg; LuaLaTeX mit luatexja, das PDF direkt ausgibt; und XeLaTeX mit xeCJK. Ein vierter, pdfLaTeX mit CJKutf8, existiert, verlangt aber, den Text in \begin{CJK}{UTF8}{min} einzuschließen, und bietet kein ernsthaftes Kinsoku – er taugt daher nur dafür, ein paar japanische Wörter in einen englischen Aufsatz zu streuen. Die drei unterscheiden sich darin, wie sie an Schriften herankommen und wie lang der Weg bis zum PDF ist.
| Weg | Klasse und Pakete | Charakter und Eignung |
|---|---|---|
uplatex + dvipdfmx | jlreq, jsarticle (jsclasses) | Schnell; die längste Erfahrung im vertikalen Satz; von Zeitschriften oft vorgeschrieben. Zwei Schritte bis PDF |
lualatex + luatexja | jlreq, ltjsarticle (ltjsclasses) | Nutzt System-OpenType-Schriften unverändert und schreibt PDF direkt; am stärksten bei Unicode. Langsamer Lauf |
xelatex + xeCJK | bxjsarticle (bxjscls) u. Ä. | Bequeme Schriftwahl; gut für gemischten Satz mit Chinesisch und Koreanisch. Bei feinen japanischen Regeln schwächer als luatexja |
pdflatex + CJKutf8 | article plus das Paket CJK | Nur ein paar Wörter im englischen Text. Erfordert \begin{CJK}{UTF8}{min} um den Text; für ein ganzes Dokument ungeeignet |
Warum der japanische Weg noch über DVI führt
Weil die Engines der pTeX-Familie kein PDF direkt schreiben können. Während pdfTeX die PDF-Ausgabe einbaute, endet die Arbeit von pTeX beim ursprünglichen Ausgabeformat von TeX, dem DVI. Dieses DVI in PDF zu verwandeln ist Sache von dvipdfmx, das die Einbettung der japanischen Schriften und die Koordinatentransformationen für den vertikalen Satz übernimmt. Der traditionelle japanische Weg teilt Satz und PDF-Erzeugung also auf zwei Programme auf. Lässt man lokal uplatex und danach dvipdfmx laufen, wird aus einem .dvi von wenigen hundert Byte ein PDF von einigen Kilobyte; ein Blick mit pdffonts zeigt HaranoAjiMincho, eingebettet als CID-Type-0C-Schrift.
$ uplatex doc.tex # typeset -> doc.dvi
$ dvipdfmx doc.dvi # convert -> doc.pdf
$ pdffonts doc.pdf
# HaranoAjiMincho-Regular CID Type 0C Identity-H emb yes
# dvipdfmx is a symlink to xdvipdfmx: one binary serves both
# the Japanese .dvi route and XeTeX's .xdv output.Nebenbei: dvipdfmx ist auf der Platte ein Symlink auf xdvipdfmx. Eine Binärdatei bedient sowohl den japanischen .dvi-Weg als auch das .xdv, das XeTeX ausgibt. Ein für Japanisch geschliffener Konverter wurde so weltweit zur Ausgabestufe von XeTeX – ein Fall, in dem ein in Japan gebautes Werkzeug in den TeX-Hauptstrom einging. Ähnlich verhält es sich mit den eingebetteten Harano-Aji-Schriften, die TeX Live mitbringt, sodass das erste japanische PDF ohne Schriftkauf entsteht.
Womit das erste Dokument geschrieben werden sollte
\documentclass{jlreq} schreiben und mit lualatex übersetzen. Der Grund ist nicht allein die Qualität. Die Klasse jlreq von Noriyuki Abe folgt den „Requirements for Japanese Text Layout“ des W3C, doch am nützlichsten ist in der Praxis, dass dieselbe Quelle unverändert auf LuaLaTeX, upLaTeX und pLaTeX läuft. Die Engine wird automatisch erkannt, und bei Bedarf lassen sich platex, uplatex oder lualatex als Klassenoption angeben. Die erste Wahl ist damit keine unumkehrbare Entscheidung. Dieselbe .tex durch uplatex und durch lualatex geschickt, liefert in beiden Fällen ein PDF mit eingebettetem Harano Aji Mincho.
% runs unchanged under lualatex, uplatex and platex
\documentclass{jlreq}
\begin{document}
こんにちは、\LaTeX。日本語の組版です。
\end{document}Sollen andere Schriften her, wird unter LuaLaTeX luatexja-fontspec geladen; die Mincho-Schrift setzt \setmainjfont, die Gothic-Schrift \setsansjfont. Wer traditionell arbeitet, greift zu jsclasses (jsarticle, jsbook) für pLaTeX und upLaTeX beziehungsweise zu ltjsclasses (ltjsarticle und Verwandte) für LuaLaTeX. Fällt die Wahl aber auf ltjsarticle, muss auch der Compiler LuaLaTeX sein: Ein Missverhältnis zwischen Klasse und Engine ist der häufigste Unfall in japanischen Umgebungen.
Wo der erste Versuch scheitert
Erscheint kein Japanisch oder nur Zeichensalat, liegt es fast immer an einem von zwei Dingen: der Kodierung der Quelle oder einem Missverhältnis von Klasse und Engine. Die Quelle als UTF-8 speichern. Früher existierten EUC-JP, Shift_JIS und ISO-2022-JP nebeneinander, und ein Konverter wie nkf gehörte zur Grundausstattung; das ist vorbei. upTeX und LuaTeX sind Unicode-nativ, und auch das heutige pLaTeX setzt UTF-8-Eingabe voraus. Umgewandelt werden muss nur, wenn eine alte Quelle übernommen wird. Die zweite Falle sind Zeilenenden: In einer Datei gemischtes LF und CRLF kann Störungen erzeugen, deren Ursache schwer zu erkennen ist.
- Japanischen Fließtext nicht mit
pdflatexsetzen. Bei Fehlern oder Zeichensalat zuerst die Compiler-Einstellung verdächtigen; selbst mitCJKutf8muss der Text in\begin{CJK}{UTF8}{min}stehen. - Wer
ltjsarticleoderluatexjalädt, übersetzt mitlualatex; fürjsarticlegiltuplatex. Die Klasse bestimmt die Engine, also auch die Build-Einstellung des Editors anpassen. - Meldet
platexein! LaTeX Error: Unicode character ... not set up for use with LaTeX., liegt das Zeichen außerhalb von JIS X 0208. Ein Wechsel zuuplatexbehebt das meist. - Bei gemeinsam verfassten Arbeiten drei Angaben in einer Zeile des README festhalten: Engine, Kodierung, Klasse. Fehlt eine davon, lässt sich der Lauf anderswo nicht reproduzieren.
- Verteilt die Zeitschrift eine für
platexgeschriebene Klassendatei, wird sie verwendet – vor der Einreichung aber prüfen, ob sich Variantenzeichen in den Text geschlichen haben.