技術文檔維護中,版本可控的圖表是剛需。Visio 雖好用但二進制難比對;Graphviz 用 DOT 語言描述圖形,純文本友好 Git diff,配合 Sphinx 實現文檔與圖表同源管理。本文記錄 Windows/Linux 安裝、Sphinx 配置、中文渲染踩坑全過程。
sphinx.ext.graphviz 零成本集成bin 目錄加入系統 PATHdot -V 輸出版本號即成功apt-get install graphviz # 或 yum/dnf
dot -V # 驗證
編輯 conf.py:
# 啟用擴展
extensions = ['sphinx.ext.graphviz']
# Graphviz 執行路徑(需在 PATH 中)
graphviz_dot = 'dot'
# 全域字體設置(關鍵:解決中文顯示)
graphviz_dot_args = [
'-Gfontname=Microsoft YaHei',
'-Nfontname=Microsoft YaHei',
'-Efontname=Microsoft YaHei'
]
# 輸出 SVG 矢量圖,縮放不失真
graphviz_output_format = 'svg'
注意:-G/-N/-E 分別設置圖/節點/邊屬性,字體名不可加引號,錯誤寫法:'-Gfontname="Microsoft YaHei"'。
.. graphviz::
digraph abc {
a; b; c; d;
a -> b;
b -> d;
c -> d;
}
.. graphviz:: external.dot
直接寫中文標籤,Windows 下節點文字消失,Linux 顯示方框/亂碼。
.. graphviz::
digraph idp_modules {
fontname = "Microsoft YaHei";
rankdir = TB;
fontsize = 12;
node [fontname = "Microsoft YaHei", fontsize = 12, shape = "record"];
edge [fontname = "Microsoft YaHei", fontsize = 12];
subgraph cluster_sl {
label = " IDP支持層"; # 關鍵:前置一個全角/半角空格
bgcolor = "mintcream";
node [shape = "Mrecord", color = "skyblue", style = "filled"];
network_mgr [label = " 網絡管理器"];
log_mgr [label = " 日誌管理器"];
module_mgr [label = " 模塊管理器"];
conf_mgr [label = " 配置管理器"];
db_mgr [label = " 數據庫管理器"];
}
subgraph cluster_md {
label = " 可插拔模塊集";
bgcolor = "lightcyan";
node [color = "chartreuse2", style = "filled"];
mod_dev [label = " 開發支持模塊"];
mod_dm [label = " 數據建模模塊"];
mod_dp [label = " 部署發布模塊"];
}
mod_dp -> mod_dev [label = "依賴..."];
mod_dp -> mod_dm [label = "依賴..."];
mod_dp -> module_mgr [label = "安裝...", color = "yellowgreen", arrowhead = "none"];
mod_dev -> mod_dm [label = "依賴..."];
mod_dev -> module_mgr [label = "安裝...", color = "yellowgreen", arrowhead = "none"];
mod_dm -> module_mgr [label = "安裝...", color = "yellowgreen", arrowhead = "none"];
}
apt-get install fonts-wqy-zenhei 等label = " 中文" 繞過 Graphviz 中文斷詞 buggraphviz_dot_args 全域設置避免重複| 工具 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| Graphviz | 自動佈局、文本化、生態成熟 | 複雜佈局微調困難 | 架構圖、流程圖、ER 圖 |
| ditaa | ASCII 畫圖、極簡 | 中文對齊極難、編譯慢 | 簡單時序圖、IETF 文檔 |
| Mermaid | Markdown 原生、語法簡潔 | Sphinx 需額外擴展、大圖性能弱 | 輕量級文檔、README |
| PlantUML | UML 全品類、功能強 | 需 Java 運行時、學習曲線陡 | 專業建模、序列圖、類圖 |
Graphviz + Sphinx 是「文檔即代碼」理念的最佳實踐之一。掌握中文渲染技巧,讓技術文檔圖文並茂、版本可控、團隊協作無障礙。