Postscript のためのライブラリ

ここにあるライブラリは,小波秀雄が個人的に作って利用しているもの がほとんどで,それ以外に Adobe 社の公開資料である Blue Book に掲載されたものがひとつだけあります。 いずれも著作権は法律の規定に従って小波またはAdobe社にあります。 著作者を詐称しないことだけが,使用に際しての 条件です。それ以外の一切の制限や条件はなく, 自由に使うことが出来ます。

利用,および解読には Postscript プログラミングメモ などを参考にしてください。


目次:

簡単な例を見る

ライブラリの使い方

文字列を簡単に出力する — string.pslib

ライブラリ名
手続き名
使用上の注意
使い方の例

線分,矩形,平行四辺形(上下辺水平),方眼を描く — lines.pslib

ライブラリ名
手続き名
使い方の例

さまざまの矢印を描く — arrows.pslib

ライブラリ名
手続き名
使い方の例
真っ直ぐな矢印
円弧状の矢印
曲線の矢印

簡単な例を見る

次の4つのファイルを同じディレクトリにダウンロードして, gsview で libtest.ps を表示させてください。

libtest.ps を編集するといろいろな描画ができます。 また,ライブラリそのものをいじりたければ lines.pslib, arrows.pslib, string.pslig を 編集しなおしてください。

ライブラリの使い方

これらのライブラリを利用するには,次のようなファイルを作成します。

文字列を簡単に出力する — string.pslib

カレントポイントに任意のサイズで英数字,シンボル,日本語の文字列を出力します。 左揃えと中央揃えとがあります。

ライブラリ名

string.pslib download

手続き名

gothic, mincho, roman, bold, bolditalic,helvetica, symbol (左揃え)
cgothic, cmincho, croman, cbold, cbolditalic, chelvetica,csymbol (中央揃え)

使用上の注意

Shift-JIS 用です。EUC で使うときには,次のように変更してください。

gothic → egothic
cgothic → cegothic

使い方の例

(string.pslib) run
x  y moveto
(文字列) 12 mincho

線分,線分の連結,矩形,平行四辺形(上下辺水平),方眼,円など等を描く — lines.pslib

ライブラリ名

lines.pslib download

手続き名

line(線分), box/rect(矩形), rbox/rrect (矩形,左下隅の座標と幅&高さ), cbox/crect (矩形,中心の座標と幅&高さ), parallelo(平行四辺形), grid(方眼), path(複数の点をつなぐ),bendoto(2つの直線を丸めた交点でつなぐ)

使い方

便利メモ:

以下でp1, p2 などとあるのは, x,yを組にした座標データで,たとえば次のように定義しておくと便利です。

/p1 {100 120}def
/p2 {160 370}def

次のように変数を使うと,ちょっと複雑なもので同じ座標を使い回す時に楽に作業できます。

/x1 100 def
/y1 120 def
/x2 160 def
/y2 370 def
/p1 {x1 y1}def
/p2 {x2 y2 }def

スタックに入っている値を変数(ここでは x)に代入する手続きは次のようにします。

/x exch def

|a| /x → |a|/x| 

上の応用として,次のようにスタックに2個の値が入っている時の処理はしばしば使う機会があるでしょう。

|100|200 |
/y exch def
/x exch def

x に 100 が,yに 200 が入ることに注意してください。

ヘッダを用意する

ヘッダの後に次の行を入れて,ライブラリを読み込ませます。 240 と 160 は適切に変更してください。

%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 240 160
(lines.pslib) run

使用例

grid: 左下と右下の隅の座標と間隔を与えて,方眼紙パターンを生成する

-20 -20 210 180 10 grid 
gridsample.png

line: 2点を結ぶ線分を引く

/p1{10 140}def
/p2{120 60 }def
p1 p2 line
line.png

path: 任意の数の点を結ぶ線分を引く

/p1{ 20 40}def
/p2{ 60 120}def
/p3{120 50}def
/p4{170 130}def
/p5{210 18}def
p1 p2 p3 p4 p5 path stroke
ps fig

rect(boxも同義): 対角線上の2頂点を与えて矩形を描く

/p1{50 20}def
/p2{150 60 }def
/p3{90 80}def
/p4{160 120 }def
p1 p2 rect stroke
p3 p4 rect fill
rect.png

rrect/rbox: 左下隅と横幅縦幅を使って矩形を描く

-10 -10 210 120 10 grid

/p1{40 20}def
/dxy{150 80}def
p1 dxy rect stroke
rrect.png

parallelo: 平行四辺形を描く

-10 -10 220 150 10 grid
/p1{40 20}def
/p2{150 100 }def
/dxy{10 20}def
p1 p2 dxy  parallelo  stroke
    
parallelo.png

bendto: 平行四辺形を描く

/p1 {10 170} def
/p2 {145 160} def
/p3 {200 80} def
/p4 {150 10} def
1 0 0 setrgbcolor
p1 3 0 360 arc fill
p2 3 0 360 arc fill
p3 3 0 360 arc fill
p4 3 0 360 arc fill
0 0 0 setrgbcolor
p1 p2 p3 p4 0.2 bendto s
    

4つの点を与えると,交点を丸めてつなぎます。 丸めの大きさは bendto直前の引数で調節してください。ソースでは 0.2 を指定していますが,0.8にすると 下の図の右側のように丸みが大きくなります。

bendto.pngbendto.png

roundrect: 隅を丸めた矩形を描く

