Markdown 进阶语法:Mermaid 绘图 (一) - 流程图 (Flowchart)

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
🍎个人主页:小嗷犬的个人主页
🍊个人网站:小嗷犬的技术小站
🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。


本文目录

    • Mermaid 简介
    • 如何使用 Mermaid
    • Mermaid 语法
      • 流程图 (Flowchart)
        • 节点(默认)
        • 带有文本的节点
          • 包含 Unicode 的文本
        • 方向
        • 节点形状
          • 圆角矩形节点
          • 胶囊形节点
          • 卷轴形节点
          • 圆柱形节点
          • 圆形节点
          • 旗帜形节点
          • 菱形节点
          • 六角形节点
          • 平行四边形节点
          • 梯形节点
          • 双圆节点
        • 节点之间的连接
          • 箭头链接
          • 线链接
          • 带有文本的线链接
          • 带有文本的箭头链接
          • 虚线箭头链接
          • 带有文本的虚线箭头链接
          • 粗线箭头链接
          • 带有文本的粗线箭头链接
          • 隐形链接
          • 链式链接
          • 新的箭头类型
          • 双向箭头
          • 链接长度
        • 破坏语法的特殊字符
          • 转义字符的实体代码
        • 子图
          • 跨越子图的链接
          • 子图的方向
        • 交互
          • 注释
        • 样式和类
        • 对 fontawesome 的基本支持
        • 空格和分号


Mermaid 简介

Mermaid 是一个基于 JavaScript 的图表绘制工具,它使用类似 Markdown 的简单语法来编写,并动态地将它们渲染成图表。

Mermaid 支持的图表类型包括:

  1. 流程图 (Flowchart) : 用关键词 graphflowchart 表示
  2. 顺序图 (Sequence Diagram) : 用关键词 sequenceDiagram 表示
  3. 类图 (Class Diagram) : 用关键词 classDiagram 表示
  4. 状态图 (State Diagram) : 用关键词 stateDiagram 表示
  5. 实体关系图 (Entity Relationship Diagram) : 用关键词 erDiagram 表示
  6. 用户旅程图 (User Journey Diagram) : 用关键词 journey 表示
  7. 甘特图 (Gantt Diagram) : 用关键词 gantt 表示
  8. 饼图 (Pie Chart Diagram) : 用关键词 pie 表示
  9. 象限图 (Quadrant Chart) : 用关键词 quadrantChart 表示
  10. 需求图 (Requirement Diagram) : 用关键词 requirementDiagram 表示
  11. Gitgraph 图 (Gitgraph Diagram) : 用关键词 gitGraph 表示
  12. 思维导图 (Mindmap) : 用关键词 mindmap 表示
  13. 时间线图 (Timeline Diagram) : 用关键词 timeline 表示

丰富的图表类型,可以满足大部分的绘图需求,越来越多的人开始使用 Mermaid 来绘制图表。


如何使用 Mermaid

想要使用 Mermaid 绘制各类图表,可以通过以下方式:

  • 使用专门支持 Mermaid 渲染的在线编辑器,如:Mermaid Live Editor
  • 使用支持 Mermaid 语法的 Markdown 编辑器,如:Typora

通常在专门的 Mermaid 编辑器我们只需要编写 Mermaid 语法,就可以看到图表的渲染效果:

flowchart TDA[Christmas] -->|Get money| B(Go shopping)B --> C{Let me think}C -->|One| D[Laptop]C -->|Two| E[iPhone]C -->|Three| F[fa:fa-car Car]

但是在支持 Mermaid 的 Markdown 编辑器中,我们需要在 Mermaid 语法前后添加特定的标记,才能看到图表的渲染效果,如:

```mermaid
flowchart TDA[Christmas] -->|Get money| B(Go shopping)B --> C{Let me think}C -->|One| D[Laptop]C -->|Two| E[iPhone]C -->|Three| F[fa:fa-car Car]
```

Mermaid 语法

流程图 (Flowchart)

流程图由节点(几何形状)和边(箭头或线)组成。Mermaid 代码定义了如何创建节点和边,并适应不同的箭头类型、多向箭头以及与子图之间的任何链接。

节点(默认)

代码:

flowchart LRid

也可以用 graph 代替 flowchart

效果:

默认节点

带有文本的节点

代码:

flowchartid[这是一段文本]

效果:

带有文本的节点

