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

Après présentation par l'article précédent de deux solutions de dessin liées à LaTeX, mfpic et MetaPost, l'article d'aujourd'hui prend le relais pour présenter deux autres solutions, largement utilisées : PSTricks et Tikz.

J'avais initialement prévu de présenter également une troisième solution de dessin aujourd'hui, appelée Asymptote, mais l'article étant déjà d'une grande longueur avec les seuls PSTricks et Tikz, j'ai finalement décidé de reporter la présentation d'Asymptote à un prochain (et dernier) épisode de la série.

Je répète l'avertissement d'usage : cette série d'articles suppose de la part du lecteur une connaissance minimale de LaTeX, qu'on peut acquérir en lisant par exemple les deux premiers chapitres du cours d'introduction à LaTeX publié sur cuk.ch par Fabien Conus et moi-même. Bien sûr, si ce n'est pas votre cas vous pouvez toujours poursuivre la lecture par simple curiosité — très bien placée en l'occurrence — mais si vous êtes vraiment allergique à tout ce qui n'est pas wysiwyg, il vaut mieux savoir que vous risquez alors le choc anaphylactique ! ;)

Comme pour mfpic et MetaPost dans l'article précédent, je me focaliserai moins ici sur la syntaxe de PStricks et de Tikz que sur la façon de les utiliser sur Mac OS X, plus précisément avec l'interface graphique TeXShop et la distribution MacTeX.

La raison ? Il existe déjà une floppée de documentations, exemples et tutoriels pour ces solutions graphiques, d'aussi bonne qualité qu'on peut souhaiter, presque tous librement disponibles sur le web. Il existe même quelques livres sur le sujet, que je citerai à la fin de cette série d'articles. Mais il y a en revanche peu de sources d'information qui nous indiquent comment faire tourner tout cela sur notre plateforme favorite. Concernant LaTeX, Mac OS X a hélas toujours été un peu délaissé par les documentations et manuels, lesquels préfèrent en général considérer les outils LaTeX de Windows ou Linux. Cette série d'articles souhaite donc contribuer à combler cette lacune.

PSTricks

De toutes les solutions LaTeX de dessin hors l'environnement picture, PSTricks est la plus ancienne avec mfpic qui à l'époque (1992) ne tournait qu'avec MetaFont. Elle a été créée par l'Américain Timothy van Zandt et est aujourd'hui maintenue par l'Allemand Herbert Voß.

Comme MetaPost, PSTricks se base sur le langage PostScript pour produire ses dessins. Mais contrairement à MetaPost, qui est un programme externe à LaTeX comprenant son propre langage, PSTricks est un « paquet » de commandes LaTeX, chacune d'entre elles produisant un code PostScript.

