[Tuto] Dessiner en LaTeX avec TikZ

latex 4 nov. 2013

Salut salut !

Après concertation avec moi-même, pis un peu avec @Zilkos et @Fr33tux quand même, je me suis dit qu’un petit tutoriel sur les bases pour dessiner en LaTeX serait bien pratique pour vous, lecteurs chéris, qui êtes de plus en plus nombreux à venir lire les articles de la catégorie LaTeX (et croyez bien que j’en suis fier, parce qu’à la création de cette catégorie, c’était pas gagné).

Je sais, on peut dessiner un peu en LaTeX « pur », mais bon. C’est pas non plus la panacée. PSTricks est bien aussi, mais plus orienté « mathématiques ». Tandis qu’avec le duo PGF/TikZ, c’est plutôt simple de faire à peu près tout et n’importe quoi.

Dans le coup, c’est une introduction, hein. Après, je dirais qu’avec ce que je vais vous présenter, vous devriez arriver à dessiner pas mal de choses, et je vous invite dans le cas contraire à approfondir. Quelques liens vers des ressources complémentaires (souvent en anglais) suivent ce tutoriel.

Insérer un dessin

On ne perd pas les bases de LaTeX expliquées par ici, et on se dit fort à propos qu’il doit suffire de pas grand chose pour faire ça. Comme dans la plupart des cas, un petit \usepackage{tikz} dans le préambule pour charger l’extension TikZ suffit. Si vous utilisez TeXlive ou MiKTeX, cela devrait aller tout seul, comme papa dans maman.

Quand à l’environnement à insérer dans le document :

1
2
3
\begin{tikzpicture}
votre code
\end{tikzpicture
}

Il est bien évidemment possible d’intégrer tout ça dans un environnement figure, avec une légende et tout, pour que ce soit numéroté et ajouté à votre table des figures, tout ça tout ça.

« Y a plus qu’à » compiler avec PDFTeX ou XeTeX (personnellement, j’utilise le premier).

 

Des lignes, des courbes…

C’est quand même (en partie) pour ça qu’on est là, non ?

Bon, des lignes, c’est super facile. Il faut juste vous imaginer un repère classique, avec un système de coordonnées. Par défaut, le coin bas-gauche de votre image, c’est l’origine, qui a donc pour coordonnées (0,0) . Ah, précision utile : par défaut, les unités sont en centimètres.

1
2
3
\begin{tikzpicture}
\draw (0,0) -- (1,2);
\end{tikzpicture
}

va donc vous donner un segment qui part du point (0,0) pour aller  au point (1,2). Plus dur maintenant :

1
2
3
4
\begin{tikzpicture}
\draw[red] (0,0) -- (1,2) -- (3,3) -- (2,0);
\draw[help lines] (0,0) grid (3,3);
\end{tikzpicture
}

Ce qui nous donne… ça !

Sélection_003

Donc. Le premier \draw indique à LaTeX de tracer ces segments en rouge, et de relier les points indiqués. Super simple ! Quant au \draw qui suit, il est là pour tracer le repère.

 

On peut aussi faire des flèches. Il y en a plusieurs sortes que voici. Attention : les flèches sont dessinées aux extrémités du premier et du dernier segment, aussi pour avoir une flèche par segment, il faut un « dram » par segment 🙂

1
2
3
4
5
\begin{tikzpicture}
\draw [->] (0,0) -- (2,0);
\draw [<-] (0, 0.5) -- (2,0.5);
\draw [|->] (0,1) -- (2,1);
\end{tikzpicture
}

Sélection_004

Et si on changeait l’épaisseur des traits ? 😉 Facile : \draw[épaisseur] où épaisseur peut prendre plusieurs valeurs : ultra thin, very thin, thin, semithick, thick, very thick, et enfin ultra thick. C’est en anglais, mais ça a l’avantage d’utiliser des mots courants, et si vous causez 3-4 mots d’anglais, c’est simple à deviner/retenir.

Après, si vous voulez vraiment faire un gros trait (c’est laid), il faudra utiliser par exemple \draw[line width=0.3cm]. Plusieurs unités fonctionnent, comme souvent, et si vous omettez de préciser, c’est le point qui est utilisé par défaut.

Et les pointillés ! J’aime les pointillés, ça sert bien dans pas mal de graphes, c’est souvent plus lisible que les couleurs (surtout quand on n’a qu’une imprimante laser noir&blanc au boulot).

