当前位置: 首页 > news >正文

使用mermaid画流程图

本文介绍使用mermaid画流程图,并给出几个示例。

背景

目前,除有明确格式要求的文档外,笔者一般使用markdown写文档、笔记。当文档有图片时,使用Typora等软件可实时渲染,所见即所得。但如果文档接收方没有安装相关工具,效果则会大打折扣。Typora支持导出不同格式的文件。如果导出为pdf,对文字拷贝不友好。如果导出为word,格式不友好。

笔者的部分文档,shell命令、代码版本较多,因此选定html格式,体积小,方便浏览,但对图片不友好。但是,如果只是涉及流程图,则可以考虑用mermaid绘制。

笔者先前知道这个东西,但没用起来,最近因为一份非正式文档要发布于内网,且有流程图,于是用之,便有了本文。

实践

用法

在Typora中使用mermaid即可绘制流程图。语法如下:

```mermaid
graph TD
这里开始绘制
```

如果语法正确,即时可见效果,如出错,会有提示,示例如下:
在这里插入图片描述

下面列出画图的笔记。

graph TD 方向从上(Top)到下(Down)
direction LR:方向从左(Left)到右(Right)
开始([开始做事]):椭圆形,与程序流程图的开始、结束类似。子流程:%% 这是准备工作子流程subgraph 准备工作direction LR%%...end黄色虚线:
style 打道回府 fill:#FFFFF0,stroke-dasharray:5,stroke-width:2px,stroke:#000

示例:简单的登录流程(有判断条件)

代码:

graph TDA([开始]) --> B[输入用户名和密码]B --> C{验证成功?}C -->|是| D[进入主页]C -->|否| E[显示错误信息]D --> F([结束])E --> Bstyle A fill:#D5E8D4,stroke:#333,stroke-width:2pxstyle F fill:#D5E8D4,stroke:#333,stroke-width:2pxstyle C fill:#FFD2D2,stroke:#333,stroke-width:2px

效果图如下:

开始
输入用户名和密码
验证成功?
进入主页
显示错误信息
结束

示例 :订单处理流程(有判断条件)

代码:

graph TDA([开始]) --> B[接收订单]B --> C[检查库存]C --> D{库存充足?}D -->|是| E[确认订单]D -->|否| F[通知库存不足]E --> G[安排发货]G --> H([结束])F --> Hstyle A fill:#D5E8D4,stroke:#333,stroke-width:2pxstyle H fill:#D5E8D4,stroke:#333,stroke-width:2pxstyle D fill:#FFD2D2,stroke:#333,stroke-width:2px

效果图:

开始
接收订单
检查库存
库存充足?
确认订单
通知库存不足
安排发货
结束

示例 :产品发布流程

代码:

graph TDA([项目启动]) --> B[需求分析]B --> C[设计系统架构]C --> D[开发]D --> E[测试]E --> F{测试通过?}F -->|是| G[部署上线]F -->|否| H[修复问题]H --> EG --> I([项目结束])style A fill:#D5E8D4,stroke:#333,stroke-width:2pxstyle I fill:#D5E8D4,stroke:#333,stroke-width:2pxstyle F fill:#FFD2D2,stroke:#333,stroke-width:2px

效果图:

项目启动
需求分析
设计系统架构
开发
测试
测试通过?
部署上线
修复问题
项目结束

示例:有子流程图的流程

代码:

graph TD%% 这是准备工作子流程subgraph 准备工作direction LR准备1 --> 检查清单检查清单 --> 确认清单endsubgraph 工作阶段1direction LR阶段1开始 --> 阶段1结束endsubgraph 出发endsubgraph 工作阶段2direction LR阶段2开始 --> 阶段2事情1阶段2事情1 --> 一个事阶段2事情1 --> 另一个事endsubgraph 再次检查direction LR检查开始 --> 检查结束endsubgraph 打道回府direction LR收拾1 -.-> 收拾2end开始([开始做事]) --> 准备工作准备工作 --> 工作阶段1工作阶段1 --> 出发出发 --> 工作阶段2工作阶段2 --> 再次检查再次检查 --> 结束([结束做事])%% 虚拟结束([结束做事]) -.-> 打道回府%% 虚线style 打道回府 fill:#FFFFF0,stroke-dasharray:5,stroke-width:2px,stroke:#000

效果图:

graph TD%% 这是准备工作子流程subgraph 准备工作direction LR准备1 --> 检查清单检查清单 --> 确认清单endsubgraph 工作阶段1direction LR阶段1开始 --> 阶段1结束endsubgraph 出发endsubgraph 工作阶段2direction LR阶段2开始 --> 阶段2事情1阶段2事情1 --> 一个事阶段2事情1 --> 另一个事endsubgraph 再次检查direction LR检查开始 --> 检查结束endsubgraph 打道回府direction LR收拾1 -.-> 收拾2end开始([开始做事]) --> 准备工作准备工作 --> 工作阶段1工作阶段1 --> 出发出发 --> 工作阶段2工作阶段2 --> 再次检查再次检查 --> 结束([结束做事])%% 虚拟结束([结束做事]) -.-> 打道回府%% 虚线style 打道回府 fill:#FFFFF0,stroke-dasharray:5,stroke-width:2px,stroke:#000

