Profitez des offres Memoirevive.ch!
Dessiner avec LaTeX (troisième partie)

Attention ! Beware! Achtung! Let op! ¡Cuidado! Il va être question ici de codage, de langage de programmation. On fera même de brèves incursions dans le Terminal. Même si j'ai essayé de rester à un niveau relativement élémentaire, ceux qui sont irrémédiablement allergiques à tout ce qui n'est pas wysiwyg n'apprécieront certainement pas cet article. Autant le savoir !

Concernant LaTeX, je ne suppose pas ici que vous en êtes un expert, ni même un utilisateur régulier, mais que vous en maîtrisez les notions de base. Si ce n'est pas le cas je me permets de recommander à nouveau l'excellente Introduction à LaTeX sous Mac OS X de Fabien Conus, parue sur ce site-même en 2004 et que j'ai pu mettre à jour il y a (déjà !) trois ans.

Bon, allez, on y va quand même ? Oui ? C'est parti !


Aujourd'hui, je termine la série d'articles sur les principales solutions de dessin scientifique liées à LaTeX, série que j'avais entamée avec mfpic et MetaPost et poursuivie avec PSTricks et Tikz. La dernière solution que je présenterai ici s'appelle Asymptote.

image
Le connaisseur aura noté la présence de véritables asymptotes dans ce logo. :)

Puis je fera un petit bilan récapitulatif de toutes ces solutions, et enfin j'indiquerai quelques références bibliographiques utiles.

Toujours comme ses deux prédécesseurs, cet article se focalise moins sur l'apprentissage du programme présenté lui-même, Asymptote en l'occurence, que sur la façon optimale de l'utiliser sur Mac OS X. À ce sujet, je partirai du principe que vous disposez de versions récentes de la distribution TeX MacTeX et de l'interface graphique TeXShop, de loin les plus utilisés sur notre plateforme. À la fin de l'article j'indiquerai quelques liens utiles pour progresser dans l'apprentissage d'Asymptote proprement dit.

Faisons les présentations

De toutes les solutions de dessin pour LaTeX présentées dans cette série d'articles, Asymptote est certainement la plus puissante. Elle a été conçue en 2004 par trois chercheurs Canadiens toujours très actifs dans le développement de ce programme : John Bowman, Andrew Hammerlindl et Tom Prince. Si on leur demande la raison du choix du nom de leur programme, ils répondent : Well, it isn't the perfect graphics package, but we do think it is getting there asymptotically... (« Hé bien, ce n'est pas le module graphique parfait, mais nous pensons sincèrement qu'il tend asymptotiquement vers cette perfection… »).

Les auteurs d'Asymptote se sont de leur propre aveu fortement inspirés de MetaPost pour élaborer leur logiciel : il s'agit donc, comme MetaPost, à la fois d'un programme et d'un langage de programmation dont l'objectif est de produire des dessins de type scientifique destinés à être inclus dans un document LaTeX. Mais ils voulaient également par la même occasion pallier les lacunes de MetaPost :

  • comme on va le voir, le langage d'Asymptote possède une syntaxe proche de celles de CC++ et Java, plus au goût du jour et plus « fonctionnelle » que celle de MetaPost ;
  • il est possible avec Asymptote de faire une mise à l'échelle globale du dessin (je reviens également sur ce point plus bas) ;
  • Asymptote dispose de capacités de calcul plus étendues que celles de MetaPost puisqu'il effectue lesdits calculs en virgule flottante, tandis que MetaPost les effectue en virgule fixe (ceci dit, la prochaine version de MetaPost, actuellement au stade « alpha », permettra également les calculs en virgule flottante) ;
  • Asymptote fournit un support direct du dessin en 3D, ce que ne fait pas son « ancêtre » ;
  • cerise sur le gâteau, Asymptote permet de créer des animations (relativement) aisément, ce qui est loin d'être évident avec MetaPost.

Asymptote est intégré à TeX Live et donc MacTeX depuis 2009, et donc maintenant aisément utilisable sur Mac OS X. Avant, c'était la galère assurée pour l'y installer : il fallait obligatoirement compiler les sources du logiciel, ce qui en raison de ses dépendances n'était pas une partie de plaisir.

Asymptote en mode interactif

