Markdown 流程图绘制详解

✍️作者简介:小北编程(专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向)
🐳博客主页: 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN
🔔如果文章对您有一定的帮助请👉关注✨、点赞👍、收藏📂、评论💬。
🔥如需转载请参考【转载须知】

文章目录

  • 一、前言
  • 二、基本语法
    • 2.1 流程方向
  • 三、连接线的种类
    • 3.1 连接线的形状
    • 3.2 新箭头类型
    • 3.3 带文字连接线
    • 3.4 连接线样式
    • 3.5 交互语法
    • 3.6 串联连接
    • 3.7 视图分组
    • 3.8 使用场景及实例
  • 四、节点的形状
    • 4.1. 形状图形表
    • 4.2 形状介绍
  • 五. 其他
    • 5.1 注解
    • 5.2 转义字符
  • 五. 总结

一、前言

Markdown 的原生语法不支持绘制图形,但通过 Mermaid 扩展,我们可以将一些格式化的文字渲染成我们需要的图形。常用的图形有 “流程图”、“时序图”、“类图”、“状态图”、“甘特图”、“饼图” 等。

Mermaid 是一个方便于 Markdown 文档撰写者通过文本方式生成图形的扩展工具。相比 Visio 它要轻很多,几行文字便可生成一幅完整且美观的流程图。

本节将重点介绍如何通过 Mermaid 绘制「流程图」。

流程图(flow chart)是体现封闭系统运动状态的有效展示形式,可以让管理者、实现者清晰的认识系统运转流程,也可以直观的描述工作过程。

二、基本语法

基本的流程图包含:流程图布局方向、几何图形和连接线三个部分组成。以下是一个简单的Markdown流程图示例,采用Mermaid语法:

​```mermaid
graph LR开始 --> 结束
​```

说明:

  • graph LR;:指定这是一个有向图。
  • 节点以及节点之间的关系通过-->来表示。
  • 方框中的文字表示节点的名称,例如A[开始]表示开始节点。
  • 决策节点后接两条分支线,分别表示决策的两个选项。
  • 流程图的开始和结束通过特殊节点开始结束表示。

2.1 流程方向

符号/术语含义
TB /TD
(两者相同)
从上到下(Top to Bottom)的流程方向
BT从下到上(Bottom to Top)的流程方向
LR从左到右(Left to Right)的流程方向
RL从右到左(Right to Left)的流程方向
HZ水平方向(Horizontal)的流程方向
VT垂直方向(Vertical)的流程方向

三、连接线的种类

不同种类的连接线可以表示不同类型的关系,例如,无方向的连接线可用来表示相关性、有方向的连接线可以表示数据流向或者节点间的依赖关系;用实线表示强关联、用虚线表示弱关联等待。

3.1 连接线的形状

线的形状
请添加图片描述箭头形状
请添加图片描述双向箭头
请添加图片描述语法示例

连接线实例:
```mermaid 
graph LR;test((指我干啥))直线---test直线箭头-->test虚线-.-test虚线箭头-.->test;粗直线===test;粗箭头==>test;双竖线加标签---|"||加标签"| test;
```

效果如下:

||加标签
指我干啥
直线
直线箭头
虚线
虚线箭头
粗直线
粗箭头
双竖线加标签

对于点或粗链接,要添加的字符是等号或点,如下表所示:

长度1 个23
无向------------
普通箭头-->--->---->
加粗============
加粗箭头==>===>====>
点状-.--..--...-
点状箭头-.->-..->-...->

3.2 新箭头类型

以下是支持的新类型的箭头:

```mermaid 
flowchart LRA --o BB --x C
```
A
B
C

多方向箭头:

```mermaid 
flowchart LRA o--o BB <--> CC x--x D
```
A
B
C
D

3.3 带文字连接线

带文字连接线可以在连接线上增加连接线的注释。注释有两种写法:

写在末尾:||符号,只需要在连接线符号末尾增加—>|文字|即可展示。

写在中间:类似—文字—>-. 文字 .->,等于是重复连接符号,前半部分是定义上一个图形到文字的连接线样式,后半部分是定义文字到图形的连接线样式。

