Markdown 基本语法

本文介绍了最基本的 Markdown 语法规则、示例及其渲染生成的 HTML 样式,展示了在本博客 Hugo + FixIt 主题下的呈现效果。

信息

Hugo 是最受欢迎的开源静态网站生成器之一,号称是世界上最快的网站构建框架。
本博客目前使用 FixIt 主题,其 示例网站中提供了详尽的 中文文档

从 0.60 版本之后,Hugo 采用 Goldmark 作为其默认 Markdown 语法渲染器(详情见 Configure markup in Hugo.)。 Goldmark 渲染速度快,配置灵活且遵循 CommonMark 标准。

引用

Markdown 由 John Gruber 于 2004 年与 Aaron Swartz 合作开发。
推荐参考 John Gruber’s Markdown Syntax 了解学习 Markdown 语法。

本文仅出于笔者个人学习、使用、查阅目的,简要列出笔者常用的 Markdown 语法,仅供参考。

标题

语法

  • # 空格 标题内容

说明

  • # 个数对应标题级数
信息
Markdown 还支持其他 标题 样式,这里笔者选用了最简便的写法。
1
2
3
4
5
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题
1
2
3
4
5
<h2>二级标题</h2>
<h3>三级标题</h3>
<h4>四级标题</h4>
<h5>五级标题</h5>
<h6>六级标题</h6>

呈现的效果

二级标题

三级标题

四级标题

五级标题
六级标题
注意
标题前的数字编号为本站设置的 CSS 样式。不同 Markdown 编辑器因其设置不同,可能将相同 Markdown 文本渲染成不同的效果。

强调

斜体

语法

  • *斜体内容*
  • _斜体内容_
1
2
*前后各一个星号*
_前后各一个下划线_
1
2
<em>前后各一个星号</em>
<em>前后各一个下划线</em>

呈现的效果

前后各一个星号
前后各一个下划线

粗体

语法

  • **粗体内容**
  • __粗体内容__
1
2
**前后各两个连续星号**
__前后各两个连续下划线__
1
2
<strong>前后各两个连续星号</strong>
<strong>前后各两个连续下划线</strong>

呈现的效果

前后各两个连续星号
前后各两个连续下划线

删除线

语法

  • ~~删除内容~~
1
~~前后各两个波浪线~~
1
<del>前后各两个波浪线</del>

呈现的效果

前后各两个波浪线

组合

粗体、斜体以及删除线可以任意组合使用

1
2
3
4
***斜体和粗体***
~~**删除线和粗体**~~
~~*删除线和斜体*~~
~~***删除线和斜体和粗体***~~
1
2
3
4
<em><strong>斜体和粗体</strong></em>
<del><strong>删除线和粗体</strong></del>
<del><em>删除线和斜体</em></del>
<del><em><strong>删除线和斜体和粗体</strong></em></del>

呈现的效果

斜体和粗体
删除线和粗体
删除线和斜体
删除线和斜体和粗体

换行

由空行分隔的文本块会被 Markdown 识别为段落,每段文本都将被置于一对 HTML 段落标记 <p> </p> 中。 (这里的“空行”指任何看上去“空”的行,任何只有空格或制表符而没有其他字符的行都会被 Markdown 识别为空行。)

换行方式有两种:

  • 插入一个 空行 另起段落换行,后续文本将被至于一对新的 HTML 段落标记 <p> </p> 中。
  • 行末 空格 空格 回车 段落内换行,相当于在行末添加 HTML 换行标记 <br>
1
2
3
4
第一段文本。(行末加 空格 空格 回车)  
段落内换行。(下一行为空行)

空行后另起段落换行。
1
2
3
<p>第一段文本。(行末加 空格 空格 回车)<br>
段落内换行。(下一行为空行)</p>
<p>空行后另起段落换行。</p>

呈现的效果

第一段文本。(行末加 空格 空格 回车)
段落内换行。(下一行为空行)

空行后另起段落换行。

行距
段落间行距一般比段落内行距稍大。

引用

语法

  • > 空格 引用文本

说明

  • > 个数对应引用层数
  • 引用 中可包含 标题列表代码块等其他 Markdown 格式。
1
> 本段展示引用效果。
1
2
3
<blockquote>
<p>本段展示引用效果。</p>
</blockquote>

