# LaTeX/Dessiner avec LaTeX/Réalisation de graphiques mathématiques

LATEX
* Généralités
* Premiers pas
** Installer LaTeX
** Premier exemple
** Lettre
** Éléments de base
** Les classes
** Structuration du texte
** Mise en forme du texte
** Faire des tableaux
** Inclure des images
** Options de mise en forme avancées
** Écrire des mathématiques
** Écrire de la physique
** Écrire des formules chimiques
** Créer une feuille de style
** À l'aide !
* Structure du document
* Gestion de la bibliographie
* Tableaux
* Images
* Éléments flottants
* Mise en forme du texte
* Choix de la police
* Mise en page
* Mathématiques
* Gestion des gros documents
* Faire des présentations
* LaTeX pour enseignants
* Arts et loisirs
** Écrire de la musique
** Dessiner des échiquiers
* Dessiner avec LaTeX
** Dessiner en LaTeX pur
** Dessiner avec PSTricks
** Dessiner avec PGF et TikZ
** Dessiner des molécules
** Réalisation de graphiques mathématiques
* Créer une extension ou une classe
* Programmer avec LaTeX
Annexes
* Vadémécum
* Conversion vers d'autres formats
* Glossaire de typographie
* Index
* Commandes
* Liens externes
Comme indiqué précédemment, LaTeX offre des possibilités, limitées, d'intégrer des graphiques à partir de descriptions textuelles. Par ailleurs, un certain nombre d'extensions de LaTeX ont été créées afin de combler ces faiblesses. Dans ce chapitre, vous apprendrez à utiliser ces possibilités pour réaliser des graphiques mathématiques.

## Vue d'ensemble

L'environnement picture, amélioré par les extensions pict2e et graphicx, permet de tracer des segments, des rectangles, des cercles, et des courbes de bézier quadratiques et cubiques. Les ellipses les chaînettes peuvent être approchées d'une manière satisfaisante par des courbes quadratiques de Bézier, bien que ceci puisse exiger un travail mathématique assez conséquent. Si, en outre, un langage de programmation comme Java est employé pour produire des fichiers LaTeX de blocs \qbezier, l'environnement d'image picture devient tout à fait puissant.
Bien que la programmation d'images directement en LaTeX soit sévèrement restreinte, et souvent fatiguante, il y a tout de même des raisons de procéder ainsi. Les documents ainsi produits sont de petite taille en ce qui concerne le nombre d'octets, et il n'y a aucun fichier graphique supplémentaire à adjoindre au fichier Latex.
Des extensions comme epic, eepic ou pstricks aident à effacer les limitations entravant l'environnement original picture, et renforcent considérablement la puissance graphique de Latex.
Tandis que les deux anciennes extensions agrémentent simplement l'environnement d'image, l'extension pstricks possède son propre environnement de dessin pspicture. La puissance de pstricks provient du fait que cette extension profite des possibilités étendues du langage PostScript. En outre, de nombreuses extensions ont été écrites dans des buts spécifiques. L'une de ces extensions XY-pic, sera décrite à la fin de ce chapitre. Une grande variété d'extensions sont décrites en détail dans le livre The LaTeX Graphics Companion (qu'il ne faut pas confondre avec The LaTeX Companion).
Sans doute, l'outil graphique le plus puissant du système LaTeX est MetaPost, le jumeau de METAFONT de Donald E. Knuth. MetaPost est doté du langage de programmation très puissant et mathématiquement sophistiqué de METAFONT. Contrairement à METAFONT, qui génère des fichiers au format bitmap, MetaPost produit des fichiers PostScript encapsulés, qui peuvent être importés dans un fichier Latex. Pour une introduction à cet outil, vous pouvez consulter le manuel A User’s Manual for MetaPost. Une discussion très complète des stratégies Latex et TEX pour les graphiques (et les polices) peut être trouvée dans TEX Unbound.

## L'environnement picture
### Les commandes de base

