MetaPost

Van Wikipedia, de gratis encyclopedie

MetaPost

MetaPost-Logo
Basisdaten

Hauptentwickler Taco Hoekwater
Entwickler John D. Hobby
Erscheinungsjahr 1994
Aktuelle Version 1.212
(18. Oktober 2010)
Aktuelle Vorabversion 1.902
(23. April 2014)
Betriebssystem Plattformübergreifend
Programmier­sprache C
Kategorie Schriftsatz
Lizenz LGPL
foundry.supelec.fr/projects/metapost/

MetaPost ist zum einen eine Programmiersprache und zum anderen der einzig bekannte Interpreter für diese. Beide sind von Donald E. Knuths Metafont-Sprache und -Interpreter abgeleitet. MetaPost kann Diagramme in PostScript oder als SVG-Vektorgrafik aus einer geometrischen/algebraischen Beschreibung erzeugen. Die Sprache hat die gleiche Syntax wie Metafont, um Linien, Kurven, Punkte und geometrische Transformationen zu erzeugen.

Gegenüberstellung von Metafont und MetaPost[Bearbeiten | Quelltext bearbeiten]

  • Metafont ist zur Produktion von Schriften mit den dazu assoziierten Fontmetric-Dateien erschaffen. MetaPost hingegen erzeugt PostScript-Dateien.
  • Die Ausgabe von Metafont besteht aus Schriften bei einer bestimmten Auflösung in einem rasterbasierten Format. MetaPost erzeugt vektorbasierte Grafiken.
  • Im Gegensatz zu den monochromen Ausgaben von Metafont nutzt MetaPost ein einfaches RGB-Schema.
  • MetaPost kann auch Label an Diagramme anbringen. Dies können Texte aus einer angegebenen Schrift oder einfach alles, was mit TeX gesetzt werden kann, sein.
  • Der Metafont-Interpreter wurde von Knuth unter einer Open-Source-Lizenz entwickelt. Dies erlaubte John D. Hobby, den Interpreter zu seinem Nutzen zu adaptieren, somit entstand MetaPost.

Benutzung[Bearbeiten | Quelltext bearbeiten]

MetaPost wird mit vielen Distributionen von TeX bzw. Metafont ausgeliefert. Die Ausgabe von MetaPost kann leicht in TeX-, ConTeXt- und LaTeX-Dokumenten über Standardkommandos benutzt werden.

Beispiele[Bearbeiten | Quelltext bearbeiten]

Dies ist eine einzelne Datei example.mp, die drei EPS-Dateien erzeugt. Zur Bearbeitung der Eingabedatei ist der Befehl mpost DATEINAME aufzurufen.

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+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 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 

Literatur[Bearbeiten | Quelltext bearbeiten]

Weblinks[Bearbeiten | Quelltext bearbeiten]