Embedding Graphs Into Your Sphinx Documents

Embed GraphViz ‘dot language’ graphs into your documentation, and hot-link the nodes to any HTTP resource.

The sphinx.ext.graphviz extension allows you to directly embed GraphViz ‘dot language’ graphs into your document files. They are then rendered to PNG or SVG images, which get added to your generated HTML documentation. Using SVG allows you to hot-link your nodes to any HTTP resource.

Before use, you have to activate the extension with just a few changes to your docs/conf.py

<span>extensions</span> <span>=</span> <span>[</span>
<span># … </span> <span>'sphinx.ext.graphviz'</span><span>,</span>
<span>]</span>
<span># … </span>
<span># -- GraphViz configuration ---------------------------------- </span><span>graphviz_output_format</span> <span>=</span> <span>'svg'</span>
<span>extensions</span> <span>=</span> <span>[</span>
    <span># … </span>    <span>'sphinx.ext.graphviz'</span><span>,</span>
<span>]</span>

<span># … </span>
<span># -- GraphViz configuration ---------------------------------- </span><span>graphviz_output_format</span> <span>=</span> <span>'svg'</span>
extensions = [ # … 'sphinx.ext.graphviz', ] # … # -- GraphViz configuration ---------------------------------- graphviz_output_format = 'svg'

This is an example for what you can then add to your documentation:

As long as the nodes have a href attribute, the SVG rendering contains them and thus node labels become clickable hyperlinks.

And here’s the related markup that needs to be added to one of your .rst files:

<span>..</span><span> </span><span>graphviz::</span><span> </span><span>:name:</span><span> </span><span>sphinx.ext.graphviz</span><span> </span><span>:caption:</span><span> </span><span>Sphinx</span><span> </span><span>and</span><span> </span><span>GraphViz</span><span> </span><span>Data</span><span> </span><span>Flow</span><span> </span><span>:alt:</span><span> </span><span>How</span><span> </span><span>Sphinx</span><span> </span><span>and</span><span> </span><span>GraphViz</span><span> </span><span>Render</span><span> </span><span>the</span><span> </span><span>Final</span><span> </span><span>Document</span><span> </span><span>:align:</span><span> </span><span>center</span><span> </span><span>digraph</span><span> </span><span>"sphinx-ext-graphviz"</span><span> </span><span>{</span><span> </span><span>size=</span><span>"6,4"</span><span>;</span><span> </span><span>rankdir=</span><span>"LR"</span><span>;</span><span> </span><span>graph</span><span> </span><span>[</span><span>fontname=</span><span>"Verdana"</span><span>,</span><span> </span><span>fontsize=</span><span>"12"</span><span>]</span><span>;</span><span> </span><span>node</span><span> </span><span>[</span><span>fontname=</span><span>"Verdana"</span><span>,</span><span> </span><span>fontsize=</span><span>"12"</span><span>]</span><span>;</span><span> </span><span>edge</span><span> </span><span>[</span><span>fontname=</span><span>"Sans"</span><span>,</span><span> </span><span>fontsize=</span><span>"9"</span><span>]</span><span>;</span><span> </span><span>sphinx</span><span> </span><span>[</span><span>label=</span><span>"Sphinx"</span><span>,</span><span> </span><span>shape=</span><span>"component"</span><span>,</span><span> </span><span>href=</span><span>"https://www.sphinx-doc.org/"</span><span>,</span><span> </span><span>target=</span><span>"_blank"</span><span>]</span><span>;</span><span> </span><span>dot</span><span> </span><span>[</span><span>label=</span><span>"GraphViz"</span><span>,</span><span> </span><span>shape=</span><span>"component"</span><span>,</span><span> </span><span>href=</span><span>"https://www.graphviz.org/"</span><span>,</span><span> </span><span>target=</span><span>"_blank"</span><span>]</span><span>;</span><span> </span><span>docs</span><span> </span><span>[</span><span>label=</span><span>"Docs (.rst)"</span><span>,</span><span> </span><span>shape=</span><span>"folder"</span><span>,</span><span> </span><span>fillcolor=green</span><span>,</span><span> </span><span>style=filled</span><span>]</span><span>;</span><span> </span><span>svg_file</span><span> </span><span>[</span><span>label=</span><span>"SVG Image"</span><span>,</span><span> </span><span>shape=</span><span>"note"</span><span>,</span><span> </span><span>fontcolor=white</span><span>,</span><span> </span><span>fillcolor=</span><span>"#3333ff"</span><span>,</span><span> </span><span>style=filled</span><span>]</span><span>;</span><span> </span><span>html_files</span><span> </span><span>[</span><span>label=</span><span>"HTML Files"</span><span>,</span><span> </span><span>shape=</span><span>"folder"</span><span>,</span><span> </span><span>fillcolor=yellow</span><span>,</span><span> </span><span>style=filled</span><span>]</span><span>;</span><span> </span><span>docs</span><span> </span><span>-></span><span> </span><span>sphinx</span><span> </span><span>[</span><span>label=</span><span>" parse "</span><span>]</span><span>;</span><span> </span><span>sphinx</span><span> </span><span>-></span><span> </span><span>dot</span><span> </span><span>[</span><span>label=</span><span>" call "</span><span>,</span><span> </span><span>style=dashed</span><span>,</span><span> </span><span>arrowhead=none</span><span>]</span><span>;</span><span> </span><span>dot</span><span> </span><span>-></span><span> </span><span>svg_file</span><span> </span><span>[</span><span>label=</span><span>" draw "</span><span>]</span><span>;</span><span> </span><span>sphinx</span><span> </span><span>-></span><span> </span><span>html_files</span><span> </span><span>[</span><span>label=</span><span>" render "</span><span>]</span><span>;</span><span> </span><span>svg_file</span><span> </span><span>-></span><span> </span><span>html_files</span><span> </span><span>[</span><span>style=dashed</span><span>]</span><span>;</span><span> </span><span>}</span><span> </span>
<span>..</span><span> </span><span>graphviz::</span><span> </span><span>:name:</span><span> </span><span>sphinx.ext.graphviz</span><span> </span><span>:caption:</span><span> </span><span>Sphinx</span><span> </span><span>and</span><span> </span><span>GraphViz</span><span> </span><span>Data</span><span> </span><span>Flow</span><span> </span><span>:alt:</span><span> </span><span>How</span><span> </span><span>Sphinx</span><span> </span><span>and</span><span> </span><span>GraphViz</span><span> </span><span>Render</span><span> </span><span>the</span><span> </span><span>Final</span><span> </span><span>Document</span><span> </span><span>:align:</span><span> </span><span>center</span><span> </span><span>digraph</span><span> </span><span>"sphinx-ext-graphviz"</span><span> </span><span>{</span><span> </span><span>size=</span><span>"6,4"</span><span>;</span><span> </span><span>rankdir=</span><span>"LR"</span><span>;</span><span> </span><span>graph</span><span> </span><span>[</span><span>fontname=</span><span>"Verdana"</span><span>,</span><span> </span><span>fontsize=</span><span>"12"</span><span>]</span><span>;</span><span> </span><span>node</span><span> </span><span>[</span><span>fontname=</span><span>"Verdana"</span><span>,</span><span> </span><span>fontsize=</span><span>"12"</span><span>]</span><span>;</span><span> </span><span>edge</span><span> </span><span>[</span><span>fontname=</span><span>"Sans"</span><span>,</span><span> </span><span>fontsize=</span><span>"9"</span><span>]</span><span>;</span><span> </span><span>sphinx</span><span> </span><span>[</span><span>label=</span><span>"Sphinx"</span><span>,</span><span> </span><span>shape=</span><span>"component"</span><span>,</span><span> </span><span>href=</span><span>"https://www.sphinx-doc.org/"</span><span>,</span><span> </span><span>target=</span><span>"_blank"</span><span>]</span><span>;</span><span> </span><span>dot</span><span> </span><span>[</span><span>label=</span><span>"GraphViz"</span><span>,</span><span> </span><span>shape=</span><span>"component"</span><span>,</span><span> </span><span>href=</span><span>"https://www.graphviz.org/"</span><span>,</span><span> </span><span>target=</span><span>"_blank"</span><span>]</span><span>;</span><span> </span><span>docs</span><span> </span><span>[</span><span>label=</span><span>"Docs (.rst)"</span><span>,</span><span> </span><span>shape=</span><span>"folder"</span><span>,</span><span> </span><span>fillcolor=green</span><span>,</span><span> </span><span>style=filled</span><span>]</span><span>;</span><span> </span><span>svg_file</span><span> </span><span>[</span><span>label=</span><span>"SVG Image"</span><span>,</span><span> </span><span>shape=</span><span>"note"</span><span>,</span><span> </span><span>fontcolor=white</span><span>,</span><span> </span><span>fillcolor=</span><span>"#3333ff"</span><span>,</span><span> </span><span>style=filled</span><span>]</span><span>;</span><span> </span><span>html_files</span><span> </span><span>[</span><span>label=</span><span>"HTML Files"</span><span>,</span><span> </span><span>shape=</span><span>"folder"</span><span>,</span><span> </span><span>fillcolor=yellow</span><span>,</span><span> </span><span>style=filled</span><span>]</span><span>;</span><span> </span><span>docs</span><span> </span><span>-></span><span> </span><span>sphinx</span><span> </span><span>[</span><span>label=</span><span>" parse "</span><span>]</span><span>;</span><span> </span><span>sphinx</span><span> </span><span>-></span><span> </span><span>dot</span><span> </span><span>[</span><span>label=</span><span>" call "</span><span>,</span><span> </span><span>style=dashed</span><span>,</span><span> </span><span>arrowhead=none</span><span>]</span><span>;</span><span> </span><span>dot</span><span> </span><span>-></span><span> </span><span>svg_file</span><span> </span><span>[</span><span>label=</span><span>" draw "</span><span>]</span><span>;</span><span> </span><span>sphinx</span><span> </span><span>-></span><span> </span><span>html_files</span><span> </span><span>[</span><span>label=</span><span>" render "</span><span>]</span><span>;</span><span> </span><span>svg_file</span><span> </span><span>-></span><span> </span><span>html_files</span><span> </span><span>[</span><span>style=dashed</span><span>]</span><span>;</span><span> </span><span>}</span><span> </span>
.. graphviz:: :name: sphinx.ext.graphviz :caption: Sphinx and GraphViz Data Flow :alt: How Sphinx and GraphViz Render the Final Document :align: center digraph "sphinx-ext-graphviz" { size="6,4"; rankdir="LR"; graph [fontname="Verdana", fontsize="12"]; node [fontname="Verdana", fontsize="12"]; edge [fontname="Sans", fontsize="9"]; sphinx [label="Sphinx", shape="component", href="https://www.sphinx-doc.org/", target="_blank"]; dot [label="GraphViz", shape="component", href="https://www.graphviz.org/", target="_blank"]; docs [label="Docs (.rst)", shape="folder", fillcolor=green, style=filled]; svg_file [label="SVG Image", shape="note", fontcolor=white, fillcolor="#3333ff", style=filled]; html_files [label="HTML Files", shape="folder", fillcolor=yellow, style=filled]; docs -> sphinx [label=" parse "]; sphinx -> dot [label=" call ", style=dashed, arrowhead=none]; dot -> svg_file [label=" draw "]; sphinx -> html_files [label=" render "]; svg_file -> html_files [style=dashed]; }

For all this to work, you need the GraphViz suite of tools installed on the machine that renders the documentation.

原文链接:Embedding Graphs Into Your Sphinx Documents

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
Aim for the moon. If you miss, you may hit a star.
把月亮作为你的目标。如果你没打中,也许你还能打中星星
评论 抢沙发

请登录后发表评论

    暂无评论内容