MetaPost

MetaPostとは



MetaPostは、プログラミング言語であり、そのインタプリタを指します。METAFONTという別の言語が元になっており、ドナルド・クヌースによって開発されました。MetaPostは、特にPostScript形式での図形描画においてその能力を発揮します。

MetaPostの大きな特徴として、METAFONTから受け継いだ宣言的な構文があります。これは、描画する図形の性質や関係性を記述することで、具体的な描画手順を指示するのではなく、望む結果を定義するアプローチです。

MetaPostの使用例



MetaPostインタプリタ(通常、Linux環境では`mpost`コマンドを通じて利用)は、例えば`example.mp`という名前の単一のファイルから、`example.1`、`example.2`、`example.3`といった複数のEPSファイルを生成できます。これらのEPSファイルは、描画された図形を表しており、以下のような方法で利用できます。

LaTeX環境で`\includegraphics`コマンドを使用
ConTeXt環境で`\externalfigure`コマンドを使用
plain TeXで`\epsfbox`コマンドを使用
`supp-pdf.tex`を通じて(Plain pdftexで)`\convertMPtoPDF`コマンドを使用

コード例



以下にMetaPostのコード例を示します。この例では、いくつかの図形を描画しています。

metapost
transform pagecoords;
pagecoords:=identity scaled 10mm shifted (100mm,150mm);
beginfig (1)
fill ((0,0)(2,0)(2,1)(1,1)(1,2)(0,2)cycle)
transformed pagecoords withcolor green;
draw ((2,0)..(2,1)..(1,1)..(1,2)..(0,2))
transformed pagecoords;
drawarrow ((0,0)--(2,2)) transformed pagecoords;
endfig;
beginfig (2)
draw (for i=0 upto 7: dir (135i)-- endfor cycle)
transformed pagecoords;
endfig;
pagecoords:=identity scaled 15mm shifted (100mm,150mm);
beginfig (3);
 % declare paths to be used
path p[],p[]t;
 % set up points by defining relationships
z1=(0,0); z2=z1+2up;
z3=z1+whateverdir (60)=z2+whateverdir (-50);
z4=z3+(-1.5,-.5);
z5=z1+dir (135);
z0=whatever[z1,z2]=whatever[z3,z4];
 % set up paths
p0=fullcircle yscaled .5 rotated 45 shifted z0 ;
p1=z2-z4..z0..z3-z1;
p2=p1 cutbefore p0 cutafter p0;
p3=p0 cutbefore p1 cutafter p1;
p4=p2-p3-cycle;
 % define transformed versions of paths and points
for i=0 upto 4: p[i]t=p[i] transformed pagecoords; endfor
for i=0 upto 5: z[i]t=z[i] transformed pagecoords; endfor
 % do some drawing
fill p4t withcolor (1,1,0.2);
draw z1t---z2t withcolor .5white;
draw z3t---z4t withcolor .5white;
pickup pencircle;
draw p0t dashed withdots scaled .3;
draw p1t dashed evenly;
draw p2t withcolor blue;
draw p3t withcolor red;
label.lrt (btex $z_0$ etex, z0t);
label.llft (btex $z_1$ etex, z1t);
label.top (btex $z_2$ etex, z2t);
label.rt (btex $z_3$ etex, z3t);
label.llft (btex $z_4$ etex, z4t);
for i=0 upto 4:
drawdot z[i]t withpen pencircle scaled 2;
endfor
endfig;
bye


関連事項



MetaPostに関係する技術やソフトウェアには、以下のようなものがあります。

ConTeXt
PSTricks
PGF/TikZ
METAFONT
METATYPE1
Asymptote

参考文献



MetaPost TeX Wiki - TeX Wiki内のMetaPostの解説ページ
METAPOST - 鈴木秀幸のページ。松山道夫より引き継いで日本語MetaPostのソース管理・配布を行なっている。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。