Profitez des offres Memoirevive.ch!
Dessiner avec LaTeX (première partie)

L'article d'aujourd'hui et les deux suivants présentent ce qui peut être considéré par certains comme le summum de la geekerie LaTeXienne : faire des dessins en utilisant LaTeX lui-même, ou bien un langage de programmation dédié à LaTeX. Et non pas un logiciel Wysiwyg comme Illustrator, Inkscape ou même le module de dessin d'OpenOffice…

À ceux pour qui LaTeX, en tant que programme non-Wysiwyg, est déjà un blasphème en soi, je conseille de passer leur chemin sous peine d'être choqués à vie ! :-) J'espère cependant que cet article intéressera les autres, qu'ils soient utilisateurs convaincus de LaTeX ou simplement curieux de nature. Il est quand même préférable d'avoir des notions de LaTeX, même basiques, pour comprendre les deux articles qui vont suivre. Je rappelle qu'il n'est jamais trop tard pour consulter cet excellent cours d'introduction, du moins les deux premiers chapitres !

Tout d'abord précisons qu'il ne s'agit pas ici de faire des dessins « artistiques » mais bien des schémas scientifiques : arbres, graphes, courbes de fonctions, surfaces, diagrammes, etc. Bref des schémas gouvernés par des règles géométriques ou analytiques précises, qu'il est alors possible de spécifier via des instructions LaTeX ou assimilé.

L'intérêt de le faire en LaTeX est alors triple :

  • On minimise le nombre de fichiers annexes utilisés pour constituer le document final : au lieu d'être stockées dans des figures externes, les figures sont en quelque sorte « contenues » dans le fichier .tex du document.
  • L'intégration du dessin dans le reste du texte est bien meilleure, car la police utilisée pour les « labels » de la figure est a priori exactement la même, et si le « paquet » de dessin est de bonne qualité, le « coup de crayon » général est en accord avec le trait utilisé par la police du texte. Alors que souvent les figures externes, une fois incorporées, semblent jurer avec le reste du document.
  • Contrairement à ce qui se passe souvent lors de l'utilisation d'un logiciel classique, on peut contrôler bien plus de paramètres. De l'épaisseur des traits à leur couleur en passant par la forme de la pointe des flèches et la police de texte choisie, pratiquement tout est configurable et personnalisable, ou presque, quitte à apprendre les commandes qu'il faut. Sans exagérer dans ce sens, sinon on peut se retrouver en contradiction avec le point précédent : par exemple si on souhaite changer de polices pour le texte des labels…

LaTeX fournit déjà par défaut des commandes pour faire ce genre dessins, qui sont placées dans un environnement appelé picture. Néanmoins, ces commandes sont très insuffisantes : elles ne permettent pas, par exemple, de tracer aisément des graphes de fonctions, et même pour les figures simples comme les cercles, il n'est pas possible d'en tracer de toutes tailles ou de toute épaisseur. De plus, sa syntaxe est particulièrement lourde. Par rapport aux solutions que je vais aborder dans cet article et le suivant, la même figure dessinée avec picture peut nécessiter beaucoup plus de codage.

Certaines des limitations de l'environnement picture sont levées par le paquet pict2e, mais pas toutes (et notamment pas la syntaxe…). Voyez la documentation de celui-ci pour faire un tour des difficultés résolues.

Il existe cependant plusieurs alternatives à picture, aussi performantes que l'utilisateur le plus exigeant puisse le souhaiter. Le but de cet article et des suivants est de présenter les plus couramment employées parmi ces alternatives. Pour ma part, mon choix personnel s'est porté sur deux solutions complémentaires : le paquet mfpic, et le langage de programmation MetaPost, sur lequel mfpic est basé. L'article d'aujourd'hui est consacré à la présentation de ces deux solutions.

Je ne vais pas ici faire vraiment de cours introductif au paquet mfpic ni au langage MetaPost : cela demanderait bien plus que deux articles, et il s'agit ici de faire un tour de présentation des principales solutions de dessin pour LaTeX, pas de détailler chacune d'elles. Néanmoins, je vais en préciser les principes de fonctionnement.

Pour cette présentation, je vais fixer à chaque solution de dessin le même objectif, relativement élémentaire : tracer la parabole d'équation y = x2 dans un repère orthonormé. Ça a l'air élémentaire mais c'est déjà une chose pour laquelle l'environnement picture n'a rien de prévu…

Nous utiliserons comme éditeur de texte le programme bien connu des amateurs de LaTeX sur Mac OS X : TeXShop. Les programmes ci-dessous ont été testés sur la distribution MacTeX la plus récente à ce jour, celle de 2011.

mfpic

