プリコンパイルされたプリアンブルで tikz を外部化する

プリコンパイルされたプリアンブルで tikz を外部化する

これは非常に特殊なケースだと思いますが、私にはそれが必要なのです。

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

プリアンブルを再コンパイルせずにtikzのオン/オフを切り替えられるようにしたいので、\endofdumpを使用します。MiKTeXを使用してヘッダーを作成し、

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

その後、Testing.tex をコンパイルすると、次のエラー メッセージが表示されます。

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

それぞれのログファイル ( Testing-figure0.log) を確認すると、次のようになります。

! Undefined control sequence.
<recently read> \endofdump 

l.3 \endofdump

これをどう修正すればよいかと思いました。外部化された tikz ジョブはプリアンブルを入力しますが、カスタム形式を使用していないようです。したがって、\endofdump を理解できません。

これは機能することがわかりました(これがすでに答えである可能性があります)。

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

これを行うより良い方法はありますか?

答え1

外部pdflatex呼び出しを含むマクロを、代わりに呼び出すように変更できます。

etex '&mylatexformat'

フォーマットを作成するには次のコマンドラインが必要でした

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

フォーマットが作成されたら、次のコードを追加して、tikz externalize がそれを使用するようにします。

\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

これはエラーなしで実行されます

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

答え2

ジェネリックはどうですか\ifdefined\endofdump\endofdump\else\fi?

関連情報