Les commandes PostScript utilisées par PSTricks faisant, contrairement à celles de MetaPost, intervenir des calculs, PSTricks est incompatible avec pdfLaTeX et LuaLaTeX. Il fonctionne le plus directement avec le chemin de composition traditionnel TeX+ dvips, qui produit d'abord un fichier DVI puis un fichier PostScript avec l'extension .ps contenant entre autres les instructions de dessins de PSTricks traduites en PostScript. Ensuite on applique ps2pdf de GhostScript (ou le Distiller d'Apple) pour obtenir une sortie finale en PDF contenant également les dessins voulus. Ce chemin de composition est appelé en abrégé « TeX et DVI » dans le menu « Composition » de TeXShop.

image

PSTricks fonctionne également directement avec XeLaTeX et son driver associé xdvipdfmx, et on verra plus loin qu'il y a moyen de l'utiliser, indirectement, avec pdfLaTeX et (sous certaines restrictions) avec LuaLaTeX.

PSTricks est d'assez loin la solution de dessin pour LaTeX la plus complète et la plus riche en extensions actuellement. Il y a le « cœur » de PSTricks, le paquet pstricks proprement dit, qu'il faut toujours charger en premier et sur lequel tous les autres paquets de la famille PSTricks sont basés ; il y a ensuite les extensions dites « de base » :

  • pst-plot pour les courbes de fonctions à une variable,
  • pst-tree pour les arbres et diagrammes,
  • pst-3d pour les dessins basiques en 3D,
  • pst-coil pour les connections de nœuds de graphes avec zigzags et ressorts,
  • pst-text pour écrire des textes le long de courbes et remplir des caractères selon la fantaisie de l'auteur,
  • pst-eps pour créer des fichiers EPS correspondant à chaque dessin,
  • pst-fill permettant des instructions de remplissage sophistiquées,
  • multido qui fournit une commande permettant d'exécuter des instructions en boucle ;

et une multitude d'autres paquets affectés à des tâches plus ou moins spécifiques : pst-eucl pour la géométrie euclidienne, pst-circ pour les dessins de circuits électriques, pst-optic pour l'optique, pst-3dplot pour les courbes et surfaces en 3D, etc.

Nous allons cependant nous limiter au tracé de la simple parabole y = x2 que nous avions déjà effectué avec mfpic et MetaPost, et nous ne ferons appel pour cela qu'à deux paquets de cette collection outre pstricks : pst-plot, lequel traite des courbes de fonctions mais également des axes de repères, des courbes de données, des courbes paramétrées, etc.) et multido car nous utiliserons une boucle. Voici ce que donne notre code de dessin de parabole en PSTricks :

% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = LaTeX

\documentclass[12pt]{article}
%
\usepackage[utf8]{inputenc}
%
\usepackage{pstricks, pst-plot, multido}
%
\begin{document}
%
\begin{pspicture}(-2.75,-0.5)(2.75, 5)
    % Instructions de configuration générale
    \psset{unit = 1.25cm, labelsep = 3pt}
    % Tracé des axes
    \psaxes[labels = none, ticks = none]%
        {->}(0,0)(-2.75,-0.5)(2.75, 5)
    % Tracé de la courbe
    \psplot[plotstyle = curve, linecolor = red]%
        {-2.2}{2.2}{x 2 exp}
    % Lignes tiretées
    \psline[linestyle = dashed](2, 0)(2, 4)(-2, 4)(-2, 0)
    % Marques sur les axes
    \psline(1, -3pt)(1, 3pt)
    \psline(-1, -3pt)(-1, 3pt)
         % Marques tracées en boucle
    \multido{\i=1+1}{3}{\psline(-3pt, \i)(3pt, \i)}
    % Labels
    \uput[dl](0, 0){$O$}
    \uput[d](2.75, 0){$x$}
    \uput[l](0, 5){$y$}
    \uput[ul](0, 4){$4$}
    \uput[d](2, 0){$2$}
    \uput[d](-2, 0){$-2$}
    %
\end{pspicture}
%
\end{document}

Tout d'abord, quelques mots sur la syntaxe. En jetant un œil sur le fichier LaTeX, quelque chose vous aura sauté aux yeux : du ps de partout ! Et pas celui du Parti socialiste, mais celui de PostScript bien sûr, celui qui figure dans le mot PSTricks lui-même.

Pour chaque schéma, les instructions de dessins de PSTricks doivent être incluses dans un environnement pspicture, comme celui de notre programme :

\begin{pspicture}(-2.75,-1)(2.75, 5)

\end{pspicture}

Les deux paires de coordonnées qui suivent l'appel de cet environnement précisent respectivement le point inférieur gauche et le point supérieur droit du dessin, ce qui permettra à LaTeX de délimiter une boîte rectangulaire qui lui sera réservée comme place dans le fichier de sortie. Bien faire attention à ce que le dessin ne sorte pas du rectangle, sinon il risque de « mordre » dans le texte qui l'environne (à moins que l'environnement pspicture soit placé en dehors du cours du texte, par exemple dans un environnement center).

Vous aurez sûrement noté que certaines commandes ont des options précisant certains paramètres du dessin selon une syntaxe du genre paramètre = valeur. Cette syntaxe est permise par le paquet xkeyval, chargé automatiquement par pstricks. Elle est un des points forts de PSTricks, car elle rend ses commandes particulièrement flexibles d'emploi.

Si on souhaite effectuer des paramétrisations valables pour plusieurs instructions de dessin, il faut les inclure en argument d'une commande \psset. Cette commande concerne les instructions PSTricks qui la suivent et son effet se limite au groupe LaTeX qui la contient. Dans le cas de notre programme, c'est l'environnement pspicture qui constitue ce groupe, puisque \psset est placé juste au début de cet environnement. Mais elle aurait pu se trouver en dehors : par exemple, s'il y a plusieurs schémas, on peut si on le souhaite faire en sorte que l'instruction \psset les affecte tous en la plaçant juste après le début de l'environnement document.

Dans l'instruction

\psplot[plotstyle = curve, linecolor = red]%
        {-2.2}{2.2}{x 2 exp}

qui tracera notre fonction, remarquez la notation dite polonaise inverse de l'expression de la fonction carrée : x 2 exp. Les opérandes d'abord, l'opérateur ensuite ! C'est en fait avec cette syntaxe que se font toutes les opérations dans le langage PostScript. Les utilisateurs de bonnes vieilles calculatrices TI ou HP ne seront pas dépaysés ! Pour ceux qui préfèrent la syntaxe habituelle, alias « notation infixe », il existe heureusement le paquet pst-infixplot qui leur permettra de l'utiliser dans PSTricks.

Je n'entre pas dans le détail des autres commandes, dont le rôle est précisé dans les commentaires du fichier LaTeX.

Il est temps de passer à l'exécution de notre programme. Sauvegardez-le, par exemple sous le nom de pstricks-parabole.tex, et composez-le :

  • soit avec l'option « LaTeX » du menu de composition, en ayant coché auparavant l'option « TeX + DVI » du même menu,
  • soit tout simplement par le raccourci « commande-T » qui déclenchera automatiquement ici le même type de composition, puisque nous avons pris la précaution d'indiquer dans notre programme l'option LaTeX dans le commentaire spécial en deuxième ligne.

Voilà alors le résultat :

image

De façons générale, remarquez que le trait de dessin est par défaut plus épais que pour mfpic et MetaPost. C'est un choix délibéré des concepteurs de PSTricks, mais il est facile de changer ce style par défaut, pour tout le dessin ou un élément de celui-ci. Précisément, il suffit d'inclure le paramètre linewidth en argument de \psset ou en option d'une instruction de tracé et de lui affecter l'épaisseur voulue.

Considérons maintenant un des principaux soucis liés à l'utilisation de PSTricks : son incompatibilité avec pdfLaTeX.

Comme je l'ai dit plus haut, il est cependant possible d'utiliser PSTricks avec pdfLaTeX, mais indirectement. Il existe plusieurs façons de le faire, et mon expérience personnelle m'a montré que la moins mauvaise meilleure est d'utiliser le paquet auto-pst-pdf, en l'incluant en préambule de notre document, après le chargement des modules de PSTricks :

\usepackage{auto-pst-pdf}

Une fois ceci effectué, vous pouvez composer votre fichier avec pdfLaTeX. auto-pst-pdf enclenche alors automatiquement (comme son nom l'indique) une succession d'étapes : tout d'abord la composition par la route traditionnelle TeX + dvips, mais seuls les environnements produisant du code PostScript (ici pspicture) sont alors pris en compte. On obtient un fichier contenant le code PostScript de la ou les figures, lequel fichier est alors converti en PDF par le programme ps2pdf. La ou les figures sont alors individuellement extraites du fichier PDF résultant grâce à un programme appelé pdfcrop, et finalement incluses dans le fichier PDF final après composition finale avec pdfLaTeX. Le tout en un seul clic de souris. Ouf !

La seule contrainte imposée par l'utilisation du paquet auto-pst-pdf sur le code PSTricks est que chaque commande \psset doit impérativement être contenue dans un environnement pspicture (ce qui est le cas dans notre exemple), sinon elle ne sera pas prise en compte. Ainsi, si on veut spécifier un paramétrage commun à toutes nos figures PostScript via une instruction \psset, il faudra répéter cette instruction autant de fois qu'il y a d'environnement pspicture, c'est-à-dire de dessins.

Le paquet auto-pst-pdf permet également à LuaLaTeX de fonctionner des dessins issus de PSTricks, mais il y a alors une restriction majeure : le paquet fontspec, qui permet l'incorporation de polices du système d'exploitation, ne doit pas être chargé. Voyez ici pour pouvoir contourner ce nouveau « stûûût » comme on dit ici en Belgique.

Ceci précisé, il y a également un autre obstacle à lever, posé cette fois-ci par TeXShop : pour pouvoir enclencher l'exécution de tous les programmes annexes dont il a besoin, le paquet auto-pst-pdf nécessite que pdfLaTeX et LuaLaTeX soient lancés avec l'option shell-escape. Sous TeXShop, c'est par défaut le cas de pdfLaTeX mais pas de LuaLaTeX. Il faut modifier en conséquence le script « LuaLaTeX.engine » figurant dans le dossier ~/Library/TeXShop/Engines :

image

Pour y remédiez, ouvrez ce script dans votre éditeur de texte favori, et ajouter l'option shell-escape à la ligne d'appel de lualatex qui s'y trouve. Comme ceci :

lualatex -file-line-error --shell-escape -synctex=1 "$1"

Et le tour est joué.

Pour plus de précision sur le fonctionnement du paquet auto-pst-pdf, vous pouvez jeter un œil sur son mode d'emploi (en anglais).

Notez pour finir que certaines rumeurs font état d'une possible incorporation d'un interpréteur PostScript dans LuaTeX, ce qui rendrait LuaLaTeX directement compatible avec PSTricks. Mais on n'en est pas encore là…

Pour ceux qui souhaitent en savoir plus sur PSTricks, outre les ouvrages de référence cités en fin d'article il y a sur le web trois adresses incontournables : le site officiel de PSTricks qui liste tous ses paquets et qui en montre bien toute la puissance et la richesse, et la section du site Syracuse consacrée à PSTricks, avec une magnifique galerie de dessins. Enfin, le projet Sarovar propose un excellent tutoriel d'apprentissage de PSTricks par l'exemple, en plusieurs parties à télécharger ici.

Tikz

Tikz est un paquet LaTeX créé par l'Allemand Till Tantau, par ailleurs auteur de Beamer, en 2006. De toutes les solutions graphiques présentées ici, c'est la plus récente. Elle a néanmoins connu très vite un certain succès dans la communauté TeX, et est déjà très riche en fonctionnalités de toutes sortes, même si elle est encore assez loin de PSTricks à ce niveau (privilège de l'âge).

Le nom de ce paquet peut vous sembler particulier : en fait, « Tikz » est un acronyme récursif signifiant Tikz ist kein Zeichenprogramm, allemand pour « Tikz n'est pas un programme de dessin ». C'est un clin d'œil appuyé à l'acronyme également récursif du fameux projet Gnu, qui signifie « Gnu is Not Unix » et dont Tikz reprend la licence Gnu GPL (en plus de la licence LPPL propre à LaTeX). Dans le cas de Tikz, Till Tantau veut signifier avec ce jeux de mots que son programme est destiné à faire des schémas de type scientifique plutôt que l'équivalent de dessins artistiques « à la main ».

Tikz est après l'environnement picture la solution graphique la mieux intégrée à LaTeX, la plus portable. Elle fonctionne en effet avec tous les moteurs TeX et tous leurs dérivés LaTeX. Elle n'est (actuellement) incompatible qu'avec ConTeXt-mkIV, la dernière version de ConTeXt, mais cette incompatibilité est en fait valable pour toutes les solutions graphiques présentées dans cette série d'articles, MetaPost et Asymptote exceptés (MetaPost étant même carrément intégré à ConTeXt).

La grande portabilité de Tikz vient de sa conception en trois couches distinctes : l'interface utilisateur (Tikz proprement dit), le paquet d'instructions graphiques PGF (Portable Graphic Format) dont Tikz est un ensemble de macros plus accessibles à l'utilisateur, et enfin la « couche système » sur laquelle PGF lui-même est basé, un ensemble minimal d'instructions graphiques facilement traduisibles en les différents langages spécifiques à chaque « pilote » (driver) TeX, qu'il s'agisse de dvips, pdfTex et LuaTeX (qui ont tous les deux leur propre pilote), xdvipdfmx (pilote de XeTeX), etc.

Notez qu'il est parfaitement possible de construire sur PGF d'autres interfaces utilisateur que Tikz : en fait, il en existe déjà une autre, PGFpict2e, qui reprend exactement les commandes de l'environnement picture et lui donne les mêmes fonctionnalités que celles que lui octroie le paquet pict2e, dont j'ai brièvement parlé dans l'article précédent. Mais il s'agit plus d'un exercice de style que quelque chose de vraiment utile par rapport à pict2e. Till Tantau rêve de construire également une interface utilisateur à PGF reprenant, au moins en partie, les instructions de PStricks, mais cela reste un vœu pieux à ce jour.

Après cette courte présentation, passons à notre exemple graphique. Voici ce que donne le code de notre représentation de la fonction y = x2 en Tikz :

% !TEX encoding = UTF-8 Unicode
\documentclass[12pt]{article}
%
\usepackage{tikz}
%
\begin{document}
%
\begin{tikzpicture}[scale = 1.25]
    % Tracé de la parabole
    \draw[red, domain = -2.2:2.2, smooth] plot (\x, {(\x)^2});
    % Alternative par Gnuplot
    %\draw[red, domain = -2.2:2.2, smooth] plot function{x**2};

    % Lignes tiretées
    \draw[dashed] (2, 0) -- (2, 4) -- (-2, 4) -- (-2, 0);
    % Axes et leurs labels
    \draw[->] (-2.75, 0) -- (2.75, 0) node[below]{$x$};
    \draw[->] (0, -0.5) -- (0, 5) node[left]{$y$};
    % Marques sur les axes et labels correspondants
    \draw (2, 2pt) -- (2, -2pt) node[below]{$2$};
    \draw (1, 2pt) -- (1, -2pt);
    \draw (-1,2pt) -- (-1, -2pt);
    \draw (-2, 2pt) -- (-2, -2pt) node[below]{$-2$};
         % Marques tracées en boucle
    \foreach \y in {1, 2, 3}
        \draw (2pt, \y) -- (-2pt, \y);
    % Autres labels
    \draw (0, 0) node[below left]{$O$};
    \draw (0, 4) node[above left]{$4$};
    %
\end{tikzpicture}
%
\end{document}

Notez la syntaxe vraiment particulière des instructions Tikz. Le connaisseur y repère aisément des éléments empruntés à MetaPost, comme dans l'usage du point-virgule pour indiquer la fin de chaque instruction. Et une commande comme

\draw (-1, 2pt) -- (-1, -2pt);

serait une pure instruction MetaPost s'il n'y avait pas la contre-oblique « \ » si caractéristique du monde de TeX.

On devine que PSTricks a également inspiré l'auteur, comme dans l'usage permis d'arguments optionnels du style paramètre = valeur. Quant au nom même de l'environnement tikzpicture, il fait clairement référence au pspicture de PSTricks. Le code d'un dessin Tikz se trouve en effet typiquement dans un environnement tikzpicture, comme pour son analogue de PSTricks :

\begin{tikzpicture}[scale = 1.25]

\end{tikzpicture}

Contrairement à PSTricks et sa commande \psset, ce sont les options de cet environnement qui servent de paramétrage global au dessin. Ici l'option scale=1.25 indique que le graphe est à agrandir selon un facteur de 1,25, l'unité par défaut d'un graphe Tikz étant le centimètre. Mais chaque commande de Tikz peut disposer d'arguments optionnels qui outrepassent si nécessaire ce paramétrage général.

Comme d'habitude, pour le reste des explications sur ce que fait chaque commande, voyez les commentaires du programme lui-même. Maintenant, sauvegardez ce programme si ce n'est pas déjà fait, par exemple sous le nom de tikz-parabole.tex, et exécutez-le. Quel que soit le type de LaTeX que vous utilisiez (LaTeX classique, pdfLaTeX, XeLaTeX, LuaLaTeX…), le résultat devrait être le suivant :

image

Notez la finesse du trait par défaut, par rapport à PSTricks. En fait il est carrément deux fois moins épais, 0,4 pt d'épaisseur contre 0,8 pt.

Cela peut d'ailleurs représenter un problème si on ne dispose que d'un écran ou d'une imprimante à résolution basse : certaines parties du dessin peuvent alors ne pas apparaître du tout, particulièrement à l'écran. Mais avec les périphériques dont on dispose actuellement, c'est très peu probable, et de toutes façons on peut facilement changer l'épaisseur du trait par défaut si vraiment cela est nécessaire. Il suffit de changer la valeur du paramètre line width en option de de l'environnement tikzpicture (on peut aussi l'utiliser en option d'une commande de dessin particulière si on ne souhaite modifier que l'épaisseur du trait que cette commande produit).

Le principal inconvénient de Tikz est ailleurs : il s'agit de ses capacités de calcul assez limitées. En effet, il dépend de TeX pour ses calculs, et TeX n'a pas été initialement prévu pour cela : c'est un formateur de texte et non une calculatrice sophistiquée !

Prenons un exemple concret mettant en évidence ce problème : la gestion par Tikz des courbes de Bézier, souvent utilisées pour la création de courbes d'interpolation (courbes plus ou moins régulières devant passer par plusieurs points donnés). Pour construire une courbe d'interpolation avec la technique des courbes de Bézier, on a naturellement besoin de connaître les coordonnées des points d'interpolation (les points par lesquels cette courbe d'interpolation doit passer), mais on a également besoin de connaître les coordonnées d'autres points, qui a priori ne se trouvent pas sur la courbe et qu'on appelle « points de contrôle ».

Or il y a deux points de contrôle à préciser par point d'interpolation (sauf pour chaque extrémité de la courbe où il n'en faut qu'un). Et tandis que MetaPost et Asymptote (et sans doute PSTricks, je n'ai pas vérifié) calculent eux-mêmes les coordonnées adéquates pour ces points de contrôle, Tikz en est incapable et il revient donc à l'utilisateur de lui fournir ces coordonnées.

Certes, c'est un détail technique, qui n'est pas rédhibitoire et qui est loin de concerner tous les utilisateurs potentiels de Tikz. Si j'en parle, c'est que je fais moi-même un usage intensif des facilités qu'offre MetaPost pour construire des courbes de Bézier, et que l'absence de ces facilités dans Tikz est de loin la principale raison pour laquelle je n'ai pas adopté ce paquet graphique et suis resté fidèle à mfpic/MetaPost.

Un autre inconvénient potentiel de Tikz concerne les courbes de fonctions et les courbes paramétrées. La gamme actuelle de fonctions qu'on peut tracer est déjà relativement étendue (cf. références citées plus bas), mais si la fonction est un tant soit peu « tordue », le manuel de Tikz recommande de passer par un outil externe appelé Gnuplot, lequel est une sorte de calculatrice graphique en ligne de commande très perfectionnée. C'est Gnuplot qui calculera alors les coordonnées des points du graphe de la fonction, et qui les transmettra à Tikz pour tracer le graphe proprement dit.

Or l'installation de Gnuplot sur OS X n'est pas forcément évidente. On peut passer par le site de Gnuplot indiqué plus haut (mais alors il faut compiler les sources) par Fink (ne marche pas chez moi) ou par MacPorts (pas essayé). Ce que j'ai encore trouvé de plus simple, c'est d'utiliser la version de Gnuplot spécialement compilée pour Mac OS X qui est fournie en même temps que l'application de calcul formel (excellente, libre et gratuite) wxMaxima.

Téléchargez donc la version Mac OS X de wxMaxima ici. Un fichier « Maxima 5.25.0.dmg » devrait arriver dans votre dossier « Téléchargements » ou sur votre bureau. Après l'avoir décompressé, vous verrez qu'il contient six éléments, dont notre Gnuplot :

image

Je suppose que vous n'avez pas besoin d'un logiciel de calcul formel comme Maxima ni de son interface wxMaxima, donc contentez-vous d'installer seulement Gnuplot dans le dossier « Applications ». Le voilà prêt à être utilisé ! Pour ceux qui veulent se servir de cette calculette graphique en dehors de Tikz, il suffit de double-cliquer sur l'icône de Gnuplot pour en ouvrir une session… en ligne de commande, je le rappelle.

Mais dans notre cas, c'est l'utilisation par Tikz qui nous intéresse, via TeXShop. Et il faut donc faire en sorte que Tikz, par le biais de TeXShop, puisse utiliser notre Gnuplot. Mais pour cela, il faut que le chemin d'accès de l'exécutable de Gnuplot, ici

/Applications/Gnuplot.app/Contents/Resources/bin

soit inclus dans le « PATH » interne de recherche d'exécutables de TeXShop, ce qui n'est pas le cas. Le seul moyen de résoudre le problème est de passer par la création d'un engine TeXShop spécifique. Ouvrez votre éditeur de texte favori, et entrez-y le code suivant :

#!/bin/tcsh
set path = (/Applications/Gnuplot.app/Contents/Resources/bin $path)
pdflatex --shell-escape -synctex=1 "$1"

(j'ai supposé dans ce fichier que vous utilisez pdfLaTeX pour compiler votre graphique). Sauvegardez votre fichier sous un nom avec l'extension .engine, par exemple pdfLaTeX-Gnuplot.engine et placez-le dans le dossier « Engines » du dossier « TeXShop » de votre Bibliothèque personnelle (là où se trouve le script « LuaLaTeX.engine » qu'on a modifié plus haut).

Maintenant, ouvrez le Terminal et chargez le répertoire des engines de TeXShop en entrant l'instruction

cd ~/Library/TeXShop/Engines

Ensuite, entrez la commande

chmod u+x pdfLaTeX-Gnuplot.engine

pour activer le « bit d'exécution » de ce nouvel engine de l'utilisateur courant. Concrètement, cela signifie que Mac OS X vous autorisera à l'exécuter, directement ou via TeXShop.

Une fois ceci effectué, quittez TeXShop et redémarrez-le. Vous aurez alors accès à cet engine et à son exécution en utilisant le menu déroulant de composition de votre fenêtre d'édition.

image

Vérifiez que cela marche dans notre programme LaTeX en décommentant l'instruction de tracé de la fonction par Gnuplot,

%\draw[red, domain = -2.2:2.2, smooth] plot function{x**2};

(oui Guillôme, c'est bien x**2 et pas x^2 parce qu'ici c'est la syntaxe de Gnuplot qui doit être employée et pas celle de LaTeX !) puis en commentant l'instruction semblable qui n'utilise pas Gnuplot, située deux lignes au-dessus,

\draw[red, domain = -2.2:2.2, smooth] plot (\x, {(\x)^2});

et enfin en exécutant à nouveau le programme avec l'engine pdfLaTeX-Gnuplot. Normalement, la parabole devrait à nouveau apparaître, mais cette fois-ci les points par lesquels passent cette courbe auront été calculés par Gnuplot, et non par TeX. Encore une fois, pour une fonction simple comme celle-ci, ça n'était pas vraiment nécessaire, mais cela aurait pu l'être si la fonction avait été d'expression compliquée.

Ces inconvénients pourraient être levés dans le cas de l'utilisation de Tikz dans LuaLaTeX : on pourrait en effet (théoriquement) faire effectuer les calculs nécessaires par le langage de script Lua qui lui est incorporé. Malheureusement, à l'heure où je rédige cet article cette fonctionnalité n'a pas encore été implémentée.

Si vous avez été alléché par cette présentation de Tikz, vous pouvez allez plus loin en lisant l'excellent livre au format PDF Tikz pour l'impatient de Gérard Tisseau et Jacques Duma, librement distribué. Vous pouvez également (c'est même vivement recommandé) consulter la documentation officielle de Tikz, par Till Tantau lui-même. Celle-ci ne se contente pas d'être un manuel de référence très complet, elle comprend également un excellent tutoriel pour s'initier aux principales commandes et un précieux Guideline pour la création de dessins scientifiques qui peut également être utile à ceux qui n'utilisent pas Tikz. Enfin, n'hésitez pas à fouiller dans l'immense galerie d'exemples de dessins Tikz du site TeXample.net, dont les sources sont téléchargeables.

Voilà pour cette présentation longue, mais cependant succincte au vu de leurs possibilités, des paquets LaTeX de dessin PSTricks et Tikz. Le mois prochain, je terminerai donc cette série d'articles par la présentation d'Asymptote, qui est elle, comme MetaPost, une application externe à LaTeX mais spécialement conçue pour fonctionner de conserve avec lui. Je ferais enfin dans cet article un bilan comparatif des solutions graphiques que je vous aurai présentées.

32 commentaires
2)
flup
, le 29.12.2011 à 09:04
[modifier]

Très intéressant, comme toujours :)

Mes besoins graphiques étant limités, j’utilise Tikz qui me semble le plus simple à aborder (exemple : dessiner le “cycle des quintes” pour des élèves de formation musicale). Ce que j’apprécie (mais j’imagine que les autres systèmes le font aussi), c’est la possibilité d’inclusion de fichiers (pdf ou autres) dans le dessin lui-même.

J’ai donc en général la construction suivante : code LaTeX contenant du code Tikz contenant lui-même du code LilyPond (partitions musicales).

In code we trust :p

3)
Franck Pastor
, le 29.12.2011 à 09:34
[modifier]

Caplan, tu veux bien illustrer mon prochain article ? :-)

Mes besoins graphiques étant limités, j’utilise Tikz qui me semble le plus simple à aborder (exemple : dessiner le “cycle des quintes” pour des élèves de formation musicale). Ce que j’apprécie (mais j’imagine que les autres systèmes le font aussi), c’est la possibilité d’inclusion de fichiers (pdf ou autres) dans le dessin lui-même.

PStricks ne le fait pas aussi bien, il n’inclut que des dessins externes PostScript. Asymptote aussi apparemment, d’après mes premièrs investigations. MetaPost non, mais il permet l’inclusion de dessins externes PDF, PNG et JPEG si on fait appel à son extension MetaFun, dont j’ai parlé dans l’article précédent.

4)
JPO1
, le 29.12.2011 à 10:07
[modifier]

