MetaPost bezeichnet sowohl eine Programmiersprache als auch den zugehörigen Interpreter . Beide basieren auf Donald Knuths Metafont - Sprache und -Interpreter. MetaPost erzeugt Vektorgrafiken aus geometrisch-algebraischen Beschreibungen. Die Sprache verwendet die deklarative Syntax von Metafont zur Bearbeitung von Linien, Kurven, Punkten und geometrischen Transformationen.
- Metafont erzeugt Schriftarten in Form von Bilddateien (im .gf-Format) mit zugehörigen Schriftmetrikdateien (im .tfm-Format), während MetaPost EPS- , SVG- oder PNG -Dateien erzeugt.
- Die Ausgabe von Metafont besteht aus den Schriftarten in einer festen Auflösung in einem rasterbasierten Format, während die Ausgabe von MetaPost vektorbasierte Grafiken (Linien, Bézierkurven ) sind.
- Metafont gibt Farben monochrom aus, MetaPost hingegen verwendet RGB- oder CMYK- Farben.
- Die MetaPost-Sprache kann Textbeschriftungen auf den Diagrammen enthalten, entweder Zeichenketten aus einer bestimmten Schriftart oder alles andere, was mit TeX gesetzt werden kann .
- Ab Version 1.8 ermöglicht Metapost Gleitkommaarithmetik mit 64 Bit (Standard: 32-Bit-Festkommaarithmetik).
Viele Einschränkungen von MetaPost resultieren aus Funktionen von Metafont. Beispielsweise unterstützt MetaPost nicht alle PostScript -Funktionen . Insbesondere können Pfade nur ein Segment haben (sodass Regionen einfach verbunden werden ) und Regionen können nur mit einheitlichen Farben gefüllt werden. PostScript Level 1 unterstützt Kachelmuster und PostScript 3 unterstützt Gouraud-Schattierung .
Verfügbarkeit und Nutzung
MetaPost wird mit vielen Distributionen des TeX- und Metafont-Frameworks ausgeliefert, beispielsweise ist es in den Distributionen MiKTeX und TeX Live enthalten.
Das von Metapost erzeugte gekapselte PostScript kann über Standardbefehle zur Grafikeinbindung in LaTeX- , ConTeXt- und TeX- Dokumente eingebunden werden . Die Ausgabe des gekapselten PostScripts kann auch mit der PDFTeX- Engine verwendet werden und erzeugt so direkt PDF-Dateien . Diese Funktionalität ist in ConTeXt und im LaTeX-Grafikpaket implementiert und kann über die Makrodatei `supp-pdf.tex` aus reinem TeX genutzt werden.
ConTeXt und LuaTeX unterstützen das Einbinden von MetaPost-Code in die Eingabedatei. Das Einbinden von MetaPost-Code in LaTeX ist auch mithilfe von LaTeX-Paketen möglich, zum Beispiel gmpoder mpgraphics.
Beispiele
Dies ist eine einzelne Datei.Beispiel.mpDie Verarbeitung durch den MetaPost-Interpreter (über den Befehl mpostunter Linux ) erzeugt drei EPS-Dateien.Beispiel 1,Beispiel 2,Beispiel 3Diese sind rechts abgebildet.

transform pagecoords ; pagecoords := identity scaled 10 mm shifted ( 100 mm , 150 mm ); 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 15 mm shifted ( 100mm , 150mm ); beginfig ( 3 ); % Pfade deklarieren path p [ ] , p [] t ; % Punkte durch Definition von Beziehungen festlegen z1 = ( 0 , 0 ) ; z2 = z1 + 2 up ; 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 ]; % Pfade einrichten 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 ; % Transformierte Versionen von Pfaden und Punkten definieren 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 . 5 white ; draw z3t --- z4t withcolor . 5 white ; 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 ; byeDie drei resultierenden EPS-Dateien können in TeX über den Befehl von LaTeX\includegraphics , den Befehl von ConTeXt\externalfigure , den Befehl von Plain TeX \epsfboxoder (in Plain pdftex) den \convertMPtoPDFBefehl von verwendet werden.supp-pdf.texUm das dritte Diagramm anzuzeigen oder auszudrucken, ist diese Einbindung erforderlich, da die TeX-Schriftarten ( Computer Modern ) nicht standardmäßig in den von MetaPost erzeugten EPS-Dateien enthalten sind.
Siehe auch
Referenzen
- Hagen, Hans. „MetaFun“ (Module für Metapost).
- Knuth, Donald (1986). Das METAFONT-Buch . Computer und Schriftsatz . Band C. Addison-Wesley . ISBN 0-201-13444-6Die
- „Comprehensive T E X Archive Network“ ( CTAN ). Repository des T E X-Quellcodes und Hunderter von Erweiterungen und Stildateien.
- „(La)TeX Navigator bietet 305 einfache MetaPost-Beispiele .“ Archiviert vom Original am 27.07.2013 . Abgerufen am 17.11.2006 .
- Hoekwater, Taco (2006). „MetaPost-Entwicklungen – Herbst 2006“ (PDF) . TUGboat . 27 (1).
Externe Links
- Die TeX Users Group ( TUG ) http://www.tug.org/ hat eine Seite, die MetaPost gewidmet ist: http://www.tug.org/metapost.html
