我编写了一个小工具转储(以dot
格式)项目的依赖关系图,其中生成在同一目录中的所有文件都收集在一个集群中。当我尝试生成包含相应图形的pdf时,dot
开始哭泣:
命令dot -Tpdf trimmedgraph.dot -o graph.pdf
会产生隐秘的错误消息Error: install_in_rank clusterReals virtual rank 21 i = 0 an = 0
,但不会在谷歌上产生任何结果。
我尝试手动编辑trimmedgraph.dot
:将子图clusterReals
转换为Reals
会生成一个可编译的文件但我的Reals/
目录的所有内容都是显然不再聚集了。
有没有办法只生成点有效文件(我计划最终向上游发送补丁,但如果我不能保证一切都会好的话......)?
我已经把trimmedgraph.dot online的两个版本放了,但它们相当大,并且考虑到我不知道问题出在哪里,我无法真正想出一个重新创建问题的最小文件。 / p>
答案 0 :(得分: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
似乎都合并在一起(节点,标签),除非它不可能,因为它们被其他集群包含在内。至少它看起来像是......因为后果是不可预测的(在你的情况下是错误的),我会尝试总是使用唯一的集群名称。