gnuplot4 で epslatex を使う

gnuplot4 で作る図の軸名などに、 LaTeXで書くような数式を入れる方法です。 ここでは、ターミナルタイプ epslatex を使った方法を紹介します。

gnuplot の部分はコマンドラインで操作してもできるのですが、 後で図を編集する可能性を考えるとスクリプトにしておくのが便利です。

gnuplotスクリプトで図を作る

gnuplot で図を作るためのスクリプトを、 例えば次のようなファイルとして作ります。
fig.gp 名前はなんでもいいです

set terminal epslatex set output "hogehoge.eps" #他で使っていなさそうな名前を指定します。 set xlabel '{$\alpha$}' set ylabel '{$y^{\beta}$}' plot sin(x) title '$\sin(x)$' quit
スクリプトができたら、スクリプトがあるディレクトリで gnuplot にスクリプトを食わせます。
gnuplot fig.gp
以上の操作で、以下の二つのファイルができます。

LaTeX でコンパイル

次に、上のhogehoge.tex を取り込んだ LaTeXソースファイルを 例えば次のように作ります。
temp.tex
\documentclass{article}
\usepackage{graphicx}
\pagestyle{empty}
\begin{document}
\begin{figure}[h]
    \input{hogehoge} %ここで先ほど作った hogehoge.tex を取り込みます
\end{figure}
\end{document}
  
できたら、コンパイルします。
platex temp.tex
platex temp.tex 念のためにもう一回

dviからepsを作る

ここまでで、temp.dvi ができますので、これを eps ファイルにします。
dvips -E temp.dvi -o fig.eps
-E は、図のあるところのみ切り出すためのオプションです。

epsのBoundingBoxを直す(Ubuntu 14.04 + TeXLive)

Ubuntu 14.04 でインストールした TeXLive を使う場合の トラブルシューティングです。

eps ファイルを includegraphics で読み込んで dvipdfmx で pdf にすると、pdf 上では eps 図の位置がずれてしまいます。 これは、ソースファイルの中で

\usepackage{graphicx} → \usepackage[dvipdfmx]{graphicx}
\usepackage{color} → \usepackage[dvipdfmx]{color}
とオプションを付けてあげるとなおります。 ところが、このオプションを付けてあげると、 今度は dvi で eps 図やカラーが見えなくなるというので困ります。

正しい対処なのかどうかわかりませんが、 eps ファイルを一度 epstopdf で pdf にして、 これを pdftops で eps に戻すと usepackage に dvipdfmx の オプションなしでコンパイルしたものは、 dvi でも pdf でも位置がずれませんでした。

epstopdf --outfile=hoge.pdf hoge.eps
pdftops -eps hoge.pdf hoge2.eps
これで、TeXソースの方では、hoge.eps の代わりに hoge2.eps を includegraphics で読み込みます。

シェルスクリプトで一括処理

以上の処理を一括処理するシェルスクリプトを書いておくとさらに便利です。 の名前はそのままとしましょう。 csh のスクリプト(mkfig.sh とします)は以下の通りです。
#!/bin/csh -f

gnuplot fig.gp
platex temp.tex
platex temp.tex
dvips -E temp.dvi -o fig.eps
epstopdf --outfile=fig.pdf fig.eps
pdftops -eps fig.pdf fig.eps
rm temp.{aux,dvi,log}
  
赤い箇所は、上の図の位置ずれに対する対処です。 できたら、実行権を与えておきます。
chmod u+x mkfig.sh
これを実行すれば、fig.eps の作成まで一括でできます。 fig.gp を変更したときもコマンド一つで変更した図ができるので便利です。
./mkfig.sh

ファイルが複数ある場合も、上のスクリプトを少し変更すると一括処理できます。 処理したい gnuplot スクリプトが fig1.gp, fig2.gp, fig3.gp としましょう。

#!/bin/csh -f

set tempfile="temp"

foreach file ( "fig1" "fig2" "fig3" )
  gnuplot ${file}.gp
  platex ${tempfile}
  platex ${tempfile}
  dvips -E ${tempfile}.dvi -o ${file}.eps
  epstopdf --outfile=${file}.pdf ${file}.eps
  pdftops -eps ${file}.pdf ${file}.eps
  epstopdf --outfile=${file}.pdf ${file}.eps
  pdftops -eps ${file}.pdf ${file}.eps
  rm temp.{aux,dvi,log}
end
  

トラブルシューティング

LaTeXでコンパイルするときに、失敗することがあります。 当方でひっかかったトラブルは以下のようなものです。 取り込まれたhogehoge.tex の中にこのような記述があるのですが、 どうも"_" や "%" が入っているとダメなこともあるようです。 いつもダメというわけではないというのがよくわからないところです。

ともかく、上のような症状が出たときは、 対処療法には hogehoge.tex にある "_" や "%" の前に エスケープ記号 "\" を付けておくとコンパイルが通りました。

別の対処策としては、key に上のような記号が使われるとダメなので、 それが出ないようにすることです。 つまり、gnuplot の title を指定してあげます。

plot "<awk 'NR%10==0' hoge.dat" title ''
上の例では、タイトルをカラにすることで対処しています。
Last modified: Thu Oct 2 12:18:48 JST 2014