MetaPost

MetaPost是一个程序语言和它的编译器的名字，衍生于高德纳的Metafont。MetaPost擅长通过数学描述制作矢量图，生成的图片为PostScript格式。它的语法来自Metafont。

## 实例

这个文件example.mp通过MetaPost的编译器编译（在Linux系统中使用`mpost`命令）之后产生了3个EPS文件： example.1, example.2, example.3。这三个文件就是右边的三张图

<image>

```postscript
 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 up to 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+whatever*dir (60)=z2+whatever*dir (-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 up to 4: p[i]t=p[i] transformed pagecoords; endfor
     for i=0 up to 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 up to 4:
         drawdot z[i]t withpen pencircle scaled 2;
     endfor
 endfig;
 bye
```

产生的3个eps文件可以直接用在TeX中（通过LaTeX的`\includegraphics`命令、ConTeXt的`\externalfigure`命令、Plain TeX的`\epsfbox`命令，或者Plain pdftex中来自supp-pdf.tex的`\convertMPtoPDF`命令。为了看或者打印这三张图片，这些引用是必须的，因为TeX的字体(Metafont)并不包含在MetaPost产生的eps文件中。

## 参考

- 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: https://web.archive.org/web/20130727021112/http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html
- Taco Hoekwater: MetaPost developments—autumn 2006 . TUGboat 27:1 (2006).

## 外部链接

- The TeX users group (TUG) http://www.tug.org/ has a page devoted to MetaPost: http://www.tug.org/metapost.html
- Active development of MetaPost continues at https://web.archive.org/web/20070929092912/http://foundry.supelec.fr/projects/metapost/
- Functional MetaPost allows MetaPost to be used from the functional programming language Haskell
- John D. Hobby has a homepage at https://web.archive.org/web/20131003040005/http://ect.bell-labs.com/who/hobby/index.shtml and some other pages and publications devoted to MetaPost, though these are now a little dated
- Historic MetaPost homepage: https://web.archive.org/web/20081212090123/http://ect.bell-labs.com/who/hobby/MetaPost.shtml
- A User's Manual for MetaPost John D. Hobby. Available as a file mpman.ps distributed with MetaPost, or from the Bell Labs web site. Also available in PDF format from CTAN.

## 基本资料

- 编程范型：指令式，排版
- 设计者：John D. Hobby
- 开发者：Taco Hoekwater
- 软件版本周期：1.001
- 类型系统：推断类型, 动态类型, 强类型
- 受影响于：Metafont
- 操作系统：跨平台
- 许可证：公有领域
- 网站： Development website