Ajouter graphviz dans les documents restructuredText

2014-05-05:Je met l’article à jour avec la dernière version du script que j’utilise. J’en profite pour donner un peu plus d’exemples.
Graphe

C’est en utilisant un produit tous les jours que nous vient l’envie de l’améliorer. Dernièrement, j’ai eu besoin de générer un texte contenant des graphes. Il y a quelques temps, j’aurais préparé mes graphes dans des images à part, et inclus les images dans mon document, sauf que cette fois, j’ai décidé d’inclure directement le code du graphe dans mon document.

Graphviz est une merveilleuse librairie pour générer des représentations de graphes comme celle qui se trouve à côté. À partir d’un fichier texte contenant la description du graphe, l’application nous génère une image (avec différents formats possibles) du graphe. Par exemple, l’image ci contre peut-être représentée avec le code suivant:

digraph G {

    a -> a
    a -> b
    d -> b
    b -> c
    c -> b
}

Je ne rentre pas davantage dans la description de gv, l’application est très complète, et un article ne suffirait pas à tout couvrir!

La question qui se pose est donc de pouvoir inclure directement graphviz lors de la génération du document. Pour ça, j’ai créé une nouvelle directive, graphviz qui appele directement dot lors de la génération du document.

Exemple Code Résultat
Insérer un graphe orienté
.. graphviz:: digraph

    a -> a
    a -> b
    d -> b
    b -> c
    c -> b

    ..
    ceci est une légende
graphe orienté avec légende

ceci est une légende

Insérer un graphe non-orienté
.. graphviz:: graph

    a -- a
    a -- b
    d -- b
    b -- c
    c -- b
graphe non orienté
Utiliser des options
.. graphviz:: digraph

    rankdir = LR;

    a -> a
    a -> b
    d -> b
    b -> c
    c -> b
graphe horizontal

Pour ceux que ça intéresse, voici le script pour rst2html et rst2latex. Le code est similaire, cela ajoute une nouvelle directive qui génère le document à l’aide de graphviz, et stocke l’image dans un fichier temporaire, créé dans un répertoire tmp (qui doit exister avant de lancer la commande). On pourrait très facilement l’ajouter à rst2odt en suivant le même principe.

Le script rst2latex génère les images en pdf, il est prévu pour être utilisé avec pdflatex.

C’est tout, le langage est tellement simple que ça serait dommage de ne pas en profiter!