Exteriorizando tikz com preâmbulo pré-compilado

Exteriorizando tikz com preâmbulo pré-compilado

Este é um caso muito especial, eu acho, mas é o que eu preciso:

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

Quero poder ativar ou desativar o tikz sem precisar recompilar o preâmbulo, daí o \endofdump. Eu criei o cabeçalho usando MiKTeX e

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

Quando compilo Testing.tex, recebo esta mensagem de erro:

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

Verificando o respectivo arquivo de log ( Testing-figure0.log), encontro o seguinte:

! Undefined control sequence.
<recently read> \endofdump 

l.3 \endofdump

Eu queria saber como eu poderia consertar isso. Parece que o trabalho tikz externalizado insere o preâmbulo, mas não usa o formato personalizado. Conseqüentemente, ele não consegue entender \endofdump.

Descobri que isso funciona (esta já pode ser a resposta).

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

Existe uma maneira melhor de fazer isso?

Responder1

Você pode alterar a macro que contém a chamada externa do pdflatex para chamar

etex '&mylatexformat'

Eu precisava da seguinte linha de comando para fazer o formato

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

uma vez feito o formato, adicione o seguinte para que o tikz externalize o 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

então isso funciona sem erros

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

Responder2

E o genérico \ifdefined\endofdump\endofdump\else\fi?

informação relacionada