pgf:在 Windows 上使用“list and make”进行“externalize”

pgf:在 Windows 上使用“list and make”进行“externalize”

今天我在 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 失败”造成的问题:

  1. 您可以尝试安装 cygwin 并从 cygwin 内部调用 make。难度:中等(除非您熟悉 linux shell)
  2. 您可以将 makefile 复制到其他名称并手动修改。为此,替换

    ALL_FIGURE_NAMES=$(shell cat main.figlist)

经过

ALL_FIGURE_NAMES=main-figure0 main-figure1 main-figure2

等等。文件列表应该类似于的内容main.figlist。每当有新项目到达时,您都需要更新 makefile 的这个副本,但它应该可以工作。

相关内容