Kodierung und Zeilenumbrüche

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*).

KodierungTypische Verwendung
UTF-8Heutiger Standard (Unicode); die einzige Wahl für Neues
Shift_JISÄltere Windows-Umgebungen
EUC-JPÄltere Unix-Umgebungen
ISO-2022-JPE-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.

terminal
# .gitattributes — 改行を正規化 / normalize newlines
*.tex text eol=lf

Mit 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.

OptionWirkung
-gAktuelle Kodierung und Zeilenendung erkennen (keine Konvertierung)
-wNach UTF-8 konvertieren (ohne BOM)
-s / -e / -jNach Shift_JIS / EUC-JP / ISO-2022-JP konvertieren
-Lu / -Lw / -LmZeilenendungen nach LF / CRLF / CR konvertieren
--overwriteEingabedatei direkt überschreiben
terminal
nkf -g old.tex                      # 文字コードを判定 / detect the encoding
nkf -w -Lu --overwrite old.tex      # UTF-8 + LF に変換して上書き / to UTF-8 + LF, in place
  • Alles, neu wie alt, auf UTF-8 + LF standardisieren.
  • Alte Shift_JIS-/EUC-Quellen mit nkf -w -Lu --overwrite *.tex stapelweise konvertieren.
  • UTF-8-Eingabe für (u)pLaTeX bei Bedarf mit -kanji=utf8 erzwingen.
  • Zeilenendungen unter Git mit .gitattributes normalisieren; bei Unsicherheit mit nkf -g prüfen.