- markdown小技巧:mermaid绘图工具介绍:https://blog.csdn.net/codename_cys/article/details/116330235
- 【Markdown】Markdown画图:https://blog.csdn.net/qq_32708605/article/details/123801702
- Markdown 常用语法(画图):https://blog.csdn.net/qq_37248504/article/details/109085445
- 惊呆!原来 markdown 的画图功能如此强大!:https://mp.weixin.qq.com/s/lQ9S3MLW2HlUXDv0V5IxFg
- 基于Markdown语法的绘图工具 —— Mermaid (flowchart篇):https://mp.weixin.qq.com/s/8sV9tU5Rr7dgo99i0iLxGw
- Mermaid 在线工具:https://www.min2k.com/tools/mermaid/
- Markdown图片神器:PicGo-让你爱上笔记与分享:https://mp.weixin.qq.com/s/Yk4uyNl2cugPEwodDcD5ew
- mdnice.com——Markdown、知乎、公众号排版神器:https://mdnice.com/
- openwrite.cn——Markdown 在线写作与多平台博客发布工具:https://openwrite.cn/
MarkDown 画图工具
1、Mermaid 介绍
Markdown 是一种轻量级标记语言,相比于 xml、html 等超文本标记语言,Markdown 的语法更简单,结构更清晰,更加易读易用。
博主作为一个经常写些东西的笔记爱好者,已经成为了 markdown 的拥趸,甚至为了方便自己使用,自定义了很多类 markdown 语法从而形成了自己的个人博客。
然而,markdown 这个看似简单轻量的标记语言,却支持非常强大的绘图功能,使用起来十分方便,本文我们就来详细介绍下 markdown 语言如何绘制流程图、饼图、序列图、甘特图。
启用 markdown 绘图块与代码块非常像:
```mermaid
··· 绘图指令 ···
```
节点ID[节点内容]
- 中括号及其内容可以省略,此时ID作为节点内容
- 节点间的指向关系使用节点ID定义
- 节点ID不能使用空格等特殊符号
- 节点内容可以输入空格等特殊符号
- 如果节点内容里需要放入关键字,可以用双引号
""引起来 - 节点内容两边的中括号可以改变,以修改默认的文字框形状
2、流程图(graph/flowchat)
- 节点名不能与关键字同名
- 使用引号可以避免一些不必要的麻烦,如避免与关键字同名
- 除了 graph,还可以使用 flowchart。
关键字graph表示一个流程图的开始,同时需要指定该图的方向
1、图形方向
| 命令 | 方向 |
|---|---|
| TB | 从上到下 |
| TD | 从上到下 |
| BT | 从下到上 |
| RL | 从右到左 |
| LR | 从左到右 |
T = TOP,B = BOTTOM,L = LEFT,R = RIGHT,D = DOWN
2、节点形状
| 命令描述 | 命令 | 形状 |
|---|---|---|
[]:方形 |
A[textA] | 文本框(默认形状) |
():圆角矩形 |
B(textB) | 圆角框 |
([]):体育场形 |
C([textC]) | 体育场型框 |
[()]:圆柱形 |
D[(textD)] | 数据库型框 |
(()):圆形 |
E((textE)) | 圆形框 |
>]:旗帜形(目前不支持反向) |
F>textF] | 非对称框 |
{}:菱形 |
G{textG} | 菱形框 |
{{}}:六边形 |
H | 六边形框 |
[[]]:子程序形 |
I[[textI]] | 子程序形 |
| 梯形类: | ||
[//]:平行四边形 |
J[/textJ/] |
平行四边形框 |
[\\]:反平行四边形 |
K[\textK\] |
反平行四边形框 |
[/\]:梯形 |
L[/textL\] |
梯形框 |
[\/]:反梯形 |
M[\textM/] |
反梯形框 |
graph TB
AAA
A[textA]
B(textB)
C([textC])
D[(textD)]
E((textE))
F>textF]
graph
G{textG}
H{{textH}}
I[[textI]]
J[/textJ/]
K[\textK\]
L[/textL\]
M[\textM/]
注:可以将文本用引号引起,避免引号中出现特殊字符无法正常显示的情况(此时引号可以使用MarkDown引号字符编码 #quot; )。
3、连线形状
节点间的连接线有多种形状,可以在连接线中加入标签:
| 命令 | 形状 |
|---|---|
| A1 –> B1 | 箭头连接 |
| A2 — B2 | 开放连接 |
| A3 — text — B3 / A33 – text — B33 | 标签连接 |
| A4 — 描述 –> B4 / A44 – text –> B44 | 箭头标签连接 |
| A5 -.- B5 | 虚线开放连接 |
| A6 -.-> B6 | 虚线箭头连接 |
| A7 -.test.- B7 / A77 -.-test77-.- B77 | 标签虚线连接 |
| A8 -. 描述 .-> B8 / A88 -.-test88-.-> B88 | 标签虚线箭头连接 |
| A9 === B9 | 粗线开放连接 |
| A10 ==> B10 | 粗线箭头连接 |
| A11 == 描述 === B11 | 标签粗线开放连接 |
| A12 == 描述 ==> B12 | 标签粗线箭头连接 |
graph TB
A1 --> B1
A2 --- B2
A3 -- text --- B3
A4 -- text --> B4
A5 -.- B5
A6 -.-> B6
A7 -.text.- B7
A8 -.text.-> B8
A9 === B9
A10 ==> B10
A11 == text === B11
A12 == tex t==> B12
graph TB
A3 --- text3 --- B3
A4 --- text4 --> B4
A33 -- text33 --- B33
A44 -- text44 --> B44
A77 -.-test77-.- B77
A88 -.-test88-.-> B88
4、代码如下
graph TB;
subgraph 分情况
A(开始)-->B{判断}
end
B--第一种情况-->C[第一种方案]
B--第二种情况-->D[第二种方案]
B--第三种情况-->F{第三种方案}
subgraph 分种类
F-.第1个.->J((测试圆形))
F-.第2个.->H>右向旗帜形]
end
H---I(测试完毕)
C--票数100---I(测试完毕)
D---I(测试完毕)
J---I(测试完毕)
graph TB;
subgraph 分情况
A(开始)-->B{判断}
end
B--第一种情况-->C[第一种方案]
B--第二种情况-->D[第二种方案]
B--第三种情况-->F{第三种方案}
subgraph 分种类
F-.第1个.->J((测试圆形))
F-.第2个.->H>右向旗帜形]
end
H---I(测试完毕)
C--票数100---I(测试完毕)
D---I(测试完毕)
J---I(测试完毕)
3、子流程图(subgraph)
Markdown 的语法中,还允许用户添加子图,子图就是以 subgraph 关键字标识的 graph,并以 end 结尾,但所有节点名都是全局的,并不隔离,因此子图之间是可以相互连接的。
1、代码格式
# 外面的那层, 可以使用子图中的节点,子图中的节点名不是隔离的,可以认为是全局变量-.-
graph LR
subgraph title1
graph definition
end
subgraph title2
graph definition
end
...
2、操作示例
```mermaid
graph LR
subgraph g1
a1-->b1
end
subgraph g2
a2-->b2
end
subgraph g3
a3-->b3
end
a3-->a2
```
3、效果
graph LR
subgraph g1
a1-->b1
end
subgraph g2
a2-->b2
end
subgraph g3
a3-->b3
end
a3-->a2
4、可以使用 & 同时指定多个节点之间的多个连线。
```mermaid
graph TB
A --> D & E & F
B & C -.-> F
```
5、效果
graph TB
A --> D & E & F
B & C -.-> F
4、时序图(sequenceDiagram)
用来描述两个或更多模块之间的交互过程首选就是时序图,Markdown 也同样提供了绘制时序图的功能。绘制时序图的关键字是 sequenceDiagram。
1、参与者 – 模块声明
作为多个模块之间交互过程的表现,首要的工作就是要声明共有哪些模块。
我们需要通过 participant 关键字进行声明,声明的顺序就是模块从左到右的展示顺序。
例如:
sequenceDiagram
title: text
participant B
participant A
2、连接线
Markdown 时序图支持以下连线方式:
| 命令 | 描述 |
|---|---|
| -> | 无箭头实线 |
| ->> | 有箭头实线 |
| –> | 无箭头虚线 |
| –>> | 有箭头虚线 |
| -x | 带x实线 |
| –x | 带x虚线 |
| -) | 实线菱形箭头 |
| –) | 虚线菱形箭头 |
3、代码与效果图
1、代码效果1
sequenceDiagram
Title: 网购流程
客户 ->> 商家: 下单
商家 ->> 仓库: 下单提醒发货
商家 -->> 客户: 下单成功等待收货
仓库 -->> 客户: 发货
客户 ->> 商家: 收获成功
sequenceDiagram
Title: 网购流程
客户 ->> 商家: 下单
商家 ->> 仓库: 下单提醒发货
商家 -->> 客户: 下单成功等待收货
仓库 -->> 客户: 发货
客户 ->> 商家: 收获成功
2、代码效果2
sequenceDiagram
participant server
participant CA
participant client
server->>CA: 这是我的公钥
CA-->>server: 下发证书
server->client: 建立连接
client->>server: 我要 RSA 算法加密的公钥
server-->>client: 下发证书与公钥
client-->>server: 上报通过公钥加密的随机数
server->>server: 生成对称加密秘钥
client-->server: 加密通信
client-->server: 加密通信
client-xserver: 关闭连接
sequenceDiagram
participant server
participant CA
participant client
server->>CA: 这是我的公钥
CA-->>server: 下发证书
server->client: 建立连接
client->>server: 我要 RSA 算法加密的公钥
server-->>client: 下发证书与公钥
client-->>server: 上报通过公钥加密的随机数
server->>server: 生成对称加密秘钥
client-->server: 加密通信
client-->server: 加密通信
client-xserver: 关闭连接
4、高级特性
在实际的使用场景中,往往并不是这样简单地相互通信,而是需要分支、循环等特殊处理,markdown 也同样可以支持。
1、循环
loop Loop_text
... statements...
end
2、分支
alt Describing_text
...statements...
else
...statements...
end
*# 推荐在没有else的情况下使用 opt(option,选择)*
opt Describing_text
...statements...
End
3、注释
注释或者称之为便签,用来对模块做额外标记。
- 单个标签:note right of | left of: Text
- 给多个模块打标签:note over [Actor1, Actor2…]:Text
4、实例
sequenceDiagram
participant Doctor
participant Bob
note right of Bob: Bob is a patient
loop Look Bob each hour
Doctor->>Bob: How are you?
alt Bob is sick
Bob->>Doctor: Not so good.
else
Bob->>Doctor: Fine, thank you.
end
loop Ask about patient
Doctor-->Bob: Inquire about the situation
end
opt Extra response
Bob->>Doctor:Thanks for asking
end
end
note right of Doctor: hourly ask finished
5、效果
sequenceDiagram
participant Doctor
participant Bob
note right of Bob: Bob is a patient
loop Look Bob each hour
Doctor->>Bob: How are you?
alt Bob is sick
Bob->>Doctor: Not so good.
else
Bob->>Doctor: Fine, thank you.
end
loop Ask about patient
Doctor-->Bob: Inquire about the situation
end
opt Extra response
Bob->>Doctor:Thanks for asking
end
end
note right of Doctor: hourly ask finished
5、甘特图(gantt)
在项目管理中,甘特图是一个非常得力的好帮手,通过甘特图,我们可以对整个项目的进展情况一目了然。
用 markdown 绘制甘特图十分简单快捷。
他有以下关键字:
- dateFormat – 日期格式
- section – 模块声明
- Completed – 已经完成
- Active – 进行中
- Future – 待后续处理
- crit – 关键阶段
代码与效果 1:
gantt
title 我的甘特图
dateFormat YYYY-MM-DD
section Section A
学习后端 :a1, 2014-01-01, 20d
学习前端 :after a1 , 20d
section Section B
学习vue :2014-01-12 , 8d
学习spring : 14d
gantt
title 我的甘特图
dateFormat YYYY-MM-DD
section Section A
学习后端 :a1, 2014-01-01, 20d
学习前端 :after a1 , 20d
section Section B
学习vue :2014-01-12 , 8d
学习spring : 14d
代码与效果 2:
gantt
dateFormat YYYY-MM-DD
title 软件开发任务进度安排
excludes weekends
section 软硬件选型
硬件选择 :done,desc1, 2020-01-01,6w
软件设计 :active,desc2, after desc1,3w
section 编码准备
软件选择 :crit,done,desc3,2020-01-01,2020-01-29
编码和测试软件 :1w
安装测试系统 :2020-02-12,1w
section 完成论文
编写手册 :desc5,2020-01-01,10w
论文修改 :crit,after desc3,3w
论文定稿 :after desc5,3w
gantt
dateFormat YYYY-MM-DD
title 软件开发任务进度安排
excludes weekends
section 软硬件选型
硬件选择 :done,desc1, 2020-01-01,6w
软件设计 :active,desc2, after desc1,3w
section 编码准备
软件选择 :crit,done,desc3,2020-01-01,2020-01-29
编码和测试软件 :1w
安装测试系统 :2020-02-12,1w
section 完成论文
编写手册 :desc5,2020-01-01,10w
论文修改 :crit,after desc3,3w
论文定稿 :after desc5,3w
6、类图(classDiagram)
代码与效果
classDiagram
Animal <|-- Duck
Animal <|-- Fish
Animal <|-- Zebra
Animal : +int age
Animal : +String gender
Animal : +isMammal()
Animal : +mate()
class Duck{
+String beakColor
+swim()
+quack()
}
class Fish{
-int sizeInFeet
-canEat()
}
class Zebra{
+bool is_wild
+run()
}
classDiagram
Animal <|-- Duck
Animal <|-- Fish
Animal <|-- Zebra
Animal : +int age
Animal : +String gender
Animal : +isMammal()
Animal : +mate()
class Duck{
+String beakColor
+swim()
+quack()
}
class Fish{
-int sizeInFeet
-canEat()
}
class Zebra{
+bool is_wild
+run()
}
7、饼图(pie)
代码与效果
pie
title 我的饼图
"狗" : 386
"猫" : 85
"鼠" : 150
pie
title 我的饼图
"狗" : 386
"猫" : 85
"鼠" : 150
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 8629303@qq.com