[Tip] "Fehlersuche im LaTeX-Quellcode" oder "Wie erstelle ich ein Minimalbeispiel?"

Neue Frage »

Calvin Auf diesen Beitrag antworten »
[Tip] "Fehlersuche im LaTeX-Quellcode" oder "Wie erstelle ich ein Minimalbeispiel?"
Dieser Beitrag wurde mit Genehmigung der Autorin hierher kopiert. (Ursprünglicher Beitrag)

Lieber Hilfe-Suchender,

hier findest Du eine kleine Anleitung, wie man Problemen auf die Spur kommt, die plötzlich und scheinbar ohne ersichtlichen Grund auftauchen.


"Fehlersuche in LaTeX" oder "Wie erstelle ich ein Minimalbeispiel?"

Wenn Du Dein Problem im Forum schilderst, sind Fehlerbeschreibungen im Stile von "Hilfe! Mein Dokument kompiliert einfach nicht mehr." nicht aussagekräftig genug, um Dir helfen zu können. Daher ist ein Codeausschnitt in Form eines Minimalbeispiels (MB) immer extrem hilfreich.

Hier deshalb eine kleine Anleitung, wie Du ein Minimalbeispiel selbst erstellen kannst, anhand dessen Dir dann im Forum geholfen werden kann:


Oft genug und richtig kompiliert?

Als erstes überprüfst Du: Hast Du das Dokument wirklich mehrmals kompiliert?
Denn beim 1. LaTeX-Lauf wird nur das Dokument einmal grob zusammengeschustert, im 2. erst werden Verzeichnisse (u.a. TOC), Verweise etc. erstellt. Und ab dem 3. gehts noch um schönere Zusammenstellung/Formatierung/Bildplatzierung und die absolut richtigen Seitenzahlen in den Verzeichnissen.
Wenn Du hier also sicher gehen willst, kompiliere 4x, dann ist von LaTeX aus alles fertig formatiere.
Solltest du ein Literaturverzeichnis mit BibTeX erstellen wollen, musst du auch mit bibtex komplieren, und zwar in der Reihenfolge latex -> bibtex -> latex (ggf. dann mehrmals LaTeX).

Überprüfe, _wie_ du komplierst: Mit pdflatex (also direkt von .tex nach .pdf) oder mit dvips (von .tex nach .dvi nach .ps nach .pdf)? Je nachdem kann es Probleme mit Bildern geben, da pdflatex zwar .png und .jpg akzeptiert, dvips jedoch nicht.


Von LaTeX erzeugte Dateien gelöscht?

Manchmal verhindern die von LaTeX selbst erzeugten Dateien wie .aux, .bbl, .toc das korrekte Kompilieren, wenn man eigentlich einen Fehler im .tex behoben hat, er aber in diesen Dateien noch drin gespeichert ist.
Die Dateien werden im gleichen Ordner wie das Hauptdokument erstellt und können einfach gelöscht werden.
Wenn Du unsicher bist, lege einen neuen Ordner (z.B. "MyTrash") an und verschiebe die Dateien dorthin, dann kannst Du sie einfach zurückholen, falls Du versehentlich etwa eine .tex, .bib-Datei oder - je nach Editor - die Projektverwaltungsdatei "gelöscht" bzw. dorthin verschoben hast.

Wenn die von LaTeX erzeugten Dateien gelöscht wurden, sind je nach Dokument wieder mehrere Kompilierungsvorgänge nötig, um sie wieder zu erzeugen.
Wenn die Fehlerquelle im Hauptcode bisher nicht behoben wurde, so ist es gut möglich, dass der Fehler erst nach dem zweiten LaTeX-Lauf wieder da ist. Dann musst Du weiter auf Fehlersuche gehen, am Besten über ein Minimalbeispiel wie unten beschrieben.


Wenn Du diese Punkte überprüft hast und das Problem noch besteht, machst Du folgendermassen weiter:


Vom Dokument zum Minimalbeispiel - Variante 1

