Externalización de tikz con preámbulo precompilado

Externalización de tikz con preámbulo precompilado

Supongo que este es un caso muy especial, pero es lo que necesito:

%&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}

Quiero poder activar o desactivar tikz sin tener que volver a compilar el preámbulo, de ahí el archivo \endofdump. Creé el encabezado usando MiKTeX y

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

Cuando compilo Testing.tex, aparece este mensaje de error:

! 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:).

Revisando el archivo de registro respectivo ( Testing-figure0.log), encuentro esto:

! Undefined control sequence.
<recently read> \endofdump 

l.3 \endofdump

Me preguntaba cómo podría solucionar esto. Parece que el trabajo tikz externalizado ingresa el preámbulo, pero no usa el formato personalizado. Por lo tanto, no puede entender \endofdump.

Descubrí que esto funciona (puede que esta ya sea la respuesta).

%&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}

¿Hay una mejor manera de hacer esto?

Respuesta1

Puede cambiar la macro que contiene la llamada externa de pdflatex para llamar en su lugar

etex '&mylatexformat'

Necesitaba la siguiente línea de comando para hacer el formato.

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

Una vez realizado el formato, agregue lo siguiente para que tikz externalize lo use.

\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

entonces esto se ejecuta sin errores

%&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}

Respuesta2

¿Qué pasa con el genérico \ifdefined\endofdump\endofdump\else\fi?

información relacionada