龙空技术网

Typora笔记之绘制流程图详述(二)

清枫Jason 362

前言:

而今姐妹们对“计算n算法的流程图怎么做”大致比较着重,姐妹们都需要分析一些“计算n算法的流程图怎么做”的相关内容。那么小编在网摘上收集了一些关于“计算n算法的流程图怎么做””的相关内容,希望同学们能喜欢,各位老铁们一起来了解一下吧!

前言

之前已经发布了两篇Typora代码绘图的文章,如下:

1、Typora笔记之绘图综述

2、Typora笔记之绘制流程图详述(一)

本文接着对Typora通过mermaid插件实现代码绘制流程图进行详细介绍,希望能对感兴趣的朋友有所帮助。

本次分享的内容目录如下:

前言

1. Typora绘制流程图简介

2. mermaid简介

3. Typora利用mermaid插件绘制流程图典型样例

4. mermaid插件DSL语法及说明

结束语

参考资料

1. Typora绘制流程图简介1.1 Typora代码绘图原理

Typora代码绘图的实现原理:

(1)用某种 DSL 描述想要画的图;

(2)调用扩展程序(解析、渲染器)对DSL进行解析并渲染后动态生成相应图。

注:DSL (Domain Specific Language,特定领域语言)是为了解决某些特定场景下的任务而专门设计的语言。

1.2 Typora代码绘制流程图实现方式

Typora代码绘制流程图可以采用flowchart.js插件或mermaid插件两种方式实现。这两种方式的对比如下表所示:

Typora通过flowchart.js插件实现代码绘制流程图已经在上一篇文章中详细介绍了,本文只详细介绍Typora通过mermaid插件实现代码绘制流程图。

2. mermaid介绍

mermaid是一款免费开源的,能在浏览器和终端中运行的特定类型图DSL和SVG渲染器,可以通过DSL(图的文本表示)来绘制简单的SVG图。当前版本的mermaid已经支持多种特定类型图,包括:流程图(Flow Chart)、序列图(Sequence Diagram)、类图(Class Diagram))、状态图(State Diagram)、实体关系图(Entity Relationship Diagram)、用户旅程图(User Journey Diagram)、甘特图(Gantt Diagram)、饼图(Pie Chart)、Git图(Git Graph)等。

使用mermaid通过代码绘制图非常简单,原理是将mermaid代码(Plain Text)通过渲染器(Mermaid JavaScript Library)来转化成图(Graphs, Gantt Charts, and many other Diagrams)并显示。

注:Mermaid被提名并获得了2019年度“最令人兴奋的技术应用”类别的JS开源奖。

目前使用mermaid实现代码绘图有以下三种方法:

(一)使用mermaid Live Editor:(网址:)

如下图示,在左上侧的Code区编辑修改mermaid代码,右侧的Preview区就会实时显示出经渲染后的图;在右下侧,还能将渲染后的图直接下载成png格式的图片等。

(二)用HTML调用mermaid渲染器

大多数网络浏览器(例如Firefox,Chrome和Safari)都可以渲染mermaid,所以可以直接在html文件中添加mermaid代码,这样在打开html文件时浏览器就会直接完成mermaid的渲染工作,显示出相应图。

示例代码(MermaidHtmlTest.html):

浏览器打开html文件看到的效果:

(三)使用mermaid插件

由于mermaid的日益普及,已经存在许多包含mermaid渲染器的插件,比如编辑器插件就支持:Visual Studio Code、Sublime Text 3、Vim、Atom、Typora等。

本文就是此类应用场景,依托Typora上的mermaid插件实现代码绘制多种特定类型图。下面就进一步来进行详细介绍。

3. Typora利用mermaid插件绘制流程图典型样例

为了给大家更好的阅读体验,本文尝试先展示一个典型样例,然后再进行语法介绍。

该典型样例是我精心给大家准备的,里面融合了mermaid插件流程图各语法细节,包括:如何定义流程图(含布局方向)、如何定义节点(含节点标识、节点文本、节点类型)、如何定义节点连线(含连线序号、连线样式、连线标注、连线曲线样式)、如何定义子图(含嵌套子图)、如何自定义和应用节点样式和类、如何绑定节点点击事件、如何定义注释等。相信只要能把这个典型样例看懂了,那么你就算真正掌握了在Typora上利用mermaid插件绘制流程图,进而可以根据自己的需要来绘制所需要的流程图啦!