mfpic est un « paquet » de commandes LaTeX. Il peut aussi être utilisé avec TeX, et sous LaTeX il fonctionne aussi bien avec pdfLaTeX qu'avec LaTeX + dvips, LuaLaTeX ou XeLaTeX (avec certaines précautions dans ces deux derniers cas). Le but de mfpic est de produire des dessins de type scientifique. Il a été élaboré à partir de 1992 par Thomas Leathrum, Geoffrey Tobin et Dan Luecking, son « mainteneur » actuel. Sa particularité est qu'il repose en fait sur un outil externe à LaTeX : le langage de programmation MetaPost, ou alternativement le langage MetaFont. Ces deux langages ont également été conçus pour fonctionner avec (La)TeX, mais de façon différente. Nous utiliserons ici mfpic avec le langage MetaPost.

Voici un fichier .tex minimal qui montre comment notre parabole peut être tracée en utilisant mfpic :

\documentclass[12pt]{article}
%
\usepackage[metapost]{mfpic}
\setlength{\mfpicunit}{1cm}
\opengraphsfile{\jobname}
%
\begin{document}
\begin{center}
\begin{mfpic}[1.25]{-2.75}{2.75}{-0.5}{5.5}
   % Tracé des axes
   \doaxes{xy}
   % Tracé du graphe de la fonction en rouge
    \draw[red]\function{-2.2, 2.2, 0.2}{x**2}
    % Marques sur les axes
    \xmarks{-1, 1}
    \ymarks{1, 2, 3, 5}
    % Lignes tiretées
    \dashed\lines{(-2, 0), (-2, 4), (2, 4), (2, 0)}
    % Labels
    \tlpointsep{3pt} % Décalage
    \tlabels{[tr](0, 0){$O$} [tc](2, 0){2}
        [tc](-2, 0){$-2$} [tc](\xmax, 0){$x$}
        [br](0, 4){4} [cr](0, \ymax){$y$}}
    %
\end{mfpic}
\end{center}
%
\closegraphsfile
\end{document}

Sauvegardez ce fichier, par exemple sous le nom parabole.tex. Pour faire apparaître le dessin, on a besoin non pas d'une, mais de trois compilations de ce fichier.

La première compilation se fait avec LaTeX : vous verrez apparaître un cadre sans dessin, mais avec les labels, et dans le Finder, à l'endroit où votre fichier LaTeX a été sauvegardé apparaît un fichier parabole.mp. C'est ce fichier qui contient le code MetaPost qui servira à produire le dessin proprement dit.

La deuxième composition de votre fichier LaTeX se fait avec MetaPost (choisir « MetaPost » dans le menu « Composition » ou dans le menu déroulant en haut du fichier LaTeX).

image

À ce moment-là, TeXShop lance la composition du fichier parabole.mp. Apparaîtra alors dans le Finder un fichier parabole.1 contenant cette fois-ci le code PostScript du dessin, c'est-à-dire le dessin lui-même en fait. Si votre fichier LaTeX parabole.tex avait contenu plusieurs dessins mfpic, ce seraient plusieurs fichiers appelés parabole.1, parabole.2, etc, qui seraient apparus.

Ne reste qu'à inclure ce dessin parabole.1 dans votre fichier PDF, et cela se fait grâce à une troisième compilation de votre fichier parabole.tex, à nouveau avec LaTeX. Le dessin apparaît alors entièrement :

image

Revenons au contenu du fichier parabole.tex et analysons plus en détail les commandes nécessaires au fonctionnement de mfpic.

Le chargement du paquet se fait classiquement avec l'instruction \usepackage[metapost]{mfpic}. L'option metapost indique à mfpic que c'est MetaPost qui devra faire les dessins proprement dits, et non MetaFont qui est le choix par défaut. MetaPost est cependant préférable, ne serait-ce que parce qu'il donne accès à la couleur…

L'unité de longueur de base du schéma est donné par la commande \setlength{\mfpicunit}{1cm}. Par défaut c'est le « point » pt, soit 0,3515 mm. Pas très pratique a priori, d'où le changement !

La commande \opengraphsfile{\jobname} permet de préciser le nom qui sera donné au fichier .mp produit par MetaPost lors de la première compilation. En l'occurence, \jobname est une macro TeX bien pratique fournissant le nom du fichier .tex courant, sans son extension. Ici \jobname fournira donc le nom parabole (sans l'extension .tex) et le fichier MetaPost produit s'appellera par conséquent parabole.mp.

En fait on est libre de passer le nom qu'on souhaite en argument de la commande \opengraphsfile. Par exemple on aurait pu préférer arbitrairement un nom comme graphique ; dans ce cas il aurait suffi d'entrer la commande \opengraphsfile{graphique} et alors le fichier MetaPost produit par la première compilation se serait appelé graphique.mp.

Le problème est qu'alors il aurait fallu ouvrir (nous-même) ce fichier graphique.mp avant de le compiler avec MetaPost, et puis revenir au fichier parabole.tex pour la dernière compilation. Alors qu'avec la démarche précédente le fichier MetaPost était compilé à partir du fichier parabole.tex, sans avoir à ouvrir parabole.mp en plus.

Il est donc beaucoup plus pratique d'utiliser en le nom du fichier .tex comme argument de la commande \opengraphsfile de départ (ce qui peut s'automatiser en plaçant dans son argument la commande \jobname, on l'a vu).

