MetaPost

MetaPost

Logo MetaPost
Dati di base

Manutentore Taco Hoekwater
sviluppatore John D. Hobby
Anno di pubblicazione 1994
Versione attuale  1.212
(18 ottobre 2010)
Versione preliminare attuale 1.902
(23 aprile 2014)
sistema operativo Cross-platform
linguaggio di programmazione C.
categoria Supplica
Licenza LGPL
foundry.supelec.fr/projects/metapost/

MetaPost è da un lato un linguaggio di programmazione e dall'altro l'unico interprete conosciuto per questo. Entrambi derivano dalla lingua e dall'interprete Metafont di Donald E. Knuth . MetaPost può generare diagrammi in PostScript o come grafica vettoriale SVG da una descrizione geometrica / algebrica. Il linguaggio ha la stessa sintassi di Metafont per creare linee, curve, punti e trasformazioni geometriche.

Confronto tra Metafont e MetaPost

  • Metafont è stato creato per la produzione di caratteri con i file Fontmetric associati. MetaPost, d'altra parte, crea file PostScript.
  • L'output di Metafont è costituito da caratteri a una certa risoluzione in un formato basato su raster. MetaPost crea grafica vettoriale.
  • In contrasto con le edizioni monocromatiche di Metafont, MetaPost utilizza un semplice schema RGB .
  • MetaPost può anche allegare etichette ai diagrammi. Questi possono essere testi da un font specificato o semplicemente qualsiasi cosa che può essere impostata con TeX .
  • L'interprete Metafont è stato sviluppato da Knuth con una licenza open source . Questo ha permesso a John D. Hobby di adattare l'interprete al suo utilizzo, creando così MetaPost.

uso

MetaPost è fornito con molte distribuzioni da TeX e Metafont. L'output di MetaPost può essere facilmente utilizzato nei documenti TeX, ConTeXt e LaTeX tramite comandi standard.

Esempi

Questo è un singolo file example.mpche crea tre file EPS. Il comando deve essere mpost DATEINAMEchiamato per modificare il file di input .

Metapost ex.png
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

letteratura

link internet