Mythos Eingabecodierung

In vielen Dokumenten und auch vielen Tipps im Internet findet man seit Jahren den Hinweis, dass bei \usepackage[<Codierung>]{inputenc} als <Codierung> unter Windows ansinew oder cp1252, unter Linux utf8 und auf dem Mac applemac einzustellen sei.¹ Selbst einige, wenige, gestandene LaTeX-Experten, die ich ansonsten sehr schätze, geben solche Ratschläge.

Solche Hinweise stimmten für westliche Windows-Ausgaben, als es für westliche Windows-Ausgaben nur Editoren gab, die als einzige Eingabecodierung Windows-1252 beherrschten oder dies zumindest die Voreinstellung war. Für Linux stimmte dieser Ratschlag nie, weil es in freier Wildbahn unzählige Linux-Distributionen mit unzähligen Lokalisierungen gibt. Viele davon setzen heutzutage zwar als Standard-Textcodierung auf UTF-8 aber das betrifft dann primär erst einmal nur die Ein- und Ausgabe im Terminal und dem Desktop. Früher war sogar ISO 8859-1 die Voreinstellung bei vielen westlich eingestellten Linux-Installationen. Auch auf dem Mac ist die Codierung für Macintosh Roman (teilweise auch als Apple Codepage 10000 und sogar als Windows Codepage 10000 bekannt) nicht mehr die von Editoren allein unterstützt.

Tatsächlich ist die korrekte Wahl für <Codierung> bei inputenc allein vom verwendeten Editor und dessen Einstellung abhängig:

  • WinEdt, eines der Urgesteine unter den LaTeX-Editoren unter Windows, verwendet seit Version 7 für neu angelegte Dateien laut Autor UTF-8. Hier wäre dann also \usepackage[utf8]{inputenc} korrekt. Vor Version 7 war die Voreinstellung jedoch die Standard-Windows-Codierung². Bei westlichen Windows-Installationen war das Windows-1252. Damit wäre also \usepackage[ansinew]{inputenc} und ebenso \usepackage[cp1252]{inputenc} korrekt. Mittel und osteuropäische Windows-Versionen waren eher auf Windows-1250 eingestellt. Damit wäre \usepackage[cp1250]{inputenc} korrekt. Ich erwähne das, weil man auf LaTeX-Tagungen schon einmal einen netten Polen treffen könnte. Man kann bei WinEdt die Codierungseinstellung auch ändern. In diesem Fall ist natürlich die Optione für inputenc entsprechend anzupassen. Frühere Versionen von WinEdt unterstützten allerdings kein UTF-8. Erhalten Benutzer früherer WinEdt-Versionen UTF-8-codierte Dateien, bleibt ihnen nur die Umkodierung.
  • TeXnicCenter ist ebenfalls ein Urgestein unter den LaTeX-Editoren für Windows. Auf verschiedenen Internet-Seiten wird behauptet, dass dessen Version 1 in der Voreinstellung mit ISO 88591 (aka ISO&nbsp:Latin-1) arbeite. Tatsächlich scheint er in der Voreinstellung aber ebenfalls die Standard-Windows-Codierung zu verwenden. Damit wäre auf westlichen Windows-Installationen also wieder \usepackage[ansinew]{inputenc} oder alternativ \usepackage[cp1252]{inputenc} korrekt. UTF-8 unterstütze TeXnicCenter 1 nicht. Mit Version 2 ändert sich das nach meinen Informationen aber auch bei TeXnicCenter. Ab dieser Version 2 unterstützt TeXnicCenter nicht nur UTF-8 es ist auch die voreingestellte Codierung für neue Dateien. Für diese wäre dann also \usepackage[utf8]{inputenc} korrekt. Will man es anders haben, muss man die Einstellung des Editors ändern³ und natürlich dann auch die Option für inputenc.
  • TeXworks, einer von mehren Editoren, die es für unterschiedliche Systeme gibt, und zudem Bestandteil von MiKTeX und TeX Live 2012 für Windows, verwendet unabhängig vom OS in der Voreinstellung für neue Dateien UTF-8. Hier wäre also \usepackage[utf8]{inputenc} korrekt, solange man die Voreinstellung nicht ändert.
  • TeXmaker, ebenfalls ein OS übergreifend verfügbarer LaTeX-Editor, verwendet in der Voreinstellung unabhängig vom OS für neue Dateien ebenfalls UTF-8. Hier wäre also \usepackage[utf8]{inputenc} korrekt, solange man die Voreinstellung nicht ändert.
  • TeXstudio, das von TeXmaker abstammt, verwendet ebenfalls in der Voreinstellung unabhängig vom OS für neue Dateien ebenfalls UTF-8. Hier wäre also \usepackage[utf8]{inputenc} korrekt, solange man die Voreinstellung nicht ändert.
  • emacs mit aucTeX verwendet in der Voreinstellung zumindest unter Linux für neue Dateien eine von den Lokalisierungseinstellungen abhängige Codierung. Unter vielen, aber längst nicht allen Linux-Distrubutionen dürfte das UTF-8 sein. Wie praktisch alles kann man aber auch diese Voreinstellung bei emacs ändern. Um also zu erfahren, welche Codierung unter emacs gerade verwendet wird, muss man emacs fragen – beispielsweise mit C-h C RET.