La commande \closegraphsfile doit se trouver en fin de fichier LaTeX et permet de clore le fichier MetaPost.

Le codage du dessin proprement dit se trouve dans l'environnement

\begin{mfpic}[1.25]{-2.75}{2.75}{-0.5}{5.5} 
    … 
\end{mfpic}

lequel dispose d'un argument optionnel (entre crochets) et de quatre arguments obligatoires. Analysons-les : dans l'argument optionnel on précise que l'unité des axes du graphe fera concrètement 1.25 unités de base, soit 1.25 cm dans notre cas. Si on veut différencier les unités des axes des abscisses et des ordonnées, on entrera deux arguments optionnels consécutifs au lieu d'un, le premier pour l'axe des abscisses et le deuxième pour l'axe des ordonnées, chacun inclus entre deux paires de crochets. Les quatre arguments obligatoires précisent que l'axe des abscisses du graphe ira de -2.75 unités à 2.75 unités, et que l'axe des ordonnées ira de -0.5 unités à 5.5 unités.

Un mot sur la commande \function{-2.2, 2.2, 0.2}{x**2} : c'est elle qui fait tracer le graphe de la fonction y=x2 sur l'intervalle [-2,2; 2,2]. Précisément, suite à cette commande MetaPost va calculer les coordonnées des points du graphe en incrémentant les abscisses de 0,2 unités en 0,2 unités à partir de -2,2 jusqu'à 2,2, puis va relier ces points entre eux par une courbe de Bézier.

Vous aurez noté la syntaxe de l'expression de la fonction : x**2 (et non x^2). ** est l'opérateur d'exponentiation de MetaPost. L'expression de la fonction étant traitée par MetaPost, il faut utiliser la syntaxe de celui-ci lors de l'écriture de la fonction. Ceci dit, l'expression x^2 fonctionnera aussi, mais uniquement parce que mfpic a prévu un mécanisme de substitution pour remplacer ^ par ** lors de l'envoi de la fonction à MetaPost. Dans un programme MetaPost proprement dit, ^ ne sera pas reconnu.

Attention, l'opérateur d'exponentiation de MetaPost a pour particularité importante de ne pas être prioritaire par rapport à l'opérateur de multiplication *. Ainsi, 3*x**2 signifiera (3x)2 pour MetaPost, et non 3x2, pour lequel il aurait fallu entrer 3*(x**2). Dès que les opérateurs * et ** sont utilisés dans la même formule, il ne faut donc pas hésiter à user de parenthèses ! Les autres règles d'opérations arithmétiques dans MetaPost sont les règles classiques, avec même quelques simplifications bienvenues, comme la possibilité d'écrire 3x au lieu de 3*x si x est une variable numérique ou un vecteur.

J'ai expliqué le reste du codage dans les commentaires du programme lui-même. Vous aurez noté qu'il s'agit de commandes (La)TeX sous forme classique, et donc (relativement) faciles d'accès pour tout familier de (La)TeX.

Remarque importante : si vous souhaitez que mfpic puisse fonctionner avec XeLaTeX, il faut introduire la ligne suivante en préambule, après le chargement de mfpic :

\setfilenametemplate{\_-\#.eps}

Cette commande, version mfpic de la commande MetaPost outputtemplate que je présente plus bas, fera en sorte que le ou les fichiers MetaPost produits par la seconde compilation ne seront plus nommés parabole.1, parabole.2, etc, mais parabole-1.eps, parabole-2.eps, etc. XeLaTeX reconnaitra alors ces fichiers comme des schémas au format eps (Encapsulated PostScript), et pourra les incorporer. En revanche, pdfLaTeX refusera de les inclure avec cette extension.

(En fait, les dessins de MetaPost sont au format mps (MetaPost PostScript), un sous-ensemble du format eps que pdfLaTeX est capable d'incorporer, contrairement à l'eps et au PostScript généraux.)

Pour une introduction plus complète et bien illustrée de mfpic, je vous renvoie à cette présentation faite par son mainteneur actuel. Ceux qui à terme voudraient tout savoir de ce paquet feront comme moi du manuel de référence leur livre de chevet :-).

Comme vous avez pu le constater la figure produite est de très bonne qualité esthétique. En particulier le trait utilisé est de approximativement de la même finesse que celui des fontes du texte, et ces dernières sont reprises pour les labels de la figure. Mais cette qualité esthétique est assez logique, puisqu'il s'agit exactement du but de MetaPost, le « dessinateur » en coulisses : produire des dessins (scientifiques) de la plus haute qualité possible. C'est le moment d'en dire plus sur ce langage.

MetaPost

On l'a vu, mfpic se base sur le langage de programmation MetaPost (ou MetaFont) pour produire ce dessin. Mais qu'est-ce que MetaPost, plus précisément ?