Un environnement picture est disponible dans toute distribution LaTeX, sans avoir besoin d'inclure une extension externe. La création d'une image au moyen de cet environnement s'effectue avec l'une de ces deux commandes:
ou
Le couple (x, y) réserve dans le document un espace rectangulaire pour l'image (picture) d'une largeur x et d'une hauteur y.
Le couple (x0, y0) définit en coordonnées arbitraires l'emplacement du point se trouvant en bas à gauche du rectangle réservé.
L'unité des nombres x, y, x0, y0 se rapportent à \unitlength, qui peut être modifiée à tout moment (mais pas dans l'environnement picture) avec une commande telle que
La valeur par défaut de \unitlength est de 1pt. Le premier couple, $(x,y)$, représente la taille de l'espace rectangulaire réservé à l'image dans le document. Le second couple, $(x_{0},y_{0})$, correspond aux coordonnées arbitraires du coin en bas à gauche du rectangle renfermant l'image.
Beaucoup de commandes de dessin ont l'une ou l'autre de ces formes:
ou
La commande pour dessiner une courbe de Bézier est une exception. La commande est de la forme:

### Segments de droite

Les segments de droite peuvent être dessinés avec la commande:
La commande \line possède deux paramètres:
* un vecteur de direction,
* une longueur.
De manière native, les composantes du vecteur de direction sont restreintes aux entiers de l'ensemble {−6, −5, … , 5, 6} et doivent être premières entre elles (sans diviseur commun à l'exception de 1). Cette restriction a été levée par pict2e.
La figure suivante illustre toutes les 25 valeurs de pente possibles (sans pict2e) dans le premier quadrant. La longueur du segment est relative à l'unité de longueur \unitlength. Le paramètre longueur représente l'ordonnée dans le cas d'un segment « vertical », et l'abscisse dans tous les autres cas et ne représente donc pas la norme du vecteur de direction, ni la longueur du segment.
* \setlength{\unitlength}{5cm}
* \begin{picture}(1,1)
* \put(0,0){\line(0,1){1}}
* \put(0,0){\line(1,0){1}}
* \put(0,0){\line(1,1){1}}
* \put(0,0){\line(1,2){.5}}
* \put(0,0){\line(1,3){.3333}}
* \put(0,0){\line(1,4){.25}}
* \put(0,0){\line(1,5){.2}}
* \put(0,0){\line(1,6){.1667}}
* \put(0,0){\line(2,1){1}}
* \put(0,0){\line(2,3){.6667}}
* \put(0,0){\line(2,5){.4}}
* \put(0,0){\line(3,1){1}}
* \put(0,0){\line(3,2){1}}
* \put(0,0){\line(3,4){.75}}
* \put(0,0){\line(3,5){.6}}
* \put(0,0){\line(4,1){1}}
* \put(0,0){\line(4,3){1}}
* \put(0,0){\line(4,5){.8}}
* \put(0,0){\line(5,1){1}}
* \put(0,0){\line(5,2){1}}
* \put(0,0){\line(5,3){1}}
* \put(0,0){\line(5,4){1}}
* \put(0,0){\line(5,6){.8333}}
* \put(0,0){\line(6,1){1}}
* \put(0,0){\line(6,5){1}}
* \end{picture}

### Flèches

Les flèches se dessinent avec la commande:
De manière native, les composantes du vecteur de direction pour les flèches subissent encore plus de restrictions que celles des vecteurs de segment de droite puisqu'elles ne peuvent prendre que des valeurs entières de l'ensemble {−4, −3, … , 3, 4}. Cette restriction est également levée par pict2e Remarquez l'effet de la commande \thicklines sur les deux flèches pointant le haut et la gauche.
* \setlength{\unitlength}{0.75mm}
* \begin{picture}(60,40)
* \put(30,20){\vector(1,0){30}}
* \put(30,20){\vector(4,1){20}}
* \put(30,20){\vector(3,1){25}}
* \put(30,20){\vector(2,1){30}}
* \put(30,20){\vector(1,2){10}}
* \thicklines
* \put(30,20){\vector(-4,1){30}}
* \put(30,20){\vector(-1,4){5}}
* \thinlines
* \put(30,20){\vector(-1,-1){5}}
* \put(30,20){\vector(-1,-4){5}}
* \end{picture}

### Cercles