包含 Unicode 的文本

可以使用 "" 将包含 Unicode 的文本括起来。

代码:

flowchartid["这是 ❤ Unicode"]

效果:

包含 Unicode 的文本

方向

可在图表关键词后添加方向关键词来控制图表方向,流程图可用的方向关键词有以下几种:

  • TB (Top to bottom) : 从上到下
  • TD (Top-down) : 同 TB,从上到下
  • BT (Bottom to top) : 从下到上
  • RL (Right to left) : 从右到左
  • LR (Left to right) : 从左到右

代码:

flowchart TD开始 --> 结束
flowchart LR开始 --> 结束

效果:

从上到下

从左到右

节点形状

节点的默认形状为矩形,我们可以通过改变包裹文本的符号来改变节点的形状。

圆角矩形节点
flowchart LRid1(这是一段文本)

效果:

圆角矩形节点

胶囊形节点
flowchart LRid1([这是一段文本])

效果:

胶囊形节点

卷轴形节点
flowchart LRid1[[这是一段文本]]

效果:

卷轴形节点

圆柱形节点
flowchart LRid1[(这是一段文本)]

效果:

圆柱形节点

圆形节点
flowchart LRid1((这是一段文本))

效果:

圆形节点

旗帜形节点
flowchart LRid1>这是一段文本]

效果:

旗帜形节点

试试看,反过来写会怎样?

菱形节点
flowchart LRid1{这是一段文本}

效果:

菱形节点

六角形节点
flowchart LRid1{{这是一段文本}}

效果:

六角形节点

平行四边形节点
flowchart LRid1[/这是一段文本/]
flowchart LRid1[\这是一段文本\]

效果:

平行四边形节点1

平行四边形节点2

梯形节点
flowchart LRid1[/这是一段文本\]
flowchart LRid1[\这是一段文本/]

效果:

梯形节点1

梯形节点2

双圆节点
flowchart LRid1(((这是一段文本)))

效果:

双圆节点

节点之间的连接

节点之间可用箭头或者线连接,箭头或线的类型可通过关键词来指定。可以有不同类型的链接或将文本字符串附加到链接上。

箭头链接
flowchart LRA-->B

效果:

箭头链接

线链接
flowchart LRA---B

效果:

线链接

带有文本的线链接
flowchart LRA-- 这是一段文本 ---B

或者

flowchart LRA---|这是一段文本|B

效果:

带有文本的线链接

带有文本的箭头链接
flowchart LRA-- 这是一段文本 -->B

或者

flowchart LRA-->|这是一段文本|B

效果:

带有文本的箭头链接

虚线箭头链接
flowchart LRA-.->B

效果:

虚线箭头链接

带有文本的虚线箭头链接
flowchart LRA-. 文本 .-> B

效果:

带有文本的虚线箭头链接

粗线箭头链接
flowchart LRA ==> B

效果:

粗线箭头链接

带有文本的粗线箭头链接
flowchart LRA == 文本 ==> B

效果:

带有文本的粗线箭头链接

隐形链接

在某些情况下,当您希望更改节点的默认位置时,这可能是一个有用的工具。

flowchart LRA ~~~ B

效果:

隐形链接

链式链接

可以在一行声明多个链接:

flowchart LRA -- 文本1 --> B -- 文本2 --> C

效果:

链式链接1

也可以在一行声明多个节点链接:

flowchart LRa --> b & c--> d

效果:

链式链接2

然后,我们可以以一种非常富有表现力的方式描述依赖关系,只用下面一行:

flowchart TBA & B--> C & D

效果:

链式链接3

使用基础的代码来描述这样的关系至少需要 4 行代码:

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

一行的写法虽然简洁,但会使得代码难以阅读,所以建议不要过度使用这样的写法。

新的箭头类型

除了一般的箭头外,Mermaid 还支持以下 2 种箭头类型:

flowchart LRA --o BB --x C

新的箭头类型

双向箭头

箭头可以是双向的:

flowchart LRA o--o BB <--> CC x--x D

双向箭头

链接长度

流程图中的节点会被分到不同层级,链接的长度通常基于它跨越的层级,链接可以跨越任意数量的层级。除此之外,你也可以通过 增加破折号 - 的数量来加长一个链接。

flowchart LRA[Start] --> B{Is it?}B -->|Yes| C[OK]C --> D[Rethink]D --> BB ---->|No| E[End]

