Schémas économiques et pédagogiques
Informatique — LaTeX, chapitre 11
Les deux chapitres précédents ont présenté les outils. Celui-ci les applique aux figures qu’un cours d’économie réclame réellement : un équilibre de marché, un modèle IS-LM, un arbre de décision, une région critique.
Chaque figure est donnée complète et compilable. Prenez-les comme des patrons à adapter plutôt que comme des exercices.
11.1 L’équilibre de marché
\begin{tikzpicture}[scale=1.1]
% axes
\draw[->, thick] (0,0) -- (7,0) node[right] {$Q$};
\draw[->, thick] (0,0) -- (0,6) node[above] {$P$};
% courbes
\draw[blue, very thick] (0.5,1) -- (6,5.5) node[right] {$O$};
\draw[red, very thick] (0.5,5.5) -- (6,1) node[right] {$D$};
% equilibre
\coordinate (E) at (3.25,3.25);
\fill[black] (E) circle (2.2pt);
\node[above right] at (E) {$E$};
% projections
\draw[dashed, gray] (E) -- (E |- 0,0) node[below] {$Q^*$};
\draw[dashed, gray] (E) -- (E -| 0,0) node[left] {$P^*$};
\end{tikzpicture}|- et -| projettent sur un axe
(E |- 0,0) signifie « à la verticale de E, à la hauteur de l’origine » : c’est la projection sur l’axe des abscisses.
(E -| 0,0) fait l’inverse : projection sur l’axe des ordonnées.
Ces deux opérateurs évitent tout calcul de coordonnées. Déplacez le point E, les projections suivent.
11.1.1 Un déplacement de la demande
\begin{tikzpicture}[scale=1.1]
\draw[->, thick] (0,0) -- (7.5,0) node[right] {$Q$};
\draw[->, thick] (0,0) -- (0,6) node[above] {$P$};
\draw[blue, very thick] (0.5,1) -- (6,5.5) node[right] {$O$};
\draw[red, very thick] (0.5,4.5) -- (5,1) node[right] {$D$};
\draw[red!60, very thick, dashed]
(1.5,5.5) -- (6,2) node[right] {$D'$};
\coordinate (E1) at (2.6,2.7);
\coordinate (E2) at (3.9,3.8);
\fill (E1) circle (2pt) node[below right] {$E$};
\fill (E2) circle (2pt) node[below right] {$E'$};
\draw[->, thick, red!70] (3.0,4.6) -- (4.0,5.1);
\draw[dashed, gray] (E1) -- (E1 |- 0,0) node[below] {$Q^*$};
\draw[dashed, gray] (E2) -- (E2 |- 0,0) node[below] {$Q^{**}$};
\draw[dashed, gray] (E1) -- (E1 -| 0,0) node[left] {$P^*$};
\draw[dashed, gray] (E2) -- (E2 -| 0,0) node[left] {$P^{**}$};
\end{tikzpicture}Le patron de tout exercice de statique comparative : deux courbes, deux équilibres, une flèche indiquant le sens du déplacement.
11.2 Le modèle IS-LM
\begin{tikzpicture}[scale=1.1]
\draw[->, thick] (0,0) -- (7.5,0) node[below right] {$Y$};
\draw[->, thick] (0,0) -- (0,6) node[left] {$i$};
\draw[blue, very thick] (0.5,5) -- (6.5,1) node[right] {IS};
\draw[red, very thick] (0.5,1.2) -- (6.5,5) node[right] {LM};
\coordinate (E) at (3.55,3.03);
\fill (E) circle (2.2pt);
\node[above right=1pt] at (E) {$E$};
\draw[dashed, gray] (E) -- (E |- 0,0) node[below] {$Y^*$};
\draw[dashed, gray] (E) -- (E -| 0,0) node[left] {$i^*$};
\node[align=left, font=\small, anchor=north west]
at (0.3,-0.6) {IS : $Y = C(Y-T) + I(i) + G$\\
LM : $M/P = L(Y, i)$};
\end{tikzpicture}Les équations du modèle figurent sous la figure, composées en LaTeX — c’est là que TikZ surpasse tout logiciel de dessin.
11.3 Un arbre de décision
\begin{tikzpicture}[
grow = right,
level 1/.style = {sibling distance = 3cm, level distance = 3.5cm},
level 2/.style = {sibling distance = 1.6cm, level distance = 3.5cm},
noeud/.style = {draw, circle, fill=blue!15, inner sep=2pt},
feuille/.style = {draw, rectangle, fill=green!15, rounded corners},
etiq/.style = {font=\small, midway}
]
\node[noeud] {}
child { node[noeud] {}
child { node[feuille] {$-100$} edge from parent
node[etiq, below] {échec (0,4)} }
child { node[feuille] {$+250$} edge from parent
node[etiq, above] {succès (0,6)} }
edge from parent node[etiq, above] {investir} }
child { node[feuille] {$0$}
edge from parent node[etiq, below] {ne pas investir} };
\end{tikzpicture}child construit les arbres
\node {racine} child { node {...} child {...} }; engendre l’arborescence, et TikZ calcule seul les positions.
grow = right donne le sens de croissance — down par défaut. sibling distance écarte les frères, level distance éloigne les générations.
edge from parent node {...} étiquette la branche qui mène au parent : c’est là qu’on inscrit une probabilité ou une décision.
Pour un arbre binomial de valorisation d’option, le même patron avec grow=right et des probabilités p et 1-p convient parfaitement.
11.4 Un diagramme de flux
\begin{tikzpicture}[
node distance = 1.4cm and 2.2cm,
etape/.style = {draw, rounded corners, fill=blue!10,
minimum width=3cm, minimum height=0.9cm,
align=center, font=\small},
decision/.style = {draw, diamond, aspect=2, fill=orange!15,
inner sep=1pt, align=center, font=\small},
fleche/.style = {-{Stealth}, thick}
]
\node[etape] (spec) {Spécification};
\node[etape, below=of spec] (estim) {Estimation};
\node[decision, below=of estim] (test) {Tests\\validés ?};
\node[etape, below=of test] (interp){Interprétation};
\node[etape, right=of test] (revis) {Révision du\\modèle};
\draw[fleche] (spec) -- (estim);
\draw[fleche] (estim) -- (test);
\draw[fleche] (test) -- node[left, font=\small] {oui} (interp);
\draw[fleche] (test) -- node[above, font=\small] {non} (revis);
\draw[fleche] (revis) |- (spec);
\end{tikzpicture}Le losange demande \usetikzlibrary{shapes.geometric}. Le |- de la dernière flèche trace un coude : d’abord vertical, puis horizontal — la boucle de rétroaction se dessine ainsi sans calcul.
11.5 Une chronologie
\begin{tikzpicture}[scale=1]
\draw[->, thick] (0,0) -- (11,0);
\foreach \x/\annee in {1/2008, 3.5/2012, 6/2016, 8.5/2020, 10.5/2023} {
\draw[thick] (\x,-0.12) -- (\x,0.12);
\node[below=3pt] at (\x,0) {\small \annee};
}
\node[above=6pt, align=center, font=\small] at (1,0) {crise\\financière};
\node[above=6pt, align=center, font=\small] at (3.5,0) {crise des\\dettes};
\node[above=6pt, align=center, font=\small] at (8.5,0) {pandémie};
\draw[decorate, decoration={brace, amplitude=6pt}, blue!70]
(6,-0.9) -- (10.5,-0.9)
node[midway, below=8pt, font=\small, blue!70] {période d'étude};
\end{tikzpicture}La \foreach du chapitre 9 place les graduations. L’accolade décorative vient de decorations.pathreplacing : elle sert à marquer une période, un intervalle, un groupe de lignes dans un tableau.
11.6 Illustrer un test statistique
\begin{tikzpicture}
\begin{axis}[
domain = -4:4.5, samples = 300,
axis lines = middle,
xlabel = {}, ylabel = {},
ymin = 0, ymax = 0.46,
xtick = {0, 1.645, 2.4},
xticklabels = {$0$, $z_{\alpha}$, $z_{\text{obs}}$},
ytick = \empty,
width = 12cm, height = 6cm,
enlargelimits = false,
clip = false
]
\addplot[draw=none, fill=red!25, domain=1.645:4.5]
{1/sqrt(2*pi)*exp(-x^2/2)} \closedcycle;
\addplot[blue, very thick] {1/sqrt(2*pi)*exp(-x^2/2)};
\draw[dashed, thick] (axis cs:2.4,0) -- (axis cs:2.4,0.30);
\node[align=center, font=\small, red!70]
at (axis cs:3.0,0.13) {région de\\rejet};
\node[align=center, font=\small]
at (axis cs:-1.6,0.20) {$H_0$ n'est pas\\rejetée};
\node[anchor=west, font=\small] at (axis cs:2.55,0.32)
{statistique observée};
\end{axis}
\end{tikzpicture}La figure canonique d’un test unilatéral. clip = false autorise les annotations à déborder de la zone de tracé — sans elle, le texte placé près du bord serait coupé.
11.7 La figure « fil conducteur »
Les cours de ce site ouvrent chaque chapitre par une grille situant le chapitre courant dans l’ensemble. Voici comment elle se construit.
\begin{tikzpicture}[
case/.style = {draw=gray!50, fill=gray!8, rounded corners=2pt,
minimum width=3.1cm, minimum height=1.05cm,
align=center, font=\scriptsize, text=black!70},
active/.style = {draw=blue!70, fill=blue!20, rounded corners=2pt,
minimum width=3.1cm, minimum height=1.05cm,
align=center, font=\scriptsize\bfseries, text=black}
]
\def\courant{4}
\foreach \i/\titre [count=\n from 1] in {
1/Le risque de liquidité,
2/Liquidité et effet\\de levier,
3/Les indicateurs\\d'alerte précoce,
4/La fonction\\d'investissement,
5/Gestion de la\\liquidité,
6/La liquidité\\intrajournalière,
7/Le suivi de\\la liquidité,
8/Faillite des banques\\de marché
} {
\pgfmathsetmacro{\col}{mod(\n-1,4)}
\pgfmathsetmacro{\lig}{-int((\n-1)/4)}
\ifnum\n=\courant
\node[active] at (\col*3.4, \lig*1.35) {\titre};
\else
\node[case] at (\col*3.4, \lig*1.35) {\titre};
\fi
}
\end{tikzpicture}\foreach ... [count=\n from 1] numérote automatiquement les éléments parcourus.
\pgfmathsetmacro calcule ligne et colonne à partir du numéro : mod(\n-1,4) donne le reste modulo 4, int((\n-1)/4) le quotient entier. Quatre cases par ligne, sans rien écrire à la main.
\ifnum\n=\courant applique le style « actif » au seul chapitre en cours.
Il suffit alors de changer \def\courant{4} pour produire la figure du chapitre suivant. C’est exactement ce que fait le script figures-frm2.py qui engendre ces figures pour tous les cours du site — il écrit ce code TikZ, une fois par chapitre, et le compile.
11.8 Annoter une formule
\usetikzlibrary{tikzmark}
\begin{equation*}
\hat{\beta} =
\bigl(
\tikzmarknode{a}{X'X}
\bigr)^{-1}
\tikzmarknode{b}{X'y}
\end{equation*}
\begin{tikzpicture}[overlay, remember picture]
\draw[->, blue!70, thick] ([yshift=-4mm]a.south) -- ++(0,-6mm)
node[below, font=\small, blue!70, align=center]
{matrice de\\variances};
\draw[->, red!70, thick] ([yshift=-4mm]b.south) -- ++(0,-6mm)
node[below, font=\small, red!70, align=center]
{covariances\\avec $y$};
\end{tikzpicture}remember picture exige deux compilations
overlay, remember picture permet de dessiner par-dessus la page, en se rappelant la position d’un élément marqué ailleurs.
TikZ doit donc mémoriser ces positions à une première passe pour les employer à la seconde — comme les renvois du chapitre 6. Une compilation unique ne place rien, ou place tout de travers.
Compilez deux fois avant de conclure que la figure ne fonctionne pas.
Pour une annotation plus simple, \underbrace{...}_{...} du chapitre 3 suffit et ne demande aucune précaution.
11.9 Organiser ses figures
Sur un mémoire comportant vingt schémas, mettez chacun dans son propre fichier :
figures/
├── equilibre-marche.tex
├── is-lm.tex
└── arbre-decision.tex
Dans le document :
\begin{figure}[htbp]
\centering
\input{figures/is-lm}
\caption{Équilibre sur les marchés des biens et de la monnaie}
\label{fig:islm}
\end{figure}Trois bénéfices : chaque figure se met au point isolément, dans un petit document qui compile en une seconde ; elle se réutilise dans les diapositives Beamer du chapitre 8 sans copier-coller ; et le fichier maître reste lisible.
Combinez avec l’externalisation du chapitre 9 pour ne recompiler que ce qui change.
À vous
Dessinez le graphique d’une fonction de production concave, avec la tangente en un point marquant la productivité marginale.
\begin{tikzpicture}
\begin{axis}[
domain = 0:9, samples = 200,
axis lines = middle,
xlabel = {$K$}, ylabel = {$Y$},
xmin = 0, xmax = 10, ymin = 0, ymax = 7,
xtick = {4}, xticklabels = {$K_0$},
ytick = \empty,
width = 11cm, height = 7cm,
enlargelimits = false, clip = false
]
% fonction de production Y = 2 sqrt(K)
\addplot[blue, very thick] {2*sqrt(x)}
node[right, pos=1] {$Y = 2\sqrt{K}$};
% tangente en K = 4 : Y = 4 + 0.5(K-4)
\addplot[red, thick, dashed, domain=1:8] {4 + 0.5*(x-4)};
\fill (axis cs:4,4) circle (2.5pt);
\draw[dashed, gray] (axis cs:4,0) -- (axis cs:4,4);
\node[anchor=west, font=\small, red!80]
at (axis cs:6.4,6.0) {pente $= Y'(K_0) = \dfrac{1}{\sqrt{K_0}}$};
\end{axis}
\end{tikzpicture}Deux points de méthode : node[right, pos=1] place l’étiquette à l’extrémité de la courbe (pos=1 désigne la fin du tracé) ; et la tangente est calculée à la main — Y(4) = 4, Y'(4) = 1/2 — puis tracée comme une droite ordinaire.
Changez la fonction en {x^0.7} et recalculez les deux valeurs : la figure reste valable, ce qui montre l’intérêt d’un patron plutôt que d’un dessin.
Ce qu’il faut retenir
| Écriture | Effet |
|---|---|
(E \|- 0,0), (E -\| 0,0) |
projeter un point sur un axe |
\coordinate (E) at (x,y); |
nommer un point sans rien afficher |
child { node {...} } |
construire un arbre |
edge from parent node {...} |
étiqueter une branche |
grow=right, sibling distance |
orientation et écartement d’un arbre |
diamond (shapes.geometric) |
losange de décision |
\|- dans une flèche |
coude — boucles de rétroaction |
decorate, decoration={brace} |
accolade sur une période |
\closedcycle avant la courbe |
région critique remplie |
clip = false |
autoriser les annotations hors zone |
\foreach ... [count=\n from 1] |
numéroter en parcourant |
\pgfmathsetmacro + mod, int |
calculer ligne et colonne d’une grille |
\ifnum\n=\courant |
mettre en évidence un élément |
tikzmarknode + remember picture |
annoter une formule — deux compilations |
\input{figures/x} dans un flottant |
un fichier par figure |
La suite
Ce chapitre clôt le cours. Vous savez écrire des mathématiques, construire un document, gérer une bibliographie, organiser une thèse, présenter vos résultats et dessiner vos figures — tout cela dans un seul langage.
Trois directions pour aller plus loin :
- la documentation de TikZ, un manuel de plus de mille pages, mais dont la table des matières se parcourt très bien à la recherche d’un exemple ;
- TikZ.net et le site texample.net, qui rassemblent des centaines de figures avec leur code — la façon la plus rapide de progresser est de partir d’un exemple proche du besoin ;
- tikzDevice en R et tikzplotlib en Python, qui convertissent une figure existante en code TikZ : vous gardez l’aisance du logiciel statistique et la typographie de LaTeX.
Et le conseil qui vaut pour tout le cours : commencez par copier un patron, modifiez-le par petites touches, compilez souvent. Personne n’écrit une figure TikZ complexe d’un seul jet.