Comme flup j’utilise Tikz pour commenter des images en format pdf.

J’utilise aussi les deux packages pgfplots et pgfplotstable basée sur Tikz afin d’automatiser par des macros simples la production de tableaux et de graphes en partant de fichiers de données txt, avec une grande souplesse. Dans un rapport annuel une vingtaine de graphes et le double de tableaux sont des nombres vite atteints. Des données sur les 365 jours de l’année sont courantes dans mon métier, et pourtant tout cela est compilé avec rapidité. Avec ces outils à ma disposition j’ai abandonné Gnuplot, je n’ai à produire que des graphiques simples.

Il est vrai que j’ai toujours un faible pour postscript sans doute parce que j’ai appris à m’en servir très tôt, je trouve ce langage très « intelligent ». Mais pdf a pris le dessus et je ne sais pas programmer en pdf, aussi suis-je content que des programmeurs mettent gracieusement à ma disposition ces outils qui me facilitent le travail. Merci à tous.

J’attends avec impatience l’article sur Asymptote.

6)
jpg
, le 30.12.2011 à 01:12
[modifier]

Sur ordinateur, il est toujours difficile d’ajouter de petites illustrations, de faire de croquis. Bien davantage avec LaTex. PStricks et Tikz offrent des solutions simples au moins pour des figures élémentaires. Merci pour cet article très clair. Je suis impatient de lire l’article sur Asymptote.

