适用读者:希望在 Markdown、GitHub、VS Code、技术文档和科研笔记中快速绘图的初学者。
学习目标:理解 Mermaid 的工作方式,掌握常用语法,能独立绘制并导出流程图、时序图、状态图、类图和甘特图。
使用方式:在支持 Mermaid 的 Markdown 阅读器中打开此文件,下面标注为 mermaid 的代码块会显示为图形。若只显示代码,参见第 12 节。


目录

  1. Mermaid 是什么
  2. 快速上手:第一张流程图
  3. 流程图基础:方向、节点与连线
  4. 流程图进阶:分组、布局与配色
  5. 时序图:表达消息交互
  6. 状态图:表达状态转换
  7. 类图:表达软件结构
  8. ER 图:表达数据库关系
  9. 甘特图:表达项目进度
  10. 其他常用图:饼图、思维导图和时间线
  11. 完整案例:无线通信系统处理链
  12. 在 Markdown 中显示与导出图表
  13. 常见错误及排查
  14. 速查表、练习与官方资料

1. Mermaid 是什么

Mermaid 是一种文本驱动的图表描述语言:你编写图表结构,Mermaid 根据代码自动生成图形。它很适合版本管理,因为改动可以像普通文本一样在 Git 中比较。

一个 Mermaid 图表通常分为三层:

  1. 声明图类型:例如 flowchart、sequenceDiagram、stateDiagram-v2。
  2. 定义参与元素:例如节点、对象、状态、任务。
  3. 定义关系和样式:例如箭头、消息、转换条件、颜色。

在 Markdown 里,Mermaid 代码通常放在下面这样的围栏代码块中:

1
2
3
4
5
```mermaid
flowchart LR
A[开始] --> B[处理]
B --> C[结束]
```

重要:mermaid 是代码块的语言标识;如果写成普通的 text 代码块,大多数 Markdown 阅读器不会把它当成 Mermaid 图表。

Mermaid 适合哪些场景?

任务 推荐图表类型 主要用途
展示算法模块关系 flowchart 处理流程、模块连接、判断分支
解释软件或通信交互 sequenceDiagram 时间顺序、请求与响应
展示设备或协议状态 stateDiagram-v2 状态与触发条件
展示代码中的对象关系 classDiagram 类、属性、方法及继承
展示数据库结构 erDiagram 表、字段、实体关系
制定科研或开发计划 gantt 任务、工期、依赖
展示概念分类 mindmap 主题与层级
展示事件历程 timeline 关键事件与阶段

使用建议:Mermaid 的优势是快速、可维护、可复用;对于要求精确摆放、复杂跨层布线或出版级精细设计的图,Visio、draw.io 或矢量设计工具可能更合适。


2. 快速上手:第一张流程图

先阅读这一段:

1
2
3
4
5
6
7
flowchart LR
A[采集数据] --> B[预处理]
B --> C{数据是否有效?}
C -->|是| D[运行算法]
C -->|否| E[重新采集]
E --> A
D --> F[输出结果]

逐行解释:

  • flowchart LR:创建从左到右的流程图。
  • A[采集数据]:定义 ID 为 A、显示文字为“采集数据”的矩形节点。
  • A --> B:建立从 A 指向 B 的箭头。
  • C{数据是否有效?}:花括号表示判断/决策节点。
  • -->|是|:为箭头添加“是”标签。
  • E --> A:让流程返回前面的步骤,形成循环。

重要区别:节点 ID 不等于显示文字。 在 A[采集数据] 中,后续连线使用的是 A,而不是“采集数据”。尽量用简短、无空格的英文或数字字母组合做 ID;显示文字可以使用中文。


3. 流程图基础:方向、节点与连线

3.1 图的方向

声明 方向
flowchart TB / flowchart TD 从上到下
flowchart BT 从下到上
flowchart LR 从左到右
flowchart RL 从右到左