Il s'agit en fait d'un langage reprenant l'essentiel des commandes de MetaFont, un autre programme-langage. MetaFont a été créé en même temps que TeX, en 1978, par le mathématicien-informatien Donald Knuth. Il est destiné à la production de polices bitmap pour fonctionner avec (La)TeX. MetaPost (créé vers 1992 par John Hobby, un étudiant de Knuth), quant à lui, ne se destine pas spécialement à la création de fontes, mais à l'élaboration de dessins PostScript destinés eux à l'inclusion dans un fichier (La)TeX.

PostScript se présente lui-même comme un langage de programmation, mais MetaPost est beaucoup plus abordable pour le novice, et surtout, n'utilise en sous-main qu'une classe limitée de commandes PostScript (sans perdre pour autant en qualité) avec pour conséquence précieuse que les dessins qu'il produit peuvent être directement inclus dans un documment pdfLaTeX, contrairement à un dessin PostScript général.

Bonheur supplémentaire, le langage MetaPost est supporté par TeXShop, et donc nous pouvons entrer notre programme MetaPost dans notre éditeur LaTeX favori pour Mac OS X, ce que nous allons faire ici. Notez cependant que TeXShop, bizarrement, ne propose pas de colorisation syntaxique spécifique à MetaPost.

Voici notre schéma précédent, codé cette fois-ci directement en langage MetaPost :

% Préambule pour indiquer à MetaPost
% qu'on utilise LaTeX (et non TeX) pour les labels
% et qu'ils sont de taille « 12pt »

verbatimtex
    %&latex
    \documentclass[12pt]{article}
    \begin{document}
etex;
%
% Le code du dessin proprement dit
beginfig(1);
    % L'unité du graphe
    u = 1.25cm;
    % les longueurs des axes
    xmax = 2.75;
    ymax = 5;
    % Les axes
    drawarrow (-xmax*u, 0)--(xmax*u, 0);
    drawarrow (0, -0.5*u)--(0, ymax*u);
    % Construction de la parabole
    path parabole;
    parabole = u*(-2.2, -2.2**2)
        for i := -2 step 0.2 until 2.2:
            .. u*(i, i**2)
        endfor;
    % Tracé de la parabole en rouge
    draw parabole withcolor red;
     % Lignes tiretées
    draw ((2, 0) -- (2, 4) -- (-2, 4) -- (-2, 0))
        scaled u dashed evenly;
    % Marques sur les axes
    draw (u, -2pt) -- (u, 2pt);
    draw (-u, -2pt) -- (-u, 2pt);
    for j := 1 upto 3:
        draw (-2pt, u*j) -- (2pt, u*j);
    endfor;
    % Labels
    label.bot (btex 2 etex, (2u, 0));
    label.bot (btex $-2$ etex, (-2u, 0));
    label.bot (btex $x$ etex, (xmax*u, 0));
    label.llft (btex $O$ etex, origin);
    label.ulft (btex 4 etex, (0, 4u));
    label.lft (btex $y$ etex, (0, ymax*u));
    %
endfig;
%
end;

Pour ce qui est du code proprement dit, contentons-nous d'indiquer qu'un seul fichier .mp peut contenir et produire plusieurs dessins, dont les codes seront respectivement inclus dans les balises beginfig(1); ... endfig;, beginfig(2); ... endfig;, etc. La commande end; doit terminer le fichier. Toute commande MetaPost doit se terminer par un point-virgule, à quelques exceptions près (dont les commandes end…), mais même s'il n'est pas nécessaire le point-virgule n'est jamais dommageable, sauf circonstances très particulières, donc autant systématiquement le placer…

Malgré l'absence, forcément, de commandes telles que les \usepackage{mfpic} ou \opengraphsfile, vous aurez noté la longueur nettement supérieure du programme MetaPost par rapport à son équivalent mfpic. Ce qui n'a rien d'étonnant, vu que mfpic est de par sa conception censé fournir des macros (en LaTeX) regroupant en une seule instruction plusieurs commandes MetaPost.

Une fois ce programme entré dans TeXShop, sauvegardez-le sous un nom avec l'extension « mp », par exemple parabole.mp. Le voilà près à la compilation.

