LaTeX での gnuplot (gnuplottex なし)

LaTeX での gnuplot (gnuplottex なし)

私は、cairolatex端末を使用して、gnuplotいくつかの表面プロットを作成しています (pgfplots メモリ不足のため、タスクが失敗しています)。プロットの数が増えるにつれて、プロットが最新であることを確認するためにgnuplot、コンパイルにを含めたいと思います。遅いですが、タスクを処理できると思われるパッケージtexを見つけました。gnuplottex

大きなネストされた文書があります。Texルートには、thesis.tex他のものとともに、以下を含めますtheory.textheory.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 rootgnuplotlatexmk

答え2

私が現在使用している解決策は、gnuplottexしばらく前に見つけた解決策を修正したものです(SVG 画像を LaTeX に含める方法) を使用して 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/( gittex ファイルを追跡するために使用していますが、派生ファイル ( にあるファイルなど) を追跡したくないためtmp/)。gnuplot ファイルは次のようにドキュメントに埋め込むことができます。

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

これを機能させるには、および オプションを使用しmiktex-pdftex.exeて を呼び出します。さらに、gnuplot バイナリを含むフォルダーは PATH 変数内にあるか、または私の場合は TeXworks 設定 (例) で設定されている必要があります。TeXworks-aux-directory=tmp-shell-escapeD:/gnuplot/bin

関連情報