方向选取技巧:算法的处理步骤较多时使用 TB;模块间的信号流较长时使用 LR。

3.2 常用节点形状

1
2
3
4
5
6
7
flowchart LR
A[矩形:一般步骤]
B(圆角矩形:开始结束)
C{菱形:条件判断}
D([胶囊形:终点])
E[(圆柱形:数据库)]
F((圆形:状态或连接点))

语法速查:

代码 形状 典型含义
A[处理] 矩形 普通处理步骤
A(开始) 圆角矩形 开始、结束
A{条件?} 菱形 判断、分支
A([完成]) 胶囊形 终止节点
A[(数据)] 圆柱形 数据库、存储
A((节点)) 圆形 状态或连接点
A[[子程序]] 双边框矩形 子程序、预定义处理

3.3 常用连线

1
2
3
4
5
6
flowchart LR
A --> B
B --- C
C -.-> D
D ==> E
E -->|带文字的箭头| F
语法 含义
A --> B 实线单向箭头
A --- B 实线、无箭头
A -.-> B 虚线箭头
A ==> B 加粗箭头
A <--> B 双向箭头
`A –> 条件

图中连接线一般表示逻辑关系,不必然表示物理数据线;在正式科研图中,应在图注说明连线含义。

3.4 多分支与多入口

1
2
3
4
5
6
7
8
flowchart TB
A[接收任务] --> B{任务类型}
B -->|分类| C[分类模型]
B -->|检测| D[检测模型]
B -->|重建| E[重建模型]
C --> F[任务输出]
D --> F
E --> F

3.5 显示文本包含特殊字符

当节点文字含有括号、冒号或复杂符号时,推荐将文字用双引号包起来:

1
2
3
flowchart LR
A["输入:IQ 样本 (I/Q)"] --> B["FFT (N = 1024)"]
B --> C["输出:符号估计"]

建议养成 A["节点文字"] 的习惯,可以减少很多语法歧义。

3.6 注释

Mermaid 使用 %% 表示注释:

1
2
3
4
flowchart LR
%% 下面展示最简单的信号处理链
A[输入] --> B[处理]
B --> C[输出]

注释适合记录设计理由,但不会显示在图里。


4. 流程图进阶:分组、布局与配色

4.1 使用 subgraph 给模块分组

subgraph ... end 能将多个节点包进同一个区域,特别适合系统架构图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
flowchart LR
subgraph TX["发送端"]
A["数据输入"] --> B["信源编码"]
B --> C["信道映射"]
end

subgraph CHANNEL["无线信道"]
D["传输与噪声"]
end

subgraph RX["接收端"]
E["信号检测"] --> F["信源解码"]
F --> G["任务输出"]
end

C --> D --> E

要点:

  • TX 是子图 ID;["发送端"] 是子图标题。
  • 子图中的连线照常写,模块之间也可以连线。
  • 可以在子图内部写 direction TB 调整方向,不过最终布局可能受到外部连线和布局算法的影响,不能保证像 Visio 那样精确定位。

4.2 一套简洁的工程论文风格

建议用白色或浅灰底色、深灰边框,只对关键模块使用强调色。

1
2
3
4
5
6
7
8
flowchart LR
A["输入"]:::normal --> B["编码器"]:::key
B --> C["信道"]:::normal
C --> D["解码器"]:::key
D --> E["输出"]:::normal

classDef normal fill:#FFFFFF,stroke:#555555,color:#222222,stroke-width:1.2px;
classDef key fill:#EAF2F8,stroke:#36668D,color:#17324D,stroke-width:1.6px;

这里:

  • classDef normal ... 定义名为 normal 的样式。
  • :::normal 将样式直接应用到节点。
  • fill 是填充颜色,stroke 是边框颜色,color 是字体颜色。
  • 也可以使用 class A,B normal; 为多个节点分配类。

4.3 单独调整某个节点

1
2
3
flowchart LR
A[开始] --> B[关键处理] --> C[结束]
style B fill:#FFF5DF,stroke:#B67B12,color:#333333,stroke-width:2px

style 适合少数节点,classDef 适合大量复用。

4.4 为单张图设置主题

一些支持 Mermaid 配置前置区的渲染器允许在图中写:

1
2
3
4
5
6
---
config:
theme: neutral
---
flowchart LR
A[输入] --> B[处理] --> C[输出]

常见主题包括 default、dark、forest、neutral、base。图表主题、具体默认外观和布局可能随 Mermaid 版本变化;若跨平台使用,优先选择通用样式,并在目标平台预览。

4.5 排版经验

  1. 每张图先明确一个核心问题,不要在同一张图里塞入所有细节。
  2. 主链路尽量沿一个方向展开,减少折返线和交叉线。
  3. 同类模块采用相同形状和样式。
  4. 重要连接可以添加简短的标签,如“数据”“控制”“反馈”。
  5. Mermaid 是自动布局,节点的确切坐标不可像 PPT 那样随意指定。

5. 时序图:表达消息交互

时序图描述谁在什么时候向谁发送了什么信息,特别适合通信协议、客户端与服务器交互、SDR 控制与反馈过程。

5.1 基本语法

1
2
3
4
5
6
7
8
9
sequenceDiagram
participant UE as 用户设备
participant BS as 基站
participant SERVER as 边缘服务器

UE->>BS: 上传业务请求
BS->>SERVER: 转发任务
SERVER-->>BS: 返回推理结果
BS-->>UE: 下发结果

要点:

  • participant UE as 用户设备:定义参与者 ID 和显示名称。
  • UE->>BS:实线消息箭头。
  • SERVER-->>BS:虚线响应箭头。
  • 参与者从左到右排列,交互按从上到下的顺序发生。

5.2 常用消息符号

语法 含义
A->>B: 消息 实线消息箭头
A-->>B: 响应 虚线消息箭头
A->B: 消息 实线无箭头端点的连线
A-->>A: 自处理 参与者对自己的消息
Note right of A: 说明 A 右侧的注释
Note over A,B: 说明 跨越 A 和 B 的注释

5.3 判断、循环和自动编号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sequenceDiagram
autonumber
participant TX as 发送端
participant RX as 接收端

TX->>RX: 发送数据帧
RX->>RX: 检查 CRC

alt 校验成功
RX-->>TX: ACK
else 校验失败
RX-->>TX: NACK
loop 允许重传
TX->>RX: 重传数据帧
end
end
  • autonumber:自动为消息编号。
  • alt ... else ... end:互斥分支。
  • loop ... end:循环过程。
  • opt ... end:可选执行块。

5.4 显示执行过程

1
2
3
4
5
6
7
8
9
sequenceDiagram
participant APP as 应用
participant MODEL as 推理服务

APP->>MODEL: 提交输入数据
activate MODEL
MODEL->>MODEL: 模型推理
MODEL-->>APP: 返回预测结果
deactivate MODEL

activate / deactivate 在参与者生命线上绘制执行条,可突出处理时段。时序图展示的是交互顺序,并不自动保证时间间隔按真实比例显示。


6. 状态图:表达状态转换

状态图适合描述通信设备、协议连接、任务调度器等有限状态机。

1
2
3
4
5
6
7
8
9
stateDiagram-v2
[*] --> Idle
Idle --> Sync: 检测到同步信号
Sync --> Receiving: 同步成功
Sync --> Idle: 同步超时
Receiving --> Decoding: 帧接收完成
Decoding --> Idle: 处理完成
Decoding --> Error: 解码失败
Error --> Idle: 复位

理解:

  • stateDiagram-v2:声明状态图。
  • [*]:特殊的初始或终止标记;箭头方向决定角色。
  • Idle --> Sync: ...:触发某条件后从一个状态转换到另一个状态。

包含终止状态的例子

1
2
3
4
5
6
7
stateDiagram-v2
[*] --> Ready
Ready --> Running: 启动
Running --> Finished: 成功
Running --> Failed: 出错
Finished --> [*]
Failed --> [*]

状态图强调的是“当前处于什么状态、在什么条件下转移”,不同于流程图强调“步骤怎么执行”。


7. 类图:表达软件结构

类图属于 UML 图的一种,适合描述 Python、C++、Java 等项目中对象和类的结构。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
classDiagram
class Channel {
+float snr
+transmit(symbols)
}
class AWGNChannel {
+addNoise(symbols)
}
class RayleighChannel {
+applyFading(symbols)
}

Channel <|-- AWGNChannel
Channel <|-- RayleighChannel

说明:

  • class Channel { ... }:定义类及其成员。
  • +:公有;-:私有;#:受保护。
  • 带括号的成员通常表示方法,例如 transmit(symbols)。
  • Channel <|-- AWGNChannel:AWGNChannel 继承 Channel。

常见关系:

代码 含义
`Parent < – Child`
A *-- B 组合(强拥有关系)
A o-- B 聚合(弱拥有关系)
A --> B 关联
A ..> B 依赖
`A .. > Interface`

Mermaid 类图通常用来表达结构,不用于完整取代 UML 建模工具。


8. ER 图:表达数据库关系

ER(Entity–Relationship)图用来描述数据库中的实体、属性和实体间关系。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
erDiagram
USER ||--o{ EXPERIMENT : creates
EXPERIMENT ||--o{ RESULT : contains
USER {
int user_id PK
string name
}
EXPERIMENT {
int experiment_id PK
int user_id FK
string model_name
}
RESULT {
int result_id PK
int experiment_id FK
float accuracy
}

常见符号理解:

  • ||:恰好一个。
  • o|:零个或一个。
  • |{:一个或多个。
  • o{:零个或多个。
  • PK / FK:主键 / 外键标记。

例如 USER ||--o{ EXPERIMENT 表示:一个用户可以创建零个或多个实验,每个实验对应恰好一个用户。


9. 甘特图:表达项目进度

甘特图(Gantt)常用于论文实验计划、原型系统开发计划、软件项目管理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
gantt
title 通信系统原型开发计划
dateFormat YYYY-MM-DD
axisFormat %m/%d

section 系统设计
确定技术架构 :a1, 2026-11-16, 5d
设计处理流程 :a2, after a1, 6d

section 开发验证
实现发送模块 :b1, after a2, 8d
实现接收模块 :b2, after a2, 8d
端到端联调 :crit, b3, after b1, 5d

section 总结
整理实验结果 :c1, after b3, 4d

主要语法:

  • title:标题。
  • dateFormat YYYY-MM-DD:输入日期格式。
  • axisFormat %m/%d:坐标轴显示格式。
  • section:任务分组。
  • :a1, 2026-11-16, 5d:任务 ID、开始时间、持续时间。
  • after a1:等前一个任务结束后开始。
  • crit:标注关键任务。

注意:示例中“端到端联调”仅依赖 b1,为了表示必须等待发送端与接收端都完成,实际项目应更谨慎设置依赖。Mermaid 甘特图更适合可视化计划,并非完整的项目调度引擎。


10. 其他常用图:饼图、思维导图和时间线

10.1 饼图 pie

1
2
3
4
5
pie showData
title 仿真计算时间构成(示意)
"信道处理" : 25
"模型推理" : 55
"数据搬运" : 20

pie showData 可以显示数据标签。示例数值仅用于演示,不代表实际测量结果。

10.2 思维导图 mindmap

1
2
3
4
5
6
7
8
9
10
11
mindmap
root((Mermaid))
流程描述
流程图
状态图
软件设计
时序图
类图
项目管理
甘特图
时间线

思维导图主要靠缩进表达父子层级。不同阅读器的 Mermaid 版本可能对思维导图的支持有所差异。

10.3 时间线 timeline

1
2
3
4
5
timeline
title 项目阶段(示意)
第一阶段 : 需求分析 : 系统建模
第二阶段 : 算法实现 : 仿真验证
第三阶段 : 硬件集成 : 实验评估

时间线适合展示事件顺序,不需要像甘特图那样精确描述任务持续时间。


11. 完整案例:无线通信系统处理链

下面以一个简化的语义通信 + OFDM 收发处理链为例。这个图综合了子图、模块连接、样式分类和反馈链路。它是结构示意,不代表所有硬件原型必须采用同样的信号处理顺序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
flowchart LR
subgraph TX["发送端"]
direction TB
A["任务输入"] --> B["语义编码"]
B --> C["信道符号映射"]
C --> D["OFDM 调制"]
D --> E["DAC / RF 发射"]
end

subgraph CH["无线信道"]
H["多径衰落 + 噪声"]
end

subgraph RX["接收端"]
direction TB
F["ADC / RF 接收"] --> G["同步与 OFDM 解调"]
G --> I["信道估计与检测"]
I --> J["语义解码"]
J --> K["任务输出"]
end

E -->|"无线波形"| H
H --> F
I -.->|"可选信道状态反馈"| C

classDef semantic fill:#EAF2F8,stroke:#36668D,color:#17324D,stroke-width:1.5px;
classDef physical fill:#FFFFFF,stroke:#666666,color:#222222,stroke-width:1.2px;
classDef channel fill:#F3F3F3,stroke:#555555,color:#222222,stroke-width:1.3px;

class B,J semantic;
class A,C,D,E,F,G,I,K physical;
class H channel;

这张图可用来练习以下操作:

  1. 将 flowchart LR 改成 flowchart TB,观察整体布局变化。
  2. 为发送端添加“量化”节点,并明确放置位置。
  3. 将接收端的“同步与 OFDM 解调”拆成两个节点。
  4. 去掉反馈线,形成纯单向链路。
  5. 为“信道估计与检测”添加可选算法分支,例如 LS、LMMSE 或神经网络。

科研使用建议:如果图要进入 IEEE 论文,建议先用 Mermaid 快速形成结构草图,再根据排版要求检查字号、线宽、可读性,必要时导出 SVG 并进行矢量编辑。


12. 在 Markdown 中显示与导出图表

本节尤其重要:Markdown 文件中写有 Mermaid 代码,并不意味着所有 Markdown 阅读器、PDF 导出工具都能自动渲染。

12.1 在线直接练习:Mermaid Live Editor

打开 Mermaid Live Editor,粘贴下面的代码:

1
2
flowchart LR
A[输入] --> B[处理] --> C[输出]

它适合实时修改语法、查看渲染效果,并导出图形。支持的格式和具体导出选项取决于在线编辑器版本。

12.2 在 GitHub 查看

GitHub 的 Markdown 渲染支持 Mermaid 代码块。把包含 ```mermaid 代码块的 .md 文件推送到仓库,在 GitHub 的文件预览中通常可以直接看到图表。

