Markdown 是一种轻量级标记语言,由 John Gruber 于 2004 年创建。它的设计哲学是让文档尽可能地易读易写——源码本身就应该像纯文本一样可以直接阅读,而不需要被大量标签和格式指令淹没。

常用标记符号不超过十个,三十分钟即可上手。本文涵盖基础语法与扩展语法,每个语法均展示源码效果的对比。


一、标题

Markdown 支持两种标题语法:ATX 风格(# 号)和 Setext 风格(下划线)。

ATX 风格

语法:在行首使用 1~6 个 # 号,# 与标题文本之间需加一个空格。

1
2
3
4
5
6
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题

效果:

一级标题

二级标题

三级标题

四级标题

五级标题
六级标题

Setext 风格

= 标识一级标题,用 - 标识二级标题,数量不限:

1
2
3
4
5
一级标题
========

二级标题
--------

最佳实践: # 和标题文本之间始终保留一个空格,以确保兼容性。


二、段落与换行

段落

段落之间用空行分隔。不要用空格或制表符缩进段落。

1
2
3
这是第一个段落。

这是第二个段落。

效果:

这是第一个段落。

这是第二个段落。

换行

在行末添加两个以上空格再回车,即可创建换行(<br>):

1
2
这是第一行。
这是第二行。

效果:

这是第一行。
这是第二行。


三、强调

斜体

用单个 *_ 包裹文本:

1
2
*斜体文本*
_斜体文本_

效果:

斜体文本
斜体文本

粗体

用两个 **__ 包裹文本:

1
2
**粗体文本**
__粗体文本__

效果:

粗体文本
粗体文本

粗斜体

用三个 ***___ 包裹文本:

1
2
***粗斜体文本***
___粗斜体文本___

效果:

粗斜体文本
粗斜体文本

删除线

用两个 ~~ 包裹文本(扩展语法):

1
~~这段文本已被删除~~

效果:

这段文本已被删除

高亮

部分渲染器支持用 == 包裹文本实现高亮:

1
==这是高亮文本==

效果:

==这是高亮文本==


四、引用

基本引用

在段落前添加 > 符号:

1
2
> 这是一段引用文本。
> 引用可以包含多行。

效果:

这是一段引用文本。
引用可以包含多行。

嵌套引用

引用可以多层嵌套:

1
2
3
4
5
> 外层引用
>
> > 内层嵌套引用
> >
> > > 第三层嵌套

效果:

外层引用

内层嵌套引用

第三层嵌套

引用中的其他元素

引用内可以包含列表、代码等其他 Markdown 元素:

1
2
3
4
5
6
> #### 引用中的标题
>
> - 列表项一
> - 列表项二
>
> *斜体***粗体** 也可以使用。

效果:

引用中的标题

  • 列表项一
  • 列表项二

斜体粗体 也可以使用。


五、列表

无序列表

使用 *+- 作为标记符,三者可互换:

1
2
3
4
5
6
7
* 第一项
* 第二项
* 第三项

- 第一项
- 第二项
- 第三项

效果:

  • 第一项
  • 第二项
  • 第三项

有序列表

使用数字加 . 号。实际数字不影响输出顺序:

1
2
3
1. 第一项
2. 第二项
3. 第三项

效果:

  1. 第一项
  2. 第二项
  3. 第三项

嵌套列表

缩进即可创建子列表:

1
2
3
4
5
6
7
1. 第一项
1. 子项一
2. 子项二
2. 第二项
- 子项一
- 子项二
3. 第三项

效果:

  1. 第一项
    1. 子项一
    2. 子项二
  2. 第二项
    • 子项一
    • 子项二
  3. 第三项

列表中嵌入引用

1
2
3
* 第一项
> 这是引用内容
* 第二项

效果:

  • 第一项

    这是引用内容

  • 第二项

任务列表

使用 - [ ]- [x] 创建待办事项(扩展语法):

1
2
3
4
- [x] 已完成的任务
- [x] 学习 Markdown 基础语法
- [ ] 未完成的任务
- [ ] 编写更多文章

效果:

  • 已完成的任务
  • 学习 Markdown 基础语法
  • 未完成的任务
  • 编写更多文章

六、代码

行内代码

用反引号 ` 包裹:

1
使用 `printf()` 函数输出文本。

效果:

使用 printf() 函数输出文本。

代码块

用三个反引号 ``` 包裹,可指定语言实现语法高亮:

1
2
3
4
5
6
7
8
```c
#include <stdio.h>

int main() {
printf("Hello, World!\n");
return 0;
}
```

效果:

1
2
3
4
5
6
#include <stdio.h>

int main() {
printf("Hello, World!\n");
return 0;
}

更多语言示例:

1
2
3
def hello(name: str) -> str:
"""Say hello."""
return f"Hello, {name}!"
1
2
const greet = (name) => `Hello, ${name}!`;
console.log(greet("World"));

缩进代码块

每行缩进 4 个空格或 1 个制表符也可以创建代码块:

1
2
3
4
#include <stdio.h>
int main() {
return 0;
}

建议: 优先使用围栏式代码块(```),因为它支持语法高亮且不依赖缩进。


七、分隔线

使用三个以上的 *-_ 创建水平分隔线:

1
2
3
***
---
___

效果(三者等价):


最佳实践: 在分隔线前后各留一个空行,以确保兼容性。


八、链接

行内链接

1
2
3
[sym1018 的主页](https://sym1018.github.io)

[带标题的链接](https://sym1018.github.io "鼠标悬停显示此标题")

效果:

sym1018 的主页

带标题的链接

引用链接

将 URL 定义在文档其他位置,正文中只使用引用标记,适合同一链接多次出现的情况:

1
2
3
4
5
这是 [Google][1] 的链接。
这是 [sym1018 的主页][homepage] 的链接。

[1]: https://www.google.com
[homepage]: https://sym1018.github.io

效果:

这是 Google 的链接。
这是 sym1018 的主页 的链接。

自动链接

用尖括号包裹 URL 或邮箱地址,自动生成可点击的链接:

1
2
<https://sym1018.github.io>
<[email protected]>

效果:

https://sym1018.github.io
[email protected]


九、图片

行内图片

1
![替代文本](/img/black_100x100.png "可选标题")

效果:

纯黑

引用图片

1
2
3
![纯黑][img1]

[img1]: /img/black_100x100.png "纯黑图片"

效果:

纯黑

带链接的图片

将图片嵌套在链接语法中,点击图片即可跳转:

1
[![纯黑](/img/black_100x100.png)](https://sym1018.github.io)

效果:

纯黑


十、表格

使用 |- 创建表格,: 控制对齐方式(扩展语法):

1
2
3
4
| 左对齐 | 居中对齐 | 右对齐 |
| :--- | :---: | ---: |
| 单元格 | 单元格 | 单元格 |
| 左 | 中 | 右 |

效果:

左对齐 居中对齐 右对齐
单元格 单元格 单元格

十一、脚注

脚注用于在文末添加注释和参考(扩展语法):

1
2
3
4
这是一个脚注的示例[^1],还有一个命名脚注[^note]。

[^1]: 这是第一条脚注的内容。
[^note]: 脚注标识符可以是数字或文字,但不能包含空格和制表符。

效果:

这是一个脚注的示例^1,还有一个命名脚注^note


十二、转义字符

使用反斜杠 \ 转义 Markdown 特殊字符,使其按字面显示:

1
2
3
\* 这不是斜体 \*
\# 这不是标题
\[这不是链接\]

效果:

* 这不是斜体 *
# 这不是标题
[这不是链接]

可转义的字符:

字符 名称
\ 反斜杠
` 反引号
* 星号
_ 下划线
{} 花括号
[] 方括号
() 圆括号
# 井号
+ 加号
- 减号
. 点号
! 感叹号
` `

十三、内嵌 HTML

Markdown 支持直接嵌入 HTML 标签,适用于 Markdown 语法无法覆盖的场景:

1
2
3
4
5
6
7
8
9
10
11
12
这是一段包含 <kbd>Ctrl</kbd> + <kbd>C</kbd> 快捷键的文本。

<details>
<summary>点击展开</summary>

这里是折叠的内容,支持 **Markdown** 语法。

</details>

<center>居中文本</center>

H<sub>2</sub>O 是水的化学式,E = mc<sup>2</sup> 是质能方程。

效果:

这是一段包含 Ctrl + C 快捷键的文本。

点击展开

这里是折叠的内容,支持 Markdown 语法。

居中文本

H2O 是水的化学式,E = mc2 是质能方程。


十四、Emoji

有两种方式在 Markdown 中使用 Emoji(扩展语法):

直接粘贴

Emojipedia 等网站复制 Emoji 直接粘贴即可:

1
这篇文章很有趣 😄🎉👍

效果:

这篇文章很有趣 😄🎉👍

短代码

部分渲染器支持 :emoji_name: 格式:

1
:joy: :tent: :rocket:

短代码的支持取决于具体的 Markdown 渲染器。


附录:语法速查表

元素 语法
标题 # H1 ## H2 ### H3
粗体 **文本**
斜体 *文本*
删除线 ~~文本~~
引用 > 引用内容
有序列表 1. 项目
无序列表 - 项目
行内代码 `代码`
代码块 ```语言 ```
分隔线 ---
链接 [文本](URL)
图片 ![替代文本](URL)
表格 | 列1 | 列2 |
脚注 [^1]
任务列表 - [x] 已完成
转义 \特殊字符

参考资料