Je souhaiterais savoir quel est l'environnement LaTeX le plus commun pour
coder les 3 figures (qui sont des conglomérats de colonnes ; voir jpeg en attaché),
chacune d'entre elles
étant composée de trois colonnes mise côte à côte. Aussi j'ai
besoin, pour chacune des figures, de l'accolade chapeautant les deux premières
colonnes et labellisée "coregion", plus l'autre accolade
chapeautant la 2e et la 3e accolade et labellisée "région" (voir le jpeg). Peut-on
mettre du texte ou des maths verticalement dans ces colonnes (comme dans
le jpeg).
Un environnement qui me semble adapté et plutôt commun est tikzpicture (issu du packagetikz) qui peut donner des choses comme ceci :
Solution plus élégante (ajoutée le 14 juillet 2022)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
\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
Les fonctionnalités du packagetikz 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.
1
2
3
4
5
6
7
8
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[draw=red]% ici tous les chemins, sauf ordre contraire, seront en rouge
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.
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 :
1
2
3
4
5
6
7
8
9
10
11
\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};
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.
1
2
3
4
5
6
7
8
9
10
\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};
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 :
1
2
3
4
5
6
7
8
9
10
11
12
\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) {};
Lorsque l'on crée un nœud avec un nom, Tikz 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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
\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)};
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 ») :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
\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
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 :
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 TikZ 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 :
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 :
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 :
Un grand Merci YannD ! Je code mes diagrammes avec tikzcd, mais je ne connais pas tikzpicture. As-tu un ECM (exemple complet minimal) pour que je m'acclimate un peu avec cet environnement, avant de coder la dernière colonne comme exercice ? En effet le résultat est top, mais ça parait pas facile pour un novice...
J'ai réussi à coder la 3e série de colonnes (3e figure),cependant j'ai fais cela avec la façon naive de tikzpicture, i.e celle utilisant les coordonnées cartésiennes. C'est mon premier codage avec cet environnement ! Mais je n'ai pas réussi à coder les accolades, avec les étiquettes "région" et "corégion" ... Comment le fais t'on à partir de mon codage naif décrit plus haut, juste après le commentaire de Denis ?
@Camell J'ai ajouté une solution que je trouve plus élégante et beaucoup d'explications, avec un exemple à chaque fois, qui te permettront je l'espère d'y voir plus clair. Je t'invite à poser une nouvelle question sur ce forum du style « Quelles ressources pour apprendre TikZ ? » si tu souhaites en apprendre plus :-)
Professeurs de mathématiques dans le secondaire, connaissez-vous le package ProfCollege de Christophe Poulain ? Il est aussi utile que bien documenté !
Les formules de politesse et les signatures sont à éviter : celle(s) de votre contribution a (ont) été supprimée(s).
L'image doit-elle être vue tournée de 90° vers la gauche (en paysage) ?
Ou mettre ce code ici:
$$\begin{tikzpicture} \draw (-0.5,1)--(0.5,1); \draw (0.5,1)--(0.5,-3); \draw (-0.5,1)--(-0.5,-3); \draw (-0.5,-3)--(0.5,-3); \draw (0.5,1)--(1.5,1); \draw (0.5,-1)--(1.5,-1); \draw (1.5,1)--(1.5,-1); \draw (1.5,-1)--(2.5,-1); \draw (2.5,-1)--(2.5,2.5); \draw (2.5,2.5)--(1.5,2.5); \draw (1.5,2.5)--(1.5,1); \draw (0,-2) node[rotate=90]{$\alpha$}; \draw (1,-0.5) node[rotate=90]{$\beta$}; \draw (2,-0.5) node[rotate=90]{$\gamma$}; \end{tikzpicture}$$