使用 markdown语法绘制流程图

之前我写博客都是使用上传图片的方式来展示流程图,这种方法比较麻烦,还要自己画,考虑到markdown 语法非常流行,越来越多的人使用 markdown 来写csdn 博客,所以我想能不能用 markdown 快速的绘制流程图呢?答案是肯定的,本篇博客讲述如何使用markdown 语法来进行流程图绘制,语法比较简单,画出的流程图也比较好看。

使用mermaid 绘制流程图

一般语法结果如下所示:
```mermaid
graph 方向
内容 ……
```

方向

方向一共有4个,格式为从哪到哪,每一个方向由两个大写字母表示,大写字母是四个基本方向: 上:Top,下:Bottom,左:Left,右:Right 的首字母。

  • 从上到下:TB (有时候也写作 TD)
  • 从下到上:BT
  • 从左到右:LR
  • 从右到左:RL

内容

流程图主要由以下几种元素组成:

  • 基本节点图形
  • 连接线
  • 连接线上的注释

下面将分别介绍

1.基本节点图像

基本节点图像由两部分组成,一个唯一的id,用于标记节点的身份;节点内的注释内容。基本图像如图所示

矩形
圆角矩形
不对称矩形
菱形
圆形

分别表示如下:

  • 矩形的情况:id1[矩形]
  • 圆角矩形的情况:id2(圆角矩形)
  • 不对称矩形情况:id3>不对称矩形]
  • 菱形情况:id4{菱形}
  • 圆形情况:id5((圆形))

源代码:

```mermaid
graph TB
    id[矩形]
    id4(圆角矩形)
    id3>不对称矩形]
    id1{菱形}
    id2((圆形))
```\
2.连接线
  • A --> B:A带箭头指向B
  • A — B: A不带箭头指向B
  • A -.- B: A用虚线指向B
  • A -.-> B: A用带箭头的虚线指向B
  • A ==> B: A用加粗的箭头指向B

示意图如下:

A
B
A
B
A
B
A
B
A
B

源代码如下

```mermaid
graph TD
    A[A] --> B[B] 
    A1[A] --- B1[B] 
    A4[A] -.- B4[B] 
    A5[A] -.-> B5[B] 
    A7[A] ==> B7[B] 
```\
复制的时候去掉反斜杠
3.连接线上的注释

连接线上的注释其实就是在中间的位置加上注释

  • A – 描述 — B :A不带箭头指向B并在中间加上文字描述
  • A – 描述 --> B: A带箭头指向B并在中间加上文字描述
  • A -. 描述 .-> B :A用带箭头的虚线指向B并在中间加上文字描述
  • A == 描述 ==> B :A用加粗的箭头指向B并在中间加上文字描述

示意图如下:

描述
描述
描述
描述
A
B
A
B
A
B
A
B

源代码如下:

```mermaid
graph TB
    A[A] -- 描述 --- B[B] 
    A2[A] -- 描述 --> B2[B] 
    A3[A] -. 描述 .-> B3[B] 
    A4[A] == 描述 =\=> B4[B] 
```\

参考样例

以下参考样例来自 菜鸟教程,原文地址

1.标准流程图

Created with Raphaël 2.2.0 开始框 处理框 判断框(是或否?) 输入输出框 结束框 子流程 yes no

实现代码:

```mermaid
flowchat
st=>start: 开始框
op=>operation: 处理框
cond=>condition: 判断框(是或否?)
sub1=>subroutine: 子流程
io=>inputoutput: 输入输出框
e=>end: 结束框
st->op->cond
cond(yes)->io->e
cond(no)->sub1(right)->op
```\

2. 标准流程图(横向,注意看代码不同点)

Created with Raphaël 2.2.0 开始框 处理框 判断框(是或否?) 输入输出框 结束框 子流程 yes no

实现代码:

```mermaid
flowchat
st=>start: 开始框
op=>operation: 处理框
cond=>condition: 判断框(是或否?)
sub1=>subroutine: 子流程
io=>inputoutput: 输入输出框
e=>end: 结束框
st(right)->op(right)->cond
cond(yes)->io(bottom)->e
cond(no)->sub1(right)->op
```\

3. UML时序图

对象A 对象B 对象B你好吗?(请求) 对象B的描述 对象A的描述(提示) 我很好(响应) 你真的好吗? 对象A 对象B 标题:复杂使用

实现代码:

```mermaid
sequenceDiagram
对象A->>对象B: 对象B你好吗?(请求)
Note right of 对象B: 对象B的描述
Note left of 对象A: 对象A的描述(提示)
对象B-->>对象A: 我很好(响应)
对象A->>对象B: 你真的好吗?
```\

4.UML 时序图(复杂版)

对象A 对象B 小三 C 对象B你好吗?(请求) 对象B的描述 对象A的描述(提示) 我很好(响应) 你好吗 对象B找我了 你真的好吗? 我们是朋友 没人陪我玩 对象A 对象B 小三 C 标题:复杂使用

实现代码:

```mermaid
sequenceDiagram
Title: 标题:复杂使用
对象A->>对象B: 对象B你好吗?(请求)
Note right of 对象B: 对象B的描述
Note left of 对象A: 对象A的描述(提示)
对象B-->>对象A: 我很好(响应)
对象B->>小三: 你好吗
小三-->>对象A: 对象B找我了
对象A->>对象B: 你真的好吗?
Note over 小三,对象B: 我们是朋友
participant C
Note right of C: 没人陪我玩
```\

5.UML 标准时序图

张三 李四 王五 王五你好吗? 与疾病战斗 loop [ 健康检查 ] 合理 食物 看医生... 很好! 你怎么样? 很好! 张三 李四 王五 标题:复杂使用

实现代码:

```mermaid
%% 时序图例子,-> 直线,-->虚线,->>实线箭头
  sequenceDiagram
    participant 张三
    participant 李四
    张三->王五: 王五你好吗?
    loop 健康检查
        王五->王五: 与疾病战斗
    end
    Note right of 王五: 合理 食物 <br/>看医生...
    李四-->>张三: 很好!
    王五->李四: 你怎么样?
    李四-->王五: 很好!
```\

6.甘特图

Mon 06 Mon 13 Mon 20 需求 原型 UI设计 未来任务 学习准备理解需求 设计框架 开发 未来任务 耍 功能测试 压力测试 测试报告 设计 开发 测试 软件开发甘特图

实现代码:

```mermaid
        gantt
        dateFormat  YYYY-MM-DD
        title 软件开发甘特图
        section 设计
        需求                      :done,    des1, 2014-01-06,2014-01-08
        原型                      :active,  des2, 2014-01-09, 3d
        UI设计                     :         des3, after des2, 5d
    未来任务                     :         des4, after des3, 5d
        section 开发
        学习准备理解需求                      :crit, done, 2014-01-06,24h
        设计框架                             :crit, done, after des2, 2d
        开发                                 :crit, active, 3d
        未来任务                              :crit, 5d
        耍                                   :2d
        section 测试
        功能测试                              :active, a1, after des3, 3d
        压力测试                               :after a1  , 20h
        测试报告                               : 48h
```\

你可能感兴趣的:(实用工具,编程语言)