0. Nimm den ganzen Projektordner wie er ist und packe eine Kopie davon in einen zip-Ordner oder, wenn es nur eine einzelne Datei ist, kopiere diese und arbeite im Folgenden nur noch auf der Kopie. So ist das Original erstmal sicher und gebackupt.

1. Erstelle eine neue, leere .tex-Datei.

2. Kopiere folgendes dorthin:

code:
1:
2:
3:
4:
5:
6:
7:
\documentclass{article} 

\begin{document}
Test
\end{document}


3. Kompiliere dieses Mini-Minimalbeispiel mit pdflatex. Läuft das?

4. Wenn ja, dann kopiere nach und nach den Code aus der alten Datei ins neue Dokument.
Eine mögliche Vorgehensweise: Fange zunächst mit Documentclass, Paketen, Inputs etc., was vor \begin{document} (der "Präambel") ist, es steht also immernoch nur "Test" im Body (das ist der Inhalt, also alles zwischen \begin{document} und \end{document}). Nach _jedem_ Paket, input oder sonstiger Änderung der Präambel kompilierst Du und überprüfst, ob es noch ohne Fehler läuft (Warnungen erstmal weitestgehend ignorieren).

5. Wenn die gesamte Präambel drin ist und das Dokument dann noch läuft, machst Du mit dem Body weiter. Dabei gehst Du genauso vor wie bei der Präambel. Nach _jedem_ input, Bild oder Textabschnitt kompilierst Du und überprüfst wieder, ob es läuft.
Dazu musst Du natürlich sicherstellen, dass LaTeX eventuelle Inputs/Bilder etc. auch findet.
Und wenn es um Probleme mit dem Inhaltsverzeichnis oder anderen Verzeichnissen geht, kompilierst Du nach jedem Einfügen eines Teils jeweils 2x, da die Verzeichnisse ja erst beim 2. Lauf aktualisiert werden (s.o.).

6. Falls Du input- oder include-Dateien verwendest: Tritt der Fehler auch auf, wenn Du die ausgelagerten Textteile direkt ins Hauptdokument einbindest?
Wenn ja, steckt irgendwo in diesem Code ein Fehler. Kommentiere nach und nach aus, um der problematischen Stelle auf die Spur zu kommen.
Wenn nein, ist möglicherweise die Einbindung über input/include schuld. Verwende dann für das problematische input/include die filecontents-Umgebung (s.u.), bevor du das MB ins Forum stellst.


Vom Dokument zum Minimalbeispiel - Variante 2

Hier gehtst Du quasi andersherum vor wie in Variante 1:

Zunächst legst Du wieder ein Backup an, und dann kommentierst Du nach und nach alles aus dem Dokument aus. Dabei fängst Du mit Input-Dateien und Bildern an und kontrollierst, ob und wann ein Fehler _nicht_ mehr auftaucht. Hier musst Du natürlich ebenfalls nach jedem Schritt kompilieren.


Mit so einer Vorgehensweise solltest Du das Problem schon sehr gut eingrenzen können.
Wenn dann klar ist, wo in etwa der Haken ist, kannst Du das Problem im Idealfall bereits selbst lösen.
Wenn nicht, dann kopierst Du die Teile des Dokuments, die für das Reproduzieren des Fehlers notwendig sind (und nicht mehr und nicht weniger!) in ein neues Dokument.


Hinweise

a) Bilder:
Die Bild-Dateien hast üblicherweise nur du. Oftmals sind diese für die Problemlösung unnötig und machen nur mehr Arbeit. Verwende deshalb bitte die Demo-Option \usepackage[demo]{graphicx}. Bei den Grafiken gibst du dann eine feste Breite und Höhe an, z.B. \includegraphics[width=1mm,height=8cm]{SchmalesBrett}).

Alternativ verwende bitte statt \includegraphics{Dein-Bild} den Befehl \rule{x}{y}, der einen schwarzen Kasten einfügt.

