2

我写了一个小工具转储(dot格式)项目的依赖关系图,其中所有位于同一目录中的文件都聚集在一个集群中。当我尝试生成包含相应图表的pdf时,dot开始哭泣:

该命令dot -Tpdf trimmedgraph.dot -o graph.pdf会产生神秘的错误消息Error: install_in_rank clusterReals virtual rank 21 i = 0 an = 0,不会在 google 上产生任何结果。

我尝试trimmedgraph.dot手动编辑:将子图clusterReals转换为Reals可以编译的文件,但我的Reals/目录的所有内容显然不再收集。

有没有办法只生成点有效文件(我打算最终将我的补丁发送到上游,但如果我不能保证一切都会好起来......)?

我已经将 trimmedgraph.dot 的两个版本放在网上,但它们相当大,而且鉴于我不知道问题出在哪里,我无法真正想出一个最小的文件来重现问题。

4

1 回答 1

3

我认为(但找不到任何关于此的文档)集群名称在整个点文件中必须是唯一的。但是,在您的文件中,有两个名为clusterReals.

解决方案是确保所有集群名称都是唯一的 - 由于名称不会出现在输出中的任何位置,因此您可以在生成点文件时只使用数字。


一个快速测试表明,当重用相同的集群名称时会发生奇怪的事情:

digraph dependencies {
    subgraph cluster0 {
        label="First cluster 0";
        Node1;
        subgraph cluster0 {
            label="Second cluster 0";
            Node2;
        }
    }
    subgraph cluster0 {
        label="Third cluster 0";
        Node3;
    }
    subgraph cluster1 {
        label="Cluster 1";
        Node4;
        subgraph cluster0 {
            label="Fourth cluster 0";
            Node5;
        }
    }
}

图形输出

所有cluster0似乎都合并在一起(节点,标签),除非因为它们被其他集群包含而不可能。至少它看起来是这样的......由于后果是不可预测的(在你的情况下是错误的),我会尝试始终使用唯一的集群名称。

于 2012-07-21T17:19:24.213 回答