
Example 1
Nous souhaitons dessiner l’image suivante en utilisant le package tikz :

On commence par créer un fichier standalone avec le contenu suivant :
\documentclass{standalone}
\begin{document}
...
\end{document}A l’intérieur du document, on charge le package tikz et on crée une figure en utilisant l’environnement tikzpicture :
\documentclass{standalone}
% Chargement du package tikz
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
% Dessin ici
\end{tikzpicture}
\end{document}1 Version simple
On commence par dessiner un axe horizontal avec une flèche à son extrémité droite :
\draw[->, thick] (-0.5,0) -- (10.5,0);Cette commande dessine une ligne épaisse avec une flèche allant du point (-0.5,0) au point (10.5,0). Le choix des coordonnées permet de laisser un peu d’espace avant le début de l’axe et après la fin de l’axe. La flèche est placée en utilisant l’option ->. L’option thick rend la ligne plus épaisse. Le résultat est le suivant :
Ensuite on peut ajouter des étiquettes sur l’axe en utilisant des segments verticaux et des nœuds pour les numéros. Par exemple, pour ajouter une étiquette sur le point 0, on peut utiliser la commande suivante :
\draw[-] (0, 0.2) -- (0, -0.2) node[below] {0};La commande \draw[-] dessine une ligne allant du point (0, 0.2) au point (0, -0.2). L’option node[below] {0} ajoute un nœud contenant le texte 0 en dessous de la ligne. Le résultat est le suivant :

On peut répéter cette commande pour ajouter des étiquettes de 0 à 10 sur l’axe :
\draw[-] (0, 0.2) -- (0, -0.2) node[below] {0};
\draw[-] (1, 0.2) -- (1, -0.2) node[below] {1};
\draw[-] (2, 0.2) -- (2, -0.2) node[below] {2};
\draw[-] (3, 0.2) -- (3, -0.2) node[below] {3};
\draw[-] (4, 0.2) -- (4, -0.2) node[below] {4};
\draw[-] (5, 0.2) -- (5, -0.2) node[below] {5};
\draw[-] (6, 0.2) -- (6, -0.2) node[below] {6};
\draw[-] (7, 0.2) -- (7, -0.2) node[below] {7};
\draw[-] (8, 0.2) -- (8, -0.2) node[below] {8};
\draw[-] (9, 0.2) -- (9, -0.2) node[below] {9};
\draw[-] (10, 0.2) -- (10, -0.2) node[below] {10};Voici le résultat final avec l’axe et les étiquettes :

On peut ensuite ajouter le rectangle bleu au-dessus de l’axe qui contient le text “Il était une fois” :
\node[
rectangle,
draw,
fill=blue!20,
rounded corners,
minimum height=0.8cm,
text width=3cm,
align=center
] (fois) at (0.5, 2.5) {Il était une fois};- La commande
\node[...] (fois) at (0.5, 2.5) {Il était une fois};crée un nœud nomméfoisà la position(0.5, 2.5)avec le texte “Il était une fois”. - L’option
rectangleindique que le nœud doit être dessiné sous forme de rectangle. - L’option
drawindique que le contour du rectangle doit être dessiné. - L’option
fill=blue!20remplit le rectangle avec une couleur bleue claire. - L’option
rounded cornersarrondit les coins du rectangle. - L’option
minimum height=0.8cmdéfinit la hauteur minimale du rectangle. - L’option
text width=3cmdéfinit la largeur du texte à l’intérieur du rectangle. - L’option
align=centercentre le texte à l’intérieur du rectangle.
Le résultat doit ressembler à ceci :

On peut ajouter les autres rectangles de la même manière :
\node[
rectangle,
draw,
fill=blue!20,
rounded corners,
minimum height=0.8cm,
text width=3cm,
align=center
] (reine) at (2.25, -2) {une reine};
\node[
rectangle,
draw,
fill=blue!20,
rounded corners,
minimum height=0.8cm,
text width=3cm,
align=center
] (roi) at (5.5, 2.5) {un roi};
\node[
rectangle,
draw,
fill=red!20,
rounded corners,
minimum height=0.8cm,
text width=3cm,
align=center
] (fin) at (8.25, -2) {happy end};Une fois ajoutés, le dessin ressemble à ceci :

Enfin, on peut ajouter les flèches entre qui relient les rectangles avec l’axe :
\draw[->, thick] (fois.south) -- (1, 0.2);
\draw[->, thick] (roi.south) -- (6, 0.2);
\draw[->, thick] (reine.north) -- (3, -0.2);
\draw[->, thick] (fin.north) -- (9, -0.2);- La commande
\draw[->, thick] (fois.south) -- (1, 0.2);dessine une flèche épaisse allant du bas du nœudfois(indiqué parfois.south) au point(1, 0.2)sur l’axe, c’est-à-dire juste au-dessus de la graduation1. - De même, les autres commandes dessinent des flèches reliant les autres nœuds aux points correspondants sur l’axe.
Le résultat final est le suivant :