Wie sich zeigt, ist die Behauptung, dass man unter Windows \usepackage[ansinew]{inputenc} verwenden sollte, schon immer nur die halbe Wahrheit und ist heute durch die Tatsachen der Voreinstellungen gängiger LaTeX-Editoren vollends ad-absurdum geführt. Durch die Tatsache, dass Editoren unterschiedliche Codierungen unterstützen ist zudem auch keine letztendliche Entscheidung in Abhängigkeit vom Editor zu treffen. Die tatsächlichen Einstellungen sind entscheiden. Bei dem Editor, den man hauptsächlich verwendet, sollte man diese Einstellung aber auch die Einstellmöglichkeiten kennen. So ist man nicht nur für eigene Dokumente, sondern auch für die Bearbeitung fremder Dokumente gewappnet. Einige Editoren wie emacs erkennen auch direkt aus der Option beim Laden von inputenc oder aus Heuristiken über den Text die Codierung und stellen sich automatisch ein. Einigen Editoren kann man mit speziellen Kommentaren auf die Sprünge helfen. Es ist gut solche Dinge zu wissen.

Wenn man allerdings Dokumente im WWW, im Usenet oder per E-Mail weitergibt, kommt es oft vor, dass die Dokumente schon bei der Veröffentlichung oder auch erst beim Copieren beim Empfänger umkodiert werden, ohne dass der Absender darauf einen Einfluss hat. Gerade in solchen Fällen ist das Paket selinput sehr nützlich. Diese kann aus wenigen Angaben, die Codierung selbst ermitteln und einstellen. Eines der dabei als Kriterium verwendete Zeichen ist das €-Zeichen. Es sei darauf hingewiesen, dass dieses natürlich von einem Editor, der beispielsweise auf ISO 8859-1 eingestellt ist, nicht korrekt angezeigt wird. Es wird dann beispielsweise ein Kästchen, eine Fragezeichen oder gar nichts angezeigt. In diesem Fall, sollte man diese Angabe weg lassen. Näheres ist der Anleitung zu diesem Paket zu entnehmen.

Und welche Codierung sollte man für neue Dokumente wählen, wenn man die Wahl hat? Das ist nicht eindeutig zu beantworten. UTF-8 hat viele Vorteile. Insbesondere kann man eigentlich alles, direkt eingeben. Zwar unterstützt die inputenc-Option utf8 davon nur einen Teilbereich, für westliche und diverse mittel- und osteuropäische Sprachen genügt dieser jedoch. Darüber hinaus stehen mit biblatex und biber auch eine Literaturverweis-Verarbeitung bereit, für die UTF-8 prädestiniert ist. Sind allerdings im Team Mitarbeiter, die noch auf einen veralteten Editor wie TeXnicCenter 1 bestehen, so bleibt als Codierung eigentlich nur Windows-1252 mit inputenc-Option anisnew oder cp1252. Will man irgend jemandem, der nicht unter Windows arbeitet das reduzierte 8bit-Leben zusätzlich erleichtern, verwendet man stattdessen ISO 8859-1 mit inputenc-Option latin1. Für den Windows-Anwender ist das keine große Einschränkung, er bekommt dann meist nur beim € eine Fehlermeldung, die ihn darauf hinweist, dass er besser beispielsweise \texteuro (ggf. zusammen mit dem Paket textcomp) eingeben muss.