需要注意:GitHub 的渲染引擎版本由平台决定;某些新特性不一定同步支持。

12.3 在 VS Code 中查看

可选工作流程:

  1. 使用 VS Code 打开 .md 文件。
  2. 根据需要安装支持 Mermaid 的 Markdown 预览扩展,例如 Markdown Preview Mermaid Support;不同 VS Code 版本与预览扩展的支持情况可能不同。
  3. 打开 Markdown 预览:Ctrl + Shift + V。
  4. 如果图仍然显示为代码,检查预览扩展是否已启用,以及当前 Mermaid 语法是否兼容。

容易混淆的一点:语法高亮不等于图表渲染。只负责把 Mermaid 代码染色的扩展,不一定能在 Markdown 预览区生成图形。

12.4 使用 Mermaid CLI 导出 SVG / PNG / PDF

如果已安装 Node.js 和 npm,可以安装 Mermaid 官方命令行工具:

1
npm install -g @mermaid-js/mermaid-cli

新建文件 demo.mmd(不是 Markdown 文件,内容直接从图类型声明开始):

1
2
flowchart LR
A[输入] --> B[处理] --> C[输出]

在终端运行:

1
2
3
4
5
6
7
8
# 输出矢量图,适合论文和技术文档
mmdc -i demo.mmd -o demo.svg -b white