7)
djtrance
, le 30.12.2011 à 07:48
[modifier]

Décidemment, Franck n’arrivera jamais à me faire passer à LaTeX, malgré la puissance de la bête! :)

Merci pour ce loooooooonnnng test très instructif :)

8)
ReReX
, le 30.12.2011 à 09:06
[modifier]

Ça marche aussi pour les masques de films d’horreur? Poussez pas je sors…

9)
Franck Pastor
, le 31.12.2011 à 17:39
[modifier]

Merci pour vos commentaires (même sarcastiques :-)). Désolé pour le retard à réagir, je suis encore dans les cartons de déménagements et n’ai pas encore de connexion internet dans mon nouveau chez-moi. J’écris depuis un café-internet… sur Windows
:-(

L’article pour Asymptote est pour le mois prochain, il est déjà bien avancé d’ailleurs.

Il est vrai que j’ai toujours un faible pour postscript sans doute parce que j’ai appris à m’en servir très tôt, je trouve ce langage très « intelligent ». Mais pdf a pris le dessus et je ne sais pas programmer en pdf, aussi suis-je content que des programmeurs mettent gracieusement à ma disposition ces outils qui me facilitent le travail. Merci à tous.

D’après ce que j’ai ouï dire, PDF contrairement à PostScript ne serait pas un vrai langage de programmation puisqu’il n’aurait pas de calculateur intégré. Ca n’aurait donc guère d’intérêt de programmer directement en PDF.

10)
veyne
, le 07.01.2012 à 17:22
[modifier]