Die ganze inputenc-Geschichte verliert aber ohnehin an Bedeutung, wenn man nicht mehr PDFLaTeX (mit direkter PDF-Ausgabe) oder LaTeX (das ist inzwischen meiste auch PDFLaTeX aber mit DVI-Ausgabe zur Weiterverarbeitung mit dvips und ggf. pstopdf o. ä.), sondern mit XeLaTeX oder LuaLaTeX arbeitet. In diesem Fall ist unbedingt ein UTF-8-fähiger Editor und eben diese Codierung zu empfehlen. XeLaTeX und LuaLaTeX beherrschen nämlich native UTF-8-Eingabe und das ist bei diesen beiden auch die Voreinstellung. Zwar kann man sie auch auf andere Codierungen umstellen, aber wozu sollte man sich das Leben unnötig schwer machen. Zusammen mit einem entsprechenden Font ist man endlich die Codierungssorgen los. Für den Font verwendet man dann übrigens auch nicht mehr das Paket fontenc, sondern fontspec bzw. ein Font-Paket, das intern darauf oder auf die neuen Font-Auswahlmechanismen zurück greift.

Meine obigen Ratschläge für eine reine 8bit-Eingabecodierung gelten dann nur noch, wenn man auf typische Probleme mit UTF-8 stößt. Das wären beispielsweise Umlaute und andere Sonderzeichen in Listings. Dafür gibt es aber auch Lösungen wie listingsutf8. Ehrlich gesagt fällt mit im Augenblick kein anderes relevantes Beispiel ein.

Und was, wenn man Ratschläge bekommt, in denen der Hinweis enthalten ist, dass unter Windows \usepackage[ansinew]{inputenc} zu verwenden ist, und ggf. weitere Hinweise zu anderen Betriebssystemen. Nun, da wir wissen, dass das so nicht stimmt, sollten wir diesen Hinweis einfach ignorieren. Gleichzeitig ist das auch ein Indiz, dass man auch die restlichen Ratschläge mit Vorsicht betrachten sollte. Ein Beweis ist es natürlich nicht. Und insbesondere wenn die Ratschläge von meiner guten Internet-Bekannschaft kommen, die leider trotzdem nicht immer auf diesen ach so falschen Hinweis verzichten mag, sollte man die übrigen Ratschläge nicht leichtfertig ignorieren. Wenn man natürlich bereits verraten hat, dass man einen Editor verwendet, von dem der Ratgebende weiß, dass die Voreinstellung Windows-1252 ist, dann sollte man ausnahmsweise auch auf diesen Ratschlag hören. ;-)


1  Kürzlich stieß ich auf eine LaTeX-Ratgeber-Seite im WWW, die angeblich von 2012 war. Darauf fand sich doch tatsächlich der Hinweis, unter Windows sei cp850 als Option für inputenc zu verwenden. Entweder arbeitet derjenige noch immer mit einem DOS-Editor oder er hat die Seite seit Jahren inhaltlich nicht überarbeitet, sondern immer nur das Seitendatum angepasst. Jedenfalls ist diese Information schon extrem lange veraltet.

2  Mit der Standard-Windows-Codierung ist hier nicht die Codierung der Windows API gemeint. Strings der Windows API waren bei Windows NT bis zu den 4er-Versionen in UCS-2 codiert. Seite Windows 2000 sind API-string UTF16. Gemeint ist hier die Standardcodierung der Zeichen des Systemfonts mit den Werten 0 bis 255.

3  Wenn hier die Rede davon ist, dass man die Einstellung im Editor ändern und die Option für inputenc entsprechend anpassen muss, dann wird davon ausgegangen, dass man das tut, bevor man Umlaute und andere Sonderzeichen eingibt. Gibt man erst den Text ein und ändert dann die Einstellung und die Option für inputenc geschieht je nach Editor unterschiedliches. Manche Editoren, wie emacs recodieren beim Speichern automatsich oder melden es, wenn eine Recodierung nicht möglich ist. Andere Editoren speichern in der alten Codierung. In dem Fall stimmt dann weder die Anzeige im Editor noch die angegebene Codierung bei inputenc.

Inhalt abgleichen