Fabriquer des organigrammes

L'organigramme est une représentation schématique des liens fonctionnels, organisationnels et hiérarchiques d'un organisme, d'un programme, etc (définition de Wikipédia).

En gros une série de cellules qui sont reliées par des lignes ou des flèches. Des trucs du genre :


Sous ConTeXt, il existe un module pour réaliser des organigrammes. Ce modue développé par Hans Hagen s'appelle chart. Il utilise METAPOST pour dessiner les cadres et les flèches et TeX pour placer le texte. Il permet de faire des organigrammes relativement simples et est assez limité au niveau de la mise en forme. Si tu veux des choses plus complexe, il faudrat utiliser METAPOST/METAFUN ou PGF-TIKZ, ou bien encore des logiciels dédiés comme par exemple Dia qui existe pour Linux Windows et MacOs.

Tu charges le module chart par la commande :

\usemodule[chart]

Pour définir un organigramme tu utilises l'environement suivant :

\startFLOWchart [nom] ... les commandes ... \stopFLOWchart

Le nom est libre, tu choisis ce que tu veux.

Tu insères ton organigramme dans ton document avec :

\FLOWchart[nom]

La grille

Pour positionner les cellules d'un organigramme tu utilises une grille qui n'est pas visible dans le résultat final. Tu définis cette grille à l'aide de la commande suivante :

\setupFLOWcharts[nx=nombre, ny=nombre, dx=dimension, dy=dimension, width=dimension, height=dimension]

Où :

Il existe une autre option bien pratique lors de l'élaboration du diagramme : option=test qui permet de visualiser la grille.

Dans les versions récentes de ConTeXt, (à partir de la version présente dans la TeXlive2012) cette grille n'est plus visible, seuls les points d'ancrage des flèches le sont.

\usemodule[chart]
\setupFLOWcharts [option=test,
nx=4,
ny=3,
dx=1.5em,
dy=3em,
width=0.2\textwidth,
height=2.5cm]
\startFLOWchart[grille]
\stopFLOWchart
\starttext
\FLOWchart[grille]
\stoptext

Le code ci-dessus permet de créer et d'afficher (grace à l'option test) la grille suivante :


Le cadre rouge correspond à la cellule, définit par width et height, le cadre noir à l'entourage de la cellule, définit par dx et dy et le cadre vert à l'emprise de l'organigramme. Les chiffres sur les côtés indiquent les coordonnées des cellules, qui sont numéroté de gauche à droite pour les ordonnées et de haut en bas pour les abscisses. L'origne est donc en haut à gauche.

Créer une cellule

Tu utilises l'environnement :

\startFLOWcell
\name{un nom}
\location{x,y}
\shape{un nom}
\text{Le texte de la cellule}
\stopFLOWcell

Voici les différentes possibilités pour shape :


Voici un exemple d'organigramme :

\usemodule[chart]
\startFLOWchart[exemple]
\startFLOWcell
\name{un}
\location{1,1}
\shape{product}
\text{La première\\cellule}
\stopFLOWcell
\startFLOWcell
\name{deux}
\location{2,1}
\shape{loop}
\text{La cellule 2}
\stopFLOWcell
\startFLOWcell
\name{trois}
\location{2,2}
\shape{archive}
\text{La dernière\\cellule}
\stopFLOWcell
\stopFLOWchart
\starttext
\FLOWchart[exemple]
\stoptext


Ce code appele deux commentaires. Premièrement comme tu peux le voir je n'ai pas définit de grille. En effet ce n'est pas obligatoire, le module chart pouvant les calculer directement. Dans la pratique l'utilisation de la grille est quand même plus pratique pour voir où l'on va. La seconde remarque est que pour passer à la ligne dans une cellule il faut utiliser \\.

Les connections

Chaque cellule peut être connectée à une autre; Pour cela elle possède 4 points de connections, colorés sur l'image ci-dessous :


En bleu left (gauche), en jaune right (droite) , en vert top (en haut) et en rouge bottom (en bas).

Tu peux voir ces points si tu utilise option=test.