矩形の丸めのサイズを roundrect の前に指定します。

-10 -10 250 160 10 grid
/p1{ 20  20}def
/p2{180 120}def
p1 p2 15 roundrect stroke
ps image

roundrect: 中心を指定して隅を丸めた矩形を描く

roundrect と同様ですが,中心の座標と 幅と高さを指定して描きます。中央のオブジェクトを囲むようなデザインに使えます。

-10 -10 250 160 10 grid
/cntr{ 90 70}def
cntr 100 90 15 croundrect stroke
cntr 4 circle fill
cntr moveto
(Center) 30 croman
ps image

lattice: 単純な格子を描く

/p1 {20 20} def
/p2 {160 140} def
p1 p2 20 lattice
lattice.png

circle: 円を描く

/rad2 70 def
80 80 2.5 circle fill
80 80 85 circle stroke
png figs

ellipse: 楕円を描く


-10 -10 210 170 10 grid
90 60 1.2 circle fill
90 60 70 40 ellipse stroke
png figs

arc: 円弧を描く

Postscript ネイティブの命令で,次のように中心の座標,半径,開始角,終了角を指定して描画できます。 扇型の描画には中心と両端を結ぶ直線を lineto で引くことになります。

-10 -10 410 170 10 grid
90 40 1.2 circle fill  % 中心点
190 40 1.2 circle fill % 中心点
90 40 50 0 120 arc stroke
190 40 50 0 120 arc fill
% 扇型
290 40 moveto 
290 40 50 0 120 arc
290 40 lineto fill
png figs

extendpoints/headextendpoints/tailextendpoints:与えた2点から延長した点を返す

2点を結ぶとき,両端,または片側に一定の割合で延長したいときがあります。 このコマンドは,2つの座標かを使って計算してスタックに収納します。それを使って線や点を 描くのに使う補助的な役割です。点を打つための座標を求めるには,簡単なスタック操作を行ってください。

/p1{ 60  10}def
/p2{ 150 30}def
/p3{ 60  40}def
/p4{ 150 60}def
/p5{ 60  70}def
/p6{ 150 90}def
/p7{ 60  100}def
/p8{ 150 120}def
p1 p2 line
p3 p4 0.25 extendpoints line 
p5 p6 0.25 headextendpoints line 
p7 p8 0.25 tailextendpoints line
png figs

tcross:与えた2点から延長した点を返す

p1 を通り,p2, p3を結ぶ直線への垂線の足を求めるコマンドです。 p1,p2,p3の6個の座標を渡すと結果を計算してスタックに格納します。
注意:垂直な線分を含む時には,ゼロ割の例外によってエラーになります(その場合の計算は簡単ですね)。

/p1{30 50}def
/p2{200 300}def
/p3{350 100}def
p1 p2 p3  tcross % 垂線の足を求める
/y0 exch def  % スタックからy座標を取り出す
/x0 exch def  % スタックからy座標を取り出す
/p0{x0 y0}def
black
p2 p3 line
[2 2]0 setdash
p0 p1 line
png figs

mean: 2点の中点を求める

中点をほしいことが多いので用意したものです。下の例では p1 と p2 の中点のデータをpMに格納して使っています

/p1{40 20}def
/p2{180 110}def
/pM {p1 p2 mean}def
p1 p2 line
pM 3 circle fill
png figs

さまざまの矢印を描く — arrows.pslib

まっすぐな矢印と, 円弧形の矢印を描画できます。 どの矢印も,矢じりが片方に付いたものと,両方に付いたものとがあります。

これらは 小波が作ったものが大半ですが,一部に Blue Book (Adobe 社公開資料) 所載のものが入っています。

ライブラリ名

arrows.pslib download

手続き名

arrow (まっすぐな矢印 from "Blue Book"), arcarrow(円弧単方向), arcarrowb(両方向), curvearrow(Bezier 曲線の矢印単方向), curvearrowb(Bezier 曲線の矢印両方向),

使い方の例

次のパラメータは共通

stemthick :  軸の太さ 
headthick :  矢じりの太さ 
headlength:  矢じりの長さ 

真っ直ぐな矢印

片矢のタイプ
x_from, y_from: 根元 
x_to, y_to : 先端  
 x_from y_from x_to y_to stemthick headthick headlength arrow fill/stroke
両矢のタイプ
 x_from y_from x_to y_to stemthick headthick headlength arrowb fill/stroke
サンプルファイル(下は描画結果)
arrowsample.png

円弧状の矢印

cx, cy:  円弧の中心の座標 
radius:  円弧の半径 
from_angle: 開始角 
to_angle: 終了角 
片矢のタイプ
 cx cy radius from_angle to_angle stemthick headthick headlength arcarrow fill/stroke
両矢のタイプ
 cx cy radius from_angle to_angle stemthick headthick headlength arcarrowb fill/stroke
サンプルファイル(下はこれによる描画結果)
arcarrowsample.png

曲線の矢印

パラメータの意味については図を参考にしてください。 片矢のタイプ
x0 y0 x1 y1 x2 y2 x3 y3 curvearrow 
(注意!この矢印は fill 型のものしかない)
両矢のタイプ
x0 y0 x1 y1 x2 y2 x3 y3 curvearrowb 
(注意!この矢印は fill 型のものしかない)
サンプルファイル(下はこれによる描画の結果)
curvedarrowsample.png

図中の p0 等は x0 y0 等の座標の組