我想对 tikz 图片使用 externalize 选项以节省编译时间。因为需要 psfrag,所以我想通过 latex 进行编译,即 dvi-->ps-->pdf。
我使用 texStudio。我的 Latex 规格是 MikTex 2.9,我使用 Windows 7(真丢脸),我的 latex 命令行显示
latex.exe -src -synctex=1 -interaction=nonstopmode -shell-escape %.tex
我的最小示例可以工作,但是到目前为止所获得的结果还存在一些问题。
我想包含图形 - 为简单起见,在此 MWE 中包括一个圆圈。最初,mySphere1 和 mySphere2 包含在两个单独的文件中,它们的内容相同,但名称不同。
由于某种原因,在原始问题中,当我从文件中包含 mySphere2 时,相应的图形没有显示在结果中,但其标题却显示出来 - 我没有收到任何编译错误消息。
第二个问题是:为什么每个图都占据一个新页面? 有什么解决方法吗?
\documentclass{article}
\usepackage[english]{babel}
\usepackage{pgfplots}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\usetikzlibrary{shapes.geometric}
\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}
This is a simple test.
\begin{figure}[h!]
\centering
\newlength\figureheight % define length \figureheight
\newlength\figurewidth % define length \figurewidth
\setlength\figureheight{6cm} % set \figureheight
\setlength\figurewidth{6cm} % set \figurewidth
\tikzsetnextfilename{mySphere1}
\begin{tikzpicture}
\draw[blue] (0,0) circle [radius=1];
\end{tikzpicture}
\end{figure}
Next page
\begin{figure}[h!]
\centering
\newlength\figuregheight % define length \figureheight
\newlength\figuregwidth % define length \figurewidth
\setlength\figuregheight{6cm} % set \figureheight
\setlength\figuregwidth{6cm} % set \figurewidth
\tikzsetnextfilename{mySphere2}
\begin{tikzpicture}
\draw[blue] (0,0) circle [radius=1];
\end{tikzpicture}
\end{figure}
And now for something completely different: a sawtooth.
\begin{figure}[!htb]
\centering
\tikzsetnextfilename{force1}
\begin{tikzpicture}
\draw[blue] (0,0) circle [radius=1];
\end{tikzpicture}
\caption{y-direction}
\end{figure}
The sawtooth.
\begin{figure}[!htb]
\centering
\tikzsetnextfilename{force2}
\begin{tikzpicture}
\draw[blue] (0,0) circle [radius=1];
\end{tikzpicture}
\caption{x-direction}
\end{figure}
\end{document}
答案1
我认为您需要更新您的 MikTeX 版本。
我在使用 TeXstudio 和 MikTex 2.9.4xxx 时也遇到了类似的问题。升级到最新版本 (2.9.5840) 解决了我的问题。我刚刚尝试编译您的 tex 文件(使用最新的 MikTex),它对我来说有效。
答案2
使用以下命令调用示例
pdflatex -shell-escape --extra-mem-bot=10000000 --synctex=1 %A%.Tex
更换你的线路
\tikzset{external/system call={latex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource" & dvips -o "\image".ps "\image".dvi}}
到
\tikzset{external/system call={pdflatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}}
您的外部呼叫似乎是错误的(对我来说)。
通过这种方式进行编译,我就可以毫无错误地进行编译。