Исходя из экспериментов, кажется, что единственный способ заставить
wf:sw -> wf:se [dir = both]
делать то, что вы хотите, это добавить
graph [rankdir=TB]
К сожалению, rankdir влияет на весь график (не только на подграф или кластер). Таким образом, вы можете исправить один l oop, но вы сломаете другой.
Единственный способ, которым я нашел для достижения sh, ваша цель - вручную изменить pos нарушающего края (сплайн). Это:
digraph stackex {
graph [bb="0,0,82.583,216"];
node [label="\N",
shape=square
];
bf [height=0.5,
pos="41.292,162",
shape=ellipse,
width=0.75];
bf:nw -> bf:ne [dir=both,
pos="s,26.292,177 e,56.292,177 22.277,186.17 18.135,200.16 21.792,216 41.292,216 60.792,216 64.448,200.16 60.306,186.17"];
i1 [height=0.5,
label=X1,
pos="41.292,90",
width=0.5];
bf -> i1 [pos="e,41.292,108.1 41.292,143.7 41.292,135.98 41.292,126.71 41.292,118.11"];
wf [height=0.5,
pos="41.292,18",
shape=ellipse,
width=0.75];
i1 -> wf [dir=back,
pos="s,41.292,71.697 41.292,61.665 41.292,53.054 41.292,43.791 41.292,36.104"];
wf:se -> wf:sw [dir=both,
pos="s,56.292,3 e,26.292,3
65.002,8.3185
92.908,0.389
88.823,-20
41.292,-20
-6.2395,-20
-10.324,0.389
17.582,8.3185"];
}
И эта команда neato -n2 -Tpng doubleheaded3.fixed.dot> doubleheaded3.fixed.png Дает это:
В общем, я бы предложил язык pic / gpic / dpi c. Низкоуровневый, но, вероятно, более простой в использовании в долгосрочной перспективе.