おもこん

おもこんは「思いつくままにコンピュターの話し」の省略形です

pregnuplot を作ってみた(1)

pregnuplot を作ってみた(1)

gnuplot でグラフを作って LaTeX に出力する作業を繰り返していると、かなり疲れてきます。
 ・作業が単調である。
 ・作業量がかなりある。
しかもこの作業は決まったアルゴリズムであるということが分かってきました。ならば、そういうことこそコンピュータにやらせるべきではないか。そこで、考えを整理してみました。

pregnuplot は、どういうプログラムになるのか?

このプログラムは、gnuplot のコマンドファイルを出力するので、gnuplot の前処理プログラムとでもいうべきものです。そこで、pregnuplot という名前をつけることにしました。pregnuplot はどういうプログラムになるのでしょうか?
 1 グラフを描くための要素を与えられると、そこから gnuplot のコマンドファイルを作る。
 2 その要素とは、グラフの範囲、関数の式、グラフ上の点の座標を表す数字と点線(下の図参照)
座標を表す数字はその点の場所からずらして書きます。例えば、図のグラフでは、点(1,0)の上にずらして数字の1を書いています。このようなずれを表すために、
E (east 右側)、 N (north 上側)、 W (west 左側)、 S (south 下側)
そして、その組み合わせ、NE, NW, SW, SE、更に NNE, NEE などの組み合わせを考えてみました。
イメージ 1

 3 ついでに、領域を斜線で表す機能も付け加える。斜線は直線を繰り返し描けばよいので、
   それこそコンピュータの得意な分野だ。
 4 プログラム言語は何でも良い。が、今回は手軽な Perl を使うことにした。
   また、Perl は GUI を使わなければ、Linux でも Windows でも動いてくれる。

pregnuplot のソースファイル

pregnuplot は、グラフを描くためのいくつかの要素(関数式とかグラフの範囲など)を読み込んで gnuplot のコマンドファイルを出力します。読み込むファイルを pregnuplot のソースファイルと言います。このソースファイルは、拡張子を pgp ということにします。ソースファイルの大部分はテンプレートとして作っておいて、いくつかの項目を入力するだけにすれば効率的です。そこで、テンプレートファイル、default.pgp を作りました。このテンプレートは、Texworksのテンプレートに登録しておき、Texworks で編集できるようにしておきます。更に、後で pregnuplot を Texworks のタイプセットに登録しておけば、Texworks から pregnuplot を起動することもできます。
% !TEX TS-program = pregnuplot
% !TEX encoding = UTF-8 Unicode

#
#---------- Pregnuplot のソースファイルの始まり ----------
#

# 座標系 (Coordinate System) の範囲
XMIN = 
XMAX = 
YMIN = 
YMAX = 

# 関数 (Function)
FX0 = 
FX1 = 
FX2 = 
FX3 = 

# x=aの形の直線の方程式
XEA0 = 
XEA1 = 
XEA2 = 
XEA3 = 

# 領域 (Domain)
DOMAIN = 

# 原点 (Origin) のラベル位置(NE,NW,SW,SE)
LABELO = SSW

# その他のラベル位置
# 名前、その点のx座標、その点のy座標、ずらす方向、倍率
#    例 y切片(2,0)の左下に"2"と(ラベルを)書きたいとき
#        2,2,0,SW,1
#    説明 SWは、SouthWest(南西 = 左下)。この他に
#          N (北 = 上), NEE(東北東 = 右にずれた右上) など
#          離れる基準の距離は、適当と思われるものを Perl のソースに入れてある。
#          それに対しての倍率を指定する。実際に図を打ち出してから判断するしかない。
LB0 = 
LB1 = 
LB2 = 
LB3 = 
LB4 = 
LB5 = 
LB6 = 
LB7 = 
LB8 = 
LB9 = 

#点の座標を示すときの点線
# その点のx座標、その点のy座標、点線の行き先(x軸、y軸、両方)
#   例 点(2,3)から、x軸に点線を引く
#       2,3,x
#   例 点(2,3)から、x軸とy軸の両方に点線を引く
#       2,3,xy

PL0 = 
PL1 = 
PL2 = 
PL3 = 
PL4 = 
PL5 = 
PL6 = 
PL7 = 
PL8 = 
PL9 = 

# 出力先(+出力サイズ),出力先ファイル名
TERMINAL = epslatex size 6cm, 5cm
OUTFILE = untitled_epslatex.tex

# 縦横比 = (縦)/(横)
RATIO = 1

#
#---------- ソースファイルの終わり ----------
#

座標系の範囲を、-2<=x<=2 にしたいなら、XMIN = -2、XMAX = 2 とします。YMIN, YMAX も同様です。
直線 x=2 を描きたいときは、XEA0 = 2 とします。複数引きたければ、XEA1, XEA2 なども使います。
領域を指定するときは、DOMAIN = y>=0 && y<=-x**2+3 などとします。出力ファイル名の untitled_epslatex は、仮のファイル名です。untitled のところを書きかえて、例えば、parabola_epslatex などとしてください。実際の出力ファイルには、拡張子がついて、parabola_epslatex.tex と parabola_epslatex.eps になります。