今週もどちらかというと息抜きの週ですので気楽に授業を受けて下さい。 今週のテーマはポストスクリプトファイルです。
ポストスクリプトファイルがどういうものか理解できたでしょうか。 では今度は自分でポストスクリプトファイルを作ってみましょう。
ポストスクリプトファイルのことが少しはわかったでしょうか。 普通ポストスクリプトファイルを直接手で書くことは稀です。 多くの場合は適当な入力(ファイルなど)を入れてやるとポストスクリプト ファイルを生成してくれるプログラムなどを使います。 しかしポストスクリプトファイルがテキストファイルであり、エデイター などで編集することで自由に変更可能だということを知っておくと便利でしょう。
それでは今週の課題です。
これで今週の授業は終わりです。 お疲れさまでした。
ポストスクリプトは Adobe という会社が開発したプリンター用の言語で、 現在では絵が描けるプリンターのプリンター言語の世界標準です。 他のプリンター言語の多くがバイナリー形式であるのに対してポストス クリプト言語は文字(ASCII)で書かれています。 従って人間が読んで理解することもできますし書くこともできます。 ポストスクリプト言語には多くの強力なコマンドが用意されていますので 手の込んだ絵を非常に手軽に描くことができます。 またポストスクリプト言語の仕様は Adobe 社が明確に規定していますので 正しいポストスクリプト言語で書かれたファイルはポストスクリプト対応の プリンター全てに出すことができますし、ポストスクリプトファイルをコン ピュータの画面上で見るためのコマンドが豊富に用意されています。
ではまずポストスクリプトファイルの例を見てみましょう。
% mkdir week05 % cd week05 % cp ~asakaguc/semia2.www/data/week05.ps ./ % xv &
上のコマンドでは先週使った xv コマンドをポストスクリプトファイル を計算機のディスプレー上に表示するために使っています。 xv の操作ウィンドウを開いて(表示ウィンドウ上にポインターを持ってきて 右マウスボタンクリックでしたね)Load ボタンを押して week05.ps を 開いて下さい。
表示された絵は非常に簡単なポストスクリプトファイルの例です。 このファイルはポストスクリプト対応のプリンターに出力すると 今見ている通りに出力されます(カラーは出ないかもしれませんが)。 上でポストスクリプトファイルは文字で書かれていると言いましたが 実際にポストスクリプトファイルの中を見てみましょう。
% emacs week05.ps &
week05.ps にはポストスクリプトファイルの中で何をしているかがわかるように コメントを入れてあります。 ポストスクリプトファイルの先頭は常に「%!PS」で始まります。 これはおまじないのようなものだと考えて下さい。 ポストスクリプト言語のコマンドは簡単な英語単語をもとに作られているので、 コメントを頼りにすればどんなことをしているかが理解できると思います。 week05.ps の中ほどにあるコマンド moveto を見て下さい。 moveto は「move to」という意味ですから「どこどこへ移動せよ」という コマンドです。 この「どこどこへ」というのは、
6cm 3cm moveto
のように指定します。
moveto 6cm 3cm
と書いた方が自然だと思う人もいるかも知れませんがポストスクリプト ファイルは先のような書き方をします。 最初にパラメータの値を入れておいてその後で(Post)そのパラメータを どう使うかを記述する(Script)言語という意味でポストスクリプトと 呼ばれます。
ポストスクリプトファイルを計算機のディスプレー上に表示するコマンド としては xv の他に gs などがあります。
% gs week05.ps
gs コマンドを終了するには CONTROL-d(エンドオブファイルという意味 でしたね)あるいは CONTROL-c(中止という意味ですね)を打って下さい。
今週の最初に戻るとにかくエディターを立ち上げましょう。
% emacs triangle.ps &
それではまず以下のように入力しましょう。
%!PS % /cm { 28.3 mul } def 0.05 cm setlinewidth % showpage
上ではまずおまじないの「%!PS」を書きました。 更に「cm」を定義しておくと便利なので定義しました。 またこれから描く絵の線の太さを 0.05 cm(0.5 mm)と定義しました。 ここで少し注意して欲しいのは「0.05 cm」と書く時に「cm」を 数字にくっつけないで下さい。 最後に「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 stroke % showpage
この例でわかるように三角形を描くには、
という手順になります。 ここで一旦 triangle.ps をセーブして(emacs でファイルをセーブするのは CONTROL-x CONTROL-s でしたね)xv あるは gs コマンドで絵を見てみましょう。 もし正しく表示されない場合はファイルの内容をチェックして下さい。
上の例では三角形の輪郭を描きましたが 「fill」というコマンドで 三角形の内部を塗りつぶすこともできます。
%!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
setgray というコマンドは塗りつぶしの場合の濃さを指定します。 パラメータの値は濃さで 1.0 が白で 0.0 が黒に相当します(中間は 値に応じた濃さの灰色です)。 stroke コマンドがコメントになっている点に注意して下さい。
ここで三角形の輪郭も描いて同時に三角形の塗りつぶしもしたいと 考える人がいるかも知れません。 しかしこれはそう簡単ではありません。 というのは、moveto や lineto で指定した三角形のデータは1回切りしか 使えないからです。 困りましたね。 でも解決策はあります。 gsave というコマンドを使えば三角形のデータをコピーして別の場所に 保管できます。 また grestore というコマンドを使うと保管したデータを取ってくることが できます。 以下のようにすれば良いわけです。
%!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
四角形や多角形はこの応用ですから簡単に描けるはずだと思います。 emacs は一旦終了しましょう。 では次は新しいファイル arc.ps を開いて円弧を描いてみましょう。 円弧を描くコマンドは arc です。 arc コマンドのパラメータは順番に円弧の中心の X 座標、Y 座標、 円の半径、描き始めの角度、描き終りの角度です。 三角形のときの要領で下のような例を思いつくかも知れません。
%!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 moveto 9 cm 12 cm 10 cm 0 90 arc 9 cm 12 cm lineto closepath gsave 0.8 setgray fill grestore stroke % showpage
この違いがわかりますか。 円弧の角度を変えてもうまく表示できるはずですからやってみて下さい。
では次は文字を描くことにしましょう。 emacs で新しいファイル string.ps を開いて下さい。 文字をもっとも簡単に描くには show コマンドが使えます。 下がその例です。
%!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
上の例で最初の部分は文字を描く際にどのようなフォントを使うかを 指定しています。 大体わかると思いますが「Palatino-Roman」というフォントを 見つけてきて 1cm の大きさにして使っています。 rotate というコマンドを使うと傾いた文字を描くこともできます。
%!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
これで簡単な絵なら描けるようになったのではないでしょうか。 色々な絵を描き重ねていていった場合にどうなるかですが、 その場合には、後から描いた絵が先に描かれた絵と重なる場合には 先に描いた絵が隠されます。 では最後にポストスクリプトファイルの例をもう一つ見てみましょう。
% cp ~asakaguc/semia2.www/data/example.ps ./ % gs example.ps今週の最初に戻る
今週の課題はオリジナルのポストスクリプトファイルの作成です。 以下の条件を満たすポストスクリプトファイルを1つ作成して下さい。
ポストスクリプトファイルでの座標のとり方は左下隅が座標原点で右方向 および上方向がそれぞれX座標とY座標の正の方向です。 また絵の大きさは標準ではA4の紙の上に描くようになりますからX方向が 21cm 程度Y方向が 29cm の大きさとなります。
制作したポストスクリプトファイルはテキストファイルですからメールで 教官に送りましょう。
% emacs my.ps & % mail -s 'サブジェクト' asakaguc@sci.hiroshima-u.ac.jp u0872000 \ < my.ps
これで今週の課題は終了です。
今週の最初に戻る