Dans l'exemple précédent si je veux connecter la cellule un à la cellule trois je vais utiliser la commande suivante que je vais placer dans la définition de la cellule un :

\connection[bl]{trois}

[bl] signifie que je part d'un point bottom pour aller vers un point left, en l'occurence du point b de la cellule un vers l' point l de la cellule trois.

\usemodule[chart]
\startFLOWchart[exemple]
\startFLOWcell
\name{un}
\location{1,1}
\shape{product}
\text{La première\\cellule}
\connection[bl]{trois}
\stopFLOWcell
\startFLOWcell
\name{deux}
\location{2,1}
\shape{loop}
\text{La cellule 2}
\stopFLOWcell
\startFLOWcell
\name{trois}
\location{2,2}
\shape{archive}
\text{La dernière\\cellule}
\stopFLOWcell
\stopFLOWchart
\starttext
\FLOWchart[exemple]
\stoptext


[lb] ne donne pas le même résultat.


Voici le même exemple avec la grille pour te montrer le chemin suivit par la connection :


Un exemple plus complexe :

\usemodule[chart]
\setupFLOWcharts
[option=test,
nx=3,
ny=2,
offset=1cm,
width=0.25\textwidth,
height=3cm]
\startFLOWchart[exemple]
\startFLOWcell
\name{robert}
\location{2,1}
\shape{product}
\text{Robert}
\connection[lt]{raymonde}
\connection[rt]{ginette}
\stopFLOWcell
\startFLOWcell
\name{raoul}
\location{3,1}
\shape{loop}
\text{Raoul}
\connection[tl]{raymonde}
\stopFLOWcell
\startFLOWcell
\name{raymonde}
\location{1,2}
\shape{archive}
\text{Raymonde}
\connection[br]{ginette}
\stopFLOWcell
\startFLOWcell
\name{ginette}
\location{3,2}
\shape{procedure}
\text{Ginette}
\stopFLOWcell
\stopFLOWchart
\starttext
\FLOWchart[exemple]
\stoptext


Le même avec la grille :


Remarque l'inffluence de l'option offset=1cm sur le dessin ci-dessus.

Pour les versions anciennes de ConTeXt, comme celle présente dans la TeXlive2011, les valeurs pour les connections doivent être séparées de virgules on écrit \connection[r,l] et non \connection[rl]

Autre remarque si tu fais bien attention tu remarques que les points de connection sont encadrés de plus petits. Il s'agit de points de connections secondaires, utiles pour les organigrammes complexes et que tu obtiens en ajoutant p ou n au point standard.

\usemodule[chart]
\setupFLOWcharts
[option=test,
nx=2,
ny=1,
dx=5em,
offset=1cm,
width=0.3\textwidth,
height=3cm]
\startFLOWchart[exemple]
\startFLOWcell
\name{robert}
\location{1,1}
\shape{product}
\text{Robert}
\connection[prnl]{raymonde}
\stopFLOWcell
\startFLOWcell
\name{raymonde}
\location{2,1}
\shape{archive}
\text{Raymonde}
\connection[pbnb]{robert}
\stopFLOWcell
\stopFLOWchart
\starttext
\FLOWchart[exemple]
\stoptext


Si tu préfères, à la place de p et n tu peux employer + et -.

\connection[+r-l]{raymonde} \connection[+b-b]{robert}

Ajouter du texte sur les lignes

Si tu regardes attentivement sur les organigrammes avec grille, au milieu de chaque ligne il existe un point gris. C'est à partir de ce point que tu peux positionner du texte à l'aide de la commande :

\comment[position]{texte}

où position peut prendre les valeurs :

Tu peux également utiliser des combinaison comme [tr] en haut à droite ou [lb] en bas à gauche. Évidemment [tb] renvoie une erreur car la position ne peux être à la foi en haut et en bas.

Tu places la commande \comment juste après la connection que tu veux renseigner.

