Externalisierung von Tikz mit vorkompilierter Präambel

Externalisierung von Tikz mit vorkompilierter Präambel

Ich schätze, das ist ein ganz spezieller Fall, aber es ist genau das, was ich brauche:

%&Testing
\documentclass{article}
\endofdump
\usepackage{pgfplots}
\usetikzlibrary{external}
\tikzexternalize
\begin{document}
    \begin{tikzpicture}
    \begin{axis}[xlabel=x axis label,ylabel=y axis label]
    \addplot {x};
    \end{axis}
    \end{tikzpicture}
\end{document}

Ich möchte tikz ein- oder ausschalten können, ohne die Präambel neu kompilieren zu müssen, daher \endofdump. Ich habe den Header mit MiKTeX erstellt und

etex -job-name=Testing -initialize "&pdflatex" mylatexformat.ltx Testing.tex

Wenn ich dann Testing.tex kompiliere, erhalte ich diese Fehlermeldung:

! Package tikz Error: Sorry, the system call 'pdflatex -shell-escape -halt-on-e
rror -interaction=batchmode -jobname "Testing-figure0" "\def\tikzexternalrealjo
b{Testing}\input{Testing}"' did NOT result in a usable output file 'Testing-fig
ure0' (expected one of .pdf:.jpg:.jpeg:.png:).

Beim Überprüfen der entsprechenden Protokolldatei ( Testing-figure0.log) finde ich Folgendes:

! Undefined control sequence.
<recently read> \endofdump 

l.3 \endofdump

Ich habe mich gefragt, wie ich das beheben könnte. Es scheint, dass der externalisierte Tikz-Job die Präambel eingibt, aber nicht das benutzerdefinierte Format verwendet. Daher kann er \endofdump nicht verstehen.

Ich habe festgestellt, dass dies funktioniert (möglicherweise ist dies bereits die Antwort).

%&Testing
\documentclass{article}
\ifcsname tikzexternalrealjob\endcsname\else\endofdump\fi
\usepackage{pgfplots}
\usetikzlibrary{external}
\tikzexternalize
\begin{document}
    \begin{tikzpicture}
    \begin{axis}[xlabel=x axis label,ylabel=y axis label]
    \addplot {x};
    \end{axis}
    \end{tikzpicture}
\end{document}

Gibt es eine bessere Möglichkeit, dies zu tun?

Antwort1

Sie können das Makro, das den externen pdflatex-Aufruf enthält, so ändern, dass es stattdessen

etex '&mylatexformat'

Ich brauchte die folgende Befehlszeile, um das Format zu erstellen

etex --job-name=testing --ini "&pdflatex" mylatexformat.ltx testing.tex

Sobald das Format erstellt ist, fügen Sie Folgendes hinzu, damit Tikz Externalize es verwenden kann

\def\zzz#1 #2\relax{%
\expandafter\def\csname pgfk@/tikz/external/system call\endcsname{etex '&mylatexformat' #2}%
}

\expandafter\expandafter\expandafter\zzz\csname pgfk@/tikz/external/system call\endcsname\relax

also das läuft ohne fehler

%&Testing
\documentclass{article}
\endofdump
\usepackage{pgfplots}
\usetikzlibrary{external}
\def\zzz#1 #2\relax{%
\expandafter\def\csname pgfk@/tikz/external/system call\endcsname{etex '&mylatexformat' #2}%
}

\expandafter\expandafter\expandafter\zzz\csname pgfk@/tikz/external/system call\endcsname\relax
\begin{document}

    \begin{tikzpicture}
    \begin{axis}[xlabel=x axis label,ylabel=y axis label]
    \addplot {x};
    \end{axis}
    \end{tikzpicture}
\end{document}

Antwort2

Was ist mit dem Generikum \ifdefined\endofdump\endofdump\else\fi?

verwandte Informationen