MetaPost

MetaPost

Logotipo de MetaPost
Datos básicos

Mantenedor Taco Hoekwater
desarrollador John D. Hobby
Año de publicación 1994
Versión actual  1.212
(18 de octubre de 2010)
Versión preliminar actual 1.902
(23 de abril de 2014)
sistema operativo Multiplataforma
lenguaje de programación C.
categoría Suplicando
Licencia LGPL
foundry.supelec.fr/projects/metapost/

MetaPost es, por un lado, un lenguaje de programación y, por otro lado, el único intérprete conocido para él. Ambos se derivan del lenguaje e intérprete Metafont de Donald E. Knuth . MetaPost puede generar diagramas en PostScript o como gráficos vectoriales SVG a partir de una descripción geométrica / algebraica. El lenguaje tiene la misma sintaxis que Metafont para crear líneas, curvas, puntos y transformaciones geométricas.

Comparación de Metafont y MetaPost

  • Metafont fue creado para la producción de fuentes con los archivos Fontmetric asociados. MetaPost, por otro lado, crea archivos PostScript.
  • La salida de Metafont consta de fuentes con una determinada resolución en un formato de trama. MetaPost crea gráficos basados ​​en vectores.
  • A diferencia de las versiones monocromáticas de Metafont, MetaPost utiliza un esquema RGB simple .
  • MetaPost también puede adjuntar etiquetas a los diagramas. Estos pueden ser textos de una fuente específica o simplemente cualquier cosa que se pueda configurar con TeX .
  • El intérprete Metafont fue desarrollado por Knuth bajo una licencia de código abierto. Esto permitió a John D. Hobby adaptar el intérprete para su uso, creando así MetaPost.

utilizar

MetaPost se suministra con muchas distribuciones de TeX y Metafont. La salida de MetaPost se puede utilizar fácilmente en documentos TeX, ConTeXt y LaTeX mediante comandos estándar.

Ejemplos

Este es un solo archivo example.mpque crea tres archivos EPS. Se debe mpost DATEINAMEllamar al comando para editar el archivo de entrada .

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

literatura

enlaces web