我尝试使用 pgfplot 的外部化功能,因为我有很多大型图,我不想每次排版论文时都重新生成它们。我的论文的其他部分需要通过 latex > ps > pdf 进行编译(即“latex”后跟“dvips”后跟“ps2pdf”),所以我尝试坚持这样做。不幸的是,我无法让外部化正常工作。这是我的最小示例,我按照 pgfplots 手册中有关获取 .eps 输出的说明(第 240 页)制作了该示例。
\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{pgfplots.groupplots}
\usepgfplotslibrary{external}
\tikzexternalize[shell escape=-enable-write18]
\tikzset{external/system call={latex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource" & dvips -o "\image".ps "\image".dvi}}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel=x,ylabel=y]
\addplot[] coordinates{(0,0) (1,2)};
\end{axis}
\end{tikzpicture}
\end{document}
当我进行编译时,图形的外部 .dvi 和 .ps 文件成功生成,并且没有错误,但实际编译的文档 .pdf 中没有该图形。pgfplots 手册建议我获取 .eps 输出,但这并没有发生(也许这就是问题所在?)。有人能告诉我我做错了什么吗?
答案1
看起来你在这一\tikzset
行中犯了两个拼写错误;将其更改为:
\tikzset{external/system call={latex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource" && dvips -o "\image".eps "\image".dvi}}
将使 shell 命令从每个 .dvi 文件生成一个 .eps 文件后运行latex
命令来创建该 .dvi 文件。(我将.ps
文件中的 替换为.eps
,将&
替换为&&
。有趣的是,&
似乎可以在 MiKTeX 中异步调用 latex;我想知道它为什么这样做?我认为它不cmd.exe
支持这一点,尽管它确实支持&&
。)
但不幸的是,这些似乎都无济于事:虽然我最终得到了包含 .eps 内容的整个文档的 postscript 文件,但它似乎并没有显示任何内容,尽管 .eps 文件本身可以很好地呈现,而且我也没有收到任何有关它的错误消息:-(
。
答案2
人们通常会忘记正确激活不受限制的 shell 逃逸:
latex -shell-escape foo.tex