Fehlermeldungen

Verhalten bei Fehlermeldungen

Während des Kompilierens kann es hin und wieder zu unerklärlichen und rätselhaften Fehlermeldungen kommen. Hier ein paar Hinweise von meiner Seite zu diesem Thema:

 

Die Grundregel lautet:

 

Selbst ein einziges fehlendes Zeichen, zum Beispiel eine fehlende geschweifte Klammer eines Befehls, kann Hunderte von Fehler-Warnungen erzeugen. Und dies an den seltsamsten Stellen und unter den eigenartigsten Zeilennummern!

 

Doch wenn der Fehler nicht zu lokalisieren ist, was kann ich prüfen?

  1. Letzte Änderung am Dokument checken. Wenn davor keine Fehlermeldungen beim Kompilieren kamen, kann er nur an dieser Stelle entstanden sein.
  2. GNU/Linux-Betriebssysteme unterscheidet zwischen Groß- und Kleinschreibung von Dateinamen: Ist im Dokument Bild1.jpg verlinkt, aber die Datei heißt in Wirklichkeit Bild1.JPG?
  3. Wurde der Befehl eines Paketes verwendet, das gar nicht in der Präambel geladen ist?
  4. Reihenfolge der Pakete: Manche Pakete vertragen sich nicht mit anderen, man sollte daher eine Reihenfolge einhalten (dieses oder jenes als letztes laden usw., siehe jeweilige Paket-Dokumentation). Nur ein Beispiel: das Paket caption muss schon relativ früh geladen werden, um Fehlermeldungen zu vermeiden, obwohl mit dem LaTeX-Code alles korrekt ist.
  5. Verwendet man die Zeichencodierung utf8, wie ich es hier empfehle, kann eine Fehlermeldung beim Kompilieren erscheinen, wenn man Text per Copy & Paste aus fremden Quellen einfach in den LaTeX-Code einfügt. Möglicherweise enthält dieser jetzt ein Zeichen, das in der Unicode-Codierung nicht vorgesehen ist. Prinzipiell müsste man das betreffende Zeichen löschen und neu eintippen; praktisch ist es aber so, dass man das Zeichen nicht erkennt bzw. von einem "normal eingetippten" Zeichen nicht unterscheiden kann. Hilfreich ist folgender Trick: Der Texteditor Atom bietet ein Plugin namens "highlight-bad-chars". Öffnet man seinen Quellcode dann mit dem Atom-Editor, werden alle ungültigen Zeichen hervorgehoben und können gezielt gelöscht werden.
  6. Modus des Kompilierens: Hat man aus Versehen den Kompilieren-Knopf auf dvi statt pdflatex gestellt und kompiliert erfolglos, weil man .jpg-Bilder integriert hat?
  7. pdf’s von Corel erzeugt: Ein skuriler Fehler namens »mainstream error« hat sich bei mir einmal ergeben, als ich eine mit CorelDRAW erzeugte PDF als Gleitobjekt eingebunden hatte. Alle anderen pdf-Zeichnungen im Dokument hatte ich dagegen mit Inkscape erstellt. Ich habe also die gleiche, mit Corel entworfene Zeichnung noch einmal mit Inkscape angelegt, wieder als pdf exportiert und siehe da – der Fehler war weg!
  8. Veraltete Pakete: Nicht mehr aktuelle Pakete können selbstverständlich auch zu Fehlern im kompilierten Dokument führen, wenn man sie zusammen mit solchen Paketen verwendet, die auf dem neuesten Stand sind. Um zu prüfen, welche Paket-Versionen beim Kompilieren zum Einsatz kommen, stelle man ein \listfiles der Präambel voran (also noch vor \documentclass) und beim Kompilieren werden die verwendeten Pakete mitsamt ihrer Versionsnummer ans Ende der erzeugten .log-Datei geschrieben. Die kann man dann mit einem Texteditor einsehen und ggfs. aktualisieren. Hier beschreibe ich so ein Beispiel.
  9. Je nach Editor wird nach dem Kompilieren eine Log-Datei angezeigt, in der ersichtlich wird, in welcher Zeile die betreffende Warnung/Fehler zu suchen ist. Hin und wieder ergibt die angezeigte Zeilen-Nr. keinen Sinn, z.B. "1" (also die Zeile der \documentclass). Hier empfehle ich, das Dokument mit einem anderen TeX-Editor zu kompilieren, da dieser den Fehler ggs. "anders" oder "korrekt" anzeigt. Beispiel: Mit Kile wird Fehler in Zeile 1 angezeigt → nichts zu finden. Mit TeXMaker wird der Fehler in Zeile 43 angezeigt → dort sehe ich, dass eine Klammer fehlt.
  10. Gelegentlich ist hilfreich, alle beim Kompilieren erzeugten Metadateien zu löschen und von einer .tex-Datei aus ganz frisch zu kompilieren. Möglicherweise enthalten die Dateien für Verweise fehlerhafte Einträge, die immer wieder ausgewertet werden, obwohl die Verweise gar nicht mehr existieren.
  11. Häufig vergisst man, dass es unter LaTeX sog. reservierte Zeichen gibt, darunter das Prozent und den Unterstrich. Will man beide als reinen Text erzeugen, muss ihnen ein Escape vorangestellt werden (\% bzw. \_). Nun ist es so, dass man diese speziellen Ausdrücke gelegentlich vergisst oder im Quelltext überliest, weil sich "%" nunmal unauffälliger liest als "\%". Im Falle von Prozent, Kaufmanns-Und (&) und anderen reservierten Zeichen wird im Editor normalerweise hervorgehoben, dass etwas nicht stimmt. Doch was ist mit Quellcode, den man sonst nicht sieht? Etwa die eingebundene .bib-Datei für die Literatur? Also auch dort sollte man prüfen, ob nicht einzeln stehende &, %, $, _ und all die anderen reservierten Zeichen ohne entsprechendes Escape-Zeichen davor gespeichert sind.

 

Der Goldene Tipp: Kommt man einer skurilen LaTeX-Fehlerwarnung trotz mehrfachen Durchsehens des Quellcodes nicht auf die Schliche, hat sich immer der folgende Trick angeboten:

 

Man beendet vorzeitig das Dokument (d.h. mitten im Dokument) mit

\end{document}

und beobachtet, ob der Fehler immer noch auftritt. Tritt beim Kompilieren der gleiche Fehler immer noch auf, heißt das, dass sich die Quelle des Fehlers oberhalb vom testweise eingefügten \end{document} befindet. Tritt kein Fehler auf, weiß man, dass das Dokument bis hierher »sauber« ist und die Fehlerquelle erst irgendwo später im Dokument kommt. Auf diese Weise lässt sich die Fehlerquelle »eingrenzen«.