\usemodule[chart]
\setupFLOWcharts
[nx=3,
ny=2,
offset=1cm,
width=0.25\textwidth,
height=3cm]
\startFLOWchart[exemple]
\startFLOWcell
\name{robert}
\location{2,1}
\shape{product}
\text{Robert}
\connection[lt]{raymonde}
\comment[b]{en bas}
\comment[t]{en haut}
\comment[l]{à gauche}
\comment[r]{à droite}
\connection[rt]{ginette}
\comment[b]{Amoureux}
\stopFLOWcell
\startFLOWcell
\name{raoul}
\location{3,1}
\shape{loop}
\text{Raoul}
\connection[tl]{raymonde}
\stopFLOWcell
\startFLOWcell
\name{raymonde}
\location{1,2}
\shape{archive}
\text{Raymonde}
\connection[br]{ginette}
\stopFLOWcell
\startFLOWcell
\name{ginette}
\location{3,2}
\shape{procedure}
\text{Ginette}
\stopFLOWcell
\stopFLOWchart
\starttext
\FLOWchart[exemple]
\stoptext


Et avec la grille


Il y a un petit problème. Si en utilisant le code ci-dessus tu veux placer du texte sur la ligne reliant Raymond à Ginette, tu n'y arriveras pas. Chart considère qu'il n'a pas la place. Pour y arriver il faut ajouter une ligne sur la grille, avec dans \setupFLOWcharts ny=3.


Tu peux parfois résoudre ce problème en utilisant une cellule sans cadre :

\startFLOWcell
\name{texte}
\location{2,2}
\shape{none}
\text{Je peux\\mettre du texte\\ici}
\stopFLOWcell


Tu peux également attacher du texte aux cellules avec la commande \label[position]{texte}, avec position = l, r, t et b. Attention les combinaisons du style [rt] ne marche pas. Un exemple avec la cellule Robert :

\startFLOWcell
\name{robert}
\location{2,1}
\label[b]{en bas}
\label[t]{en haut}
\label[l]{à gauche}
\label[r]{à droite}
\connection[rt]{ginette}
\shape{product}
\text{Robert}
\connection[lt]{raymonde}
\stopFLOWcell


Mise en forme

Elle est très limitée.

Les lignes

La mise en forme des lignes qui relient les cellules (n'a aucune influence sur le cadre des cellules) se fait avec :

\setupFLOWlines[option1=truc1, option2=truc2,...]

Toutes les lignes de l'organigramme seront affectées. Il n'est pas possible de modifier une seule liason.

Les diverses options sont :

Les cellules

La mise en forme des cellules se fait avec :

\setupFLOWshapes[option1=truc1, option2=truc2,...]

Toutes les cellules de l'organigramme seront affectées. Il n'est pas possible de modifier une seule cellule.

Les diverses options sont :

Mettre une cellule en évidence

Tu peux facilement mettre une cellule et une seule en évidence de la façon suivante en utilisant l'option focus = nom de la cellule de \setupFLOWcharts. La façon dont est mise en évidence la cellule est réglée par \setupFLOWfocus qui prend les mêmes options que \setupFLOWshapes :

\usemodule[chart]
\setupFLOWfocus[framecolor=red]
\setupFLOWcharts[focus=robert,
nx=3,
ny=2,
offset=1cm,
width=0.25\textwidth,
height=3cm]
\startFLOWchart[exemple]
\startFLOWcell
\name{robert}
\location{2,1}
\shape{36}
\text{Robert}
\connection[lt]{raymonde}
\comment[b]{en bas}
\comment[t]{en haut}
\comment[l]{à gauche}
\comment[r]{à droite}
\connection[rt]{ginette}
\comment[b]{Amoureux}
\stopFLOWcell
\startFLOWcell
\name{raoul}
\location{3,1}
\shape{26}
\text{Raoul}
\connection[tl]{raymonde}
\stopFLOWcell
\startFLOWcell
\name{raymonde}
\location{1,2}
\shape{archive}
\text{Raymonde}
\connection[br]{ginette}
\stopFLOWcell
\startFLOWcell
\name{ginette}
\location{3,2}
\shape{procedure}
\text{Ginette}
\stopFLOWcell
\stopFLOWchart
\starttext
\FLOWchart[exemple]
\stoptext