![使用预编译前言来外部化 tikz](https://linux22.com/image/328112/%E4%BD%BF%E7%94%A8%E9%A2%84%E7%BC%96%E8%AF%91%E5%89%8D%E8%A8%80%E6%9D%A5%E5%A4%96%E9%83%A8%E5%8C%96%20tikz.png)
我想这是一个非常特殊的情况,但这正是我所需要的:
%&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
?