介绍语法
不带描述文字A--描述---B
带描述的箭头A--描述-->B
带描述的虚线连指向A-.描述.->B
带描述的加粗箭头指向A==描述==>B
末尾增加文字A--->|描述|B

3.4 连接线样式

可以对连接线进行样式设置。例如,您可能希望对流程中倒退的连接线进行样式设置。因为连接不像节点那样可以设置 id,所以需要其他确定连接应附加到哪种样式的方法。

语法示例

**连接线样式** 在 linkStyle 语句中定义的样式
```mermaid
graph LR;A-->B;
linkStyle 0 stroke:#ff3,stroke-width:4px,color:red;
```**节点样式** 可以为节点定义指定的样式,例如更粗的边框或不同的背景色:
```mermaid
graph LRA-->B;style A fill:#f9f,stroke:#333,stroke-width:4pxstyle B fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
```**类 Class** 比每次定义样式更方便的是定义一个样式 class,并将该 class 添加到不同的节点上。
```mermaid
graph LRA:::someclass --> BclassDef someclass fill:#f96;
```

效果如下:

连接线样式 在 linkStyle 语句中定义的样式

A
B

节点样式 可以为节点定义指定的样式,例如更粗的边框或不同的背景色:

A
B

类 Class 比每次定义样式更方便的是定义一个样式 class,并将该 class 添加到不同的节点上。

A
B

3.5 交互语法

可以在节点上定义点击时跳转到超链接。

语法示例

**跳转链接交换** 超链接在同一浏览器选项卡/窗口中打开。可以通过在 click 定义中添加链接目标来更改此设置 (支持 _self,_blank,_parent 和 _top):
```mermaid
graph LR;百度-->知乎;click A "http://www.baidu.com/" _blankclick B "http://www.zhihu.com/" _blank
```

效果如下:

跳转链接交换 超链接在同一浏览器选项卡/窗口中打开。可以通过在 click 定义中添加链接目标来更改此设置 (支持 _self,_blank,_parent 和 _top):

百度
知乎

3.6 串联连接

在Mermaid中,可以使用一行代码声明多个连接或节点之间的关系,这使得描述依赖关系变得非常简洁。以下是一些示例:

语法示例

1. **多个连接关系:**```mermaid
flowchart LRA -- 文字 --> B -- 文字 --> C
```2. **多个节点连接:**```mermaid
flowchart LRa --> b & c--> d
```3. **简洁的依赖关系声明:**```mermaid
flowchart TBA & B--> C & D
```

效果如下:

  1. 多个连接关系:
文字
文字
A
B
C
  1. 多个节点连接:
a
b
c
d
  1. 简洁的依赖关系声明:
A
B
C
D

这种简洁的语法提供了更清晰的流程图表示方式。然而,请注意,过于紧凑的表示方式可能会降低Markdown的可读性。在选择使用这种语法时,请确保图表仍然易于理解。

基本语法等价表示

虽然一行代码可以表示多个连接关系,但是等价的基本语法会更加详细。以下是等价的基本语法表示:

语法示例

```mermaid
flowchart TBA --> CA --> DB --> CB --> D
```

效果如下:

A
C
D
B

这四行代码与前述一行代码具有相同的效果。在选择使用哪种语法时,请根据图表的复杂性和可读性做出明智的决策。

3.7 视图分组

mermaid支持将图的一部分包裹起来,形成子图,效果如下:
语法示例

**子图**
```mermaid 
graph LR;subgraph 第一个子图测试数据1 --> 指我干啥endsubgraph 第二个子图测试数据2 --> 你也指我干啥end
```**多子图流转**
在多个子图中,可以在子图之间设置连接线,如下面的例子所示:
```mermaid 
flowchart TBc1-->a2subgraph Aa1-->a2endsubgraph Bb1-->b2endsubgraph Cc1-->c2endA --> BC --> BB --> c2
```**子图的方向**
在多个流程图中,您可以使用方向语句来设置子图将呈现的方向,就像下面的例子所示:
```mermaid
flowchart LRsubgraph TOPdirection TBsubgraph B1direction RLi1 -->f1endsubgraph B2direction BTi2 -->f2endendA --> TOP --> BB1 --> B2
```

​​效果如下​​
子图

第二个子图
第一个子图
你也指我干啥
测试数据2
指我干啥
测试数据1