Bonjour et d’abord un grand merci pour tous ces articles passionnant sur LaTeX qui m’ont bien aidés depuis pas mal de temps déjà…. jusqu’au bonheur entrevu enfin de réussir à utiliser gnuplot dont la difficulté d’installation m’avait toujours rebuté jusqu’alors. Je suis totalement satisfait par tikz et il ne me manquait que ça pour tester des horreurs du style (sin(1/x))/x et autre…. Je crois avoir suivi à la lettre la procédure d’installation, j’ai bien accès au nouvel engine mais quand je compose, j’ai droit à ce message : ”/Users/veyne/Library/TeXShop/Engines/pdfLaTeX-Gnuplot.engine ne possède pas le bit d’exécution activé.” Message qui me laisse perplexe. Quel est ce bit d’exécution ?

11)
Franck Pastor
, le 07.01.2012 à 17:40
[modifier]

Ah zut, zut et zut, j’avais oublié de parler de ça !

Je ne vais pas entrer dans les détails du pourquoi du comment, c’est en fait une problématique concernant les tréfonds unixiens du système : celle des « permissions et autorisations » régissant l’utilisation d’un fichier.

Disons en simplifiant que l’utilisateur (vous) doit être « autorisé » par le système à exécuter ce fichier pdfLaTeX-Gnuplot.engine. Pour ce faire, ce n’est pas trop compliqué. Ouvrez le Terminal, placez-vous dans le répertoire des Engines de TeXShop en entrant l’instruction

