PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : tikz externalization lib + vorkompilierte Präamble



vtrabe
13-10-2010, 10:11
Hallo,

ich lese hier schon seit längerer Zeit passiv mit und konnte auf diesem Weg eine Reihe von Fragen klären. Für diese Hilfestellung vielen Dank.
Nun habe ich jedoch ein Problem, mit dem ich nicht allein weiterkomme. Ich benutze für das Übersetzen größerer Dokumente vorkompilierte Präambel-Dateien. Da ich meine Grafiken mit dem Paket PGF erzeuge, möchte ich zusätzlich die externalization library verwenden. Diese Kombination funktioniert bei mir jedoch nicht. Nachfolgend ein Beispiel:

Zunächst erzeuge ich die Datei preamble.fmt (vorkompilierte Präambel) aus der folgenden Datei preamble.tex



\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}

mit dem Befehl

pdflatex -ini -job-name="preamble" -output-format=pdf "&pdflatex preamble.tex\dump

Danach übersetze ich das folgende Hauptdokument main.tex



%&preamble
\tikzexternalize % nach Auskommentieren kein Fehler
\begin{document}
\begin{tikzpicture}
\node[draw] at (0,0) {Testnode};
\end{tikzpicture}
\end{document}

mit dem Befehl

pdflatex -shell-escape main.txt

Ich erhalte die folgende Fehlermeldung:



! Package tikz Error: Sorry, the system call 'pdflatex -halt-on-error -interaction=batchmode -jobname "main-figure0" "\def\tikzexternalrealjob{main}\input{main}"' did NOT result in a usable output file 'main-figure0' (expected one of .pdf:.jpg:.jpeg:.png:). Please verify that you have enabled system calls. For pdflatex, this is 'pdflatex -shell-escape'. Sometimes it is also named 'write 18' or something like that. Or maybe the command simply failed? Error messages can be found in 'main-figure0.log'. If you continue now, I'll try to typeset the picture.


Wenn ich die Anweisung \ tikzexternalize auskommentiere, läuft die Kompilierung fehlerfrei durch.

Ich benutze MiKTex 2.8 und die PGF-CVS-Version vom 28.09.2010.

Hat jemand eine Idee, wo der Fehler liegen könnte?

bobmalaria
13-10-2010, 11:46
hi,

täusche ich mich und shell-escape ist der linux befehl und in windows müsste es

-enable-write18

heißen?

gruss

vtrabe
13-10-2010, 13:00
Wenn ich die Präamble nicht vorkompiliere, funktioniert die Externalisierung mit shell-escape unter Windows:


\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize
\begin{document}
\begin{tikzpicture}
\node[draw] at (0,0) {Testnode};
\end{tikzpicture}
\end{document}

PS: Das Thumbs up Symbol wurde von mir irrtümlich aktiviert und hat nichts zu bedeuten.

vtrabe
14-10-2010, 21:12
Hallo,

ich habe das Beispiel jetzt nochmal mit TeX Live 2010 unter Linux ausgeführt und erhalte die gleiche Fehlermeldung wie unter Windows, wenn ich die Präambel separat vorkompiliere. Wenn die Präambel in main.tex steht, funktioniert die Externalisierung. Es kann also eigentlich nicht an dem shell-escape liegen. Das Kompilieren unter Windows mit -enable-write18 liefert das gleiche Bild (Fehler bei vorkompilierter Präambel, kein Fehler bei Präambel in main.tex). Der Befehl zum Übersetzen von main in meinem ersten Beitrag muss "pdflatex -shell-escape main.tex" lauten, nicht "...txt." (Tippfehler von mir).

Vielleicht hat ja doch noch jemand eine Idee, wo mein Fehler liegen könnte?

Feuersaenger
15-10-2010, 12:41
Hallo vtrabe,

ich habe Dein Beispiel bei mir reproduziert und konnte die Ursache finden.

Die External-lib braucht notwendig das "-jobname" argument. Dummerweise wird der Wert von -jobname in einem Makro gespeichert, und dieses Makro wird in Dein Formatfile ge\dump'ed. Wenn dann der system call versucht, mit mit '-jobname' irgendwas zu reissen, wird das schlicht und einfach ignoriert - und die Hauptfunktionalitaet von der external lib bricht zusammen.

Wie es aussieht, ist die Externalisierung mit dem Format-File-generieren zunaechst inkompatibel.

Vielleicht kann man das irgendwie anders loesen (z.B. den Wert in eine Datei schreiben und daraus lesen) - aber das fuehrt zu ner Menge Aenderungen, die womoeglich zwar mit den interfaces der External lib gehen, aber dennoch einiges an Aufmerksamkeit und einsicht erfordern.

Mit liebem Gruss

Christian

vtrabe
15-10-2010, 20:59
Hallo Christian,

vielen Dank für Deine ausführliche Antwort.

vtrabe