19
10

Nicht nur hier auf TeXwelt, sondern generell in Internet-Foren, im Usenet oder wenn man eine Support-Anfrage stellt, wird man häufig nach einem VM, einem vollständigen Minimalbeispiel, einem Minimalbeispiel oder in englischer Sprache nach einem MWE (= minimal, working example) oder MCE (= minimal but correct example) gefragt. Was ist das? Wozu dient das? Wie erstelle ich das?

Dieser Frage ist "Community Wiki" markiert.

gefragt 02 Jul '13, 11:59

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 22 Sep '14, 10:29

gast3's gravatar image

gast3
(ausgesetzt)


Was ist ein vollständiges Minimalbeispiel?

Ein vollständiges Minimalbeispiel (oder kurz Minimalbeispiel oder VM) ist die kleinste Menge Code, die notwendig ist, um ein Problem zu reproduzieren.

Im Idealfall besteht ein VM aus genau einer Datei mit wenigen Zeilen Code. Diese eine Datei sollte ohne jegliche Änderung genügen, um das Problem reproduzieren zu können. Zwar gibt es Fälle, in denen mehr als eine Datei benötigt wird, um das Problem zu reproduzieren, für diese Fälle gibt es aber Hilfsmittel, die unter »Vollständige Minimalbeispiele aus mehreren Dateien« beschrieben sind.

Man sollte auch nicht versuchen, ein VM zu erstellen, das mehr als ein Problem verdeutlicht. So wie zu genau einem Problem genau eine Frage gehört und eine Frage genau ein Problem auf einmal behandeln sollte, sollte auch das zugehörige VM genau dieses eine Problem zeigen.

Was ist der Sinn eines vollständigen Minimalbeispiels?

Die Erstellung eines VMs ist ein in den allermeisten Fällen notwendiger Schritt, um einerseits die Ursache eines Problems zu ermitteln und andererseits mögliche Lösungen zu testen. In der Regel sollte ein Fragesteller daher immer davon ausgehen, dass ein solches VM benötigt wird und es auch selbst erstellen.

Im Idealfall findet man bei der Erstellung des VMs bereits die Ursache und die Lösung des Problems. Falls dies nicht der Fall sein sollte, sollte man eine entsprechende Frage formulieren und dabei auch das erzeugte VM als Code-Block mit angeben. Hier auf TeXwelt funktioniert die Markierung als Code-Block übrigens ganz einfach, indem man den Code mit der Maus selektiert und dann entweder in der Toolbar auf 101/010 klickt oder auf der Tastatur Strg+k drückt. In anderen Foren, beispielsweise auf goLaTeX, muss man den Code eventuell in [code][/code] oder andere Markierungen einschließen.

Auf TeXwelt ist das VM auch deshalb wichtig, damit andere Hilfesuchende zusätzliche Anhaltspunkte haben, ob ihr Problem zu dem einer bereits beantworteten Frage passt. Ein korrekt als Code markiertes VM ist auch deshalb wichtig, weil nur korrekt markierter vollständiger Code sowohl hier auf TeXwelt als auch auf goLaTeX automatisch mit einem Knopf versehen wird, über den er direkt ausgeführt werden kann. Für korrekt markierte Codeschnipsel funktioniert das dagegen nur eingeschränkt. Für nicht korrekt markierten Code funktioniert es gar nicht.

Wie kann ich sicher stellen, dass mein Beispiel minimal ist?

Das ist normalerweise der aufwändigste Teil. Trotzdem kann ihn jeder Anfänger bewältigen. Es gibt dazu zwei mögliche Vorgehensweisen, wobei Anfängern unbedingt die Halbierungssuche empfohlen wird. Ergänzt wird das Ganze durch einige Zusatzmaßnahmen. Obwohl sich die folgenden Anleitungen auf LaTeX beziehen, sind sie generell auch für Probleme mit plainTeX, ConTeXt oder andere Formate anwendbar. Es gibt dann lediglich keine Klassen und Pakete, dafür aber eventuell andere Dateiarten, die in entsprechender Weise zu behandeln sind.

