MetaPost

MetaPost
Información general
Desarrollador Taco Hoekwater (Autor: John D. Hobby)
Lanzamiento inicial 1994
Licencia Public Domain
Versiones
Última versión estable 1.001 ( 14 de noviembre de 2007)
Enlaces

MetaPost constituye un lenguaje de programación y el único intérprete del lenguaje de programación MetaPost. Ambos han sido derivados a partir del lenguaje y del intérprete de Metafont, creados por Donald Knuth. MetaPost produce diagramas utilizando el lenguaje de programación PostScript a partir de una descripción geométrico-algebraica. MetaPost comparte la sintaxis declarativa de Metafont para manipular líneas, curvas, puntos y transformaciones geométricas. Sin embargo,

  • Metafont ha sido creado para producir fuentes tipográficas, en forma de archivos de imagen (en formato .gf) junto con archivos de medición asociados (en formato .tfm), mientras que MetaPost produce archivos de PostScript encapsulado.
  • La salida de Metafont consiste en fuentes a una determinada resolución en un formato rasterizado, mientras que la salida de MetaPost es un gráfico postscript vectorizado (líneas, curvas de Bézier).
  • La salida de Metafont es monocroma, mientras que MetaPost utiliza una especificación RGB.
  • El lenguaje MetaPost puede incluir etiquetas de texto en los diagramas, así como cadenas de texto de una fuente específica, o prácticamente todo lo que pueda ser tipografiado utilizando TeX.
  • El intérprete de Metafont fue escrito por Donald Knuth bajo una licencia de código libre, permitiendo a John D. Hobby (y, más tarde, a Ulrik Vieth) la adaptación del intérprete a sus propios fines, obteniendo MetaPost.
  • MetaPost no tiene un logotipo destacado y, aunque lo tuviera, posiblemente tendría que basarse en TeX para renderizarlo.

Disponibilidad y utilización

MetaPost se distribuye incluido en muchas de las distribuciones de TeX y Mefafont. Aparece, por ejemplo, en la distribución teTeX, común en plataformas Linux y Unix (incluyendo Mac OS X).

El postscript encapsulado producido por MetaPost se puede incluir fácilmente en documentos TeX, ConTeXt y LaTeX a través de órdenes estándar de inclusión de eps. Es particularmente útil la habilidad de incluir esta salida en PdfTeX, dialecto de TeX, de manera que se obtiene un formato de documento multiplataforma desde TeX en un único paso. Esta habilidad aparece implementada en ConTeXt y en el paquete de gráficos de LaTeX y puede ser utilizada desde TeX gracias a la macro supp-pdf.tex. ConTeXt también permite la creación de archivos MetaPost sin la necesidad de crear un archivo TeX.

Ejemplos

A continuación aparece el contenido del archivo example.mp. Cuando es procesado por el intérprete de MetaPost (utilizando la orden mpost en Linux), se producen tres archivos de imagen eps: example.1, example.2 y example.3, que aparecen a la derecha.

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

Los tres archivos eps resultantes se pueden incluir en LaTeX usando la orden \includegraphics, en ConTeXt \externalfigure y en simple TeX utilizando \epsfbox o en simple pdfTeX \convertMPtoPDF contenido en supp-pdf.tex. Para ver o imprimir el tercer diagrama, es necesario incluir el macro supp-pdf.tex ya que las fuentes de TeX no se incluyen en los archivos eps generados por MetaPost.

Véase también

Referencias y enlaces externos