gnuplot en LaTeX, sin gnuplottex

gnuplot en LaTeX, sin gnuplottex

Estoy usando la cairolatexterminal gnuplotpara crear algunos gráficos de superficie ( pgfplots está fallando en la tarea debido a su hambre de memoria). A medida que aumenta el número de gráficos, me gustaría incluir la gnuplotcompilación en mi texcompilación para garantizar que estén actualizados. Encontré el gnuplottexpaquete, que parece realizar la tarea, aunque es lento.

Tengo un documento grande y anidado. La raíz de Tex es thesis.texdonde incluyo, entre otros, theory.tex. en theory.texhe puesto

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

donde gnuplot/cascade.texcontiene el gnuplotcódigo

\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}

El resultado de esta configuración es asombroso. Pero cada vez que cambio algo theory.tex, se vuelve a compilar toda la gnuplottexrutina. Esto lleva bastante tiempo y es muy molesto.

¿Cómo es que latexmkno reconoce que el gnuplotcódigo no ha cambiado y lo deja? ¿Se podría especificar esta dependencia y, en ese caso, cómo?

EDITAR: gnuplottexes bastante lento en mi sistema, aunque gnuplotes muy rápido. ¿Cómo puedo evitar el uso de gnuplottex, el tiempo de compilación es largo y, por lo tanto, evitar tener que gnuplottex volver a compilar cada vez?

Respuesta1

He evitado usarlo gnuplottexagregando la siguiente dependencia personalizada a .latexmkrc:

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

Mi gnuplotarchivo usa la cairolatexterminal (o cualquier otra terminal que produzca un .texarchivo). Mi latexdocumento contiene \input{gnuplot_output.tex}que, debido a la dependencia recién definida, provoca una llamada al sistema gnuplotdurante texla compilación. El .gnuarchivo y .texlos archivos ahora son una dependencia normal y gnuplotno se volverán a compilar a menos que se cambie la marca de tiempo.

Es importante tener en cuenta que la ruta especificada en set output "path/gnuplot_output.tex"el .gnuarchivo es relativa al tex rootarchivo siempre que la gnuplotllamada al sistema sea inducida por latexmk.

Respuesta2

Mi solución actual sin usar gnuplottexes una modificación de una que encontré hace un tiempo (Cómo incluir una imagen SVG en LaTeX) para la inclusión de SVG (con una llamada automática a Inkscape si es necesario).

\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}%
}

Tengo mis archivos gnuplot en una subcarpeta, por ejemplo img/ch01/foo.gp, y me gusta tener todos los archivos temporales tmp/y todos los archivos de imagen temporales tmp/img/(ya que suelo gitrastrear mis archivos tex, pero no quiero rastrear ningún archivo derivado, es decir, los que están en tmp/). Luego, el archivo gnuplot se puede incrustar en un documento como este:

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

Llamo miktex-pdftex.exedesde TeXworkscon las opciones -aux-directory=tmpy -shell-escapepara que esto funcione. Además, la carpeta que contiene el binario gnuplot debe estar en la variable PATH o, en mi caso, configurada en la configuración de TeXworks (por ejemplo D:/gnuplot/bin).

información relacionada