Vous avez trois choix possibles dans le menu de composition pour ce faire. Le premier est d'utiliser le programme « MetaPost » basique dont on s'est servi plus haut pour mfpic. Mais dans ce cas vous ne verrez pas apparaître tout de suite votre dessin : un fichier parabole.1 sera créé, incorporable dans un document LaTeX (ce que fait d'ailleurs mfpic), mais qui ne sera directement visible que si vous changez vous-même son extension en eps avant de double-cliquer dessus. Il sera alors converti en PDF et apparaîtra… si le Distiller d'Apple a bien fait son travail, ce qui n'est pas garanti.

Il vaut beaucoup mieux utiliser un des deux « moteurs » (engines) de composition mis à disposition par TeXShop : les scripts nv-metapost et nv-metafun disponibles dans une version suffisamment récente de TeXShop (par exemple celle de MacTeX 2011). Si c'est le cas, ils sont listés dans le menu déroulant de composition en haut de la fenêtre de codage de TeXShop :

image

Choisissez par exemple « nv-metapost ». La seule véritable différence avec « nv-metafun » est que ce dernier dispose de macros supplémentaires, le tout formant avec MetaPost un ensemble appelé MetaFun, dont nous n'avons pas besoin ici (mais qui pourrait vous être utiles plus tard, notamment si vous utilisez ConTeXt). Pour vous faire une idée plus précise de ces scripts, voyez le fichier README contenu dans le dossier « Engines/Inactive/MetaPost » du dossier « TeXShop » de votre Bibliothèque personnelle.

Sur notre programme, que vous choisissiez nv-metapost ou nv-metafun, le résultat serait de toutes façons le même, et le schéma s'affichera immédiatement dans TeXShop :

image

Cerise sur le gâteau, vous pourrez vérifier que le schéma a été converti au format PDF, sous le nom parabole-1.pdf. Il y en a même une copie appelée parabole.pdf (c'est en fait ce fichier qui est visionné par TeXShop).

Vous disposez donc, grâce à nv-metapost, simultanément d'un version PostScript de votre dessin (parabole.1) et d'une version PDF (parabole-1.pdf).

Si votre fichier parabole.mp avait contenu plusieurs dessins, c'est-à-dire plusieurs environnements beginfig();… endfig;, ils auraient été créés en PostScript sous les noms parabole.1, parabole.2, etc, et en PDF sous les noms parabole-1.pdf, parabole-2.pdf, etc. Et tous ces dessins auraient été repris et regroupés dans un fichier appelé parabole.pdf, que TeXShop aurait visionné.

Ne reste plus qu'à incorporer ce ou ces fichiers de dessins à votre document LaTeX. Cela se fait classiquement en utilisant le paquet graphicx bien connu de tous les TeXniciens, et sa commande \includegraphics. Si vous utilisez LaTeX + dvips, on inclut le ou les fichiers PostScript (pas le choix), si on utilise pdfLaTeX on incluera de préférence naturellement le ou les fichiers PDF.

Si pour une raison ou pour une autre vous souhaitez incorporer dans votre document pdfLaTeX le(s) fichier(s) PostScript genre parabole.1, et non le(s) fichier(s) PDF, vous devez faire en sorte que pdfLaTeX puisse les reconnaître comme fichiers PostScript issus de MetaPost, en choisissant une des méthodes suivantes :

  • Soit leur octroyer vous-même une extension .mps (« mps » comme « MetaPost PostScript »), ce qui peut être fastidieux si les fichiers sont nombreux ;
  • Soit introduire dans préambule de votre fichier LaTeX la déclaration suivante :
    \DeclareGraphicsRule{*}{mps}{*}{}

    Cette déclaration fait en sorte que les fichiers à extension .1, .2, etc, soient traités comme des fichiers .mps par pdfLaTeX. C'est l'option choisie par mfpic quand il est utilisé avec pdfLaTeX.

  • Soit incorporer dans votre fichier Metapost, ici parabole.mp, la commande

    outputtemplate := "%j-%c.mps";

    en début de fichier, avant le premier beginfig() mais après l'environnement verbatimtex … etex. Dès lors le ou les fichiers PostScript créés par MetaPost s'appelleront non plus parabole.1, parabole.2, etc, mais parabole-1.mps, parabole-2.mps, etc. Ainsi pdfLaTeX pourra les reconnaître immédiatement comme des fichiers PostScript issus de MetaPost et les inclure directement.

Si vous souhaitez faire de même, mais pour XeLaTeX, les trois solutions précédentes restent de mise, mais il faut remplacer l'extension mps par eps.

Revenons au dessin lui-même. Vous aurez peut-être noté quelques petits détails divergents par rapport à celui produit par mfpic, comme le dessin des pointes de flèche sur les axes, ou la position du label de l'origine du repère : les auteurs de mfpic ont parfois développé leurs propres conceptions esthétiques ou pratiques de certaines constructions, par rapport à celles des auteurs de MetaPost. Personnellement, le « style » mfpic me convient mieux, mais c'est peut-être une question d'habitude.

Alors pourquoi s'intéresser à MetaPost, si mfpic semble plus simple et plus esthétique ?

Essentiellement parce que MetaPost est beaucoup plus flexible et puissant : c'est en effet, contrairement à LaTeX, un langage de programmation classique, avec variables, boucles et instructions conditionnelles faciles d'accès, et surtout avec des capacités de calcul étendues qui lui permettent par exemple de résoudre un système d'équations linéaires ou de donner les points d'intersection de deux courbes quelconques.

Ainsi, suivant la complexité des besoins, on peut faire appel à l'un ou à l'autre. On peut même combiner les deux en incorporant directement du code MetaPost dans un environnement mfpic grâce à des commandes spéciales, mais pour cela il faut (justement) bien s'y connaître en MetaPost…

On peut également aimer le  style particulier du langage MetaPost : pour ma part, j'apprécie qu'un langage de programmation permette souvent d'utiliser un langage (anglais) presque directement compréhensible, comme dans l'instruction draw parabole withcolor red qui figure dans notre programme.

Si vous souhaitez vous mettre à MetaPost, je vous conseille cet excellent tutoriel d'André Heck, truffé d'exemples et d'exercices résolus, que j'ai moi-même utilisé pour m'initier à ce langage. Il existe également un très bon tutoriel en français écrit par Laurent Chéno. Et pour compléter ces initiations, il y a l'indispensable manuel de référence par John Hobby lui-même. Une version en français de ce manuel (moins récente toutefois), existe également. Vincent Zonnekynd propose sur son site une considérable suite d'exemples de dessins MetaPost avec leurs codes, du plus simple au plus compliqué. Enfin, le site Syracuse propose une section MetaPost avec en particulier de très belles galeries de dessins.

Voilà pour la présentation de mes deux outils de dessin favoris parmi ceux liés à LaTeX. Dans le prochain article, je présenterais deux autres paquets de dessins, très largement utilisés : pstricks et tikz, et dans le suivant et dernier un langage de programmation concurrent de MetaPost, Asymptote.

25 commentaires
1)
djtrance
, le 28.11.2011 à 07:42

Franck, je ne sais pas comment tu fais pour nous pondre de tels articles à chaque fois! C’est plus de l’amour, c’est de la rage :))