Halbierungssuche:

Die Halbierungssuche, die auch als binäre Suche oder Teile und Herrsche bekannt ist, kann von jedem Anfänger bewältigt werden. Sie erscheint zwar am Anfang aufwändig, kann es bei großen Dokumenten und komplexen Problemen auch sein, erfordert aber kaum Fachwissen.

Vorarbeiten:

  • Anfertigen einer neuen Arbeitskopie:

    Dieser Schritte ist extrem wichtig, um zu vermeiden, dass man Teile der bereits geleisteten Arbeit vernichtet. Dazu kopiert man das komplette Verzeichnis des Dokuments. Alle weiteren Schritte erfolgen dann auf der Kopie, die man zu seinem neuen Arbeitsverzeichnis macht! In der Kopie löscht man alle Hilfsdateien und führt LaTeX-Läufe, MakeIndex-Aufrufe etc. durch. Tritt das Problem auch nach mehreren Läufen nicht mehr auf, hatte sich aus einem früheren Fehler beispielsweise in einer Überschrift oder einem Label ein Fehler in einer Hilfsdatei eingeschlichen, der durch Beseitigung des Fehlers und der Hilfsdatei verschwunden ist. Man hat also Glück gehabt und muss gar nichts weiter tun als entweder mit der Kopie weiterzuarbeiten oder die Schritte, die man für die Kopie durchgeführt hat, auch auf das Original anzuwenden.

  • Löschen aller Teile nach der Problemstelle:

    Hierzu kommentiert man alle Teile aus dem Dokument aus, die nach dem Absatz stehen, in dem das Problem auftritt. Dann löscht man alle Hilfsdateien und führt LaTeX-Läufe, MakeIndex-Aufrufe etc. durch. Tritt das Problem nicht mehr auf, hat man zuviel auskommentiert. In diesem Fall muss man auch für die Teile hinter der Problemstelle die Halbierungssuche durchführen.

Durchführung der Halbierungssuche für den Dokumentinhalt (vor oder nach der Problemstelle):

  1. Deaktivieren ca. der Hälfte des entsprechenden Dokumentinhalts. Dies kann zunächst durch auskommentieren geschehen. Bei Dokumenten, die aus mehreren Dateien bestehen, kann man auch komplette \input- oder \include-Anweisungen auskommentieren. Man kann auch die Anweisung \end{document} nach vorn kopieren. Alles, was nach dem ersten \end{document} steht, wird ignoriert. Das gilt auch, wenn dieses \end{document} in einer Datei steht! Teile vom Ende einer Datei, die per \input oder \include gelesen wird, kann man auch deaktivieren, indem man \endinput in die Datei einfügt. Alles, was danach steht, wird ignoriert.

  2. Löschen aller Hilfsdateien. Dieser Schritt ist besonders für den Anfänger wichtig, da er nicht weiß, welche Auswirkungen die Hilfsdateien haben können!

  3. Durchführung von LaTeX-Läufen, MakeIndex-Aufrufen etc. bis sicher ist, dass das Problem entweder noch besteht oder nicht mehr besteht.

  4. Falls das Problem noch besteht, löscht man alle deaktiverten Teile und fährt bei Schritt 1 fort.

  5. Falls das Problem nicht mehr besteht, aktiviert man ca. die Hälfte des deaktiverten Teils wieder und fährt bei Schritt 2 fort.

Dieses Verfahren führt man so lange durch, bis das Dokument auf den Teil reduziert ist, der zu dem Problem führt. Sollten dabei große Teile des Dokuments als unverzichtbar übrig bleiben, sollte man wahlweise das Paket blindtext oder lipsum laden und Schritt 1 wie folgt abwandeln:

  1. Deaktivieren von größeren Dokumentpassagen und einfügen von \blindtext- bzw. \lipsum-Anweisungen als Ersatz dieser Passagen.