_Nur_ wenn der Fehler definitiv mit dem Bild zu tun hat, lädst Du es als Extra-Datei mit hoch und beschreibst kurz, wie das Bild erstellt wurde.

b) Andere Dateien, auf die im Dokument zugegriffen wird:
Wenn Du in Deinem Beispiel auf weitere Dateien zugreifen musst (häufig ist das eine .bib-Datei, die als Literaturverzeichnis dient), kannst Du den relevanten Teil dieser Dateien mittels einer filecontents-Umgebung zum Teil deines Beispiels machen und so potentiellen Helfern einige Arbeit ersparen. Das, was im filecontents steht, wird als separate Datei automatisch aus dem LaTeX-Lauf heraus erzeugt, also etwa eine Datei "dateiname.bib", aber auch „dateiname.tex“ o.ä., die dann im Dokument verwendet werden können. Es sind auch mehrere filecontents-Umgebungen nacheinander möglich. Der Code dafür sieht so aus (einzufügen irgendwo in der Präambel zwischen \documentclass{...} und \begin{document}):

code:
1:
2:
3:
4:
5:
6:
\usepackage{filecontents}
\begin{filecontents}{dateiname.bib}
  (Inhalt der Datei)
\end{filecontents}


c) Manchmal können Probleme an verschiedenen Paketversionen oder veralteten Installationen liegen. Um herauszufinden, welche Versionen und Pakete gerade verwendet werden, stellt man den Befehl "\listfiles" ganz an den Anfang des Headers noch _vor_ \documentclass{...}. Dies ergibt im .log-File dann eine Liste der Pakete, die mit "*File List*" beginnt.


Das fertige MB kompilierst Du dann und überprüfst, ob das Ergebnis (z.B. die Fehlermeldung) tatsächlich noch das gleiche ist wie beim Ausgangsdokument.
Und dann stellst Du diesen Code als Minimalbeispiel mit einer kurzen, aussagekräftigen Erklärung hier ins Forum.


Wieso der ganze Aufwand?

Keiner ausser Dir als Fragesteller kennt das Dokument. Viele Einstellungen, Pakete, Formatierungen etc. beeinflussen sich gegenseitig und es ist ebenso wichtig zu wissen, wie Du eine bestimmte Stelle eingegeben hast (z.B. eine table-Umgebung). Daher muss man unbedingt wissen, wie der genaue Aufbau bei Deinem konkreten Fall ist, der das Problem verursacht.

Und, was ganz wichtig ist: Mit einem MB machst Du es den Helfern einfach: Sie müssen nur kurz den Code kopieren und können das Problem nachvollziehen und im besten Fall gleich beheben. So ist die Hemmschwelle zum Helfen sehr gering, und oft sind es nur Kleinigkeiten, wie etwa ein vergessenes "&" in einer Tabelle.
Aber wenn ein Hilfs-Williger erstmal anfangen muss, selbst das Problem herstellen müssen, dann ist das sehr mühsam und macht absolut keinen Spass.
Ausserdem entsteht dann ganz schnell der Eindruck, dass der Fragesteller einfach zu faul war, sein Problem selbst anzugehen.

Also: Mit einem schicken kleinen MB lässt sich ein Problem (nahezu) immer beheben. smile

Viel Spass beim Basteln,
Schweinebacke Auf diesen Beitrag antworten »

Statt \rule zu verwenden, kann man auch das Paket graphicx mit Option demo laden und dann die gewünschte Grafikgröße bei \includegraphics via Optionen width und height angeben:
code:
1:
2:
3:
4:
5:
\documentclass{article}
\usepackage[demo]{graphicx}% demo ersetzt die Bilder automatisch durch schwarze Boxen
\begin{document}
\includegraphics[width=1mm,height=8cm]{SchmalesBrett}
\end{document}


Vielleicht kannst Du das ergänzen und dann meinen Beitrag wieder löschen.
Calvin Auf diesen Beitrag antworten »

Ist ergänzt. Danke für den Hinweis.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »