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

news2024/10/5 20:18:07

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


本文目录

    • 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 TD
    A[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 TD
    A[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 LR
    id

也可以用 graph 代替 flowchart

效果:

默认节点

带有文本的节点

代码:

flowchart
    id[这是一段文本]

效果:

带有文本的节点

包含 Unicode 的文本

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

代码:

flowchart
    id["这是 ❤ 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 LR
    id1(这是一段文本)

效果:

圆角矩形节点

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

效果:

胶囊形节点

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

效果:

卷轴形节点

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

效果:

圆柱形节点

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

效果:

圆形节点

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

效果:

旗帜形节点

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

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

效果:

菱形节点

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

效果:

六角形节点

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

效果:

平行四边形节点1

平行四边形节点2

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

效果:

梯形节点1

梯形节点2

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

效果:

双圆节点

节点之间的连接

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

箭头链接
flowchart LR
    A-->B

效果:

箭头链接

线链接
flowchart LR
    A---B

效果:

线链接

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

或者

flowchart LR
    A---|这是一段文本|B

效果:

带有文本的线链接

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

或者

flowchart LR
    A-->|这是一段文本|B

效果:

带有文本的箭头链接

虚线箭头链接
flowchart LR
   A-.->B

效果:

虚线箭头链接

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

效果:

带有文本的虚线箭头链接

粗线箭头链接
flowchart LR
   A ==> B

效果:

粗线箭头链接

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

效果:

带有文本的粗线箭头链接

隐形链接

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

flowchart LR
    A ~~~ B

效果:

隐形链接

链式链接

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

flowchart LR
   A -- 文本1 --> B -- 文本2 --> C

效果:

链式链接1

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

flowchart LR
   a --> b & c--> d

效果:

链式链接2

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

flowchart TB
    A & B--> C & D

效果:

链式链接3

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

flowchart TB
    A --> C
    A --> D
    B --> C
    B --> D

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

新的箭头类型

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

flowchart LR
    A --o B
    B --x C

新的箭头类型

双向箭头

箭头可以是双向的:

flowchart LR
    A o--o B
    B <--> C
    C x--x D

双向箭头

链接长度

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

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

链接长度1

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

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

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

链接长度2

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

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

破坏语法的特殊字符

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

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

破坏语法的特殊字符

转义字符的实体代码

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

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

转义字符的实体代码

子图

语法如下:

subgraph title
    graph definition
end

例:

flowchart TB
    c1-->a2
    subgraph one
    a1-->a2
    end
    subgraph two
    b1-->b2
    end
    subgraph three
    c1-->c2
    end

子图1

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

flowchart TB
    c1-->a2
    subgraph ide1 [one]
    a1-->a2
    end

子图2

跨越子图的链接

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

flowchart TB
    c1-->a2
    subgraph one
    a1-->a2
    end
    subgraph two
    b1-->b2
    end
    subgraph three
    c1-->c2
    end
    one --> two
    three --> two
    two --> c2

跨越子图的链接

子图的方向

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

flowchart LR
  subgraph TOP
    direction TB
    subgraph B1
        direction RL
        i1 -->f1
    end
    subgraph B2
        direction BT
        i2 -->f2
    end
  end
  A --> TOP --> B
  B1 --> B2

子图的方向

交互

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

<script>
  const callback = function () {
    alert('A callback was triggered');
  };
</script>

```mermaid
flowchart LR
    A-->B
    B-->C
    C-->D
    click 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 LR
    id1(Start)-->id2(Stop)
    style id1 fill:#f9f,stroke:#333,stroke-width:4px
    style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5

样式

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

flowchart LR
    A:::someclass --> B --> C:::someclass
    classDef someclass fill:#f96

样式和类

对 fontawesome 的基本支持

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

flowchart TD
    B["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 LR
    A[Hard edge] -->|Link text| B(Round edge)
    B --> C{Decision}
    C -->|One| D[Result one]
    C -->|Two| E[Result two]

空格和分号

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

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

相关文章

【Linux】手写一个简易命令行解释器

文章目录 1. 了解命令行解释器1.1 命令行解释器是什么&#xff1f;1.2 我们为什么要尝试手写一个命令行解释器&#xff1f; 2. 命令行解释器的实现2.1 打印提示符2.2 获取用户输入2.3 创建子进程并进行进程程序替换2.4 内建命令 1. 了解命令行解释器 1.1 命令行解释器是什么&a…

TiDB-亿级订单数据亚秒响应查询方案

TiDB-亿级订单数据亚秒响应查询方案 TiDB宣传片 1. 什么是TiDB TiDB 是一个分布式 NewSQL 数据库&#xff0c;它支持水平弹性扩展、ACID 事务、标准 SQL、MySQL 语法和 MySQL 协议&#xff0c;具有数据强一致的高可用特性&#xff0c;是一个不仅适合 OLTP 场景还适合 OLAP 场景…

完全背包问题(二维数组 / 一维数组实现)

完全背包 完全背包的一维和二维dp数组 有 N 件物品和容量为 W 的背包&#xff0c;第 i 件物品的重量是 weight[i]&#xff0c;价值是 value[i] 每件物品都有无限个&#xff0c;即同一物品能够放入背包多次&#xff0c;求背包所能装入物品的最大价值总和 完全背包和 0-1 背包不…

小白到运维工程师自学之路 第四十六集 (mongodb复制集)

一、概述 1、 MongoDB复制集&#xff08;MongoDB Replica Set&#xff09;是MongoDB提供的一种高可用性和数据冗余的解决方案。它由多个MongoDB实例组成&#xff0c;其中一个作为主节点&#xff08;Primary&#xff09;&#xff0c;其他节点则扮演从节点&#xff08;Secondary&…

使用finalshell连接Linux服务器出现的问题

第一次使用finalshell远程连接Linux服务器的过程、遇到的问题及解决方案 首先建立连接 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d8836dcd8a224bf093ebdac031f763d5.png 然后问题来了 出现以下问题&#xff1a; java.net.ConnectException: Connection refused:…

地下污水厂配电能效管理平台设计

安科瑞电气股份有限公司 上海嘉定 201800 摘要&#xff1a;结合某地下污水厂项目&#xff0c;从结构、系统组成、系统功能、控制要求、场景模 式等方面介绍了地下污水厂智能照明控制系统&#xff0c;探索了一套适用于地下污水厂的智能照明控制策略&#xff0c;以确保地下污水…

这里会告诉你音频转换器推荐有什么

音频转换格式技术是一项重要的技术&#xff0c;可以将音频文件从一种格式转换为另一种格式&#xff0c;以适应不同设备、平台或应用程序的需求。今天的文章会向你科普音频转换格式技术和音频转换器推荐有什么。 音频转换格式技术应用于很多场景&#xff1a; 1、音乐制作与后期…

银河麒麟服务器v10 sp1 部署.Net6.0项目后无法访问静态文件

上一篇&#xff1a;银河麒麟服务器v10 sp1 部署.Net6.0 http https_csdn_aspnet的博客-CSDN博客 由于本人项目直接从.NetCore3.1升级到.Net6.0的&#xff0c;请参考文章&#xff1a;NetCore3.1项目升级到Net6.0_vs2022 没有startup_csdn_aspnet的博客-CSDN博客 虽然部署项目后…

mysql根据逗号将一行数据拆分成多行数据,顺便展示其他列

1、原始数据演示 2.处理结果 SQL展示 SELECTa.id,a. NAME,substring_index(substring_index(a.shareholder,,,b.help_topic_id 1),, ,- 1) AS shareholder FROMcompany a JOIN mysql.help_topic b ON b.help_topic_id < (length(a.shareholder) - length(REPLACE (a.share…

uni-app 从零开始第二章:底部 tabBar

pages.json 页面路由 | uni-app官网 一、新建 home页面 找到pages目录&#xff0c;新增一个home的页面&#xff0c;勾选上同时新建文件夹 新建完成后&#xff0c;pages.json 中 会自动添加上刚刚新建的文件信息 二、新增tabBar数据 在 pages.json中新增以下代码 "tabB…

微信保存到本地的视频文件怎么转存到手机笔记?

微信是人们之间交流的重要工具。我们经常会在微信上收到一些珍贵的视频文件&#xff0c;比如亲友们的生活片段、孩子们的成长瞬间等等。但是&#xff0c;随着时间的推移&#xff0c;这些视频文件会越来越多&#xff0c;也会有人担心它们的保存问题。 现在很多人都在使用手机笔…

磁盘0和磁盘1

磁盘0和磁盘1 查看磁盘情况磁盘0和磁盘1的区别 查看磁盘情况 此电脑&#xff0c;右键&#xff0c;管理&#xff0c;然后就可以看到计算机管理这个页面 计算机管理页面&#xff0c;存储&#xff0c;磁盘管理&#xff0c;就可以看到磁盘情况了 磁盘0和磁盘1的区别 磁盘0和磁…

【前端进阶】什么是AST?什么是ESLint?如何快速发布自定义ESLint插件?

文章目录 什么是ASTAST在线可视化网站代码如何转化ASTacorn基本使用 什么是ESLintESLint解析原理如何制作ESLint插件安装yeoman创建插件创建规则目录结构实现警告console.error()方法 npm发布如何注册如何登录发布应用问题 nrm下载查看可用镜像源切换镜像源 结束参考文章 什么是…

ChatGPT会让软件测试人员失业吗?

首先&#xff0c;正视ChatGPT &#xff0c;它只是一款提升测试效率的工具&#xff0c;并不会让测试失业 ChatGPT 本质上就是一个搜索引擎的二次封装&#xff0c;它更能理解你的输入意图&#xff0c;它更精确的帮你拼接返回结果。但它就是一个辅助工具&#xff0c;用好了可以帮…

传统主从配置

传统主从配置 MySQL通过二进制文件写入和恢复数据 主服务器一定要打开二进制日志 必须两台服务器&#xff08;或者是多个实例&#xff09; 从服务器需要一次数据初始化 如果主从服务器都是新搭建的话&#xff0c;可以不做初始化 如果主服务器已经运行了很长时间了&#xff0c;可…

从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史

Bert最近很火,应该是最近最火爆的AI进展,网上的评价很高,那么Bert值得这么高的评价吗?我个人判断是值得。那为什么会有这么高的评价呢?是因为它有重大的理论或者模型创新吗?其实并没有,从模型创新角度看一般,创新不算大。但是架不住效果太好了,基本刷新了很多NLP的任务…

web服务端接收多用户并发上传同一文件,保证文件副本只存在一份(附go语言实现)

背景 对于一个文件服务器来说&#xff0c;对于同一文件&#xff0c;应该只保存一份在服务器上。基于这个原则&#xff0c;引发出本篇内容。 本篇仅阐述文件服务器在同一时间接收同一文件的并发问题&#xff0c;这种对于小体量的服务来说并不常见&#xff0c;但是最好还是要留…

存储协议——FC协议讲解

目录 FC基础概念 FC协议结构 FC通信 FC交换网络工作流程&#xff1a;&#xff08;以封装SCSI协议为例&#xff09; FC拓扑结构 FC协议的端口类型 FC适配器&#xff08;FC HBA卡&#xff09; FC基础概念 FC最开始为一种传输协议&#xff0c;由于其性能较高&#xff0c;逐…

我的小流量“转正”心得 --- 下载下方深度语义重排的实践

目录 一、背景 二、通过数据分析找到的问题 三、迭代流程 迭代一&#xff1a; 迭代二&#xff1a; 迭代三&#xff1a; 迭代成功的原因&#xff1a; 知识扩展 四、hnswlib调优过程 五、附录 5.1 hnsw 超参选择 一、背景 在分发中下载带来的收入占比排列仅次于搜索。…

重磅|2024年浙大MPA提前批面试政策公布:申请三步走

说曹操曹操到&#xff01;昨天还在说浙大MPA提面吃迟迟未公布的事情&#xff0c;晚些时候就来了&#xff01;等待许久的MPA考生们可以开始着手筹划自己的提面备考了&#xff01;提前批面试真题周期较长&#xff0c;但是需要做准备的内容确实也不少&#xff0c;本期专注浙大的杭…