Nachdem die Halbierungssuche für den Dokumentinhalt ausgeführt wurde, führt man sie in gleicher Weise für die Definitionen und das Laden von Paketen in der Dokumentpräambel durch. Wenn das Deaktivieren von Paketen oder Definitionen in der Dokumentpräambel in Schritt 3 zu neuen Fehlermeldungen führt, überprüft man zusätzlich, ob man die neuen Fehlermeldungen auf einfache Weise beseitigen kann. So kann man beispielsweie das Laden einer Abbildung mit \includegraphics häufig dadurch ersetzen, dass man eine \rule-Anweisung verwendet. Dabei gibt man als erstes Argument die gewünschte Breite der ursprünglichen Abbildung und als zweites Argument die Höhe derselben an. Eine Alternative findet sich nachfolgend unter »Ergänzende Maßnahmen«.

Nicht beseitigen muss man die Pakete fontenc, fontspec, inputenc (oder selinput) und babel oder polyglossia. Bei aktuellen TeX-Distributionen wird tatsächlich kein inputenc (oder selinput) mehr benötigt, wenn die Ausgangsdatei UTF-8-codiert ist, was sie im Idealfall sein sollte. Das gilt inzwischen auch für den Online-Editor Overleaf. Braucht man unbedingt Kompatibilität zu total veralteten LaTeX-Distributionen, sei gegebenenfalls \usepackage[utf8]{inputenc} empfohlen. Sollte das Dokument lokal nicht in UTF-8 codiert sein, bietet sich die Verwendung von selinput an, damit für die lokale Kopie die zusätzliche Hürde der Umcodierung vermieden wird, das Dokument eine implizite Umcodierung durch die Übertragung bzw. das Einfügen in eine WWW-Seite aber fehlerfrei übersteht. Näheres ist der Anleitung zu dem Paket zu entnehmen.

Sinnvoll ist auch, die Optionen bei \documentclass und \usepackage zu reduzieren. So haben beispielsweise Farbeinstellungen beim Laden von hyperref meist keine Auswirkungen auf das Problem und sollten dann entfallen.

Ergänzende Maßnahmen:

Sobald man nur noch die Teile hat, die für das Problem zuständig sind, sollte man nach Möglichkeit:

  • \input- und \include-Anweisungen eliminieren:

    Dazu kopiert man den Code der entsprechenden Dateien an die Stelle der jeweiligen Anweisung und führt dann natürlich erneut Testläufe durch. Im Idealfall kann man so alle \input und alle \include beseitigen.

  • Grafikdateien überflüssig machen:

    Dazu fügt man beim Laden von graphicx die Option demo ein und führt dann erneut Testläufe durch. Dabei werden alle Bilddateien im Dokument durch schwarze Kästen ersetzt. Allerdings haben diese Kästen nur dann dieselbe Größe wie die ursprünglichen Bilder, wenn die Optionen width und height bei den \includegraphics-Anweisungen angegeben sind und die Option keepaspectratio nicht angegeben war. Hier sind also ggf. zusätzliche Änderungen erforderlich.

    Alternativ ersetzt man alle \includegraphics-Anweisungen durch \rule-Anweisungen. Dabei gibt man als erstes Argument die gewünschte Breite und als zweite die gewünschte Höhe der Ersatzabbildung an.

    Eine weitere Alternative besteht in der Verwendung des Pakets mwe, das auch einige Beispielabbildungen wie example-image in verschiedenen Dateiformaten bereitstellt. Diese kann man einfach an Stelle der eigenen Abbildungen verwenden. Gegebenenfalls kann man die Größe über die Optionen width und height bei \includegraphics an die der eigenen Grafiken anpassen. Näheres zu diesen Beispielbildern ist bei Bedarf der Anleitung des Pakets zu entnehmen.

  • Literaturdatenbank überflüssig machen:

    Wenn die konkreten Einträge in der Literaturdatenbank (bib-Datei) keine Rolle spielen, kann man diese durch Einträge aus biblatex-examples.bib ersetzen. Diese recht umfangreiche Literaturdatenbank wird mit biblatex zusammen installiert. Man kann sie daher (statt der eigenen Literaturdatenbank) in Beispielen verwenden, die biblatex benötigen und einfach einen oder mehrere Datensätze des gewünschten Typs nutzen. Die Schlüssel sind direkt der Datenbankdatei zu entnehmen. Diese ist über die Dateisuche oder im Terminal mit »kpsewhich biblatex-examples.bib« unter allen Betriebssystemen leicht zu finden. Man erspart sich damit die eigene, minimierte Literaturdatenbank als zusätzliche Textdatei beizufügen. Man ersetzt also beispielsweise \addbibresource{meineLiteratur.bib} durch \addbibresource{biblatex-examples.bib} und \cite{meineHomepage} durch \cite{ctan} und überprüft, ob das Problem damit noch immer auftritt. Ist das der Fall, bleibt man für das VM dabei.

  • Klassen- und Paketversionen ermitteln:

    Nicht selten hängt ein Problem auch von der Version eines Pakets oder einer Klasse ab. Der einfachste Weg, diese zu ermitteln, stellt die \listfiles-Anweisung dar. Aus Gründen der Übersicht hat sich eingebürgert, diese noch vor \documentclass zu setzen, obwohl dafür keine technische Notwendigkeit besteht. Die Anweisung sorgt dafür, dass am Ende der Log-Datei eine Dateiliste geschrieben wird. So erzeugt:

    % !TEX log
    \listfiles
    \documentclass{article}
    \begin{document}
    \end{document}
    

      zwar kein Dokument (also PDF- oder DVI-Datei) aber in der Log-Datei dennoch die Ausgabe:   

    *File List*
    article.cls    2007/10/19 v1.4h Standard LaTeX document class
     size10.clo    2007/10/19 v1.4h Standard LaTeX file (size option)
    ***********

