# LaTeX/Dessiner avec LaTeX/Dessiner en LaTeX pur

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
LaTeX dispose en natif d'un certain nombre d'instructions de dessin. Toutefois, celles-ci s'appuient sur des caractères prédéfinis, les possibilités sont donc restreintes. De fait, peu de gens utilisent cette manière de faire. Cependant, pour des dessins simples, cela permet d'avoir un code universel, indépendant notamment du mode de compilation.
Les instructions spécifiques de dessin nécessitent d'être dans un environnement picture. Rappelons toutefois l'existence de la commande \hrule qui trace un trait de la largeur du paragraphe, et la commande \rule qui trace un trait de longueur et d'épaisseur déterminés ; ces commandes sont utilisables hors environnement picture.
L'extension pict2e améliore de nombreuses choses à l'environnement picture, il est donc recommandé de le charger systématiquement.

## Exemple complet et minimal

Le programme suivant affiche un trait barrant le texte.
Le trait est tracé avec la commande \line. Le paramètre {5} indique que la longueur est 5 fois la longueur unité, définie par la commande \setlength, donc 5 mm. Le paramètre (5,1) indique que le trait est incliné dans des proportions 5/1.
La commande est encapsulée dans un environnement picture. Le paramètre (0,0) indique que l'on ne réserve pas de place à l'image : elle se superpose au texte.
On peut améliorer cet exemple :
La première partie de l'entête est classique : elle permet d'utiliser les accents dans le code source (on peut écrire barré au lieu de barr\'e) et d'utiliser les règles de typographie française (voir Premier exemple > Améliorations du code source).
L'extension pict2e permet ici d'avoir un trait plus incliné : la proportion (10,1) n'est pas possible sans cette extension.

## Définir l'unité par défaut et la largeur des traits

La première chose à faire est de définir l'unité par défaut, appelée \unitlength. Cela se fait avec l'instruction \setlength :
où grandeur est une longueur classique (un nombre assorti d'une unité), par exemple 1cm, 1mm, 1pt, … Cette instruction se place de préférence dans le préambule, mais on peut aussi la placer avant un graphique, pour en changer l'échelle (il ne faut alors pas oublier de restaurer la valeur par défaut après le graphique).
Par exemple
On peut choisir d'avoir des lignes épaisses avec \thicklines, des lignes fines avec \thinlines (option par défaut), ou bien régler l'épaisseur avec
où épaisseur est un nombre avec une dimension. Ces commandes peuvent se placer hors de l'environnement picture, ou à l'intérieur si des objets doivent avoir des épaisseurs de ligne différentes.

## L'environnement picture

L'appel de l'environnement picture se fait en passant la dimension du graphique, exprimé en unité par défaut :
Le graphique est alors positionné à l'emplacement du « curseur » (point à gauche sur la ligne d'écriture où serait placé le prochain caractère). Notons qu'il s'agit de la place qui est réservée au graphique sur la ligne (avant le positionnement du prochain caractère) ; si le dessin dépasse de ce cadre, il pourra se superposer au reste du texte.
On peut décaler le graphique par rapport au curseur ; LaTeX laisse toujours la même place réservée sur la ligne, mais le graphique est décalé :
où x0 et y0 sont les coordonnées du coin inférieur gauche en unité par défaut :
* un nombre négatif décale respectivement vers la gauche et vers le bas;
* un nombre positif décale respectivement vers la droite et vers le haut.
Notons que l'environnement picture peut être mis dans une figure flottante (environnement figure).

## Placer un objet graphique

Le placement d'un objet dans le graphique se fait avec la commande \put :
où x et y sont en unité par défaut. Le paramètre objet peut être du texte ou un dessin produit par une commande. Par exemple, le code suivant dessine un carré noir de 10 mm de côté avec marqué « carré » à 1 mm à droite :
Ici, la fonction \rule n'est pas une fonction de l'environnement picture, raison pour laquelle on doit lui indiquer les unités.
On peut insérer un objet plusieurs fois à intervalles réguliers. On utilise pour cela la fonction \multiput :
où
* x et y sont les coordonnées du premier objet ;
* décalage_x et décalage_y sont les espacement entre deux objets :
* nombre_de_fois est le nombre d'objets ainsi placés.
Par exemple, pour placer trois fois la lettre « a » sur une ligne :
Et pour faire un carré de 3×3 :

## Objets graphiques
### Texte et cadre

Le texte peut simplement s'écrire tel quel. Toutefois, le texte est alors toujours sur une même ligne. Si l'on veut pouvoir utiliser le retour de ligne \\, il faut utiliser la commande \shortstack :
Le texte est alors centré. On peut passer l'alignement en paramètre : l pour aligner à gauche, et r pour aligner à droite, par exemple
On peut encadrer le texte en utilisant la fonction \framebox. Par rapport à la fonction \fbox, elle utilise les unités par défaut et ne laisse pas de blanc autour. La syntaxe est
pour un texte centré dans le cadre, ou bien
où options indique l'alignement : l ou r pour aligner à gauche ou à droite, et t ou b pour aligner en haut ou en bas. On peut combiner deux alignements, par exemple
pour aligner en haut à gauche.
On peut aussi utiliser :
* \makebox pour avoir un cadre invisible ;
* \dashbox pour avoir un cadre en traits discontinus.
La fonction \makebox a la même syntaxe que \framebox. La syntaxe de \dashbox est :
où longueur est la longueur des tirets en unité par défaut.
Ces fonctions peuvent s'utiliser pour dessiner des rectangles, en mettant un texte vide.
La fonction \put place le coin en bas à gauche du rectangle.

### Traits et flèches

Pour tracer un segment de droite, on utilise la fonction \line :
où directionx et directiony sont les coordonnées d'un vecteur directeur de la droite, et longueur est la longueur du segment, le tout exprimé en unité par défaut, avec les conventions suivantes :
* les coordonnées du vecteur directeur sont des nombres entiers ;
* pour les lignes horizontales ou verticales (dont l'une des composantes du vecteur directeur est nulle), la longueur est la longueur réelle du trait ;
* pour les lignes en biais (dont les deux composantes du vecteur directeur sont non nulles), la longueur est en fait la longueur de la projection sur l'axe des x.
Dans le cas d'une ligne en biais, la longueur réelle du trait est donc
    $\mathrm {longueur\ r{\acute {e}}elle} =\mathrm {longueur} \times {\sqrt {1+{\frac {\mathrm {direction} \ y^{2}}{\mathrm {direction} \ x^{2}}}}}$
Dans la pratique, si l'on veut tracer un trait de (0,0) à (x,y), x et y étant non nuls :
* si x et y sont entiers, on utilise \line(x,y){x} ;
* s'ils ne sont pas entiers, on utilise les valeurs multipliées par 10 ou par 100 : \line(10*x,10*y){x} (précision sur la direction de 0,1) ou bien \line(100*x,100*y){x} (précision sur la direction de 0,01) ;
la limite des valeurs avec pict2e étant 1 000 en valeur absolue. On peut aussi utiliser un facteur arbitraire, par exemple \line(3*x,3*y){x}.
Si l'on n'utilise pas pict2e, les valeurs sont limitées à 6 en valeur absolue et doivent être premières entre elles, ce qui limite à 25 les possibilités.
Une flèche se trace avec la commande \vector qui a la même syntaxe.
La fonction \put place l'extrémité de départ du segment ou du vecteur.
Par exemple

### Cercles, disques

On dessine un cercle avec la commande
où diamètre est dans l'unité par défaut. On dessine un disque avec
La commande \put place le centre du cercle ou du disque.

### Rectangles arrondis

On peut dessiner un rectangle aux coins arrondis avec
Si l'extension pict2e est chargée, on peut définir le rayon de courbure des coins :
On peut n'afficher qu'une moitié de boîte :
ou option vaut l ou r pour la moitié gauche ou droite, t ou b pour la moitié haute ou basse. On peut n'afficher qu'un quart de la boîte en combinant deux options, par exemple
pour le quart en haut à gauche. Les dimensions sont bien celles du rectangle complet.
La fonction \put place le centre du rectangle.

### Courbes de Bézier

LaTeX permet de tracer un arc en utilisant une courbe de Bézier quadratique. Cette courbe est définie par trois points de contrôle A, B et C ; A et C sont les extrémités de la courbe, les tangentes aux extrémités passent par B.
La syntaxe est :
Contrairement aux autres objets, cette commande ne se place pas dans une commande \put. On peut indiquer le nombre de points servant à tracer cette courbe ; alors, si ce nombre de points est suffisamment faible, on a une courbe pointillée :
L'extension pict2e permet de tracer des courbes de Bézier cubiques :

## Réutilisation d'objets

Comme indiqué précédemment, on peut créer des commandes personnelles (macro) pour réutiliser des objets. Mais on peut aussi utiliser des « boîtes de sauvegarde », qui permettent en outre de définir les dimensions de l'objet et le placement au sein de la boîte :
* \newsavebox{\nom} : création de la boîte ;
* \savebox{\nom}{objet} : définition du contenu de la boîte ;
* \usebox{\nom} ; utilisation de la boîte,
où nom est le nom de la boîte.
Lorsque la commande \savebox est à l'intérieur d'un environnement picture, on peut utiliser la syntaxe suivante :
où (largeur,hauteur) est en unités par défaut, et placement prend les valeurs suivantes :
* l, c, r : centré verticalement, et respectivement collé à gauche, au centre et à droite ;
* tl, tc, tr : aligné en haut, et respectivement collé à gauche, au centre et à droite ;
* bl, bc, br : aligné en bas, et respectivement collé à gauche, au centre et à droite.

## Extensions utiles

On peut utiliser l'extension graphicx qui permet de retailler (\scalebox), de faire tourner des objets (\rotatebox) et d'intégrer des images extérieures (\includegraphicx), voir Mise en forme du texte (avancé) > Déformation du texte, Inclure des images et Images.
Par exemple, pour avoir une ellipse avec un rapport axe vertical sur horizontal de 1:2, on peut déformer un cercle :
cependant, le trait est plus large dans la dimension qui a été étirée.
L'extension xcolor permet de changer la couleur des objets dessinés. On utilise pour cela \textcolor (puisque les dessins sont à base de caractères). La commande peut être à l'intérieur de l'environnement picture, définissant ainsi la couleur de tel ou tel objet, ou bien peut contenir l'environnement picture et s'appliquer à tous les objets.
L'extension graphpap permet d'obtenir du papier millimétré avec la commande \graphpaper :
où graduation est l'espacement entre deux traits fins (par défaut 10), x et y sont l'origine des axes, largeur et hauteur sont les dimensions de la grille (en unité par défaut).

## Exercices
### Exercice 1

Réaliser la molécule de benzène ci-contre (format 2×2). On utilisera la géométrie pour avoir un placement exact des segments (les coordonnées des points et les directions sont calculées par l'utilisateur et entrées dans le code). Le rayon du cercle central est arbitraire et ajusté par essai-erreur « pour faire joli ».
Habituellement, on représente plutôt la groupement « debout » (tourné d'un sixième de tour par rapport au dessin présent). Pour le dessin des molécules, mieux vaut utiliser PPChTeX.
Il faut placer le point (0,0) au centre du picture, les coordonnées du sommet n sont alors (cos(n⋅60°), sin(n⋅60°)) (n allant de 0 à 5).
Pour le placement d'un segment, on utilise les valeur décimales. Par contre, pour les directions, il faut multiplier les valeurs selon x et y par un même facteur et tronquer ; par exemple, un facteur 100 permet d'avoir une précision de 0,01 sur la direction, l'extension pict2e est nécessaire (sans pict2e, il faudrait approcher la direction (50, 87) par (3, 5)).

### Exercice 2

Réaliser l'écrou ci-contre (représentation de type dessin technique, format 2×2). Pour l'hexagone, on utilisera la solution ci-dessus.
Le trait fort a une épaisseur de 0,5 mm, soit 0.05 en unité par défaut ; le trait fin a une épaisseur de 0,2 mm, soit 0.02 en unité par défaut.
Notez que les dimensions ne correspondent pas à un écrou normalisé : le but n'étant pas de générer un dessin exact mais d'apprendre à maîtriser l'environnement picture, on utilise volontairement des valeurs simples.
Pour les trois quarts de cercle, on utilisera des rectangles aux angles arrondis dont le rayon de courbure est égale à la longueur des côtés. Il faut donc impérativement l'extension pict2e.

### Exercice 3

Réaliser l'organigramme ci-contre (format 5×5).
L'ajustement des coordonnées et dimensions peut se faire par calcul et/ou essai-erreur.

### Exercice 4

Réaliser le document ci-contre.

#### Fichier image1.tex

On peut faire un code un peu plus compact en ajoutant
dans l'en-tête du fichier exercice.tex, puis dans le fichier image1.tex :
L'imbrication \put(\i,-0.6){\put(-0.1,0){\i}} sert à avoir l'équivalent de \i-0.1 pour le placement en x (l'extension calc pose problème avec l'unité par défaut).

## Notes

* ↑ la syntaxe est \rule{longueur}{épaisseur} on utilise parfois cette commande pour « réserver de la place » en traçant un trait de longueur nulle ou d'épaisseur nulle

## Voir aussi
### Sur Wikipédia

* Courbe de Bézier