ポストスクリプトは Adobe という会社(「アドビ」と読むらしい)が開発したプリンター用の言語で、 現在では絵が描けるプリンターのプリンター言語の世界標準である (昔は文字だけ打つのがプリンターであった)。 またポストスクリプト言語のコマンドを書き連ねてあるファイルをポストスクリプトファイルと呼ぶ。 他の絵を描くためのプリンター言語の多くがバイナリー形式であるのに対し、 ポストスクリプト言語は文字(ASCII)で書かれている。 従って(原理的には)人間が読んで理解できるし、書くこともできる。 ポストスクリプト言語には多くの強力なコマンドが用意されているので、 手の込んだ絵を手軽に描くことができる。
またポストスクリプト言語の仕様は Adobe 社が明確に規定しているため、 正しいポストスクリプト言語で書かれたファイルは、 メーカーが異なってもポストスクリプト対応のプリンター全てに出すことができる。 ポストスクリプトファイルをコンピュータの画面上で見るためのプログラムも用意されている。
ポストスクリプトファイルの例
6cm 3cm moveto
のように指定する。
moveto 6cm 3cm
と書いた方が自然だと思う人もいるかも知れないが、
ポストスクリプトファイルは先のような書き方をする。
最初にパラメータの値を入れておいて、その後で(Post)
そのパラメータをどう使うかを記述する(Script)
言語という意味でポストスクリプトと呼ばれるようだ
(直訳は「追伸」?)。
ここでは自分でポストスクリプトファイルを作ってみる。
簡単な描画(三角形)
%!PS
%
/cm { 28.3 mul } def
0.05 cm setlinewidth
%
showpage
例1 0.05 cm setlinewidth 例2 0.05 cm setlinewidth
%!PS
%
/cm { 28.3 mul } def
0.05 cm setlinewidth
%
2 cm 2 cm moveto
4 cm 6 cm lineto
6 cm 2 cm lineto
closepath
stroke
%
showpage
この例でわかるように三角形を描くには、
%!PS
%
/cm { 28.3 mul } def
0.05 cm setlinewidth
%
2 cm 2 cm moveto
4 cm 6 cm lineto
6 cm 2 cm lineto
closepath
0.8 setgray
fill
% stroke
%
showpage
%!PS
%
/cm { 28.3 mul } def
0.05 cm setlinewidth
%
2 cm 2 cm moveto
4 cm 6 cm lineto
6 cm 2 cm lineto
closepath
gsave
0.8 setgray
fill
grestore
stroke
%
showpage
とすれば良い。
ここでやっているのは、三角形のデータを作成 →
そのデータをコピーして保存(gsave)→
データを使用して三角形を塗りつぶす
(ここで三角形のデータは使用されたので消滅)→
保存しておいた三角形のデータを復活(grestore)→
復活した三角形のデータを使い輪郭を描く
(三角形のデータは再度消滅)という操作である。
%!PS
%
/cm { 28.3 mul } def
0.05 cm setlinewidth
%
9 cm 12 cm 10 cm 0 90 arc
closepath
gsave
0.8 setgray
fill
grestore
stroke
%
showpage
上のように実際に入力して絵を見てみる。
%!PS
%
/cm { 28.3 mul } def
0.05 cm setlinewidth
%
9 cm 12 cm 10 cm 0 90 arc
9 cm 12 cm lineto
closepath
gsave
0.8 setgray
fill
grestore
stroke
%
showpage
%!PS
%
/cm { 28.3 mul } def
0.05 cm setlinewidth
%
/Palatino-Roman findfont
1 cm scalefont
setfont
%
2 cm 15 cm moveto
(This is my first PS file with string.) show
%
showpage
%!PS
%
/cm { 28.3 mul } def
0.05 cm setlinewidth
%
/Palatino-Roman findfont
1 cm scalefont
setfont
%
2 cm 15 cm moveto
(This is my first PS file with string.) show
%
20 rotate
3 cm 0 cm moveto
(This is a rotated string.) show
20 rotate
3 cm 0 cm moveto
(This is another rotated string.) show
%
showpage
次にポストスクリプトのコマンドの例を更に見てみるが、 その前に一般的な注意点について述べる。
ポストスクリプトファイルでの座標のとり方は、 左下隅が座標原点(0,0)で、 右方向および上方向がそれぞれX座標とY座標の正の方向。 また、絵の大きさは標準ではA4の紙の上に描くので、 X方向が 21cm 程度、Y方向が 29cm の大きさとなる。
いくつかの図形や文字を一枚の画面(あるいは紙)に描く場合は、 最後に一度だけ showpage コマンドを実行する。 また、おまじないの #!PS、cm の定義、 線の太さの定義などは最初に一度だけ書けば良い。 なお、色々な絵を描き重ねていていった場合に、 後から描いた絵が先に描かれた絵と重なる場合には、 先に描いた絵が隠される。
座標系の変更
1 cm 2 cm translate
1.5 0.8 scale
%!PS
%
/cm { 28.3 mul } def
0.05 cm setlinewidth
%
/Palatino-Roman findfont
2 cm scalefont
setfont
%
6 cm 13 cm translate
%
0 cm 0.6 cm moveto
0.0 setgray
(PostScript!) show
%
1.0 -1.0 scale
%
0 cm 0.6 cm moveto
0.8 setgray
(PostScript!) show
%
showpage
この例では、描いた絵が紙の中心付近に来るように、translate
コマンドを用いて座標原点を移動している。
scale コマンドのパラメータは 1.0 -1.0 となっている。
このように負の数を scale コマンドのパラメータとすることも可能である。
負の数を入れた場合には座標軸の正負が逆転する。
0.0 0.0 1.0 setrgbcolor
とすれば青に、
0.7 0.7 0.0 setrgbcolor
とすればやや暗い黄色となる。
%!PS
%
/cm { 28.3 mul } def
0.05 cm setlinewidth
%
/Palatino-Roman findfont
2 cm scalefont
setfont
%
2 cm 10 cm moveto
20 cm 10 cm lineto
11 cm 20 cm lineto
closepath
0.7 0.7 0.0 setrgbcolor
fill
%
6 cm 13 cm moveto
0.0 0.0 1.0 setrgbcolor
(PostScript!) show
%
showpage
例1 2 cm 2 cm moveto 4 cm 2 cm lineto 3 cm 4 cm linrto closepath 例2 0 cm 0 cm moveto 2 cm 2 cm rmoveto 2 cm 0 cm rlineto -1 cm 2 cm rlineto closepath例2の相対位置で指定する場合にも、最低1回は moveto コマンドを実行する必要がある点に注意。 プリンターなどがポストスクリプトファイルを解釈し始めるときには、 まだ現在の位置というものが一切指定されていないので (0 0 に指定されているわけでは無い)、 moveto コマンドを一度も実行しないと現在位置が決められない。
(This is an example.) show 0.4 cm 0.0 cm (This is an example.) ashow
(This is an example.) show 0.0 cm 0.4 cm (This is an example.) ashowもちろん水平方向と垂直方向のずれを同時に設定しても良い。
%!PS
%
/cm { 28.3 mul } def
0.05 cm setlinewidth
%
/Palatino-Roman findfont
2 cm scalefont
setfont
%
2 cm 13 cm moveto
(PostScript!) show
2 cm 15.5 cm moveto
0.4 cm 0.0 cm (PostScript!) ashow
2 cm 18 cm moveto
0.0 cm 0.4 cm (Step by Step) ashow
%
showpage
%!PS
%
/cm { 28.3 mul } def
0.05 cm setlinewidth
%
/Ryumin-Light-RKSJ-H findfont
5 cm scalefont
setfont
%
6 cm 13 cm moveto
(漢字) show
%
showpage
最後に、もう一つポストスクリプトファイルの例 example-2.ps を見てみる。 興味のある人は中身を見れば、 文字列は自由に書き換え可能なことがわかるはず (ただし文字列が長いと紙からはみ出す)。 また、それほど複雑でないポストスクリプトファイルで、 結構複雑な絵が描けるのが分かる。