呈现的效果

本段展示引用效果。

引用可以嵌套:

1
2
3
> 这是第一层引用
>> 这是第二层引用
>>> 这是第三层引用
1
2
3
4
5
6
7
8
9
<blockquote>
    <p>这是第一层引用</p>
    <blockquote>
        <p>这是第二层引用</p>
        <blockquote>
            <p>这是第三层引用</p>
        </blockquote>
    </blockquote>
</blockquote>

呈现的效果

这是第一层引用

这是第二层引用

这是第三层引用

列表

说明

  • 若列表项之间以空行分隔,则每个列表项中的文本将会被置于一对 HTML 段落标记 <p> </p> 中。
  • 若列表项内包含多段文本,则每段文本的首行需要缩进 4 空格或 1 制表符。
  • 若列表项内包含 引用,则引用标识 > 需要缩进 4 空格或 1 制表符。
  • 若列表项内包含 代码块,则 代码块 文本需要缩进两次,即 8 空格或 2 制表符。

无序列表

语法

  • * 空格 列表项
  • + 空格 列表项
  • - 空格 列表项

说明

  • 无序列表可依缩进嵌套
1
2
3
4
5
6
7
8
9
* 星号无序列表
* 星号无序列表
* 星号无序列表
    + 嵌套的加号无序列表
    + 嵌套的加号无序列表
    + 嵌套的加号无序列表
- 减号无序列表
- 减号无序列表
- 减号无序列表
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<ul>
    <li>星号无序列表</li>
    <li>星号无序列表</li>
    <li>
        星号无序列表
        <ul>
            <li>嵌套的加号无序列表</li>
            <li>嵌套的加号无序列表</li>
            <li>嵌套的加号无序列表</li>
        </ul>
    </li>
</ul>
<ul>
    <li>减号无序列表</li>
    <li>减号无序列表</li>
    <li>减号无序列表</li>
</ul>

呈现的效果

  • 星号无序列表
  • 星号无序列表
  • 星号无序列表
    • 嵌套的加号无序列表
    • 嵌套的加号无序列表
    • 嵌套的加号无序列表
  • 减号无序列表
  • 减号无序列表
  • 减号无序列表

有序列表

语法

  • 数字 . 空格 列表项

说明

  • 有序列表可依缩进嵌套
  • 列表序号以第一个列表项的数字为基准,渲染时依次递增
  • 若不希望意外生成有序列表,可将 . 转义写作 \.,如:2023\. What a great year.
1
2
3
4
5
6
1. 有序列表
2. 有序列表
    5. 嵌套的有序列表
    4. 嵌套的有序列表
    3. 嵌套的有序列表
3. 有序列表
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<ol>
    <li>有序列表</li>
    <li>
        有序列表
        <ol start="5">
            <li>嵌套的有序列表</li>
            <li>嵌套的有序列表</li>
            <li>嵌套的有序列表</li>
        </ol>
    </li>
    <li>有序列表</li>
</ol>

呈现的效果

  1. 有序列表
  2. 有序列表 5. 嵌套的有序列表 4. 嵌套的有序列表 3. 嵌套的有序列表
  3. 有序列表

定义列表

语法

  • 术语
  • : 空格 定义内容
1
2
3
4
5
无序列表
: 列表项之间没有先后顺序关系,每个列表项前以 `·` 为标记。

有序列表
: 列表项之间有先后顺序关系,每个列表项前以数字编号为标记。
1
2
3
4
5
6
<dl>
    <dt>无序列表</dt>
    <dd>列表项之间没有先后顺序关系,每个列表项前以 <code>·</code> 为标记。</dd>
    <dt>有序列表</dt>
    <dd>列表项之间有先后顺序关系,每个列表项前以数字编号为标记。</dd>
</dl>

呈现的效果

无序列表
列表项之间没有先后顺序关系,每个列表项前以 · 为标记。
有序列表
列表项之间有先后顺序关系,每个列表项前以数字编号为标记。

任务列表

语法

  • */+/- 空格 [ ] 列表项:未完成的任务列表
  • */+/- 空格 [x] 列表项:已完成的任务列表
1
2
+ [ ] 未完成的任务列表
+ [x] 已完成的任务列表

呈现的效果

  • 未完成的任务列表
  • 已完成的任务列表

分割线

语法

  • ___(三个下划线,可不连续)
  • ---(三个减号,可不连续)
  • ***(三个星号,可不连续)
1
2
3
___
---
***
1
2
3
<hr>
<hr>
<hr>

呈现的效果




代码

说明

  • 代码 内的 &<> 字符会被 Markdown 转义为 &amp;&lt;&gt;
  • 代码 内的 Markdown 语法不会被渲染。

行内代码

语法

  • `代码内容`
1
在本行中,`<section></section>` 会被显示为 **代码**
1
<p>在本行中,<code>&lt;section&gt;&lt;/section&gt;</code> 会被显示为 <strong>代码</strong></p>

呈现的效果

在本行中,<section></section> 会被显示为 代码

说明

  • 若需要在代码内容中包含 `,可用多个 ` 作为代码的开始和结束分隔符, 如:
    ``这里有一个(`)符号`` -> 这里有一个(`)符号
  • 若代码内容的收尾为 `,则可在开始和结束分隔符与代码内容间加空格,如:
    行内代码语法: `` `代码内容` `` -> 行内代码语法:`代码内容`

缩进代码

代码块中每行均使用连续 4 空格作为缩进,Markdonw 会将代码块内容置于 <pre><code> </code></pre> 标签中。 相应的,渲染过程中会移除代码块的一层缩进。
HTML 中的 <pre> 标签可定义预格式化的文本:保留空格和换行符,同时呈现为等宽字体。

1
2
3
4
5
    一层缩进前段
        二层缩进前段
            三层缩进
        二层缩进后段
    一层缩进后段
1
2
3
4
5
6
7
8
9
<pre>
    <code>
    一层缩进前段  
        二层缩进前段  
            三层缩进  
        二层缩进后段  
    一层缩进后段  
    </code>
</pre>

呈现的效果

一层缩进前段  
    二层缩进前段  
        三层缩进  
    二层缩进后段  
一层缩进后段  

代码块

语法

```代码描述  
代码内容  
代码内容  
```

说明

  • 代码描述 通常为代码所采用的编程语言的文件扩展名,以供编辑器渲染语法高亮。
1
2
3
```Markdown
这是一段代码块
```
1
2
3
4
5
<pre markdown>
    <code>
    这是一段代码块
    </code>
</pre>

呈现的效果

1
这是一段代码块

表格

1
2
3
4
|  表头  |   表头  |  表头  |
|:------|:-------:|------:|
| 左对齐 | 居中对齐 | 右对齐 |
| 左对齐 | 居中对齐 | 右对齐 |
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<table>
    <thead>
        <tr>
            <th style="text-align:left">表头</th>
            <th style="text-align:center">表头</th>
            <th style="text-align:right">表头</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td style="text-align:left">左对齐</td>
            <td style="text-align:center">居中对齐</td>
            <td style="text-align:right">右对齐</td>
        </tr>
        <tr>
            <td style="text-align:left">左对齐</td>
            <td style="text-align:center">居中对齐</td>
            <td style="text-align:right">右对齐</td>
        </tr>
    </tbody>
</table>

呈现的效果

表头 表头 表头
左对齐 居中对齐 右对齐
左对齐 居中对齐 右对齐

语法

  • <超链接地址>
  • [超链接文本](超链接地址)
1
2
3
<https://www.newverse.wiki>
<newverse@126.com>
[Newverse](https://www.newverse.wiki)
1
2
3
<a href="https://www.newverse.wiki">https://www.newverse.wiki</a>
<a href="mailto:newverse@126.com">newverse@126.com</a>
<a href="https://www.newverse.wiki">Newverse</a>

呈现的效果(鼠标悬停在链接上时无标题提示):

https://www.newverse.wiki
newverse@126.com
Newverse

语法

  • [超链接文本](超链接地址 空格 "超链接标题")
1
[Newverse](https://www.newverse.wiki "这是一个标题提示。")
1
<a href="https://www.newverse.wiki" title="这是一个标题提示。">Newverse</a>

呈现的效果(鼠标悬停在链接上时有标题提示):

Newverse

引用超链接超链接文本超链接地址 分离,

  • 可通过 超链接标识 重复引用相对应的 超链接地址
  • 可将 超链接标识和地址 统一置于章节末尾或文档末尾,

使 Markdown 源文档更易于阅读。

语法

  • [超链接文本][超链接标识]
  • [超链接标识]: 空格 超链接地址 空格 "超链接标题"
1
2
3
[Newverse][the-website]

[the-website]: https://www.newverse.wiki/ "Newverse"
1
<a href="https://www.newverse.wiki" title="Newverse">Newverse</a>

呈现的效果

Newverse

说明:为使 Markdown 文档更易阅读和书写,引用超链接 的语法规则更友好

  • 超链接标题 可被置于下一行并任意缩进,
  • 超链接标识 不区分大小写,
  • 超链接标识超链接文本 一致,则可省略 超链接文本 之后的 超链接标识 只留: [超链接文本][]
  • 超链接标识 行的两处空格可替换为任意长度空格或制表符,以使多行文本对齐。

因此,推荐 使用 引用式超链接 以进一步提高 Markdown 文本的可读性。

定位超链接 可跳转至同一页面上的指定位置。

语法

  • 指定位置 {#超链接标识}
  • [超链接文本](#超链接标识)

说明

  • # 对应 CSS ID 选择器。
1
2
3
4
5
6
7
### 基本超链接 {#link-basic}
### 标题超链接 {#link-title}
### 引用超链接 {#link-refer}

[跳转至 -> 基本超链接](#link-basic)
[跳转至 -> 标题超链接](#link-title)
[跳转至 -> 引用超链接](#link-refer)
1
2
3
4
5
6
7
<h3 id="link-basic">基本超链接</h3>
<h3 id="link-title">标题超链接</h3>
<h3 id="link-refer">引用超链接</h3>

<a href="#link-basic">跳转至 -&gt; 基本超链接</a>
<a href="#link-title">跳转至 -&gt; 标题超链接</a>
<a href="#link-refer">跳转至 -&gt; 引用超链接</a>

呈现的效果

跳转至 -> 基本超链接
跳转至 -> 标题超链接
跳转至 -> 引用超链接

定位超链接 可以与 基础超链接 结合使用,跳转至指定页面的指定位置(一般为某级标题)。

语法

  • [超链接文本](超链接地址#超链接标识)
1
[John Gruber's Markdown syntax # Links](https://daringfireball.net/projects/markdown/syntax#link)
1
<a href="https://daringfireball.net/projects/markdown/syntax#link">John Gruber&rsquo;s Markdown syntax # Links</a>

呈现的效果

John Gruber’s Markdown syntax # Links

脚注超链接

脚注超链接 可看作 引用超链接定位超链接 的组合,可跳转至页尾或文末的脚注。

语法

  • 正文文本 [^脚注标识]
  • [^脚注标识]: 空格 脚注内容

说明

  • 脚注标识 可以是数字或单词,但不能包含空格及制表符。
  • 脚注标识 仅在脚注符号与脚注内容间建立链接,在渲染时脚注按出现顺序编号。
  • 脚注内容 可放在除 列表引用 以及 表格 等元素之外文档中的任何位置,在渲染时会统一放置在文末。
1
2
3
4
5
这里有一个示例脚注[^3]。
这里有第二个示例脚注[^label]。

[^3]: 这是第一个示例脚注的内容。
[^label]: 这是第二个示例脚注的内容。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
这里有一个示例脚注<sup id="fnref:1"><a href="#fn:1">1</a></sup>这里有第二个示例脚注<sup id="fnref:2"><a href="#fn:2">2</a></sup>
<ol>
    <li id="fn:1">
        这是第一个示例脚注的内容。<a href="#fnref:1">&#x21a9;</a>
    </li>
    <li id="fn:2">
        这是第二个示例脚注的内容。<a href="#fnref:2">&#x21a9;</a>
    </li>
</ol>

呈现的效果

这里有一个示例脚注1

这里有第二个示例脚注2

注意
Markdown 原始语法中并没有定义 脚注,其实现效果与具体的渲染器设置有关。
Hugo 采用的 Markdown 渲染器还为脚注内容添加了反向超链接,具体可查看上述 HTML 代码。

图片

图片 语法与 超链接 相似,只需在 超链接 前加一个感叹号 !

基本图片

语法

  • ![图片文本](图片地址)
1
![Wings of Liberty](https://www.newverse.wiki/images/WingsofLiberty.webp)
1
<img src="https://www.newverse.wiki/images/WingsofLiberty.webp" alt="Wings of Liberty"/>

呈现的效果

标题图片

语法

  • ![图片文本](图片地址 空格 "图片标题")
1
![Wings of Liberty](https://www.newverse.wiki/images/WingsofLiberty.webp "Title of Image")
1
<img src="https://www.newverse.wiki/images/WingsofLiberty.webp" alt="Wings of Liberty" title="Title of Image"/>

呈现的效果

Wings of Liberty

引用图片

语法

  • ![图片文本][图片标识]
  • [图片标识]: 空格 图片地址 空格 "图片标题"
1
2
3
![Wings of Liberty][PngUrl]

[PngUrl]: https://www.newverse.wiki/images/WingsofLiberty.webp "Title of Image"
1
<img src="https://www.newverse.wiki/images/WingsofLiberty.webp" alt="Wings of Liberty" title="Title of Image"/>

呈现的效果

Wings of Liberty

注意
图片 的渲染结果由渲染器的具体设置决定,Hugo 的 Markdown 渲染器充分利用了 HTML 中的 <figure> 标签来显示 图片标题

转义字符

若希望在文本中使用上述被 Markdown 语法识别为 语法标识 的字符时,可使用转义符号 \,如:

  • \\ -> \
  • \` -> `
  • \* -> *
  • \_ -> _
  • \# -> #
  • \+ -> +
  • \- -> -
  • \. -> .
  • \! -> !
  • \{\} -> {}
  • \[\] -> []
  • \(\) -> ()

内联 HTML 元素

可在 Markdown 文档中直接插入 HTML 标签、属性、样式等,从而获得 Markdown 中未定义的格式。
需要注意的是:

  • 块级的 HTML 元素,如:<div>``<table>``<pre>``<p>等,前后需要用空行去其他文本分隔开;且起止标签不能存在缩进。
  • 块级的 HTML 标签中的 Markdown 语法不会被渲染,内联 HTML 元素标签中的 Markdown 语法会被渲染。
1
2
3
4
5
6
7
Markdown 格式的段落。

<div class="myclass text-danger" style="text-align:center;">
	居中且标红的 <u>HTML</u></div>

Markdown 格式的段落。
1
2
3
4
5
<p>Markdown 格式的段落。</p>
<div class="myclass text-danger" style="text-align:center;">
	居中且标红的 <u>HTML</u></div>
<p>Markdown 格式的段落。</p>

呈现的效果:

Markdown 格式的段落。

居中且标红的 HTML

Markdown 格式的段落。

注释

利用 引用超链接超链接标识 语法可以生成注释,且该注释不会出现在渲染生成的 HTML 文档中。

语法

  • [注释内容]: 空格 #

说明

  • 上述格式实际是 超链接地址 为空的 定位超链接引用式 写法。
  • 引用超链接超链接标识 在渲染时仅用于匹配 超链接文本超链接地址,不会出现在最终的 HTML 文档中。
  • 建议在该注释前后各加一个空行,以保证其在各种渲染器下都能生效。
1
[这是一个注释,注释内容甚至不会出现在 HTML 文档中]: #

更一般的引入注释的方法是借用 HTML 中的注释:

1
<!-- 这是一段注释 -->
1
<!-- 这是一段注释 -->

呈现的效果(看不到下行的注释)

缩进

语法

  • &nbsp; 或者 &#160:半个英文字符
  • &ensp; 或者 &#8914:一个英文字符
  • &emsp; 或者 &#8915:一个中文字符
1
2
3
4
5
No indent.  
&nbsp;缩进半个英文字符。  
&ensp;缩进一个英文字符。  
&emsp;缩进一个中文字符。  
无缩进。

呈现的效果

No indent.
 缩进半个英文字符。
 缩进一个英文字符。
 缩进一个中文字符。
无缩进。


参考资料:


  1. 这是第一个示例脚注的内容。 ↩︎

  2. 这是第二个示例脚注的内容。 ↩︎

0%