先来看下mermaid插件流程图典型样例效果(如下),是不是感觉还不错。

上面流程图的实现代码如下:

注:上述代码中最后第37-46行均为美化流程图所需,如不考虑美化则这些代码可以删除。

4. mermaid插件流程图DSL语法及说明

我们可以对照第3章的典型样例效果图对代码进行两遍浏览,首先对代码有个大致印象。接下来,我就对mermaid插件流程图DSL语法展开详细介绍。

4.1 整体语法概述

mermaid插件流程图DSL相对于flowchart.js插件DSL要复杂。其整体语法描述如下:

mermaid插件流程图DSL语法包括如下部分:

(1)mermaid关键字代码块部分

(2)定义流程图及布局方向部分

(3)定义流程图节点(含节点标识、节点文本、节点形状)

(4)定义流程图节点连线(含连线标注)

(5)定义流程图子图

(6)定义样式和类

(7)定义绑定节点点击事件

(8)定义注释

下面逐一详细介绍。

4.2 定义流程图(含布局方向)

Mermaid插件流程图DSL通过如下语法声明一个新图和图布局的方向。

一、定义流程图(含布局方向)语法定义

二、定义流程图(含布局方向)语法说明

每个Mermaid插件流程图DSL中只能包含一组定义流程图(含布局方向)。

语法定义中的关键字graph表示新建一个流程图,变量<direction>表示该流程图的布局方向。

语法定义中要求定义布局方向,不能省略。变量<direction>位置在关键字graph之后,中间可以留一个或多个空格,或者换行均可。

变量<direction>取值如下表(最常见的是“从上往下”和“从左往右”):

三、定义流程图(含布局方向)示例

4.3 定义节点

节点即流程图中每个文本块,包括开始、结束、处理、判断等。每个Mermaid插件流程图DSL中可以包含多个节点。

Mermaid插件流程图DSL中每个节点都有一个节点标识(nodeID)、节点文本(nodeText)以及节点形状。

一、定义节点(含节点标识、节点文本、节点形状)语法定义

二、定义节点语法概要说明

Mermaid插件流程图DSL中定义节点语法中:

(1)变量nodeID是节点标识,该标识在节点之间连接时会用到,是必选项。为方便后续对节点的使用和代码阅读,建议节点标识起有意义的名字,名字可以为中英文,但注意不能含全角符号。

(2)变量nodeText是节点文本,即显示在节点框内的文本内容。

(3)节点是通过不同的符号组合包裹节点文本来表示不同节点形状的。

三、定义节点文本详细说明

(1)如果节点文本中包含标点符号或破坏语法的特殊字符,则需要用双引号("")包裹起来。

(2)如果节点文本中包含HTML的转移字符,则使用该转义字符对应的十进制数。

(3)如果希望在节点文本中使用换行,请使用<br>替换换行。

节点文本示例代码:

经mermaid渲染后的节点文本显示效果如下:

四、节点形状详细说明

mermaid插件流程图DSL支持定义如下类型的节点形状:

(1)语法定义nodeID:为缺省节点,该nodeID既是节点标识,也是节点文本内容

(2)语法定义nodeID[nodeText]:为矩形节点,表示过程

(3)语法定义nodeID(nodeText):为圆角矩形节点,一般用于开始、结束

(4)语法定义nodeID{nodeText}:为菱形节点,表示决策判断

(5)语法定义nodeID>nodeText]:为非对称形状节点

(6)语法定义nodeID[/nodeText/]:为平行四边形1节点

(7)语法定义nodeID[\nodeText\]:为平行四边形2节点

(8)语法定义nodeID[/nodeText\]:为梯形1节点

(9)语法定义nodeID[/nodeText\]:为梯形2节点

(10)语法定义nodeID((nodeText)):为圆形节点

(11)语法定义nodeID[[nodeText]]:为子例程节点

(12)语法定义nodeID([nodeText]):为体育场状节点

(13)语法定义nodeID{{nodeText}}:为六角形节点

(14)语法定义nodeID[(nodeText)]:为圆柱状节点

五、各节点类型示例

示例代码如下:

经mermaid渲染后的显示效果如下:

4.4 定义节点连线

