如何为包含其他节点的节点强制布局

How to enforce a layout for nodes containing other nodes

我使用 plantuml 1.2019.8 和 graphviz 2.38

我想将 middle 节点放在图表的中心,updown 节点放在它的上方和下方。

但是我无法将 updownmiddle 移动到中心,同时强制 right 显示在右侧并且 left在左边。

@startuml

skinparam linetype ortho

node up
node down
node "\n\n<b>    middle\n\n" as middle
node " " as left {
 node "left" as in_left
}
node " " as right {
 node "right" as in_right 
}

middle -u- up
down -u- middle

right -u- up
down -u- right

left -u- up
down -u- left

@enduml

现在这个复杂的问题

@startuml

    skinparam linetype ortho

    node up
    node down

    node " " as left {
     node "left1" as in_left1
     node "left2" as in_left2
     node "left3" as in_left3
    }
    together " " as T {
     node " " as middle {
      node "middle1" as in_middle1
      node "middle2" as in_middle2
    }
     node " " as right {
      node "right1" as in_right1
      node "right2" as in_right2
    }
    }

    in_left1 .d. in_left2
    in_left2 .d. in_left3

    in_right1 .r. in_right2

    in_middle1 .d. in_middle2
    middle -u- up
    down -u-- middle

    right -u- up
    down -u--- right

    left -u- up
    down -u- left

    @enduml

这是Result

但是 updown 再次不与 middle1middle2

居中

您可以使用 together 关键字强制 middleright 粘在一起。左边会在另一边绕过它。

@startuml

skinparam linetype ortho

node up
node down
node " " as left {
    node "left" as in_left 
}

together {
    node "\n\n<b>    middle\n\n" as middle
    node " " as right {
        node "right" as in_right
    }
}

middle -u- up
down -u- middle

right -u- up
down -u- right

left -u- up
down -u- left


@enduml