将.dot文件作为子图导入

19

有没有一种方式(无论是通过语言特性还是预处理程序)可以将外部的 .dot 文件作为子图包含到另一个图中?

我正在处理一个相对较大的图,虽然是手动维护的,而不是生成的。

如果能够定义一些 subgraph01.dot 将会非常方便:

digraph subgraph01 {
 /* lot of nodes and edges */
}

subgraph02.dot

digraph subgraph02 {
 /* lot of nodes and edges */
}

然后做类似于graph.dot这样的事情:

digraph BigGraph {
    import subgraph01;
    import subgraph02;
    A -> subgraph01.Node1
    A -> subgraph02.Node1
    subgraph01.Node10 -> subgraph02.Node99
    /* etc. */
}

有办法吗?

1个回答

18

我立即想到两个选项。其中一个是使用宏处理器,例如m4。考虑到BigGraph.m4

digraph BigGraph {
    define(`digraph',`subgraph')
    include(`subgraph01.dot')
    include(`subgraph02.dot')
    A -> subgraph01.Node1
    A -> subgraph02.Node1
    subgraph.Node10 -> subgraph.Node99
    /* etc. */
}

... 正在运行:

$ m4 BigGraph.m4 

... 产生:

digraph BigGraph {
    subgraph subgraph01 {
 /* lot of nodes and edges */
}


    subgraph subgraph02 {
 /* lot of nodes and edges */
}


    A -> subgraph01.Node1
    A -> subgraph02.Node1
    subgraph.Node10 -> subgraph.Node99
    /* etc. */
}

另一个可能允许更复杂方法的选项是使用GraphViz中的gvpr。我尝试用gvpr创建了一个示例来实现这一点,但是没有成功,因此我建议仅在需要图形感知方法而不是使用m4的简单方法时尝试它。


这方面有文档吗? - DazBaldwin
@DazBaldwin,有关使用gvpr和使用m4的文档是有的,但据我所知,并没有明确说明如何使用m4处理dot文件的文档。 - Simon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接