cd ~/Library/TeXShop/Engines

et ensuite entrez la commande

chmod u+x pdfLaTeX-Gnuplot.engine

Ensuite, vous pouvez quitter le Terminal. Quittez également TeXShop et redémarrez-le. L’engine devrait alors fonctionner normalement.

Je vais insérer tout cela dans l’article dès que je peux.

12)
veyne
, le 07.01.2012 à 17:55
[modifier]

Quelle rapidité de réaction !

Alors oui je n’ai plus ce message sibyllin (pour moi) mais le finder m’indique que l’application gnuplot ne peut s’ouvrir car les applications PowerPC ne sont plus prises en charge.

Pourtant quand je lance gnuplot il y a bien un terminal qui s’ouvre…

Je ne suis pas sûr de bien comprendre : il faut d’abord composer avec la nouvelle engine puis avec pdfLatex ? (c’est ce que j’ai fait) car quand je compose uniquement avec la nouvelle il ne se passe rien, visuellement dans la console.

13)
Franck Pastor
, le 07.01.2012 à 18:08
[modifier]

Je suis sur mon ordinateur en ce moment, ça explique la rapidité de réaction :-)

Alors oui je n’ai plus ce message sibyllin (pour moi) mais le finder m’indique que l’application gnuplot ne peut s’ouvrir car les applications PowerPC ne sont plus prises en charge.

