使用預編譯的前導碼外部化 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

當我編譯 Test.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

相關內容