Si vous avez installé une version récente de MacTeX (2009 au moins) sur votre ordi, comme je l'ai supposé, vous disposez déjà d'Asymptote par la même occasion. Pour le vérifier, ouvrez le Terminal (François, reviens !) et entrez-y simplement la commande asy. Un message d'accueil et un prompt devraient alors s'afficher comme suit :

Welcome to Asymptote version 2.13 (to view the manual, type help)
>

Vous êtes alors dans le mode « interactif » d'Asymptote. Si vous suivez l'invitation du message d'accueil et entrez maintenant la commande help, vous devriez voir apparaître le manuel de référence d'Asymptote au format PDF.

Pour ma part, j'utilise intensément ce mode interactif, non pas pour consulter le manuel (je l'ai tiré à part depuis longtemps), mais pour… effectuer des calculs. Par exemple, entrez

sqrt(3^2 + 4^2)

et la réponse voulue (ici 5) s'affichera aussitôt au prompt suivant. En fait on peut effectuer toutes les opérations arithmétiques élémentaires dans le mode interactif d'Asymptote, et toutes les fonctions classiques y sont également intégrées, des exponentielles aux logarithmes en passant par les trigonométriques circulaires et hyperboliques. Et si nécessaire, à chaque nouveau calcul on peut utiliser le résultat précédent en faisant appel au symbole %.

Cette sorte de calculatrice intégrée s'avère ainsi suffisamment pratique pour remplacer la plupart du temps ma véritable calculatrice lorsque je suis sur mon ordinateur. A fortiori la très insuffisante calculette de Mac OS X.

On peut entrer également des instructions graphiques dans le mode interactif d'Asymptote, mais cela n'a guère d'intérêt en dehors de dessins très élémentaires. Dans 99 % des cas, il vaut beaucoup mieux stocker les instructions dans un fichier texte et les faire exécuter ensuite. C'est ce qui s'appelle en jargon informaticien le mode batch et c'est ce que nous allons utiliser maintenant.

Mode batch : fichier Asymptote, exécution et visualisation

Voici une série d'instructions en langage Asymptote produisant le dessin de la parabole y = x2, notre exemple commun à toutes les solutions graphiques testées dans cette série d'articles :

import graph;
// Unité du graphe
unitsize(1.25cm);
// Longueur des axes
real xmin = -2.75, xmax = 2.75;
real ymin = -0.5, ymax = 5;
// Définition de la fonction
real f(real x) {return x^2;}
// Tracé de la courbe
path parabole = graph(f, -2.2, 2.2, n = 22, operator ..);
draw(parabole, red);
// Tracé des axes
xaxis("$x$", xmin, xmax, Arrow);
yaxis("$y$", ymin, ymax, Arrow);
// Lignes tiretées
draw((2, 0) -- (2, 4) -- (-2, 4) -- (-2, 0), dashed);
// Tirets sur les axes
real c = 0.07;
draw((1, c) -- (1, -c));
draw((-1, c) -- (-1, -c));
for(int i = 1; i <= 3; ++i) {draw((-c, i) -- (c, i));};
// Labels
label("$O$", (0,0), SW);
label("$2$", (2, 0), S);
label("$-2$", (-2, 0), S);
label("$4$", (0, 4), NW);

Entrez cette succession d'instructions (inutile de tout retaper, un copier-coller fonctionnera très bien !) dans votre éditeur de texte favori. Pour ma part, pour écrire mes programmes Asymptote j'utilise l'éditeur de texte Aquamacs, portage Aqua de l'éditeur Unix GNU Emacs. Dans Aquamacs comme dans Emacs on peut activer un « mode Asymptote » qui permet (entre autres) la coloration syntaxique de son code, coloration bien pratique que j'ai essayé de reproduire ici.

Ensuite, sauvegardez ce programme sous un nom muni de l'extension asy, par exemple parabole.asy.

Retournez maintenant dans le Terminal et placez-vous dans le répertoire où vous avez sauvegardé votre fichier : par exemple, si vous l'avez placé sur votre bureau, entrez

cd ~/Desktop

(le symbole ~ est un synonyme du chemin /Users/votre_nom). Ceci fait, entrez l'instruction

asy parabole.asy

À l'endroit où vous avez sauvegardé votre fichier parabole.asy devrait alors apparaître, outre un fichier auxiliaire parabole.log contenant les éventuels messages d'erreur, un fichier parabole.eps. C'est ce fichier-là qui contient le schéma proprement dit. En effet, comme MetaPost, Asymptote écrit ses dessins en PostScript et les sort d'origine au format Encapsulated PostScript (EPS).