# 输出位图
mmdc -i demo.mmd -o demo.png -b white

# 输出 PDF 图形文件
mmdc -i demo.mmd -o demo.pdf -b white

如果还不想全局安装,可以尝试:

1
npx -p @mermaid-js/mermaid-cli mmdc -i demo.mmd -o demo.svg -b white

注意:上面的 demo.pdf 是由单张 Mermaid 图导出的 PDF,不是整份 Markdown 学习笔记的 PDF。

12.5 将整份 Markdown 的 Mermaid 图转换成 SVG 引用

当 Markdown 本身包含多个 Mermaid 代码块时,可使用 Mermaid CLI 的 Markdown 转换功能:

1
mmdc -i input.md -o output.md

这会将源 Markdown 中的 Mermaid 图表转换成外部 SVG 图文件引用,并生成新的 Markdown 文件(具体生成文件名以运行结果为准)。随后:

  1. 保留新 Markdown 文件和它引用的 SVG 文件在合适的相对路径中。
  2. 用支持 SVG 图片的 Markdown 渲染工具打开新文件。
  3. 确保预览中每张图都能显示,再使用该工具的打印 / 导出 PDF功能。
  4. 检查 PDF 中的中文、字体、图片清晰度、分页和页面留白。

这种做法通常比直接把含 mermaid 代码块的 Markdown 交给一个不支持 Mermaid 的 PDF 转换器更可靠。

