Graphviz 具有大(子)簇的图的隐点错误消息

Graphviz 具有大(子)簇的图的隐点错误消息,graphviz,dot,Graphviz,Dot,我已经编写了一个小工具转储(以dot格式)项目的依赖关系图,其中位于同一目录中的所有文件都集中在一个集群中。当我试图生成包含相应图形的pdf时,dot开始哭泣: 命令dot-Tpdf trimmedgraph.dot-o graph.pdf生成一条神秘的错误消息error:install\u in_-rank clusterReals virtual rank 21 i=0 an=0,这在google上不会产生任何结果 我尝试手动编辑trimmedgraph.dot:将子图clusterReal

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

命令
dot-Tpdf trimmedgraph.dot-o graph.pdf
生成一条神秘的错误消息
error:install\u in_-rank clusterReals virtual rank 21 i=0 an=0
,这在google上不会产生任何结果

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

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

我已经发布了trimmedgraph.dot的两个版本,但它们相当大,而且我不知道问题出在哪里,我真的无法拿出一个最小的文件来重现问题。

我认为(但找不到任何关于这方面的文档)集群名称必须在整个dot文件中是唯一的。但是,在您的文件中,有两个子图称为
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
似乎都合并在一起(节点、标签),除非因为它们被其他集群包含而无法合并。至少看起来是这样的。。。由于后果是不可预测的(在您的情况下是错误的),我会尝试始终使用唯一的群集名称。

我只是按照您的建议进行了操作,效果非常好;谢谢!