La commande
dessine un cercle de centre $(x,y)$ et de diamètre (pas le rayon) diamètre. L'environnement picture n'autorise que des diamètres d'au plus 14 mm environ, et même en dessous de cette limite, tous les diamètres ne sont pas possibles. La commande \circle* réalise des disques (cercles pleins). Comme dans le cas des segments de droite, il est possible de recourir à des extensions supplémentaires, telles que pict2e, eepic ou pstricks.
* \setlength{\unitlength}{1mm}
* \begin{picture}(60, 40)
* \put(20,30){\circle{1}}
* \put(20,30){\circle{2}}
* \put(20,30){\circle{4}}
* \put(20,30){\circle{8}}
* \put(20,30){\circle{16}}
* \put(20,30){\circle{32}}
* \put(40,30){\circle{1}}
* \put(40,30){\circle{2}}
* \put(40,30){\circle{3}}
* \put(40,30){\circle{4}}
* \put(40,30){\circle{5}}
* \put(40,30){\circle{6}}
* \put(40,30){\circle{7}}
* \put(40,30){\circle{8}}
* \put(40,30){\circle{9}}
* \put(40,30){\circle{10}}
* \put(40,30){\circle{11}}
* \put(40,30){\circle{12}}
* \put(40,30){\circle{13}}
* \put(40,30){\circle{14}}
* \put(15,10){\circle*{1}}
* \put(20,10){\circle*{2}}
* \put(25,10){\circle*{3}}
* \put(30,10){\circle*{4}}
* \put(35,10){\circle*{5}}
* \end{picture}
Il y a aussi une possibilité intéressante dans l'environnement picture. Si on n'a pas peur d'effectuer les calculs nécessaires (ou de les faire au moyen d'un programme), des cercles et des ellipses arbitrairement petits peuvent être raccordés ensemble à partir de courbes quadratiques de Bézier. Voir Graphics in LaTeX2e pour des exemples et les fichiers sources en Java.

### Formules et texte

Comme cet exemple le montre, du texte et des formules peuvent être écrits dans l'environnement picture avec la commande \put de façon habituelle:
* \setlength{\unitlength}{0.8cm}
* \begin{picture}(6,5)
* \thicklines
* \put(1,0.5){\line(2,1){3}}
* \put(4,2){\line(-2,1){2}}
* \put(2,3){\line(-2,-5){1}}
* \put(0.7,0.3){$A$}
* \put(4.05,1.9){$B$}
* \put(1.7,2.95){$C$}
* \put(3.1,2.5){$a$}
* \put(1.3,1.7){$b$}
* \put(2.5,1.05){$c$}
* \put(0.3,4){$F=
* \sqrt{s(s-a)(s-b)(s-c)}$}
* \put(3.5,0.4){$\displaystyle
* s:=\frac{a+b+c}{2}$}
* \end{picture}

### \multiput et \linethickness

La commande
possède quatre paramètres: le point de départ, le vecteur de translation d'un objet vers le suivant, le nombre d'objets, et l'objet à dessiner. La commande \linethickness modifie les segments de droite horizontaux et verticaux, mais jamais les segments obliques, ni les cercles. Cependant, elle s'applique aux courbes de Bézier quadratiques!
* \setlength{\unitlength}{2mm}
* \begin{picture}(30,20)
* \linethickness{0.075mm}
* \multiput(0,0)(1,0){26}%
* {\line(0,1){20}}
* \multiput(0,0)(0,1){21}%
* {\line(1,0){25}}
* \linethickness{0.15mm}
* \multiput(0,0)(5,0){6}%
* {\line(0,1){20}}
* \multiput(0,0)(0,5){5}%
* {\line(1,0){25}}
* \linethickness{0.3mm}
* \multiput(5,0)(10,0){2}%
* {\line(0,1){20}}
* \multiput(0,5)(0,10){2}%
* {\line(1,0){25}}
* \end{picture}

### Ovales

La commande
ou
dessine un ovale centré en le point de coordonnées $(x,y)$ et ayant une largeur $w$ et une hauteur $h$.
Les paramètres optionnels de position $b,t,l,r$ se rapportent respectivement au bas, au haut, à la gauche et à la droite et peuvent être combinés, comme l'exemple le montre. L'épaisseur des lignes peut être modifiée par deux type de commandes: \linethickness{longueur} et \thinlines d'une part et \thicklines d'autre part. Tandis que \linethickness{longueur} ne s'applique qu'à des lignes verticales et horizontales (et les courbes de Bézier quadratiques), \thinlines et \thicklines s'appliquent à des segments de droite obliques, aux cercles et aux ovales.
* \setlength{\unitlength}{0.75cm}
* \begin{picture}(6,4)
* \linethickness{0.075mm}
* \multiput(0,0)(1,0){7}%
* {\line(0,1){4}}
* \multiput(0,0)(0,1){5}%
* {\line(1,0){6}}
* \thicklines
* \put(2,3){\oval(3,1.8)}
* \thinlines
* \put(3,2){\oval(3,1.8)}
* \thicklines
* \put(2,1){\oval(3,1.8)[tl]}
* \put(4,1){\oval(3,1.8)[b]}
* \put(4,3){\oval(3,1.8)[r]}
* \put(3,1.5){\oval(1.8,0.4)}
* \end{picture}