12.6 另一条可靠路线:图先生成,再引用

如果只需要少量图,可以独立导出:

1
2
3
4
project/
├─ notes.md
└─ images/
└─ process.svg

在 notes.md 中使用普通 Markdown 图片语法:

1
![处理流程](images/process.svg)

这样就不依赖下游 Markdown/PDF 工具是否能识别 Mermaid 语法,但仍然需要导出器支持 SVG。若不支持 SVG,可改用 PNG。

12.7 为什么 Mermaid 在 Markdown 里正常、导出 PDF 后却消失?

通常不是 Mermaid 代码写错,而是渲染链不一致:

1
2
3
4
5
flowchart TB
A["Markdown 预览支持 Mermaid"] --> B["预览时生成 SVG"]
C["另一种 PDF 导出工具"] --> D{"是否支持 Mermaid?"}
D -->|是| E["生成并嵌入图形"]
D -->|否| F["图丢失 / 仅显示代码"]

解决思路:要么使用确实支持 Mermaid 的 PDF 导出流程,要么先将 Mermaid 渲染为 SVG/PNG,再把外部图片嵌入 Markdown。只把 .md 文件换一个扩展名,不能解决这个问题。


13. 常见错误及排查

现象 常见原因 建议
图不显示,只显示代码 Markdown 阅读器不支持 Mermaid 使用 Live Editor 或带 Mermaid 支持的预览器
提示语法解析错误 括号、特殊字符或关键字冲突 使用 A["带引号的文本"];逐行删除定位问题
某些节点没有显示 ID 拼写错误或未连接 检查节点 ID、大小写和连接线
方向没有完全按预期排列 自动布局算法决定具体位置 减少交叉连接、拆分子图;必要时改用绘图软件
颜色或字体与预期不一致 Mermaid 主题、版本或外部样式差异 尽量用 classDef;目标平台重新检查
中文出现乱码或方框 渲染环境缺少相应字体 调整环境字体或换用兼容字体的导出方式
PDF 中没有图 导出工具没有执行 Mermaid 渲染 先导出 SVG/PNG,再引用图片
SVG 在某些 PDF 工具中不显示 导出器 SVG 兼容问题 转成 PNG,或换用支持 SVG 的导出器
新图类型不能渲染 Mermaid 版本过旧 检查当前渲染器版本,或先用更通用的图类型

