gnuplotのepslatexターミナル
TeXで論文を書くとき、図に数式を入れたり、図中のフォントと本文のフォントを合わせたい、と思うことがあります。また、図中のラベルや凡例などを後から臨機応変に書き換えたいこともあると思います。こういうときに便利なのがgnuplotのepslatexターミナルです。
このターミナルを利用すると、文字の入っていないepsファイルと、文字情報の入ったtexファイルの二つのファイルが生成され、これをメインのtexファイルから読み込んでやれば、グラフと文字の重なった図を表示することができます。
やってみるのが早いと思いますので、まずは以下の内容のpltファイルを作成してgnuplotで実行してみましょう。
set terminal epslatex color size 4,3 10
set output "normdist.eps"
set style line 1 linetype 1 linewidth 2 linecolor rgbcolor "dark-blue"
unset key
set xtics 1
set ytics 0.2
set xrange[-3:3]
set yrange[0:0.8]
set label 1 at graph 0.2,0.75 \
'$f(x)=\displaystyle\frac{1}{\sqrt{2\pi}}e^{-\frac{x^2}{2}}$'
plot 1/sqrt(2*pi)*exp(-x*x/2) with lines linestyle 1
quit
実行すると、normdist.epsという文字の入っていないepsファイルと、normdist.texという文字情報の入ったファイルが生成されます。
これを本文に読み込むには、以下のようにinputコマンドで読み込みます。
\documentclass[a4paper,12pt]{jarticle}
\usepackage[dvipdfmx]{graphicx}
\begin{document}
\begin{figure}[htbp]
\begin{center}
\input{normdist}
\caption{正規分布}
\end{center}
\end{figure}
\end{document}
すると、以下のように文字や数式の入った図を表示することができます。
normdist.texの中身を見ると、文字や数式がpicture環境で表示されていることがわかります。よって、このtexファイルの中身を書き換えることで、後から臨機応変に文字を入れ変えたり、表示位置を変えたりすることができます。
図がずれる場合
ここからが本題です。epslatexターミナルを用いる場合、環境により、以下のように図がずれることがあります。
この現象は、ほとんどの場合、以下のようにgraphicxパッケージのドライバとしてdvipdfmxを指定することで解決すると思います。
\usepackage[dvipdfmx]{graphicx}
しかし、論文として投稿する際には勝手にヘッダ部分を変えたりできない場合もあり、正しくないドライバ指定のまま何らかの対処をしなければならないこともあります。
そもそもこの現象は、epsファイルのBoundingBoxの左下の座標が(0,0)でない場合に、graphicxパッケージが、左下の座標の分の平行移動をちゃんと処理できないことが原因です(dvipdfmxを指定すればちゃんと処理される)。
そこで、BoundingBoxの左下の座標が(0,0)になるようにepsファイルを変換してやれば、どの環境で読み込んでもずれずに済みます。
epsファイルのBoundingBoxの左下の座標を(0,0)にする
gnuplotで作成したepsファイルのBoundingBoxの左下の座標を(0,0)にする方法を紹介します。
epsファイルをエディタ等で開いて、BoundingBoxを指定している部分を探します(ファイルの最初の方にあります)。上で作成したnormdist.epsの場合は以下のようになっています(右上の座標については環境によっては少し違ってくるかもしれませんが、適宜読み替えて下さい)。
%%BoundingBox: 50 50 338 266
gnuplotで作成すると左下の座標が(50,50)となっていますので、座標の全ての数値から50を引いて、
%%BoundingBox: 0 0 288 216
次に、“/doclip”を検索して、BoundingBoxの範囲をクリップしている部分
/doclip {
ClipToBoundingBox {
newpath 50 50 moveto 338 50 lineto 338 266 lineto 50 266 lineto closepath
clip
} if
} def
/doclip {
ClipToBoundingBox {
newpath 0 0 moveto 288 0 lineto 288 216 lineto 0 216 lineto closepath
clip
} if
} def
BoundingBoxの変更に合わせて図の表示位置も変更するため、“50 50 translate”を検索し
doclip
50 50 translate
0.050 0.050 scale
ここの部分の“50 50 translate”の行を削除して
doclip
0.050 0.050 scale
とします。これにより、横と縦にそれぞれ50だけ平行移動していたのが無効になり、辻褄が合います。
上記三か所を書き換えたら保存します。これで、図の中身を全く変えずにBoundingBoxの左下の座標を(0,0)にすることができ、どの環境でもずれなくなります。