Il est possible de réaliser de simples dessins directement avec LaTeX. Il faut savoir que les dessins réalisés de cette manière sont réalisés par LaTeX grâce aux polices de caractères, dès lors, ces dessins ne pourront pas être très compliqués. On verra plus tard comment réaliser de bien meilleurs dessins en utilisant PS.
L'environnement picture
Pour réaliser un dessins avec LaTeX, on utilise donc l'environnement picture
dont voici la forme :
| \begin{picture}(Largeur,Hauteur)(OrigineX,OrigineY) | | \end{picture} |
|
listing l11.30 L'environnement picture
Les deux premiers paramètres définissent la largeur et la hauteur du dessin que l'on veut intégrer au document et les deux suivants représentent les coordonnées facultatives du coin inférieur gauche du dessin. Ce coin correspondant d'ailleurs à l'origine du repère. Voici deux exemple :
| \setlength{\unitlength}{1cm} | | \fbox{ | \begin{picture}(4,2) | \put(1,1){Objet} | \end{picture}} | | \fbox{ | \begin{picture}(4,2)(1,1) | \put(1,1){Objet} | \end{picture}} |
|
listing l11.31 Mon premier dessin avec LaTeX
La première chose qu'il faut dire est qu'avant de dessiner quoi que ce soit, il faut préciser l'unité de base du dessin en modifiant la longueur représentée par la commande de longueur unitlength
. Dans notre exemple, on travaille en centimètre. On aurait pu mettre par exemple 100cm
, ainsi les coordonnées précisées auraient été en mètres, ce qui est très intéressant pour des mises à l'échelle.
On réalise ensuite deux dessins. Sur le premier, on laisse l'origine du repère par défaut mais dans le second, on place l'origine du repère en (1,1). Ensuite, on ajoute un texte au dessin grâce à la commande put
au point de coordonnée (1,1). Vous voyez tout de suite sur le résultat que dans le second cas, le texte se trouve à l'origine du repère.
La commande put
permet donc de positionner un objet en précisant les coordonnées de l'extrémité inférieure gauche de l'objet. On peut donc l'utiliser pour insérer du texte mais celui-ci ne pourra pas contenir de retour à la ligne.
Insérer du texte
Pour insérer du texte tout en autorisant les retours à la ligne, il faut utiliser la commande shortstack
qui prend comme unique paramètre le texte à insérer. On peut préciser en option l'alignement du texte : l
pour l'aligner à gauche, r
pour l'aligner à droite. Par défaut, le texte est centré.
On peut bien entendu ajouter des effets sur le texte avec toutes les autres commandes que nous avons déjà découvertes et utilisées jusqu'à présent comme le montre bien l'exemple suivant.
| \fbox{ | \begin{picture}(8,5) | \put(1,3){\shortstack[l]{Un texte \\ avec des \\ retours \\ la ligne}} | \put(1,1){\shortstack{Un texte \\ avec des \\ retours \\ la ligne}} | \put(4,3){\fbox{\shortstack{Et \\ ! !}}} | \put(4,1){\fcolorbox{red}{green}{\shortstack{Ou avec des \\ couleurs !}}} | \end{picture}} |
|
listing l11.32 Dessiner du texte
Dessiner des lignes et des vecteurs
Les lignes et les vecteurs sont décrits d'une manière vectorielle. Il faut donc deux paramètres pour les définir, tout d'abord, il faudra spécifier un vecteur directeur et ensuite une longueur. En somme, la seule différence entre une ligne et un vecteur est l'ajout d'une flèche à l'extrémité du vecteur.
| \fbox{ | \begin{picture}(5,3) | \put(1,1){\line(1,0){2}} | \thicklines | \put(3,1){\line(-1,2){0.5}} | \put(2.5,2){\vector(1,0){1.5}} | \end{picture}} |
|
listing l11.33 Dessiner des lignes et des vecteurs
Une des extrémités des lignes est donc défini par la commande put
et le second par le vecteur directeur et la longueur. Le sens du vecteur directeur n'a d'intérêt que pour dessiner la flèche des vecteurs, pour les lignes, c'est sans importance.
Comme vous le voyez dans l'exemple du listing l11.28, on peut modifier l'épaisseur des lignes en utilisant la commande thicklines
. Pour remettre l'épaisseur normale, on utilise la commande thinlines
. Enfin, il existe une commande plus générale qui est linethickness
qui prend en paramètre l'épaisseur des lignes désirée.
listing l11.34 Modifier l'épaisseur des lignes
Les boites
Cadres
L'exemple du listing l11.27 montre que l'on peut utiliser les commandes framebox
ou fbox
pour créer des cadres. La commande framebox
est quelque peu modifiée et voici sa forme générale :
| \framebox(Largeur,Hauteur)[Options]{Texte} |
|
listing l11.35 La commande framebox
On précise les dimensions de la boite en spécifiant la largeur et la hauteur. Ensuite, on peut préciser la position que prendra le texte dans la boite en option. Par défaut, le texte est centré dans la boite, si on veut spécifier une autre position, on utilise les lettres habituelles l
, r
, t
et b
.
On peut préciser deux lettres en options, l'une concernera alors l'alignement horizontal tandis que l'autre concernera l'alignement vertical. Deux autres variantes existent : makebox
fait comme framebox
mais sans dessiner de cadre et dashbox
dessine un cadre en pointillés dont la longueur est donné dans un paramètre supplémentaire. Voici de suite un exemple.
| \fbox{ | \begin{picture}(5,3) | \put(0.5,0.5){\framebox(2,1){Par }} | \put(2.5,2){\framebox(2,1)[rb]{Droite-Bas}} | \put(3,0.5){\dashbox{0.2}(1,0.5)[r]{Droite}} | \put(0.5,2.5){\makebox(1,0.5)[t]{Haut}} | \end{picture}} |
|
listing l11.36 Dessiner des cadres
Boite aux coins arrondis
La commande oval
permet d'obtenir une boite dont les coins sont arrondis. Il suffit de spécifier la largeur et la hauteur de la boite pour la dessiner. On peut en plus préciser une option qui définit quelles parties de la boite il faut dessiner, on peut ainsi dessiner uniquement la moitié gauche de la boite en spécifiant l
. On peut aussi obtenir les autres parties avec r
, t
ou b
.
Citons également les commandes circle
et circle*
qui permettent de dessiner un cercle. Il faut juste spécifier le rayon du cercle. La différence entre les deux commandes est que la version étoilée dessine un cercle plein.
| \fbox{ | \begin{picture}(4,2) | \put(2,1){\oval(3,1.2)[l]} | \put(2,1){\circle*{.1}} | \color{red} | \put(2,1){\oval(3,1.2)[rt]} | \end{picture}} |
|
listing l11.37 Dessiner des ovales
Remarquez l'utilisation de la commande color
qui fonctionne, en effet, rappelez-vous, LaTeX utilise une police de caractère pour dessiner tous ces objets graphiques et donc la commande color
qui change la couleur de la police fonctionne parfaitement. Une autre conséquence est qu'il faut éviter de vouloir dessiner des cercles dont la dimension est supérieure à la plus grande disponible dans la police utilisée par LaTeX.
Courbe de Bézier
Enfin, il reste une commande à voir, il s'agit de la commande qbezier
qui permet de dessiner des courbes de Bézier bien connues de infographistes. La commande s'utilise de la manière suivante :
| \qbezier[Nbpoints](Ax,Ay)(Bx,By)(Cx,Cy) |
|
listing l11.38 La commande qbezier
Cette commande trace donc une courbe de Bézier spécifiée par trois points de contrôles dont il faut donner les coordonnées. Le paramètre optionnel précise le nombre de points que LaTeX va calculer pour tracer la courbe. Au plus ce nombre sera élevé, au plus la courbe sera précise mais LaTeX mettra également plus de temps pour la dessiner.
| \fbox{ | \begin{picture}(4,2) | \qbezier[40](0.1,0.1)(1.5,1.4)(3.5,1.5) | \qbezier(0.1,1)(3,0.1)(1,1.9) | \end{picture}} |
|
listing l11.39 Courbes de Bézier
Répétition d'objets
S'il vous faut dessiner plusieurs objets graphiques identiques mais qui diffèrent juste par leur position, il n'est pas judicieux de répéter plusieurs fois la commande put
pour placer l'objet. Pour réaliser de telles choses, il existe la commande multiput
. Son fonctionnement est assez simple, sa forme est la suivante :
| \multiput(x,y)(interX,interY){nbfois}{objet} |
|
listing l11.40 La commande multiput
On donne donc la position initiale (x,y)
et on ensuite, on précise les incréments en x et en y. On ajoute le nombre de fois qu'il faudra dessiner l'objet et on précise l'objet comme pour la commande put
. Voici par exemple comment dessiner une grille :
| \begin{picture}(4,2) | \multiput(0.1,0.1)(0.2,0){16}{\line(0,1){1.6}} | \multiput(0.1,0.1)(0,0.2){9}{\line(1,0){3}} | \end{picture} |
|
listing l11.41 Une grille multiput
Réutilisation d'objets
On peut également définir un objet et ensuite vouloir le placer à différents endroits et pourquoi pas ajouter un cadre autour d'un de ces objets. Pour ce faire, on peut utiliser les boite de sauvegarde déjà rencontrée au chapitre 9 et y placer l'objet. Ensuite, on pourra rappeler le contenu de la boite à divers endroits.
La première étape consiste à créer une boite vide nommée grâce à la commande newsavebox
. Une fois cela fait, on définit le contenu de la boite de sauvegarde avec la commande savebox
. Enfin, pour l'utiliser on utilise usebox
. Les trois commandes sont reprises ci-dessous :
| \newsavebox{\nomdeboite} | \savebox{\nomdeboite}(Largeur,Hauteur)[Position]{Objet} | \usebox{\nomdeboite} |
|
listing l11.42 Utiliser les boites de sauvegardes
Voici tout de suite un exemple. On y définit d'abord une boite de sauvegarde nommée house
. On passe ensuite dans l'environnement picture
afin de pouvoir définir le contenu de la boite. Enfin, on peut utiliser le contenu de celle-ci à différents endroits, en appliquant différents effets si l'on désire.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| \fbox{ | \begin{picture}(5,3) | | \savebox{\house}(0,0){ | \put(0,0){\line(1,0){1}} | \put(0,0){\line(0,1){1}} | \put(1,0){\line(0,1){1}} | \put(0,1){\line(1,1){0.5}} | \put(1,1){\line(-1,1){0.5}} | } | | \put(1,1){\usebox{\house}} | \put(3,2){\usebox{\house}} | \put(4,0.5){\scalebox{0.5}{\usebox{\house}}} | \end{picture}} |
|
listing l11.43 Exemple avec les boites de sauvegarde