LaTeX 中的 gnuplot,无需 gnuplottex

LaTeX 中的 gnuplot,无需 gnuplottex

我正在使用cairolatex终端gnuplot创建一些表面图(pgfplots 由于内存占用过大,任务失败)。随着图的数量增加,我想将gnuplot编译包含到我的tex编译中,以确保图是最新的。我偶然发现了这个gnuplottex包,它似乎可以处理这个任务,尽管它很慢。

我有一个大型嵌套文档。Tex root 是thesis.tex我在其中包含以下内容的地方theory.tex。在其中theory.tex我放入了

\begin{figure}[htbp]
    \centering
    \input{gnuplot/cascade}
    \input{figures/cascade}
\end{figure}

其中gnuplot/cascade.tex包含gnuplot代码

\begin{gnuplot}[terminal=cairolatex]
    set samp 100;
    set iso 40;
    set xrange [0:1];
    set yrange [0:1];
    set zrange [0.8:2];
    unset key;
    unset colorbox;
    set hidden3d front;
    a = 1;
    set xyplane at a;
    f(x,y) = (x+y)/(2*sqrt(x*y));
    set xlabel "$\\tau_I$";
    set ylabel "$\\tau_D$";
    set zlabel "$\\zeta$";
    set output "figures/cascade.tex"
    splot f(x,y) with pm3d at b, f(x,y) with lines;
    unset output
\end{gnuplot}

此设置的输出非常棒。但是,每当我更改 中的某些内容时theory.tex,整个gnuplottex例程都会重新编译。这需要相当长的时间,而且非常烦人。

为什么它latexmk不能识别代码gnuplot没有改变并保留它?可以指定这种依赖关系吗?在这种情况下,如何指定?

编辑:gnuplottex在我的系统上相当慢,尽管gnuplot确实很快。我怎样才能避免使用它gnuplottex,因为它的编译时间很长,从而避免gnuplottex 每次都重新编译?

答案1

gnuplottex我通过添加以下自定义依赖项来完全避免使用.latexmkrc

add_cus_dep('gnu','tex', 0, 'makegnu2tex');
    sub makegnu2tex {
    system("gnuplot \"$_[0].gnu\"") ;
    }

我的gnuplot文件使用cairolatex终端(或生成文件的任何其他终端.tex)。我的latex文档包含\input{gnuplot_output.tex},由于新定义的依赖关系,gnuplottex编译时会导致系统调用。.gnu文件和.tex文件现在是正常依赖关系,gnuplot除非更改时间戳,否则不会重新编译。

值得注意的是,只要系统调用是由 引起的,文件set output "path/gnuplot_output.tex"中指定的路径.gnu就是相对于文件的。tex rootgnuplotlatexmk

答案2

我当前的解决方案不使用gnuplottex是我之前发现的一个解决方案的修改版(如何在 LaTeX 中包含 SVG 图像) 用于包含 SVG(如有必要,会自动调用 Inkscape)。

\newcommand{\executeiffilenewer}[3]{%
    \ifnum\pdfstrcmp{\pdffilemoddate{#1}}%
    {\pdffilemoddate{#2}}>0%
    {\immediate\write18{#3}}\fi%
}
\newcommand{\includegp}[2]{%
    \executeiffilenewer{#1#2.gp}{tmp/img/#2.tex}%
    {gnuplot #1#2.gp}%
    \import{tmp/img/}{#2.tex}%
}

我的 gnuplot 文件位于子文件夹中,例如img/ch01/foo.gp,并且我喜欢将所有临时文件tmp/和所有临时图像文件都放在其中tmp/img/(因为我习惯于git跟踪我的 tex 文件,但不想跟踪任何派生文件,即 中的文件tmp/)。然后可以将 gnuplot 文件嵌入到文档中,如下所示:

\begin{figure}
    \centering
    \includegp{img/ch01/}{foo}
\end{figure}

miktex-pdftex.exe使用和选项TeXworks调用来使其工作。此外,包含 gnuplot 二进制文件的文件夹必须位于 PATH 变量中,或者在我的情况下,在 TeXworks 设置中设置(例如)。-aux-directory=tmp-shell-escapeD:/gnuplot/bin

相关内容