??? Cette version de Gnuplot n’est pourtant pas une application PowerPC ! Vous l’avez bien téléchargée à l’endroit que j’ai indiqué dans l’article ?

Je ne suis pas sûr de bien comprendre : il faut d’abord composer avec la nouvelle engine puis avec pdfLatex ? (c’est ce que j’ai fait) car quand je compose uniquement avec la nouvelle il ne se passe rien, visuellement dans la console.

Non, non, il suffit normalement de composer avec le nouvel Engine, et une seule fois. Que ça ne marche pas me dépasse, il me faudrait plus de renseignements. Vous utilisez une vieille version de Gnuplot ? ou de TeXShop ? Quel système utilisez-vous ?

14)
veyne
, le 07.01.2012 à 18:19
[modifier]

Je l’ai prise avec Maxima oui, ma version de gnuplot est la 4.2.6.

Quand je compose avec le nouvel Engine, il ne se passe rien.

J’utilise la distribution de 2011 et osx 10.7.2.

15)
Franck Pastor
, le 07.01.2012 à 18:29
[modifier]

Je suis encore sur Snow Leopard. Peut-être que cette version de Gnuplot ne fonctionne pas sur Lion, mais ça me paraît bizarre quand même…

Avant d’aller plus loin, à tout hasard quittez carrément votre session, redémarrez-la et essayez à nouveau…

16)
veyne
, le 07.01.2012 à 18:32
[modifier]

Gnuplot n’aurait pas un lien avec Rosetta ? Ca ne tourne plus sur Lion.

J’ai un autre mac encore sous snowleopard, j’essaierai d’installer tout ça, idem pour la session que je ne peux pas quitter avant quelques heures, je vous tiens au courant, merci pour votre aide en tous cas.

17)
Franck Pastor
, le 07.01.2012 à 18:41
[modifier]

Gnuplot n’aurait pas un lien avec Rosetta ? Ca ne tourne plus sur Lion.

Ce portage-là de Gnuplot est un Universal Binaries et ne devrait donc pas utiliser Rosetta pour tourner. S’il y a incompatibilité avec Lion, elle vient sûrement d’ailleurs…

18)
Franck Pastor
, le 09.01.2012 à 18:48
[modifier]

Juste pour signaler que j’ai modifié l’article pour y indiquer comment activer ce fameux bit d’exécution !

19)
veyne
, le 21.01.2012 à 23:42
[modifier]

Bon, j’ai enfin pu remettre la main sur snow leopard et tester… sans succès, même chose qu’avec Lion mais sans le message sur les applis power pc : je compose le code de l’article avec la ligne x**2 décommenté, en utilisant pdfLaTeX-Gnuplot comme engine et rien ne s’affiche dans la console (alors que le fichier compile normalement en LaTeX par ailleurs).

Je dois sans doute faire quelque chose de travers mais quoi… ?

20)
Franck Pastor
, le 22.01.2012 à 01:27
[modifier]

Je viens de penser à une cause possible, c’est que l’appel de PDFLaTeX ne fonctionnerait pas en ligne de commande sur tes configurations. À vérifier : ouvre le Terminal, entres-y simplement pdflatex puis appuie sur Return, et normalement un message de bienvenue devrait s’afficher. C’est le cas ?