多子图流转
在多个子图中,可以在子图之间设置连接线,如下面的例子所示:

C
A
c2
c1
B
b2
b1
a2
a1

子图的方向
在多个流程图中,您可以使用方向语句来设置子图将呈现的方向,就像下面的例子所示:

TOP
B1
f1
i1
B2
f2
i2
A
B

3.8 使用场景及实例

流程图常用于项目的需求分析和设计阶段,也较常出现于程序使用手册中。
冒泡排序流程图。

语法示例

```mermaid 
graph LR执行1[i = 1]执行2[j = 0]执行3[i ++]执行4["a = arr[j], b = arr[j + 1]"]执行5[交换 a, b]执行6[j ++]判断1["i < n"]判断2["j < n - i"]判断3["a > b"]开始 --> 执行1执行1 --> 判断1判断1 --Y--> 执行2执行2 --> 判断2判断2 --Y--> 执行4判断2 --N--> 执行3执行3 --> 判断1执行4 --> 判断3判断3 --N--> 判断2判断3 --Y--> 执行5执行5 --> 执行6执行6 --> 判断2判断1 --N--> 结束
```

效果如下​​

Y
Y
N
N
Y
N
i = 1
j = 0
i ++
a = arr[j], b = arr[j + 1]
交换 a, b
j ++
i < n
j < n - i
a > b
开始
结束

四、节点的形状

在 Mermaid 中可以使用一些基本符号定义节点的形状,例如:圆角形、跑道形、气缸形、非对称形状、菱形、六角形、平行四边形、梯形。

语法示例

**形状语法示例:为方便我们分上下两组显示**
```mermaid 
graph TB;A(圆角形节点)B([跑道形节点])C[(圆柱形节点)]D{菱形节点}E((圆形节点))F{{六角形节点}}
``````mermaid 
graph TB;G>非对称形节点]H[/梯形--正向\]I[\梯形--反向/]J[/平行四边形--右倾/]K[\平行四边形--左倾\]L[[子程序形状]]
```

效果如下:

形状语法示例:为方便我们分上下两组显示

圆角形节点
跑道形节点
圆柱形节点
菱形节点
圆形节点
六角形节点
非对称形节点
梯形--正向
梯形--反向
平行四边形--右倾
平行四边形--左倾
子程序形状

4.1. 形状图形表

请添加图片描述

4.2 形状介绍

在Mermaid图表中,你可以使用不同的Markdown节点形状来呈现各种元素。以下是一些常见的Markdown节点形状及其用途的简单介绍

名称代码用法
圆角形节点ID(round edge)表示起点、终点或注重循环的元素。
跑道形节点ID([straight path])用于表示直线路径或流程中的步骤。
圆柱形节点ID[(cylinder)]通常用于表示过程或操作,也可以用于表示立体感的元素。
菱形节点ID{diamond}用于表示判断或决策的节点。
圆形节点ID((circle))用于表示起点、终点或注重循环的元素。
六角形节点ID{{hexagon}}用于表示起点、终点或注重循环的元素。
非对称形节点ID>asymmetric]用于表示不对称的元素。
梯形(正向)节点ID[/trapezoid]用于表示正向梯形形状的节点。
梯形(反向)节点ID[\reversed trapezoid/]用于表示反向梯形形状的节点。
平行四边形(右倾)节点ID[/parallelogram/]用于表示右倾的平行四边形。
平行四边形(左倾)节点ID[\parallelogram]用于表示左倾的平行四边形。
子程序形状节点ID[[subroutine shape]]用于表示子程序形状的节点。

这些节点形状可以根据需要组合使用,以创建具有更多细节和表达力的Mermaid图表。

五. 其他

5.1 注解

可以在流程图中输入注释,解析器将忽略该注释。注释需要在独立的行内,并且必须以 %% 开头。注释开始到下一个换行符之后的任何文本都将被视为注释,包括任何流程图语法:

语法示例

**注释** %%号为注释符,会将符号之后到此行结束都视为注释。
```mermaid
graph LR
%% this is a comment A -- text --> B{node}A -- text --> B -- text2 --> C
```

效果如下:

text
text2
A
B
C

5.2 转义字符

