Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 43
Link auf goLaTeX geändert

06 Jul '21, 17:36

gast3's gravatar image

gast3
(ausgesetzt)

<a name="Was">[Was ist ein vollständiges Minimalbeispiel?](https://texwelt.de/wissen/fragen/569#Was)</a> ========================================== **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](https://texwelt.de/wissen/fragen/569#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. <a name="Wieso">[Was ist der Sinn eines vollständigen Minimalbeispiels?](https://texwelt.de/wissen/fragen/569#Wieso)</a> ====================================================== 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][1] und dabei auch das erzeugte *VM* als [Code-Block][2] mit angeben. Hier auf TeXwelt funktioniert die Markierung als [Code-Block][3] übrigens ganz einfach, indem man den Code mit der Maus selektiert und dann entweder in der Toolbar auf ![101/010][4] klickt oder auf der Tastatur `Strg+k` drückt. In anderen Foren, beispielsweise auf [goLaTeX](https://golatex.de), [goLaTeX](https://golatex.de/viewtopic.php?f=2&t=18410), 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](https://texwelt.de/fragen/27509). Für korrekt markierte Codeschnipsel funktioniert das dagegen nur eingeschränkt. Für nicht korrekt markierten Code funktioniert es gar nicht. <a name="minimal">[Wie kann ich sicher stellen, dass mein Beispiel minimal ist?](https://texwelt.de/wissen/fragen/569#minimal)</a> ============================================================ 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. <a name="Wie">[Halbierungssuche](https://texwelt.de/wissen/fragen/569#Wie):</a> ----------------- 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`][5] oder [`lipsum`][6] 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`](https://ctan.org/pkg/selinput) an, damit für die lokale Kopie die zusätzliche Hürde der [Umcodierung](https://texwelt.de/wissen/fragen/2656) 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. <a name="ergaenzend">[Ergänzende Maßnahmen](https://texwelt.de/wissen/fragen/569#ergaenzend):</a> --------------------- Sobald man nur noch die Teile hat, die für das Problem zuständig sind, sollte man nach Möglichkeit: * <a name="input">[`\input`- und `\include`-Anweisungen eliminieren](https://texwelt.de/wissen/fragen/569#input):</a> 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. * <a name="Bilder">[Grafikdateien überflüssig machen](https://texwelt.de/wissen/fragen/569#Bilder):</a> 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`](https://www.ctan.org/pkg/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. * <a name="Literatur">[Literaturdatenbank überflüssig machen](https://texwelt.de/wissen/fragen/569#Literatur):</a> 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](https://texwelt.de/wissen/fragen/3461) 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](https://texwelt.de/wissen/fragen/569#Textdateien). 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. * <a name="Version">[Klassen- und Paketversionen ermitteln](https://texwelt.de/wissen/fragen/569#Version):</a> 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} &emsp;&ensp;zwar kein Dokument (also PDF- oder DVI-Datei) aber in der Log-Datei dennoch die Ausgabe: &emsp;&ensp;<pre>`*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) ***********`</pre> <a name="Alternative">[Alternatives Vorgehen:](https://texwelt.de/wissen/fragen/569#Alternative)</a> ---------------------- 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. <a name="Dateien">[Vollständige Minimalbeispiele aus mehreren Dateien](https://texwelt.de/wissen/fragen/569#Dateien)</a> ================================================== 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. <a name="Textdateien">[Zusätzliche Dateien im Textformat:](https://texwelt.de/wissen/fragen/569#Textdateien)</a> ---------------------------------- 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`][8], 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](#Literatur) 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. <a name="Binaerdateien">[Zusätzliche Dateien im Binärformat:](https://texwelt.de/wissen/fragen/569#Binaerdateien)</a> ----------------------------------- 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 <a href="ergaenzend">*»Ergänzende Maßnahmen«*</a> angegeben vorzugehen. Bleiben dann dennoch solche Dateien übrig, so sind diese als Archiv zusammen zu packen und via Link dauerhaft zum Download anzubieten. <a name="vollstaendig">[Wie kann ich sicher stellen, dass mein Beispiel vollständig ist?](https://texwelt.de/wissen/fragen/569#vollstaendig)</a> ================================================================ 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. <a name="ausserdem">[Worauf sollte ich abschließend unbedingt noch achten?](https://texwelt.de/wissen/fragen/569#ausserdem)</a> ===================================================== * <a name="Paketquelle">[Quelle für spezielle Klassen und Pakete angeben!](https://texwelt.de/wissen/fragen/569#Paketquelle)</a> Wenn man das *VM* dann als [Code-Block][9] 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][10] 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. * <a name="Klasse_minimal">[Klasse `minimal` ist nicht für Minimalbeispiele gedacht!](https://texwelt.de/wissen/fragen/569#Klasse_minimal)</a> 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. * <a name="Klasse_standalone">[Klasse `standalone` ist nicht für Minimalbeispiele gedacht!](https://texwelt.de/wissen/fragen/569#Klasse_standalone)</a> Es sei an dieser Stelle auch darauf hingewiesen, dass [`standalone`](https://ctan.org/pkg/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.* * <a name="TeX-Engine">[Programme angeben!](https://texwelt.de/wissen/fragen/569#TeX-Engine)</a> 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. * <a name="Fehlermeldungen">[Fehlermeldungen im Original zitieren!](https://texwelt.de/wissen/fragen/569#Fehlermeldungen)</a> 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][11]. 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. * <a name="AlleAngaben">[Alle Informationen gehören in die Frage selbst!](https://texwelt.de/wissen/fragen/569#AlleAngaben)</a> 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. * <a name="NichtSchummeln">[Nichts verändern!](https://texwelt.de/wissen/fragen/569#NichtSchummeln)</a> 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!* * <a name="AusfuehrungTesten">[Ausführung testen!](https://texwelt.de/wissen/fragen/569#AusfuehrungTesten)</a> [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](https://texwelt.de/fragen/27509) 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. [1]: https://texwelt.de/wissen/fragen/frage-stellen/ "Stelle eine Frage auf TeXwelt" [2]: http://daringfireball.net/projects/markdown/syntax#precode "Code-Blocks in Markdown-Syntax" [3]: http://daringfireball.net/projects/markdown/syntax#precode "Code-Blocks in Markdown-Syntax" [4]: https://texwelt.de/wissen/upfiles/test_20190219_151959.png [5]: https://www.ctan.org/pkg/blindtext "Paket für die Erstellung von Dokumenten mit Dummy-Inhalt" [6]: https://www.ctan.org/pkg/lipsum "Paket für die Erzeugung von Dummy-Absätzen" [7]: https://www.ctan.org/pkg/selinput "Eingabecodierung unabhängig von Editoreinstellungen festlegen" [8]: https://www.ctan.org/pkg/fix-cm [9]: http://daringfireball.net/projects/markdown/syntax#precode "Code-Blocks in Markdown-Syntax" [10]: https://www.ctan.org/search?ext=true&PKG=on&max=256 "Suche auf CTAN" [11]: http://daringfireball.net/projects/markdown/syntax#precode "Code-Blocks in Markdown-Syntax"
Klicke auf Einblenden/Ausblenden von Überarbeitungen 42
kleine Korrekturen

23 Mär '21, 09:09

stefan's gravatar image

stefan
18.4k163148

<a name="Was">[Was ist ein vollständiges Minimalbeispiel?](https://texwelt.de/wissen/fragen/569#Was)</a> ========================================== **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](https://texwelt.de/wissen/fragen/569#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. <a name="Wieso">[Was ist der Sinn eines vollständigen Minimalbeispiels?](https://texwelt.de/wissen/fragen/569#Wieso)</a> ====================================================== 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][1] und dabei auch das erzeugte *VM* als [Code-Block][2] mit angeben. Hier auf TeXwelt funktioniert die Markierung als [Code-Block][3] übrigens ganz einfach, indem man den Code mit der Maus selektiert und dann entweder in der Toolbar auf ![101/010][4] klickt oder auf der Tastatur `Strg+k` drückt. In anderen Foren, beispielsweise auf [goLaTeX](https://golatex.de), 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](https://texwelt.de/fragen/27509). Für korrekt markierte Codeschnipsel funktioniert das dagegen nur eingeschränkt. Für nicht korrekt markierten Code funktioniert es gar nicht. <a name="minimal">[Wie kann ich sicher stellen, dass mein Beispiel minimal ist?](https://texwelt.de/wissen/fragen/569#minimal)</a> ============================================================ 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. <a name="Wie">[Halbierungssuche](https://texwelt.de/wissen/fragen/569#Wie):</a> ----------------- 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`][5] oder [`lipsum`][6] 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`](https://ctan.org/pkg/selinput) an, damit für die lokale Kopie die zusätzliche Hürde der [Umcodierung](https://texwelt.de/wissen/fragen/2656) 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. <a name="ergaenzend">[Ergänzende Maßnahmen](https://texwelt.de/wissen/fragen/569#ergaenzend):</a> --------------------- Sobald man nur noch die Teile hat, die für das Problem zuständig sind, sollte man nach Möglichkeit: * <a name="input">[`\input`- und `\include`-Anweisungen eliminieren](https://texwelt.de/wissen/fragen/569#input):</a> 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. * <a name="Bilder">[Grafikdateien überflüssig machen](https://texwelt.de/wissen/fragen/569#Bilder):</a> 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`](https://www.ctan.org/pkg/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. * <a name="Literatur">[Literaturdatenbank überflüssig machen](https://texwelt.de/wissen/fragen/569#Literatur):</a> 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](https://texwelt.de/wissen/fragen/3461) 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](https://texwelt.de/wissen/fragen/569#Textdateien). 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. * <a name="Version">[Klassen- und Paketversionen ermitteln](https://texwelt.de/wissen/fragen/569#Version):</a> 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} &emsp;&ensp;zwar kein Dokument (also PDF- oder DVI-Datei) aber in der Log-Datei dennoch die Ausgabe: &emsp;&ensp;<pre>`*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) ***********`</pre> <a name="Alternative">[Alternatives Vorgehen:](https://texwelt.de/wissen/fragen/569#Alternative)</a> ---------------------- 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. <a name="Dateien">[Vollständige Minimalbeispiele aus mehreren Dateien](https://texwelt.de/wissen/fragen/569#Dateien)</a> ================================================== 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. <a name="Textdateien">[Zusätzliche Dateien im Textformat:](https://texwelt.de/wissen/fragen/569#Textdateien)</a> ---------------------------------- 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 \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 \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`][8], 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](#Literatur) 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. <a name="Binaerdateien">[Zusätzliche Dateien im Binärformat:](https://texwelt.de/wissen/fragen/569#Binaerdateien)</a> ----------------------------------- 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 <a href="ergaenzend">*»Ergänzende Maßnahmen«*</a> angegeben vorzugehen. Bleiben dann dennoch solche Dateien übrig, so sind diese als Archiv zusammen zu packen und via Link dauerhaft zum Download anzubieten. <a name="vollstaendig">[Wie kann ich sicher stellen, dass mein Beispiel vollständig ist?](https://texwelt.de/wissen/fragen/569#vollstaendig)</a> ================================================================ 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. <a name="ausserdem">[Worauf sollte ich abschließend unbedingt noch achten?](https://texwelt.de/wissen/fragen/569#ausserdem)</a> ===================================================== * <a name="Paketquelle">[Quelle für spezielle Klassen und Pakete angeben!](https://texwelt.de/wissen/fragen/569#Paketquelle)</a> Wenn man das *VM* dann als [Code-Block][9] 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][10] 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. * <a name="Klasse_minimal">[Klasse `minimal` ist nicht für Minimalbeispiele gedacht!](https://texwelt.de/wissen/fragen/569#Klasse_minimal)</a> 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. * <a name="Klasse_standalone">[Klasse `standalone` ist nicht für Minimalbeispiele gedacht!](https://texwelt.de/wissen/fragen/569#Klasse_standalone)</a> Es sei an dieser Stelle auch darauf hingewiesen, dass [`standalone`](https://ctan.org/pkg/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.* * <a name="TeX-Engine">[Programme angeben!](https://texwelt.de/wissen/fragen/569#TeX-Engine)</a> 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. * <a name="Fehlermeldungen">[Fehlermeldungen im Original zitieren!](https://texwelt.de/wissen/fragen/569#Fehlermeldungen)</a> 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][11]. 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. * <a name="AlleAngaben">[Alle Informationen gehören in die Frage selbst!](https://texwelt.de/wissen/fragen/569#AlleAngaben)</a> 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. * <a name="NichtSchummeln">[Nichts verändern!](https://texwelt.de/wissen/fragen/569#NichtSchummeln)</a> 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!* * <a name="AusfuehrungTesten">[Ausführung testen!](https://texwelt.de/wissen/fragen/569#AusfuehrungTesten)</a> [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](https://texwelt.de/fragen/27509) 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. [1]: https://texwelt.de/wissen/fragen/frage-stellen/ "Stelle eine Frage auf TeXwelt" [2]: http://daringfireball.net/projects/markdown/syntax#precode "Code-Blocks in Markdown-Syntax" [3]: http://daringfireball.net/projects/markdown/syntax#precode "Code-Blocks in Markdown-Syntax" [4]: https://texwelt.de/wissen/upfiles/test_20190219_151959.png [5]: https://www.ctan.org/pkg/blindtext "Paket für die Erstellung von Dokumenten mit Dummy-Inhalt" [6]: https://www.ctan.org/pkg/lipsum "Paket für die Erzeugung von Dummy-Absätzen" [7]: https://www.ctan.org/pkg/selinput "Eingabecodierung unabhängig von Editoreinstellungen festlegen" [8]: https://www.ctan.org/pkg/fix-cm [9]: http://daringfireball.net/projects/markdown/syntax#precode "Code-Blocks in Markdown-Syntax" [10]: https://www.ctan.org/search?ext=true&PKG=on&max=256 "Suche auf CTAN" [11]: http://daringfireball.net/projects/markdown/syntax#precode "Code-Blocks in Markdown-Syntax"
Klicke auf Einblenden/Ausblenden von Überarbeitungen 41
Hinweis auf die Ausführungsmöglichkeit von Code ergänzt

18 Mär '21, 10:17

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 40
Worauf man achten sollte besser gegliedert

17 Feb '21, 09:28

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 39
und nochmal die Reproduzierbarkeit erwähnt

14 Sep '20, 17:48

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 38
Hinweis zu standalone ergänzt

14 Sep '20, 17:46

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 37
Vollständigkeitskriterium erweitert

14 Sep '20, 17:34

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 36
kleine Ergänzung bezuüglich der Hilfsdateien

25 Feb '20, 10:25

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 35
auch Overleaf braucht kein inputenc mehr

06 Dez '19, 14:55

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 34

06 Dez '19, 14:50

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 33
Anpassung an LaTeX 2019-10-01

06 Dez '19, 12:20

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 32
Passage zu inputenc/selinput geändert

20 Feb '19, 09:03

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 31
ein Link mehr + http: durch https: ersetzt

20 Feb '19, 08:43

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 30
Code-Markierung für TeXwelt und goLaTeX erklärt

19 Feb '19, 15:52

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 29
kleine Ergänzung am Ende eingefügt

19 Jun '18, 08:35

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 28
kleiner Hinweis bezüglich der Klasse minimal

07 Mär '17, 08:13

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 27

19 Mai '16, 17:27

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 26

17 Mai '16, 11:15

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 25

17 Mai '16, 11:05

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 24
Verwendung von biblatex-examples.bib

17 Mai '16, 10:54

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 23

04 Jan '16, 13:09

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 22

04 Jan '16, 13:08

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 21
Und noch einmal

04 Jan '16, 13:07

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 20
Und noch einmal

04 Jan '16, 13:03

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 19
Mal wieder Unterschiede in Vorschau und Ergebnis ausgleichen

04 Jan '16, 13:01

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 18

04 Jan '16, 13:00

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 17
Einrückung bei Version

04 Jan '16, 12:58

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 16
Rekursive Links

04 Jan '16, 12:56

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 15

04 Jan '16, 12:48

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 14
Rekursiver Link Test

04 Jan '16, 12:45

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 13
Links

03 Jan '16, 12:04

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 12

18 Aug '15, 11:17

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 11

18 Aug '14, 22:45

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 10

18 Aug '14, 22:44

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 9
`mwe` aufgenommen

18 Aug '14, 22:40

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 8
Hauptsächlich Tippfehler

27 Aug '13, 09:57

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 7

03 Jul '13, 11:40

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 6

03 Jul '13, 11:39

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 5
\listfiles und Paket filecontents

03 Jul '13, 11:39

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 4

02 Jul '13, 13:16

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 3

02 Jul '13, 13:14

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

02 Jul '13, 12:02

saputello's gravatar image

saputello
11.1k174365

Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

02 Jul '13, 12:01

saputello's gravatar image

saputello
11.1k174365

Willkommen, erstes Mal hier? Schau mal unter FAQ!

×