21)
veyne
, le 22.01.2012 à 10:28
[modifier]

Voilà ce qu’il me dit sur Snow :

This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009) **

et sur Lion :

This is pdfTeX, Version 3.1415926-1.40.12 (TeX Live 2011) restricted \write18 enabled.

J’ai connu plus chaleureux comme message de bienvenue mais pourquoi pas !

22)
Franck Pastor
, le 22.01.2012 à 18:10
[modifier]

J’aurais dû dire « message d’accueil » plutôt que message de bienvenue, mais jusque-là tout est normal. Donc ce n’est pas un problème d’accès au shell pour LaTeX.

Continuons l’inspection : toujours dans le Terminal, charge le répertoire où tu as placé le fichier test pour Tikz (que je suppose nommé parabole.tex), avec une commande

cd chemin_vers_le_fichier

et entre une à une les trois instructions suivantes :

/bin/tcsh
set path= (/Applications/Gnuplot.app/Contents/Resources/bin $path)
pdflatex --shell-escape -synctex=1 parabole.tex

Est-ce que cette fois-ci la compilation se déroule bien, et sinon, y a-t-il un message ?

Au cas où ça ne marche pas, même sans message un fichier log devrait être produit et il faut regarder ce qu’il dit. Envoie-le moi alors par message privé (il est probablement trop long pour être inclus dans un commentaire).

23)
veyne
, le 22.01.2012 à 18:29
[modifier]

Alors ça marche mais j’ai du mal à suivre parce que ça marche quand je compile en Latex et avec la ligne : \draw[red, domain = -2.2:2.2, smooth] plot function{x**2};

si je compile avec pdfLaTeX-Gnuplot, rien comme avant.

24)
Franck Pastor
, le 22.01.2012 à 18:39
[modifier]

La seule explication que je vois maintenant est que TeXShop n’arrive toujours pas à lancer le script pdfLaTeX-Gnuplot.

C’est peut-être encore un problème d’autorisation. Toujours dans le Terminal, charge le dossier “Engines” du répertoire “TeXShop” de ta Bibliothèque personnelle. Ensuite entre

ls -l pdfLaTeX-Gnuplot

Peux-tu nous transmettre le résultat de cette commande ? Les permissions et autorisations de lancement du script y figurent.

25)
veyne
, le 22.01.2012 à 18:39
[modifier]

Rectificatif, en fait non j’ai cru qu’il traçait la parabole avec gnuplot mais si je change la formule la parabole reste pourtant seule la ligne gnuplot est active ! Comme s’il gardait une emprunte de la parabole en tikz normal. Même diagnostique sous Lion avec toujours le message power pc…

26)
Franck Pastor
, le 22.01.2012 à 18:46
[modifier]

Rectificatif, en fait non j’ai cru qu’il traçait la parabole avec gnuplot mais si je change la formule la parabole reste pourtant seule la ligne gnuplot est active ! Comme s’il gardait une emprunte de la parabole en tikz normal. Même diagnostique sous Lion avec toujours le message power pc…

De plus en plus bizarre !!! Bon, supprime tous les fichiers de ton répertoire (ou déplace-les) sauf parabole.tex, relance les trois étapes précédentes (avec Gnuplot censé construire la courbe !) et transmets-moi les deux fichiers log par courriel (l’un pour Snow, l’autre pour Lion). J’analyserai ça ce soir.

27)
veyne
, le 22.01.2012 à 18:51
[modifier]

Je vais faire ça ce soir aussi mais juste avant, j’obtiens ceci :

MBP:~ vd$ cd /Users/vd/Library/TeXShop/Engines MBP:Engines vd$ ls -l pdfLaTeX-Gnuplot ls: pdfLaTeX-Gnuplot: No such file or directory

pourtant j’ai bien pdfLaTeX-Gnuplot.engine à la lettre près dans le dossier Engines… ma situation me semble assez désespérée.

29)
veyne
, le 22.01.2012 à 19:03
[modifier]

réponse :

rwxr-r—@ 1 vd staff 118 21 jan 23:26 pdfLaTeX-Gnuplot.engine

30)
Franck Pastor
, le 22.01.2012 à 19:12
[modifier]

Tiens, ça n’a pas la gueule que ça devrait avoir, c’est-à-dire ça :

-rwxr-xr-x@ 1 vd staff 118 21 jan 23:26 pdfLaTeX-Gnuplot.engine

Chez toi il manque des “x” à gauche, signifiant en gros les droits d’exécution par des personnes tierces. Peut-être la raison pour laquelle TeXShop ne peut donc pas exécuter le script dans ta configuration.

Toujours dans le répertoire “Engines”, entre la commande

chmod 755 pdfLaTeX-Gnuplot.engine

Si tu réexécutes alors ls -l pdfLaTeX-Gnuplot.engine, ça devrait maintenant avoir les bons droits d’exécution : rwxr-xr-x.

Ensuite, redémarre une session de MacOSX, rouvre le fichier parabole.tex et relance une compilation avec pdfLaTeX-Gnuplot. Je croise les doigts…

31)
veyne
, le 22.01.2012 à 19:19
[modifier]

J’ai un doute là : je croyais que je compilais en pdflatex mais quand je regarde dans Texshop c’est en fait pdftex. Je crois que c’est une version plus récente de pdflatex qui n’apparaît plus dans Texshop, c’est ça ?

32)
Franck Pastor
, le 22.01.2012 à 19:23
[modifier]

C’est la première ligne du fichier log ou de la console qui te fait dire ça ? C’est normal que pdfTeX soit mentionné : lorsque pdfLaTeX est invoqué, il lance pdfTeX en sous-main, complété des macros de (pdf)LaTeX.