链接长度1

链接的长度可能超过总的层级数

当链接标签写在链接中间时,必须在链接的右侧添加额外的破折号 -

flowchart LRA[Start] --> B{Is it?}B -- Yes --> C[OK]C --> D[Rethink]D --> BB -- No ----> E[End]

链接长度2

对于虚线或粗线,需要添加的是等号 = 或 点号 .,如下表所示:

长度123
正常线------------
正常线带箭头-->--->---->
粗线============
粗线带箭头==>===>====>
虚线-.--..--...-
虚线带箭头-.->-..->-...->

破坏语法的特殊字符

为了呈现更多可能的字符,我们可以将文本放在引号 "" 内:

flowchart LRid1["这是一段(文本)"]

破坏语法的特殊字符

转义字符的实体代码

可以使用字符的实体代码来表示一个字符:

flowchart LRA["A double quote:#quot;"] -->B["A dec char:#9829;"]

转义字符的实体代码

子图

语法如下:

subgraph titlegraph definition
end

例:

flowchart TBc1-->a2subgraph onea1-->a2endsubgraph twob1-->b2endsubgraph threec1-->c2end

子图1

我们也可以为子图设置显式 ID:

flowchart TBc1-->a2subgraph ide1 [one]a1-->a2end

子图2

跨越子图的链接

可以为流程图添加跨越子图的链接:

flowchart TBc1-->a2subgraph onea1-->a2endsubgraph twob1-->b2endsubgraph threec1-->c2endone --> twothree --> twotwo --> c2

跨越子图的链接

子图的方向

子图的方向可以通过添加 direction 和方向关键词来指定:

flowchart LRsubgraph TOPdirection TBsubgraph B1direction RLi1 -->f1endsubgraph B2direction BTi2 -->f2endendA --> TOP --> BB1 --> B2

子图的方向

交互

我们可以为节点绑定 JavaScript 函数或是 URL 链接,当用户点击节点时,会触发绑定的函数或是打开链接。

<script>const callback = function () {alert('A callback was triggered');};
</script>```mermaid
flowchart LRA-->BB-->CC-->Dclick A callback "Tooltip for a callback"click B "https://www.github.com" "This is a tooltip for a link"click A call callback() "Tooltip for a callback"click B href "https://www.github.com" "This is a tooltip for a link"
```

交互

注释

使用 %% 可为 Mermaid 代码添加注释,注释不会被渲染。

flowchart LR
%% this is a comment A -- text --> B{node}A -- text --> B -- text2 --> C

注释

样式和类

Mermaid 中的节点和链接都可以自定义样式:

flowchart LRid1(Start)-->id2(Stop)style id1 fill:#f9f,stroke:#333,stroke-width:4pxstyle id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5

样式

还可以构造类来为一类节点或链接添加样式:

flowchart LRA:::someclass --> B --> C:::someclassclassDef someclass fill:#f96

样式和类

对 fontawesome 的基本支持

当环境中引入了 fontawesome 时,Mermaid 也能很好地支持这些图标:

flowchart TDB["fab:fa-twitter for peace"]B-->C[fa:fa-ban forbidden]B-->D(fa:fa-spinner)B-->E(A fa:fa-camera-retro perhaps?)

对 fontawesome 的基本支持

空格和分号

  • 分号在早期版本中用于标记图形声明的结束,现在不使用分号也可以渲染,当然如果你加入了分号,也不会影响图表渲染。
  • 在顶点和链接之间只允许有一个空格。但是,顶点和它的文本之间以及链接和它的文本之间不应该有任何空格。不加入空格也可以正常渲染,加入的空格是为了更好的可读性。
flowchart LRA[Hard edge] -->|Link text| B(Round edge)B --> C{Decision}C -->|One| D[Result one]C -->|Two| E[Result two]

空格和分号

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

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

相关文章

架构课学习笔记:职业成长

架构师没有明确的定义&#xff0c;郭老师提出具备的能力&#xff1a;就是为一个复杂系统设计软件的能力&#xff0c;以及引导研发团队实施的能力。从5个 阶段来看对应的能力维度&#xff1a;结构化设计、解决横向问题、解决跨领域冲突、正确的技术决策和创造生存优势。 一结构…

哈夫曼树-算法