Reste à visualiser ce fichier EPS. Vous pouvez double-cliquer dessus et Aperçu devrait alors l'ouvrir après l'avoir converti en interne au format PDF.

Mais en fait, cette conversion et la visualisation auraient pu se faire dès le lancement de la commande asy. Car Asymptote sait convertir lui-même ses dessins en PDF, « à la volée », via l'utilitaire GhostScript installé par défaut avec MacTeX. Sur Mac OS X on a tout intérêt à procéder à cette conversion, puisque si votre système favori supporte largement le format PDF, il n'en fait pas de même pour PostScript.

Il aurait donc été préférable d'entrer dès le début l'instruction de compilation suivante, qui entraîne la conversion et la sauvegarde du dessin au format PDF ainsi que sa visualisation immédiate par votre lecteur PDF par défaut (Aperçu, Adobe Reader, Skim ou autre selon votre configuration) :

asy -f pdf -V parabole.asy

Grâce à l'option -f pdf passée à la commande asy, sera créé cette fois-ci un fichier parabole.pdf, lequel par le biais de l'autre option -V devrait être affiché à l'écran ainsi :

image

On aurait pu également placer au début du fichier parabole.asy l'instruction

settings.outformat = "pdf";

qui obligera Asymptote au moment de l'exécution à convertir le fichier de sortie en PDF. La commande d'exécution et de visualisation s'en trouve simplifiée : il suffit alors d'entrer dans le Terminal 

asy -V parabole.asy

On verra un peu plus bas comment s'arranger pour que le PDF soit le format de sortie par défaut des dessins d'Asymptote.

Quelques points de syntaxe

Examinons maintenant le fichier source que nous avons composé pour obtenir notre parabole. Bien qu'inspirée de MetaPost en bien des points, la syntaxe d'Asymptote ressemble très fort à celle des langages de la famille C, tel C lui-même, C++ ou Java. Elle est donc plus standard, plus puissante et flexible que celle de MetaPost. Ce côté C est bien visible pour les connaisseurs dans l'introduction de nos commentaires par la commande //, ou bien dans notre définition de fonction

real f(real x) {return x^2;}

ou encore dans l' instruction de boucle traçant des marques sur l'axe vertical

for(int i = 1; i <= 3; ++i) {draw((-c, i) -- (c, i));};

On peut trouver que cette syntaxe manque de convivialité. C'est du moins mon avis sur tous les langages de type C, et je le partage :-). Comparez avec l'instruction analogue en MetaPost :

for j := 1 upto 3:
        draw (-2pt, u*j) -- (2pt, u*j);
endfor;

On voit également bien les différences de concepts syntaxiques dans l'instruction de dessin de la parabole proprement dite, respectivement dans Asymptote

draw(parabole, red);

et dans MetaPost

draw parabole withcolor red;

Pour finir question syntaxe, à chacun ses goûts. Asymptote a l'avantage de la concision et également celui d'une plus grande flexibilité à l'usage mais pour ma part je préfère le « style » MetaPost que je trouve plus parlant à l'intuition. Cela vient peut-être du fait que je ne suis qu'un programmeur occasionnel !

Asymptote plus fort que MetaPost !

Venons-en maintenant à un point plus important, où les deux langages diffèrent fondamentalement : l'adaptation du dessin à l'échelle (scale) souhaitée par l'utilisateur.

Avec MetaPost comme avec Asymptote, le choix de l'unité de base du dessin est laissé à l'utilisateur, mais l'unité de base interne du dessin reste dans les deux cas le point Postscript, alias big point (bp), soit environ 0.3527 mm. Cependant, avec MetaPost, si l'unité choisie par l'utilisateur n'est pas le point PostScript, il faudra effectuer la mise à l'échelle correspondante à chaque instruction de dessin, comme dans celle-ci, qui dessine une ligne brisée tiretée sur la version MetaPost de notre schéma :

draw ((2, 0) -- (2, 4) -- (-2, 4) -- (-2, 0)) scaled u dashed evenly;

J'y ai mis en évidence, en rouge, la partie de l'instruction procédant à la mise à l'échelle voulue. Pour rappel, u était la variable numérique définissant l'unité de notre schéma, de valeur 1,25 cm.

