Markdown 语法
这一节介绍了你在使用 Markdown 语法写作时需要知道的概念。
部分语法限制在 Markdown Extra 中被更改,别忘了查看下方的 Markdown Extra 部分。
概述
哲学
Markdown 的目的是在可行的情况下尽可能地易于阅读和写作。
然而,可读性被强调在所有其他方面之上。一个 Markdown 格式的文档应该是可以作为纯文本发布的,而不像被标记过的标签或格式化说明。虽然 Markdown 的语法受到了几个现有的文本到 HTML 过滤器的影响,包括 Setext、atx、Textile、reStructuredText、Grutatext 和 EtText ,但 Markdown 的语法的最大灵感来源是纯文本电子邮件的格式。
为此,Markdown 的语法完全由标点符号组成,这些标点符号都是经过精心挑选的,以便看起来像它们的意思。例如,一个词周围的星号实际上看起来像 *强调* 。Markdown 列表看起来就像列表。假设你曾经使用过电子邮件,即使是块状引用也看起来像引用的文本段落。
内联 HTML
您不必了解 HTML 即可使用 Markdown 。但是如果你知道一些 HTML 标签,你可以在你想要的地方使用它们。例如,要将某些文本格式化为上标( Markdown 语法未涵盖的内容),您可以使用 <sup>
HTML 标记。
Be cautious about what you read on April 1<sup>st</sup>!
Markdown 会跳过这个标签而不去改变它,浏览器会把里面的文字显示为上标。
Be cautious about what you read on April 1st!
区块 HTML 元素,例如,<div>
、<table>
、<pre>
、<p>
等。必须用空行与周围的内容分开,区块的开始和结束标记不应使用制表符或空格缩进。
特殊字符的自动转义
在 HTML 中,有两个字符需要特别处理。<
和 &
。前者用于开始标签,后者用于表示 HTML 实体。如果你想把它们作为字面字符使用,你必须把它们作为实体来转义,例如, <
和 &
。而在 Markdown 中他们会被自动转义。
区块元素
段落
一个段落被定义为一个或多个文本行,每个段落中间至少有一个空行。
这是一个说明 Markdown 如何工作的小段落。
这一段跨越了很多行。
这是第二个段落。
下面是结果。
这是一个说明 Markdown 如何工作的小段落。
这一段跨越了很多行。
这是第二个段落。
标题
为了避免破坏本文结构,该部分不做效果展示。
你可以用 Markdown 向你的文档添加标题和副标题。两种语法允许你插入多达六个不同级别的标题。你可以使用 "SeText "语法编写第 1 和第 2 级的标题。
标题 1
========
标题 2
--------
"atx" 语法可以通过改变井号(#)的数量来创建任何级别的页眉。
# 标题 1 #
## 标题 2 ##
###### 6 级标题
注意,尾部的井号是可选的。
引用
也许你已经见过这种在电子邮件讨论中引用某人的方式。
关于线性代数的一句话:
> 在现实生活中,稳定线性系统的解决方式有两种:
> 直接计算(例如使用矩阵因式分解)或通过迭代程序产生一串接近精确解的向量。
关于线性代数的一句话:
在现实生活中,稳定线性系统的解决方式有两种:
直接计算(例如使用矩阵因式分解)或通过迭代程序产生一串接近精确解的向量。
列表
在创建有序列表和无序列表时,Markdown 会帮助你。
要创建一个有序列表,使用一个数字加点作为标记。
1. 北京
2. 上海
3. 山东
- 北京
- 上海
- 山东
要创建一个无序的列表,使用 *,+,或 – 作为项目标记。
- 太阳
- 月球
- 地球
- 太阳
- 月球
- 地球
你可以通过缩进一个 Tab(或四个空格)来嵌套二层列表。
* 原料
- 牛奶
- 鸡蛋
* 产出
1. 煎饼
2. 饼干
- 原料
- 牛奶
- 鸡蛋
- 产出
- 煎饼
- 饼干
如果您的列表包含整个段落,请在列表项之间留一个空行。要在同一列表项下写多个段落,请确保它们缩进一个 Tab(或四个空格)。
1. 第一段。
第二段。
2. 另一个列表项。
3. 又一个列表项。
-
第一段。
第二段。
-
另一个列表项。
-
又一个列表项。
代码
我们通过将一些行缩进一个 Tab(或四个空格)来写一个代码块。
如何标记强调:
使用 <em>HTML</em> 并使用 *Markdown* 。
在代码块内,你可以使用 HTML 标签或 Markdown 格式,在这两种情况下,语法都不会被解析,文本会被原样显示。
如何标记强调:
使用 <em>HTML</em> 并使用 *Markdown* 。
分割线
你可以通过在一行中放置三个或更多的 *,+,或 – 来产生一个水平分割线。如果你愿意,你可以在 *,+,或 – 之间使用空格。下面的每一行都会产生一个水平分割线。
* * *
***
*****
- - -
---------------------------------------
他们都代表了相同的分割线。
片段元素
链接
如果你想在你的文档中插入一个超文本链接,Markdown 给了你两种方法。你可以把你的链接写成内联式链接或引用式链接。
内联式链接允许将一些文本链接到另一个网页上。用 [括号] 把链接包围起来,然后把 URL 放在括号里。
[MyRedstone](https://www.myredstone.top/)
[MyRedstone](https://www.myredstone.top/ "我的网站")
第二个链接有一个标题,当你的鼠标停在链接上时,大多数网络浏览器会以工具提示的形式显示。标题是可选的。
Refence 式链接的工作原理是一样的,只是你不必把 URL 写在段落的中间,这样可以使文字更清晰。相反,你给链接起一个名字,并把 URL 写在一个单独的行上,可以在文档的任何地方。它看起来像这样。
这是一篇来自 [MyRedstone][rs] 的文章。
[rs]: https://www.myredstone.top/ "我的网站"
定义 URL 的那一行被从最终输出中剥离出来,括号里的文字成为一个链接。
同样,链接的标题(我的网站)是可选的。
或者你可以采用下面这种写法,他不需要额外的链接名。
这是一篇来自 [MyRedstone][] 的文章。
[MyRedstone]: https://www.myredstone.top/ "我的网站"
与上一种的效果相同。
本站不支持 Refence 式写法。
注意,如果链接的页面与 Markdown 所在网站相同,可以使用相对路径,即"图片"中所展示的例子。
强调
你可以在一个段落中强调你的文本的某些部分。有两种类型的强调,正常的强调和强烈的强调。在大多数网站上,正常的强调显示为斜体,而强烈的强调是粗体。
为了给 Markdown 中的某些文本加上强调,我们使用星号(*)或下划线(_)。用一个星号或一个下划线条包围一些文本,可以得到正常的强调,而用两个星号或两个下划线包围一些文本,则会得到强烈的强调。
*用星号的正常强调*
_用下划线的正常强调_
**用星号的强烈强调**
__用下划线的强烈强调__
这是一些用星号*强调*的文字。
得到这样的结果。
用星号的正常强调
用下划线的正常强调
用星号的强烈强调
用下划线的强烈强调
这是一些用星号强调的文字。
请注意,使用下划线和星号完全没有区别,两者的结果完全相同。请选择你最熟悉的一种。
代码
你可以通过使用反引号(`)在你的段落中间插入一个代码段,像这样。(使用单引号代替,因为显示错误)
请不要使用 '<blink>' 标签。
这将产生以下结果。
请不要使用 <blink>
标签。
图片
诚然,要设计出一种"自然"的语法来把图像放到纯文本文档格式中是相当困难的。
Markdown 使用类似"链接"的方式引用图片,只需要在链接格式前增加 !
即可。
![MyRedstone](/wp-content/uploads/2019/02/redstone.png)
![MyRedstone](/wp-content/uploads/2019/02/redstone.png "我的网站")
效果如下。
"MyRedstone"是当图片加载失败时会显示的替代文本,"我的网站"则和链接一样,作为图片的标题,当你的鼠标停在图片上时,大多数网络浏览器会以工具提示的形式显示。标题是可选的。
同样支持 Refence 式的链接图片,这里不再做展示。
本站不支持 Refence 式写法。
杂项
自动链接
如果你只是想能够点击插入在你文本中的一个 URL ,把 URL 放在角括号里,Markdown 会用它做一个可点击的链接。
<https://www.myredstone.top/>
<2824517378@qq.com>
反斜杠转义
Markdown 允许你使用反斜杠转义来生成字面字符,否则这些字符在 Markdown 的格式化语法中会有特殊含义。例如,如果你想用字面星号包围一个词,你可以在星号前使用反斜线,像这样。
\*字面星号\*
*字面星号*
Markdown 为以下字符提供反斜杠转义。
- \ 反斜杠
- ` 反引号
- * 星号
- _ 下划线
- {} 大括号
- [] 方括号
- () 小括号
- # 井号
- + 加号
- – 减号(连字符)
- . 点
- ! 感叹号
Markdown Extra 语法
内联 HTML
通过 Markdown ,你可以在你的文本中间插入 HTML 。当你需要一些 Markdown 语法没有提供但用HTML却很容易做到的功能时,这就非常有用。
但是 Markdown 在涉及到块元素时有一个严重的限制。从 Markdown 的语法文档中可以看出。
区块 HTML 元素,例如,
<div>
、<table>
、<pre>
、<p>
等。必须用空行与周围的内容分开,区块的开始和结束标记不应使用制表符或空格缩进。
这些限制在 Markdown Extra 中已经被取消了,取而代之的是这两个较为宽松的限制。
-
一个区块元素开头标签的缩进不能超过三个空格。因为根据标准的 Markdown 规则,任何缩进超过此数的标签都将被视为一个代码块。
-
当区块元素在一个列表内被发现时,它的所有内容都应该缩进与列表项缩进相同的空间。
HTML 区块内的 Markdown
以前在 Markdown 中,你不能把 Markdown 格式的内容包裹在 <div>
元素中。这是因为 <div>
是一个区块元素,而普通的 Markdown 并不对这样的内容进行格式化。
Markdown Extra 为你提供了一种在任何区块元素内放置 Markdown 格式的文本的方法。你可以通过在标签上添加一个数值为 1 的 Markdown 属性来做到这一点,像这样。
<div markdown="1">
这是 *真正的* Markdown 文本。
</div>
markdown="1"
属性将被剥离,<div>
的内容将被从 Markdown 转换为 HTML 。结果是这样的。
这是 真正的 Markdown 文本。
Markdown Extra 很聪明,它能根据你把 Markdown 属性放在哪个区块元素上而应用正确的格式。例如,如果你在一个 <p>
标签上应用 Markdown 属性,它只会在里面产生片段级的元素,它不支持列表、区块引用、代码块。
但有一些模棱两可的情况,比如说这个案例。
<table>
<tr>
<td markdown="1">这是 *真正的* Markdown 文本。</td>
</tr>
</table>
这是 真正的 Markdown 文本。 |
一个表格单元可以同时包含片段和区块元素。在像这样的情况下,Markdown Extra 将只应用片段级规则。如果你想启用区块元素结构,只需写上 markdown="block"
即可。
特殊属性
用 Markdown Extra ,你可以用一个属性块在某些元素上设置 id
和 class
属性。例如,在行末的标题之后的大括号里放上所需的 id
,前缀为井号,像这样。
标题 1 {#标题1}
========
## 标题 2 ## {#标题2}
然后,你可以像这样创建链接到同一个文章的不同部分。
[返回标题1](#标题1)
使用像这样的点添加一个类名,它可以被用作样式表的钩子。
## 网站 ## {.main}
你也可以添加具有简单值的自定义属性,格式是属性名称,后面跟等号与值。(目前不能包含空格)。
## 网站简介 ## {lang=fr}
ID 、多个类名和其他自定义属性可以通过将它们全部放入同一个特殊属性块来组合。
## 网站简介 ## {.main .shine #the-site lang=fr}
特殊属性块可以与下列元素配合。
- 标题
- 栅栏代码块
- 链接
- 图片
对于图像和链接,特殊属性块紧跟在包含地址的括号之后。
[link](url){#id .class}
![img](url){#id .class}
或者,如果使用 Refence 式的链接和图像,可以像这样把它放在定义行的最后。
[link][linkref] or [linkref]
![img][linkref]
[linkref]: url "optional title" {#id .class}
本站不支持 Refence 式写法。
栅栏代码块
Markdown Extra 引入了一种没有缩进的代码块。栅栏代码块就像 Markdown 的常规代码块一样,只是它们没有缩进,而是依靠开始和结束的栅栏线来划分代码块的界限。代码块以包含三个或更多的 ~
字符的行开始,并以包含相同数量的 ~
的一行结束。比如说
这是一个介绍的段落。
~~~~~~~~~~~~~~~~~~~~~
一个单行代码块
~~~~~~~~~~~~~~~~~~~~~
你也可以使用反引号反引号(\)来代替
~` 。
与缩进的代码块相反,栅栏代码块可以用空行开始和结束。
缩进的代码块不能紧跟在列表后面使用,因为列表缩进优先,但是栅栏代码块没有这种限制。
你可以指定一个适用于代码块的类别名称。如果你想根据不同的语言来设计不同的代码块,这很有用。或者你也可以用它来告诉语法高亮器应该使用什么语法。只需要在第一行栅栏的末尾添加语言,如 cpp
或 html
,可以在它前面可选的放置一个点。你也可以使用特殊属性块。
表格
Markdown Extra 对于简单的表格有它自己的语法。一个"简单"的表格看起来像这样。
第一列标题 | 第二列标题
--------- | ---------
一个单元格 | 一个单元格
一个单元格 | 一个单元格
第一行包含列标题,第二行包含标题和内容之间的强制性分隔线,接下来的每一行都是表格中的一行。列总是由管道(|)字符分隔,其结果是这样的。
第一列标题 | 第二列标题 |
---|---|
一个单元格 | 一个单元格 |
一个单元格 | 一个单元格 |
如果你愿意,你可以在表格的每一行添加一个前导和尾部管道。你可以使用你喜欢的形式。下面是一个例子,这将得到与上面相同的结果。
| 第一列标题 | 第二列标题 |
| --------- | --------- |
| 一个单元格 | 一个单元格 |
| 一个单元格 | 一个单元格 |
注意:一个表格需要在每一行上至少有一个管道,以便 Markdown Extra 能够正确地解析它。这意味着创建一个单列表格的唯一方法是在每一行中添加一个前导管道或尾部管道,或两者都添加。
你可以通过在分隔线上添加冒号来指定每一列的对齐方式。分隔线左边的冒号将使该列向左对齐,分隔线右边的冒号将使该列向右对齐,两边的冒号意味着该列向中间对齐。
| 物品 | 价格 |
| --------- | ----: |
| 计算机 | $1600 |
| 手机 | $12 |
| 管材 | $1 |
align
HTML 属性被应用于相关列的每个单元格,产生如下效果。
物品 | 价格 |
---|---|
计算机 | $1600 |
手机 | $12 |
管材 | $1 |
你可以使用常规的 Markdown 语法对每个单元格的内容应用片段级格式。
| 函数名 | 描述 |
| ------------ | ------------------- |
| 'help()' | 显示帮助窗口。 |
| 'destroy()' | **销毁你的计算机!** |
效果如下。
函数名 | 描述 |
---|---|
help() |
显示帮助窗口。 |
destroy() |
销毁你的计算机! |
定义列表
Markdown Extra 实现了定义列表。定义列表是由术语和这些术语的定义组成的,很像字典。
在 Markdown Extra 中,一个简单的定义列表是由一个单行术语和一个冒号及该术语的定义组成。
苹果
: 是蔷薇科苹果亚科
苹果属植物。
橙子
: 是芸香科柑橘属植物橙树的果实。
术语必须与前一个定义隔开一个空行。定义可以跨越多行,在这种情况下,它们应该缩进。但你也可以不这样做,如果你想偷懒,你可以忘记缩进一个跨越多行的定义,它仍然可以工作。
苹果
: 是蔷薇科苹果亚科
苹果属植物。
橙子
: 是芸香科柑橘属植物橙树的果实。
前面的每个定义列表都会给出相同的结果。
- 苹果
- 是蔷薇科苹果亚科
苹果属植物。 - 橙子
- 是芸香科柑橘属植物橙树的果实。
作为定义标记的冒号通常从左边的空白处开始,但最多可以缩进三个空格。定义标记的后面必须有一个或多个空格或制表符。
定义列表可以有一个以上的定义与一个术语相关联。
苹果
: 是蔷薇科苹果亚科
苹果属植物。
: 一家美国计算机公司。
橙子
: 是芸香科柑橘属植物橙树的果实。
效果如下。
- 苹果
- 是蔷薇科苹果亚科
苹果属植物。 - 一家美国计算机公司。
- 橙子
- 是芸香科柑橘属植物橙树的果实。
你还可以将一个以上的术语与一个定义联系起来。
术语 I
术语 II
: 定义 A
术语 III
: 定义 B
效果如下。
- 术语 I
- 术语 II
- 定义 A
- 术语 III
- 定义 B
而且,就像普通的列表项一样,定义可以包含多个段落,并包括其他区块元素,如区块引用、代码块、列表,甚至其他定义列表。
术语 I
: 这是一个有两段话的定义。
这是他的第二段。
: 这是术语 I 的第二个定义。
术语 II
: 该定义包含一个代码块,一个区块引用和一个表列。
代码块。
> 区块引用。
> 第二行。
1. 第一个元素
2. 第二个元素
结果如下。
- 术语 I
-
这是一个有两段话的定义。
这是他的第二段。
-
这是术语 I 的第二的定义。
- 术语 II
-
该定义包含一个代码块,一个区块引用和一个表列。
代码块。
区块引用。
第二行。- 第一个元素
- 第二个元素
脚注
脚注的工作方式主要像参考文献式的链接。脚注由两部分组成,文本中的一个标记,它将成为一个上标数字,一个脚注定义,它将被放在文件末尾的脚注列表中。一个脚注看起来像这样。
这是一些带脚注的文字。[^1]
[^1]: 而这就是脚注。
脚注的定义可以在文件的任何地方找到,但脚注总是按照它们在文本中的链接顺序列出。
每个脚注必须有一个独特的名称。该名称将被用来将脚注引用与脚注定义联系起来,但对脚注的编号没有影响。名称可以包含 HTML 中 id
属性中的任何有效字符。
脚注可以包含区块元素,这意味着你可以在一个脚注中放入多个段落、列表、区块引用等。它的工作原理与列表项相同,只要在脚注定义中把下面的段落缩进四个空格即可。
这是一些带脚注的文字。[^1]
[^1]: 而这就是脚注。
这是第二段话。
如果你希望能更好地对齐,你可以把脚注的第一行留空,把你的第一段放在下面。
这是一些带脚注的文字。[^1]
[^1]:
而这就是脚注。
这是第二段话。
缩写词
Markdown Extra 增加了对缩写的支持。它的工作原理非常简单,像这样创建一个缩写定义。
*[HTML]: 超文本标记语言
*[W3C]: 万维网联盟
然后,在文件的其他地方,写上这样的文字。
HTML 规范是由 W3C 维护的。
当鼠标悬停在缩写词上时,会弹出他的解释。
缩写词是区分大小写的,当定义为缩写词时,可以跨越多个单词。缩写也可能有一个空定义,如下。
有序列表
如果一个有序的列表以一个不同于 1 的数字开始,Markdown Extra 将在输出中尊重这一点。
强调
强调的规则与最初的 Markdown 语法相比略有变化。在 Markdown Extra 中,单词中间的下划线现在被当作字面字符处理。下划线强调只对整个单词有效。如果你只需要强调一个词的某些部分,仍然可以通过使用星号作为强调标记来实现。
例如,这种情况下。
请打开 "secret_magic_box" 文件夹。
Markdown Extra 不会把下划线转换为强调,因为它们在单词的中间。结果看起来像这样。
请打开 "secret_magic_box" 文件夹。
只要你像这样强调整个单词,用下划线强调仍然有效。
I like it when you say _you love me_.
效果如下。
I like it when you say you love me.
同样适用于强烈强调,在 Markdown Extra 中,你不能使用下划线在一个词的中间设置强强调,你必须使用星号作为强调标记。
反斜杠转义
Markdown Extra 将冒号(:)和管道(|)添加到你可以使用反斜杠转义的字符列表中。有了这个,你可以防止它们触发定义列表或表格。
模组
这部分模组在本网站通过特殊的"代码块"使用。
名称 | 参考文档 | 语法 |
---|---|---|
KaTeX | 参考文档 | 使用以 katex 为名称的区块代码块,或者以 $$ 包裹的片段代码。 |
Mermaid | 参考文档 | 使用以 mermaid 为名称的区块代码块 |
流程图 | 参考文档 | 使用以 flow 为名称的区块代码块 |
顺序图 | 参考文档 | 使用以 seq 为名称的区块代码块 |
GFM 工作清单语法
Github Flavored Markdown (GFM) 的工作清单功能。
- [x] Finish my changes
- [ ] Push my commits to GitHub
- [ ] Open a pull request
- Finish my changes
- Push my commits to GitHub
- Open a pull request
Githuber MD 扩充语法
HTML5 Figure 标签
%[Alt text](http://yoururl.com/test.jpg "Figcaption text")
上方 Markdown 文字转换结果:
<figure>
<img src="http://yoururl.com/test.jpg" alt="Alt text">
<figcaption>Figcaption text</figcaption>
</figure>
使用键盘样式的行间代码区块
快乐的使用 Markdown !!!
- 使用
ctrl
+c
复制文本。 - 使用
ctrl
+v
黏贴文本。 - 打开任务管理器:
ctrl
+alt
+del