一、霍夫曼树基本概念&#xff1a; 路径&#xff1a;从树的一个结点到另外一个结点的分支构成这两个结点的路径 结点的长度&#xff1a;两节点之间路径的分支数 树的路径长度&#xff1a;从树根到每一个结点的长度之和&#xff0c;记做TL: 结点数目相同的二叉树中&#xff0…

Linux--冯诺依曼体系结构

【Linux】冯诺依曼体系结构、操作系统及进程概念_linux io 冯诺依曼_平凡的人1的博客-CSDN博客 存储器指的是内存还是磁盘&#xff1f; 内存 输入设备&#xff1a;键盘、摄像头、话筒、磁盘、网卡... 输出设备&#xff1a;显示器、音响、磁盘、网卡... CPU: 运算器&#x…

自然语言处理实战项目12-基于注意力机制的CNN-BiGRU模型的情感分析任务的实践

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下自然语言处理实战项目12-基于注意力机制的CNN-BiGRU模型的情感分析任务的实践&#xff0c;本文将介绍一种基于注意力机制的CNN-BiGRU模型&#xff0c;并将其应用于实际项目中。我们将使用多条CSV数据样例&#xff0…

flask和Vue3的前后端数据传输

&#xff08;一&#xff09;基于flask&#xff0c;构建一个后端 后端就采用flask的一般构建方法&#xff0c;然后用 flask-restful 构建一个接口&#xff0c;接口返回为json数据。 datas [{id: 1, name: xag, 年龄: 18}, {id: 2, name: xingag, age: 19}]class UserView(Res…

Docker学习笔记25

Docker swarm 应用&#xff1a; 镜像准备&#xff1a; 参照Docker学习笔记13&#xff0c;创建centos-nginx:v1的镜像&#xff1a; [rootswarm-1 nginxtest]# docker build -t centos-nginx:v1 . [] Building 211.5s (12/13) [] Building 211.7s (12/13) [] Building 211.8s (…

【操作系统】PV操作模型总结

根本方法&#xff1a;行为所需资源、行为与行为前后关系的图分析法 1.0顺序执行模型 特点&#xff1a;&#xff08;1&#xff09;多进程之间的执行具有牵制性&#xff08;2&#xff09;每个进程执行内容不复杂&#xff0c;强调进程之间的执行顺序。 分析方法&#xff1a;有向图…

SpringBoot 如何使用 EmbeddedDatabaseBuilder 进行数据库集成测试

SpringBoot 如何使用 EmbeddedDatabaseBuilder 进行数据库集成测试 在开发 SpringBoot 应用程序时&#xff0c;我们通常需要与数据库进行交互。为了确保我们的应用程序在生产环境中可以正常工作&#xff0c;我们需要进行数据库集成测试&#xff0c;以测试我们的应用程序是否能…

Gof23设计模式之装饰者模式

1.概述 定义 指在不改变现有对象结构的情况下&#xff0c;动态地给对象增加一些职责&#xff08;即增加其额外功能&#xff09;的模式。 例子 我们先来看一个快餐店的例子。 快餐店有炒面、炒饭这些快餐&#xff0c;可以额外附加鸡蛋、火腿、培根这些配菜&#xff0c;当然加…

springmvc相关知识点记录

1、若依框架&#xff1a;v—haspermi条件写上就要保证内容包含在getinfo的列表里面&#xff0c;否则不显示按钮 2、当elmentui中只有一个input的时候&#xff0c;空值按enter键会刷新整个页面&#xff0c;需要在form标签中加上submit.native.prevent来阻止刷新页面 3、 spri…

VBA小工具:EXCEL如何批量给每行下面插入n个空行?

目录 1EXCEL本身的方法 2 VBA实现1&#xff1a; 2.1 粗糙代码 2.2 需要注意的问题 3 VBA实现2&#xff1a; 3.1 改进代码&#xff1a;根据用户自己先选中的区域&#xff0c;进行插入空行操作。 3.1.1 用户可在EXCEL里选中区域&#xff0c;而不是改VBA代码 3.1.2 自动识…

js逆向补环境-调试工具vscode与nodejs使用之无环境联调

目录 一、啊哈一、Nodejs安装1、nodejs最新版本的安装&#xff08;windows&#xff09;2、旧版nodejs更新成最新版本&#xff08;windows&#xff09;3、nodejs安装&#xff08;linux&#xff09; 二、vscode安装使用(windows)1、下载安装vscode2、vscode运行插件Code Runner安…