On imagine aisément que répéter ce genre d'opération tout au long du programme peut devenir fastidieux ! Or avec Asymptote, ce n'est pas nécessaire : il suffit de préciser l'unité de base dès le début du fichier avec l'instruction

unitsize(1.25cm);

et toutes les instructions de dessin sont faites ensuite en fonction de cette unité. Par exemple, l'instruction de dessin MetaPost ci-dessus est devenue en Asymptote la suivante :

draw((2, 0) -- (2, 4) -- (-2, 4) -- (-2, 0), dashed);

Plus besoin de rappeler systématiquement une variable-unité de référence telle que le u précédent !

Remarquons qu'on aurait pu préciser des unités différentes selon l'axe des abscisses et celui des ordonnées, par exemple comme ceci :

unitsize(1.25cm, 1cm);

Asymptote offre également d'autres facilités concernant la mise à l'échelle. Par exemple, on peut imposer au schéma d'avoir une taille globale prédéfinie, et toutes les composantes du dessin sont alors automatiquement adaptées en conséquence. Mais je vous laisse découvrir ces possibilités par vous-même dans une documentation idoine (je donne des références plus bas).

Configuration

Passons maintenant au paramétrage global d'Asymptote lui-même. Si on veut modifier son comportement par défaut, on peut créer un fichier de configuration config.asy, à placer dans un dossier .asy qui lui-même est à créer et à stocker dans votre répertoire maison.

En raison du point . du début de son nom, ce dossier .asy ne sera pas visible dans le Finder, mais vous pourrez toujours y accéder par le menu « Aller/Aller à » de ce même Finder ou par la commande cd du Terminal (dans les deux cas le chemin à indiquer sera ~/.asy).

Un des usages courants du fichier config.asy est le changement du format de sortie par défaut (EPS). Ainsi, si vous souhaitez désormais que tous vos dessins sortent en PDF, introduisez les lignes suivantes dans le fichier config.asy :

import settings;
outformat = "pdf";

Outre le PDF, il y a possibilité de convertir le dessin en d'autres formats comme le vectoriel SVG (dans ce cas c'est le LaTeX standard qui doit composer les labels) mais aussi tous les formats bitmap (PNG, JPG, Gif, etc.) supportés par l'outil convert d'ImageMagick. Cet outil a déjà été installé par MacTeX dans votre système, donc vous n'avez pas à vous en occuper.

À noter que la conversion du fichier de sortie en PDF sera automatique si vous imposez à Asymptote d'utiliser pdfLaTeX ou XeLaTeX pour composer ses labels, au lieu du LaTeX standard qui est son choix par défaut. Par exemple, si vous souhaitez systématiquement utiliser pdfLaTeX pour ce faire, votre fichier de configuration devrait (au moins) être constitué de ces lignes-ci :

import settings;
tex = "pdflatex";

Avec un tel fichier de configuration, dans toutes les utilisations subséquentes d'Asymptote pdfLaTeX sera utilisé pour les labels… et la version finale du dessin sortira en PDF, sans avoir besoin de modifier le paramètre outformat en conséquence.

On peut également avoir besoin de changer le programme de composition des labels pour un seul fichier ou quelques-uns. Par exemple, si d'habitude on utilise pdfLaTeX pour ce faire mais que pour un dessin donné on souhaite utiliser XeLaTeX, le mieux est d'insérer alors la ligne suivante au début du fichier Asymptote concerné :

settings.tex = "xelatex";

Les labels de ce seul dessin seront alors composés par XeLaTeX.

Intégration dans un fichier LaTeX

Jusqu'à présent, nous avons vu Asymptote comme un programme externe à LaTeX, fonctionnant certes de conserve avec lui, mais indépendamment. Or il est possible d'intégrer du code Asymptote dans un programme LaTeX. Un « paquet » LaTeX est prévu pour cela, adéquatement nommé asymptote.

Ce paquet fournit essentiellement deux environnements LaTeX : asydef et asy. Chaque série d'instructions correspondant à un dessin Asymptote devra être placé dans un environnement asy, c'est-à-dire entre les balises \begin{asy} et \end{asy}. L'éventuel code commun à tous ces dessins pourra être placé dans l'environnement asydef lequel doit alors se trouver avant le premier environnement asy.

Voici un exemple-type de fichier LaTeX utilisant ce paquet asymptote pour produire notre parabole. Ici l'environnement asydef ne sera pas utilisé puisqu'il n'y a qu'un seul dessin :

