我正在使用外化TikZ(库)的功能external
,以加快我的 TikZ 图片的编译速度(如自动外部化 TikZ 图形的脚本)。
此外,我想通过预编译序言来加快编译速度。在http://magic.aladdin.cs.cmu.edu/2007/11/02/precompiled-preamble-for-latex/如何实现这一点。预编译头文件的命令是:
pdflatex -ini -job-name="main" "&pdflatex fmt.tex\dump"
其中fmt.tex
包含 documentclass 和 package 声明,并且随后通过第一行将标题插入到文件中
%&fmt
这两种方法本身都很好用,而且速度也不错。现在,我尝试同时应用这两种方法。编译时,我得到了以下错误消息:
! Package tikz Error: Sorry, the system call 'pdflatex -shell-escape -halt-on-e
rror -interaction=batchmode -jobname "figures/fmt-figure0" "\def\tikzexternalre
aljob{fmt}\input{fmt}"' did NOT result in a usable output file 'figures/fmt-fig
ure0' (expected one of .pdf:.jpg:.jpeg:.png:). Please verify that you have enab
led system calls. For pdflatex, this is 'pdflatex -shell-escape'. Sometimes it
is also named 'write 18' or something like that. Or maybe the command simply fa
iled? Error messages can be found in 'figures/fmt-figure0.log'. If you continue
now, I'll try to typeset the picture.
注意:我已经使用该选项进行编译-shell-escape
。此外,我还使用该选项预编译了标头。
最小工作(中断)示例:
fmt.tex - 标题
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize[prefix=figures/]
test.tex-主文件
%&fmt
\begin{document}
\begin{tikzpicture}
\node[draw, circle, minimum width=1cm] {};
\end{tikzpicture}
\end{document}
答案1
将\tikzexternalize
命令添加到动态的序言,一切都会好起来。
所以应该是:
fmt.tex - 标题
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
test.tex-主文件
%&fmt
\tikzexternalize[prefix=figures/]
\begin{document}
\begin{tikzpicture}
\node[draw, circle, minimum width=1cm] {};
\end{tikzpicture}
\end{document}
答案2
其他答案对我不起作用,因为我无法评论,所以我这样做了:我-fmt=yourfmtfile
在外部/系统调用选项中添加了一个选项。这是我的主文件的开头:
%&preamble
\usetikzlibrary{external}
\tikzset{external/system call={xelatex -fmt=preamble.fmt \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}}
\tikzexternalize
我正在使用 xelatex,但我猜测 pdflatex 也是一样的。
答案3
如果您需要在静态前导中调用 tikzexternalize(例如如果您有其他依赖于该宏),您可以执行以下操作之一:
以项目作业名称命名格式文件,方法是运行
pdflatex -ini -job-name="<yourJobNameHere>" "&pdflatex fmt.tex\dump"
或者如果您不想在每次创建新项目时都重新编译前言,那么只需在工作目录中创建一个名为的符号链接,
yourJobNameHere.fmt
链接到文件main.fmt
。在动态前导中添加以下命令:
\renewcommand{\tikzexternaljobname}{yourJobNameHere}
但是,根据您需要在预编译前言中写入的宏,第二种解决方案可能会导致问题。