Graphviz点的奇异边放置

Graphviz点的奇异边放置,graph,graph-theory,graphviz,Graph,Graph Theory,Graphviz,我有一个模块,可以自动输出(点格式)用某种汇编语言编写的函数(编译器的IR)。节点是使用“记录”形状打印的基本块。问题在于边采用了奇怪的路线,例如: digraph { node [shape = record]; n0[label="{<name> entry | <body> store i, 0\nstore sum, 0\ngoto test | {<target> target}}"]; n1[label="{<n

我有一个模块,可以自动输出(点格式)用某种汇编语言编写的函数(编译器的IR)。节点是使用“记录”形状打印的基本块。问题在于边采用了奇怪的路线,例如:

digraph {
node [shape = record];
n0[label="{<name> entry | <body> store i, 0\nstore sum, 0\ngoto test | {<target> target}}"];
n1[label="{<name> test | <body> t2 = load i\nif t4, body,   done | {<true> true | <false> false}}"]
n2[label="{<name> body | <body> t5 = load sum\ngoto test | {<target> target}}"];
n3[color=firebrick3, label="{<name> done | <body> t9 = load sum\nret t9}}"];
n0:target:s -> n1:name:n
n1:true:s -> n2:name:n
n1:false:s -> n3:name:n
n2:target:s -> n1:name:n
}
有向图{
节点[形状=记录];
n0[label=“{entry | store i,0\n存储和,0\n要测试{target}}”;
n1[label=“{test | t2=load i\nif t4,body,done{true | false}}”]
n2[label=“{body | t5=load sum\ngoto test |{target}]”;
n3[color=firebrick3,label=“{done | t9=load sum\nret t9}]”;
n0:目标:s->n1:名称:n
n1:true:s->n2:name:n
n1:false:s->n3:name:n
n2:目标:s->n1:名称:n
}
还有一个图像:


我该怎么做才能使从“目标”到“测试”的边缘位于左侧?

最简单的非古鲁方式是强制将任性链接连接到“西”侧

这对这个案子可能没问题。一种更一般的方法,但需要更多的思考和编码,但如果需要,允许边缘附加到:s和:n,就是添加一个大小为零的不可见节点(颜色=白色,或者可能有可见性属性),并使用两条边从n2到n1。只在其中一个上有箭头。不可见节点必须位于n1或n2的左侧。唉,我的graphvis fu不够强大,无法创建一个有效的例子;也许其他人可以创造一个


您能否具体说明您希望图形在布线箭头方面遵循的一般标准?例如,您希望最小化交叉?我希望从“目标”到“测试”的边缘在左侧布线。现在它看起来真的很奇怪,也不能真正理解为什么一开始就选择这样一条路线。
n2:target:w -> n1:name:w