高精度のグラフィックをテキストで記述するためのスタック言語です。 印刷所の高価な出力機はみな PostScript で動作します。 印刷所などに入稿する際のグラフィックスデータは昔から PostScript 形式(後述の EPS 形式)が標準です。 DTP の現場では PostScript 対応のプリンタを校正に使います。 PostScript プリンタは一般に高価ですが,最近では数万円で買える PostScript 互換プリンタもあります。
パソコンで PostScript データをレンダリングするインタープリタとしては,商品では Adobe の Acrobat,フリーソフトでは Ghostscript があります。
以下の命令は Ghostscript のコマンドとしてそのまま打ち込みます。
ファイルにするときは頭に %!PS
という行を付けます。
ファイル名の拡張子は ps
です。
単に数値を入れていけばスタックに積まれます。
pstack
でスタックの様子が表示できます。
==
でスタックから一つ数値を取り去り,その数値を表示します。
quit
で Ghostscript が終了します。
add
で,スタックから二つ数値を取り出し,その和をスタックに積みます。
同様に,sub
は差,mul
は積,div
は商,idiv
は整数積,mod
は剰余です。
スタックを全部クリアするのは clear
です。
他に,pop
はスタックトップを削除,dup
はスタックトップを複製,exch
はスタックトップとそのすぐ下を交換します。
描画は一般に次のように行います。
newpath 100 200 moveto 300 400 lineto stroke showpage
座標はポイント(1/72インチ)単位で,紙の左下が原点です。
moveto
はその座標までペンを動かし,lineto
はその座標まで線分を描きます。
実際にすぐに描かれるわけではなく,パスとして記憶されるだけで,stroke
で実際に描かれます。
showpage
でそのページの描画をフィニッシュします。
rmoveto
や rlineto
を使えば相対座標で指定できます。
例えば 5 setlinewidth
とすると線の幅が5ポイントになります。
閉じた図形を描くには,closepath
を使うほうがうまくいきます。
閉じた図形の内部を塗り潰すには fill
を使います。
デフォルトの色は 0(黒)ですが,例えば 0.5 setgray
で,0 と 1(白)との中間の灰色になります。
RGB で色を指定するには,r g b setrgbcolor
という命令を使います。
例えば 1 0 0 setrgbcolor
が赤です。
これ以外に,CMYK で色を指定する setcmykcolor
や,HSB で色を指定する sethsbcolor
があります。
円弧を描くには x y r a b arc
という命令を使います。
(x, y) が中心,r が半径,a が始点の角度,b が終点の角度です。
完全な円にするには a = 0,b = 360 にします。
arc
は反時計回りに弧を描き,arcn
は時計回りに弧を描きます。
もっと複雑な曲線は Bézier 曲線を使います。
a b c d e f curveto
で,現在位置,点 (a, b), (c, d), (e, f)
の4点で定義される3次 Bézier 曲線を描きます。
例えば次のようにすれば,50ポイントの Times Roman フォントで,(100,200) を始点として,メッセージを描きます。
/Times-Roman findfont 50 scalefont setfont 100 200 moveto (Hello, world!) show
次の例は文字を60度回転させて灰色(0.5 setgray
)で「Sample」と大きく描きます。
/Times-Roman 200 selectfont 200 100 moveto 60 rotate 0.5 setgray (Sample) show
日本語フォントは,少なくとも Ryumin-Light-H(明朝),GothicBBB-Medium-H(ゴシック)が使えるはずです(-H は横書き,-V が縦書き)。 デフォルトはJISですが,RKSJ(Romaji Kana Shift JIS),EUCも使えるはずです。
/GothicBBB-Medium-H findfont 50 scalefont setfont 100 200 moveto ($[$2) show % 「ほげ」と出るはず /GothicBBB-Medium-RKSJ-H findfont 50 scalefont setfont (ほげ) show % これはShift JISで書く
Shift JISの場合,2バイト目が \
の文字は余分に \
を付けて例えば 表\現
のように書かないとおかしくなるかもしれません。
EPS(Encapsulated PostScript)にするには,頭に次のような2行を付けてファイルにします(拡張子 eps
)。
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 10 20 100 150
上の2行目(バウンディングボックス指定)は (10,20)--(100,150) を対角線とする長方形を描画領域とすることを示します。これらの値は自分の描画領域に合わせて必ず書き直してください。
PostScript または EPS を PDF に変換するには ps2pdf
コマンドを使います。例えば hoge.eps
を hoge.pdf
にするには次のようにします。-dEPSCrop
オプションを省略すればバウンディングボックスが無視され,デフォルト(多分A4判)のサイズになります[Windows版にはこのオプションが効かないバイナリがあるようです。その場合はCygwin版をお使いください]。
ps2pdf -dEPSCrop hoge.eps
商品では Adobe の Acrobat(に含まれている Distiller)で高品位の PDF に変換できます。
Mac OS X は OS が標準で PDF 表示機能を持っており,PS(EPS)をダブルクリックするだけで PDF
変換して表示します(ターミナルで変換するためのコマンドは pstopdf
です)。
次のプログラムは5角形を出力します(ちょっと向きが変ですが)。
printf()
の中で %
は特別な意味を持っているので,%
自身を出力するには %%
としなければならないことにご注意ください。
#include <stdio.h> #include <math.h> int main(void) { int i; printf("%%!PS-Adobe-3.0 EPSF-3.0\n"); printf("%%%%BoundingBox: 0 0 200 200\n"); printf("newpath\n"); for (i = 0; i < 5; i++) { double theta = 2 * M_PI * i / 5; double x = 100 * cos(theta) + 100; double y = 100 * sin(theta) + 100; if (i == 0) printf("%g %g moveto\n", x, y); else printf("%g %g lineto\n", x, y); } printf("closepath\n"); printf("stroke\n"); return 0; }
これをコンパイルして 実行ファイル名 >hoge.eps
とリダイレクトすれば,hoge.eps
というEPSファイルができます。
向きを正しくするにはどうすればいいでしょうか。星形にするには?
コマンドラインからnを与えてn角形を描くには?
Last modified: 2012-06-01 14:13:28