在 Mac 上简化 Obsidian 中的 Mermaid 状态图时,应明确保留每个有效转换、缩短标签,并测试阅读方向。接受结果前,请对照源状态、目标状态和转换文本。

本指南使用四个合成状态,A 到 D。目标是让一张图更易阅读,同时保留其直接转换、返回路径以及起始和结束标记。转换表提供了一种具体方法,可独立于渲染器如何放置箭头来检查这些内容是否得到保留。

简化图表时,哪些内容必须保持不变?

首先,将呈现方式的更改与模型的更改区分开来。缩短显示标签和更改阅读方向可以提高可读性。删除箭头会改变直接转换的集合,即使另一条路径仍能到达同一目标也一样。

例如,假设从 A 到 C 既存在直接转换,也存在一条经过 B 的路径。删除直接转换会迫使读者推断中间访问过 B。这样虽然保留了可达性,却丢失了一个有效的单步转换。对于本任务来说,最终能到达同一目标还不够。

请将以下转换清单作为原始规范。标签是合成事件名称;它们在此示例中具有特定含义,必须仍附着在原来的箭头上。

源状态 目标状态 转换文本
Start A None
A B step
A C alternate
B C next
B A reset
C B back
C A reset
C D finish
D End None

共有九个转换,包括起始和结束。两条箭头的标签都是 reset,但它们起源于不同状态。两条都要保留。同样,B 和 C 之间的箭头方向和标签各不相同;它们是两个独立的转换。

对于较大的图表,请在编辑前记录每个转换的源状态、目标状态和文本组合。如果原始文本包含条件或动作,也要保留。仅核对箭头总数无法发现目标状态或标签已更改的箭头。

检查你安装的 Obsidian 使用哪种渲染器

在 Mac 上,点击侧边栏中的齿轮图标打开 Settings,然后选择 General。记录顶部显示的当前应用版本和安装程序版本。查阅相关发行说明时,请使用应用版本。这些位置记录在 Obsidian 的设置帮助中。

渲染器的版本界限很重要。Obsidian 于 2026 年 10 月 22 日发布的 1.15.0 Desktop early-access 版本将图表渲染切换为 Pele,并声明兼容 Mermaid 12.1.0 语法。该版本的发行说明还称,此版本不再包含 Mermaid 库。此说明适用于所指明的版本;它并未说明每个已安装版本的渲染器。请参阅 Obsidian 1.15.0 Desktop 发行说明。

请将语法兼容性和视觉效果分开检查。其他编辑器接受某个图表,可作为有用的对照,但最终结果仍应在你安装的应用中验证。不要假设上游布局设置或较新的文档示例在本地渲染器中会有完全相同的表现。

以下示例特意避开了渲染器配置、主题设置和样式。如果你已经有一张可用的图表,请从现有图表声明开始,一次只更改一个呈现细节。仅为了执行本文所述的转换清单和标签编辑,并不需要升级。

构建精简版本,明确列出转换

下面的完整示例实现了清单中的全部九行。可见状态名称刻意保持简短。状态 A 是起始点,B 和 C 有返回路径,并且只有 D 有一条通往结束标记的转换。

Mermaid 在其状态图参考文档中介绍了状态别名、带标签的转换、起始和结束标记以及方向声明。Obsidian 文档说明的插入方法是使用语言标识符为 mermaid 的围栏代码块,详见高级格式语法。

```mermaid
stateDiagram-v2
    direction LR

    state "Stage A" as A
    state "Stage B" as B
    state "Stage C" as C
    state "Stage D" as D

    [*] --> A

    A --> B : step
    A --> C : alternate

    B --> A : reset
    B --> C : next

    C --> A : reset
    C --> B : back
    C --> D : finish

    D --> [*]
```

将整个 Markdown 示例(包括开头和结尾的三反引号行)粘贴到笔记中。这里显示示例所用的外层四反引号围栏只是本文的展示方式,并非笔记内容。

要检查确切文本,请使用 Source mode。要查看渲染结果,请切换到 Reading view;在 macOS 上,Cmd+E 可在阅读视图和编辑视图之间切换。Obsidian 在视图和编辑模式中介绍了这些控件。

