summaryrefslogtreecommitdiff
path: root/content/Informatique/2013-10-12-rst_graphviz.rst
diff options
context:
space:
mode:
Diffstat (limited to 'content/Informatique/2013-10-12-rst_graphviz.rst')
-rw-r--r--content/Informatique/2013-10-12-rst_graphviz.rst136
1 files changed, 136 insertions, 0 deletions
diff --git a/content/Informatique/2013-10-12-rst_graphviz.rst b/content/Informatique/2013-10-12-rst_graphviz.rst
new file mode 100644
index 0000000..82b9c7b
--- /dev/null
+++ b/content/Informatique/2013-10-12-rst_graphviz.rst
@@ -0,0 +1,136 @@
+.. -*- mode: rst -*-
+.. -*- coding: utf-8 -*-
+
+Ajouter graphviz dans les documents restructuredText
+####################################################
+
+:date: 2013-10-12
+:tags: Libre, reStructuredText
+:logo: /images/graphviz/graphe.png
+:summary: |summary|
+
+.. default-role:: literal
+
+: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.
+
+.. image:: {filename}/images/graphviz/graphe.png
+ :class: floatleft
+ :scale: 50
+ :alt: Graphe
+
+|summary|
+
+.. |summary| replace::
+ 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 :
+
+.. code-block:: dot
+
+ digraph G {
+
+ a -> a
+ a -> b
+ d -> b
+ b -> c
+ c -> b
+ }
+
+.. _Graphviz: http://graphviz.org/
+
+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.
+
+.. _directive: http://docutils.sourceforge.net/docs/ref/rst/directives.html
+
+.. list-table::
+ :header-rows: 1
+ :stub-columns: 1
+ :widths: 10 45 45
+
+ * - Exemple
+ - Code
+ - Résultat
+ * - Insérer un graphe orienté
+ -
+ .. code-block:: rst
+
+ .. graphviz:: digraph
+
+ a -> a
+ a -> b
+ d -> b
+ b -> c
+ c -> b
+
+ ..
+ ceci est une légende
+ -
+
+ .. figure:: {filename}/images/graphviz/graphe.png
+ :alt: graphe orienté avec légende
+
+ ceci est une légende
+
+ * - Insérer un graphe non-orienté
+ -
+ .. code-block:: rst
+
+ .. graphviz:: graph
+
+ a -- a
+ a -- b
+ d -- b
+ b -- c
+ c -- b
+ -
+
+ .. figure:: {filename}/images/graphviz/no.png
+ :alt: graphe non orienté
+
+ * - Utiliser des options
+ -
+ .. code-block:: rst
+
+ .. graphviz:: digraph
+
+ rankdir = LR;
+
+ a -> a
+ a -> b
+ d -> b
+ b -> c
+ c -> b
+ -
+
+ .. figure:: {filename}/images/graphviz/options.png
+ :alt: 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 !
+
+.. _rst2html: {filename}/resources/rst_graphviz/rst2html.py
+.. _rst2latex: {filename}/resources/rst_graphviz/rst2latex.py