# Solution
Un environnement qui me semble adapté et plutôt commun est `tikzpicture` (issu du *package* `tikz`) qui peut donner des choses comme ceci :
## Solution plus élégante (ajoutée le 14 juillet 2022)
    \documentclass{article}
    \usepackage{tikz}
    \usetikzlibrary{positioning}% pour le positionnement relatif
    \usetikzlibrary{decorations.pathreplacing}% pour les accolades
    % épaisseur des traits des cases
    \newlength{\colLineWidth}
    \setlength{\colLineWidth}{0.4pt}
    % largeur des cases
    \newlength{\colWidth}
    \setlength{\colWidth}{1cm}
    % longueur entre l'accolade et ce qu'elle embrasse
    \newlength{\accoSep}
    \setlength{\accoSep}{1.5mm}
    % longueur à enlever aux accolades de chaque côté
    \newlength{\accoRetrecie}
    \setlength{\accoRetrecie}{0.5mm}
    \addtolength{\accoRetrecie}{\colLineWidth}% pour que la longueur ci-dessus soit celle entre l'accolade et l'extérieur du trait de la case (augmenter \colLineWidth et commenter la ligne pour voir l'effet)
    % amplitude de l'accolade
    \newlength{\accoAmp}
    \setlength{\accoAmp}{2mm}
    % longueur entre l'accolade et son label
    \newlength{\accoLabelSep}
    \setlength{\accoLabelSep}{1mm}
    \addtolength{\accoLabelSep}{\accoAmp}% pour que la longueur ci-dessus soit celle entre la pointe (et non les extrémités) de l'accolade et le label
    % dessine une accolade au-dessus de deux points avec un label
    %   #1 : point à gauche
    %   #2 : point à droite
    %   #3 : texte au dessus de l'accolade
    \newcommand{\accoladeDessus}[3]{%
        \draw [decorate,decoration={brace,amplitude=\accoAmp}] ([shift={(\accoRetrecie,\accoSep)}]#1) -- ([shift={(-\accoRetrecie,\accoSep)}]#2) node [midway,above=\accoLabelSep] {#3};
    }
    % dessine une accolade en dessous de deux points avec un label
    %   #1 : point à gauche
    %   #2 : point à droite
    %   #3 : texte en dessous de l'accolade
    \newcommand{\accoladeDessous}[3]{%
        \draw [decorate,decoration={brace,mirror,amplitude=\accoAmp}] ([shift={(\accoRetrecie,-\accoSep)}]#1) -- ([shift={(-\accoRetrecie,-\accoSep)}]#2) node [midway,below=\accoLabelSep] {#3};
    }
    % dessine une colonne
    %   #1 : nom de la colonne
    %   #2 : hauteur de la colonne
    %   #3 : options (pour positionner la colonne)
    \newcommand{\creerColonne}[3]{%
        \node (#1) [draw,line width=\colLineWidth,text width=\colWidth,text height=#2,#3] {};
    }
    \begin{document}
    \begin{tikzpicture}[
        inner sep=0mm,
        node distance=0mm,
        titre/.style={font=\bfseries},
    ]
        %%%%
        %% INDUCTION 1
        %%%%
        % colonnes
        \creerColonne{col1}{4cm}{}
        \creerColonne{col2}{5.5cm}{right=-\colLineWidth of col1.north east,anchor=north west}
        \creerColonne{col3}{7cm}{right=-\colLineWidth of col2.south east,anchor=south west}
        % contenu des colonnes
        \begin{scope}[every node/.style={rotate=90}]
            \node at (col1) {texte};
            \node at (col2) {$a^2 + b^2 = c^2$};
            \node at (col3) {texte};
        \end{scope}
        % accolades
        \accoladeDessus{col1.north west}{col2.north east}{corégion}
        \accoladeDessous{col2.south west}{col3.south east}{région}
        % titre
        \node [titre,yshift=2.5cm] at (col2.north) {Induction 1};
        %%%%
        %% INDUCTION 2
        %%%%
        \begin{scope}[xshift=5cm]
            % colonnes
            \creerColonne{col1}{4cm}{};
            \creerColonne{col2}{2.5cm}{right=-\colLineWidth of col1.north east,anchor=north west}
            \creerColonne{col3}{1.5cm}{right=-\colLineWidth of col2.south east,anchor=south west}
            % contenus des colonnes
            \node at (col3.center) {(3)};
            \node at ([xshift=-\colWidth]col3.center) {(2)};
            \node at ([xshift=-2\colWidth]col3.center) {(1)};
            % accolades
            \accoladeDessus{col1.north west}{col2.north east}{corégion}
            \accoladeDessous{col2.south west}{col3.south east}{région}
            % titre
            \node [titre,yshift=2.5cm] at (col2.north) {Induction 2};
        \end{scope}
    \end{tikzpicture}
    \end{document}
## Solution initiale
    \documentclass{article}
    \usepackage{tikz}
    \usetikzlibrary{positioning}% pour le positionnement relatif
    \usetikzlibrary{decorations.pathreplacing}% pour les accolades
    \newlength{\caseStrokeWidth}
    \setlength{\caseStrokeWidth}{.4pt}
    \begin{document}
    \begin{tikzpicture}[inner sep=0mm,node distance=0mm,case/.style={draw=black,line width=\caseStrokeWidth},accolade/.style={decorate,decoration={brace,amplitude=2mm}},titre/.style={font=\bfseries}]
        \node (case1) [case,rotate=90,text width=4cm,minimum size=1cm,align=center] {texte};
        \node (case2) [case,rotate=90,right=-\caseStrokeWidth of case1.south east,anchor=north east,text width=5.5cm,minimum size=1cm,align=center] {$a^2 + b^2 = c^2$};
        \node (case3) [case,rotate=90,right=-\caseStrokeWidth of case2.south west,anchor=north west,text width=7cm,minimum size=1cm,align=center] {texte};
        \draw [accolade] ([shift={(\caseStrokeWidth,2\caseStrokeWidth)}]case1.north east) -- ([shift={(-\caseStrokeWidth,2\caseStrokeWidth)}]case2.south east) node [midway,yshift=4mm] {corégion};
        \draw [accolade] ([shift={(-\caseStrokeWidth,-2\caseStrokeWidth)}]case3.south west) -- ([shift={(\caseStrokeWidth,-2\caseStrokeWidth)}]case2.north west) node [midway,yshift=-4mm] {région};
        \draw (case2.east) node [titre,yshift=2.5cm] {Induction 1};
        \begin{scope}[shift={(5,0)}]
            \node (case1) [case,text width=1cm,text height=4cm,align=center] {};
            \node (case2) [case,right=-\caseStrokeWidth of case1.north east,anchor=north west,text width=1cm,text height=2.5cm,align=center] {};
            \node (case3) [case,right=-\caseStrokeWidth of case2.south east,anchor=south west,text width=1cm,text height=1.5cm] {};
            \node at (case3.center) {(3)};
            \node at ([xshift=-1cm]case3.center) {(2)};
            \node at ([xshift=-2cm]case3.center) {(1)};
            \draw [accolade] ([shift={(\caseStrokeWidth,2\caseStrokeWidth)}]case1.north west) -- ([shift={(-\caseStrokeWidth,2\caseStrokeWidth)}]case2.north east) node [midway,yshift=4mm] {corégion};
            \draw [accolade] ([shift={(-\caseStrokeWidth,-2\caseStrokeWidth)}]case3.south east) -- ([shift={(\caseStrokeWidth,-2\caseStrokeWidth)}]case2.south west) node [midway,yshift=-4mm] {région};
            \draw (case2.north) node [titre,yshift=2.5cm] {Induction 2};
        \end{scope}
    \end{tikzpicture}
    \end{document}
Il y a sûrement des manières plus élégantes pour le faire mais cela remplit le contrat.
La troisième figure est laissée en exercice :wink:😉.
# Explications
## `\usetikizlibrary`
Les fonctionnalités du *package* `tikz` peuvent être étendues avec des librairies qui se chargent à l'aide de la commande `\usetikzlibrary` dans le préambule. Par exemple `\usetikzlibrary{decorations.pathreplacing}` permet entre autres de faire un trait en forme d'accolade. Au final `\usetikzlibrary` similaire à `\usepackage`.
## Options globales
L'environnement `tikzpicture` admet un argument optionnel sous forme d'une liste de clés-valeurs, ce qui permet d'éviter d'écrire une option plusieurs fois à l'intérieur de l'environnement.
    \documentclass{article}
    \usepackage{tikz}
    \begin{document}
    \begin{tikzpicture}[draw=red]% ici tous les chemins, sauf ordre contraire, seront en rouge
    \draw (0,0) circle (2cm);
    \end{tikzpicture}
    \end{document}
## `inner sep`
C'est la longueur entre la boîte et le contenu d'un nœud :
    \documentclass{article}
    \usepackage{tikz}
    \begin{document}
    \begin{tikzpicture}
    \node [draw] at (0,0) {A};
    \node [draw,inner sep=1cm] at (2,0) {B};
    \end{tikzpicture}
    \end{document}
## `truc/.style`
Lorsque l'on a plusieurs objets qui auront les mêmes options on peut créer une « super option », localement en argument optionnel de l'environnement `tikzpicture`, ou globalement en argument de la commande `\tikzset`.
### Localement
    \documentclass{article}
    \usepackage{tikz}
    \begin{document}
    \begin{tikzpicture}[patate/.style={draw=orange,fill=yellow}]
    \draw [patate] (0,0) circle (2cm);
    \end{tikzpicture}
    \end{document}
### Globalement
    \documentclass{article}
    \usepackage{tikz}
    \tikzset{patate/.style={draw=orange,fill=yellow}}
    \begin{document}
    \begin{tikzpicture}
    \draw [patate] (0,0) circle (2cm);
    \end{tikzpicture}
    \end{document}
## `text width` et `align`
Ces options de nœuds sont le plus souvent utilisées pour des paragraphes, `text width` est la longueur de la boîte contenant le texte et `align` l'alignement du texte :
    \documentclass{article}
    \usepackage{tikz}
    \begin{document}
    \begin{tikzpicture}
    \node [draw,text width=2cm] at (0,0) {Petit paragraphe bla bla bla bla};
    \node [draw,text width=4cm,align=center] at (0,-2) {Petit paragraphe bla bla bla bla};
    \node [draw,text width=5cm] at (0,-4) {Mot};
    \node [draw,text width=5cm,align=center] at (0,-6) {Mot};
    \end{tikzpicture}
    \end{document}
## `minimum size`
Cette option permet de définir une largeur et une hauteur minimum pour la boîte d'un nœud, je l'ai utilisée pour avoir un largeur de colonne (mais qui correspond à la hauteur de la boîte en elle-même car on la tourne de 90°) d'un centimètre dans l'induction 1.
    \documentclass{article}
    \usepackage{tikz}
    \begin{document}
    \begin{tikzpicture}
    \node [draw,minimum size=2cm] at (0,0) {A};
    \node [draw,minimum size=0cm] at (0,-2) {B};
    \node [draw,text width=5cm,align=center,minimum size=2cm] at (0,-4) {Mot};
    \end{tikzpicture}
    \end{document}
## `text height`
L'option `text height` permet de modifier la hauteur de la boîte d'un nœud, cela change seulement la hauteur de la boîte et pas la profondeur (qui est gérée par `text depth`).
Pour ne pas trop m'embêter à placer le contenu des colonnes, j'ai d'abord dessiner des nœuds vides, puis j'ai placé du texte dedans :
    \documentclass{article}
    \usepackage{tikz}
    \begin{document}
    \begin{tikzpicture}[every node/.style={draw}]
    \node at (0,0) {A};
    \node [text height=2cm] at (1,0) {B};
    \node [text depth=2cm] at (2,0) {C};
    \node [text height=2cm,minimum size=8mm] (D) at (3,0) {};
    \node [draw=none] at (D) {D};
    \end{tikzpicture}
    \end{document}
## Points cardinaux et positionnement simples
Lorsque l'on crée un nœud avec un nom, Ti*k*z crée plusieurs coordonnées avec des points cardinaux qui correspondent aux extrémités de la boîte du nœud.
Par défaut un nœud est centré sur le point qu'on lui donne (c'est le `at (x,y)`) mais on peut changer cela en utilisant `left`, `right`, `above`, `below` (et des combinaisons de ceux-ci) ou l'option `anchor` à qui l'on donnera comme valeur `east`, `west`, `south`, `north` (ou des combinaisons de celles-ci). Par exemple `left` signifie : « place mon nœud à gauche du point », et `anchor=east` signifie : « le pôle Est du nœud doit correspondre au point », ces deux instructions sont équivalentes.
    \documentclass{article}
    \usepackage{tikz}
    \begin{document}
    \begin{tikzpicture}[every node/.style={draw}]% permet de passer draw en option de tous les node
    \node [draw,minimum size=4cm,lightgray] (A) at (0,0) {bla bla bla bla bla bla};
    \fill [red] (A.center) circle (1pt) node [above] {(A.center)};
    \fill [red] (A.north) circle (1pt) node [above] {(A.north)};
    \fill [red] (A.south) circle (1pt) node [below] {(A.south)};
    \fill [red] (A.west) circle (1pt) node [left] {(A.west)};
    \fill [red] (A.east) circle (1pt) node [right] {(A.east)};
    \fill [red] (A.north west) circle (1pt) node [above left] {(A.north west)};
    \fill [red] (A.north east) circle (1pt) node [above right] {(A.north east)};
    \fill [red] (A.south west) circle (1pt) node [below left] {(A.south west)};
    \fill [red] (A.south east) circle (1pt) node [below right] {(A.south east)};
    \node [draw,circle,minimum size=4cm,lightgray] (B) at (0,-7) {bla bla bla bla bla bla};
    \fill [red] (B.center) circle (1pt) node [anchor=south] {(B.center)};
    \fill [red] (B.north) circle (1pt) node [anchor=south] {(B.north)};
    \fill [red] (B.south) circle (1pt) node [anchor=north] {(B.south)};
    \fill [red] (B.west) circle (1pt) node [anchor=east] {(B.west)};
    \fill [red] (B.east) circle (1pt) node [anchor=west] {(B.east)};
    \fill [red] (B.north west) circle (1pt) node [anchor=south east] {(B.north west)};
    \fill [red] (B.north east) circle (1pt) node [anchor=south west] {(B.north east)};
    \fill [red] (B.south west) circle (1pt) node [anchor=north east] {(B.south west)};
    \fill [red] (B.south east) circle (1pt) node [anchor=north west] {(B.south east)};
    \end{tikzpicture}
    \end{document}
## Positionnement relatif et `node distance`
Si l'on positionne relativement les nœuds, on n'utilisera (presque) pas les coordonnées absolues. On peut alors omettre les coordonnées du premier qui seront automatiquement `(0,0)`.
On peut positionner un nœud relativement à un autre en utilisant `left of`, `above of`...
L'option `node distance` est la distance entre le centre du premier nœud et le point d'ancrage du deuxième (le point « `anchor` ») :
    \documentclass{article}
    \usepackage{tikz}
    \begin{document}
    \begin{tikzpicture}[every node/.style={draw}]
    \node (A) {A};
    \draw [orange] (0,0) circle (1cm);
    \draw [red] (0,-1.5) arc (-90:-130:1.5);
    \draw [red] (0,-1.5) arc (-90:-50:1.5);
    \node [left of=A] {left of};% par défaut anchor=center
    \node [right of=A,right] {right of};
    % les deux lignes ci-dessous montre qu'il faut mettre `position of` avant `postion` ou `anchor=`
    \node [above left,above left of=A] {above left of};% la position n'est pas prise en compte
    \node [above right of=A,anchor=south west] {above right of};% la position est prise en compte
    \node [below of=A,anchor=north,node distance=1.5cm] {below of};
    % etc.
    \node (B) at (5,0) {B};
    \node [below of=B,below,node distance=0cm] {below of};
    \end{tikzpicture}
    \end{document}
Malheureusement on ne peut pas mettre `below of=B.south`, on a alors deux options.
La première se déduit des explications précédentes :
    \documentclass{article}
    \usepackage{tikz}
    \begin{document}
    \begin{tikzpicture}[every node/.style={draw}]
    \node (B) at (5,0) {B};
    \node [below,node distance=0cm] at (B.south) {C};
    \end{tikzpicture}
    \end{document}
La deuxième est plus facile à comprendre lorsque l'on lit le code mais requiert la librairie `positioning` :
    \documentclass{article}
    \usepackage{tikz}
    \usetikzlibrary{positioning}
    \begin{document}
    \begin{tikzpicture}[every node/.style={draw}]
    \node (B) at (5,0) {B};
    \node [below=0cm of B.south] {C};
    \end{tikzpicture}
    \end{document}
## Chevauchement des boîtes des nœuds et `line width`
On remarque en agrandissant les deux derniers exemples que les bords des boîtes de `B` et `C` ne sont pas confondues.
Pour y remédier il suffit de connaître la largeur du trait et de mettre son opposé à la place de `0cm` dans `\node [below=0cm of B.south] {C};`.
L'option `line width` permet de gérer l'épaisseur des traits :
    \documentclass{article}
    \usepackage{tikz}
    \begin{document}
    \begin{tikzpicture}
    \draw (0,0) -- (2,0);
    \draw [line width=2mm] (0,-1) -- (2,-1);
    \node [draw] at (4,0) {A};
    \node [draw,line width=1mm] at (4,-1) {B};
    \end{tikzpicture}
    \end{document}
Ainsi le tour est joué et on peut même utiliser une longeur que l'on pourra faire varier :
    \documentclass{article}
    \usepackage{tikz}
    \usetikzlibrary{positioning}
    \newlength{\malongueur}
    \setlength{\malongueur}{1mm}
    \begin{document}
    \begin{tikzpicture}[case/.style={draw,line width=\malongueur}]
    \node [case] (B) at (5,0) {B};
    \node [case,below=-\malongueur of B.south] {C};
    \end{tikzpicture}
    \end{document}
## `shift` et option `midway`
Les options `xshift`, `yshift` et `shift` permettent de faire des translations.
Les deux premières prennent une longueur en paramètre et la dernière des coordonnées, par exemple `shift={(2,3)}`.
Les accolades sont importantes car si elles n'y sont pas Ti*k*Z va croire que ce sont deux paires de clés-valeurs : `shift=(2` et `3)`, ce qu'on ne veut pas.
On peut placer ces options de façon « classique » ou directement après la parenthèse ouvrante de coordonnées.
Cette dernière méthode est nécessaire pour les coordonnées comme `(A)` ou `(A.east)`.
L'option de nœud `midway` permet de placer un nœud au milieu d'un trait :
    \documentclass{article}
    \usepackage{tikz}
    \begin{document}
    \begin{tikzpicture}
    \draw (0,0) node [above] {(0,0)} -- (3,0) node [above] {(2,0)};
    \draw [yshift=2cm] (0,0) -- (3,0) node [above,midway] {\verb|yshift=2cm|};
    \draw [shift={(0,-2)}] (0,0) -- (3,0) node [below,midway] {\verb|shift={(0,-2)}|};
    \node [draw,minimum size=2cm] (A) at (6,0) {A};
    \fill [red,xshift=1cm] (A.east) circle (2pt);% loupé
    \fill [teal] ([xshift=1cm]A.east) circle (2pt);% réussi
    \fill ([shift={(1,1)}]A.north east) circle (2pt);
    \end{tikzpicture}
    \end{document}
## Accolade
Pour dessiner un trait en forme d'accolade on a besoin de la librairie `decorations.pathreplacing`.
On peut gérer sa largeur (pas celle du trait) avec l'option `amplitude` et son « sens » avec l'option `mirror` ou en échangeant les coordonnées :
    \documentclass{article}
    \usepackage{tikz}
    \usetikzlibrary{decorations.pathreplacing}
    \begin{document}
    \begin{tikzpicture}
    \draw [decorate,decoration={brace}] (0,0) -- (3,0);
    \draw [yshift=-2cm,decorate,decoration={brace,amplitude=1cm}] (0,0) -- (3,0);
    \draw [yshift=-4cm,decorate,decoration={brace,amplitude=2mm,mirror}] (0,0) -- (3,0);
    \draw [yshift=-6cm,decorate,decoration={brace,amplitude=2mm}] (3,0) -- (0,0);
    \end{tikzpicture}
    \end{document}
## Environnement `scope`
Il permet de passer une option à tout ce qui est à l'intérieur.
C'est utile pour éviter la répétition de code et lorsque les `trucs/.style` sont moins adaptés :
    \documentclass{article}
    \usepackage{tikz}
    \begin{document}
    \begin{tikzpicture}
    \draw (0,0) -- (0,3) -- (3,3) -- (3,0) -- cycle;
    \begin{scope}[line width=1mm,red,xshift=5cm]
        \draw (0,0) -- (0,3) -- (3,3) -- (3,0) -- cycle;
        \fill (0,0) circle (1cm);
    \end{scope}
    \end{tikzpicture}
    \end{document}