超簡単な EPS ファイルの作り方

by Juli Yamashita



EPS file とは、Encapsulated PostScript file のことです。
点や線の座標データを EPS ファイルとして作り、ワープロやお絵描きソフトに読み込めば、
PostScript プリンタがあればきれいにプリントすることができます。
(もちろん、TeX との相性は抜群です。) 
ベクトルデータなので、図を拡大・縮小してもきれいなままです。
それほど難しいことはありませんので、簡単な絵なら自分でテキストファイルとして作成できます。

以下のフォーマットで半角英数文字のみのテキストファイルを作って下さい。
ファイル名は、 filename.eps のように .eps 拡張子をつけておきます。
NeXT や OPENSTEP マシンだと、.eps ファイルをダブルクリックするだけで、絵が表示されます。
うれしいことに、 Mac OS X 10.3 から EPS ファイルのレンダリング機能が復活し、
ファイルをダブルクリックするとちゃんと絵が見えますし (遅いけど。 ToyViewer を使いましょう!)、
 OmniGraffile  のようなお絵描きソフトにもちゃんとベクトルデータとして読み込めるようになりました。
(もちろん、編集するには Adobe Illustrator など EPS file を直接編集できるソフトが必要です。)


I. ファイルのフォーマット
------------------------------------------
%!PS-Adobe-2.0 EPSF-2.0
%%Title: filename.eps
%%Creator: MyName
%%Pages: 0 1
%%BoundingBox: x0 y0 x1 y1
%%EndComments

図形の記述

showpage
------------------------------------------

<解説>
% で始まる行はコメントです。
%! や %% はシステム制御用の特別なコメントのようです。
冒頭の数行は、このままの形式でお使い下さい。

%%Title: filename.eps  <-- このファイルのファイル名を入れて下さい。ただし、拡張子は .eps で。
%%Creator: MyName  <-- MyName は、あなたのお名前と置き換えて下さい。

%%BoundingBox: x0 y0 x1 y1
BoundingBox とは、図形が入る座標範囲の四角形のことです。
ウィンドウの範囲指定と似ていますが、
左下隅が原点 (x0, y0)、右上隅が (x1, y1) になります。
負の値でも大丈夫ですが、x0 <= x1, y0 <= y1 でないと変になります。

EPS ファイルは、ひとつのファイルで一枚の絵しか記述できません。


II. 図形記述のフォーマット

A. 図形の描き方

1.直線: "始点x座標値 始点y座標値 moveto 終点x座標値 終点y座標値 lineto stroke"

10.2 5 moveto 45 30.3 lineto
100 103 lineto  % 続けて線を引きたければ、終点のみ次々に記述すれば良い
110 150 lineto
...
stroke     % 最後にこれをつけないと描かれません

% 途中で改行してかまいません。'%'の後はコメントです。
% 最初に moveto で始点へ移動しているわけです。
% 相対値指定で線を描くには、"x方向移動量 y方向移動量 rlineto" を使います。


2. 円: "中心x座標 中心y座標 半径 0 360 arc stroke"

1000 600 50 0 360 arc stroke  

% 0, 360 は円弧の開始角度と終端角度で、これも指定すれば円弧の一部が書ける。


B. 線の種類の決め方

1. 線の太さ: "太さ setlinewidth"

5 setlinewidth   % これ以降書かれる線は、太さ 5 になる
0 setlinewidth   % これが最も細い線

2. 破線、鎖線など

[10 3] 0 setdash    % 次から書く線が破線になる
[20 3 2 3] 0 setdash   % 一点鎖線
[20 3 2 3 2 3] 0 setdash	  % 二点鎖線
[] 0 setdash	 % ふつうの線に戻す。何も指定していないと、ずっとこれが使われる


C. 繰り返し

PostScript はスタック型のプログラミング言語です。
従って、普通のプログラミング言語でできることは何でもできます。
PostScript で円周率を計算するプログラムを書いているつわものもいます。 [こちらです] 
が、スタック型言語になじみのない人にはちょっととっつきにくいかもしれません。
詳しくは参考文献をお読み下さい。

1. For loop

以下の3つのループの結果を比べてみてください。

0 10 100 {   % スタックの一番上の値が、0 から 100 まで、10 ずつ増加する。
  0 0 moveto    %  (0, 0) へ注目点を持っていく
  dup 100 lineto  %  dup で、スタックに詰まれている最初の値を複製。
		  % lineto は二つの値をスタックから取り出して消費する。
		  % この場合、dup で複製された for loop のカウンタ値と、
		  % その上に積まれた "100" の2個。
  stroke
} bind for

% C で書くなら、
%	int i;
%	for (i=0; i<=100; i+=10) drawLine( 0, 0, i, 100 );
% という雰囲気。
% ただし、drawLine( x0, y0, x1, y1 ) は、
% (x0, y0) から (x1, y1) へ直線を引く関数だと思ってください。


0 10 100 {
  dup 0 moveto
  dup 100 lineto
  stroke
} bind for

% C で書くなら、
%	for (i=0; i<=100; i+=10) drawLine( i, 0, i, 100 );


0 10 100 {
  dup 0  exch moveto  % exch で、スタックの頂上とその下の値を交換します。
  dup 100 lineto
  stroke
} bind for

% C で書くなら、
%	for (i=0; i<=100; i+=10) drawLine( 0, i, i, 100 );



<<< 参考文献 >>>

- Adobe Systems Inc.: PostScript Language Tutorial and Cookbook, Addison-Wesley, 1985.

- Adobe Systems Inc.: PostScript Language Reference Manual, Addison-Wesley, 1985.
(Second Edition, 1990)

- Adobe Systems Inc.: PostScript Language Language Program Design, Addison-Wesley, 1985.

--- 上から順に、Blue Book, Red Book, Green Book と呼ばれます。

実はもうひとつ、紫色の本もあります。

- Adobe Systems Inc.: Programming the Display PostScript System with NeXTstep, Addison-Wesley, 1992.


- Bill Casselman: Mathematical Illustrations - A Manual of Geometry and PostScript, Cambridge University Press, 2004.

--- UBC (カナダ) の数学の先生による Ghostscript を使って絵を描く教本です。
    二次元図形はむろん、三次元図形の描画や多角形の三角形分割まで、グラフィックスの基本が学べます。

以上


Back to Juli's home page

Last updated : Aug. 04, 2006