美人鱼子图布局不一致

Mermaid Subgraphs Laid Out Inconsistently

我正在使用 Mermaid 创建带有子图的流程图。

这工作正常,除了布局与我预期的不同。

使用 LR 布局,子图自上而下排列,每个子图中的节点也是如此:

<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>

<div class="mermaid">
flowchart LR

subgraph Subgraph One
  A
  -->B
  -->C
end

subgraph Subgraph Two
  D
  -->E
  -->F
end

subgraph Subgraph Three
  X
  -->Y
  -->Z
end
</div>

但是如果我使用 TD 布局,子图是从左到右排列的,但是每个子图中的节点是自上而下的。

<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>

<div class="mermaid">
flowchart TD

subgraph Subgraph One
  A
  -->B
  -->C
end

subgraph Subgraph Two
  D
  -->E
  -->F
end

subgraph Subgraph Three
  X
  -->Y
  -->Z
end
</div>

这让我感到惊讶:我希望子图按照我指定的方向(自上而下或左右)排列。或者至少,我希望它们与布局正交,例如子图从左到右,节点从上到下,反之亦然。

在这两种情况下,子图的显示顺序与我预期的相反,最后一个子图最先显示。

对于更复杂的图表,无论我指定哪种布局,我实际上都会看到自上而下和左右布局的混合。

如何使用 Mermaid 创建一个图,其中的子图按我指定的顺序从左到右排列,但其节点是自上而下的?

This is surprising to me: I'd expect the subgraphs to be laid out in the direction I specified (either top-down or left-right). Or at the very least, I'd expect them to be orthogonal to the layout, e.g. subgraphs being left-right with nodes that are top-down, or vice-versa.

我认为没有指定行为,但是 you can explicitly specify direction in subgraphs:

<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>

<div class="mermaid">
flowchart TD

subgraph Subgraph One
  direction LR  %% <-- here
  A
  -->B
  -->C
end

subgraph Subgraph Two
  direction LR  %% <-- here
  D
  -->E
  -->F
end
</div>

And in both cases, the subgraphs are showing up in the opposite order I'd expect, with the last subgraph showing first.

您可以尝试向后排序子图,但我不相信美人鱼保证它将如何布置它们。这可能会按照您今天的意愿呈现,明天会随着软件的新版本而改变。

归根结底,美人鱼的目标是通过边连接节点。它遵循一些提示,但如果您想完全任意控制布局,您可能希望选择不同的工具。

如果您熟悉 (La)TeX,Mermaid 的操作方式与此类似:它让您通过放弃 fine-grained 对事物呈现方式的精确控制来专注于内容。还有其他工具可以让您完全控制布局,但这也意味着您负有全部责任。