Markdown中Mermaid的使用
概述
什么是Mermaid?
- Mermaid是一种基于Javascript的绘图工具,使用类似于Markdown的语法,使用户可以方便快捷地通过代码创建图表。
- 项目地址:https://github.com/mermaid-js/mermaid
怎么使用Mermaid?
- 使用特定的Mermaid渲染器;
- 使用集成了Mermaid渲染功能的Markdown编辑器,如Typora。使用时,需要将代码块的语言选择为Mermaid。
(然而我自己使用的是vscode直接写源代码) <( ̄︶ ̄)>
- Mermaid能绘制哪些图?
- 饼状图:使用pie关键字,具体用法后文将详细介绍
- 流程图:使用graph关键字,具体用法后文将详细介绍
- 序列图:使用sequenceDiagram关键字
- 甘特图:使用gantt关键字
- 类图:使用classDiagram关键字
- 状态图:使用stateDiagram关键字
- 用户旅程图:使用journey关键字
参考:Mermaid从入门到入土——Markdown进阶语法的概述
样例
摘自:官方Examples
注:因为渲染原因,以下代码不是真的写在markdown代码块中的,而是写在mermaid代码块中的!
基本饼图
pie title NETFLIX |
pie title NETFLIX "Time spent looking for movie" : 90 "Time spent watching it" : 10
pie title What Voldemort doesn't have? |
pie title What Voldemort doesn't have? "FRIENDS" : 2 "FAMILY" : 3 "NOSE" : 45
基本时序图
sequenceDiagram |
sequenceDiagram Alice ->> Bob: Hello Bob, how are you? Bob-->>John: How about you John? Bob--x Alice: I am good thanks! Bob-x John: I am good thanks! Note right of John: Bob thinks a long
long time, so long
that the text does
not fit on a row. Bob-->Alice: Checking with John... Alice->John: Yes... John, how are you?
基本流程图
graph LR |
graph LR A[Square Rect] -- Link text --> B((Circle)) A --> C(Round Rect) B --> D{Rhombus} C --> D
带有一些样式的更大流程图
graph TB |
graph TB sq[Square shape] --> ci((Circle shape)) subgraph A od>Odd shape]-- Two line
edge comment --> ro di{Diamond with
line break} -.-> ro(Rounded
square
shape) di==>ro2(Rounded square shape) end %% Notice that no text in shape are added here instead that is appended further down e --> od3>Really long text with linebreak
in an Odd shape] %% Comments after double percent signs e((Inner / circle
and some odd
special characters)) --> f(,.?!+-*ز) cyr[Cyrillic]-->cyr2((Circle shape Начало)); classDef green fill:#9f6,stroke:#333,stroke-width:2px; classDef orange fill:#f96,stroke:#333,stroke-width:4px; class sq,e green class di orange
序列图:循环、alt 和 opt
sequenceDiagram |
sequenceDiagram loop Daily query Alice->>Bob: Hello Bob, how are you? alt is sick Bob->>Alice: Not so good :( else is well Bob->>Alice: Feeling fresh like a daisy end opt Extra response Bob->>Alice: Thanks for asking end end
序列图:循环中给自己的消息
sequenceDiagram |
sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts
prevail... John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good!
序列图:博客应用服务通信
sequenceDiagram |
sequenceDiagram participant web as Web Browser participant blog as Blog Service participant account as Account Service participant mail as Mail Service participant db as Storage Note over web,db: The user must be logged in to submit blog posts web->>+account: Logs in using credentials account->>db: Query stored accounts db->>account: Respond with query result alt Credentials not found account->>web: Invalid credentials else Credentials found account->>-web: Successfully logged in Note over web,db: When the user is authenticated, they can now submit new posts web->>+blog: Submit new post blog->>db: Store post data par Notifications blog--)mail: Send mail to blog subscribers blog--)db: Store in-site notifications and Response blog-->>-web: Successfully posted end end
Hexo对Mermaid的支持
在Hexo中,除了使用mermaid的代码块的方式,例如:
pie |
pie title Key elements in Product X "Calcium" : 42.96 "Potassium" : 50.05 "Magnesium" : 10.01 "Iron" : 5
还可以使用类似类似HTML?JSP?啥的标签来写:
例如:
{% mermaid %} |
pie
title Key elements in Product X
"Calcium" : 42.96
"Potassium" : 50.05
"Magnesium" : 10.01
"Iron" : 5
线上是能看见啦,但是线下。。。
上一个就不会这样
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 零泽!