节点之间是通过连线进行连接的。连线是在流程图中将两个节点连接起来的线。

mermaid插件流程图DSL支持多种不同类型的连线,连线可以添加方向,也可以在添加标注,以增强流程图的可读性。

一、定义节点连线

(一)定义节点连线语法描述。

(二)连线符号共以下6种类型:

(1)无箭头细虚线:-.-

(2)无箭头细实线:---

(3)无箭头粗实线:===

(4)有箭头细虚线:-.->

(5)有箭头细实线:-–>

(6)有箭头粗实线:==>

(三)定义节点连线示例

示例代码如下:

经mermaid渲染后的各类型连线显示效果如下:

二、定义连线标注

(一)添加连线标注有以下两种方式,效果一样。

(二)连线标注类型共以下6种:

(1)带标注的无箭头细虚线:nodeC-.-|标注|nodeD或nodeC–.标注.-nodeD

(2)带标注的无箭头细实线:nodeC---|标注|nodeD或nodeC--标注---nodeD

(3)带标注的无箭头粗实线:nodeC===|标注|nodeD或nodeC==标注===nodeD

(4)带标注的有箭头细虚线:nodeC-.->|标注|nodeD或nodeC–.标注.->nodeD

(5)带标注的有箭头细实线:nodeC-->|标注|nodeD或nodeC–-标注-->nodeD

(6)带标注的有箭头粗实线:nodeC==>|标注|nodeD或nodec==标注==>nodeD

(三)连线标注示例

示例代码如下:

经mermaid渲染后的各类型带标注的连线显示效果如下:

三、定义节点连线链连接

定义节点连线时,可以在同一行中声明多条连线;也可以在同一行中声明多个节点。看起来就像链一样,所以也称为链连接。

链连接示例代码如下:

经mermaid渲染后的显示效果:

4.5 定义子图

子图是流程图中的部分流程的合集整理。

一、子图语法描述

mermaid插件流程图DSL定义子图的语法如下:

二、子图语法说明

(1)subgraph:是定义每个子图的关键字。

(2)<subgraphID>[subgraphName]:定义子图标识(subgrpahID)和子图标题(subgraphName),类似节点标识和节点文本。

(3)<end>:是每个子图结束的标志。

(4)流程图中可以定义一个或多个子图。

(5)子图还可以嵌套定义一个或多个子图。

(6)子图中支持多节点语句。

三、子图示例

子图示例代码:

经mermaid渲染后的子图显示效果:

4.6 定义样式和类

虽然Mermaid在提供了缺省的样式,但我们在实际使用中,为了区别个别节点或者连线,需要对节点和连线的样式做自定义操作。

一、定义节点样式

(一)定义节点样式语法:

Mermaid插件流程图DSL中可以对各节点的样式(如:背景色、文字颜色、边框颜色、边框宽度、边框线型等)进行自定义。定义节点样式的语法为:

(二)定义节点语法说明:

1、style:是定义节点样式关键字

2、<nodeID>:是节点标识,一条style语句只可以指定一个节点标识。

3、<style>:是节点的具体样式变量。具体节点样式项包括:

(1)fill:<#value>:节点框内填充颜色,如:fill:#FFFFFF

(2)color:<#value>:节点文本字体颜色,如:color:#FF0000

(3)font-style:<value>:节点文本字体类型,如:font-style:bold

(4)font-size:<value>:节点文本字号大小,如:font-size:150%

(5)stroke:<#value>: 节点边框颜色,如:stroke:#0000FF

(6)stroke-width:<...>: 节点边框宽度:如:stroke-width:2px

(7)stroke-dasharray:<x>,<y>:节点边框虚线断点,如:stroke-dasharray:6,6

等等

(三)自定义节点样式示例

可以将特定样式(例如较粗的边框或不同的背景颜色)应用于节点。

示例代码如下:

经mermaid渲染后的节点样式示例显示效果如下:

二、定义连线样式

(一)定义连线样式语法规则:

Mermaid插件流程图DSL中定义连线样式的语法规则:

(二)定义连线语法说明:

1、linkStyle:是定义连线样式关键字

2、<No>:是连线序号变量,可以指定一个、多个还是所有连线序号。