容易踩的坑:

  • 流程图中尽量不要直接使用全小写的 end 作为节点标识或关键字形式的标签,因为它可能与 subgraph ... end 的结束关键字冲突。
  • Mermaid 的语法大小写敏感,例如 sequenceDiagram、stateDiagram-v2、classDiagram 不应随意改写。
  • 不要把 Mermaid 代码块里的 Markdown 图片语法 ![图片](路径) 当作 Mermaid 语法。
  • 代码是否能在某个编辑器显示,最终以实际使用的 Mermaid 渲染器为准。

推荐的排错顺序

  1. 将单张有问题的图复制到 Mermaid Live Editor。
  2. 如果 Live Editor 也报错,先检查语法;把图缩减为两个节点和一条线。
  3. 如果 Live Editor 正常、Markdown 里异常,检查预览器及版本。
  4. 如果预览正常、PDF 异常,优先检查 PDF 工具是否真正渲染了 Mermaid。

14. 速查表、练习与官方资料

14.1 图表类型速查

图类型 声明语句 学习优先级
流程图 flowchart LR ★★★★★
时序图 sequenceDiagram ★★★★★
状态图 stateDiagram-v2 ★★★★☆
甘特图 gantt ★★★★☆
类图 classDiagram ★★★☆☆
ER 图 erDiagram ★★★☆☆
饼图 pie ★★★☆☆
思维导图 mindmap ★★★☆☆
时间线 timeline ★★☆☆☆

