Markdown语法

概述

Markdown是一种适用于网络的书写语言,Markdown 的理念是,能让文档更容易读、写和随意改。

Markdown中可以随意添加html标签,要制约的只有一些 HTML 区块元素――比如 <div>、<table>、<pre>、<p>等标签,必须在前后加上空行与其它内容区隔开,还要求它们的开始标签与结尾标签不能用制表符或空格来缩进。

请注意,在 HTML 区块标签间的 Markdown 格式语法将不会被处理,但区段(行内)标签内的Markdown语法是有效的

区块元素

段落和换行

一个Markdown段落由一个或多个连续的文本行组成,前后要有一个以上空行的,普通段落不该由空格和换行符缩进(缩进之后会变为可横滑展示的段落)

换行实现:连续两个以上空格+回车

标题

Markdown支持两种标题的语法

类 Setext 形式是用底线的形式,利用 = (最高阶标题)和 - (第二阶标题),= 和 - 任何数量都可以

1
2
3
4
标题H1
=======
标题H2
-------

类 Atx 形式则是在行首插入 1 到 6 个 # ,对应到标题 1 到 6 阶

1
2
3
# H1
## H2
###### H6

区块引用

语法:

1
2
>引用内容
>>可以嵌套引用

效果:

引用内容

可以嵌套引用

引用的区块内部也可以使用其他的Markdown语法

列表

Markdown支持有序列表和无序列表

无序列表使用星号、加号或者减号作为列表标记

1
2
3
*   Red
* Green
* Blue

等同于:

1
2
3
+   Red
+ Green
+ Blue

等同于:

1
2
3
-   Red
- Green
- Blue

效果:

  • Red
  • Green
  • Blue

有序列表使用数字加上一个英文句点

1
2
3
1. One
2. Two
3. Three

列表标记上使用的数字并不会影响输出的HTML效果,所以下面的写法跟上面输出一样的效果

1
2
3
1. One
8. Two
3. Three

效果:

  1. One
  2. Two
  3. Three

项目标记后面一定要接至少一个空格或制表符,markdownlint认为一个空格符合规范

如果列表项目间用空行分开,在输出 HTML 时 Markdown 就会将项目内容用 <p> 标签包起来

在行首出现数字-句点-空白,要避免这样的状况,你可以在句点前面加上反斜杠

1986\. What a great season.

代码区块

Markdown中建立代码区块很简单,只要缩进4个空格或一个制表符就可以

下面是一个代码块:

    代码区块内容

还有一种语法可以实现代码区块,代码块的前一行及后一行使用三个以上单反引号“`”包裹,代码内容无需缩进,可以生成带行号的代码区块

1
代码区块内容

代码块前后必须都有一个空行

分隔线

在一行中使用三个以上星号、减号、底线来建立一个分隔线,行内不能有其他东西,可以在星号或是减号中间插入空格

下面的写法都可以建立分隔线,markdownlint建议星号语法

***

* * *

*****

- - -

-------

_______

效果:


区段元素

链接

链接渲染为HTML的<a>标签

Markdown支持两种形式的链接语法:行内式和参考式

  • 行内式

    1
    [链接文本](链接url "链接标题")
  • 参考式
    链接内容定义:

    [id]: url "title"
    

    链接使用:

    [link text][id]
    

    可以先使用,后定义

    链接辨别标签可以有字母、数字、空白和标点符号,但是并不区分大小写

    隐式链接标记功能让你可以省略指定链接标记,即id = link text

    [Google][]
    

效果:
Markdown中文文档

强调

Markdown使用星号*和底线_作为标记强调字词的符号,会生成<em>标签(斜体),如果用两个*或_包起来的话,会生成<strong>标签(粗体)

*em*
_em_
**strong**
__strong__

# 倾斜加粗
***em strong***

# 可以组合使用
__*em strong*__
*__em strong__*

# 删除线
~~文字被删除~~

效果:
em
strong
em strong
文字被删除

代码

如果要标记一小段行内代码,可以用反引号`把它们包起来

1
`代码`

可以用多个反引号,实现代码中显示反引号`

图片

Markdown使用和链接相似的语法来标记图片,也可以分为行内式和参考是

  • 行内式

    ## 其中title可选
    ![Alt text](url "title")
    
  • 参考式
    图片定义:

    [id]: url "title"
    

    图片使用:

    ![Alt text][id]
    

目前为止,Markdown没有办法指定图片的宽高,如果需要的话,可以直接使用<img>标签

其他

反斜杠

Markdown支持使用反斜杠来转义一些字符,帮助我们插入这些字符

\   反斜线
`   反引号
*   星号
_   底线
{}  花括号
[]  方括号
()  括弧
#   井字号
+   加号
-   减号
.   英文句点
!   惊叹号

例如,要插入井号:\#

自动链接

Markdown支持使用简短的语法来插入网址和电子邮件信箱

处理网址:

<http://example.com/>

http://example.com/

处理电子邮件信箱:

<address@example.com>

address@example.com

以上两种语法,不加<>也有同样的效果,且生成的HTML标签也相同,因此个人看<>的作用是在链接插入文本行内时做隔断

内容目录

在段落中填写 [TOC] 以显示全文内容的目录结构,如下:
[TOC]

在支持该功能的编辑器中,一般只要没有语法错误,都能展示,还能自带锚点

脚注

脚注内容本身不会显示在文档中(界面上)

1
2
[^1]: 脚注内容
插入脚注的地方[^1]

插入脚注的地方^1

高级语法

表格

Markdown支持表格的形式来展现文本,表格的语法如下:

表头1 | 表头2 | 表头3
- | - | -
行1列1 | 行1列2 | 行1列3
行2列1 | 行2列2 | 行2列3

效果如下表:

表头1 表头2 表头3
行1列1 行1列2 行1列3
行2列1 行2列2 行2列3

表格对齐方式:我们可以指定表格单元格的对齐方式,冒号在左边表示左对齐,右边表示右对齐,两边都有表示居中。

表格单元格对齐:

表头1 | 表头2 | 表头3
:- | :-: | -:
行1列1 | 行1列2 | 行1列3
行2列1 | 行2列2 | 行2列3

效果如下表:

表头1 表头2 表头3
行1列1 行1列2 行1列3
行2列1 行2列2 行2列3

流程图

Markdown语法支持绘制流程图,流程图属于代码块的一种,可以直接使用代码段的语法书写(三个反引号包裹代码段),格式用flow表示,例如:

st=>start: 开始
e=>end: 结束
op1=>operation: 操作1
op2=>operation: 操作2
cond=>condition: 是否选择2

st->op1->cond
cond(yes)->op2->e
cond(no)->e

效果:

流程图语法大体分为两段:

  • 定义元素
  • 连接元素

定义元素:

1
2
3
4
5
6
7
8
9
语法:tag=>type: content:>url
1. 其中tag就是一个标签,第二段连接元素时使用这个标签
2. type的基本类型:
start
end
operation
condition
subroutine
inputoutput

连接元素:

1
语法:元素1(判断和位置控制,也可以没有)->元素2

一个复杂的流程图

# 定义元素
st=>start: 开始
e=>end: 结束
op1=>operation: 操作
cond=>condition: 条件
sub1=>subroutine: 子任务块
io=>inputoutput: 输入输出块

# 判断和位置控制
st->op1->cond
cond(yes)->io->e
cond(no)->sub1(right)->op1

效果:

其中()中用于判断和线条位置控制,也可以两者同时,例如cond(no, bottom)


以上语法能够满足大部分的Markdown文档编写需求了,如有错漏,欢迎指正~