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

Table des matières - Dessiner avec LaTeX - Dessiner en LaTeX pur - Dessiner avec PSTricks - Dessiner avec PGF/TikZ - Dessiner des molécules - Réalisation de graphiques mathématiques - 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

modifier

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

modifier

Les commandes de base

modifier

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:

\begin{picture}(x, y) ... \end{picture}

ou

\begin{picture}(x, y)(x0, y0) ... \end{picture}

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

\setlength{\unitlength}{1.2cm}

La valeur par défaut de \unitlength est de 1pt. Le premier couple,  , représente la taille de l'espace rectangulaire réservé à l'image dans le document. Le second couple,  , 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:

\put(x, y){objet}

ou

\multiput(x, y)(dx, dy){n}{objet}

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

modifier

Les segments de droite peuvent être dessinés avec la commande:

\put(x, y){\line(x1, y1){longueur}}

La commande \line possède deux paramètres:

  1. un vecteur de direction,
  2. 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

modifier

Les flèches se dessinent avec la commande:

\put(x, y){\vector(x1, y1){longueur}}

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

modifier

La commande

\put(x, y){\circle{diamètre}}

dessine un cercle de centre   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

modifier

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

modifier

La commande

\multiput(x, y)(dx, dy ){n}{objet}

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}
 

La commande

\put(x, y){\oval(w, h)}

ou

 
\put(x, y){\oval(l, h)[position]}

dessine un ovale centré en le point de coordonnées   et ayant une largeur   et une hauteur  .

Les paramètres optionnels de position   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

modifier

Une image peut être « déclarée » grâce à la commande:

\newsavebox{nom}

puis « définie » par

\savebox{nom}(largeur, hauteur)[position]{contenu}

et finalement dessinée le plus souvent par la commande

 
\put(x, y){\usebox{nom}}

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

modifier
\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   et   les points terminaux et  ,   les pentes respectives, de courbes de Bézier quadratiques. Le point de contrôle intermédiaire   est donné par les relations:

 

Voir Graphics in LaTeX2e pour un programme en Java qui génère les commandes \qbezier nécessaires à l'obtention de cercles.

Chaînette

modifier

Dans cette figure, chaque moitié symétrique de la chaînette   est approchée par une courbe de Bézier quadratique. La moitié de droite de la courbe se termine au point de coordonnées  , la pente en ce point ayant la valeur  . En utilisant à nouveau la relation (*), nous pouvons calculer les coordonnées des points de contrôles intermédiaires. Elles s'avèrent être   et  . 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

\begin{picture}(4.3,3.6)(-2.5,-0.25)

son coin inférieur gauche (marqué par le disque noir) a pour coordonnées  .

\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é

modifier
\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  ,   et  ,  . À 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   (disque noir).

Table des matières - Généralités - Premiers pas - Structure du document - Gestion de la bibliographie - Tableaux - Images - Éléments flottants et figures - Mise en forme du texte - Choix de la police - Mise en page - Mathématiques - Gestion des gros documents - Faire des présentations - Arts et loisirs - Dessiner avec LaTeX - Créer une extension ou une classe - Programmer avec LaTeX - Annexes - Vade mecum - Conversion - Glossaire de typographie - Index - Commandes - Liens externes