Alternatives Vorgehen:

Alternativ zur Halbierungssuche kann man auch ein neues Dokument aufbauen. Dies ist ein alternatives Vorgehen, das erfahrene Anwender gerne nutzen, wenn ihr Ausgangsdokument sehr komplex ist. Dazu legen sie ein neues Verzeichnis mit einem neuen Dokument an. In dieses Dokument wird dann Schritt für Schritt Code aus dem ursprünglichen Dokument kopiert. Dabei geht man quasi wie bei der Halbierungssuche vor, nur dass man nicht aus dem Dokument löscht, sondern Code in das neue Dokument einfügt und bei Misserfolg wieder entfernt. Dieses Vorgehen ist nur zu empfehlen, wenn man bereits einen Verdacht über die Ursache hat. Daran anschließen sollte sich in jedem Fall noch eine Halbierungssuche zur Minimierung des Codes, wie sie oben beschrieben wurde.

Vollständige Minimalbeispiele aus mehreren Dateien

Ist es trotz aller Minimierungsleistung (siehe oben) erforderlich, dass ein VM aus mehreren Dateien besteht, so kann man für diese je nach Dateiart wie nachfolgend erkärt vorgehen.

Zusätzliche Dateien im Textformat:

In diesen Bereich gehören Unterdokumente, die sich nicht durch ergänzende Maßnahmen beseitigen liesen, aber auch Literaturdatenbanken (bib-Dateien). Falls ein Problem in einer eigenen Paketdatei auftritt, kann auch eine minimierte Fassung derselben in diesen Bereich gehören.

Falls diese Dateien nicht auf einige wenige Zeilen reduziert werden können, sollte man sie in ein Archiv zusammen packen und per Link dauerhaft zum Download bereit stellen. Dieses Vorgehen sollte aber nur im absoluten Notfall gewählt werden, da es die Chancen auf Antworten reduziert und außerdem extern Datenquellen immer verloren gehen können.

Falls diese Dateien auf einige wenige Zeilen reduziert werden können, sind sie in Form von filecontents-Umgebungen anzugeben. Die Umgebung erwartet genau ein Argument: den Dateinahmen unter dem der Inhalt der Umgebung gespeichert werden soll.

Hier ein kurzes Beispiel:

\begin{filecontents}{meinPaket.sty}
\ProvidesPackage{meinPaket}[2013/07/02 Beispiel]
\ProcessOptions\relax
\end{filecontents}
\listfiles
\documentclass{article}
\usepackage{meinPaket}
\begin{document}
Test
\end{document}

