Fehler lesen und debuggen

Wenn eine Kompilierung fehlschlägt, gibt LaTeX eine kryptische Meldung ! … und eine Zeilennummer l.NN aus und hält dann an der Eingabeaufforderung ? an. Wenn du das lesen kannst — plus .log und ein paar Debugging-Befehle — wird aus „es ist kaputt“ ein „hier ist die Stelle zum Reparieren“. Diese Seite behandelt Fehlermeldungen, Logdateien und Debugging.

Fehler lesen

Fehler haben eine feste Form: ! gefolgt von der Meldung (z. B. ! Undefined control sequence), dann l.NN mit der Zeile, in der TeX ins Stolpern kam, umbrochen an der Stelle, bis zu der gelesen wurde. Wichtig: l.NN ist die Stelle, an der LaTeX das Problem *bemerkt*, nicht zwingend seine Ursache — ein fehlendes } kann erst Zeilen später sichtbar werden. Wenn die angezeigte Zeile korrekt aussieht, prüfe also auch darüber. An der ?-Eingabe: Return = weiter versuchen, h = Hilfe, x = beenden, q = still bis zum Ende laufen (alle Fehler sammeln), r = ohne Stopps laufen. (In der Praxis lassen latexmk und ähnliche Werkzeuge ohnehin nonstop laufen; man liest die Fehler danach meist aus .log.)

  • Undefined control sequence — Tippfehler oder vergessenes \usepackage.
  • Missing $ inserted — ein mathematisches Symbol wurde außerhalb des Mathematikmodus verwendet.
  • File x.sty not found — Paket ist nicht installiert (mit tlmgr hinzufügen).
  • Runaway argument — unausgeglichene { } (meist fehlt ein }).

Das Log lesen — .log / texfot

Die Datei .log enthält den gesamten Lauf — alle Fehler und Warnungen (Overfull/Underfull \hbox, undefinierte Verweise, Schrift-Ersetzungen). Da das Log sehr ausführlich ist, reduziert texfot es auf die „interessanten“ Zeilen (siehe „texdoc / texfot …“). Auch wenn ein Build „erfolgreich“ ist, solltest du hier die Warnungen prüfen.

Debugging-Befehle

\show\foo gibt Bedeutung/Definition von \foo aus (und hält bei ? an); \showthe\textwidth gibt den Wert eines Registers oder einer Länge aus. \typeout{...} (LaTeX) und \message{...} (TeX) schreiben eigene Meldungen ins Log/Terminal — praktisch für printf-artiges Debugging. Die schwere Artillerie, \tracingall, schreibt alles, was TeX tut, ins Log (sehr ausführlich; das Paket trace räumt die Ausgabe auf). Damit findest du, wo eine Expansion falsch läuft.

latex
\show\section          % \section の定義を表示 / show its meaning
\showthe\textwidth      % 長さの値を表示 / show a length’s value
\typeout{ここまで来た}    % 自分のメッセージ / your own message
\tracingall             % すべてをログへ(非常に冗長)/ trace everything (very verbose)