我正在使用\write18
已启用(或--shell-escape
)的外部化来编译一堆PGFplots
。第一次运行需要很长时间,我注意到pdflatex
仅在一个 CPU 核心上运行。有没有办法使用pdflatex
多个核心?(至少在\write18
启用时)
答案1
tikzexternalize
中可以为每个生成单独的图片\begin{tikzpicture}...\end{tikzpicture}
。
\usepgfplotslibrary{external}
让所有 pgf 图都在编译之外。
让 pdflatex 知道这些图片是用制作。
\tikzexternalize[mode=list and make]
让 tikz 知道我们会使用make
。因为目前只有make
支持多线程。
我懒得为每个 pgfplots 图形设置名称,所以我让系统完成。
external/system call
为单个图片文件设置名称,否则 pdflatex 不知道应该设置什么文件名。(原始代码来自 tikz&pgf 包手册 2.10 版第 345 页。)
我的 tex 文件名为test.tex
\documentclass{standalone}
\usepackage{pgfplots} %use tikz based pgfplots
\usepgfplotslibrary{external}
\tikzexternalize[mode=list and make]
\tikzset{external/system call={pdflatex \tikzexternalcheckshellescape
-halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}
} % to let pdflatex work
%% compile picture: pdflatex --shell-escape xxxxxxx.tex
\begin{document}
\begin{tikzpicture}
\begin{axis}[ xlabel=$x$, ylabel={$f(x) = x^2 - x +4$} ]
\addplot {x^2 - x +4};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{loglogaxis}[xlabel=Cost,ylabel=Gain]
\addplot[color=red,mark=x] coordinates
{ (10,100) (20,150) (40,225) (80,340) (160,510) (320,765) (640,1150) };
\end{loglogaxis}
\end{tikzpicture}
\end{document}
第一次编译后pdflatex
,执行make -j 4 -f test.makefile
。
4
使用 4 个线程编译图片。
然后跑pdflatex
第二次。
该选项--shell-escape
在我的系统中也能正常工作。
我的系统是:
- Win 7(x64) + Miktex 2.9 + cygwin环境下的make
- Linux(x64)+Texlive2013+make