14.2 流程图语法速查

需求 写法
创建左右方向流程图 flowchart LR
矩形节点 A["文本"]
判断节点 A{"条件"}
普通箭头 A --> B
虚线箭头 A -.-> B
带文字的箭头 `A –>
创建分组 subgraph G["分组"] … end
定义样式 classDef key fill:#FFFFFF,stroke:#333333;
应用样式 class A,B key;
注释 %% 注释内容

14.3 三道练习题

练习 1:算法流程图
绘制“读取图片 → 预处理 → 图像编码 → 信道传输 → 图像重建 → 计算 PSNR”的流程。添加“PSNR 是否达标”的判断分支。

练习 2:通信协议时序图
绘制发送端和接收端的“同步 → 数据传输 → ACK/NACK → 可选重传”的交互过程,使用 alt 和 loop。

练习 3:论文技术路线图
用 subgraph 把研究内容划分为“理论建模、算法设计、原型验证”三个区域,并使用简洁的黑白/浅蓝配色。

14.4 建议的学习顺序

  • 第 1 天:学会流程图方向、节点、箭头、分支,能绘制算法图。
  • 第 2 天:学习 subgraph、classDef,能绘制结构清晰的技术路线图。
  • 第 3 天:学习时序图、状态图,能描述协议和软件交互。
  • 后续按需:学习类图、ER 图、甘特图与导出工具。

14.5 官方资料

以下链接可直接查看具体语法和示例:


总结

学 Mermaid 最重要的是掌握两条思路:

  1. 先用简单的节点与连接表达结构,再考虑布局和配色。 对于算法和科研技术路线,flowchart 是最值得优先熟练掌握的类型。
  2. 区分“Mermaid 源代码”和“渲染后的图片”。 Markdown 能否看到图、PDF 能否保留图,取决于所使用的渲染与导出工具,而不只是文件本身。

如果只记住一个最小模板,记住下面这段即可:

1
2
3
4
5
flowchart LR
A["输入"] --> B["处理"]
B --> C{"是否成功?"}
C -->|"是"| D["输出"]
C -->|"否"| B

完成本教程后,建议自己从空白文档写一张真实的系统流程图,再尝试导出 SVG 和 PDF。实际绘制比记忆全部语法更有效。