Markdown语法(官方文档中文翻译)

英文原文:https://daringfireball.net/projects/markdown/syntax

Markdown语法

一、概述

1. 哲学

​ Markdown 旨在尽可能易于阅读和编写。

​ 然而,可读性高于一切。Markdown 格式的文档应按原样发布,以纯文本形式发布,无需查看 就像它已经用标签或格式说明标记一样。而 Markdown 的语法受到了几种现有文本转 HTML 过滤器的影响— 包括 Setext、atx、Textile、reStructuredText、 Grutatext 和 EtText — 最大的单一来源 Markdown 语法的灵感来自纯文本电子邮件的格式。

​ 为此,Markdown 的语法完全由标点符号的字符组成,标点符号经过精心挑选 看起来像他们的意思。例如,实际上在单词周围加上星号 看起来像强调。Markdown 列表看起来像列表。甚至 块引用看起来像引用的文本段落,假设你曾经 使用过的电子邮件。

2. 内联HTML

​ 对于 Markdown 语法未涵盖的任何标记,您只需使用 HTML 本身。无需在前面或将其分隔为表示您正在从 Markdown 切换到 HTML;您只需使用标签。

​ 唯一的限制是块级 HTML 元素——例如 <div><table><pre><p> 等必须与周围环境分开的内容,块的开始和结束标签应不得用制表符或空格缩进。Markdown 足够聪明,但不是在 HTML 块级标签周围添加额外的(不需要的) <p> 标签。

​ 例如,若要将 HTML 表添加到 Markdown 文章,请执行以下作:

This is a regular paragraph.

Foo
This is another regular paragraph.

​ 请注意,Markdown 格式语法不会在块级别内处理 HTML 标签。例如,不能在 *emphasis*处理HTML 块。

​ Span-level HTML 标签(例如 <span><cite><del> )可以是用于 Markdown 段落、列表项或标题中的任何位置。如果你想要,你甚至可以使用 HTML 标签代替 Markdown 格式;例如,如果您更愿意使用 HTML <a><img> 标签而不是 Markdown 的 链接或图像语法,直接去吧。与Span-level HTML 标签不同,Markdown 语法在 span 级标签。

3.特殊字符的自动转义

​ 在 HTML 中,有两个字符需要特殊处理: <& 。左尖括号用于开始标记;&符号是 用于表示 HTML 实体。如果要将它们用作文字字符,您必须将它们作为实体转义,例如 < 和 & .

​ Markdown 允许您自然地使用这些字符,在需要转义的时候替你完成这些任务。如果您使用 & 作为 HTML 实体,它保持不变;否则将被翻译 &amp;.

​ 因此,如果您想在文章中包含版权符号,您可以写:

1
&copy;

​ 而 Markdown 将不理会它。但如果你写:

1
AT&T

​ Markdown 会将其转换为:

1
AT&amp;T

​ 同样,由于 Markdown 支持内联 HTML,如果您使用 尖括号作为 HTML 标签的分隔符,Markdown 会将它们视为 这样。但如果你写:

1
4<5

​ Markdown 会将其转换为:

1
4&lt;5