Je suis persuadé des capacités et de la force de LaTeX mais, toujours pas décidé à l’utiliser! Merci pour ces articles toujours intéressants!

2)
Caplan
, le 28.11.2011 à 07:49

Une rumeur (infondée) prétend que l’humain n’utilise que 10% de son cerveau. Si c’était le cas, à la lecture de cet article, j’évaluerais ma capacité à environ 2%…

3)
coacoa
, le 28.11.2011 à 08:02

Pas mieux.

4)
Emilou
, le 28.11.2011 à 08:11

L’absence de toute convivialité est devenue un véritable must sur mac. Quel raffinement.

5)
Franck Pastor
, le 28.11.2011 à 08:11

Vous n’êtes pas utilisateurs de LaTeX au départ, c’est donc déjà bien que vous ayez lu cet article-là :-) Félicitations !

Le cœur de cible de cet article est comme je l’ai dit l’utilisateur convaincu de LaTeX sinon régulier, et qui produit des schémas de type scientifique. Ça pourrait intéresser par exemple certains élèves de secondaire, section sciences, que je connais…

Ça me surprend toujours de voir plein de mes collègues et connaissances utilisateurs de LaTeX se servir de mastodontes genre Illustrator ou Canvas (RIP) pour leurs schémas, même simples, pour finalement aboutir à des choses peu reluisantes. Alors que des solutions LaTeX performantes sont à portée de main pour des résultats de première qualité.

6)
infisxc
, le 28.11.2011 à 08:17

Merci Franck pour cette intéressante introduction à Metapost et mfpic, claire, et surtout très bien documentée en pointeurs de toutes sortes vers des tutoriels.

Il y a pas mal de temps que je me dis qu’il faudrait que je me mette à Metapost. Je suis assez satisfait de mon cycle de production utilisant Inkscape + le plugin TexText d’Inkscape, mais on arrive évidemment pas à la perfection d’un dessin produit par Metapost évidemment.

Ta série de deux articles est peut être l’occasion de commencer à regarder ça de plus près, même si j’ai quand même bien peur de perdre pas mal en facilité et rapidité de dessin des figures.

7)
Ellipse
, le 28.11.2011 à 08:50

@Emile

Non, il y a vraiment un avantage à utiliser LaTeX et à la longue c’est plus convivial que de chercher la foutue option du logiciel qui change de menu à chaque version.

La courbe d’apprentissage est raide, j’en conviens, mais après que du bonheur.

Il y a aussi des outils d’aide au dessin comme l’excellent TeXGraph et même GeoGebra exporte en LaTeX.

LaTeX est à conseiller aux scientifiques avant tout, mais également aux littéraires ayant à faire avec plusieurs alphabets.

Je me réjouis de lire l’article sur pstricks et tikz.

8)
guru
, le 28.11.2011 à 09:11

Il était un p’tit homme Tout habillé de gris, carabi

9)
Zallag
, le 28.11.2011 à 09:31

Des images de graphiques obtenues par Edugraphe peuvent aussi être exportées en LaTex.

10)
Anne Cuneo
, le 28.11.2011 à 09:35

LaTeX et à la longue c’est plus convivial que de chercher la foutue option du logiciel qui change de menu à chaque version

Je trouve cette affirmation quelque peu poussée à plusieurs égards, et il y a de nombreux programmes qui n’ont guère changé de menu au fil des versions.

Mais j’ai arrêté de m’irriter face à l’enthousiasme des laTeXiens: j’accepte que pour les scientifiques c’est le sommet. Comme je n’en suis pas, je me contente de lire les articles comme on regarde un film. J’ai même l’impression que les 2% de mon cerveau qui fonctionnent comprennent. Je ne ressens tout simplement pas le besoin de faire l’effort.

