当前位置: 首页 > 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…...

科研绘图升级:用CMplot为你的基因组文章制作高颜值SNP密度图(R实战)

科研绘图升级:用CMplot为你的基因组文章制作高颜值SNP密度图(R实战) 在基因组学研究中,数据可视化不仅是结果展示的手段,更是科学叙事的重要语言。一张精心设计的SNP密度图,能够直观呈现全基因组范围内单核…...

GKD订阅管理实战手册:一站式解决Android自动化规则配置难题

GKD订阅管理实战手册:一站式解决Android自动化规则配置难题 【免费下载链接】GKD_THS_List GKD第三方订阅收录名单 项目地址: https://gitcode.com/gh_mirrors/gk/GKD_THS_List GKD订阅管理是Android自动化工具GKD的第三方订阅收录平台,为GKD用户…...

如何将Android电视变身全能上网终端:TV Bro电视浏览器终极指南

如何将Android电视变身全能上网终端:TV Bro电视浏览器终极指南 【免费下载链接】tv-bro Simple web browser for android optimized to use with TV remote 项目地址: https://gitcode.com/gh_mirrors/tv/tv-bro 还在为智能电视上网操作困难而烦恼吗&#xf…...

FABRK全栈框架:模块化设计与AI辅助开发实战解析

1. 项目概述:一个为AI时代而生的全栈开发框架如果你和我一样,在过去几年里反复搭建过各种SaaS应用、管理后台或者数据看板,你一定会对那种重复劳动感到厌倦。每次新项目启动,都要重新配置身份验证、集成支付、设计仪表盘组件、处理…...

Android MediaProjection实战:从权限适配到异常处理,构建Android Q+的稳定截屏录屏功能

1. 理解MediaProjection的核心机制 在Android Q及以上版本中,MediaProjection API是系统级截屏和录屏功能的唯一官方入口。与早期版本直接调用adb screencap或反射获取Surface不同,这套机制通过用户显式授权的方式实现隐私保护。我曾在多个项目中遇到过因…...

泛微OA ecology 9实战:手把手教你写一个能取表单数据的Java自定义接口

泛微OA Ecology 9深度开发:构建高效表单数据交互的Java接口实践 在当今企业数字化转型浪潮中,办公自动化系统(OA)作为核心支撑平台,其灵活性和扩展性直接影响着企业运营效率。泛微OA Ecology 9作为国内领先的协同办公平台,提供了丰…...

Java程序开发第七课

1. Java基础入门 Java特点:跨平台(JVM)、面向对象、健壮性(强类型、垃圾回收)。JDK、JRE、JVM关系: JDK (开发工具包) JRE 开发工具 (javac, java&#x…...

Zotero Duplicates Merger终极指南:3步告别文献重复困扰

Zotero Duplicates Merger终极指南:3步告别文献重复困扰 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 还在为Zotero文献库中堆积…...

工程师十年实战:从线缆地狱到桌面净土的理线系统指南

1. 从“线缆地狱”到“桌面净土”:一位工程师的十年理线实战录我的工作台,曾经是线缆的“百慕大三角”。USB线、耳机线、电源线、各种测试探头线……它们像藤蔓一样缠绕、垂落、堆积,最终在桌面上形成一个五彩斑斓、却令人绝望的“线缆地狱”…...

从Siri上车看车载语音交互:技术演进、产业融合与安全设计

1. 项目概述:当Siri首次驶入驾驶舱2012年洛杉矶国际车展上的一则新闻,在当时的汽车与科技圈激起了不小的涟漪。通用汽车宣布,其旗下的雪佛兰品牌将成为首批将苹果Siri语音助手集成到车载信息娱乐系统中的汽车制造商,首发车型包括雪…...