​ 但是,在 Markdown 代码中spans 和块、尖括号和 & 符号始终自动编码。这使得它易于使用 Markdown 来编写有关 HTML 代码的文章。(与原始 HTML 相反,原始 HTML 是一个 编写 HTML 语法的格式很糟糕,因为每个 < 并且 & 在您的示例代码中需要转义。

二、块元素

1.段落和换行符

​ 段落只是一行或多行连续的文本,分开一个或多个空行。(空行是指任何看起来像 空白行 — 被视为仅包含空格或制表符的空白行)。普通段落不应用空格或制表符缩进。

​ “一行或多行连续文本”规则的含义是 Markdown 支持“硬换行”文本段落。这不同于大多数其他文本转 HTML 格式化程序(包括 Movable 键入的“转换换行符”选项),比如翻译每个换行符段落中的字符转换为 <br /> 标签。

​ 当您确实想使用 Markdown 插入 <br /> 中断标记时,您可以 以两个或多个空格结束一行,然后回车。

​ 是的,这需要更多的努力来创建一个 <br /> ,但是一个简单的 “每个换行符都是一个 <br /> ”规则不适用于 Markdown。 当您使用硬中断格式化它们时,Markdown 的电子邮件式块引用和多段落列表项效果最好,而且看起来更好。

2.头部

​ Markdown 支持两种样式的标题,Setext 和 atx。

​ Setext 样式的标题使用等号“下划线”(对于第一级 头部)和破折号(用于二级标题)。例如:

1
2
3
4
5
This is an H1
=============

This is an H2
-------------

​ 任意数量的下划线 =-都可以。

​ Atx 样式的标头在行首使用 1-6 个哈希字符, 对应于标头级别 1-6。例如:

1
2
3
4
5
# This is an H1

## This is an H2

###### This is an H6

​ 或者,您可以“关闭”atx 样式的标头。这纯粹是装饰 — 如果您认为它看起来更好,您可以使用它。这关闭哈希甚至不需要匹配哈希数 用于打开标题。(打开哈希值的数量 确定标头级别。:

1
2
3
4
5
# This is an H1 #

## This is an H2 ##

### This is an H3 ######

3.块

​ Markdown 使用电子邮件样式 > 字符进行块引用。如果你是熟悉在电子邮件中引用文本段落,然后您应该知道如何在 Markdown 中创建引用。如果你努力,它看起来最好换行并在每一行之前放一个 >

1
2
3
4
5
6
> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
>
> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
> id sem consectetuer libero luctus adipiscing.

​ Markdown 允许你偷懒,只把 >放在第一个硬换行段落的行之前:

​ 块引用可以通过添加额外的级别 >

1
2
3
4
5
> This is the first level of quoting.
>
> > This is nested blockquote.
>
> Back to the first level.

​ 块引用可以包含其他 Markdown 元素,包括标题、列表、 和代码块:

1
2
3
4
5
6
7
8
> ## This is a header.
>
> 1. This is the first list item.
> 2. This is the second list item.
>
> Here's some example code:
>
> return shell_exec("echo $input | $markdown_script");

​ 任何像样的文本编辑器都应该使电子邮件式的引用变得容易。例如,使用 BBEdit,您可以进行选择并选择“增加” 文本菜单中的报价级别。

4.列表

​ Markdown 支持有序(编号)和无序列表(项目符号)。

​ 无序列表使用星号、加号和连字符(可互换)作为列表标记:

1
2
3
*   Red
* Green
* Blue

​ 相当于:

1
2
3
+   Red
+ Green
+ Blue

​ 和:

1
2
3
-   Red
- Green
- Blue

​ 有序列表使用数字后跟句点:

1
2
3
1.  Bird
2. McHale
3. Parish

​ 请务必注意,您用于标记列表对 Markdown 生成的 HTML 输出没有影响。HTML 的 Markdown 从上面的列表中产生是:

1
2
3
4
5
<ol>
<li>Bird</li>
<li>McHale</li>
<li>Parish</li>
</ol>

如果你改为在 Markdown 中编写列表,如下所示:

1
2
3
1.  Bird
1. McHale
1. Parish

甚至:

1
2
3
3. Bird
1. McHale
8. Parish

​ 你会得到完全相同的 HTML 输出。关键是,如果你愿意的话, 您可以在有序的 Markdown 列表中使用序数,以便源代码中的数字与已发布 HTML 中的数字匹配。 但如果你想偷懒,你不必这样做。

​ 但是,如果您确实使用惰性列表编号,您仍然应该启动 带有数字 1 的列表。在未来的某个时候,Markdown 可能会支持 以任意数字开始有序列表。

​ 列表标记通常从左边距开始,但可以通过 最多三个空间。列表标记后面必须跟一个或多个空格 或 制表符。

​ 为了使列表看起来更美观,您可以使用悬挂缩进来包装项目:

1
2
3
4
5
*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
viverra nec, fringilla in, laoreet vitae, risus.
* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
Suspendisse id sem consectetuer libero luctus adipiscing.

​ 但如果你想偷懒,你不必:

1
2
3
4
5
*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
viverra nec, fringilla in, laoreet vitae, risus.
* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
Suspendisse id sem consectetuer libero luctus adipiscing.

​ 如果列表项用空行分隔,Markdown 会将 HTML 输出中标记中的 <p> 项目。例如,以下输入:

1
2
*   Bird
* Magic

​ 将变成:

1
2
3
4
<ul>
<li>Bird</li>
<li>Magic</li>
</ul>

​ 但是这个:

1
2
3
*   Bird

* Magic

​ 将变成:

1
2
3
4
<ul>
<li><p>Bird</p></li>
<li><p>Magic</p></li>
</ul>

​ 列表项可以由多个段落组成。每个后续的 列表项中的段落必须缩进 4 个空格 或一个制表符:

1
2
3
4
5
6
7
8
9
1.  This is a list item with two paragraphs. Lorem ipsum dolor
sit amet, consectetuer adipiscing elit. Aliquam hendrerit
mi posuere lectus.

Vestibulum enim wisi, viverra nec, fringilla in, laoreet
vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
sit amet velit.

2. Suspendisse id sem consectetuer libero luctus adipiscing.

​ 如果缩进后续的每一行,看起来都不错的段落,但在这里,Markdown 将允许您偷懒:

1
2
3
4
5
6
7
*   This is a list item with two paragraphs.

This is the second paragraph in the list item. You're
only required to indent the first line. Lorem ipsum dolor
sit amet, consectetuer adipiscing elit.

* Another item in the same list.

​ 要将块引用放在列表项中,块引用的 > 分隔符需要缩进:

1
2
3
4
*   A list item with a blockquote:

> This is a blockquote
> inside a list item.

​ 若要将代码块放入列表项中,代码块需要 缩进两次 — 8 个空格或两个制表符:

1
2
3
*   A list item with a code block:

<code goes here>

​ 值得注意的是,可以通过以下方式意外触发有序列表,通过写这样的内容:

1
1986. What a great season.

​ 换句话说,在任一段开头如果包含一个 数字-点-空格 的序列模式就会触发有序列表。为避免这种情况,您可以反斜杠转义句点:

1
1986\. What a great season.

5.代码块

​ 预格式化的代码块用于编写有关编程或 标记源代码。这些行不是形成正常的段落,而是 代码块的字面解释。Markdown 包装代码块 在 和 <code> 标签中 <pre>

​ 要在 Markdown 中生成代码块,只需缩进 至少以 4 个空格或 1 个制表符遮挡。例如,给定以下输入:

1
2
3
This is a normal paragraph:

This is a code block.

​ Markdown 将生成:

1
2
3
4
<p>This is a normal paragraph:</p>

<pre><code>This is a code block.
</code></pre>

​ 每个缩进级别(4 个空格或 1 个制表符)将被删除 代码块的行。例如,这个:

1
2
3
4
5
Here is an example of AppleScript:

tell application "Foo"
beep
end tell

​ 将变成:

1
2
3
4
5
6
<p>Here is an example of AppleScript:</p>

<pre><code>tell application "Foo"
beep
end tell
</code></pre>

​ 代码块一直持续到未缩进的行 (或文章结尾)。

​ 在代码块中,& 符号 ( & ) 和尖括号 ( <> ) 会自动转换为 HTML 实体。这使得它非常轻松的使用 Markdown 包含示例 HTML 源代码 — 只需粘贴它 并缩进它,Markdown 将处理编码 & 符号和尖括号。例如,这个:

1
2
3
<div class="footer">
&copy; 2004 Foo Corporation
</div>

​ 将变成:

1
2
3
4
<pre><code>&lt;div class="footer"&gt;
&amp;copy; 2004 Foo Corporation
&lt;/div&gt;
</code></pre>

​ 常规 Markdown 语法不会在代码块中处理。例如, 星号只是代码块中的字面星号。这意味着 使用 Markdown 编写 Markdown 自己的语法也很容易。

6.水平规则

​ 您可以通过 <hr /> 放置三个或 一行上更多的连字符、星号或下划线。如果你 希望,您可以在连字符或星号之间使用空格。每个 以下行将生成水平线:

1
2
3
4
5
6
7
8
9
* * *

***

*****

- - -

---------------------------------------

三、SPAN元素

1.链接

​ Markdown 支持两种样式的链接:内联链接和引用链接。

​ 在这两种样式中,链接文本都用 [方括号] 分隔。

​ 要创建内联链接,请立即使用一组常规括号 在链接文本的右方括号之后。括号内, 将 URL 放在您希望链接指向的位置,以及可选的 链接的标题,用引号括起来。例如:

1
2
3
This is [an example](http://example.com/ "Title") inline link.

[This link](http://example.net/) has no title attribute.

​ 将产生:

1
2
3
4
5
<p>This is <a href="http://example.com/" title="Title">
an example</a> inline link.</p>

<p><a href="http://example.net/">This link</a> has no
title attribute.</p>

​ 如果您引用的是同一服务器上的本地资源,您可以 使用相对路径:

1
See my [About](/about/) page for details.   

​ 引用样式链接使用第二组方括号,位于 放置您选择的标签以识别链接:

1
This is [an example][id] reference-style link.

​ 您可以选择使用空格来分隔括号集:

1
This is [an example] [id] reference-style link.

​ 然后,在文档中的任何位置,您可以像这样定义链接标签, 在一条线上:

1
[id]: http://example.com/  "Optional Title Here"

​ 那是:

  • 包含链接标识符的方括号(可选 从左边距缩进,最多使用三个空格);
  • 后面跟一个冒号;
  • 后跟一个或多个空格(或制表符);
  • 后跟链接的 URL;
  • (可选)后跟链接的标题属性,用 用双引号或单引号括起来,或用括号括起来。

​ 以下三个链接定义是等效的:

1
2
3
[foo]: http://example.com/  "Optional Title Here"
[foo]: http://example.com/ 'Optional Title Here'
[foo]: http://example.com/ (Optional Title Here)

​ 注意:Markdown.pl 1.0.1 中存在一个已知错误,该错误阻止了 单引号不用于分隔链接标题。

​ 链接 URL 可以选择用尖括号括起来:

1
[id]: <http://example.com/>  "Optional Title Here"

​ 您可以将 title 属性放在下一行并使用额外的空格 或用于填充的选项卡,这在较长的 URL 中往往看起来更好:

1
2
[id]: http://example.com/longish/path/to/resource/here
"Optional Title Here"

​ 链接定义仅用于在 Markdown 期间创建链接处理,并从 HTML 输出中的文档中删除。

​ 链接定义名称可以由字母、数字、空格和 标点符号 — 但它们不区分大小写。例如这两个 链接:

1
2
[link text][a]
[link text][A]

​ 是等价的。

​ 隐式链接名称快捷方式允许您省略 link,在这种情况下,链接文本本身用作名称。 只需使用一组空方括号——例如,链接单词 “Google”到 google.com 网站上,你可以简单地写:

1
[Google][]

​ 然后定义链接:

1
[Google]: http://google.com/

​ 由于链接名称可能包含空格,因此此快捷方式甚至适用于 链接文本中的多个单词:

1
Visit [Daring Fireball][] for more information.

​ 然后定义链接:

1
[Daring Fireball]: http://daringfireball.net/

​ 链接定义可以放置在 Markdown 文档中的任何位置。我 倾向于将它们紧随其后 使用过,但如果你愿意,你可以把它们都放在你的末尾 文档,有点像脚注。

​ 以下是参考链接的实际示例:

1
2
3
4
5
6
I get 10 times more traffic from [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"

​ 使用隐式链接名称快捷方式,您可以改为编写:

1
2
3
4
5
6
I get 10 times more traffic from [Google][] than from
[Yahoo][] or [MSN][].

[google]: http://google.com/ "Google"
[yahoo]: http://search.yahoo.com/ "Yahoo Search"
[msn]: http://search.msn.com/ "MSN Search"

​ 上述两个示例都将生成以下 HTML 输出:

1
2
3
4
<p>I get 10 times more traffic from <a href="http://google.com/"
title="Google">Google</a> than from
<a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a>
or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p>

​ 为了进行比较,这里是使用 Markdown 的内联链接样式:

1
2
3
I get 10 times more traffic from [Google](http://google.com/ "Google")
than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or
[MSN](http://search.msn.com/ "MSN Search").

​ 引用式链接的意义并不是它们更容易写。关键是,使用引用样式链接时,您源代码文档的可读性要高得多。比较上面的例子:使用 引用样式链接,段落本身只有 81 个字符 长;使用内联样式链接,它是 176 个字符;作为原始 HTML, 它是 234 个字符。在原始 HTML 中,标记比那里多 是文本。

​ 使用 Markdown 的引用样式链接,源文档更多 与在浏览器中呈现的最终输出非常相似。允许您将与标记相关的元数据移出段落, 您可以在不中断叙述流程的情况下添加链接。

2.强调

​ Markdown 将星号 ( * ) 和下划线 ( _ ) 视为指示符 强调。用一个 * 换行或 _ 将用 HTML <em> 标签;双重*_ 将用 HTML 包装 <strong> 标记。例如,此输入:

1
2
3
4
5
6
7
*single asterisks*

_single underscores_

**double asterisks**

__double underscores__

​ 将产生:

1
2
3
4
5
6
7
<em>single asterisks</em>

<em>single underscores</em>

<strong>double asterisks</strong>

<strong>double underscores</strong>

​ 您可以使用您喜欢的任何样式;唯一的限制是 必须使用相同的字符来打开和关闭强调范围。

​ 强调可以在单词的中间使用:

1
un*frigging*believable

​ 但是,如果您用空格包围 *_ ,它将被视为 字面星号或下划线。

​ 在它的位置生成一个字面星号或下划线 否则将用作强调分隔符,您可以反斜杠规避它:

1
\*this text is surrounded by literal asterisks\*

3.代码

​ 要指示代码的跨度,请用反引号 ( ` ) 将其包裹起来。与预先格式化的代码块不同,代码跨度指示普通段落。例如:

Use the ``printf()\ function.
将产生:

Use the printf() function.

​ 要在代码范围中包含文字反引号字符,您可以使用多个反引号作为开始和结束分隔符:

```` There is a literal backtick (`) here. \
这将产生以下内容:

There is a literal backtick (`) here.

​ 代码跨度周围的反引号分隔符可能包含空格 - 一个在开头之后,一个在结束之前。这允许您将代码范围开头或结尾的文字反引号字符:

A single backtick in a code span: `````

A backtick-delimited string in a code span: ```foo```
将产生:

A single backtick in a code span: `

A backtick-delimited string in a code span: `foo`

​ 使用代码跨度时,&符号和尖括号编码为 HTML实体,这使得包含示例 HTML 变得容易标签。Markdown 将改变这一点:

Please don’t use any `` tags.
到:

Please don't use any <blink> tags.

​ 你可以这样写:

&#8212; is the decimal-encoded equivalent of &mdash;.
生产:

&#8212; is the decimal-encoded equivalent of &mdash;.

4.图像

​ 诚然,设计一个将图像置于纯文本文档格式中的 “自然”语法是相当困难的 。

​ Markdown 使用类似于链接语法的图像语法,允许两种样式:内联和引用。

​ 内联图像语法如下所示:

1
2
3
![Alt text](/path/to/img.jpg)

![Alt text](/path/to/img.jpg "Optional title")

​ 那是:

  • 感叹号: ! ;
  • 后跟一组方括号,其中包含 alt 图像的属性文本;
  • 后跟一组括号,包含 URL 或路径 图像,以及一个包含在 double 中的可选 title 属性 或单引号。

​ 引用样式图像语法如下所示:

1
![Alt text][id]

​ 其中“id”是已定义图像引用的名称。图片参考 使用与链接引用相同的语法定义:

1
[id]: url/to/image  "Optional title attribute"

​ 在撰写本文时,Markdown 没有用于指定 图像的尺寸;如果这对您很重要,您可以简单地 使用常规 HTML <img> 标签。

四、杂项

1.自动链接

Markdown 支持用于为 URL 和电子邮件地址创建“自动”链接的快捷方式样式:只需用尖括号将 URL 或电子邮件地址括起来即可。这意味着,如果您想显示 URL 或电子邮件地址的实际文本,并且还要将其作为可点击的链接,您可以执行以下作:

1
<http://example.com/>

​ Markdown 会将其转换为:

1
<a href="http://example.com/">http://example.com/</a>

​ 电子邮件地址的自动链接的工作原理类似,不同之处在于 Markdown 还将执行一些随机化的小数和十六进制 实体编码,以帮助隐藏地址收集 垃圾邮件机器人。例如,Markdown 将改变:

1
<address@example.com>

​ 变成这样的东西:

1
2
3
4
<a href="&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65;
&#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;
&#109;">&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;
&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a>

​ 它将在浏览器中呈现为指向“address@example.com”的可点击链接。

​ (这种实体编码技巧确实会愚弄许多人,但不是大多数的地址收集机器人,但它绝对不会愚弄所有的他们。总比没有好,但以这种方式发布的地址 最终可能会开始接收垃圾邮件。)

2.反斜杠转义

​ Markdown 允许您使用反斜杠来转义生成文字字符,否则产生Markdown 的 格式化语法。例如,如果您想将一个单词括起来 使用文字星号(而不是 HTML <em> 标签),您可以使用 星号前的反斜杠,如下所示:

1
\*literal asterisks\*

​ Markdown 为以下字符提供反斜杠转义:

1
2
3
4
5
6
7
8
9
10
11
12
\   反斜杠
` 重音符
* 星号
_ 下划线
{} 花括号
[] 方括号
() 括号
# 井号
+ 加号
- 减号(连字符)
. 句点
! 感叹号

Markdown语法(官方文档中文翻译)
http://lfmem.com/计算机软件/Markdown语法(官方文档中文翻译)/
作者
LightningFox
发布于
2025年8月28日
许可协议