- 
| 2009.05.08Tips | PS, EPSファイルの編集自分の備忘録のために書いていますが, 中には他の方の役に立つ情報もあるかと思い,公開しています. したがって,必ずしも(すべての環境で)これらの方法が上手くいくかどうかはわかりません. ご了承ください(現在使用している環境は Ubunto Linux 8.10, gnuplot 4.2)
 (追記/2009/05/08: 環境をMac OS X 10.5.6に変更し,Mac port経由のgnuplotを使用するようになりました (Ver. 4.2 patchlevel 5). その結果,若干epsの中身が変更になっていますが,基本は一緒です)
- gnuplotで図(eps)を作るためのスクリプト
- gnuplotでの記号(点)の対応表
- gnuplotで生成されたepsファイルを直接いじる方法
- psファイルを直接いじる(Acrobatを使わずにpdfに線や文字を記入する)
- カラーとモノクロ 
/Color true def "true" : color 
 "false" : monochromatic
- 実線と破線
/Solid true def "true" : 実線 
 "false" : 破線
- 線幅
/gnulnewidth 5.000 def 10.000 にすると2倍. 
- 記号の大きさ
/hpt_ 31.5 def /vpt_ 31.5 def 63.0 にすると2倍. 
- 線のパターン・色
/LT0 { PL [] 1 0 0 DL } def /LT1 { PL [4 dl 2 dl] 0 1 0 DL } defDL の前が色指定 (RGB).小数点も使用可 
 []内が破線の設定
 [4 dl 2 dl] = 線分の長さ:間隔 ( 4:2 )
 dashed, dotted などを自分で調整
 chain line (一点鎖線) に関しては、dl を増やして対応
