Top Qs
Chronologie
Chat
Contexte
MetaPost
langage de programmation informatique De Wikipédia, l'encyclopédie libre
Remove ads
MetaPost est un système qui implémente un langage de construction de figures et est interpréteur de ce langage. Il dérive du système Metafont du professeur Donald Knuth, et est spécialisé dans la production de diagrammes en langage PostScript à partir d'une description géométrique et algébrique. Le langage permet, en utilisant la syntaxe du langage Metafont, de combiner des lignes, des courbes, des points et d'effectuer des transformations géométriques.
Toutefois, MetaPost se différencie de Metafont sur plusieurs points :
- Metafont est conçu pour produire des polices de caractère, sous forme de fichiers d'image (d'extension .gf) et des fichiers associés (d'extension .tfm) contenant des informations métriques de police, tandis que MetaPost produit des fichiers au format PostScript ;
- Metafont produit des polices avec une résolution fixe dans un format matriciel, tandis que MetaPost produit des graphiques dans un format vectoriel, le PostScript ;
- Metafont travaille en monochrome, tandis que MetaPost gère les couleurs en employant un format RVB
- Le langage MetaPost permet d'inclure des boîtes contenant du texte dans les diagrammes, des chaînes de caractère écrites dans une police donnée, ou beaucoup de choses qui peuvent être composées avec TeX ;
- L'interpréteur de Metafont a été écrit par Donald Knuth sous une licence de source libre, permettant à John D. Hobby et plus tard à Ulrik Vieth d'adapter l'interpréteur à leurs propres exigences, pour donner MetaPost.
Remove ads
Disponibilité, utilisation
MetaPost est fourni avec beaucoup de distributions courantes de TeX et de Metafont. En particulier, il se trouvait dans l'ancienne distribution teTeX et se trouve dans la distribution TeX Live, pour les systèmes d'exploitation Linux, Unix et MacOS.
On trouve aussi le code source de l'interpréteur MetaPost prêt à être compilé sur https://gitlab.lisn.upsaclay.fr/texlive/metapost. On obtient ainsi un exécutable nommé mpost.
MetaPost produit, par défaut, du PostScript qu'il est possible de facilement inclure dans les documents TeX et LaTeX au moyen de commandes d'insertion de fichier. Il est aussi possible de produire d’autres formats comme le PDF, le SVG ou le PNG.
Depuis la création de LuaTeX, MetaPost a été incorporé au moteur TeX comme bibliothèque Lua (mplib). Son utilisation avec TeX et LaTeX est alors aisée. Avec LuaLaTeX, on pourra utiliser les packages luamplib ou minim-mp.
Remove ads
Exemples
Résumé
Contexte
Voici un fichier exemple.mp qui une fois traité par l'interpréteur de MetaPost (à l'aide de la commande mpost sur Linux) donne trois fichiers exemple.1, exemple.2, et exemple.3 au format eps. Ceux-ci sont dessinés à droite.
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); path p[],p[]t; 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]; 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; 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 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
Les trois fichiers résultants au format eps peuvent être utilisés en TeX par l'intermédiaire de la commande LaTeX \includegraphics, avec la commande Plain TeX \epsfbox, ou avec la commande (de pdftex) \convertMPtoPDF du fichier supp-pdf.tex. Pour visualiser ou imprimer le troisième graphique, l'insertion du fichier eps dans un fichier TeX est nécessaire, car les polices de TeX ne sont pas incluses dans les fichiers eps produits par MetaPost.
Comme il s’agit d’un langage de programmation, les dessins tels que les fractales se produisent assez aisément.
u:= 1cm; beta := 30; color arbreC; arbreC := (0.6,0.4,0.4); % transformation géométrique rotation et homothétie vardef similitude(expr A,B,alpha,mu)= save C,D; pair C,D; C := (xpart B-xpart A,ypart B-ypart A); D := (mu*((xpart C)*cosd(alpha)+(ypart C)*sind(alpha)),mu*(-(xpart C)*sind(alpha)+(ypart C)*cosd(alpha))); (xpart A + xpart D,ypart A+ypart D) enddef; % la fonction récursive qui dessine l’arbre vardef arbre(expr A,B,n)= % A et B sont deux pairs MetaPost définissant le segment de % base définissant le carrée de base de l’arbre % n est la profondeur de récursion souhaitée save C,D,E; pair C,D,E; % C est la rotation de A autour de B d’angle -90 C := similitude(B,A,-90,1); % D est la rotation de B autour de A d’angle 90 D := similitude(A,B,90,1); % on dessine le carré obtenu fill (A--B--C--D--cycle) withcolor arbreC; % test pour arrêter la récursion if(n>0): % on calcule le point E qui est le troisième point du triangle % rectangle en E, EDC, ou angle(EDC)=beta E := similitude(D,C,beta,cosd(beta)); % on dessine l’arbre issu du segment DE arbre(D,E,n-1); % on dessine l’arbre issu du segment EC arbre(E,C,n-1); fi enddef; beginfig(1); pair A,B; A := (0,0); B := (-u,0); arbre(A,B,14); endfig; end.
Remove ads
Références et liens externes
- Le groupe d'utilisateurs de TeX http://www.tug.org/ a une page dédiée à MetaPost: http://www.tug.org/metapost.html (en anglais)
- John D. Hobby a une page à l'adresse http://cm.bell-labs.com/who/hobby/index.html et quelques autres pages et publications consacrées à MetaPost (en anglais)
- La page d'accueil de MetaPost : http://cm.bell-labs.com/who/hobby/MetaPost.html
- A User's Manual for MetaPost par John D. Hobby. Manuel disponible sous la forme d'un fichier mpman.ps distribué avec MetaPost, ou téléchargeable à partir du Site de Bell Labs. Il peut être aussi obtenu sous la forme d'un fichier au format PDF au CTAN.
- Cahiers GUTenberg, (ISSN 1140-9304), vol. no 41, nov. 2001. [lire en ligne].
- (en) Donald Knuth : The MetafontBOOK, (Computers and Typesetting Volume C) Addison-Wesley 1986. (ISBN 0-201-13444-6)
- (en) Comprehensive TeX Archive Network: http://www.ctan.org/. Dépôt des sources TeX et de centaines d'additifs et de feuilles de style.
- Asymptote un successeur moderne de MetaPost, avec une syntaxe proche de C++.
- Des exemples, des animations...http://melusine.eu.org/syracuse/metapost/
- Des exemples sur le site de l’association GUTenberg dédié à MetaPost
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads