gnuplot em LaTeX, sem gnuplottex

gnuplot em LaTeX, sem gnuplottex

Estou usando o cairolatexterminal gnuplotpara criar alguns gráficos de superfície ( pgfplots está falhando na tarefa devido à sua fome de memória). À medida que o número de parcelas aumenta, gostaria de incluir a gnuplotcompilação em minha texcompilação para garantir que as parcelas estejam atualizadas. Me deparei com o gnuplottexpacote, que parece dar conta da tarefa, embora seja lento.

Eu tenho um documento grande e aninhado. A raiz Tex é thesis.texonde incluo, entre outros, theory.tex. Em theory.texeu coloquei

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

onde gnuplot/cascade.texcontém o 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}

O resultado desta configuração é incrível. Mas sempre que eu mudo alguma coisa theory.tex, toda a gnuplottexrotina é recompilada. Isso leva algum tempo e é muito chato.

Por que latexmknão reconhece que o gnuplotcódigo não mudou e sai dele? Essa dependência poderia ser especificada e, nesse caso, como?

EDIT: gnuplottexé bastante lento no meu sistema, embora gnuplotseja muito rápido. Como posso evitar o uso gnuplottex, é um longo tempo de compilação e, assim, evitar gnuplottex recompilar todas as vezes?

Responder1

Evitei usar gnuplottexadicionando a seguinte dependência personalizada a .latexmkrc:

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

Meu gnuplotarquivo usa o cairolatexterminal (ou qualquer outro terminal que produza um .texarquivo). Meu latexdocumento contém \input{gnuplot_output.tex}which, devido à dependência recém-definida, causa uma chamada do sistema gnuplotna texcompilação. O .gnuarquivo e .texos arquivos agora são uma dependência normal e gnuplotnão serão recompilados a menos que o carimbo de data/hora seja alterado.

É importante notar que o caminho especificado no set output "path/gnuplot_output.tex"arquivo .gnué relativo ao tex rootarquivo, desde que a gnuplotchamada do sistema seja induzida por latexmk.

Responder2

Minha solução atual sem usar gnuplottexé uma modificação de uma que encontrei há algum tempo (Como incluir uma imagem SVG no LaTeX) para inclusão de SVGs (com chamada automática ao Inkscape se necessário).

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

Eu tenho meus arquivos gnuplot em uma subpasta, por exemplo img/ch01/foo.gp, e gosto de ter todos os arquivos temporários tmp/e todos os arquivos de imagem temporários tmp/img/(já que uso gitpara rastrear meus arquivos tex, mas não quero rastrear nenhum arquivo derivado, ou seja, aqueles em tmp/). O arquivo gnuplot pode então ser incorporado em um documento como este:

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

Eu ligo miktex-pdftex.execom TeXworksas opções -aux-directory=tmpe -shell-escapepara que isso funcione. Além disso, a pasta que contém o binário gnuplot deve estar na variável PATH ou no meu caso definida nas configurações do TeXworks (por exemplo D:/gnuplot/bin).

informação relacionada