Les « tirets » se chargent via \draw[dashed] et les pointillés par \draw[dotted], comme toujours cumulables avec d’autres options (épaisseur, couleur…).

 

On passe aux courbes ! 

Je dis courbes, mais ça englobe aussi les figures « fermées », genre les rectangles. Eh ben en fait, c’est franchement pas méchant. Suffit de quelques bases de maths : savoir ce qu’est un rayon, et un angle. Mon p’tit frère (CM2) connaît ça, j’imagine donc que vous, lecteurs, aussi :mrgreen:

1
2
3
4
5
\begin{tikzpicture}
\draw [olive] (0,0) rectangle (2,1);
\draw [red, very thick] (3.5,0.5) circle [radius=0.5];
\draw [gray] (7.5,0) arc [radius=2, start angle=0, end angle= 120];
\end{tikzpicture
}

Sélection_009

Voilà voilà. Je rappelle à tout hasard que « radius » correspond au rayon, et que pour tracer un axe il faut donner les angles de début et de fin, qui définissent donc la « longueur » de votre arc de cercle.

Puisqu’on est dans les angles, un petit truc magique : on peut orienter les lignes, de manière à ce qu’elles partent d’un point avec un angle donné, et de façon à ce qu’elles arrivent à leur point de destination avec là aussi un angle précis. Démonstration :

1
2
3
\begin{tikzpicture}
\draw [->,very thick, orange] (0,0) to [out=90,in=180] (1,1) to [out=0,in=180] (3.5,0) to [out=0,in=-135] (5.5,2) ;
\end{tikzpicture
}

Sélection_010

(comment c’est beau ! :mrgreen: )

Et si on les coloriait, ces trucs-là ?

1
2
3
4
\begin{tikzpicture}
\draw [fill, pink] (0,0) rectangle (2,1);
\draw [fill=white] (0.25,0.25) rectangle (1,1.5);
\end{tikzpicture
}

Sélection_012

Voilà, c’est le fill qui fait tout. Deux « nuances » ici :

  • le premier \draw utilise un fill sans argument, donc la figure sera remplie par la même couleur que celle du contour ;
  • le second \draw précise la couleur de remplissage, elle peut donc être différente de celle du contour.

Vous noterez bien que les « couches » se superposent dans l’ordre donné à TikZ, et que fill peut être appliqué à toutes sortes de figures, pas seulement des figures « simples » 😉

 

Des fonctions ?

C’est encore mon côté scientifique qui prend le dessus ! Eh oui, j’ai souvent été amené à intégrer des grapĥes de fonctions dans des documents, et à part via Maxima avec export d’image, j’avais pas 50 solutions sous le coude. C’est terminé !
(et si vous tracez une fonction dans Excel pour l’inclure dans un document Word, passez votre chemin)

Le « schéma » est simple : on définit la variable, et on donne la fonction. On précise aussi l’échelle choisie (faut que ça tienne sur la page 😉 ) et le domaine étudié (d’où on part, où on s’arrête). Par exemple, pour la fonction x² de -2 à 2 :

1
2
3
4
\begin{tikzpicture}[xscale=1,yscale=1]
\draw [<->] (0,1) -- (0,0) -- (1,0);
\draw[blue,thick, domain=-2:2] plot (\x, {\x*\x});
\end{tikzpicture
}

Sélection_011

Vous remarquez donc :

  • xscale et yscale sont respectivement les échelles sur l’axe x et y. Échelle à 1, c’est à dire qu’un centimètre sur le papier correspond à un centimètre en réalité ;
  • le premier \draw, c’est juste pour vous dessiner un p’tit repère ;
  • le second \draw, on précise le domaine, puis on plot une fonction : (variable, {fonction}).

Il y a franchement tout un tas de fonctions « intégrées » au moteur mathématique de TikZ, je vous renvoie vers la documentation officielle pour une liste complète. M’enfin rien de mystérieux, si vous connaissez un peu LaTeX, ça change pas des masses.

 

Ce sera tout pour cette première initiation. Promis, je vous abandonne pas, et on abordera les nœuds et autres trucs sympa mais un poil plus complexes d’ici pas tard, le temps que je passe mes exams de mi-semestre ! Profitez-en pour vous exercer, et si vous avez des questions, les commentaires sont (comme toujours) ouverts ! Je suis bien entendu ouvert à toute suggestion d’amélioration si un truc manque de clarté, je suis pas infaillible 🙂

Motivation suprême : un exemple de ce que vous saurez bientôt faire !

Sélection_013

Mots clés