我正在使用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}
,由于新定义的依赖关系,gnuplot
在tex
编译时会导致系统调用。.gnu
文件和.tex
文件现在是正常依赖关系,gnuplot
除非更改时间戳,否则不会重新编译。
值得注意的是,只要系统调用是由 引起的,文件set output "path/gnuplot_output.tex"
中指定的路径.gnu
就是相对于文件的。tex root
gnuplot
latexmk
答案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-escape
D:/gnuplot/bin