% !TEX encoding = UTF-8 Unicode
\documentclass[12pt]{article}
% Pour francisation (cf. Intro à LaTeX)
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[frenchb]{babel}
%
\usepackage{asymptote}
%
\begin{document}
%
%\begin{asydef}
    %// On peut placer ici l'éventuel
    %// paramétrage commun de plusieurs dessins.
%\end{asydef}
%
\begin{figure}
\centering
\begin{asy}
    import graph;
    // Unité du graphe
    unitsize(1.25cm);
    // Longueur des axes
    real xmin = -2.75, xmax = 2.75;
    real ymin = -0.5, ymax = 5;
    // Définition de la fonction
    real f(real x) {return x^2;}
    // Tracé de la courbe
    path parabole = graph(f, -2.2, 2.2, n = 22, operator ..);
    draw(parabole, red);
    // Tracé des axes
    xaxis("$x$", xmin, xmax, Arrow);
    yaxis("$y$", ymin, ymax, Arrow);
    // Lignes tiretées
    draw ((2, 0) -- (2, 4) -- (-2, 4) -- (-2, 0), dashed);
    // Tirets sur les axes
    real c = 0.07;
    draw ((1, c) -- (1, -c));
    draw ((-1, c) -- (-1, -c));
    // Tirets tracés en boucle
    for(int i = 1; i <= 3; ++i) {draw ((-c, i) -- (c, i));};
    // Labels
    label("$O$", (0,0), SW);
    label("$2$", (2, 0), S);
    label("$-2$", (-2, 0), S);
    label("$4$", (0, 4), NW);
\end{asy}
\caption{Ma belle parabole !}
\end{figure}
%
\end{document}

Notez que le code Asymptote n'est pas mis en couleur cette fois-ci, contrairement aux commandes LaTeX, ce qui est assez logique puisqu'il s'agit ici justement d'un programme LaTeX. Selon mon habitude dans ce cas, j'ai reproduit ici la coloration syntaxique utilisée par TeXShop.

Maintenant, sauvegardez ce fichier LaTeX sous un nom de votre choix, avec l'extension .tex bien sûr, par exemple parabole.tex.

Une triple compilation est alors nécessaire pour faire apparaître le dessin. On compose tout d'abord le fichier parabole.tex avec LaTeX via TeXShop, ce qui crée un fichier parabole.pdf (avec un espace vide réservé pour le futur dessin), quelques fichiers auxiliaires et surtout un fichier parabole-1.asy contenant le code Asymptote qui figurait dans l'environnement asy. Ensuite on lance le logiciel Asymptote sur ce fichier parabole-1.asy, ce qui crée le dessin proprement dit. Et enfin on inclut ce dessin dans le fichier PDF en composant une nouvelle fois avec LaTeX le fichier parabole.tex.

Mais comme le logiciel Asymptote n'est pas lui-même directement accessible via TeXShop (contrairement à MetaPost), cela se révèlerait très vite fastidieux de composer via TeXShop puis de passer par un autre éditeur et/ou le Terminal pour lancer Asymptote puis de revenir à TeXShop… et de devoir refaire de même à chaque modification du dessin !

Heureusement, un script fourni par TeXShop permet de combiner ces trois compilations en une seule. Ce script s'appelle Asymptote.engine et trouve dans le répertoire « TeXShop/Engines/Inactive/Asymptote » de votre bibliothèque personnelle. Si vous le sortez du dossier « Inactive » et le placez simplement dans le dossier parent « Engines », il devrait être accessible et utilisable dès le prochain redémarrage de TeXShop. Autrement dit, il apparaîtra dans le menu déroulant de composition de TeXShop, comme ci-dessous :

image

Une fois ceci vérifié, vous pouvez lancer l'engine Asymptote sur votre fichier parabole.tex, soit en le sélectionnant dans le menu déroulant et en composant ensuite avec le raccourci usuel « commande-T », soit en plaçant au tout début de votre fichier la ligne

% !TEX TS-program = Asymptote

et en lançant ensuite la composition, qui sera alors systématiquement effectuée désormais avec cet engine par défaut. TeXShop va dans un premier temps faire exécuter par LaTeX (pdfLaTeX en fait) le fichier parabole.tex, puis le fichier parabole-1.asy par Asymptote (le logiciel), et enfin à nouveau le fichier parabole.tex par pdfLaTeX. Votre dessin devrait alors apparaître ainsi dans le fichier PDF résultant :

