使用 Latex 外部化 Tikz 图形

使用 Latex 外部化 Tikz 图形

我想对 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"}}

您的外部呼叫似乎是错误的(对我来说)。

通过这种方式进行编译,我就可以毫无错误地进行编译。

相关内容