• 2015-12-01 更新: 加入 Sphinx 插件 设置说明。
  • 2016-11-08 更新: 修改一些文字错误。

Graphviz 简易教程 中,我介绍了一点 Graphviz 的知识。下面的内容则是我在使用中积累的一些和工具有关的内容。

通用配置

使用下面三个关键字可以指定图片、节点和线段的默认设置。

1
2
3
4
5
6
7
8
9
10
// 影响图片整张图片的配置
// 左右方向,图片背景色为红色
// 也可以用于 subgraph
graph[rankdir="LR",bgcolor="red"];

// 影响所有节点
node[shape="box"];

// 影响所有线条和箭头
edge[style="dashed"];

指定多个节点

要想一次制定特定的多个节点的属性,可以这样写:

1
{ node[fillcolor="red"]; node1; node2; node3; }

也可以换行写:

1
2
3
4
5
{
node[fillcolor="red"];
node1; node2;
node3;
}

中文乱码问题

若渲染出的图片中出现乱码,检查两项:

  1. 文件编码需要使用 utf-8;
  2. 指定字体名称。

在 Mac OS X 上,我没有指定字体名称,中文工作得很好。

但在 Windows 上,我的渲染出现了乱码,于是我在 dot 源码中指定了字体名称:

1
2
3
4
5
6
// 影响图片级别的字体
graph[fontname="Microsoft YaHei"];
// 影响 node 中的文字字体
node[fontname="Microsoft YaHei"];
// 影响箭头或线条上的文字字体
edge[fontname="Microsoft YaHei"];

但是在 dot 源码中制定字体会影响其他 OS 下的表现(例如在 OS X 上没有微软雅黑),因此应该在编译的时候通过参数指定字体。

在编译的时候指定字体:

1
dot -Tpng -Gfontname=SimSun -Nfontname=SimSun -Efontname=SimSun graph.dot

Sphinx 插件

Sphinx 是一个优秀的文档工具。可以直接在其中使用 Graphviz 支持。

需要注意的是,如果在 Windows 上使用 Sphinx ,必须使用参数指定具体的字体,否则就会出现乱码。

这些配置直接写入 conf.py 即可。

1
2
3
4
5
6
# 启用 graphviz 配置
extensions = [ 'sphinx.ext.graphviz' ]

# 为了不影响其他操作系统,需要判断操作系统
if sys.platform == 'win32':
graphviz_dot_args = ['-Gfontname=Simsun', '-Efontname=Simsun', '-Nfontname=Simsun']

Vim 插件

Graphviz 简易教程 中,我建议使用 Eclipse 等 IDE 配合插件来编辑 dot 源码。实际上,我自己是使用 wmgraphviz.vim 来编辑 dot 的。默认情况下,wmgraphviz.vim 在 windows 下使用会有问题,主要是由于在它的编译代码中使用了 tee 这个 windows 批处理并不包含的命令。

许多 unix 移植工具中都包含 tee 工具(可参考 这里 ),由于只需要 tee ,我们可以使用 tee.bat ,把这个命令放在 path 路径中即可。

当然也可以直接修改 wmgraphviz.vim 的源码,修改 ftplugin/dot.vim 中的这一行:

1
let cmd = '!('.a:tool.' -O -T'.a:output.' '.g:WMGraphviz_shelloptions.' '.shellescape(expand('%:p')).' 2>&1) > _ && type _&&type _>>'.shellescape(expand('%:p:r').'.log')

原理在这里有介绍: How to display the output text in the dos command line while redirecting

对于上面提到的中文问题,可以直接编辑配置文件:

1
2
3
if has('win32')
let g:WMGraphviz_shelloptions="-Gfontname=SimSun -Nfontname=SimSun -Efontname=SimSun"
endif

自动刷新的图像查看软件

用 Vim 配合自动刷新的看图软件即可实现一个 Graphviz 编辑器,把屏幕分成两半,一般是 Vim,一半是看图软件,Vim 这边保存之后使用 wmgraphviz.vim 提供的快捷键输出图像,然后另一半的看图软件自动刷新实现预览。

  • Mac 下的 graphviz 官方 pkg 安装包自带一个 Graphviz.app 工具,安装后自动与扩展名 .gv 关联,双击即可打开预览,在修改 .gv 文件的时候,它将自动刷新;
  • Mac 下还可以使用 Finder 的预览功能,或者使用 Xee3
  • Windows 下可使用资源管理器的预览窗格,或者 IrfanView 的 Shirt+R 快捷键手动刷新,或者 JPEGView 直接支持自动刷新。

标记语言支持

我的 Fenced Code Extra for Python-Markdown 支持在 Markdown 中嵌入 Graphviz 支持。

Sphinx 也支持 Graphviz 插件。

两篇很完整的教程

留言

2015-10-29
次访问