### Usages multiples de boîtes d'image

Une image peut être « déclarée » grâce à la commande:
puis « définie » par
et finalement dessinée le plus souvent par la commande
Le paramètre optionnel de position a pour utilité de définir le « point d'ancrage » de la boîte de sauvegarde. Dans l'exemple, il est fixé à « bl » ce qui a pour conséquence de placer le point d'ancrage dans le coin en bas et à gauche de la boîte. Les autres indicateurs de position représentent le haut et la droite.
Le paramètre nom se rapporte à une zone de stockage binaire de Latex et est donc une commande (ce qui explique la barre oblique inversée dans l'exemple). Des images rectangulaires peuvent y être placées : Dans cet exemple, \foldera est employé dans la définition de \folderb. La commande \oval a dû être employée étant donné que la commande \line ne fonctionne pas lorsque la longueur du segment est inférieur à environ 3 millimètres.
* \setlength{\unitlength}{0.5mm}
* \begin{picture}(120,168)
* \newsavebox{\foldera}
* \savebox{\foldera}
* (40,32)[bl]{% definition
* \multiput(0,0)(0,28){2}
* {\line(1,0){40}}
* \multiput(0,0)(40,0){2}
* {\line(0,1){28}}
* \put(1,28){\oval(2,2)[tl]}
* \put(1,29){\line(1,0){5}}
* \put(9,29){\oval(6,6)[tl]}
* \put(9,32){\line(1,0){8}}
* \put(17,29){\oval(6,6)[tr]}
* \put(20,29){\line(1,0){19}}
* \put(39,28){\oval(2,2)[tr]}
* \newsavebox{\folderb}
* \savebox{\folderb}
* (40,32)[l]{% definition
* \put(0,14){\line(1,0){8}}
* \put(8,0){\usebox{\foldera}}
* \put(34,26){\line(0,1){102}}
* \put(14,128){\usebox{\foldera}}
* \multiput(34,86)(0,-37){3}
* {\usebox{\folderb}}
* \end{picture}

### Courbes de Bézier quadratiques

* \setlength{\unitlength}{0.8cm}
* \begin{picture}(6,4)
* \linethickness{0.075mm}
* \multiput(0,0)(1,0){7}
* {\line(0,1){4}}
* \multiput(0,0)(0,1){5}
* {\line(1,0){6}}
* \thicklines
* \put(0.5,0.5){\line(1,5){0.5}}
* \put(1,3){\line(4,1){2}}
* \qbezier(0.5,0.5)(1,3)(3,3.5)
* \thinlines
* \put(2.5,2){\line(2,-1){3}}
* \put(5.5,0.5){\line(-1,5){0.5}}
* \linethickness{1mm}
* \qbezier(2.5,2)(5.5,0.5)(5,3)
* \thinlines
* \qbezier(4,2)(4,3)(3,3)
* \qbezier(3,3)(2,3)(2,2)
* \qbezier(2,2)(2,1)(3,1)
* \qbezier(3,1)(4,1)(4,2)
* \end{picture}
Comme cet exemple le montre, découper un cercle en 4 courbes de Bézier quadratiques n'est pas satisfaisant. Au moins huit découpages sont nécessaires. La figure montre aussi l'effet de la commande \linethickness sur les lignes verticales et horizontales, et l'effet des commandes \thinlines et \thicklines sur les segments de droite obliques. On peut remarquer de plus que ces deux sortes de commandes affectent les courbes de Bézier, chaque commande venant annuler l'effet des précédentes.
Soient $P_{1}=(x_{1},y_{1})$ et $P_{2}=(x_{2},y_{2})$ les points terminaux et $m_{1}$, $m_{2}$ les pentes respectives, de courbes de Bézier quadratiques. Le point de contrôle intermédiaire $S=(x,y)$ est donné par les relations:
    ${\begin{cases}x={\frac {m_{2}x_{2}-m_{1}x_{1}-(y_{2}-y_{1})}{m_{2}-m_{1}}}\\y=y_{i}+m_{i}(x-x_{i});\quad (i=1,2)\end{cases}}$
Voir Graphics in LaTeX2e pour un programme en Java qui génère les commandes \qbezier nécessaires à l'obtention de cercles.

### Chaînette

Dans cette figure, chaque moitié symétrique de la chaînette $y={\rm {ch}}x-1$ est approchée par une courbe de Bézier quadratique. La moitié de droite de la courbe se termine au point de coordonnées $(2;2,7622)$, la pente en ce point ayant la valeur $m=3,6269$. En utilisant à nouveau la relation (*), nous pouvons calculer les coordonnées des points de contrôles intermédiaires. Elles s'avèrent être $(1,2384;0)$ et $(-1,2384;0)$. Les croix indiquent les points de la chaînette réelle. L'erreur est à peine visible, étant inférieur à un pour cent. Cet exemple illustre l'utilisation du paramètre facultatif de la commande \begin{picture}. L'image est définie dans un système de coordonnées mathématiques adéquat, tandis que par la commande
son coin inférieur gauche (marqué par le disque noir) a pour coordonnées $(-2,5;-0,25)$.
* \setlength{\unitlength}{1cm}
* \begin{picture}(4.3,3.6)(-2.5,-0.25)
* \put(-2,0){\vector(1,0){4.4}}
* \put(2.45,-.05){$x$}
* \put(0,0){\vector(0,1){3.2}}
* \put(0,3.35){\makebox(0,0){$y$}}
* \qbezier(0.0,0.0)(1.2384,0.0)
* (2.0,2.7622)
* \qbezier(0.0,0.0)(-1.2384,0.0)
* (-2.0,2.7622)
* \linethickness{.075mm}
* \multiput(-2,0)(1,0){5}
* {\line(0,1){3}}
* \multiput(-2,0)(0,1){4}
* {\line(1,0){4}}
* \linethickness{.2mm}
* \put( .3,.12763){\line(1,0){.4}}
* \put(.5,-.07237){\line(0,1){.4}}
* \put(-.7,.12763){\line(1,0){.4}}
* \put(-.5,-.07237){\line(0,1){.4}}
* \put(.8,.54308){\line(1,0){.4}}
* \put(1,.34308){\line(0,1){.4}}
* \put(-1.2,.54308){\line(1,0){.4}}
* \put(-1,.34308){\line(0,1){.4}}
* \put(1.3,1.35241){\line(1,0){.4}}
* \put(1.5,1.15241){\line(0,1){.4}}
* \put(-1.7,1.35241){\line(1,0){.4}}
* \put(-1.5,1.15241){\line(0,1){.4}}
* \put(-2.5,-0.25){\circle*{0.2}}
* \end{picture}

### Vitesse dans la théorie de la relativité

* \setlength{\unitlength}{0.8cm}
* \begin{picture}(6,4)(-3,-2)
* \put(-2.5,0){\vector(1,0){5}}
* \put(2.7,-0.1){$\chi$}
* \put(0,-1.5){\vector(0,1){3}}
* \multiput(-2.5,1)(0.4,0){13}
* {\line(1,0){0.2}}
* \multiput(-2.5,-1)(0.4,0){13}
* {\line(1,0){0.2}}
* \put(0.2,1.4)
* {$\beta=v/c=\tanh\chi$}
* \qbezier(0,0)(0.8853,0.8853)
* (2,0.9640)
* \qbezier(0,0)(-0.8853,-0.8853)
* (-2,-0.9640)
* \put(-3,-2){\circle*{0.2}}
* \end{picture}
Les points de contrôle des deux courbes de Bézier ont été calculés avec les formules (*). La branche positive est déterminée par $P_{1}=(0,0)$, $m_{1}=1$ et $P_{2}=(2,{\rm {th}}2)$, $m_{2}=1/{\rm {ch}}^{2}2$. À nouveau la figure est définie par rapport à un système de coordonnées adapté, et le coin inférieur gauche a pour coordonnées $(-3,-2)$ (disque noir).