Anzeige:
Ergebnis 1 bis 6 von 6

Thema: tikz externalization lib + vorkompilierte Präamble

  1. #1
    Registrierter Benutzer
    Registriert seit
    05.01.2008
    Beiträge
    7

    tikz externalization lib + vorkompilierte Präamble

    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

    Code:
    \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

    Code:
    %&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?
    Geändert von vtrabe (13-10-2010 um 09:24 Uhr)

  2. #2
    Registrierter Benutzer Avatar von bobmalaria
    Registriert seit
    28.11.2006
    Ort
    Düsseldorf
    Beiträge
    4.174
    hi,

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

    -enable-write18

    heißen?

    gruss
    Mein Ball ist umgefallen

  3. #3
    Registrierter Benutzer
    Registriert seit
    05.01.2008
    Beiträge
    7
    Wenn ich die Präamble nicht vorkompiliere, funktioniert die Externalisierung mit shell-escape unter Windows:

    Code:
    \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.

  4. #4
    Registrierter Benutzer
    Registriert seit
    05.01.2008
    Beiträge
    7
    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?

  5. #5
    Registrierter Benutzer
    Registriert seit
    23.07.2010
    Beiträge
    96
    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

  6. #6
    Registrierter Benutzer
    Registriert seit
    05.01.2008
    Beiträge
    7
    Hallo Christian,

    vielen Dank für Deine ausführliche Antwort.

    vtrabe

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •