
这篇指南分为两个部分:第一部分介绍 Markdown 标准语法(CommonMark),第二部分讲解 扩展语法(GFM)。如果你只想快速回忆语法,可直接跳转对应章节。
前言
其实我早该整理一下 Markdown。虽然在工作期间一直在使用 Markdown 写文档、笔记和博客,但从未系统地整理过它。刚好最近在梳理自己的知识体系时,正好借这个机会,重新总结一下 Markdown 的语法,也希望这篇文章对大家能有所帮助。
什么是 Markdown?我们为什么要使用它呢?
Markdown 诞生于 2004 年,通常的文件后缀为 .md 或 .markdown,由约翰·格鲁伯 John Gruber 和 亚伦·斯沃茨 Aaron Swartz 共同合作诞生。
它的核心理念是:让人类可读的纯文本,能直接转换为结构化的网页内容(HTML/XHTML)。
在使用 Markdown 写作时,我们可以更专注于内容本身,不用担心排版、字体或者样式等细节。也由于 Markdown 的轻量化、易读易写特性,并且对于图片、图表、数学式都有支持,目前许多网站都广泛使用 Markdown 来撰写帮助文档或是用于 论坛 上发表消息。如 GitHub、Reddit、Discord、Diaspora、Stack Exchange、OpenStreetMap、SourceForge、简书等等。同时也因为 Markdown 的语义化结构特性而被广泛应用于 LLM(大语言模型)当中,顺带一提本篇文章就是基于 Obsidian 编写的。
Makrdown的标准化
本章节介绍 Markdown 的通用标准语法,也就是 CommonMark 规范。这是所有 Markdown 编辑器的基础支持。
Markdown 有许多变体。以下是一些主要的 Markdown 标准和扩展:
- CommonMark:这是一个旨在标准化 Markdown 语法的项目,提供了一个明确的规范和参考实现。它解决了原始 Markdown 语法中的一些不一致性问题。
- GitHub Flavored Markdown (GFM):这是 GitHub 使用的 Markdown 变体,添加了一些特性,如任务列表、表格和自动链接等。
- Markdown Extra:这是对原始 Markdown 的扩展,添加了一些额外的功能,如表格、脚注和定义列表等。
- MultiMarkdown:这是对 Markdown 的进一步扩展,支持更多的格式和功能,如表格、脚注、数学公式等。
Markdown 的标准语法(CommonMark)
CommonMark 是目前 Markdown 的标准化规范,解决了原始语法中的模糊与不一致问题。
它定义了最核心的一组规则,几乎所有编辑器都支持。
段落与换行符
段落(Paragraph) 和 换行(Line Break) 有些时候在使用上看起来没有什么区别,但是在渲染的时候会有一些差异,理解好这两个概念可以在排版时让文字看起来更有层次和逻辑。
段落 Paragraph
一个段落由 一行或多行连续文本 组成,与下一个段落之间 必须空一行 才能被识别为新的段落。
这是第一行
这是第二行
其对应的 HTML 结构是: 
换行符(Line Break)
如果我们想在同一段落中换行,而不是另外起一个段落,就需要在行尾加上两个空格加上回车,这样就会生成一个 <br> 标签。
这是第一行
这是第二行(同一段中换行)
其对应的 HTML 结构是: 
标题 Headers
Markdown 使用 # 符号来表示标题的层级,# 的数量决定了标题的级别,从一级标题到六级标题分别对应 HTML 中的 <h1> 到 <h6> 标签。当然还有一些编辑器支持在标题后面加上 = 或 - 来表示一级和二级标题。
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题
一级标题
=
二级标题
-
其对应的 HTML 结构是:
强调 Emphasis
在 Markdown 中,可以使用星号 * 或下划线 _ 来表示强调文本。单个符号表示斜体,双符号表示粗体。
*斜体文本* 或 _斜体文本_
**粗体文本** 或 __粗体文本__
***粗斜体文本*** 或 ___粗斜体文本___
其对应的 HTML 结构是: 
反斜杠转义字符 Backslash Escape
有时候我们需要在文本中使用 Markdown 的特殊字符(如 *、#、_ 等),但又不希望它们被解析为 Markdown 语法,这时就可以使用反斜杠 \ 来转义这些字符。
这是一个星号 \*,这是一个井号 \#,这是一个下划线 \_
引用 Blockquotes
引用使用 > 符号来表示,可以嵌套使用多个 > 来表示多级引用。
> 这是一个引用
>> 这是一个嵌套引用
引用常用于提示、引文或评论说明。

列表 Lists
Markdown 支持有序列表和无序列表。
无序列表 Unordered Lists
无序列表使用 -、* 或 + 来表示。
- 项目一
- 项目二
- 子项目二点一
- 子项目二点二
* 项目三
+ 项目四


有序列表 Ordered Lists
有序列表使用数字加点(如 1.、2.)来表示。
1. 第一项
2. 第二项
1. 子项二点一
2. 子项二点二
3. 第三项
其对应的 HTML 结构是: 
引用常用于提示、引文或评论说明。
链接 Links
Markdown 支持两种类型的链接:行内链接和参考链接。
行内链接 Inline Links
行内链接的语法是 [链接文本](链接地址 "可选标题")。
[访问Google](https://www.google.com "Google首页")
其对应的 HTML 结构是: 
参考链接 Reference Links
参考链接的语法是先定义链接 [链接文本][引用标识],然后在文档的其他地方定义引用标识和链接地址。
gogole search[Google] [1] than from
[Yahoo] [2] or [MSN] [3].
[1]: http://google.com/ "Google"
[2]: http://search.yahoo.com/ "Yahoo Search"
[3]: http://search.msn.com/ "MSN Search"

代码块 Code Blocks
Markdown 支持行内代码和代码块
行内代码 Inline Code
行内代码使用反引号 ` 包裹。
这是一个行内代码示例: `console.log("Hello, World!");`

代码块 Code Blocks
代码块使用三个反引号 ``` 包裹,可以指定语言以启用语法高亮。
```javascript
console.log("Hello Markdown!");
```

不同编辑器对代码高亮支持略有差异,建议指定语言类型。
图片(Images)
Markdown 使用类似链接的语法来插入图片,语法是 。


水平线 Horizontal Rules
水平线可以使用三个或更多的 -、* 或 _ 来创建。
---
***
___

Markdown 扩展语法(GitHub Flavored Markdown,GFM)
以下语法为 GitHub Flavored Markdown 的扩展功能,大多数现代编辑器如 Obsidian、Typora、VS Code 等均支持。
任务列表 Task Lists
- [x] 已完成任务
- [ ] 待办任务
效果:
- 已完成任务
- 待办任务
表格 Tables
| 语法 | 描述 |
| ---- | ---- |
| Header | 标题 |
| Paragraph | 段落 |
Markdown 预览
删除线 Strikethrough
~~这是一段被删除的文本~~
效果:这是一段被删除的文本
自动链接 Auto Links
直接输入网址即可自动识别为链接。
https://github.com
Emoji 表情 Emoji
:smile: :rocket: :memo:
效果:😄 🚀 📝
语法高亮 Syntax Highlighting
```python
def hello():
print("Hello, Markdown!")
```

GFM 支持多种语言自动语法高亮,如 JavaScript、Python、HTML 等。
结语
通过本文的介绍,到这也就结束了,希望对大家有所帮助
链接
推荐阅读
- 在 Next.js 博客中添加 Giscus 评论区(完整指南)
之前一直想在博客里加个评论区,但不想用太复杂的系统。偶然发现 Giscus,用 GitHub 账户就能评论,而且外观和集成都很方便。这篇文章分享了我给博客添加 Giscus 评论功能的完整过程