(1)每个节点都具有节点标识,故可以通过节点标识来对具体节点进行定位。但连线本身却没有连线标识,故无法类似节点一样可以通过连线标识来对具体连线进行定位。那么如何定位具体连线呢?Mermaid插件流程图DSL中通过给每条连线标序号(该连线序号起类似节点标识的作用),然后通过连线序号来实现对具体连线进行定位。连线序号规则:流程图DSL中第一条连线序号为0,第二条连线序号为1,以此类推,第n条连线序号为n-1。

(2)一条linkStyle语句中可以同时适用于多个连线序号,用逗号(,)加以分隔。

(3)一条linkStyle语句可以适用于所有连线序号,此时No被设置为:default。

3、interpolate <curvestyle>:定义连线的曲线样式,为可选项。interpolate是关键字,<curvestyle>:是连线的曲线样式变量,取值包括:basis、linear、cardinal等。

4、<style>:是连线的具体样式变量,针对一个连线可以同时指定多个样式,各样式项中间以逗号(,)加以分隔。连线的样式项包括:连线颜色(stroke)、粗细(stroke-width)等。

(三)自定义连线样式(颜色、粗细)示例

示例代码如下:

经mermaid渲染后的连线样式示例显示效果如下:

(四)自定义连线样式(颜色、粗细、连线曲线样式)示例

上图是缺省情况下mermaid流程图连线的曲线显示效果,如果觉得缺省情况下的流程图连线的曲线不太满意,则可以通过把curve style缺省值改为basis来改变连线的曲线显示效果。

示例代码如下:

经mermaid渲染后的连线样式示例(更改曲线样式后)显示效果如下:

三、定义样式类

为了方便样式的使用,可以自定义类来使用样式。

(一)自定义样式类语法规则:

Mermaid插件流程图DSL中定义自定义样式类的语法规则:

(二)自定义样式类语法说明:

(1)classdef:是定义样式类的关键字。

(2)<classname>:是定义样式类的名称,后续针对节点使用样式类时需要用到。

(3)<style>:是具体样式,每个样式类可以指定一个或多个样式项,中间以逗号(,)加以分隔。具体同节点样式<style>说明。

(4)<class>:是使用样式类的关键字。

(5)<nodeID>:是节点标识,用来定位即将使用样式类的具体节点。一个样式类可以同时应用于一个或多个节点,中间以逗号(,)加以分隔。

(6)<nodeText>:是节点文本,具体同节点<nodeText>说明。

(7)::::是定义节点时直接使用自定义样式类的关键字

(三)定义样式类及使用示例

示例代码:

经mermaid渲染后的自定义样式类示例显示效果如下:

4.7 绑定节点点击事件

Typora支持在mermaid插件流程图DSL中给节点绑定点击事件,语法如下:

如果想在一个流程图中,鼠标点击节点nodeA时会打开百度首页;点击节点nodeB时会打开网易首页。

上述流程图的实现代码如下:

4.8 定义注释

mermaid插件流程图DSL语法定义中允许输入注释,不过解析器在解析时将会忽略它们,故在最终显示的流程图中注释内容是看不到的。

一、注释语法定义

二、注释语法说明

语法定义中的关键字%%表示这是一个注释行,紧随其后的内容为注释内容。

(1)注释必须单独一行,并且必须以双百分号(%%)开头。

(2)从注释开始到下一个换行符之间的所有文本(包括任何流程图语法)都将被视为注释。

(3)注释可以放置在mermaid插件流程图DSL中的开头、中间空行、结束位置。

三、注释示例

注释示例代码:

示例渲染后的显示效果(注释并不显示):

结束语

通过上面内容的详细介绍,相信感兴趣的朋友们已经对Typora通过mermaid插件实现代码绘制流程图有了一个比较深入的了解。实际上代码绘制流程图并不太难,建议大家参考典型样例多练练手,加深下印象,很快就为你所用的。

接下来我将继续针对Typora代码绘制其他特定类型的图进行详细介绍,敬请大家关注后续文章!

文章中难免存在疏忽或理解不到之处,如果朋友们发现问题请评论私聊我,我会尽力给予反馈。欢迎大家一起讨论学习,共同进步!

本文为原创,如果文章对您有所帮助,喜欢的话就点个赞加关注支持一下哈:)

参考资料

撰写本文参考了如下资料:

标签: #计算n算法的流程图怎么做