gnuplot in LaTeX, ohne gnuplottex

gnuplot in LaTeX, ohne gnuplottex

Ich verwende das cairolatexTerminal, gnuplotum einige Oberflächendiagramme zu erstellen ( pgfplots die Aufgabe schlägt fehl, weil es zu viel Speicher benötigt). Da die Anzahl der Diagramme zunimmt, möchte ich die gnuplotKompilierung in meine texKompilierung einbeziehen, um sicherzustellen, dass die Diagramme auf dem neuesten Stand sind. Ich bin auf das gnuplottexPaket gestoßen, das die Aufgabe zu bewältigen scheint, obwohl es langsam ist.

Ich habe ein großes, verschachteltes Dokument. In Tex root thesis.texfüge ich unter anderem ein theory.tex. In theory.texhabe ich

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

wobei gnuplot/cascade.texder gnuplotCode

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

Die Ausgabe dieses Setups ist fantastisch. Aber jedes Mal, wenn ich etwas ändere theory.tex, wird die gesamte gnuplottexRoutine neu kompiliert. Das dauert ziemlich lange und ist sehr ärgerlich.

Wie kommt es latexmk, dass nicht erkannt wird, dass sich der gnuplotCode nicht geändert hat und er nicht geändert wird? Könnte diese Abhängigkeit angegeben werden und wenn ja, wie?

EDIT: gnuplottexist auf meinem System ziemlich langsam, obwohl gnuplotes wirklich schnell ist. Wie kann ich die Verwendung von vermeiden gnuplottex, die lange Kompilierungszeit und so gnuplottex jedes Mal eine Neukompilierung vermeiden?

Antwort1

Ich habe die Verwendung gnuplottexvollständig vermieden, indem ich die folgende benutzerdefinierte Abhängigkeit hinzugefügt habe .latexmkrc:

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

Meine gnuplotDatei verwendet das cairolatexTerminal (oder jedes andere Terminal, das eine .texDatei erzeugt). Mein latexDokument enthält , was aufgrund der neu definierten Abhängigkeit beim Kompilieren \input{gnuplot_output.tex}einen Systemaufruf auslöst . Die Datei und die Dateien sind jetzt eine normale Abhängigkeit und werden nicht neu kompiliert, es sei denn, der Zeitstempel wird geändert.gnuplottex.gnu.texgnuplot

Es ist wichtig zu beachten, dass der in set output "path/gnuplot_output.tex"der .gnuDatei angegebene Pfad relativ zur tex rootDatei ist, solange der gnuplotSystemaufruf durch ausgelöst wird latexmk.

Antwort2

Meine aktuelle Lösung ohne Verwendung gnuplottexist eine Modifikation einer Lösung, die ich vor einiger Zeit gefunden habe (So fügen Sie ein SVG-Bild in LaTeX ein) zum Einbinden von SVGs (mit automatischem Aufruf von Inkscape falls nötig).

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

Ich habe meine Gnuplot-Dateien in einem Unterordner, z. B. img/ch01/foo.gp, und möchte alle temporären Dateien tmp/und alle temporären Bilddateien in haben tmp/img/(da ich gitmeine Tex-Dateien verfolge, aber keine abgeleiteten Dateien verfolgen möchte, also die in tmp/). Die Gnuplot-Datei kann dann wie folgt in ein Dokument eingebettet werden:

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

Damit dies funktioniert, rufe ich miktex-pdftex.exevon TeXworksmit den Optionen -aux-directory=tmpund auf. Außerdem muss der Ordner, der die Gnuplot-Binärdatei enthält, in der Variable PATH enthalten sein oder in meinem Fall in den TeXworks-Einstellungen festgelegt sein (z. B. ).-shell-escapeD:/gnuplot/bin

verwandte Informationen