image

Ceux qui utilisent le LaTeX standard ou XeLaTeX devront modifier le fichier Asymptote.engine en y remplaçant les occurences de la commande pdflatex par latex ou xelatex.

Remarquons en passant qu'Asymptote ne semble pas supporter LuaLaTeX, du moins dans la version testée ici (2.13). En tout cas, il n'y est fait nulle part allusion dans son manuel de référence.

En savoir plus

Si vous avez été accrochés par cette description d'Asymptote et si vous souhaitez vous mettre à ce langage, la documentation officielle est bien sûr la première chose à consulter, on a vu en début d'article comment le faire via le mode interactif d'Asymptote. Elle est également disponible sur le site d'Asymptote même, en HTML comme en PDF pour la version la plus récente du programme, actuellement la 2.15 (MacTeX 2011 inclut la version 2.13). Pour le débutant, cette doc. propose à son début un tutoriel clair mais malheureusement très court, et le reste constitue le manuel de référence du langage, certes indispensable mais franchement rébarbatif au premier abord.

Heureusement, il y a d'autres sources de documentations complémentaires de la précédente. Le site Art of Problem Solving présente un tutoriel bien plus fouillé. Un autre tutoriel, en français et disponible en PDF, a été écrit par Christophe Grospellier : Asymptote, démarrage « rapide ». Pour ceux voulant aller encore plus loin et progresser assez vite, il existe deux sites cataloguant un nombre considérable d'exemples commentés, du plus simple au plus compliqué, classés par thèmes : celui de Gaétan Marris (en français) et celui de Philippe Ivaldi. D'autres références encore sont citées sur la page de liens d'Asymptote.


Voilà, cette série d'articles sur les principales solutions graphiques existantes pour LaTeX se termine. À l'heure du bilan, si quelqu'un parmi vous me demande de lui dire quelle serait la solution de dessin que je lui recommande en priorité, j'avouerai ne pas le savoir avec certitude. Elles ont chacune leurs avantages et leurs inconvénients.

Le paquet mfpic, qui est celui que j'utilise le plus régulièrement, est bien intégré à LaTeX, est relativement aisé à apprendre et permet d'exploiter une bonne partie de la puissance de MetaPost, dont il est une interface LaTeX plus rapidement abordable. En revanche il est moins versatile que Tikz ou PSTricks, dans le sens où il ne dispose pas de macros toutes faites pour certains types de dessin, tels que les schémas en 3D ou les arbres. Et il nécessite une triple compilation qui, même si on peut facilement l'automatiser par un script, le rend plus lourd à exécuter que d'autres solutions.

Le programme-langage MetaPost lui-même dispose d'une grande puissance, d'une souplesse d'utilisation certaine et de facilités de calcul étonnantes, comme sa capacité à résoudre des systèmes d'équations linéaires écrits de façon implicite, un peu à la façon d'un logiciel de calcul formel. En revanche certains de ces calculs peuvent être imprécis puisqu'ils sont effectués en virgule fixe (la prochaine version de MetaPost ne devrait plus avoir ce problème). Et même si certaines extensions de MetaPost permettent d'effectuer des dessins 3D très convenables, il n'a pas été prévu à l'origine pour cela, ce qui y limite ses possibilités. Enfin, il s'agit d'un langage de programmation entièrement différent de LaTeX, qui nécessite donc un apprentissage supplémentaire.

Le paquet de commandes PSTricks est, de toutes les solutions présentées ici, certainement la plus polyvalente. On peut quasiment tout dessiner avec ! Si on se tient aux dessins scientifiques bien sûr. Il s'agit en fait d'une interface au très puissant langage PostScript mais cependant son intégration à LaTeX est parfaite, grâce notamment à l'usage de la syntaxe optionnelle de type xkeyval. En revanche, il est totalement incompatible avec pdfLaTeX (définitivement pour ce dernier) et LuaLaTeX (ça pourrait changer à l'avenir). Et lui non plus n'est pas prévu à l'origine pour faire de la 3D, bien que là aussi des solutions très acceptables existent.

