Beim Setzen japanischer Aufsätze oder Bücher greift man statt der Standardklassen article und book zu den Klassen der js-Familie. Ausgangspunkt sind Haruhiko Okumuras jsclasses (jsarticle und Verwandte), der De-facto-Standard für pLaTeX/upLaTeX. ltjsclasses ist die Portierung für LuaLaTeX, und ZRs BXjscls geht weiter, sodass eine Quelle mit jeder Engine kompiliert. Alle behalten das Gefühl der Standardklassen, korrigieren aber japanische Abstände und das Zeilenraster. Diese Seite erklärt die drei Familien und ihre Auswahl.
jsclasses — der Standard für pLaTeX/upLaTeX
jsclasses ist eine Klassensammlung, die Haruhiko Okumura auf Basis von LaTeX3s classes.dtx und ASCII Corporations jclasses.dtx erstellt hat; heute wird sie von der Japanese TeX Development Community auf GitHub (texjporg/jsclasses) gepflegt. Sie bietet drei Klassen: jsarticle für Aufsätze und Berichte, jsbook für Bücher und jsreport für Berichte, außerdem jspf für eine Fachzeitschrift und kiyou für Bulletin-Hefte. jsreport ist relativ neu: Es macht eigenständig, was früher mit der report-Option von jsbook erledigt wurde.
Der größte Unterschied zu den Standardklassen ist, dass der Textkörper um 10,5 pt (≈ 13 Q) herum entworfen ist und Japanisch mit JIS-Fontmetriken gesetzt wird (jis.tfm, jisg.tfm, von Hajime Kobayashi, Tokyo Shoseki Printing). Dadurch passen Vollbreitenzeichen und Zeilenabstand zum japanischen Satz. Die Klasse übernimmt die Standardklassen-Schnittstelle unverändert, also Befehle wie \section sowie Optionen für Papier, Spalten und zweiseitiges Layout. Wer die Standardklassen kennt, kann sie sofort verwenden (siehe Standard classes).
Für die Verwendung mit upLaTeX fügst du die Klassenoption uplatex hinzu (sie stammt aus Takuji Tanakas upLaTeX-Unterstützungspatch). Da der Weg über DVI führt, gibt man üblicherweise auch dvipdfmx als PDF-Treiber an.
\documentclass[uplatex,dvipdfmx]{jsarticle}
\begin{document}
こんにちは、\LaTeX! これは jsarticle で組んだ日本語の文書です。
\end{document}Die wichtigsten Klassenoptionen stammen von den Standardklassen: Papierformate wie a4paper (Standard) und b5paper, außerdem twocolumn, twoside, landscape, titlepage und draft; in jsbook/jsreport bestimmen openright/openleft/openany, wo Kapitel beginnen. Dazu kommen mingoth, um die japanischen TFM auf die alten min10/goth10 zurückzustellen, und disablejfam, um japanische Schriften nicht als Mathe-Schriften zu registrieren.
Schriftgrößen und die Vergrößerungsgeschichte (nomag)
jsclasses bietet reichere Schriftgrößenoptionen als die Standardklassen. Zusätzlich zu den üblichen 10pt/11pt/12pt gibt es 8pt, 9pt, 14pt, 17pt, 21pt, 25pt, 30pt, 36pt und 43pt (als geometrische Reihe gewählt), dazu die Q-Einheiten 12Q/14Q und 10ptj-artige Realgrößenoptionen.
Dahinter steckt eine historische Besonderheit. Ursprünglich setzte jsclasses den Textkörper mit 10 pt und skalierte das gesamte Ergebnis mit TeXs Primitive \mag auf die gewünschte Größe (×1 bei 10 pt, etwa ×1,095 bei 11 pt usw.). \mag legt einen einheitlichen Zoom auf das ganze Dokument. Das ist bequem, weil Glyphen und Maße gemeinsam skaliert werden, aber fragil, weil manche Werkzeuge \mag nicht verstehen und das Ergebnis davon abhängt, wie dvipdfmx/dvips es weiterverarbeiten.
Deshalb wurde 2016 die Option nomag ergänzt: Statt \mag zu verwenden, skaliert sie die verschiedenen Maße direkt. Die Begleitoption nomag* geht weiter und passt auch die optische Größe an, indem sie das Font-Selection-System NFSS patcht. Zur Rückkehr zum alten \mag-basierten Verhalten dient usemag.
| Option | Verhalten |
|---|---|
usemag | Die alte Methode: alles mit \mag skalieren. Der Standard in jsclasses |
nomag | \mag vermeiden; stattdessen Layoutmaße skalieren |
nomag* | Wie nomag, plus NFSS-Patch zur Anpassung der optischen Größe |
jsclasses verwendet standardmäßig usemag; wenn du die Eigenheiten von \mag vermeiden willst, ist nomag* eine gute Wahl. Das Verhältnis der japanischen Zeichengröße zur angeforderten Größe (1 zw ÷ angeforderte Größe) steckt im reellwertigen Makro \Cjascale (Standard 0,924715), passend zum Entwurfswert 13 Q ≈ 10,5 pt.
ltjsclasses — die LuaLaTeX-Portierung
ltjsclasses passt jsclasses für LuaLaTeX (luatexja) an und wird vom LuaTeX-ja-Projekt gepflegt. Es bietet ltjsarticle, ltjsbook und ltjsreport (außerdem ltjspf und ltjskiyou) und entspricht den jsclasses, wie die Namen andeuten, eins zu eins. Japanisch verwendet die Standardmetriken von luatexja (jfm-ujis.lua) und erzeugt PDF direkt ohne den Weg über DVI.
Der große Unterschied zu jsclasses liegt in der Skalierung. Weil LuaTeX seit beta-0.87.0 \mag bei PDF-Ausgabe nicht mehr verwenden kann, nutzt ltjsclasses den \mag-Ansatz nicht; stattdessen ist nomag* der Standard (bei usemag erscheint eine Warnung). Auch die Optionen uplatex und autodetect-engine wurden entfernt, weil sie hier unnötig sind, und führen zu Fehlern, wenn man sie angibt. Zum Austauschen japanischer Schriften verwendet man luatexja-fontspec.
% lualatex でコンパイル
\documentclass{ltjsarticle}
\usepackage{luatexja-fontspec}
\setmainjfont{Noto Serif CJK JP} % 明朝
\begin{document}
こんにちは、\LaTeX! ltjsclasses は LuaLaTeX 専用です。
\end{document}BXjscls — funktioniert mit jeder Engine
BXjscls (Takayuki Yato, bekannt als ZR) erweitert das Design der jsclasses für die Nutzung mit jeder Engine. Es bietet bxjsarticle, bxjsbook, bxjsreport und bxjsslide; während jsclasses nur für (u)pLaTeX gedacht ist, kann BXjscls Japanisch auch unter pdfLaTeX, XeLaTeX und LuaLaTeX setzen.
Der Schlüssel ist die Option engine=. Setze sie auf pdflatex, xelatex, lualatex, platex oder uplatex (oder autodetect-engine zur automatischen Erkennung), und die Klasse lädt das passende Japanisch-Paket für diese Engine. Die Option ja= (ja-Treiber, früher jadriver) wählt dann das japanische Verarbeitungsschema; mit dem Standard standard kannst du ohne weitere Einrichtung sofort Japanisch schreiben (weitere sind minimal, modern und pandoc).
| engine= | Geladenes Hauptpaket für Japanisch (ja=standard) |
|---|---|
platex / uplatex | Nutzt die native Japanisch-Unterstützung von (u)pLaTeX |
lualatex | luatexja (LuaTeX-ja) |
xelatex | zxjatype (auf xeCJK aufgebaut) |
pdflatex | bxcjkjatype (auf CJK aufgebaut) |
Die Grundschriftgröße wird mit base=, die japanische Grundlage mit jbase= gesetzt, und das japanische Skalierungsverhältnis steckt in \jsScale (Standard 0,924715, änderbar mit scale=). Die \mag-artige Skalierung wählt magstyle= mit usemag, nomag oder nomag*. Da LuaTeX ab v0.87 \mag nicht verwenden kann, verhält sich diese Umgebung automatisch wie nomag*.
% 同じ原稿を engine= だけ変えれば各エンジンで通る
\documentclass[engine=lualatex,ja=standard]{bxjsarticle}
\begin{document}
こんにちは、\LaTeX! engine= を platex に変えれば pLaTeX でも組めます。
\end{document}Welche wählen?
Bei der js-Familie lautet die Logik: zuerst die Engine wählen, dann die passende Klasse. Selbst für denselben “jsarticle-artigen” Stil ändert sich die verwendete Klasse je nach Engine.
- pLaTeX/upLaTeX verwenden, etwa wegen vorhandener Quellen oder Vorgaben? jsclasses. Unter upLaTeX ist
\documentclass[uplatex,dvipdfmx]{jsarticle}der Standard. - Vor allem LuaLaTeX? ltjsclasses. OpenType-Schriften des Systems und direkte PDF-Ausgabe;
nomag*ist Standard. - Engine nicht festlegen oder engineübergreifend verteilen? BXjscls. Allein durch Wechsel von
engine=kannst du zwischen pdfLaTeX, XeLaTeX, LuaLaTeX und (u)pLaTeX wechseln. - Eine saubere, JLReq-konforme Klasse gewünscht? jlreq ist ebenfalls eine Überlegung wert (eigene Linie neben der js-Familie, mit Engine-Autoerkennung).
Welche du auch wählst: Jede legt japanische Satzregeln auf das Befehlssystem der Standardklassen, sodass sich die Schreibweise des Textkörpers selbst nicht ändert. Zum Aufbau von Präambel und Optionen siehe auch “Document class & preamble”.
Die Wahl in eine Einreichungsvorlage überführen
Bei japanischen Dokumenten solltest du nach der Klassenwahl nicht sofort mit dem Text beginnen. Lege zuerst Engine, Klasse und PDF-Route als ein Set fest. Für upLaTeX heißt das uplatex plus dvipdfmx; für LuaLaTeX ltjsarticle plus Schrifteinrichtung; für eine Multi-Engine-Verteilung BXjscls mit engine=. Schreibe dieselben Namen ins README oder in die Build-Einstellungen, damit Mitautoren und CI die Datei nicht über einen anderen Weg kompilieren.
% upLaTeX で提出する日本語レポートの固定例
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
% LuaLaTeX へ移すなら、クラスとフォント設定をセットで見直す
% \documentclass[a4paper]{ltjsarticle}
% \usepackage{luatexja-fontspec}Optionen wie nomag und magstyle beeinflussen nicht nur das Aussehen, sondern auch, wie spätere Werkzeuge Maße interpretieren. Beginne normalerweise mit den Klassenvorgaben und erwäge nomag* oder magstyle=nomag* nur, wenn Bildplatzierung, geometry oder PDF-Nachverarbeitung echte Maßabweichungen zeigen. Reproduzierbare Einreichungsausgaben sind wichtiger, als von Anfang an jede Option zu laden.
Die Route im Log bestätigen
Bei den Klassen der js-Familie kann die erste Quellzeile allein täuschen. jsarticle ist für (u)pLaTeX, ltjsarticle für LuaLaTeX, und bxjsarticle folgt engine=. Nach dem Build solltest du daher am Anfang der .log-Datei Klassenname, Engine-Name und geladenes Japanisch-Paket prüfen. In Zusammenarbeit zählt nicht nur, dass “ein PDF entstanden ist”, sondern dass “ein PDF über die vorgesehene Route entstanden ist”.
| Wahl | Was im Log zu prüfen ist | Wenn es abweicht |
|---|---|---|
jsarticle | pLaTeX / upLaTeX plus dvipdfmx-Route | Build-Rezept auf uplatex + dvipdfmx festlegen |
ltjsarticle | LuaLaTeX und LuaTeX-ja | Nicht die Klasse behalten und nur die Engine zurückwechseln |
bxjsarticle | Wirksame Werte von engine= und ja= | Mit README und CI-Befehl abgleichen |