In folgendem Minimalbeispiel bricht {pdf,lua,xe}latex mit der Fehlermeldung undefined control sequence ab, es wird das a markiert. Bei einer leeren Umgebung tritt der Fehler ebenfalls auf. Gleichzeitig spuckt dottex eine Warnung aus, dass kein Shell-Escape aktiviert sei.

Open in writeLaTeX
% arara: pdflatex: {shell: yes}
\documentclass{minimal}

\usepackage{dottex}

\begin{document}
\begin{dotpic}
a -> b;
\end{dotpic}
\end{document}

gefragt 03 Sep '14, 16:54

NobbZ's gravatar image

NobbZ
33721017
Akzeptiert-Rate: 40%

Seltsamerweise spuckt writeLaTeX noch wieder ganz andere Fehler aus. Ich muss mich wohl damit abfinden, dass dottex nach 7 Jahren einfach nicht mehr funktioniert und die Graphen weiterhin per Hand erstellen und einbauen.

(03 Sep '14, 16:58) NobbZ

Der erste Fehler den ich erhalte ist die Aussage von ifpdf (Paket), dass der Test schon definiert ist. Und tatsächlich, das Paket dottex definiert selbst schon ifpdf und setzt es danach auf false. Erscheint mir seltsam.

(03 Sep '14, 17:09) Johannes

Ja, das bekomme ich bei WL, jedoch nicht zuhause. Aber wo wird ifpdf (das Paket!) eingebunden?

(03 Sep '14, 17:11) NobbZ

ifpdf wird von pdftexcmds geladen, was wiederrum in Code in den Untiefen von graphics.cfg geladen wird (in miktex übrigens nicht weil es eine ältere graphics.cfg hat, aber dennoch ist es von dottex ein Fehler selbst ifpdf zu definieren).

(03 Sep '14, 17:28) Ulrike Fischer

dottex ist tatsächlich in diverser Hinsicht inzwischen veraltet. So definiert es beispielsweise ein eigenes \ifpdf, lädt aber danach noch Pakete, die inzwischen auch zum Laden des Pakets ifpdf führen, das dann wegen des bereits definieren \ifpdf einen Fehler meldet. Das kann man eventuell mit scrlfile lösen.

Außerdem erwartet das Paket, dass irgend eines der von ihm geladenen Pakete den Ausgabe-Stream \verbatim@out definiert. AFAIR hat eine frühere Version von Paket verbatim diesen tatsächlich grundsätzlich definiert. Schon seit längerem wird er aber nur beim ersten \verbatimwrite angelegt, steht also nun nicht mehr generell zur Verfügung. Man kann das eventuell lösen, indem man \verbatim@out selbst anlegt.

Wenn dottex hingegen annimmt, dass -shell-escape nicht aktiviert ist, dann liegt das meist daran, dass es unter Windows ohne Option miktex verwendet wird. Das Paket kann nämlich auch nicht selbst erkennen, ob es einen Unix-Unterbau mit Unix-Shell-Befehlen oder cmd-Syntax für Windows verwenden muss. Daher hat es eine Option miktex, mit der von Unix- auf Windows-Syntax und -Befehle umgeschaltet wird. Dass es neben MiKTEX auch noch TeX Live für Windows gibt, ist dem Paket unbekannt. Man muss daher auch mit TeX Live unter Windows Option miktex setzen. Das löst aber nur dieses eine Problem. Besonders ungeschickt daran ist IMHO, dass die Unterscheidung zwischen Windows- und Unix-Unterbau wohl ohnehin nur für den Test, ob shell-escape aktiviert wurde oder nicht, benötigt wird.

Bei mir unter Linux funktioniert:

Open in writeLaTeX
% arara: pdflatex: {shell: yes}
\documentclass{article}

\usepackage{scrlfile}
\BeforePackage{ifpdf}{\let\ifpdf\relax}
\makeatletter
\newwrite\verbatim@out
\makeatother
\usepackage{dottex}

\begin{document}
\begin{dotpic}
a -> b;
\end{dotpic}
\end{document}

Unter Windows muss man vermutlich

Open in writeLaTeX
% arara: pdflatex: {shell: yes}
\documentclass{article}

\usepackage{scrlfile}
\BeforePackage{ifpdf}{\let\ifpdf\relax}
\makeatletter
\newwrite\verbatim@out
\makeatother
\usepackage[miktex]{dottex}

\begin{document}
\begin{dotpic}
a -> b;
\end{dotpic}
\end{document}

verwenden und zwar unabhängig von der verwendeten TeX-Distribution.

Mit dem Paket ifplatform sollte es möglich sein, die Unterscheidung zu automatisieren:

Open in writeLaTeX
% arara: pdflatex: {shell: yes}
\documentclass{article}

\usepackage{scrlfile}
\BeforePackage{ifpdf}{\let\ifpdf\relax}
\makeatletter
\newwrite\verbatim@out
\makeatother
\usepackage{ifplatform}
\ifwindows
  \usepackage[miktex]{dottex}
\else
  \usepackage{dottex}
\fi

\begin{document}
\begin{dotpic}
a -> b;
\end{dotpic}
\end{document}

Was ich allerdings derzeit nicht mit MiKTeX oder TeX Live unter Windows oder OS X testen kann. Unter Linux funktioniert es bei mir.

All das ist sind jedoch nur Hacks und Workarounds für Bugs im Paket, die an den Autor gemeldet und von diesem beseitigt gehören. Ob dieser noch aktiv und über die angegebenen Adressen oder de.comp.text.tex erreichbar ist, kann ich nicht sagen.

Als Alternative zu dottex steht übrigens graphviz bereit, mit dem man auch halbwegs komplexe Graphen wie den folgenden erstellen kann:

Open in writeLaTeX
% arara: pdflatex: {shell: yes}
\documentclass{minimal}

\usepackage{minted}
\usepackage[pdf]{graphviz}

\begin{document}
\digraph[height=\textheight-2in]{process}{
    /* PROGRAMS */
    latex1 [label="latex -shell-escape x.tex", shape=hexagon, fontname=Courier];
    latex2 [label="latex x.tex", shape=hexagon, fontname=Courier];
    dvips [label="dvips -o x.ps x.dvi", shape=hexagon, fontname=Courier];
    /* FILES */
    xTex [label="x.tex", fontname=Helvetica, shape=ellipse];
    xDvi [label="x.dvi", fontname=Helvetica, shape=ellipse];
    xPS [label="x.ps", fontname=Helvetica, shape=ellipse];
    subgraph cluster0 {
        label="graphviz.sty magic";
        dot [label="dot -Tps -o a.ps a.dot", shape=hexagon, fontname=Courier];
        gvpr [label="gvpr master.graphviz", shape=hexagon, fontname=Courier];
        aPS [label="a.ps", fontname=Helvetica, shape=ellipse];
        sed [label="sed s/xshow/pop show/g a.ps", shape=hexagon, fontname=Courier];
        aDot [label="a.dot", fontname=Helvetica, shape=ellipse];
        master [label="master.graphviz", fontname=Helvetica, shape=ellipse];
    };
    /* COMMON EDGES */
    xTex -> latex1;
    xTex -> latex2;
    latex2 -> xDvi;
    xDvi -> dvips;
    dvips -> xPS;
    latex1 -> master [style=dotted, label=singlefile];
    latex1 -> aDot [style=dotted, label="multiple files"];
    master -> gvpr;
    gvpr -> aDot;
    aDot -> dot;
    dot -> aPS;
    aPS -> sed;
    sed -> aPS;
    aPS -> dvips;
    aPS -> latex2;
}
\end{document}

Das Beispiel ist übrigens der Anleitung zum Paket entnommen und resultiert in:

Beispiel aus der graphviz-Anleitung

Für einfache Graphen kann auch das Paket lt3graph verwendet werden. Allerdings kenne ich mich mit beiden genannten Paketen selbst nicht weiter aus. Das trifft aber auch auf dottex zu.

Darüber hinaus sei noch einmal darauf hingewiesen, dass die Klasse minimal nicht als Klasse für vollständige Minimalbeispiele, sondern als minimale Klassen zum Testen des Ladens des LaTeX-Kerns gedacht ist. Bitte für vollständige Minimalbeispiele daher ggf. eine andere einfache Klasse wie article verwenden.

Permanenter link

beantwortet 03 Sep '14, 17:19

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 03 Sep '14, 20:08

Und damit wären wir bei dem nächsten Problem, ich muss das ganze Ding möglichst portabel halten. Das Dokument muss sich nachher bei mir und an der FH kompilieren lassen und ich weiß im Vorfeld nicht ob dazu Windows oder Linux genutzt wird. Bleibt mir wohl nichts anderes übrig als mich nach alternativen umzusehen.

(03 Sep '14, 17:23) NobbZ

@NobbZ: Auch dafür gibt es Lösungen (siehe meine Änderung) und min. eine auf den ersten Blick recht brauchbare Alternative habe ich genannt.

(03 Sep '14, 17:32) gast3

Ja, hast du, das Paket graphviz, welches aber für komplexe Graphen nur bedingt tauglich scheint :(

(03 Sep '14, 19:30) NobbZ

Habe jetzt dot2texi ausgegraben, setzt zwar ebenso wie dottex auf moreverb, scheint aber ansonsten etwas robuster und läuft nach dem Umbiegen der listing-Umgebung auch zusammen mit minted

(03 Sep '14, 19:47) NobbZ

@NobbZ: Ich weiß ja nicht, wie komplex die Graphen bei Dir sind. Ich finde aber den aus der graphviz-Anleitung, den ich in meiner Antwort als Beispiel abgekupfert habe, schon ansatzweise anspruchsvoll. Da es genau wie dottex auch dot bzw. neato verwendet und ausführt, denke ich nicht, dass es wesentlich weniger mächtig ist.

(03 Sep '14, 20:11) gast3
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:

×3
×3

gestellte Frage: 03 Sep '14, 16:54

Frage wurde gesehen: 7,887 Mal

zuletzt geändert: 03 Sep '14, 20:11