Voici une méthode pour construire ce diagramme en TikZ.
Tout d'abord, pour positionner les nœuds les uns par rapport aux autres sans préciser leur coordonnées, j'ai besoin de la bibliothèque TikZ `positioning`. Pour dessiner les flèches par derrière les nœuds, j'ai besoin de la bibliothèque TikZ `background`.
\usetikzlibrary{positioning,backgrounds}
Ensuite, au début de ma `tikzpicture`, je définis un certain nombre de styles que j'utilise pour caractériser chaque type d'objets. L'idéal serait de les nommer selon leur sémantique (plutôt que selon leur apparence). De plus, j'essaie de factoriser le plus de choses possibles : par exemple, je définis le style `boite` que je réutilise pour définir `boite coins ronds` et `boite circulaire`. J'en profite aussi pour fixer la distance par défaut entre les nœuds via `node distance` en utilisant une distance dite de Manhattan : `5mm` verticalement et `0mm` horizontalement.
\tikzset{
node distance=5mm and 0mm,
boite/.style={
fill=blue!50!cyan!70,draw,align=center,
font=\footnotesize\bfseries,text=white,
},
boite coins ronds/.style={boite,rounded corners=3pt},
boite circulaire/.style={boite,circle},
fleche/.style={line cap=round,-latex,draw=blue!50!cyan!30,line width=0.25mm},
grosse fleche/.style={fleche,line width=1mm},
}
Maintenant, je peux positionner les nœuds facilement en indiquant à chacun son type. Le premier nœud n'est pas positionné. Tous les autres sont positionnés relativement à l'un de ses prédécesseurs (via `below left`, `below right`, ou `below`). Pour choisir la position du nœud `un`, la distance par défaut ne convient pas : je précise donc une distance explicite via `below=1cm of a`.
\node[boite coins ronds] (a) {a\\Texte vraiment très long};
\node[boite coins ronds,below left=of a] (b) {b\\Texte vraiment\\très long};
\node[boite coins ronds,below right=of a] (c) {c\\Texte vraiment\\très long};
\node[boite circulaire,below=1cm of a] (un){1\\Texte vraiment\\très long};
\node[boite coins ronds,below=of un] (deux) {2\\Texte vraiment très long};
\node[boite coins ronds,below=of deux] (trois){3\\Texte vraiment\\très long};
À la fin, je crée un `scope` avec l'option `on background layer` pour que tout ce qu'il contient soit dessiné _derrière_ ce qui précède et j'y dessine toutes les flèches.
\begin{scope}[on background layer]
\draw[fleche,shorten >=2mm] (b.north) -- (a.west)
node[midway,left=4mm]{bla bla bla};
\draw[fleche,shorten >=2mm] (c.north) -- (a.east)
node[midway,right=4mm]{bla bla bla};
\only<2>{
\draw[grosse fleche] (un) -- (deux);
\draw[grosse fleche] (deux) -- (trois);
\draw[grosse fleche] (a) -- (un);
\draw[grosse fleche] (b.south) -- (un);
\draw[grosse fleche] (c.south) -- (un);
}
\end{scope}
Voici le résultat puis le code complet :
![alt text][1]
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{tikz}
\usetikzlibrary{positioning,backgrounds}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\tikzset{
node distance=5mm and 0mm,
boite/.style={
fill=blue!50!cyan!70,draw,align=center,
font=\footnotesize\bfseries,text=white,
},
boite coins ronds/.style={boite,rounded corners=3pt},
boite circulaire/.style={boite,circle},
fleche/.style={
line cap=round,-latex,line width=0.25mm
width=0.25mm,
draw=blue!50!cyan!30,
},
grosse fleche/.style={fleche,line width=1mm},
}
\node[boite coins ronds] (a) {a\\Texte vraiment très long};
\node[boite coins ronds,below left=of a] (b) {b\\Texte vraiment\\très long};
\node[boite coins ronds,below right=of a] (c) {c\\Texte vraiment\\très long};
\node[boite circulaire,below=1cm of a] (un){1\\Texte vraiment\\très long};
\node[boite coins ronds,below=of un] (deux) {2\\Texte vraiment très long};
\node[boite coins ronds,below=of deux] (trois){3\\Texte vraiment\\très long};
\begin{scope}[on background layer]
\draw[fleche,shorten >=2mm]
(b.north) -- (a.west) node[midway,left=4mm]{bla bla bla};
\draw[fleche,shorten >=2mm]
(c.north) -- (a.east) node[midway,right=4mm]{bla bla bla};
\only<2>{
\draw[grosse fleche] (un) -- (deux);
\draw[grosse fleche] (deux) -- (trois);
\draw[grosse fleche] (a) -- (un);
\draw[grosse fleche] (b.south) -- (un);
\draw[grosse fleche] (c.south) -- (un);
}
\end{scope}
\end{tikzpicture}
\end{frame}
\end{document}
[1]: http://texnique.fr:80/osqa/upfiles/beamer-diagram.gif