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 codice_1, amélioré par les extensions codice_2 et codice_3, 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 codice_4, 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 codice_5, codice_6 ou codice_7 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 codice_7 possède son propre environnement de dessin codice_9. La puissance de codice_7 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 codice_1 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 à codice_12, qui peut être modifiée à tout moment (mais pas dans l'environnement picture) avec une commande telle que
La valeur par défaut de codice_12 est de codice_14. Le premier couple, formula_1, représente la taille de l'espace rectangulaire réservé à l'image dans le document. Le second couple, formula_2, 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:
\qbezier(x1, y1)(x2, y2)(x3, y3)
Segments de droite.
Les segments de droite peuvent être dessinés avec la commande:
La commande codice_15 possède deux paramètres:
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 codice_2.
La figure suivante illustre toutes les 25 valeurs de pente possibles (sans codice_2) dans le premier quadrant. La longueur du segment est relative à l'unité de longueur codice_12. 
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.
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 codice_2
Remarquez l'effet de la commande codice_20 sur les deux flèches pointant le haut et la gauche.
Cercles.
La commande
dessine un cercle de centre formula_1 et de diamètre (pas le rayon) "diamètre". L'environnement "picture" n'autorise que des diamètres d'au plus environ, et même en dessous de cette limite, tous les diamètres ne sont pas possibles. La commande codice_21 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 codice_2, codice_6 ou codice_7.
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 codice_25 de façon habituelle:
codice_26 et codice_27.
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 codice_27 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!
Ovales.
La commande
ou
dessine un ovale centré en le point de coordonnées formula_1 et ayant une largeur formula_5 et une hauteur formula_6. 
Les paramètres optionnels de position formula_7 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: codice_29 et codice_30 d'une part et codice_20 d'autre part. Tandis que codice_29 ne s'applique qu'à des lignes verticales et horizontales (et les courbes de Bézier quadratiques), codice_30 et codice_20 s'appliquent à des segments de droite obliques, aux cercles et aux ovales.
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, codice_35 est employé dans la définition de codice_36. La commande codice_37 a dû être employée étant donné que la commande codice_15 ne fonctionne pas lorsque la longueur du segment est inférieur à environ 3 millimètres.
Courbes de Bézier quadratiques.
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 codice_27 sur les lignes verticales et horizontales, et l'effet des commandes codice_30 et codice_20 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 formula_8 et formula_9 les points terminaux et formula_10, formula_11 les pentes respectives, de courbes de Bézier quadratiques. Le point de contrôle intermédiaire formula_12 est donné par les relations:
Voir "Graphics in LaTeX2e" pour un programme en Java qui génère les commandes codice_4 nécessaires à l'obtention de cercles.
Chaînette.
Dans cette figure, chaque moitié symétrique de la chaînette formula_14 est approchée par une courbe de Bézier quadratique. La moitié de droite de la courbe se termine au point de coordonnées formula_15, la pente en ce point ayant la valeur formula_16. En utilisant à nouveau la relation (*), nous pouvons calculer les coordonnées des points de contrôles intermédiaires. Elles s'avèrent être formula_17 et formula_18. 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 codice_43. L'image est définie dans un système de coordonnées mathématiques adéquat, tandis que par la commande
\begin{picture}(4.3,3.6)(-2.5,-0.25)
son coin inférieur gauche (marqué par le disque noir) a pour coordonnées formula_19.
Vitesse dans la théorie de la relativité.
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 formula_20, formula_21 et formula_22, formula_23.
À 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 formula_24 (disque noir).