MetaPost

MetaPostはプログラミング言語、およびそのインタプリタの両方を意味する。ドナルド・クヌースが作ったMETAFONTに由来する。PostScript内における図形の描写に優れる。METAFONTの優れた宣言構文を共有している。

例
MetaPostインタプリタ (Linux上でmpostコマンドを経由) にて生成された、example.mpという単一のファイルは、3つのepsファイルexample.1, example.2, example.3を生成する。右のそれらが描画されたものである。

これら3つのepsファイルの結果は以下で使うことが出来る。
LaTeX経由のTeXにて\includegraphicsコマンド
ConTeXtにて\externalfigure
plain TeX\epsfboxコマンド
supp-pdf.texからの(Plain pdftexにて)\convertMPtoPDFコマンド

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

関連項目 
 ConTeXt
 PSTricks
 PGF/TikZ
 METAFONT
 
 Asymptote

脚注・出典 

 MetaFun (modules for Metapost) by Hans Hagen, 
Donald Knuth: The METAFONTbook, (Computers and Typesetting Volume C)  Addison-Wesley 1986.  ISBN 0-201-13444-6
Comprehensive TEX Archive Network (CTAN): http://www.ctan.org/. Repository of the TEX source and hundreds of add-ons and style files.
(La)TeX Navigator provides 305 simple MetaPost examples: http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html
Taco Hoekwater: MetaPost developments—autumn 2006. TUGboat 27:1 (2006).

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

METAPOST
PostScript
ベクターグラフィックス・マークアップ言語