部分markdown工具正确渲染,下面是效果图的截图。
在这里插入图片描述

示例:有主流程、详细流程的流程

代码:

graph TDsubgraph 主要流程A[开始做事] --> B[准备工作]B --> C[工作阶段1]C --> D[工作阶段2]D --> E[结束做事]endsubgraph 准备工作direction RLF[准备1]G[检查清单]H[再次检查清单]endsubgraph 工作阶段1direction RLI[阶段1开始]J[阶段1结束]K[出发]endsubgraph 工作阶段2direction RLL[阶段2开始]M[阶段2事情1]N[一个事]O[另一个事]endsubgraph 结束做事direction RLP[再次检查]Q[收拾1]R[收拾2]endB --> 准备工作C --> 工作阶段1D --> 工作阶段2E --> 结束做事style A fill:#D5E8D4,stroke:#333,stroke-width:2pxstyle B fill:#DAE8FC,stroke:#333,stroke-width:2pxstyle C fill:#DAE8FC,stroke:#333,stroke-width:2pxstyle D fill:#DAE8FC,stroke:#333,stroke-width:2pxstyle E fill:#D5E8D4,stroke:#333,stroke-width:2pxstyle F fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle G fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle H fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle I fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle J fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle K fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle L fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle M fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle N fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle O fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle P fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle Q fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle R fill:#FFF2CC,stroke:#333,stroke-width:2px

效果图:

graph TDsubgraph 主要流程A[开始做事] --> B[准备工作]B --> C[工作阶段1]C --> D[工作阶段2]D --> E[结束做事]endsubgraph 准备工作direction RLF[准备1]G[检查清单]H[再次检查清单]endsubgraph 工作阶段1direction RLI[阶段1开始]J[阶段1结束]K[出发]endsubgraph 工作阶段2direction RLL[阶段2开始]M[阶段2事情1]N[一个事]O[另一个事]endsubgraph 结束做事direction RLP[再次检查]Q[收拾1]R[收拾2]endB --> 准备工作C --> 工作阶段1D --> 工作阶段2E --> 结束做事style A fill:#D5E8D4,stroke:#333,stroke-width:2pxstyle B fill:#DAE8FC,stroke:#333,stroke-width:2pxstyle C fill:#DAE8FC,stroke:#333,stroke-width:2pxstyle D fill:#DAE8FC,stroke:#333,stroke-width:2pxstyle E fill:#D5E8D4,stroke:#333,stroke-width:2pxstyle F fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle G fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle H fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle I fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle J fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle K fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle L fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle M fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle N fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle O fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle P fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle Q fill:#FFF2CC,stroke:#333,stroke-width:2pxstyle R fill:#FFF2CC,stroke:#333,stroke-width:2px

总结

鉴于实践经验少,因此画的流程图也少。从上文可以看到,有些图的样式不太美观,这需再细调。

另外,除那个有虚线的图是自己手工绘制外,其它均借用AI工具生成。

相关文章:

使用mermaid画流程图

本文介绍使用mermaid画流程图,并给出几个示例。 背景 目前,除有明确格式要求的文档外,笔者一般使用markdown写文档、笔记。当文档有图片时,使用Typora等软件可实时渲染,所见即所得。但如果文档接收方没有安装相关工具…...

大模型笔记:pytorch实现MOE

0 导入库 import torch import torch.nn as nn import torch.nn.functional as F 1 专家模型 #一个简单的专家模型,可以是任何神经网络架构 class Expert(nn.Module):def __init__(self, input_size, output_size):super(Expert, self).__init__()self.fc nn.L…...

HAL库USART中断接收的相关问题