可以使用下述示例的语法转义字符:

语法示例

```mermaid
graph LRA["一个双引号:#quot;"] -->B["一个十进制数字表示的符号:#9829;"]
```

数字为十进制,因此 # 符号可以编码为 #35;。此外,也支持使用 HTML 字符名称。

效果如下:

一个双引号:"
一个十进制数字表示的符号:♥

五. 总结

  • Mermaid 为 Markdown 提供了文本转换为图形的扩展功能;
  • Mermaid 方式渲染的流程图包含布局方向、图形节点和连接线三个基本要素;
  • Mermaid 流程图支持多种节点形状、连接线种类,可以使流程图具有丰富的表现力。

文章写作不易,您的支持是我最大的动力,请👉关注✨、点赞👍、收藏📂、评论💬。
请添加图片描述


无论是哪个阶段,坚持努力都是成功的关键。不要停下脚步,继续前行,即使前路崎岖,也请保持乐观和勇气。相信自己的能力,你所追求的目标定会在不久的将来实现。加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/627192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python图像处理实战:使用PIL库批量添加水印的完整指南【第27篇—python:Seaborn】

文章目录 1. 简介2. PIL库概述3. PIL库中涉及的类4. 实现原理5. 实现过程5.1 原始图片5.2 导入相关模块5.3 初始化数据5.4 水印字体设置5.5 打开原始图片并创建存储对象5.6 计算图片和水印的大小5.7 选择性设置水印文字5.8 绘制文字并设置透明度5.9 遍历获取图片文件并调用绘制…

超简单的node爬虫小案例

同前端爬取参数一样&#xff0c;输入三个参数进行爬取 注意点也一样&#xff1a; 注意分页的字段需要在代码里面定制化修改&#xff0c;根据你爬取的接口&#xff0c;他的业务规则改代码中的字段。比如我这里总条数叫total&#xff0c;人家的不一定。返回的数据我这里是data.r…

内存泄漏检测方式

一 、 日志记录 通过宏定义重载了 malloc 和 free 函数&#xff0c;以在分配和释放内存的时候记录一些信息&#xff0c;包括文件名和行号&#xff0c;并将这些信息写入到相应的文件中。然后在 main 函数中演示了使用这些宏进行内存分配和释放。 _malloc 函数&#xff1a; 在分配…

基于java web的机票管理系统设计与实现设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

中国康复辅助器具协会脊柱侧弯康复技术委员会成立大会圆满召开

2024年1月13日,由中国康复辅助器具协会主办,中国康复辅助器具协会脊柱侧弯康复辅助器具技术专业委员会承办,北京蓝田医疗设备有限公司协办,中国康复辅助器具协会脊柱侧弯康复辅助器具技术专业委员会成立大会暨脊柱侧弯康复辅助器具技术交流会在北京市山西大厦隆重召开。本次会议…

Linux -- firewalld的富语言规则

1. Firewalld支持两种类型的NAT&#xff1a;IP地址伪装和端口转发。 &#xff08;1&#xff09;IP地址伪装 地址伪装&#xff08;masquerade)&#xff1a;通过地址伪装&#xff0c;NAT 设备将经过设备的包转发到指定接收方&#xff0c;同时将通过的数据包的源地址更改为其自己的…

基于SSM的流浪动物救助网站的设计与实现-计算机毕业设计源码82131

摘 要 随着生活水平的持续提高和家庭规模的缩小&#xff0c;宠物已经成为越来越多都市人生活的一部分&#xff0c;随着宠物的增多&#xff0c;流浪的动物的日益增多&#xff0c;中国的流浪动物领养和救助也随之形成规模&#xff0c;同时展现巨大潜力。本次系统的是基于SSM框架的…

C语言:底层剖析——函数栈帧的创建和销毁

一、究竟什么是函数栈帧 C语言的使用是面向过程的&#xff0c; 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候一个一个依次调用就可以了。所以C语言的程序都是以函数作为基本单位的&#xff0c;如果能够深入理解…

全光谱护眼灯有哪些?寒假护眼台灯推荐

