mermaid的用法
Mermaid的用法
以下是在Typora中使用Mermaid绘制各类图表的详细教程,包含基础配置、语法详解及实战示例:
一、环境配置
-
启用Mermaid支持
- 打开Typora →
偏好设置
→Markdown
→ 勾选图表
(流程图、时序图、Mermaid图)。 - 重启Typora使配置生效。
- 打开Typora →
-
插入图表代码块
在文档中输入:```mermaid // 图表代码 ```
二、基础语法要素
1. 方向定义
代码 | 方向 | 示例 |
---|---|---|
TD /TB |
上→下 | graph TD; A→B |
BT |
下→上 | graph BT; A→B |
LR |
左→右 | graph LR; A→B |
RL |
右→左 | graph RL; A→B |
2. 节点形状
- 语法:
- 方形:
A[文本]
- 圆角矩形:
B(文本)
- 菱形:
C{文本}
- 圆形:
E((文本))
- 方形:
3. 连接线与箭头
类型 | 语法 | 示例 |
---|---|---|
实线箭头 | --> |
A --> B |
虚线箭头 | -.-> |
A -.-> B |
粗箭头 | ==> |
A ==> B |
带文本箭头 | -- 文本 --> |
A-- 说明 -->B |
无箭头线 | --- |
A --- B |
三、常用图表绘制详解
1. 流程图
竖向流程图:
```mermaid
graph TD
A[开始] --> B{条件}
B -->|是| C[执行任务]
B -->|否| D[结束]
C --> D
```
子图嵌套:
```mermaid
flowchart TB
subgraph 模块A [citations:6]
A1 --> A2
end
subgraph 模块B
B1 --> B2
end
A2 --> B1
```
2. 时序图
```mermaid
sequenceDiagram
participant 用户
participant 服务器
用户->>服务器: 登录请求
Note right of 服务器: 验证身份
服务器-->>用户: 响应结果
```
- 符号说明:
->>
:实线箭头(同步消息)-->>
:虚线箭头(异步消息)Note right of
:右侧注释
3. 甘特图
```mermaid
gantt
title 项目计划
dateFormat YYYY-MM-DD
section 设计
需求分析 :done, des1, 2024-01-01, 5d
原型设计 :active, des2, after des1, 3d
section 开发
编码实现 : dev1, after des2, 10d
```
- 关键词:
done
:已完成active
:进行中after
:依赖前一任务
4. 类图
```mermaid
classDiagram
class Animal {
+int age
+isMammal()
}
class Duck {
+String beakColor
+swim()
}
Animal <|-- Duck // 继承关系
```
5. 饼图
```mermaid
pie
title 销售占比
“产品A”: 45
“产品B”: 30
“产品C”: 25
```
四、样式美化技巧
-
自定义节点样式
```mermaid graph LR A:::highlight --> B classDef highlight fill:#f96, stroke:#333, stroke-width:2px; ```
classDef
定义样式类,:::
应用样式。
-
使用FontAwesome图标
```mermaid graph TD B[“fa:fa-twitter 社交平台”] ```
五、导出与调试
- 导出格式
- 支持导出为PDF、HTML、图像(PNG/SVG),图表会保留渲染效果。
- 常见问题
- 图形不显示:检查Typora是否启用图表支持并重启。
- 语法错误:使用在线校验工具Mermaid Live Editor。
六、完整示例汇总
图表类型 | 应用场景 | 核心语法 |
---|---|---|
流程图 | 业务流程 | graph TD; A-->B{判断} |
时序图 | 系统交互时序 | sequenceDiagram; A->>B: 请求 |
甘特图 | 项目管理 | gantt; section 开发; 任务:active, 7d |
类图 | 面向对象设计 | `classDiagram; ClassA < |
饼图 | 数据占比可视化 | pie; “类别”: 百分比 |
提示:Typora的实时预览功能(
Ctrl+/
)可快速查看图表效果。更多语法详见Mermaid官方文档。https://mermaid.js.org/intro/
七、mermaid代码块使用示例
官网有最全的说明文档 mermaidjs.github.io/ ,此处记录常用使用方法。
a=1a=2a=3a=4开始判断执行语句1执行语句2执行语句3执行语句4结束
- 另一种写法
TextOneTwoHardRoundDecisionResult 1Result 2
流程图语法
方向
方向 | 含义 |
---|---|
TB | 从上到下 |
BT | 从下到上 |
RL | 从右到左 |
LR | 从左到右 |
TD | 与TB相同 |
节点
语法结构如下:A[名称] --> B(名称)
其中,A、B均代表形状名称, -->
表示箭头指向,形状样式用后面的括号来表示,括号里面的内容是形状中要显示的文本内容。其中有以下几种形状:
括号形式 | 形状样式 |
---|---|
[ ] | 矩形框 |
( ) | 圆角矩形框 |
菱形 | |
(( )) | 圆形 |
连接线
符号 | 箭头 |
---|---|
--> | 箭头 |
--- | 没有箭头 |
-- 文字 --- / --- |文字| | 带文字的连接线 |
-->|文字| / -- 文字 --> | 带箭头和文字的连接 |
-.-> | 虚线 |
-. 文字 .-> | 带文字的虚线连接 |
==> | 粗连接线 |
== 文本 ==> | 带文本的粗连接 |
子图
语法:
threeonec2c1twob2b1a2a1
样式链接
StartStop
注释
- mermaid注释为
%%
综合应用
子图表普通线粗线虚线无箭头菱形矩形右向旗帜圆形圆角矩形
甘特图
2014-01-062014-01-072014-01-072014-01-082014-01-082014-01-092014-01-092014-01-10Completed Parallel 1 Parallel 2 Active Parallel 3 Parallel 4 Section
类图
CoolWhere am i?«interface»Class01int chimpint gorillasize()AveryLongClassClass09C2C3Class07Object[] elementDataequals()«service»Class10int idsize()
Git 图
象限图
XY 图
思维导图
时间线图
架构图
状态图
StillMovingCrash
饼图
79%17%3%DogsCatsRats
旅程图
CatMeGo to workGo to workMake teaMake teaGo upstairsGo upstairsDo workDo workGo homeGo homeGo downstairsGo downstairsSit downSit downMy working day
序列图语法
使用以下语法开始序列图
sequenceDiagram
[参与者1][消息线][参与者2]:消息体
...
参与者
定义参与者
sequenceDiagram
participant 参与者 1
participant 参与者 2
...
participant 简称 as 参与者 3 #该语法可以在接下来的描述中使用简称来代替参与者 312345
消息线
|类型|描述| |->
|无箭头的实线| |-->
|无箭头的虚线| |->>
|有箭头的实线| |-->>
|有箭头的虚线| |-x
|末端为叉的实线(表示异步)| |--x
|末端为叉的虚线(表示异步)|
处理中
在消息线末尾增加 +
,则消息接收者进入当前消息的“处理中”状态; 在消息线末尾增加 -
,则消息接收者离开当前消息的“处理中”状态。
或者使用以下语法直接说明某个参与者进入“处理中”状态
activate 参与者1
标注
语法如下
位置表述 参与者: 标注文字1
其中位置表述可以为
表述 | 含义 |
---|---|
right of | 右侧 |
left of | 左侧 |
over | 在当中,可以横跨多个参与者 |
循环
语法如下
loop 循环的条件
循环体描述语句
end123
判断
alt 条件 1 描述
分支 1 描述语句
else 条件 2 描述 # else 分支可选
分支 2 描述语句
else ...
...
end1234567
如果遇到可选的情况,即没有 else 分支的情况,使用如下语法:
opt 条件描述
分支描述语句
end
综合应用
张三李四想了一下alt[还没吃][已经吃了]opt[大过年的]loop[日复一日]吃了吗您呐?吃了,您呢?还没呢,正准备回去吃我也吃过了,哈哈祝您新年好啊张三李四
官方用例
AliceJohnBobloop[Healthcheck]Rational thoughts!Hello John, how are you?Fight against hypochondriaGreat!How about you?Jolly good!AliceJohnBob