Die filecontents-Umgebung erzeugt also die Datei meinPaket.sty, die anschließend in der Dokumentpräambel via \usepackage{meinPaket} geladen wird. Dabei tritt ein Fehler auf, weil \ProvidesPackage falsch geschrieben wurde.

Wie im Beispiel angewendet wird die Datei von der filecontents-Umgebung übrigens nur erzeugt, wenn sie nicht bereits vorhanden ist. Eine vorhandene Datei wird also nicht überschrieben. Wenn man also Änderungen in der Umgebung vornimmt, muss die Datei von Hand gelöscht werden. Dies kann man ab LaTeX 2019-10-01 über das optionale Argument force oder overwrite ändern. Mit

\begin{filecontents}[force]{meinPaket.sty}
\ProvidesPackage{meinPaket}[2013/07/02 Beispiel]
\ProcessOptions\relax
\end{filecontents}
\listfiles
\documentclass{article}
\usepackage{meinPaket}
\begin{document}
Test
\end{document}

wird dann das Paket meinPaket.sty bei jedem LaTeX-Lauf neu erzeugt, eine vorhandene Datei also überschrieben.

Bei älteren LaTeX-Versionen kann man das gleiche durch Voranstellen von

\RequirePackage{filecontents}

erreichen. Dann überschreibt die filecontents-Umgebung auch ohne optionales Argument die Datei bei jedem LaTeX-Lauf. Also aufgepasst! Hier zeigt sich wie wichtig es ist, Tests nicht im Dokumentverzeichnis, sondern nur in einer Kopie durchzuführen. Sonst droht Datenverlust!

Übrigens muss im Beispiel \RequirePackage an Stelle von \usepackage für das Laden von Paket filecontents verwendet werden, weil \usepackage erst nach \documentclass verwendet werden kann. Dies ist als Ausnahme für die Verwendung von \RequirePackage in einem Dokument zu betrachten. Eine weitere Ausnahme wäre übrigens ggf. das Laden von Paket fixcm, das ebenfalls vor \documentclass geladen werden sollte.

Will man eine Datei erzeugen, deren Dateinamen bis auf die Endung mit der Hauptdatei übereinstimmt, so kann man übrigens \jobname verwenden. Im folgenden Beispiel wird dies für die Literaturdatenbank gezeigt:

