Comment dessiner avec TeX?

Il existe de nombreux logiciels permettant de faire des dessins directement dans (La)TeX (plutôt que d'importer des graphiques créés avec un autre outil), allant de la simple utilisation de l'environnement picture de \LaTeX au dessin sophistiqué avec PSTricks ou TikZ. En fonction de votre type de dessin et de votre configuration, voici quelques systèmes à envisager.

Avec les commandes de base

L'environnement picture offre des capacités de dessin plutôt basiques: tout ce qui nécessite plus que de simples calculs linéaires est exclu, à moins qu'une police de caractères ne puisse vous venir en aide. Cet environnement dispose de sa propre définition de la commande \unitlength comme unité de mesure de base. Cette fonctionnalité pouvant être gênante, l'extension picture permet de l'éviter en détectant si une longueur est citée sous forme de nombre ou de longueur et agit en conséquence.

Voici un exemple d'utilisation :

\setlength\unitlength{1mm}
\begin{picture}(32,40)(-2,-2)
\put(0,0){\circle{1}}
\put(25,0){\line(-1,2){10}}
\put(12,26){\circle*{15}}
\qbezier(5,5)(30,40)(25,0)
\end{picture}

\documentclass{article}
  \pagestyle{empty}

\begin{document}
\setlength\unitlength{1mm}
\begin{picture}(32,40)(-2,-2)
\put(0,0){\circle{1}}
\put(25,0){\line(-1,2){10}}
\put(12,26){\circle*{15}}
\qbezier(5,5)(30,40)(25,0)
\end{picture}
\end{document}

Avec les extensions “epic”, “eepic” et ''eepicemu''

L'extension epic a été conçue pour utiliser l'environnement picture de manière plus efficace. L'extension eepic l'étend et est capable d'utiliser les commandes \special de tpic pour améliorer les performances d'impression. Si les commandes \special ne sont pas disponibles, l'extension eepicemu pourra effectuer le traitement mais bien moins efficacement.

Avec l'extension “pict2e”

L'extension pict2e comble les lacunes de l'environnement picture de \LaTeX. Elle définit un ensemble de commandes permettant de tracer des figures dont des cercles de tout diamètres des droites de toutes pentes. Elle a moins de commandes que PStricks mais présente le gros avantage de fournir des pilotes permettant la compilation avec \LaTeX et pdfLaTeX, comme le montre l'exemple ci-dessous. De plus, elle ne nécessite pas de compilation externe.

Voici des courbes de Bézier (quadratique et cubique) avec pict2e :

\documentclass{article}
  \usepackage{ifpdf}
  \ifpdf
    \usepackage[pdftex]{pict2e}
  \else
    \usepackage[dvips]{pict2e}
  \fi
  \usepackage{color">color}
 
\newcommand*\FPOINT{
  \begingroup
    \setlength\unitlength{.8pt}
    \circle*{5}
  \endgroup
}
 
\newcommand*\OPOINT{
  \begingroup
    \setlength\unitlength{.8pt}
    \circle{5}
  \endgroup
}
 
\begin{document}
\setlength\unitlength{.007\linewidth}
 
\begin{picture}(100,120)(-50,-60)
  \put(-50,-60){\framebox(100,120){}}
  \color{green}
  \qbezier[0](-40,-30)(-30,10)(0,10)
  \qbezier[0](0,10)(30,10)(40,50)
  \put(-40,-30){\FPOINT}\put(-30,10){\OPOINT}
  \put(0,10){\FPOINT}
  \put(30,10){\OPOINT}\put(40,50){\FPOINT}
  \color{black}
  \cbezier[0](-40,-50)(-20,30)(20,-50)(40,30)
  \put(-40,-50){\FPOINT}\put(-20,30){\OPOINT}
  \put(20,-50){\OPOINT}\put(40,30){\FPOINT}
\end{picture}
\end{document}  

Avec l'extension “PICTeX”

L'extension PICTeX est un système ancien et assez puissant qui dessine en plaçant des points sur la page pour donner l'effet d'une ligne ou d'une courbe. Bien qu'il y ait ici beaucoup de potentiel, cette extention est beaucoup plus lente que n'importe laquelle des autres extensions établies. De plus, sa documentation pose des difficultés.

Vous avez aimé PicTeX mais il a été trop gourmand en mémoire ou en temps ? Testez l'extension dratex d'Eitan Gurari : elle est tout aussi puissante, plus économe en mémoire et beaucoup plus lisible.

Avec l'extension “XYpic”

L'extension XYpic, développée par Kristoffer Rose, permet de dessiner des graphes et des diagrammes. Elle n'est pas évidente de prime abord mais permet néanmoins de faire de très belles choses, une fois qu'on a pris un peu l'habitude.

En voici un exemple :

\documentclass{report}
\usepackage{xy}
 
\begin{document}
\begin{xy}
(0,0)*+{A}; (20,20)*+{B} **\dir{-};
(0,20)*+{C} **\dir2{~}
\end{xy}
\end{document}

Avec l'extension “PSTricks”

PStricks, développé essentiellement par Timothy Van Zandt, est un ensemble d'extensions permettant de faire à peu près tout ce que permet de faire le langage PostScript. Le principe est de convertir des commandes \LaTeX (utilisant des commandes \special) en commandes Postscript, qui seront interprétées lors de la visualisation de Postscript.

Les commandes \special de PSTricks sont par défaut spécifiques à dvips, mais il existe un pilote PSTricks qui lui permet de fonctionner sous XeTeX. Les utilisateurs de pdfTeX peuvent utiliser l'extension pst-pdf qui, comme l'extension epstopdf présentée à la question « Comment insérer des images avec “pdfLaTeX” ? », génère des fichiers PDF à l'aide d'un programme auxiliaire à partir des commandes PSTricks. L'extension pst-pdf nécessite également une version récente de l'extension preview.

Il existe une liste de diffusion en anglais traitant de PSTricks à laquelle vous pouvez vous abonner. Vous pouvez aussi en parcourir ses archives.

Voici un exemple de dessin réalisé avec PStricks :

\documentclass{report}
\usepackage{pstricks}
 
\begin{document}
\psset{unit=3pt}
\begin{pspicture}(-10,-10)(50,50)
\psline[linewidth=1,linecolor=red,linearc=5]
                {*->}(0,0)(10,0)(10,30)(40,40)
\psline[linewidth=1pt,linearc=5]
                (-10,0)(10,0)(10,30)(40,40)
\pspolygon(30,10)(30,30)(10,20)
\pscircle*[linewidth=5pt,linecolor=gray](40,5){5}
\pswedge*[linecolor=blue](40,40){10}{-45}{60}
\psarc*[linecolor=green](40,40){8}{-45}{60}
\psbezier{*-*}(0,20)(10,10)(25,10)(35,-10)
\psellipse(40,20)(5,10)
\end{pspicture}
\end{document}

Avec l'extension “TikZ”

Alors que l'extension PStricks est très puissante et pratique avec les moteurs historiques de \TeX, son utilisation avec pdfLaTeX est assez fastidieuse. Dès lors, l'extension PGF est un outil très intéressant à étudier pour faire des dessins. Il est conçu avec des frontends (interfaces frontales) et des backends (interfaces dorsales) qui lui donnent une grande souplesse. L'interface frontale TikZ fournie avec cette extension est assez conviviale à utiliser. Mais il est possible d'ajouter d'autres syntaxes, par exemple celle de PStricks. Grâce aux interfaces dorsales, il fonctionne avec \LaTeX, pdfLaTeX, mais permet également de générer du SVG avec TeX4ht (c'est le seul qui le permet à notre connaissance). Par ailleurs, PGF a un support mathématique étendu, ce qui lui permet de rivaliser avec l'utilisation du moteur de calcul de PSTricks.

L'exemple ci-dessous est celui la page de garde du manuel de PGF, qui présente comment faire un arbre de type « soleil » :

\documentclass{article}
  \usepackage{tikz}
  \usetikzlibrary{snakes}
  \usetikzlibrary{trees}
 
\begin{document}
\tikzstyle{level 1}=[%
    sibling angle=120]
\tikzstyle{level 2}=[%
    sibling angle=60]
\tikzstyle{level 3}=[%
    sibling angle=30]
\tikzstyle{every node}=[fill]
\tikzstyle{edge from parent}=[%
    snake=expanding waves,%
    segment length=1mm,%
    segment angle=10,draw]
 
\tikz [grow cyclic,shape=circle,%
       very thick, 
       level distance=13mm,cap=round]
  \node {} child [color=\A] 
    foreach \A in {red,green,blue}
    { node {} child [color=\A!50!\B]
      foreach \B in {red,green,blue}
       { node {} child [%
             color=\A!50!\B!50!\C]
         foreach \C in %
         {black,gray,white}
         { node {} }
       }
    };
\end{document}

\documentclass{article}
  \usepackage{tikz}
  \usetikzlibrary{snakes}
  \usetikzlibrary{trees}
  \pagestyle{empty}
\begin{document}
\tikzstyle{level 1}=[sibling angle=120]
\tikzstyle{level 2}=[sibling angle=60]
\tikzstyle{level 3}=[sibling angle=30]
\tikzstyle{every node}=[fill]
\tikzstyle{edge from parent}=[snake=expanding waves,
           segment length=1mm,segment angle=10,draw]
           
\tikz [grow cyclic,shape=circle,very thick,
       level distance=13mm,cap=round]
  \node {} child [color=\A] 
    foreach \A in {red,green,blue}
    { node {} child [color=\A!50!\B]
      foreach \B in {red,green,blue}
       { node {} child [color=\A!50!\B!50!\C]
         foreach \C in {black,gray,white}
         { node {} }
       }
    };
\end{document}

Si le manuel de TikZ est énorme, son introduction permet à l'utilisateur d'avoir une idée des capacités du système (cette dernière est disponible en français dans le cahier GUTenberg n°48). D'autres documents proposent des présentations :

Avec Metapost

À la différence des solutions précédentes, MetaPost n'est pas une extension mais un programme et un langage développé par John B. Hobby. Il met à votre disposition toute la puissance de MetaFont pour générer des graphiques PostScript. Notez que vous pouvez intégrer du code Metapost dans votre code \LaTeX comme évoqué dans la question «Quels langages de description graphique peut-on utiliser avec LaTeX ?».

De nombreuses documentations et exemples sont disponibles sur Internet :

Avec l'extension “Mfpic”

L'extension Mfpic permet de faciliter l'utilisation de Metafont. Il s'agit tout d'abord d'écrire du code \LaTeX à la manière de PStricks. Puis à la compilation, un fichier mf est produit. Après avoir compilé le fichier obtenu avec Metafont (mf), il suffit de recompiler le fichier initial avec \LaTeX pour admirer les figures. Voici un exemple tiré de la documentation Mfpic :

\documentclass{article}
\usepackage{mfpic}
\begin{document}
\opengraphsfile{pics}
\begin{mfpic}[20]{-3}{3}{-3}{3}
\axes
\function{-2,2,0.1}{((x**3)-x)/3}
\tcaption{\raggedright{\it Fig. :}
Fonction dans un repère orthonormal.}
\end{mfpic}
\closegraphsfile
\end{document}

MFpic, même s'il n'a pas la puissance de PStricks, a l'avantage de fonctionner à la fois avec \LaTeX et pdfLaTeX et de permettre de tracer très facilement des courbes.

Avec du code d'autres langages

Il existe plusieurs moyens de générer du code pour votre application graphique (asymptote, gnuplot et MetaPost, au moins) avec du code placé dans votre document \TeX. Pour plus de détails, voir la question «Quels langages de description graphique peut-on utiliser avec LaTeX ?».


Source: Drawing with TeX

3_composition/illustrations/dessiner_avec_tex.txt · Dernière modification : 2022/10/04 12:52 de dbitouze
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0