Tikz est également un paquet de commandes LaTeX, donc sa syntaxe s'intègre bien à tout document LaTeX même si elle est souvent clairement dérivée de celle de MetaPost. Mais son avantage principal par rapport à PSTricks est d'être compatible avec tous les moteurs et pilotes LaTeX existants, ce qui lui permet de « coller » d'autant mieux aux desiderata des concepteurs du document où le dessin sera intégré. De plus, Tikz dispose déjà d'une grande plage de domaines d'applications, qui se rapproche de celle de PSTricks sans toutefois arriver encore à son niveau de polyvalence. Mais ses capacités de calcul, qui sont celles de LaTeX, sont assez limitées par rapport à celles des autres solutions présentées, et son support de la 3D est encore embryonnaire.

Le programme-langage Asymptote est indiscutablement la plus puissante des solutions de dessins proposées dans le monde de LaTeX. Et ce en potentiel graphique comme en capacités de calculs, lesquels sont effectués — contrairement à ceux de MetaPost — en virgule flottante, donc avec une grande précision. Asymptote est déjà bien fourni en extensions malgré sa jeunesse relative, ce qui lui fournit dès maintenant une polyvalence très convenable. De plus il dispose d'un support complet de la 3D, ce qui le distingue de tous ses « concurrents ». Mis à part le fait qu'il s'agit comme MetaPost d'un langage entièrement nouveau à apprendre, sa seule faiblesse, à mes yeux du moins (d'autres trouveront au contraire que c'est un de ses nombreux avantages !), est sa syntaxe de type C qu'on peut trouver rebutante. On peut également regretter que, contrairement à MetaPost, Asymptote ne permette pas la résolution implicite de systèmes d'équations linéaires. C'est un choix délibéré des concepteurs d'Asymptote qui ne voient pas l'intérêt pratique de cette façon de procéder. Selon eux, la résolution explicite de systèmes linéaires suffit largement, et Asymptote le permet d'ailleurs de façon précise et performante.

À vous donc de faire votre choix, selon vos besoins et vos affinités !

Bibliographie

J'ai déjà indiqué dans le cours de cette série d'articles plusieurs liens web vers différents manuels et tutoriaux pour chaque solution graphique présentée. Il existe également quelques livres à ce sujet disponibles dans le commerce.

  • Un pavé respectable de 927 pages qui fait référence, le LaTeX Graphics Companion, Second Edition, par Michel Goossens, Frank Mittelbach, Sebastian Rahtz, Denis Roegel et Herbert Voß, éditions Addison-Wesley, 2007, qui décrit avec force détails les solutions de dessin pour LaTeX, dont MetaPost, mfpic et PSTricks. En revanche, vous n'y trouverez rien sur Tikz ni sur Asymptote car au moment où la rédaction de ce livre était lancée, ils n'existaient pas encore ou étaient trop récents pour être étudiés avec le recul nécessaire.
  • PSTricks dispose d'une véritable encyclopédie consacrée à lui et lui seul : PSTricks, Graphics and PostScript for TeX and LaTeX, par Herbert Voß, traduit de l'allemand vers l'anglais, éditions UIT Cambridge. L'édition originale en allemand ne fait pas moins de 1008 pages !
  • MetaPost n'a pas de livre qui lui soit consacré à proprement parler, mais c'est qu'en fait ce rôle est déjà tenu en grande partie par le METAFONTbook, de Donald Knuth, éditions Addison-Wesley, 361 pages, 1986. En effet, la syntaxe et les fondements de MetaPost sont essentiellement les mêmes que ceux de METAFONT, et même si ce dernier programme est principalement destiné à la création de polices de caractères, l'utilisateur de MetaPost trouvera un grand bénéfice à se plonger dans ce livre, très bien écrit et truffé d'exercices résolus facilitant l'apprentissage, pour tout connaître des principes et arcanes de son langage de prédilection.

Il n'y a pas à ma connaissance de livres parus dans le commerce qui soient consacrés à Asymptote ou Tikz, mais vu la jeunesse de ces solutions graphiques, c'est compréhensible. Et étant donné leur popularité toujours croissante, cela ne devrait probablement plus tarder !

8 commentaires
1)
flup
, le 01.02.2012 à 07:22

Merci encore pour ces articles ! N’ayant pas “besoin” de calculs mais plutôt d’objets graphiques plus proches du dessin, je vais plus naturellement vers Tikz que vers Asymptote ou Metapost.