11)
François Cuneo
, le 28.11.2011 à 10:17

Ouahouh!

Ben dis!

Bravo.

Comme d’autres, je ne m’y mettrai pas, mais je suis certain que vous utilisez ce qui se fait de mieux.

Merci Franck.

12)
Franck Pastor
, le 28.11.2011 à 11:18

À tous les intéressés par cet article : j’ai inclus dans l’article du jour certaines précisions supplémentaires sur l’inclusion des fichiers de dessin MetaPost dans un document LaTeX.

À infixsc : au début, c’est sûr, tu perdras en rapidité, le temps d’apprendre les commandes. Après, cela devient presque une seconde nature !

À Ellipse : le lien vers TeXGraph ne fonctionne pas… Est-ce que ce logiciel exporte en MetaPost, à tout hasard ?

À Zallag : je n’avais jamais entendu parler d’Edugraphe, merci pour me l’avoir fait découvrir. Est-il toujours maintenu ? Sa dernière version semble dater de 2005.

À Anne : je t’accorde que les littéraires sont loin de former l’essentiel de la communauté LaTeX, mais il y en a quand même, et qui s’en portent très bien. On a pu en croiser plusieurs dans les commentaires de mes articles. À ce sujet, voici une lecture intéressante sur l’intérêt de LaTeX pour le monde de l’édition, en particulier littéraire.

À François : merci ! :-)

13)
Matkinson
, le 28.11.2011 à 12:57

Franck, dans mes bras!

Ah le bien que ça fait de lire des articles aussi bien fichus sur LaTeX!! C’est quand le prochain épisode? :-)

14)
Franck Pastor
, le 28.11.2011 à 13:34

Merci :-). La suite c’est pour le mois prochain, normalement.

15)
elo
, le 28.11.2011 à 16:19

Merci Franck,

Même si je n’ai jamais fait de graphiques en LaTeX. Sinon pour voir les deux ou trois choses que l’on peut faire en TeX ou LaTeX il y a Books in Humanities et TeX Showcase

Mais il est vrai qu’il y a une courbe d’apprentissage, comme n’importe quel outil dans n’importe quel domaine. Pour certains documents je préfère Nisus ou InDesign.

16)
flup
, le 28.11.2011 à 17:22

De mon côté, j’attends avec impatience la suite, consacrée à Tikz (que j’utilise chichement). Et puis, ça va bien au-delà du scientifique : on peut être enseignant musicien classique et utiliser LaTeX dans le cadre de son travail :p J’écrirais bien un article sur l’utilisation de LaTeX et Lilypond, tiens :-)

17)
JPO1
, le 28.11.2011 à 17:57

Je suis comme flup bq%flup%. j’attends avec impatience la suite, consacrée à Tikz (que j’utilise chichement) %%

Quant à l’utilisation de LaTeX pur l’édition hors sciences lourdes en ce début d’année j’ai lu le livre de Vladimir Pozner, Les États-Désunis, Lux éditeur, 2009 Lux éditeur

J’ai été surpris par la qualité de l’objet, du respect des règles typographiques, de l’équilibre des pages, de la qualité du dessins des caractères. En lisant la dernière page j’ai compris : composé avec LaTeX par Sébastien Mengin et Claude Rioux edilibre (le lien que Franck Pastor a introduit dans le commentaire 12 renvoie à un article de Sébastien Mengin.

18)
JPO1
, le 28.11.2011 à 18:05

Je ne devrais jamais écrire le soir, trop fatigué.

Le livre de Pozner cité ante est un livre d’un contenu superbe, bien servi par une belle langue. J’ai été heureux, oui heureux, que LaTeX le serve aussi bien.

19)
Guillôme
, le 28.11.2011 à 18:55

function{-2.2, 2.2, 0.2}{x ** 2}

Mais pourquoi diable une syntaxe différente de LaTeX pour les mathématiques? Pourquoi pas x^2 au lieu de ce saugrenu x**2 ?

Ça me surprend toujours de voir plein de mes collègues et connaissances utilisateurs de LaTeX se servir de mastodontes genre Illustrator ou Canvas (RIP) pour leurs schémas

Il y a quand même des avantages à utiliser une solution extérieure pour les illustrations que l’on inclut en pdf dans LaTeX :

  • Je trouve que le texte est beaucoup plus lisible en évitant de mélanger du code pour les graphiques
  • Cela simplifie le travail pour importer le texte et illustrations dans un autre environnement (ex : Word pour ne pas le nommer)
  • Le ratio temps/résultat est en faveur d’une solution extérieure, c’est d’ailleurs pour cela que je n’utilise pas LaTeX pour une simple lettre ou des notes courtes (le ratio temps/résultat n’est pas bon)

Mais j’ai arrêté de m’irriter face à l’enthousiasme des laTeXiens: j’accepte que pour les scientifiques c’est le sommet.