文章目录 一、使用中断的步骤二、相关函数分析1、HAL_UART_IRQHandler2、UART_Receive_IT3、HAL_UART_Receive_IT4、UART_Start_Receive_IT5、总结 三、HAL库使用心得 一、使用中断的步骤 1、配置GPIO 2、配置USART1 3、设置UART1中断优先级(不开启手动中断&#x…...

@Transational事务注解底层原理以及什么场景事务会失效

Transactional的底层是如何实现的 底层是通过动态代理实现的。Spring Boot 在运行时会生成一个代理对象,该代理对象被注解的方法调用,并在方法调用前后进行事务管理,事务管理包括开启事务,提交事务或回滚事务等操作。 1开启事务 …...

Linux扩容磁盘

启动 fdisk sudo fdisk /dev/sda输入p命令查询分区列表 输入d命令删除所有分区 需要一个一个删 输入n命令创建新分区 40G可以不用输入,直接回车使用默认 输入w命令保存操作 查看分区情况 sudo fdisk -l会发现sda1不是启动分区(Boot列不是号&a…...

全面解析鸿蒙(HarmonyOS)开发:从入门到实战,构建万物互联新时代

文章目录 引言 一、鸿蒙操作系统概述二、鸿蒙开发环境搭建三、鸿蒙核心开发技术1. **ArkUI框架**2. **分布式能力开发**3. **原子化服务与元服务** 四、实战案例:构建分布式音乐播放器五、鸿蒙开发工具与调试技巧六、鸿蒙生态与未来展望结语 引言 随着万物互联时代…...

Uniapp 原生组件层级过高问题及解决方案

文章目录 一、引言🏅二、问题描述📌三、问题原因❓四、解决方案💯4.1 使用 cover-view 和 cover-image4.2 使用 subNVue 子窗体4.3 动态隐藏原生组件4.4 使用 v-if 或 v-show 控制组件显示4.5 使用 position: fixed 布局 五、总结&#x1f38…...

Android adb测试常用命令大全

目录 一、查看最上层成activity名字: 二、查看Activity的任务栈: 三、获取安装包信息 四、性能相关 1、显示CPU信息 : 2、查看CPU使用信息 3、内存信息(meminfo package_name or pid 使用程序的包名或者进程id显示内存信息) 4、电量信…...

linux的基础入门2

linux的root用户 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中,拥有最大权限的账户名为:root(超级管理员) 而在前期,我们一直使用的账户是普通的用户 普通用户的权限,一般在其HOME目录内是不受限的 一旦出了HOME目录…...

19.4.8 数据库综合运用

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 需要北风数据库的请留言自己的信箱。 本节中将通过实例综合展示对数据表的查询、增加、修改和删除。 【例 19.16】【项目&#xf…...

JAVA中的抽象学习

一、Java SE 中的抽象概念 在 Java 中,抽象(Abstraction)是面向对象编程的重要特性之一。抽象的核心思想是“只关注重要的特性,而忽略不重要的细节”。抽象通常通过抽象类和接口来实现,它帮助开发者将复杂的系统隐藏在…...

在 Go 中实现事件溯源:构建高效且可扩展的系统

事件溯源(Event Sourcing)是一种强大的架构模式,它通过记录系统状态的变化(事件)来重建系统的历史状态。这种模式特别适合需要高可扩展性、可追溯性和解耦的系统。在 Go 语言中,事件溯源可以通过一些简单的…...

加解密 | AES加、解密学习

加解密 | AES加、解密学习 你的代码实现了一个简单的AES(高级加密标准)加密和解密的测试程序。以下是对代码的分析和一些改进建议: 代码功能 初始化数据和密钥: 定义了一个16字节的输入数据 input_data。定义了一个16字节的AES…...

【学术投稿-2025年计算机视觉研究进展与应用国际学术会议 (ACVRA 2025)】CSS样式解析:行内、内部与外部样式的区别与优先级分析

简介 2025年计算机视觉研究进展与应用(ACVRA 2025)将于2025年2月28-3月2日在中国广州召开,会议将汇聚世界各地的顶尖学者、研究人员和行业专家,聚焦计算机视觉领域的最新研究动态与应用成就。本次会议将探讨前沿技术,…...

MongoDB 基本操作

一、数据库操作 1. 切换或创建数据库 使用use命令切换到指定数据库,若该数据库不存在,在首次插入数据时会自动创建。 use myDatabase 2. 查看所有数据库 使用show dbs命令查看 MongoDB 实例中的所有数据库。 show dbs 3. 删除当前数据库 使用db.…...

Eclipse JSP/Servlet 深入解析

Eclipse JSP/Servlet 深入解析 引言 随着互联网的快速发展,Java Web开发技术逐渐成为企业级应用开发的主流。在Java Web开发中,JSP(JavaServer Pages)和Servlet是两个核心组件,它们共同构成了Java Web应用程序的基础。本文将深入解析Eclipse平台下的JSP/Servlet技术,帮…...

Hyperledger caliper 性能测试

前言:Hyperledger caliper 的本质是使用node对被测试网络进行压力测试,因此需要nodejs。本次使用 Hyperledger caliper 0.5 对 fabric 1.4.6进行压测 准备条件:nodejs 16 (略 linux下 解压环境变量即可) # 创建工作…...

Record-Mode 备案免关站插件,让 WordPress 备案不影响 SEO 和收录

专为 WordPress 网站设计的实用工具,旨在帮助网站在备案期间无需关闭即可正常收录所有页面的信息,利于SEO。 功能特性 免关站展示:开启插件后,非管理员用户访问网站时,会看到以半透明遮罩层或不透明全屏遮罩样式呈现的…...

【Java 面试 八股文】Redis篇

Redis 1. 什么是缓存穿透?怎么解决?2. 你能介绍一下布隆过滤器吗?3. 什么是缓存击穿?怎么解决?4. 什么是缓存雪崩?怎么解决?5. redis做为缓存,mysql的数据如何与redis进行同步呢&…...

介绍几款免费的显示器辅助工具!

今天为大家介绍几款实用的显示器辅助软件,它们可以帮助你轻松切换显示源调节、显示器亮度,甚至优化显示效果,让你的屏幕使用体验更加便捷和舒适。 Monitor Brightness Adjuster-多屏幕亮度调节工具 如果你需要同时使用多个显示器&#xff0…...

synchronized 学习

学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...