S’il y avait plein de musiciens susceptibles d’être intéressés sur Cuk, je ferais bien un article sur le cousin “musical” de LaTeX (GNU LilyPond), mais ceci est une autre histoire. Someday my code will come :p

2)
WhyNot
, le 01.02.2012 à 10:47

Merci. Même cette dernière série est un plus ardue que les précédentes…

A propos, en écho à la calculatrice, un petit truc, découvert récemment qui facilite vraiment la vie pour les calculs tout simples. Dans spotlight, accessible très rapidement par un raccourci clavier, on peut taper directement ses opérations (typiquement celles accessibles par le pavé numérique) et le résultat s’affiche immédiatement. C’est plus pratique et rapide que d’ouvrir la calculatrice ou un widget…

3)
Franck Pastor
, le 01.02.2012 à 12:29

Merci. Même cette dernière série est un plus ardue que les précédentes…

Rassurez-vous, je n’aborderai plus de thème nouveau en ce qui concerne LaTeX, à moins d’une révolution. J’ai parlé de tous les domaines que je voulais couvrir.

Je pourrai éventuellement faire une mise à jour de l’un ou l’autre article, par exemple celui sur BibTeX, parce que BibTeX semble de plus en plus supplanté par l’ensemble Biber – BibLaTeX. Mais pas de nouveaux sujets a priori.

Dans l’immédiat, j’essaie d’actualiser à nouveau l’introduction à LaTeX sur Mac OS X parue ici dans sa dernière il y a 3 ans. Mais ça prend plus de temps que je le pensais. Je comptais le faire pour le mois prochain, mais ça semble compromis.

S’il y avait plein de musiciens susceptibles d’être intéressés sur Cuk, je ferais bien un article sur le cousin “musical” de LaTeX (GNU LilyPond), mais ceci est une autre histoire. Someday my code will come :p

Et pourquoi pas ? Tu devrais te lancer, il y a peut-être bien plus de musiciens sur ce site que tu ne le penses !

4)
Totophe
, le 01.02.2012 à 14:48

Je dois être un peu bourrin mais pour mes dessins, j’utilise omnigraffle, j’exporte en pdf puis je vais un \includegraphics. A une époque j’utilisais pstricks mais c’est vieux.

5)
Franck Pastor
, le 01.02.2012 à 16:46

Tu n’es certainement pas bourrin :-) Tout dépend en fait de ce qu’on veut avoir.

Facilité, rapidité d’apprentissage et d’exécution du dessin sont du côté d’Omnigraffle et ses semblables.

Les solutions LaTeX que j’ai présentées offrent une meilleure intégration du dessin dans le document, une gestion parfaite des labels et le contrôle du moindre paramètre. Le tout dans le même fichier LaTeX que celui qui fournit le texte global. Pour le prix d’une difficulté et d’un investissement en temps nettement supérieurs, du moins au début.

Et à propos de prix, ces solutions sont tout aussi gratuites que LaTeX lui-même.

PStricks est vieux certes mais toujours d’actualité, pour les raisons que je viens d’énumérer.

6)
Totophe
, le 01.02.2012 à 21:24

J’aime bien vos articles sur LaTeX :) Concernant pstrick à l’époque je passais par latex puis dvips avant de créer un ps. Actuellement, on passe plus pas pdflatex.

7)
Totophe
, le 01.02.2012 à 21:27

Je crois bien avoir une traduction en français de pstrick qui traine au bureau.

8)
Franck Pastor
, le 02.02.2012 à 14:12

J’aime bien vos articles sur LaTeX :) Concernant pstrick à l’époque je passais par latex puis dvips avant de créer un ps. Actuellement, on passe plus pas pdflatex.

Et pdfLaTeX est malheureusement incompatible avec PStricks. Il faut ruser pour pouvoir utiliser l’un et l’autre en même temps. Pareil pour LuaLaTeX pour le moment.

À ce sujet, j’attends beaucoup de LuaLaTeX, qui est quand même le successeur désigné de pdfLaTeX. Il incorpore déjà en grande partie MetaPost, il pourrait faire de même avec Asymptote (c’est une idée qui a été lancée mais non concrétisée jusqu’alors), il a été question de lui faire incorporer également un interpréteur PostScript, ce qui le rendrait également compatible avec PStricks. De plus, il permettrait à Tikz de faire des calculs élaborés. La panacée, quoi. Rêvons…