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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
.. -*- mode: rst -*-
.. -*- coding: utf-8 -*-
Ajouter graphviz dans les documents restructuredText
####################################################
:date: 2013-10-12
:tags: Libre, reStructuredText
:logo: static/images/graphe.png
:summary: |summary|
.. image:: |filename|/images/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:: C
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
.. code-block:: rst
Voici une image :
.. graphviz::
digraph G {
a -> a
a -> b
d -> b
b -> c
c -> b
}
deviendra :
Voici une image :
.. image:: |filename|/images/graphe.png
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.
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
|