今天我在 pgfmanual 的 Section 下找到了50.4.4 定制外部化您可以在外部化过程中使用多核支持模式 list and make
。
% step 1: generate main.makefile:
pdflatex main
% step 2: generate ALL graphics on 2 processors:
make -j 2 main.makefile
% step 3: include the graphics:
pdflatex main
我正在使用 Windows 7 和 MiKTeX。由于我从未使用过,所以make
我从这里下载了它:http://www.gnu.org/software/make/。然后我使用了这个 MWE (main.tex):
\documentclass{article}
\usepackage{tikz,pgfplots}
\usetikzlibrary{external}
% Important
\tikzexternalize[mode=list and make]
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot coordinates {(0,0) (1,1) (4,4)};
\end{axis}
\end{tikzpicture}
\end{document}
因此我使用了一个批处理文件,就像 pgfmanual 所说的那样:
% step 1: generate main.makefile:
pdflatex main
% step 2: generate ALL graphics on 2 processors:
make -j 2 main.makefile
% step 3: include the graphics:
pdflatex main
但它不起作用。我在执行此make -j 2 main.makefile
部分时收到一条消息:
make: Nothing to be done for 'main.makefile'
make -f main.makefile
然后我按照第一次建议的方式使用pdflatex main
,得到以下结果:
process_begin: CreateProcess(NULL, cat main.figlist, ...) failed.
process_begin: CreateProcess(NULL, cat main.figlist, ...) failed.
以下是制作部分的屏幕截图:
make 文件如下所示:
ALL_FIGURE_NAMES=$(shell cat main.figlist)
ALL_FIGURES=$(ALL_FIGURE_NAMES:%=%.pdf)
allimages: $(ALL_FIGURES)
@echo All images exist now. Use make -B to re-generate them.
FORCEREMAKE:
include $(ALL_FIGURE_NAMES:%=%.dep)
%.dep:
mkdir -p $(dir $@)
touch $@ # will be filled later.
main-figure0.pdf:
pdflatex -halt-on-error -interaction=batchmode -jobname "main-figure0" "\def\tikzexternalrealjob{main}\input{main}"
main-figure0.pdf: main-figure0.md5
main-figure0.pdf
不是被生成——而是main-figure0.md5
被生成了。
更新(Christian 的回答)
我尝试了您的建议(ALL_FIGURE_NAMES=main-figure0
)并替换了 makefile 中的代码,但它仍然不起作用。
我投票关闭了这个问题。看来只有我有这个问题。谢谢你的帮助!
答案1
这实际上是 pgf 手册中的一个拼写错误:
你需要-f
选择,即它必须是
% step 1: generate main.makefile:
pdflatex main
% step 2: generate ALL graphics on 2 processors:
make -j 2 -f main.makefile
% step 3: include the graphics:
pdflatex main
这个问题不久前已经得到修正,并将成为下一个 PGF 版本的一部分。
关于“CreateProcess 失败”造成的问题:
- 您可以尝试安装 cygwin 并从 cygwin 内部调用 make。难度:中等(除非您熟悉 linux shell)
您可以将 makefile 复制到其他名称并手动修改。为此,替换
ALL_FIGURE_NAMES=$(shell cat main.figlist)
经过
ALL_FIGURE_NAMES=main-figure0 main-figure1 main-figure2
等等。文件列表应该类似于的内容main.figlist
。每当有新项目到达时,您都需要更新 makefile 的这个副本,但它应该可以工作。