转换语句按源状态分组,以便一起查看每个状态的所有出边。这种组织方式有助于维护源文本,但不保证渲染器会将各个状态放置在什么位置。

请在你通常使用的笔记窗格宽度下试用此示例。然后仅删除 direction LR 这一行并比较结果。保留更便于理解分支和返回路径的呈现方式。左到右的图表可能需要更多水平空间,因此请在实际笔记窗格中判断效果。

仅在不影响含义的前提下缩短标签。在这个合成示例中,Stage B 无需进一步说明。在你自己的图表中,应保留能够区分不同状态的措辞。如果确实需要较长的解释,请将其放在相邻的说明段落中,并确保能明确对应到状态标识符。

哪些捷径会改变模型?

重复箭头可能会让你想引入一个共享的中间节点。这样做之前,请先思考该节点代表什么,以及原来的直接转换是否仍然存在。

共享的重置节点会改变直接路径

在清单中,B 和 C 都会在 reset 发生时直接转换到 A。如果将这些箭头替换为经过一个名为 R 的新状态的路径,就会创建一个中间状态,并移除原有的直接边。读者仍然可以追踪到 A 的路径,但图表描述的步骤已经不同。

如果要完全保留本文所述的结果,请保留这两条重置箭头。重复记录了同一事件的两种有效起始条件。只有在含义得以保留时,缩小它们占据的视觉空间才有用。

选择或分叉必须有模型上的依据

Mermaid 文档说明,<<choice>> 用于在不同路径间进行分支,<<fork>> 和 <<join>> 则用于分叉和汇合结构。这些是状态图参考文档中彼此不同的图表构造。

不要仅仅为了把几条杂乱的箭头汇集到一个共享节点而引入这些构造。在此示例中,目标是保留状态到状态的直接转换。添加中间构造就需要另外解释其路径如何对应原始模型。明确的箭头能让这种对应关系一目了然。

组合状态有明确的适用边界

Mermaid 支持组合状态,但其文档明确禁止不同组合状态所属的内部状态之间存在转换。请参阅组合状态。

如果节点分组会导致这种情况,那么在本任务中应让相连状态保持扁平。将箭头移到外层组合状态会改变其端点,并不自动等同于原来的箭头。当层次结构确实代表模型结构,且你能解释其进入和退出行为时,再使用这种结构。

对于这个四状态示例,嵌套几乎没有帮助。真正有用的简化是缩短标签并改善呈现方式,同时保持转换结构不变。

验证转换和渲染结果

在替换原始图表之前,请分两轮检查。第一轮检查模型,第二轮检查所选呈现方式是否实用。

  1. 将清单中的每一行与一条转换语句对照。确认两个端点和完整标签。
  2. 反向将每条转换语句与清单对照。这样既能发现缺失的箭头,也能发现多余的箭头。
  3. 分别检查起始和结束。此处,起始只通向 A,并且只有 D 通向结束。
  4. 检查渲染后的图表,确认标签易读且箭头方向清晰可辨。
  5. 追踪从 B 和 C 出发的返回路径,因为只检查正向流程时很容易忽略它们。

对于此示例,请进行三项阅读检查:从起始到 A,再到 C,再到 D,最后到结束;从起始到 A,再到 B,然后重置到 A;以及从起始到 A,再到 C,然后返回 B。这些检查涵盖了替代路径、重置和反向连接。它们可补充逐行对照,但不能取代它。

确定性的文本对比确认,示例中的九条转换语句与清单一致,标签也一一对应。编写本文时并未在已安装的 Obsidian 应用中渲染此示例,因此最终的间距和箭头走向仍需在你的本地版本中检查。

如果笔记显示的是代码原文,请先确认你处于 Reading view,并且开头围栏标记为 mermaid。如果编辑后出现解析错误,请恢复完整示例,然后每次只重新应用一项更改。如果只是布局不理想,请保留转换,并比较标签长度、方向和窗格可用宽度。

在清单对照通过后,保留标签和路径最易于阅读的版本。成功的简化能让读者更轻松地理解相同的有效转换,同时让源文本依然易于检查和维护。

来源