MetaPost

Da Wikipedia, l'enciclopedia libera.
MetaPost

Screenshot di MetaPost
Sviluppatore Taco Hoekwater
Ultima versione 1.207 (8 dicembre 2009)
Sistema operativo Multipiattaforma
Linguaggio C
Genere Computer grafica
Licenza Pubblico dominio
(Licenza libera)
Sito web Sito degli sviluppatori

MetaPost si riferisce tanto al nome del linguaggio di programmazione per la generazione di diagrammi quanto all'interprete del linguaggio stesso. L'output generato è in PostScript.

MetaPost condivide la sintassi per la manipolazione di rette, curve, punti e trasformazioni geometriche con l'interprete Metafont; tuttavia vi sono alcune differenze con il programma di Donald Knuth:

  • Metafont viene utilizzato per produrre font, con file di immagine (di estensione .gf) e file metrici (file .tfm), mentre MetaPost genera file eps.
  • L'output di Metafont è monocromatico mentre l'output di MetaPost utilizza l'RGB.

Molte delle limitazioni di Metapost derivano dalle caratteristiche di Metafont. Ad esempio la bassa precisione con cui vengono rappresentati i numeri, sufficiente per rappresentare le coordinate in un grafico piccolo ma potrebbe creare problemi per un sistema di coordinate sufficientemente esteso. Inoltre Metapost non supporta tutte le caratteristiche di PostScript (ad esempio PostScript 3 supporta il Gouraud shading). Per risolvere questi problemi è stato sviluppato Asymptote.

Esempi[modifica | modifica sorgente]

Il seguente file example.mp produce una volta interpretato con MetaPost (tramite il comando mpost sotto Linux) produce tre file eps example.1, example.2, example.3. I grafici sono riportati a destra.

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

I file così generati possono essere utilizzati in TeX attraverso i comandi LaTeX \includegraphics , ConTeXt \externalfigure, Plain TeX \epsfbox, o (in Plain pdftex) tramite il comando \convertMPtoPDF da supp-pdf.tex. Per vedere o stampare il terzo grafico l'inclusione è necessaria, dal momento che i font di Metafont non son inclusi nei file eps generati da MetaPost.

Voci correlate[modifica | modifica sorgente]

Altri progetti[modifica | modifica sorgente]

Software libero Portale Software libero: accedi alle voci di Wikipedia che trattano di Software libero