最近、LaTeX に貼り付ける PostScript ファイルを Gnuplot で作る際にやってることをまとめておく。
まずはおさらい。例えば、y = sin x という式を、sin.eps というファイルで保存する場合、
set terminal postscript eps set output 'sin.eps' plot sin(x)
上のようなコードを書いて sin.gp というファイルで保存し、次のコマンドを実行するんだった。
$ gnuplot sin.gp
すると、sin.eps というファイルが出来る。
PS ファイルと EPS ファイル
ここで少し脇道に逸れて、set terminal postscript landscape と set terminal postscript eps の違いを説明しやう。前者 (landscape は省略可) は、A4 用紙一杯に横向きで図を描く。後者は、小さめの図を描く。
landscape は印刷するのに向く。その代わり LaTeX に貼るには不向き。図を 90 度回転させたり、小さくする手間がかかるし、図を小さくするとフォントまで小さくなり見難くなる。これを修正する手間が、更にかかる。
一方、eps は図が最初から小さく、landscape のように図を回転させる必要もないので、LaTeX に貼るのに最適。ただし、eps 単体を印刷すると、図の小ささが際立つ。
そろそろ本筋に戻らう。色々と図を作って思ったのは、印刷用の図と LaTeX 用の図を一緒に作っておくと便利ということ。
片方のファイルを先に作っておき、必要に応じてもう一方のファイルを作る、というのは面倒で、しかも、もう一方のファイルが必要になる時に限って、急を要することが多い。最近は、ファイル・ストレージの容量も大きくなってきたので、最初から両方の図を作る方がいいという結論に達した。
そういうわけで、上の sin.gp を、もう少し実戦的に直すと下のやうになる。
# # sin.gp # set xlabel "x label" set ylabel "y label" set xrange [0:10] unset key # ps set title 'Sin function' set size 1.0 set terminal postscript landscape enhanced color set output "sin.ps" plot sin(x) # eps unset title set size 0.6 set terminal postscript eps enhanced mono set output "sin.eps" replot
landscape/eps に共通な設定を最初に書く。xlabel, ylabel を書いておくのは、図の最低限の嗜み。図によっては、xrange 等の設定を加える。
landscape (#ps 以降) では、title を設定する。印刷した後だと、何のファイル/データを印刷したのか分からなくなりがちなので、ここに情報を書いておき、忘れないようにする。逆に eps (#eps 以降) では、title の設定を無効にする。LaTeX では、そういう情報を caption に書くので、title 部はあるとかえって邪魔。
次にサイズの指定。set size 1.0 はサイズを変えないということ。set size 0.6 は小さめのサイズにするということ。eps のフォントと線は、LaTeX に貼るにはまだ小さく細い。そこで、set size で小さめの図を作る (この時、フォントの大きさと線の太さは変わらない)。そして、LaTeX 側で拡大する。すると、フォントの大きさと線の太さが大きくなるという仕組。縮小率は、0.6 倍位いが適当。
terminal の指定で、enhanced はギリシャ語などを表現する時に使う。color/mono は色付きか白黒か。論文などは白黒がベースなので、eps は白黒で作る。けれど、印刷する時はカラーの方が見易いかな? と思う。ここら辺はお好みで。
m4 を使う
さて、上のコードでは、output ファイル名を sin.ps と sin.eps とした。二つのファイルは、拡張子が違うだけなので、basefile name (拡張子の前の部分) を変数に保存したら、後の編集が楽になる。けれど Gnuplot 4.0 では変数に文字列を代入することは出来ない (4.1 では出来るようになるらしい)。
ぼくは、m4 マクロを使ってこれを解決している。上の例は、m4 を使うと次のように書ける (ここでは、data ファイルをプロットする例を書いた)。
changequote([[,]])dnl define([[base_filename]],[[sin]])dnl define([[data_filename]],[['sin.txt','cos.txt']])dnl define([[PLOT]],[[ # ps set title 'Sin and Cos' set size 1.0 set terminal postscript landscape enhanced color set output "base_filename[[]].ps" plot data_filename # eps unset title set size 0.6 set terminal postscript eps enhanced mono set output "base_filename[[]].eps" replot ]])dnl dnl -------------------------------------------------------------------------------- # # sin.gp # set xlabel "x label" set ylabel "y label" set xrange [0:10] set style data dots PLOT
水平線の入るまでが m4 の定義部分。入った後が gnuplot の PS/EPS 共通設定。
m4 から gnuplot 用のファイルを生成し、そこから PS/EPS ファイルを作る Makefile は次の通り。
# # Makefile for sin # all: ps M4 = m4 M4FLAGS = GNUPLOT = gnuplot SRC = sin ps: $(SRC).ps $(SRC).ps: $(SRC).gp $(SRC).txt cos.txt $(GNUPLOT) $< $(SRC).gp: $(SRC).m4 $(M4) $(M4FLAGS) $< > $@ # # clean # RM = rm -f clean: $(RM) *~ distclean: clean $(RM) $(SRC).gp psclean: $(RM) *.ps epsclean: $(RM) *.eps allclean: distclean psclean epsclean
これで、make 一発で ps/eps ファイルが作れる。
No comments:
Post a Comment