如何在指定端口时将 rank=same 与 dir=back 结合使用?

How can I combine rank=same with dir=back, while specifying ports?

我有一个图表,它使用 HTML-like labels 创建表格,其中一些单元格由边连接。

这很好用,但是当我为两个节点指定 rank=same 时,为连接边指定 dir=back 并且至少有一个 port position 不考虑边方向。

这显示 example:

digraph so {
    // This all works
    a -> b [label="Regular direction" dir="forward"]
    c -> d [label="Reverse direction", dir="back"]
    e:w -> f:w [label="Reverse direction\n + port choice", dir="back"]
    g -> h [label="Reverse direction\n + rank=same", dir="back"]
    {rank=same; g; h}
    
    // This fails
    i:s -> j [label="Reverse direction\n + port choice\n + rank=same", dir="back"]
    {rank=same i; j}
}

我在下面突出显示了失败的部分:

是否有 graph/node/edge 选项的组合可以让我从一个节点端口到另一个节点绘制反向边,同时两个节点处于同一级别?

我试过的

我没有在边上使用 dir=back,而是尝试设置 arrowhead=none and arrowtail=normal in combination with dir=both. That didn't work either 并且不知何故甚至影响了 i -> j 边。

digraph so {
    // This fails
    i:s -> j [label="Reverse direction\n + port choice\n + rank=same", dir="back"]
    {rank=same i; j}
    
    // This fails
    k:s -> l [label="Reverse direction\n + port choice\n + rank=same\n + arrowhead/tail", arrowhead=none, arrowtail=normal, dir="both"]
    {rank=same k; l}
}

我发现在 label 属性之前提及 dir 属性可以满足您的需求:

digraph so {
    i:s -> j [dir="back", label="Reverse direction\n + port choice\n + rank=same"]
    {rank=same; i;j}
}