全光谱指的是包含了整个可见光谱范围以及部分红外和紫外光的光线。通常的白炽灯或荧光灯只能发出有限范围内的光波&#xff0c;而全光谱台灯通过使用多种类型的LED灯或荧光灯管来产生更广泛的光谱。这样的光谱更接近自然光&#xff0c;能够提供更真实的颜色还原和更好的照明效果…

【MFC】学生成绩管理系统(期末项目)

如果需要代码请评论区留言或私信 课程设计具体实现 数据库设计 E-R图 关系模式 教师(工号&#xff0c;姓名&#xff0c;学院) 主键(工号)学生(学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;班级&#xff0c;专业&#xff0c;学分) 主键(学号)课程(课程…

element-ui el-table表格勾选框条件禁用,及全勾选按钮禁用, 记录

项目场景&#xff1a; 表格的部分内容是可以被勾选的&#xff0c;部分内容是不可以被勾选的 使用的是 “element-plus”: “^2.2.22”, 以上应该都是兼容的 问题描述 要求el-table表格中&#xff0c;部分内容不可以被勾选&#xff0c;全选框在没有可选内容时&#xff0c;是禁…

【漏洞复现】Sentinel Dashboard SSRF漏洞(CVE-2021-44139)

Nx01 产品简介 Sentinel Dashboard是一个轻量级的开源控制台&#xff0c;提供机器发现以及健康情况管理、监控、规则管理和推送的功能。它还提供了详细的被保护资源的实际访问统计情况&#xff0c;以及为不同服务配置的限流规则。 Nx02 漏洞描述 CVE-2021-44139漏洞主要存在于…

一些面试会问到的奇怪问题与面试总结

1.v-for、v-if先后顺序。 官方不建议一起使用&#xff0c;但是有时候面试的时候会问到。 在vue2中是v-for先与v-if的。 源码js编译结果&#xff1a; _c()就是vm.$createElement()&#xff0c;意思是创建一个虚拟的element&#xff0c;就是返回值是VNode。 _l就是renderlist…

【项目经验】详解Puppeteer入门及案例

文章目录 一.项目需求及Puppeteer是什么&#xff1f;二.Puppeteer注意事项及常用的方法1.注意事项2.常用的方法*puppeteer.launch&#xff08;&#xff09;**browser.newPage()**page.goto()**page.on(request&#xff0c;&#xff08;&#xff09;> {}&#xff09;**page.e…

USB Redirector本地安装并结合内网穿透实现远程共享和访问USB设备

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 USB Redirector是一款方便易用的USB设备共享服务应用程序&#xff0c;它提供了共享和访问本地或互联网上的U…

【dc-dc】世微AP5127平均电流型LED降压恒流驱动器 双色切换的LED灯驱动方案

这是一款双色切换的LED灯方案&#xff0c;12-50V 降压恒流,输出&#xff1a;6V 2.5A ​ 这是一款PWM工作模式 , 高效率、 外围简单、内置功率管&#xff0c;适用于 输入的 高 精度降压 LED 恒流驱动芯片。输出大功率可 达 25W&#xff0c;电流 2.5A。 可实现全亮/半亮功能切换…

上门按摩系统:科技与传统融合的新体验

在快节奏的现代生活中&#xff0c;人们越来越重视身心健康。传统的按摩方式虽然深受喜爱&#xff0c;却常因时间、地点的限制而无法满足需求。此时&#xff0c;上门按摩系统应运而生&#xff0c;将科技与传统的按摩技艺完美结合&#xff0c;为用户提供更便捷、个性化的服务。 上…

【Linux】自定义shell

👑作者主页:@安 度 因 🏠学习社区:安度因 📖专栏链接:Linux 文章目录 获取命令行前置字段命令行输入解析命令行普通指令的执行子进程执行命令指令类型判断 && 内建命令总结 &&a

uniapp的nvue是什么

什么是nvue uni-app App 端内置了一个基于 weex 改进的原生渲染引擎&#xff0c;提供了原生渲染能力。 在 App 端&#xff0c;如果使用 vue 页面&#xff0c;则使用 webview 渲染&#xff1b;如果使用 nvue 页面(native vue 的缩写)&#xff0c;则使用原生渲染。一个 App 中可…

深入解析JavaScript中new Function语法

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 Function是JavaScript中非常重要的内置构造函数,可以用来动态创建函数…