- 複数のデータに対して,線種・色を変更
epsファイルの下部は,実際の線のデータや点のデータ, ラベル・軸の設定がしてある. たとえば,点は 4328 3215 Circle のように,x座標,y座標,記号,の順で書かれているだけ. 記号を変更したければ,「Circle」となっているところを「Box」のように置換するだけでよい. また,線のデータの部分LT1 5333 1756 M 783 0 V -783 31 R 0 -62 V 783 62 R といった部分の先頭に「LT1」とかがあるので,「LT0」とか「LT2」に変更すると線種が変わる.
- ラベルの変更
LTb 1806 1668 M gsave 0 setgray [ [(Times-Roman) 400.0 0.0 true true 0 (\(a\))] ] -133.3 MLshow grestore のような部分があるので,適当に変更.「¥(」というのが括弧のこと(エスケープ). なお,「Times-Roman」,「Times-Italic」,「Symbol」は使用可能. それ以外は未確認. 
- pdf2ps (pdftops?) を使用してpdfをpsに変換
- psファイルを直に編集
- psファイルをpdfに戻す(pstopdf)
- コメントの挿入
(例) /Times-Bold findfont 0.8 0.1 0.1 setrgbcolor 200 scalefont setfont 1000 1600 moveto (Comment) show 最初の行でフォントを設定(/Times-Italic,/Symbolなど).
 次の行でRGBで色を選択.
 次がフォントの大きさ.
 「moveto」の前の2つの数字が,コメントを入れる場所(XY座標).
 最後の行の( )の中に入れたいコメントを入れる.
 フォントのサイズやコメントの場所は適当に試しながら.
 
- 線の挿入
(例) 10.0 setlinewidth 1200 2000 moveto 1800 2000 lineto stroke 最初の行で線の太さを指定.
 「moveto」の前の2つの数字がペンをおく位置(XY座標).
 ペンを置いた場所から,「lineto」の前の2つの数字で指定した場所まで線を書く.
 相対座標で動かしたい場合には,「rlineto」や「rmoveto」を使う.
 なお,「stroke」を実行した時点でペンの位置は失われると考えた方が良い.
 「rmoveto」などで描きたい図をある程度記述してから,「stroke」を実行すること.
 とりあえず,文字と直線さえ書ければ, 論文の修正などには十分? 
 基本はpostscriptなので,当然破線なども描ける.
1. gnuplotで図(eps)を作るためのスクリプト
「for_figure.sh」という名前で以下のスクリプトを作ったならば,
./for_figure.sh datafile.dat
のようにして使う.
複数のデータファイルを使用する場合には,
./for_figure.sh datafile1.dat datafile2.dat
のようにする.
それぞれスクリプトの中の「$1」「$2」に対応する.
以下がスクリプト本文. 必要に応じて,適当にコメントをはずしたり, 追加の命令を書き込む必要がある. なお,記号(点)については対応表も載せておいた(必要そうな部分のみ). また,フォントについては
{/Times-Roman    }
{/Times-Italic   }
{/Symbol         }
などを使うことができる.
#!/bin/sh 
# ------------ tmp_fileの設定
comm=./disp.tmp.$$
# ------------ gnuplotのパスを設定
GNUPLOT=/usr/bin/gnuplot
# ------------ gnuplotへの出力
cat << EOF > $comm
#!$GNUPLOT
# ------------ 出力のファイル名などの設定
set terminal postscript eps enhanced "Times-Roman" 30
set output "tmp.eps"
# ------------ 記号(点)の設定
set style line 1 lt 1 pt 1
set style line 2 lt 1 pt 2
set style line 3 lt 1 pt 3
set style line 4 lt 1 pt 4
set style line 5 lt 1 pt 5
set style line 6 lt 1 pt 6
set style line 7 lt 1 pt 7
set style line 8 lt 1 pt 8
set style line 9 lt 1 pt 9
set style line 10 lt 1 pt 10
set style line 11 lt 1 pt 11
set style line 12 lt 1 pt 12
set style line 13 lt 1 pt 13
# ------------ x ラベルと y ラベルの設定(symbolも使用可) 
set xlabel "{/Times-Italic k}" offset 0, 0.3 font "Times-Roman,34"
set ylabel "P({/Times-Italic k})" offset +2.5, 0 font "Times-Roman,34"
# ------------ 複数の図をまとめるときのラベル
set label "(a)" at 2.0, 0.0001 font "Times-Roman,40" 
##### 目盛軸の設定
# ------------ 対数目盛の使用
set logscale x
set format x "10^{%L}"
set logscale y
set format y "10^{%L}"
# ------------ 普通の目盛の使用(桁数は任意に調整可)
#set format x "%2.0f"
#set xtics 2.0
#set mxtics 2           # 主目盛を2分割
#set format y "%3.2f"
#set ytics 0.05
#set mytics 2
# ------------ 目盛の範囲
set xrange [1:500]
set yrange [0.00001:1]
#set yrange [0.00001:1]
#set zrange [0:0.2]
# ------------ 3次元プロットを2次元に射影した分布の出力(gray mode用)
#set format cb "%3.2f"
#set mcbtics 2
#set cbra [0:0.15]
#unset colorbox
#set pm3d map
#set palette gray negative
# ------------ 等高線表示用
#set data style lines
#set nosurface
#set contour base
#set view 0,0
# ------------ 図の大きさの設定(図をまとめて Tex で出力する際に必要)
set lmargin 8
set bmargin 3
set rmargin 5
set tmargin 1
# ----------- もし図の形を正方形にするのなら
#set size square
# ----------- 凡例を入れるなら set key、入れないのなら set nokey
#set key left bottom
#set nokey
# ----------- 実際に plot
#plot "$1" w p linestyle 9 notitle, 0.1*x**(-2) w l notitle
#plot "$1" w yerr linestyle 9 notitle, 0.1*x**(-2) w l notitle    #エラーバーあり
EOF
LC_ALL=C $GNUPLOT $comm
# End of Script
rm $comm
2. gnuplotでの記号(点)の対応表

3. gnuplotで生成されたepsファイルを直接いじる方法
出力したepsが,論文用だったためにモノクロだったとして, しかしこれをカラーにしてPower Pointで使いたいと考えたとする. その際,もう一度データから図を作り直すのは非常に面倒くさい. また,ラベルを(a),(b),(c)と書いたにも関わらず, 図(b)と図(c)しか使わないことになったとき,ラベルを変更して図を作り直す必要が生じる. そのような面倒は,epsファイルを直に手書きで編集すれば回避できる. 以下がその方法.gnuplotで作ったepsファイルの中に以下のような文章の部分があるので, 必要に応じて編集する.
4. psファイルを直接いじる(Acrobatを使わずにpdfに線や文字を記入する)
基本用途: pdfファイルをpsファイルに変換して,コメントや線などを追加する.
例えば論文のcopyrightを提出する際に, 手書き署名以外に名前や論文タイトルなどを印刷する必要がある場合に使えます. または,論文の校正刷りでpdfファイルが送られてきたときにも使えるのかもしれません. 普通はAcrobatなどを使うのでしょうが,使わずにpdfファイルの編集を行うように見せかける(?)方法.
例えば,psファイルの1ページ目にコメントを入れたい場合には,次のような箇所を探す
cleartomark end end pagesave restore showpage %%PageTrailer %%Page: 2 2 %%BeginPageSetup自分が試した範囲では,各ページの最後には
cleartomark end end pagesave restore showpageと書かれていた. そこで,
cleartomark end end pagesave restoreの前の行に必要な部分を挿入する.