Personnellement, je me sers de LaTeX que pour du texte long, il n’y a pas donc pas de règle. L’essentiel c’est d’utiliser l’outil que l’on aime :)

Certains sont fana de Word, d’autres de TextEdit, d’autres de LibreOffice, d’autre de LaTeX, d’autres de… Moi, je les utilise tous à différents niveaux et pour différents besoin, donc pas de jaloux :p

20)
Franck Pastor
, le 28.11.2011 à 20:38

Mais pourquoi diable une syntaxe différente de LaTeX pour les mathématiques? Pourquoi pas x^2 au lieu de ce saugrenu x**2 ?

Je ne sais pas. Il faudrait poser la question à Donald Knuth puisque c’est lui qui a créé simultanément TeX et MetaFont (MetaPost reprend la syntaxe de MetaFont) en 1978…

Il semblerait cependant que si on remplace ** par ^, ça marche aussi. J’ignorais… Je vais creuser la chose.

Mais ce ne serait pas très gênant, je trouve, si ça ne marchait pas. Pour moi, le vrai piège de l’exponentiation de MetaPost est ailleurs : il n’est pas prioritaire sur la multiplication *. Ainsi, si dans MetaPost tu tapes 3*x**2, il comprendra (3x)2 et non pas 3x2. Bref, il faut écrire 3*(x**2) pour que MetaPost le comprenne comme 3x2, et en règle générale il ne faut pas hésiter à user et abuser des parenthèses quand ces deux opérations sont en jeu.

Le reste des règles arithmétiques de MetaPost est normal, avec en plus quelques règles simplificatrices bienvenues. Par exemple si x est une variable numérique ou un vecteur, on peut écrire 3x au lieu de 3*x.

S’agissant des programmes genre Illustrator, tu as tronqué ma citation ;-) : j’avais écrit précisément 

Ça me surprend toujours de voir plein de mes collègues et connaissances utilisateurs de LaTeX se servir de mastodontes genre Illustrator ou Canvas (RIP) pour leurs schémas, même simples.

Si je peux comprendre qu’on se serve de ces engins super-puissants pour des schémas bien complexes (il faut en effet du temps et de la patience pour arriver à en faire de semblables avec les moyens fournis par mfpic, MetaPost ou leurs semblables), je n’en vois guère l’intérêt pour tracer des figures toutes simples dans LaTeX : droites, cercles, graphes de fonctions élémentaires… Quelques commandes supplémentaires sont vite apprises et le tour est joué.

Pour le reste, chacun ses goûts en effet :-)

PS : p… de textile à la noix ! Pour arriver à entrer les * et ** dans ce commentaire sans qu’ils soient pris pour les balises de mise en caractères gras, faut suer !…

21)
Franck Pastor
, le 28.11.2011 à 21:11

Précision sur le symbole d’exponentiation ** : le remplacer par ^ semble marcher dans l’environnement mfpic. Ça ne fonctionne par contre absolument pas dans le fichier MetaPost. Peut-être que mfpic a prévu un mécanisme de substitution pour remplacer ^ par ** au moment de l’envoi de la formule de la fonction à MetaPost !! Décidément, on en apprend tous les jours…

Edit : le mainteneur de mfpic m’a confirmé que ^ est bien traduit en ** dans son package. Il conseille cependant de privilégier ** à ^ de peur d’éventuelles incompatibilités qu’il n’aurait pas prévues.

22)
Ellipse
, le 28.11.2011 à 22:57

@Frank Pastor

J’ai corrigé le lien…

23)
Franck Pastor
, le 28.11.2011 à 23:12

Ellipse, merci.

J’ai fait naturellement entre-temps une recherche sur Google et j’ai vu la page que ton lien indique maintenant, mais on ne pouvait pas être sûr que c’était bien celle que tu voulais indiquer.

J’ai installé donc TeXGraph sur mon système (10.6.8, MacTeX 2011), et ça semble marcher au poil. J’ai vu qu’il y avait tout aussi bien un « langage » TeXGraph pour ceux qui tiennent à entrer du code ! :-) Et j’ai la réponse à ma question : TeXGraph n’exporte pas en langage MetaPost, dommage. Bon, c’est sûr il exporte vers Tikz, pstricks, et à tous les formats d’images possibles ou quasi, on aurait donc tort de se plaindre.

24)
Franck Pastor
, le 29.11.2011 à 09:31

@ tous : suite à la discussion avec Guillôme, j’ai introduit dans l’article les précisions nécessaires sur l’opérateur d’exponentation ** de MetaPost et les précautions d’usage qu’il requiert.

25)
Franck Pastor
, le 19.12.2012 à 13:53

Note aux éventuels intéressés : je viens de légèrement modifier cet article dans la section « mfpic » et son exemple, en ce qui concerne la commande \opengraphsfile. J’y parle de l’emploi bien pratique qu’on peut y faire de la macro \jobname, que je ne connaissais pas jusqu’à présent.