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.
|
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 klickt oder auf der Tastatur 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:
Durchführung der Halbierungssuche für den Dokumentinhalt (vor oder nach der Problemstelle):
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
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
Nicht beseitigen muss man die Pakete Sinnvoll ist auch, die Optionen bei Ergänzende Maßnahmen:Sobald man nur noch die Teile hat, die für das Problem zuständig sind, sollte man nach Möglichkeit:
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 DateienIst 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 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 Wie im Beispiel angewendet wird die Datei von der \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 Bei älteren LaTeX-Versionen kann man das gleiche durch Voranstellen von \RequirePackage{filecontents} erreichen. Dann überschreibt die Übrigens muss im Beispiel Will man eine Datei erzeugen, deren Dateinamen bis auf die Endung mit der Hauptdatei übereinstimmt, so kann man übrigens \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 \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 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:
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?
1
@saputello: Es erleichtert dem "Minmalbeispielerzeugenden" und später dem "Helfenden", wenn vor
(03 Jul '13, 09:54)
Herbert
1
@Herbert Ich selbst versuche
(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
(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
(19 Aug '14, 08:46)
Johannes
@Johannes: Jetzt komm, wenn da steht
(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:
(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
|