In der aktuellen LaTeX-Release wurde relative kurzfristig entschieden, die Standard-Eingabecodierung von US-ASCII in UTF8 zu ändern. Seither gibt es in Foren und Mailing-Listen und auch in meinem Support-Postfach Fragen dazu, ob KOMA-Script möglicherweise eine Problem damit haben könnte. Als ein Beispiel für ein angebliches Problem von KOMA-Script mit UTF8 wird dafür:
\makeatletter \def\input@path{{\string"Bärendreck/\string"}} \makeatother \documentclass{scrartcl} \begin{document} \success \end{document}
angeführt.
Klarstellung: Kein KOMA-Script-Problem
Keine der KOMA-Script-Klassen und keines der KOMA-Script-Pakete enthält auch nur ein einziges Zeichen außerhalb von US-ASCII. Damit ist die Codierung der Dateien von KOMA-Script in jedem Fall unkritisch für die Änderung in LaTeX 2018/04/01.
Wieso aber kommt es dann zu dem Fehler? Nun, der Fehler ist nicht KOMA-Script-spezifisch. Er tritt mit den Standardklassen (und sogar ohne das Laden einer Klasse) genauso auf, ist dort nur nicht sofort sichtbar:
Das Problem ist, dass hier innerhalb von
\InputIfFileExists
die Anweisung\input@path
expandiert wird, dabei in Folge der Encoding-Umstellung in LaTeX dasä
aktiv ist, expandiert wird, aber aufgrund der noch nicht erfolgten Font-Initialisierung noch nicht zu etwas gültigem expandiert werden kann. Das führt dann mitpdflatex
zu der etwas seltsamen FehlermeldungUnd bevor nun jemand auf die Idee kommt, dann sei die Verwendung von
\InputIfFileExists
vor der Font-Initialisierung eben verboten: Nein, das ist es nicht. Stattdessen ist es schlicht verboten, Sonderzeichen in Dateinamen zu verwenden, ohne sie vor derartiger, unerwünschter Expansion zu schützen. Die Lösung für obiges Problem lautet schlicht\detokenize
:und natürlich funktioniert das auch mit KOMA-Script:
Die Anführungszeichen in der Umdefinierung von
\input@path
sind in obigem Beispiel übrigens überflüssig. Sie stammen aber aus einer realen Anfrage, in der unter Windows das HOME-Verzeichnis eines Benutzers verwendet wurde und darin, wie unter Windows leider allzu häufig üblich, ein Leerzeichen verwendet wurde. Die von mir vorgeschlagene Lösung wurde im Gegensatz dazu mit TeX Live 2018 unter Linux mitLC_CTYPE=de_DE.UTF-8
getestet. Ich gehe jedoch davon aus, dass sie auch unter Windows funktioniert. Allerdings könnte es dort noch Probleme je nach verwendeter Filesystem-API geben. Rückmeldungen, ob obige Lösung mit MiKTeX und TeX Live 2018 unter Windows funktioniert, sind also willkommen.Achja: Ich empfehle, solche Spielchen mit
\input@path
eher zu meiden und stattdessen ggf. die UmgebungsvariableTEXINPUTS
zu nutzen. Diese wird üblicherweise nicht auf TeX-Makro-Ebene, sondern beispielsweise vonkpathsea
auf Programmebene ausgewertet, womit sowohl Probleme mit Leerzeichen als auch Encoding-Probleme reduziert werden.Achja: Die Verwendung einer UTF8-nativen Engine wie LuaTeX oder XeTeX (für obige Beispiele also die Verwendung von LuaLaTeX oder XeLaTeX) hilft ebenfalls, solche Probleme zu vermeiden. Dabei müssen nämlich die UTF8-Zeichen nicht aktiv gemacht werden.
Funktioniert mit MiKTeX
Das funktioniert bei mir mit aktuellem MiKTeX. Mit TeX Live 2018 bekomme ich unter Windows dagegen »No«.
Yes/No
Keine Fehlermeldung zu erhalten, ist schon einmal gut. Ob man »Yes« oder »No« als Antwort erhält, hängt auch davon ab, ob die Datei Bärendreck/somefile existiert. Für TeX-Live 2018 unter Windows wird derzeit aber auch noch ein Problem mit UTF8-Sonderzeichen in Dateinamen auf der TeX-Live-Mailingliste diskutiert. TeX Live verwendet da offenbar noch eine veraltete API für den Dateizugriff während MiKTeX die Unicode-API nutzt.