Eine .tex-Datei besteht letztlich aus Bytes, und die Engine muss sie in der richtigen Zeichenkodierung lesen, um sie korrekt zu interpretieren. Auch Zeilenendungen spielen für Bearbeitung und Diffs eine Rolle. Bei Japanisch gab es historisch mehrere parallele Kodierungen; genau dort passieren viele Fehler. Kurz gesagt: Heute auf UTF-8 + LF standardisieren. Diese Seite behandelt Kodierungen, Zeilenendungen und das Konvertierungswerkzeug nkf.
Zeichenkodierungen — heute UTF-8
Eine Zeichenkodierung ist die Regel, die Bytes auf Zeichen abbildet. Für Japanisch wurden historisch Shift_JIS (älteres Windows), EUC-JP (älteres Unix) und ISO-2022-JP (der „JIS-Code“ in E-Mails) verwendet; heute ist Unicode UTF-8 der universelle Standard. Aktuelle TeX-Live- und LaTeX-Versionen verwenden standardmäßig UTF-8, daher vermeidet Speichern der .tex-Datei als UTF-8 die meisten Zeichenprobleme. Eine Kodierungsabweichung erzeugt klassischen Zeichensalat (*mojibake*).
| Kodierung | Typische Verwendung |
|---|---|
UTF-8 | Heutiger Standard (Unicode); die einzige Wahl für Neues |
Shift_JIS | Ältere Windows-Umgebungen |
EUC-JP | Ältere Unix-Umgebungen |
ISO-2022-JP | E-Mail, „JIS-Code“ |
Bei (u)pLaTeX kannst du die Eingabekodierung mit -kanji=utf8 ausdrücklich angeben (siehe „Kompilierbefehle“).
Zeilenendungen — LF / CRLF / CR
Zeilen enden mit unsichtbaren Steuerbytes: LF (\n, Unix/macOS), CRLF (\r\n, Windows) und CR (\r, klassisches Mac). LaTeX selbst toleriert sie weitgehend, aber gemischte Zeilenendungen in einer Datei oder im Team machen Diffs unübersichtlich und bringen manche Werkzeuge durcheinander. Standardisiere auf LF und normalisiere unter Git mit .gitattributes.
# .gitattributes — 改行を正規化 / normalize newlines
*.tex text eol=lfMit nkf konvertieren
nkf (Network Kanji Filter) ist das Standardwerkzeug, um japanische Kodierungen und Zeilenendungen zu erkennen und zu konvertieren. Prüfe zuerst mit nkf -g file; konvertiere dann mit -w nach UTF-8, mit -s nach Shift_JIS, mit -e nach EUC-JP oder mit -j nach ISO-2022-JP. Zeilenendungen setzt du mit -Lu/-Lw/-Lm, und --overwrite überschreibt die Datei direkt.
| Option | Wirkung |
|---|---|
-g | Aktuelle Kodierung und Zeilenendung erkennen (keine Konvertierung) |
-w | Nach UTF-8 konvertieren (ohne BOM) |
-s / -e / -j | Nach Shift_JIS / EUC-JP / ISO-2022-JP konvertieren |
-Lu / -Lw / -Lm | Zeilenendungen nach LF / CRLF / CR konvertieren |
--overwrite | Eingabedatei direkt überschreiben |
nkf -g old.tex # 文字コードを判定 / detect the encoding
nkf -w -Lu --overwrite old.tex # UTF-8 + LF に変換して上書き / to UTF-8 + LF, in placeEmpfehlung für die Praxis
- Alles, neu wie alt, auf UTF-8 + LF standardisieren.
- Alte Shift_JIS-/EUC-Quellen mit
nkf -w -Lu --overwrite *.texstapelweise konvertieren. - UTF-8-Eingabe für (u)pLaTeX bei Bedarf mit
-kanji=utf8erzwingen. - Zeilenendungen unter Git mit
.gitattributesnormalisieren; bei Unsicherheit mitnkf -gprüfen.