Voici le code complet pour obtenir l’image souhaitée :
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[->, thick] (-0.5, 0) -- (10.5, 0);
\draw[-] (0, 0.2) -- (0, -0.2) node[below] {0};
\draw[-] (1, 0.2) -- (1, -0.2) node[below] {1};
\draw[-] (2, 0.2) -- (2, -0.2) node[below] {2};
\draw[-] (3, 0.2) -- (3, -0.2) node[below] {3};
\draw[-] (4, 0.2) -- (4, -0.2) node[below] {4};
\draw[-] (5, 0.2) -- (5, -0.2) node[below] {5};
\draw[-] (6, 0.2) -- (6, -0.2) node[below] {6};
\draw[-] (7, 0.2) -- (7, -0.2) node[below] {7};
\draw[-] (8, 0.2) -- (8, -0.2) node[below] {8};
\draw[-] (9, 0.2) -- (9, -0.2) node[below] {9};
\draw[-] (10, 0.2) -- (10, -0.2) node[below] {10};
\node[
rectangle,
draw,
fill=blue!20,
rounded corners,
minimum height=0.8cm,
text width=3cm,
align=center
] (fois) at (0.5, 2.5) {Il était une fois};
\node[
rectangle,
draw,
fill=blue!20,
rounded corners,
minimum height=0.8cm,
text width=3cm,
align=center
] (reine) at (2.25, -2) {une reine};
\node[
rectangle,
draw,
fill=blue!20,
rounded corners,
minimum height=0.8cm,
text width=3cm,
align=center
] (roi) at (5.5, 2.5) {un roi};
\node[
rectangle,
draw,
fill=red!20,
rounded corners,
minimum height=0.8cm,
text width=3cm,
align=center
] (fin) at (8.25, -2) {happy end};
\draw[->, thick] (fois.south) -- (1, 0.2);
\draw[->, thick] (roi.south) -- (6, 0.2);
\draw[->, thick] (reine.north) -- (3, -0.2);
\draw[->, thick] (fin.north) -- (9, -0.2);
\end{tikzpicture}
\end{document}2 Version avancée
Le code précédent fonctionne bien, mais il peut être amélioré en utilisant des boucles pour dessiner les étiquettes de l’axe et en définissant des styles pour les nœuds afin de rendre le code plus lisible et plus facile à modifier.
- Utilisation d’une boucle pour les étiquettes de l’axe :
\foreach \x in {0,1,...,10} {
\draw[-] (\x, 0.2) -- (\x, -0.2) node[below] {\x};
}- Définition de styles pour les nœuds. En effet, pour éviter de répéter les mêmes options pour chaque nœud, on peut définir des styles personnalisés. La commande
\tikzset{}permet de définir des styles réutilisables. Ci-dessous, nous définissons deux styles :genericboxpour les propriétés communes des boîtes,blueboxpour les boîtes bleues etredboxpour la boîte rouge.
\tikzset{
genericbox/.style={
rectangle,
draw,
rounded corners,
minimum height=0.8cm,
text width=3cm,
align=center
},
bluebox/.style={
genericbox,
fill=blue!20
},
redbox/.style={
genericbox,
fill=red!20
}
}- Amélioration du positionnement des flèches. On peut observer que les flèches qui relient les boîtes à l’axe ne sont pas parfaitement alignées avec les graduations de l’axe. Pour améliorer cela, on peut définir des nœuds invisibles sur l’axe aux positions correspondantes et utiliser ces nœuds comme points de connexion pour les flèches. Voici comment définir ces nœuds invisibles :
\node[inner sep=0.2cm] (foisinstant) at (1, 0) {};
\node[inner sep=0.6cm] (reineinstant) at (3, 0) {};
\node[inner sep=0.2cm] (roinstant) at (6, 0) {};
\node[inner sep=0.6cm] (fininstant) at (9, 0) {};Et voici comment modifier les commandes de dessin des flèches pour utiliser ces nœuds invisibles :
\draw[->, thick] (fois.south) -- (foisinstant.north);
\draw[->, thick] (roi.south) -- (roinstant.north);
\draw[->, thick] (reine.north) -- (reineinstant.south);
\draw[->, thick] (fin.north) -- (fininstant.south);Voici le code complet amélioré :
\documentclass{standalone}
\usepackage{tikz}
\tikzset{
box/.style={
rectangle,
draw,
fill=gray!20,
rounded corners,
minimum height=0.8cm,
text width=3cm,
align=center
},
bluebox/.style={
box,
fill=blue!20
},
redbox/.style={
box,
fill=red!20
}
}
\begin{document}
\begin{tikzpicture}
\draw[->, thick] (-0.5, 0) -- (10.5, 0);
\foreach \x in {0,1,...,10} {
\draw[-] (\x, 0.2) -- (\x, -0.2) node[below] {\x};
}
\node[bluebox] (fois) at (0.5, 2.5) {Il était une fois};
\node[bluebox] (reine) at (2.25, -2) {une reine};
\node[bluebox] (roi) at (5.5, 2.5) {un roi};
\node[redbox] (fin) at (8.25, -2) {happy end};
\node[inner sep=0.2cm] (foisinstant) at (1, 0) {};
\node[inner sep=0.6cm] (reineinstant) at (3, 0) {};
\node[inner sep=0.2cm] (roinstant) at (6, 0) {};
\node[inner sep=0.6cm] (fininstant) at (9, 0) {};
\draw[->, thick] (fois.south) -- (foisinstant.north);
\draw[->, thick] (roi.south) -- (roinstant.north);
\draw[->, thick] (reine.north) -- (reineinstant.south);
\draw[->, thick] (fin.north) -- (fininstant.south);
\end{tikzpicture}
\end{document}Le résultat final est:
