什么是 Markdown?
Markdown 是一种轻量级的标记语言, 可用于在纯文本文档中添加格式化元素.
- 专注于文字内容;
- 纯文本, 易读易写, 可以方便地纳入版本控制;
- 语法简单, 没有什么学习成本, 能轻松在码字的同时做出美观大方的排版.
为什么使用 Markdown?
Markdown 无处不在.StackOverflow、CSDN、掘金、简书、GitBook、有道云笔记、V2EX、光谷社区等主流的代码托管平台, 如 GitHub、GitLab、BitBucket、Coding、Gitee 等等, 都支持 Markdown 语法, 很多开源项目的 README、开发文档、帮助文档、Wiki 等都用 Markdown 写作.
Markdown 是纯文本可移植的.几乎可以使用任何应用程序打开包含 Markdown 格式的文本文件.如果你不喜欢当前使用的 Markdown 应用程序了, 则可以将 Markdown 文件导入另一个 Markdown 应用程序中. 这与 Microsoft Word 等文字处理应用程序形成了鲜明的对比, Microsoft Word 将你的内容锁定在专有文件格式中.
Markdown 是独立于平台的.你可以在运行任何操作系统的任何设备上创建 Markdown 格式的文本.
Markdown 能适应未来的变化.即使你正在使用的应用程序将来会在某个时候不能使用了,你仍然可以使用文本编辑器读取 Markdown 格式的文本。当涉及需要无限期保存的书籍、大学论文和其他里程碑式的文件时, 这是一个重要的考虑因素.
由于有大量免费工具的存在, 上手 Markdown 是很方便的.
比较遗憾的一点是各平台可能采用不同语言实现的 Markdown 解析引擎, 或采用同一解析引擎的不同版本, 而且可能有不同程度的定制与扩展, 这导致在不同平台上使用 Markdown 写作时体验并不完全一致, 但大体上可以达到同一水平.
你甚至都不需要下载任何程序, 只需要使用在线编辑器即可.
这里推荐几个在线 Markdown 编辑器:
在Pycharm, Visual Studio Code等编辑器中安装相关插件即可写.md文件.
Pycharm写.md文件教程
VSCode写.md文件教程
如有其他问题, 请自行搜索相关资料.
工作原理
Markdown 的工作原理是将纯文本内容转换为 HTML 代码, 并在浏览器中呈现.
具体而言, 有以下四步:
- 使用文本编辑器或 Markdown 专用的应用程序创建 Markdown 文件. 该文件应带有
.md
或.markdown
扩展名. - 在 Markdown 应用程序中打开 Markdown 文件.
- 使用 Markdown 应用程序将 Markdown 文件转换为 HTML 文档.
- 在 web 浏览器中查看 HTML 文件, 或使用 Markdown 应用程序将其转换为其他文件格式如 PDF.
基本语法
在Markdown中, 可以使用HTML标签来实现一些复杂的排版效果, 但Markdown语法更加简洁, 常用的语法如下:
标题语法
要创建标题, 请在单词或短语前面添加井号 (#
) .#
的数量代表了标题的级别.
Markdown语法 | HTML |
---|---|
# Heading level 1 | <h1>Heading level 1</h1> |
## Heading level 2 | <h2>Heading level 2</h2> |
### Heading level 3 | <h3>Heading level 3</h3> |
#### Heading level 4 | <h4>Heading level 4</h4> |
##### Heading level 5 | <h5>Heading level 5</h5> |
###### Heading level 6 | <h6>Heading level 6</h6> |
还可以在文本下方添加任意数量的 == 号来标识一级标题, 或者 — 号来标识二级标题.
不同的 Markdown 应用程序处理 # 和标题之间的空格方式并不一致, 为了兼容考虑, 请用一个空格在 # 和标题之间进行分隔.
段落语法
要创建段落, 请使用空白行将一行或多行文本进行分隔.
Markdown语法
This is a paragraph.
This is another paragraph.
HTML
<p>This is a paragraph.</p>
<p>This is another paragraph.</p>
不要用空格(spaces)或制表符(tabs)缩进段落.
换行语法
要创建换行, 请在上一行末尾使用两个或多个空格, 然后回车, 即可创建一个换行(<br>
).
Markdown语法
This is a line. #这里有两个空格
This is another line.
HTML
<p>This is a line.<br>
This is another line.</p>
但是不推荐这么做, 如果想要换行, 还是请使用通用的 HTML 标签 <br>
来实现.
强调语法
强调文本
可以使用粗体, 斜体来表示强调, 文本突出表示标记.
用两个星号 (**
) 或下划线 (__
) 包裹的文本会被转换为粗体.
用一个星号(*
) 或下划线(_
) 包裹的文本会被转换为斜体.
用三个星号 (***
) 或三个下划线 (___
) 包裹的文本会被转换为粗体加斜体.
用两个波浪线 (~~
) 包裹的文本会被转换为删除文本.
用两个等号 (==
) 包裹的文本会被转换为标记文本.(未生效时请使用HTML标签<mark>
包裹))
使用HTML标签<u>
包裹的文本会被转换为下划线.
粗体文本:**粗体文本** __粗体文本__
斜体文本:*斜体文本* _斜体文本_
删除文本:~~删除文本~~
标记文本:==标记文本== <mark>标记文本</mark>
下划线:<u>下划线文本</u>
粗体文本:粗体文本 粗体文本
斜体文本:斜体文本 斜体文本
删除文本:删除文本
标记文本:==标记文本== 标记文本
下划线:下划线文本
Markdown 应用程序在如何处理单词或短语中间的下划线上并不一致. 为兼容考虑, 在单词或短语中间部分加粗/斜体的话,请使用星号(asterisks).
要突出单词的中间部分, 请在字母前后各添加星号, 中间不要带空格.
键盘文本
使用 HTML 标签 <kbd>
包裹键盘文本.
<kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>Del</kbd>
Ctrl+Alt+Del
引用语法
要创建引用, 请在文本前面添加 >
符号.
Markdown语法
> This is a quote.
HTML
<blockquote>
<p>This is a quote.</p>
</blockquote>
This is a quote.
多个段落的块引用可以在每个段落之间的空白行添加一个 >
符号
Markdown语法
> This is a quote.
>
> This is another paragraph in the quote.
HTML
<blockquote>
<p>This is a quote.</p>
<p>This is another paragraph in the quote.</p>
</blockquote>
This is a quote.
This is another paragraph in the quote.
块引用可以嵌套, 在要嵌套的段落前添加一个 >>
符号.
Markdown语法
> This is a quote.
>> This is a nested quote.
HTML
<blockquote>
<p>This is a quote.</p>
<blockquote>
<p>This is a nested quote.</p>
</blockquote>
</blockquote>
This is a quote.
This is a nested quote.
引用的区块中也可以包含其它Markdown元素, 包括标题, 列表, 代码块等.
列表语法
Markdown的列表支持有序列表,无序列表以及特殊的任务列表.
有序列表
就是有顺序的列表, 使用 数字, 英文句点
后面加一个 空格
作为列表标记.
数字不必按数学顺序排列, 但是列表应当以数字 1 起始.(这是因为后续的数字会自动转换为正确的顺序)
Markdown语法
1. First item
2. Second item
3. Third item
HTML
<ol>
<li>First item</li>
<li>Second item</li>
<li>Third item</li>
</ol>
示例:
>
- First item
- Second item
- Third item
列表嵌套可使列表项包含多个段落. 列表项中的每个后续段落必须缩进 4个空格
或 1个制表符
即Tab, 代码块需要缩进 8个空格
或 2个制表符
.
Markdown语法
1. First item
1. First sub-item
2. Second sub-item
2. Second item
HTML
<ol>
<li>
<p>First item</p>
<ol>
<li>First sub-item</li>
<li>Second sub-item</li>
</ol>
</li>
<li>Second item</li>
</ol>
示例:
- First item
- First sub-item
- Second sub-item
- Second item
无序列表
就是无顺序的列表, 使用 +
, -
, 或 *
作为列表标记, 后面加一个 空格
作为列表标记.
Markdown语法
- First item
- Second item
- Third item
HTML
<ul>
<li>First item</li>
<li>Second item</li>
<li>Third item</li>
</ul>
示例:
- First item
- Second item
- Third item
请每个列表使用相同的标记符号.
嵌套列表项的语法与有序列表相同.
代码块语法
在代码块中, 符号(&
) 和尖括号(<
和>
) 会被自动转换为HTML实体。这使得使用Markdown包含HTML源代码变得非常容易——只需粘贴并缩进它, Markdown就可对特殊字符自动转义, 减免了处理编码特殊字符的麻烦.
代码片 (内联代码块)
要将单词或短语表示为代码, 请将其包裹在反引号 (`) 中, 如 this is a code snippet
.
代码块
引用代码时, 如果引用的语句为多行, 可在代码行首缩进 4个空格 或 1个制表符.
markdown
效果如下:
markdown
分割线语法
要创建分割线, 请在单独一行使用三个或三个以上的连字符(---
), 星号 (***
) 或下划线 (___
) 作为分隔符.
行内不能有其他字符, 但可以在其中插入空格.
这三种分隔线的渲染效果看起来都一样.
为了兼容性, 请在分隔线的前后均添加空白行.
链接语法
Markdown支持两种链接样式: 内联链接 和 引用链接. 在这两种样式中,链接文字都是用 方括号 [] 来标记
内联链接
链接文本放在中括号内, 链接地址放在后面的小括号中, 链接title可选, 放在双引号中.
如果你引用的是同一路径下的本地资源, 则可以使用相对路径.
Markdown语法
[链接文本](链接地址 "链接title")
HTML
<a href="链接地址" title="链接title">链接文本</a>
渲染效果如下:
这是我的博客
链接title是当鼠标悬停在链接上时会出现的文字, 这个title是可选的, 它放在圆括号中链接地址后面, 跟链接地址之间以空格分隔.
这是我的[博客](https://101.201.64.126/ "超级牛酷炸天的博客")
这是我的博客(鼠标悬停时显示)
引用链接
引用链接是在链接文字的括号后面再接上 第二组方括号 [], 在其中填入用以辨识链接的标签.其中链接标记可以是任意的字母, 数字或符号组合(不区分大小写), 但一般为了便于识别和管理, 通常使用有意义的名称.
然后在文档中的任何地方, 都可以像这样在一行中定义链接标签
[链接文字][标签]
然后在文档的其他位置(一般在文末)定义链接的具体地址和标题等信息, 同样链接标题部分是可选的.
[标签]: 链接地址 "链接标题"
这样, 就可以在文档中使用链接标签来引用链接地址和标题.
隐式链接名允许你省略链接标签的名称, 在这种情况下, 链接文字本身将用作名称, 只需在链接文字后面加上一组空的方括号.
[链接文字][]
然后定义链接
[链接文字]: 链接地址 "链接标题"
这样, 链接文字将会被自动链接到链接地址.
由于链接名称可能包含空格, 此快捷方式甚至适用于链接文字中的多个单词.
自动链接
使用尖括号(< >
)可以很方便地把URL或者email地址变成可点击的链接.
<https://www.google.com>
强调链接
强调链接, 在链接语法前后增加星号. 要将链接表示为代码, 请在方括号中添加反引号(`).
这是我的 *[博客](https://101.201.64.126/)* #这里需要有空格
这是我的 **[博客](https://101.201.64.126/)** #这里需要有空格
这是我的 `https://101.201.64.126/`
显示效果如下
这是我的 博客
这是我的 博客
这是我的 https://101.201.64.126/
不同的 Markdown 应用程序处理URL中间的空格方式不一样. 为了兼容性, 请尽量使用%20代替空格.
图片语法
插入链接与插入图片的语法很像, 区别在一个 ! 号.
Markdown语法

其余部分与链接语法相同.
Markdown没有用于指定图像尺寸的语法, 如果你需要的话, 你可以使用普通的 <img>
标签。
插入图片的地址需要图床, 图床工具用于上传图片获取URL地址, 推荐使用免费的图床.
转义字符语法
要显示原本用于格式化 Markdown 文档的字符, 请在字符前面添加反斜杠字符 .
\Markdown 为下列字符提供反斜线转义:
\ 反斜线
` 反引号
* 星号
_ 下划线
{} 花括号
[] 方括号
() 小括号
# 井号
+ 加号
- 减号(连字符)
. 英文句点
! 感叹号
内嵌 HTML 标签
对于 Markdown 涵盖范围之外的标签, 都可以直接在文件里面用 HTML 本身. 如需使用 HTML,不需要额外标注这是 HTML 或是 Markdown, 只需 HTML 标签添加到 Markdown 文本中即可.
行级内嵌 HTML 标签
HTML 的行级內联标签如 <span>
,<cite>
,<del>
等不受限制,可以在 Markdown 的段落,列表或是标题里任意使用.
依照个人习惯, 甚至可以不用 Markdown 格式, 而采用 HTML 标签来格式化. 例如:如果比较喜欢 HTML 的 <a>
或 <img>
标签, 可以直接使用这些标签, 而不用 Markdown 提供的链接或是图片语法. 当你需要更改元素的属性时(例如为文本指定颜色或更改图像的宽度), 使用 HTML 标签更方便些.
HTML 行级內联标签和区块标签不同, 在內联标签的范围内, Markdown 的语法是可以解析的.
This **word** is bold. This <em>word</em> is italic.
This word is bold. This word is italic.
区块标签
区块元素──比如 <div>
, <table>
, <pre>
, <p>
等标签, 必须在前后加上空行, 以便于内容区分. 而且这些元素的开始与结尾标签, 不可以用 tab 或是空白来缩进.
Markdown 会自动识别这区块元素, 避免在区块标签前后加上没有必要的<p>
标签.
例如在 Markdown 中加上一个HTML表格:
This is a regular paragraph.
<table>
<tr>
<td>Foo</td>
</tr>
</table>
This is another regular paragraph.
Markdown 语法在 HTML 区块标签中将不会被进行处理. 例如无法在 HTML 区块内使用 Markdown 形式的*强调*
.
扩展语法
Markdown 还支持一些扩展语法, 如脚注, 表格, 定义列表, 缩写, 数学公式, 代码高亮等. 并非所有Markdown应用程序都支持扩展语法元素, 如果没有, 请寻找
表格语法
要添加表格, 请使用三个或多个连字符(—)创建每列的标题,并使用管道(|)分隔每列. 可以选择在表的任一端添加管道.
| 表头1 | 表头2 | 表头3 |
| --- | --- | --- |
| 单元格1 | 单元格2 | 单元格3 |
| 单元格4 | 单元格5 | 单元格6 |
呈现的效果如下:
表头1 | 表头2 | 表头3 |
---|---|---|
单元格1 | 单元格2 | 单元格3 |
单元格4 | 单元格5 | 单元格6 |
单元格宽度可以变化, 但是呈现的输出将看起来相同.
为了快速创建表格, 可以使用表格生成器,将表格生成器创建的表格直接复制到Markdown文档中即可.
可以通过在标题行中的连字符的左侧, 右侧或两侧添加冒号(:)来控制列的对齐方式, 将列中的文本对齐到左侧, 右侧或中心.
| 左对齐 | 右对齐 | 居中对齐 |
| :--- | ---: | :---: |
| 单元格1 | 单元格2 | 单元格3 |
| 单元格4 | 单元格5 | 单元格6 |
呈现的效果如下:
左对齐 | 右对齐 | 居中对齐 |
---|---|---|
单元格1 | 单元格2 | 单元格3 |
单元格4 | 单元格5 | 单元格6 |
在表格中设置文本格式, 可以添加链接, 代码片强调, 不能添加标题, 块引用, 列表, 水平规则, 图像或HTML标签.
可以使用表格的HTML字符代码(|
)在表中显示竖线(|
)字符.
围栏代码块及代码高亮
如果需要将代码或文本格式化为各自的不同块并使用高亮显示, 可使用 3个反引号(“`) 包裹代码块, 并在首行反引号后面指明 语言标识符
Markdown语法
```[语言标识符]
在这里插入代码
```
例如:
```python
print("Hello, world!")
```
```c
#include <stdio.h>
int main() {
printf("Hello, world!");
return 0;
}
```
脚注语法
脚注使您可以添加注释和参考, 而不会使文档正文混乱. 当您创建脚注时, 带有脚注的上标数字会出现在您添加脚注参考的位置.读者可以单击链接以跳至页面底部的脚注内容.
要创建脚注参考, 请在方括号([^1]
)内添加插入符号和标识符. 标识符可以是数字或单词, 但不能包含空格或制表符. 标识符仅将脚注参考与脚注本身相关联. 在输出中, 脚注按顺序编号.
在括号内使用另一个插入符号和数字添加脚注, 并用冒号和文本([^1]: My footnote.
).不必在文档末尾添加脚注, 可以将它们放在除列表, 块引号和表之类的其他元素之外的任何位置.
如果编辑器不支持, 可使用HTML上标标签和链接语法以手动构建自定义脚注.
使用HTML上标标签在文档中定义脚注标记:<sup id="fnref1">[1](#fn1)</sup>
1
使用 ↩ 字符在文档底部定义脚注内容的返回标记:<b id="fn1">[↩](#fnref1)</b>
↩
为使多个脚注能够跳转脚注及回到链接, 脚注编号应每组对应, #与跳转id后面的值应相同.
定义列表语法
定义列表是一种特殊的列表, 它将术语或定义与其解释或定义联系起来. 定义列表使用 :
符号作为定义项的分隔符.
Term 1
: Definition 1
Term 2
: Definition 2
HTML
<dl>
<dt>Term 1</dt>
<dd>Definition 1</dd>
<dt>Term 2</dt>
<dd>Definition 2</dd>
</dl>
呈现效果如下:
Term 1
: Definition 1
Term 2
: Definition 2
任务列表
任务列表是一种特殊的列表, 它标记了任务的完成情况. 任务列表使用 [ ]
或 [x]
作为标记, 后面加一个 空格
作为列表标记.
Markdown语法
- [ ] Task 1
- [x] Task 2
- [ ] Task 3
HTML
<ul>
<li><input type="checkbox" disabled> Task 1</li>
<li><input type="checkbox" checked disabled> Task 2</li>
<li><input type="checkbox" disabled> Task 3</li>
</ul>
示例:
- [ ] Task 1
- [x] Task 2
- [ ] Task 3
使用emoji表情
有两种方法可以将表情符号添加到Markdown文件中: 将表情符号复制并粘贴到Markdown格式的文本中, 或者键入emoji shortcodes.
复制并粘贴表情符号
在大多数情况下,您可以简单地从Emojipedia (opens new window)等来源复制表情符号并将其粘贴到文档中. 许多Markdown应用程序会自动以Markdown格式的文本显示表情符号, 从Markdown应用程序导出的HTML和PDF文件应显示表情符号.
使用emoji shortcodes
一些Markdown应用程序允许您通过键入表情符号短代码来插入表情符号. 这些以冒号开头和结尾, 并包含表情符号的名称.
:joy:
例如:
😂
可以参考表情符号简码列表, 当然HTML标签也可以生成emoji表情, 详请自行查阅.
数学公式
Markdown支持LaTeX数学公式, 并通过MathJax渲染(视不同Markdown应用程序而定).
要在Markdown文档中插入行内数学公式, 请将公式放在一个美元符号($)内.
行间数学公式需要使用两个美元符号($$)将公式包裹起来.
其余语法参照LaTeX语法. 同时注意大部分复杂语法可能不支持.
$E=mc^2$
$$
\int_{a}^{b} x^2 dx
$$
呈现效果如下:
$E=mc^2$
$$
\int_{a}^{b} x^2 dx
$$
绘制流程图
Mermaid 流程图
语法文档:https://mermaid.js.org/syntax/flowchart
graph LR
A[开始] --> B[操作1]
B --> C[操作2]
C --> D[操作3]
D --> A[结束]
Mermaid 时序图
语法文档:https://mermaid.js.org/syntax/sequenceDiagram
sequenceDiagram
participant Alice
participant Bob
participant John as John
Alice->>John: Hello John, how are you?
loop Healthcheck
John->>John: Fight against hypochondria
end
Note right of John: Rational thoughts <br/>prevail...
John-->>Alice: Great!
John->>Bob: How about you?
Bob-->>John: Jolly good!
Mermaid 甘特图
语法文档:https://mermaid.js.org/syntax/gantt
gantt
dateFormat YYYY-MM-DD
title Adding GANTT diagram to mermaid
section A section
Completed task :done, des1, 2014-01-06,2014-01-08
Active task :active, des2, 2014-01-09, 3d
Future task : des3, after des2, 5d
Future task2 : des4, after des3, 5d
还有很多的扩展, 这里就不再举例了…
写在最后
耐心的编辑与排版很辛苦, 但对于读者的友好阅读是值得的. 排版是一门艺术OvO.
希望本文能帮助到你.