Tutoriel TikZ pour débutants
TikZ est la bibliothèque LaTeX qui permet de dessiner des figures, des graphes, des schémas directement dans votre document, sans logiciel externe. Ce tutoriel couvre les bases — assez pour réaliser 90 % des figures dont vous aurez besoin. Chaque exemple est compilable directement dans votre navigateur : cliquez sur « Voir dans la démo » pour voir le résultat instantanément, sans installer LaTeX.
Qu'est-ce que TikZ ?
TikZ (acronyme récursif : « TikZ ist kein Zeichenprogramm » — TikZ n'est pas un programme de dessin) est une bibliothèque de dessin vectoriel pour LaTeX. Elle est construite sur le langage PGF et offre une syntaxe plus accessible.
Concrètement : vous décrivez votre figure avec des commandes textuelles (par exemple \draw (0,0) -- (1,1) pour tracer un trait), et TikZ la rend en PDF de qualité professionnelle. Idéal pour les schémas mathématiques, les diagrammes scientifiques, les organigrammes, et tout ce qui demande de la précision.
Pour utiliser TikZ, il suffit d'inclure deux lignes dans le préambule de votre document :
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
% Vos commandes TikZ ici
\end{tikzpicture}
\end{document}
Toutes les commandes de dessin doivent être écrites entre \begin{tikzpicture} et \end{tikzpicture}. C'est cet environnement qui définit la zone de dessin.
Premier dessin : une ligne
La commande de base de TikZ est \draw (« dessiner »). Pour tracer un trait, on indique deux points reliés par --.
Les coordonnées sont données entre parenthèses sous la forme (x,y), où la valeur par défaut est en centimètres. (0,0) est l'origine, (3,2) est un point situé 3 cm à droite et 2 cm au-dessus.
\begin{tikzpicture}
\draw (0,0) -- (3,2);
\end{tikzpicture}
Coordonnées et points
Pour bien comprendre où vous dessinez, il est utile d'afficher une grille de repère avec \draw[help lines] (0,0) grid (4,3);.
Vous pouvez tracer un point en remplissant un petit cercle avec \fill, et étiqueter sa position avec un \node (voir chapitre dédié plus loin).
\begin{tikzpicture}
% Grille de fond (aide visuelle)
\draw[help lines, gray!30] (0,0) grid (4,3);
% Quelques points
\fill[red] (1,1) circle (2pt);
\fill[blue] (3,2) circle (2pt);
\fill[green!60!black] (2,0) circle (2pt);
% Étiquettes
\node[above right] at (1,1) {(1,1)};
\node[above right] at (3,2) {(3,2)};
\node[above right] at (2,0) {(2,0)};
\end{tikzpicture}
Couleurs
TikZ accepte les couleurs prédéfinies : red, blue, green, black, white, gray, orange, purple, etc.
Vous pouvez aussi moduler l'intensité avec ! : red!50 est un rouge à 50 % (plus pâle), green!60!black mélange 60 % de vert et 40 % de noir (vert foncé).
On applique une couleur dans les options entre crochets du \draw.
\begin{tikzpicture}
\draw[red, thick] (0,2) -- (4,2) node[right] {rouge};
\draw[blue, thick] (0,1) -- (4,1) node[right] {bleu};
\draw[green!60!black, thick] (0,0) -- (4,0) node[right] {vert};
\end{tikzpicture}
Styles de ligne
L'épaisseur du trait se règle avec thin, thick, very thick, ultra thick, ou avec line width=1pt pour une valeur précise.
Le motif du trait se règle avec dashed (tirets), dotted (points), loosely dashed (tirets espacés), densely dotted, etc.
\begin{tikzpicture}
\draw[thick] (0,3) -- (4,3) node[right] {trait normal};
\draw[ultra thick] (0,2.2) -- (4,2.2) node[right] {ultra thick};
\draw[dashed, thick] (0,1.4) -- (4,1.4) node[right] {pointillés};
\draw[dotted, thick] (0,0.6) -- (4,0.6) node[right] {points};
\draw[loosely dashed] (0,-0.2) -- (4,-0.2) node[right] {loosely dashed};
\end{tikzpicture}
Rectangle, cercle, ellipse
Un rectangle se trace avec (coin1) rectangle (coin2) où coin1 et coin2 sont deux coins opposés (typiquement bas-gauche et haut-droit).
Un cercle se trace avec (centre) circle (rayon).
Une ellipse nécessite deux rayons (horizontal et vertical) : (centre) ellipse (rx and ry).
\begin{tikzpicture}
% Rectangle : (coin bas-gauche) rectangle (coin haut-droit)
\draw[blue, thick] (0,0) rectangle (3,2);
% Cercle : (centre) circle (rayon)
\draw[red, thick] (5,1) circle (1cm);
% Ellipse : (centre) ellipse (rayon-x and rayon-y)
\draw[green!60!black, thick] (8,1) ellipse (1.2 and 0.7);
\end{tikzpicture}
Nœuds et texte
Un nœud (node) est un objet positionnable qui contient du texte ou des formes. La commande de base est \node at (x,y) {contenu};.
Avec des options, le nœud peut être encadré : draw (dessiner le contour), rectangle ou circle (forme), fill=blue!10 (couleur de fond).
\begin{tikzpicture}
% Un nœud rectangulaire
\node[draw, rectangle, fill=blue!10] at (0,0) {Boîte};
% Un nœud circulaire
\node[draw, circle, fill=red!10] at (3,0) {Rond};
% Texte simple sans cadre
\node at (6,0) {Juste du texte};
\end{tikzpicture}
Positionner les nœuds (right=of, below=of…)
Calculer manuellement les coordonnées de chaque nœud devient vite pénible. La bibliothèque positioning permet de placer un nœud par rapport à un autre : right=of A place le nœud à droite de A, below=of A en dessous, etc. Pour l'utiliser, ajoutez \usetikzlibrary{positioning} au préambule.
Les directions disponibles sont : right, left, above, below et leurs combinaisons (above right, below left…). Vous pouvez préciser une distance : below=2cm of A, ou globalement avec node distance=15mm en option du tikzpicture.
Chaque nœud a aussi des ancres nommées (north, south, east, west, north east, center…). On y accède avec la syntaxe (A.south) et c'est indispensable pour relier deux nœuds proprement : \draw (A.east) -- (B.west); tracera une flèche entre les bords, sans la traverser.
Astuce : nommer un nœud avec (A) juste après \node est obligatoire pour pouvoir y faire référence ensuite : \node[draw] (A) at (0,0) {Texte};.
\usetikzlibrary{positioning}
\begin{tikzpicture}[node distance=10mm and 14mm]
% Nœud A : position absolue (point d'ancrage)
\node[draw, rectangle, fill=blue!15, minimum size=10mm] (A) {A};
% B à droite de A (écart par défaut)
\node[draw, rectangle, fill=red!15, minimum size=10mm, right=of A] (B) {B};
% C en dessous de A
\node[draw, rectangle, fill=green!15, minimum size=10mm, below=of A] (C) {C};
% D en bas-à-droite de A, distance personnalisée
\node[draw, rectangle, fill=orange!20, minimum size=10mm,
below right=15mm and 25mm of A] (D) {D};
% Ancres : on relie des bords précis (south, north east…)
\draw[->, thick] (A.south) -- (C.north);
\draw[->, thick, dashed] (B.south west) -- (D.north);
\draw[->, thick] (B.east) -- ++(0.6,0) node[right] {(B.east)};
\end{tikzpicture}
Flèches
Les flèches s'obtiennent en ajoutant des options de pointe : -> (flèche simple à droite), <- (à gauche), <-> (bidirectionnelle).
Pour des pointes plus élégantes, chargez la bibliothèque arrows.meta dans le préambule : \usetikzlibrary{arrows.meta}. Vous pouvez alors utiliser -{Stealth}, -{Latex}, -{Triangle}, etc.
\begin{tikzpicture}
\draw[->, thick] (0,3) -- (4,3) node[right] {flèche simple};
\draw[<-, thick] (0,2) -- (4,2) node[right] {flèche inverse};
\draw[<->, thick] (0,1) -- (4,1) node[right] {bidirectionnelle};
% Flèche fine personnalisée (bibliothèque arrows.meta)
\draw[-{Stealth}, very thick, red] (0,0) -- (4,0) node[right] {Stealth};
\end{tikzpicture}
Polygones et chemins fermés
Pour tracer un polygone, on enchaîne plusieurs -- et on termine par -- cycle qui ferme proprement le chemin.
Pour le remplir (en plus du contour), utilisez l'option fill=couleur dans le \draw.
\begin{tikzpicture}
% Triangle fermé avec 'cycle'
\draw[blue, thick] (0,0) -- (2,0) -- (1,1.7) -- cycle;
% Polygone irrégulier
\draw[red, thick, fill=red!10] (3,0) -- (5,0) -- (5.5,1.5) -- (3.5,2) -- cycle;
\end{tikzpicture}
Arcs et courbes
Un arc de cercle se trace avec (point de départ) arc (angleDébut:angleFin:rayon). Les angles sont en degrés.
Pour des courbes lisses, utilisez les courbes de Bézier (chapitre suivant).
\begin{tikzpicture}
% Arc de cercle : (départ) arc (angle1:angle2:rayon)
\draw[blue, thick] (0,0) arc (0:180:1);
% Courbe de Bézier : (départ) .. controls (P1) and (P2) .. (arrivée)
\draw[red, thick] (3,0) .. controls (4,2) and (5,-1) .. (6,1);
\end{tikzpicture}
Courbes de Bézier
Une courbe de Bézier cubique se trace avec (A) .. controls (P1) and (P2) .. (B). Le tracé part de A, finit en B, et est guidé par deux points de contrôle P1 et P2 — la courbe ne passe pas forcément par ces points, ils tirent la courbe vers eux comme des aimants.
Une Bézier quadratique n'utilise qu'un seul point de contrôle : (A) .. controls (P) .. (B). Plus simple à régler quand on cherche une courbe symétrique.
Astuce pédagogique : dessiner les points de contrôle avec \fill + leur polygone de contrôle en pointillés aide énormément à comprendre comment la courbe est construite.
\begin{tikzpicture}
% Bézier cubique : (A) .. controls (P1) and (P2) .. (B)
\draw[blue, thick] (0,0) .. controls (1,2) and (3,2) .. (4,0)
node[right, blue] {Bézier cubique};
% Points de contrôle visibles
\fill[blue!50] (1,2) circle (1.5pt) node[above] {\scriptsize $P_1$};
\fill[blue!50] (3,2) circle (1.5pt) node[above] {\scriptsize $P_2$};
\draw[blue!50, dashed, thin] (0,0) -- (1,2) -- (3,2) -- (4,0);
% Bézier quadratique (un seul point de contrôle)
\draw[red, thick] (0,-2) .. controls (2,-4) .. (4,-2)
node[right, red] {Bézier quadratique};
\fill[red!50] (2,-4) circle (1.5pt) node[below] {\scriptsize $P$};
\end{tikzpicture}
Remplissage
Pour remplir une forme sans contour, utilisez \fill. Pour remplir avec un contour, utilisez \filldraw, ou ajoutez l'option fill=... à votre \draw.
Vous pouvez aussi appliquer une opacité avec fill opacity=0.3 pour des superpositions semi-transparentes.
\begin{tikzpicture}
% \fill remplit (sans contour)
\fill[blue!30] (0,0) rectangle (2,1.5);
% \filldraw remplit ET dessine le contour
\filldraw[red!30, draw=red, thick] (3,0) rectangle (5,1.5);
% \draw[fill=...] équivalent
\draw[fill=green!30, thick, green!60!black] (6,0) circle (0.8);
\end{tikzpicture}
Axes et grille
Pour tracer un repère orthonormé simple, utilisez deux \draw[->] avec un \node à l'extrémité pour étiqueter l'axe.
La construction \foreach \x in {1,2,3,4} permet de répéter un dessin pour chaque valeur — pratique pour les graduations.
\begin{tikzpicture}
% Axes
\draw[->, thick] (-0.5,0) -- (4.5,0) node[right] {$x$};
\draw[->, thick] (0,-0.5) -- (0,3.5) node[above] {$y$};
% Graduations
\foreach \x in {1,2,3,4}
\draw[gray!50] (\x,-0.05) -- (\x,0.05) node[below=2pt] {\x};
\foreach \y in {1,2,3}
\draw[gray!50] (-0.05,\y) -- (0.05,\y) node[left=2pt] {\y};
% Un point
\fill[red] (3,2) circle (2pt) node[above right] {A};
\end{tikzpicture}
Tracé d'une fonction
Pour tracer le graphe d'une fonction, on utilise \draw plot (\x, {expression}), où \x est la variable, et l'expression mathématique est entre accolades.
Trois options indispensables : domain=a:b définit l'intervalle de tracé, samples=N contrôle le nombre de points (plus c'est grand, plus la courbe est lisse), et smooth demande une interpolation lisse.
Cette syntaxe utilise TikZ pur, sans pgfplots. Parfaite pour la majorité des graphes scolaires.
\begin{tikzpicture}[scale=1.2]
% Axes
\draw[->, thick] (-3.2,0) -- (3.2,0) node[right] {$x$};
\draw[->, thick] (0,-1.5) -- (0,4.5) node[above] {$y$};
% Tracé de y = x²
\draw[blue, thick, smooth, samples=100, domain=-2:2]
plot (\x, {\x*\x}) node[right] {$y = x^2$};
\end{tikzpicture}
Plusieurs fonctions sur le même repère
Pour superposer plusieurs courbes, il suffit de répéter \draw plot autant de fois que nécessaire, en variant les couleurs et les expressions.
Important pour les fonctions trigonométriques : TikZ travaille en degrés par défaut. Pour utiliser des radians (avec π), ajoutez r après l'argument : sin(\x r).
\begin{tikzpicture}[scale=1.2]
% Axes
\draw[->, thick] (-3.5,0) -- (3.5,0) node[right] {$x$};
\draw[->, thick] (0,-2.5) -- (0,2.5) node[above] {$y$};
% Quelques graduations
\foreach \x in {-3,-2,-1,1,2,3} \draw (\x, 0.05) -- (\x, -0.05) node[below] {\scriptsize\x};
% Sinus en bleu
\draw[blue, thick, smooth, samples=100, domain=-3.14:3.14]
plot (\x, {sin(\x r)}) node[right] {$\sin x$};
% Cosinus en rouge
\draw[red, thick, smooth, samples=100, domain=-3.14:3.14]
plot (\x, {cos(\x r)}) node[above right] {$\cos x$};
\end{tikzpicture}
Aire sous une courbe
Pour matérialiser l'aire sous une courbe (typiquement pour illustrer une intégrale), on combine \fill avec un plot et on ferme la zone via -- cycle en passant par les bords sur l'axe.
L'option opacity=0.2 rend le remplissage semi-transparent, ce qui permet de garder la courbe visible par-dessus.
Pour des graphes plus avancés (axes annotés, légende automatique, échelles logarithmiques, statistiques), explorez le package pgfplots dans notre galerie.
\begin{tikzpicture}[scale=1.0]
% Axes
\draw[->, thick] (-0.5,0) -- (5.5,0) node[right] {$x$};
\draw[->, thick] (0,-0.5) -- (0,3.5) node[above] {$y$};
% y = sqrt(x) sur [0;5]
\draw[teal, thick, smooth, samples=80, domain=0:5]
plot (\x, {sqrt(\x)}) node[right] {$y = \sqrt{x}$};
% Aire sous la courbe (remplie)
\fill[teal, opacity=0.2, smooth, samples=80, domain=0:4]
plot (\x, {sqrt(\x)}) -- (4,0) -- (0,0) -- cycle;
% Étiquette
\node[below] at (2, -0.3) {$\int_0^4 \sqrt{x}\,dx$};
\end{tikzpicture}
Pour aller plus loin
Vous maîtrisez maintenant les fondamentaux. Pour passer au niveau supérieur :
- Galerie TikZ : 300+ figures classées par catégorie (mathématiques, physique, chimie, machine learning, diagrammes…). Cliquez sur n'importe quelle figure pour voir le code complet et l'éditer dans la démo.
- pgfplots pour les graphes de fonctions et les statistiques :
\usepackage{pgfplots}. - tikz-cd pour les diagrammes commutatifs en mathématiques.
- circuitikz pour les schémas électriques.
- Les bibliothèques TikZ utiles à charger :
arrows.meta,positioning,calc,decorations.markings,patterns.