\begin{filecontents}{\jobname.bib}
\@online{ bk:test,
  author={Saputello},
  title={Was ist ein vollständiges Minimalbeispiel oder kurz VM und wie
    erstelle ich dieses?},
  url={https://texwelt.de/wissen/fragen/569/was-ist-ein-vollstandiges-minimalbeispiel-oder-kurz-vm-und-wie-erstelle-ich-dieses}
}
\end{filecontents}
\listfiles
\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[backend=biber]{biblatex}
\addbibresource{\jobname.bib}
\begin{document}
Das ist ein Beispiel aus \cite{bk:test}.
\printbibliography
\end{document}

Wenn die konkreten Einträge in das Literaturverzeichnis für das Problem keine Rolle spielen, sollte man übrigens besser auf das Beifügen einer Literaturdatenbank verzichten und stattdessen direkt die Beispieldatenbank von biblatex verwenden, also entsprechend dem obigen Beispiel:

\listfiles
\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
Das ist ein Beispiel aus \cite{markey}.
\printbibliography
\end{document}

Ich habe hier also die Online-Quelle bk:test aus \jobname.bib durch die Online-Quelle markey aus biblatex-examples.bib ersetzt und mir so das Beifüge von \jobname.bib erspart.

Zusätzliche Dateien im Binärformat:

In diesen Bereich fallen alle Bilddateien sowie Dokumentdateien im PDF-Format. Für diese Art von Dateien sollte man unbedingt noch einmal prüfen, ob man ihre Verwendung einsparen kann. Dazu ist wie oben unter »Ergänzende Maßnahmen« angegeben vorzugehen. Bleiben dann dennoch solche Dateien übrig, so sind diese als Archiv zusammen zu packen und via Link dauerhaft zum Download anzubieten.

Wie kann ich sicher stellen, dass mein Beispiel vollständig ist?

Das ist normalerweise der letzte, aber auch einfachste Schritt. Dazu gibt es zwei mögliche Vorgehensweisen:

  • Konstruktives Vorgehen (= sichere Methode):

    Man legt ein neues Arbeitsverzeichnis an, kopiert nur die Datei(en) in dieses Arbeitsverzeichnis, die man als VM weiterzugeben gedenkt und führt dann einen oder auch mehrere LaTeX-Läufe einschließlich aller eventuell weiteren notwendigen Programmläufe wie BibTeX, biber, MakeIndex etc. in diesem neuen Arbeitsverzeichnis aus.

  • Destruktives Vorgehen (= gefährliche Methode):

    Man löscht im aktuellen Arbeitsverzeichnis alle Dateien, die man nicht als Teil des VM betrachtet. Doch Vorsicht: Falls man dabei Dateien löscht, die man noch benötigt, hat man danach ein großes Problem. Um das sicher zu vermeiden, kann man stattdessen auch das konstruktive Vorgehen wählen. Entscheidet man sich für das Löschen der Dateien, sollte man auf jeden Fall alle Hilfsdateien wie *.aux, *.toc, *.log, *.ind, *.idx, *.glo, *.gls etc. löschen. Anschließend führt man noch einen oder auch mehrere LaTeX-Läufe einschließlich aller eventuell weiteren notwendigen Programmläufe wie BibTeX, biber, MakeIndex etc. in diesem neuen Arbeitsverzeichnis aus.

Falls dieser LaTeX-Lauf bzw. die LaTeX-Läufe genau das Problem zeigt, das Thema einer Frage ist, hat man das Ziel fast erreicht. Auch wenn es eigentlich selbstverständlich ist, sei aber noch einmal explizit erwähnt, dass ein Code-Ausschnitt niemals ein vollständiges Minimalbeispiel sein kann. Wie der Name schon sagt, muss ein ein VM immer den kompletten Code und alle Dateien enthalten, die für den LaTeX-Lauf notwendig sind, mit dem man das Problem reproduzieren kann. Sobald jemand weiteren Code hinzufügen oder irgend etwas an dem Code ändern muss, um das Problem reproduzieren zu können, ist das Beispiel nicht mehr vollständig.

Worauf sollte ich abschließend unbedingt noch achten?

  • Quelle für spezielle Klassen und Pakete angeben!
    Wenn man das VM dann als Code-Block in seine Frage eingefügt hat, sollte man noch einmal kontrollieren, dass die verwendeten Klassen und Pakete auch tatsächlich auf den einschlägigen Quellen, in der Regel also auf CTAN zu finden sind. Falls das nicht der Fall ist, ist unbedingt ein Download-Link für die fehlende Klasse bzw. die fehlenden Pakete anzugeben. Besser ist jedoch, wenn man überprüft, ob das Beispiel auch mit einer allgemeineren Klasse, beispielsweise einer Standardklasse, bzw. ohne Spezialpakete das Problem zeigt.

  • Klasse minimal ist nicht für Minimalbeispiele gedacht!
    Es sei explizit darauf hingewiesen, dass minimal keine Klasse für Minimalbeispiele ist, sondern eine rudimentäre Klasse zum Testen des LaTeX-Kerns. Eine Standardklasse wie article, report oder book ist daher für Minimalbeispiele vorzuziehen.

  • Klasse standalone ist nicht für Minimalbeispiele gedacht!
    Es sei an dieser Stelle auch darauf hingewiesen, dass standalone für ein vollständiges Minimalbeispiel eher schlecht geeignet ist. Diese Klasse ist sehr speziell. Nicht alles funktioniert mit ihr wie mit einer herkömmlichen Klasse. Sie sollte daher für Testcode – und genau darum handelt es sich bei einem vollständigen Minimalbeispiel – nur dann verwendet werden, wenn die Verwendung von standalone Teil des Problems ist. Sonst gilt dasselbe wie bereits für minimal und andere Spezialklassen erwähnt: Optimalerweise testen, ob das Problem auch mit einer Standardklasse auftritt und dann eine solche für das vollständige Minimalbeispiel verwenden.

  • Programme angeben!
    Sollte für die Bearbeitung ein bestimmter (La)TeX-Prozessor notwendig sein, beispielsweise xelatex, pdflatex oder lualatex, so sollte man das am besten unmittelbar vor oder am Anfang des VM angeben. Bei LaTeX-Beispielen, die sowohl mit latex,pdflatex, xelatex oder lualatex funktionieren, ist das hingegen nicht zwingend. Es schadet aber auch nichts, dazu zu schreiben, was man verwendet. Das erspart ggf. Rückfragen. Auch sollte man insbesondere bei Problemen, die zusätzliche Arbeitsschritte wie den Aufruf von makeindex, xindy, makeglossaries, bibtex, bibtex8, biber oder vergleichbare Programme benötigen, nach Möglichkeit genau angeben, in welcher Reihenfolge man was aufgerufen hat und ob diese Programme dabei Fehler ausgegeben haben.

  • Fehlermeldungen im Original zitieren!
    Sind Fehlermeldungen Teil des Problems sollte man diese wörtlich aus der Log-Datei kopieren. Bei LaTeX trägt diese die Endung .log, bei BibTeX oder Biber die Endung .blg, bei MakeIndex oder Xindy kann die Log-Datei unterschiedliche Endungen haben. Auch hier eignet sich für das Kopieren in den Beitrag ein Code-Block. Dabei ist wichtig, dass man nicht zu viel weglässt. Gleichzeitig ist aber meist auch nicht die gesamte Log-Datei notwendig. Treten mehrere Fehler auf, genügen in der Regel die ersten bis bis drei, weil alle weiteren häufig Folgefehler sind. Wird doch die gesamte Log-Datei benötigt, so sollte man sie möglichst dauerhaft über einen Link bereitstellen, aber trotzdem wichtige Passagen daraus zitieren.

  • Alle Informationen gehören in die Frage selbst!
    Das vollständige Minimalbeispiel sollte natürlich auch nicht in einem Kommentar versteckt werden. Stattdessen sollte der Fragesteller es direkt in der Frage unterbringen. Wird hier auf TeXwelt ein VM nachträglich per Kommentar nachgefragt, sollte der Fragesteller seine Frage editieren, um das VM einzufügen. Das Editieren ist für den Fragesteller einfach über den Bearbeiten-Link unter der Frage möglich.

  • Nichts verändern!
    Leider erleben wir auch immer wieder, dass Fragesteller an ihren Beispielen vor dem Absenden der Frage noch nachträglich etwas verändern und die Beispiele dann nicht mehr funktionieren oder nicht mehr das Problem zeigen. Daher sei abschließend noch als wichtiger Punkt etwas erwähnt, was eigentlich selbstverständlich sein sollte: Bitte nur getestete Minimalbeispiele zeigen, mit denen wirklich das Problem reproduziert werden kann und die auch der begleitenden Beschreibung vollumfänglich entsprechen! Nach dem abschließenden Test in einem neuen Verzeichnis keine noch so kleinen Änderungen mehr vornehmen! Vor dem Verschicken der Frage noch einmal kontrollieren, dass auch das richtige Beispiel kopiert wurde!

  • Ausführung testen!
    Da korrekt markierter Code, hier auf TeXwelt und beispielsweise auch auf goLaTeX, automatisch mit einem Knopf versehen wird, über den man ihn direkt ausführen kann kann man dies natürlich ebenfalls nutzen, um seinen Code nach dem Speichern des Beitrags nochmal selbst zu testen. Unerwartete Fehler oder unerwartete Ergebnisse sind ein Anhaltspunkt dafür, was bei anderen Anwendern ebenfalls geschehen wird. Ob man dann das Beispiel nochmals überarbeitet oder lediglich durch zusätzliche Informationen (beispielsweise zu verwendeten LaTeX-, Klassen- und Paketversionen oder Code-Zitaten von Fehlermeldungen oder Screenshots aus dem PDF) ergänzt, hängt von der Art des Problems und des unerwarteten Ergebnisses ab und ist nicht allgemein beantwortbar. Einfach ignorieren sollte man das als Fragesteller jedoch nicht.

Permanenter link

beantwortet 02 Jul '13, 12:01

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 06 Jul '21, 17:36

gast3's gravatar image

gast3
(ausgesetzt)

3

Der Text ist großartig! Vielen Dank für die Mühe!

(02 Jul '13, 13:37) stefan ♦♦
1

@saputello: Es erleichtert dem "Minmalbeispielerzeugenden" und später dem "Helfenden", wenn vor \begin{filecontents}{...} noch ein \RequirePackage{filecontents} vorgesehen wird. Dann sind auch Änderungen in dieser externen Datei leicht möglich.

(03 Jul '13, 09:54) Herbert
1

@Herbert Ich selbst versuche \RequirePackage{filecontents} in meinen Antworten zu vermeiden (obwohl ich es selbst durchaus verwende), seit ich einmal eine bitterböse Mail bekommen habe, in der ein Anwender entgegen aller Ratschläge kein neues Verzeichnis zum Testen verwendet hat, sondern sein Dokumentverzeichnis, wodurch seine bib-Datei vernichtet wurde. Sogar rechtliche Schritte wurden mir angedroht! Das birgt also auch Risiken, weshalb ich es nur mit Einschränkungen empfehlen kann.

(03 Jul '13, 11:14) saputello

Beim vorletzten Punkt "Sollte für die Bearbeitung ein bestimmter TeX-Prozessor notwendig sein, beispielsweise xelatex..." hätte ich immer empfohlen, einen arara-Kopf anzugeben (einzelne machen das ja sogar), das ist selbsterklärend und auch die nicht-araraier werden es verstehen; auch spart es, die Kompilierung großartig zu erklären, was man dann aus vielen Zeilen Text raussuchen muß oder auch nie finden wird. Andererseits scheint arara für viele eine höchstfragwürdige Sache zu sein, warum auch immer... Schule machen wird es daher vermutlich (leider) nie.

(18 Aug '14, 22:57) cis
2

@cis Ich bin der meinung, dass jemand der aus Unkenntnis nachlesen muss, was ein Minimalbeispiel ist, auch mit einem arara-Kopf nichts anfangen kann. Und da es automatisiert versteckt es wichtige Basiskenntnisse, welche jeder Anfänger wissen sollte. Deshalb mag ich auch TeXniccenter nicht.

(19 Aug '14, 08:46) Johannes

@Johannes: Jetzt komm, wenn da steht %arara: xelatex - also der Schritt ist nun wirklich nicht so groß: "Aha, das muß ich also mit xelatex kompilieren". Zudem ist ja niemand der Mund verboten, was Rückfragen angeht. Ich find arara-Köpfe angenehm. Viele machen auch gar keine Angaben zur Kompilierung, und das betrifft nicht nur Anfänger, und nach einer halben Stunde Recherche stellt sich dann raus: "Achso, das geht nur mit lualatex"

(19 Aug '14, 11:01) cis

Links, super Idee.

(04 Jan '16, 12:16) Johannes

Bei den ergänzenden Maßnahmen hat sich irgendwie ein weiterer Backslash eingeschlichen: \input und \include.

(06 Dez '19, 14:39) Bartman

@Bartman Danke. Muss an der geänderten Software liegen. Früher musste man im Link-Text den Backslash trotz Backticks verdoppeln, weil er sonst verloren ging. Jetzt offenbar nicht mehr.

(06 Dez '19, 14:52) saputello

arara ist so … umständlich.

(14 Jul '23, 05:31) TeXniker
Ergebnis 5 von 10 show 5 more comments
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×10
×3
×1

gestellte Frage: 02 Jul '13, 11:59

Frage wurde gesehen: 97,264 Mal

zuletzt geändert: 11 Dez, 10:49