« PSTricks appartient au passé, TikZ est l’outil du présent. » Le résumé est courant, et un coup d’œil dans TeX Live 2024 le retourne. Le PSTricks qui y figure porte la version 3.19c, datée du 2 février 2024, et continue de recevoir des mises à jour. Xy-pic, en revanche, célèbre comme outil classique des diagrammes commutatifs, a été mis à jour pour la dernière fois le 6 octobre 2013 — et inscrit lui-même cette date dans le journal à chaque compilation. Cette page parcourt les quatre systèmes de dessin disponibles en LaTeX à côté de TikZ : PSTricks, qui fait appel à PostScript ; le vétéran Xy-pic ; Asymptote, langage autonome ; et MetaPost, issu de METAFONT — le tout organisé autour de leur chaîne de sortie. Car ce qui les sépare en pratique tient moins à la puissance d’expression qu’au moteur capable de les composer et à la manière dont il s’y prend.
Pour une figure nouvelle, TikZ reste-t-il le bon choix par défaut ?
Oui — presque à coup sûr TikZ. La raison n’est pas fonctionnelle mais tient à l’absence de frottement. TikZ fonctionne sous pdflatex, lualatex ou xelatex, sans programme externe ni étape de compilation supplémentaire. Chacun des quatre systèmes de cette page rompt au moins une de ces conditions : PSTricks ne fonctionne pas directement sous pdfLaTeX, Asymptote exige un binaire externe et trois passes, MetaPost suppose LuaLaTeX ou un programme dédié, et Xy-pic fonctionne mais n’est plus mis à jour depuis 2013. Les autres systèmes méritent malgré tout d’être connus pour trois raisons : la maintenance de documents existants, la vraie 3D et certains écosystèmes comme ConTeXt.
PSTricks : trente ans d’âge et toujours des versions nouvelles
PSTricks est un ensemble de macros qui appellent les fonctions de dessin de PostScript directement depuis la source TeX/LaTeX. Les lignes de copyright en tête de pstricks.tex racontent toute l’histoire du système : Timothy Van Zandt (1993, 1994, 1999), Denis Girou (2000–2003) et Herbert Voß (depuis 2004). Transmise par trois mainteneurs, la version présente dans TeX Live 2024 est la 3.19c, datée du 2 février 2024. Ce qui est ancien chez PSTricks, c’est le principe de conception, pas l’état de la maintenance.
La syntaxe se lit le plus souvent dans les noms. \psline trace une ligne ou une polyligne, \pscircle un cercle, \psframe un rectangle. Les coordonnées vont entre parenthèses, comme \psline(0,0)(3,2), et un cercle prend centre et rayon : \pscircle(2,2){1}. La figure entière tient dans un environnement pspicture, dont l’ouverture porte les coins inférieur gauche et supérieur droit : \begin{pspicture}(0,0)(4,3). Pour placer n’importe quoi à une coordonnée, on utilise \rput ; si l’on veut en plus un angle ou un décalage, \uput. Style de trait, pointes de flèche et couleur se donnent ensemble comme options entre crochets.
\begin{pspicture}(0,0)(4,3)
\psframe(0,0)(4,3)
\psline[linewidth=1pt]{->}(0,0)(3,2)
\pscircle(2,1.5){1}
\rput(2,1.5){$O$}
\end{pspicture}Cela trace un cadre de quatre unités de large et trois de haut, tire un segment fléché de l’origine vers (3,2), superpose un cercle de rayon 1 centré en (2,1.5) et place un O au centre. La famille d’extensions est riche elle aussi : pst-plot pour les tracés de fonctions, pst-node pour les nœuds et connexions, pst-3dplot pour la 3D, et bien d’autres. La puissance d’expression reste entière. Le problème se ramène au seul point de la section suivante.
L’erreur de PSTricks sous pdfLaTeX et les moyens de la contourner
On obtient ! Undefined control sequence. à la première commande de dessin. En passant un document contenant \usepackage{pstricks} dans pdflatex sous TeX Live 2024, l’arrêt survient à la ligne \psframe avec : "! Undefined control sequence. \c@lor@to@ps ->\PSTricks _Not_Configured_For_This_Format". Au milieu de l’expansion surgit un jeton-repère nommé \PSTricks_Not_Configured_For_This_Format, laissé indéfini à dessein, qui crie par son nom même que ce format n’est pas pris en charge. Le plus fâcheux : en nonstopmode, l’erreur est répétée des dizaines de fois et un PDF est tout de même produit jusqu’au bout — un PDF où la figure a simplement disparu.
La cause tient au mécanisme de sortie lui-même. PSTricks est conçu pour émettre ses tracés sous forme de \specials PostScript — instructions spéciales insérées dans le DVI — et pdflatex, qui produit directement du PDF, n’a nulle part où les recevoir. Trois issues existent, et toutes trois ont été vérifiées comme fonctionnelles sous TeX Live 2024.
# route 1: the classic DVI path
latex figure.tex
dvips figure.dvi -o figure.ps
ps2pdf figure.ps
# route 2: stay in pdflatex, let auto-pst-pdf shell out
pdflatex --shell-escape figure.tex
# route 3: just use xelatex - no extra package needed
xelatex figure.texLa voie 1 est la classique et la plus fiable : latex produit le DVI, dvips le convertit en PostScript, ps2pdf (de Ghostscript) en fait un PDF. Une mise en garde mesurée : Ghostscript 10.03.0 a affiché en chemin "WARNING: Transparency operations ignored - need to use -dALLOWPSTRANSPARENCY". Cela signifie que la transparence de PSTricks (la famille opacity) est abandonnée en silence ; si vous employez des remplissages translucides, vérifiez le résultat de vos yeux.
La voie 2 conserve le flux pdflatex et confie les coulisses à auto-pst-pdf. Le mécanisme est simple : pendant l’exécution de pdflatex, auto-pst-pdf lance un second LaTeX en processus fils, rend les seules parties PSTricks via PostScript dans <nom>-pics.pdf et les intègre. À l’exécution, le journal affiche "auto-pst-pdf: Auxiliary LaTeX compilation" : la voie 1 tourne en coulisse. Puisqu’un processus externe est lancé, --shell-escape est obligatoire ; l’oublier vaut un reproche sans détour : "! Package auto-pst-pdf Error: auto-pst-pdf will not work!" C’est la voie de choix lorsqu’il faut mêler des images PNG ou JPEG au même document.
La voie 3 est la plus surprenante et la plus simple : passer la même source, sans changer un seul caractère, dans xelatex. Aucun paquet supplémentaire à installer — le lot PSTricks de TeX Live 2024 fournit lui-même un fichier de configuration tex/generic/pstricks/config/xdvipdfmx.cfg, chargé automatiquement lors d’une exécution XeLaTeX (son nom apparaît d’ailleurs dans le journal). Comme XeLaTeX passe en interne par un format intermédiaire de la famille DVI, les \specials PostScript circulent sans obstacle. Si votre document est déjà composé avec XeLaTeX, on peut dire à bon droit que PSTricks n’exige aucun contournement.
Xy-pic et \xymatrix : toujours fonctionnel, figé depuis 2013
Xy-pic (nom de paquet xy) est un paquet généraliste pour composer graphes et diagrammes, fonctionnant aussi bien sous plain TeX que LaTeX ou AMS-LaTeX. Aucune chaîne de sortie particulière n’est requise : pdflatex le traite directement. Un détail savoureux : il inscrit son propre état civil dans le journal à chaque compilation ; sous TeX Live 2024 il affiche " Xy-pic version 3.8.9 <2013/10/06>". Le copyright de xy.tex court de 1991 à 2013, Kristoffer H. Rose et d’autres. Plus de vingt ans d’usage et plus de dix ans sans mise à jour, résumés en une ligne.
En pratique, la partie employée est \xymatrix, pour les diagrammes commutatifs. C’est un mode qui dispose le diagramme comme une matrice : comme dans tabular, & sépare les entrées et \\ les lignes. Les flèches entre objets se tracent par \ar, dont la cible est une touche de direction : [r] à droite, [l] à gauche, [u] en haut, [d] en bas, et des combinaisons comme [rd] pour la case une colonne à droite et une ligne en dessous. Les étiquettes reprennent la notation des exposants et indices : ^ place l’étiquette au-dessus de la flèche (à gauche, dans le sens du parcours) et _ en dessous (à droite). Le chargement habituel est \usepackage[all]{xy}, où [all] active l’ensemble standard.
\usepackage[all]{xy}
% ...
\[
\xymatrix{
A \ar[r]^{f} \ar[d]_{\alpha} & B \ar[d]^{\beta} \\
C \ar[r]_{g} & D
}
\]On obtient un carré commutatif avec A, B, C, D aux coins : f vers la droite en haut, α vers le bas à gauche, β vers le bas à droite, g vers la droite en bas. Un diagramme étant lui-même un objet mathématique, il figure dans un environnement de formule hors ligne. Pour un nouveau diagramme commutatif, le choix moderne est aujourd’hui tikz-cd, fondé sur TikZ : plus commode pour les courbes, les pointes élaborées et les diagrammes complexes à plusieurs lignes, avec des messages d’erreur lisibles. L’intérêt de cette section est de pouvoir lire et modifier des manuscrits déjà écrits en Xy-pic. La comparaison des deux relève de la page sur les diagrammes commutatifs.
Asymptote : un langage dont le compilateur est livré dans TeX Live
Entendre qu’un programme externe est nécessaire met en garde — mais le asy d’Asymptote fait partie de TeX Live. Dans le répertoire des binaires de TeX Live 2024, un asy d’environ 45 Mo voisine avec mpost et mf ; asy --version répond "Asymptote version 2.88" et mentionne parmi ses options activées "V3D 3D vector graphics output". Autrement dit, installer TeX Live donne déjà Asymptote, sans rien à récupérer de plus. C’est la différence décisive avec gnuplot, absent de TeX Live et à installer soi-même.
Asymptote n’est pas un ensemble de macros TeX mais un langage autonome de graphiques vectoriels. Avec une syntaxe proche de C++, il décrit les figures comme un véritable langage de programmation, doté de variables, fonctions, boucles et types. Son intention de conception est également intéressante : le manuel officiel présente Asymptote comme un langage inspiré de MetaPost, tout en revendiquant une syntaxe plus nette, de type C++. Le plus singulier tient à la façon dont il fixe les dimensions. Lorsqu’une taille globale comme size(6cm) entre en conflit avec des éléments qui ne se redimensionnent pas — étiquettes et pointes de flèche —, Asymptote résout ces contraintes par la méthode du simplexe, c’est-à-dire par la programmation linéaire. Les langages de dessin qui résolvent un programme linéaire pour décider de la taille d’une figure ne courent pas les rues.
Pour l’intégrer à LaTeX, chargez \usepackage{asymptote} et écrivez le code de la figure dans un environnement asy. Par conception, la compilation prend trois étapes — et son exécution sous TeX Live 2024 s’est déroulée ainsi. D’abord, pdflatex écrit le contenu de l’environnement asy dans <nom>-1.asy et signale du même coup "Package asymptote Warning: file ... not found on input line 11." — normal, la figure n’existe pas encore. Ensuite, asy <nom>-1.asy produit <nom>-1.pdf, et un second pdflatex intègre ce PDF. Tourner ces trois étapes à la main est fastidieux ; en pratique, on laisse latexmk s’en charger.
pdflatex document # writes document-1.asy
asy document-1.asy # produces document-1.pdf
pdflatex document # includes it
# or, in one go:
latexmk -pdf document// a standalone .asy file, run with: asy figure.asy
import three;
size(6cm);
draw(unitcube);
draw(O--X, red, Arrow3);
draw(O--Y, green, Arrow3);
draw(O--Z, blue, Arrow3);Ce code importe le module three (les fonctions 3D), trace un cube unité et tire des flèches tridimensionnelles rouge, verte et bleue depuis l’origine le long des axes x, y et z. Les figures n’ont pas à être intégrées : écrites comme fichier .asy autonome et exécutées seules par asy figure.asy, elles peuvent sortir en PDF, EPS, SVG, WebGL ou en formats 3D intégrables à un PDF. Comme TeX compose les étiquettes, les formules de la figure s’accordent à la police du corps. Pour la vraie 3D — solides et surfaces avec axes de coordonnées — Asymptote s’écrit bien plus naturellement que TikZ. Une interface graphique, xasy, l’accompagne pour dessiner interactivement et exporter la source .asy.
MetaPost : avec LuaLaTeX, aucun programme externe n’est nécessaire
MetaPost est la reprise par John Hobby du METAFONT de Knuth — un langage pour décrire les fontes — avec PostScript pour sortie. Il hérite de la notation de METAFONT qui résout des courbes lisses à partir de points et de directions (l’algorithme de Hobby) et permet d’énoncer les coordonnées de façon déclarative, comme des équations. L’usage classique en fait un langage autonome : on remet un fichier .mp au programme dédié mpost et l’on récupère de l’EPS.
Or, dans le LaTeX d’aujourd’hui, cet appel externe est superflu. Chargez le paquet luamplib et vous écrivez du MetaPost directement dans un environnement mplibcode. LuaTeX intègre le moteur MetaPost sous forme de bibliothèque mplib : aucun mpost séparé à lancer, aucun --shell-escape à activer. En passant l’exemple ci-dessous dans lualatex sous TeX Live 2024, un PDF est sorti en une seule passe sans qu’aucun processus externe soit invoqué. Des quatre systèmes de cette page, seul MetaPost par LuaLaTeX n’exige aucun outil externe supplémentaire.
% compile with lualatex
\documentclass{article}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1);
draw fullcircle scaled 2cm withpen pencircle scaled 1pt;
draw (-1cm,0)--(1cm,0);
draw (0,-1cm)--(0,1cm);
endfig;
\end{mplibcode}
\end{document}Le contenu de mplibcode est du MetaPost pur. beginfig(1) … endfig délimitent une figure ; on y trace le cercle unité mis à l’échelle d’un diamètre de 2 cm avec une plume de 1 pt, puis un diamètre horizontal et un diamètre vertical. fullcircle, pencircle et scaled appartiennent tous au vocabulaire intégré de MetaPost. La pièce maîtresse de son écosystème est MetaFun, un format riche par lequel le système de composition ConTeXt intègre MetaPost en profondeur. Sous ConTeXt, MetaPost est l’outil de dessin central ; en LaTeX principalement, la répartition est TikZ par défaut et MetaPost lorsqu’on veut sa description des courbes héritée de METAFONT.
Les quatre comparés : lequel choisir, et quand
Classés par chaîne de sortie et par moteur, les critères de choix apparaissent. Pour maintenir un document existant, sachez lire et écrire le système qu’il emploie déjà. Pour des figures 3D, Asymptote. Sous ConTeXt, MetaPost via MetaFun. Pour un nouveau diagramme commutatif, tikz-cd plutôt que Xy-pic. Et pour la grande majorité des dessins qui n’entrent dans aucun de ces cas, le jugement le plus sûr est TikZ : aucun outil externe, aucune chaîne de sortie particulière.
| Système | Chaîne de sortie / moteur | Outil externe | Point fort / usage principal |
|---|---|---|---|
PSTricks | latex → dvips → ps2pdf, ou pdfLaTeX avec auto-pst-pdf, ou XeLaTeX seul | dvips et Ghostscript ; la voie auto-pst-pdf réclame aussi --shell-escape | Remplissages et effets PostScript de qualité ; nombreux documents anciens ; toujours maintenu (v3.19c, 2024) |
Xy-pic | Fonctionne sous LaTeX ordinaire ; pas de chaîne particulière | Aucun | Vétéran des diagrammes commutatifs ; tikz-cd le remplace aujourd’hui ; figé à 3.8.9 (2013) |
Asymptote | latex/pdflatex → asy → de nouveau latex ; ou un .asy autonome | asy est livré avec TeX Live ; latexmk automatise les passes | 2D et 3D ambitieuses ; solides et surfaces avec axes ; sorties SVG, WebGL et même PDF 3D |
MetaPost | Traiter .mp par mpost ; ou LuaLaTeX avec le mplibcode de luamplib | Aucun via LuaLaTeX — mplib est intégré à LuaTeX | Courbes héritées de METAFONT et coordonnées posées en équations ; cœur de ConTeXt (MetaFun) |