Category Archives: FrOSCon 2014

Fehlermeldungen in LaTeX

Da ich auf der FrOSCon nicht dazu gekommen bin, mir einen der Vorträge anzuschauen, habe ich heute mal in eine der Aufzeichnungen hineingeschaut, Programmierung mit LaTeX

Fast nebenbei wird dort der \typeout Befehl erwähnt, mit dem man während des Kompilierens Ausgaben für den Benutzer erzeugen kann, und sich das damit auch zum Debuggen eignet.

Ein typischer Fehlerfall von kivitendo sind Sonderzeichen z.B. im Langtext von Artikeln, die durch Copy&Paste aus anderen Quellen, z.B. PDFs, eingefügt werden, und von LaTeX nicht verarbeitet werden können. Der Benutzer bekommt dann den Inhalt der .err-Datei angezeigt, kann damit in der Regel aber nicht viel anfangen, weil das betreffende Zeichen meist entstellt angezeigt wird und meist der Kontext fehlt.

Beispiel: ich füge die Zeichen 香港 in den Langtext von Position 2 ein, und erhalte:

! Package inputenc Error: Unicode char \u8:香 not set up for use with LaTeX.
l.188 & & \newline 香
港 \\

Der Benutzer hat keine Ahnung, um welches Zeichen es sich handelt und wo im Dokument es sich befindet, kann entweder durch raten oder gezieltes Löschen die Fehlerursache suchen, oder muß seinen Admin/Dienstleister anrufen.

Mit dem \typeout Befehl kann man aber z.B. in der Artikelschleife bei jeder Position kurz ausgeben, welche Artikelposition gerade ausgegeben wird, so daß man im Falle des Abbruchs zumindest schon mal sehen kann, bei welchem Artikel das Sonderzeichen ist.

<%foreach number%>
\typeout{Position <%runningnumber%> (Artikelnr <%number%>)}

In der .err-Datei, und damit an der Browserobefläche, taucht das dann folgendermaßen auf:

Position 1 (Artikelnr 1)
Position 2 (Artikelnr 1)

! Package inputenc Error: Unicode char \u8:香 not set up for use with LaTeX.

Jetzt weiß man zumindest schon mal, daß das kaputte Zeichen bei Position 2 liegt.

Das Gleiche könnte man auch für andere Eingabefelder, wie z.B. Transportmittel, machen.

Bei der Gelegenheit habe ich mich dann auch gewundert, warum mein 香港 eigentlich im Browser nicht richtig angezeigt wird, auf der Kommandozeile wurde das in der .err-Datei nämlich schön angezeigt. In der entsprechenden Codestelle (SL/Form.pm, sub cleanup) wurde die .err Datei nicht mit UTF-8 Encoding eingelesen, baut man das ein

} elsif (-f "$self->{tmpfile}.err") {
open(FH, "<:encoding(UTF-8)", "$self->{tmpfile}.err");

wird dann auch an der Oberfläche mein fehlerhaftes Zeichen korrekt angezeigt:

Position 1 (Artikelnr 1)
Position 2 (Artikelnr 1)

! Package inputenc Error: Unicode char \u8:香 not set up for use with LaTeX.

Für Unicode Zeichen hilft das dann zumindest schon mal.