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 |
请注意,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 实体,它保持不变;否则将被翻译 &.
因此,如果您想在文章中包含版权符号,您可以写:
1 | |
而 Markdown 将不理会它。但如果你写:
1 | |
Markdown 会将其转换为:
1 | |
同样,由于 Markdown 支持内联 HTML,如果您使用 尖括号作为 HTML 标签的分隔符,Markdown 会将它们视为 这样。但如果你写:
1 | |
Markdown 会将其转换为:
1 | |
但是,在 Markdown 代码中spans 和块、尖括号和 & 符号始终自动编码。这使得它易于使用 Markdown 来编写有关 HTML 代码的文章。(与原始 HTML 相反,原始 HTML 是一个 编写 HTML 语法的格式很糟糕,因为每个 < 并且 & 在您的示例代码中需要转义。
二、块元素
1.段落和换行符
段落只是一行或多行连续的文本,分开一个或多个空行。(空行是指任何看起来像 空白行 — 被视为仅包含空格或制表符的空白行)。普通段落不应用空格或制表符缩进。
“一行或多行连续文本”规则的含义是 Markdown 支持“硬换行”文本段落。这不同于大多数其他文本转 HTML 格式化程序(包括 Movable 键入的“转换换行符”选项),比如翻译每个换行符段落中的字符转换为 <br /> 标签。
当您确实想使用 Markdown 插入 <br /> 中断标记时,您可以 以两个或多个空格结束一行,然后回车。
是的,这需要更多的努力来创建一个 <br /> ,但是一个简单的 “每个换行符都是一个 <br /> ”规则不适用于 Markdown。 当您使用硬中断格式化它们时,Markdown 的电子邮件式块引用和多段落列表项效果最好,而且看起来更好。
2.头部
Markdown 支持两种样式的标题,Setext 和 atx。
Setext 样式的标题使用等号“下划线”(对于第一级 头部)和破折号(用于二级标题)。例如:
1 | |
任意数量的下划线 = 或 -都可以。
Atx 样式的标头在行首使用 1-6 个哈希字符, 对应于标头级别 1-6。例如:
1 | |
或者,您可以“关闭”atx 样式的标头。这纯粹是装饰 — 如果您认为它看起来更好,您可以使用它。这关闭哈希甚至不需要匹配哈希数 用于打开标题。(打开哈希值的数量 确定标头级别。:
1 | |
3.块
Markdown 使用电子邮件样式 > 字符进行块引用。如果你是熟悉在电子邮件中引用文本段落,然后您应该知道如何在 Markdown 中创建引用。如果你努力,它看起来最好换行并在每一行之前放一个 > :
1 | |
Markdown 允许你偷懒,只把 >放在第一个硬换行段落的行之前:
块引用可以通过添加额外的级别 > :
1 | |
块引用可以包含其他 Markdown 元素,包括标题、列表、 和代码块:
1 | |
任何像样的文本编辑器都应该使电子邮件式的引用变得容易。例如,使用 BBEdit,您可以进行选择并选择“增加” 文本菜单中的报价级别。
4.列表
Markdown 支持有序(编号)和无序列表(项目符号)。
无序列表使用星号、加号和连字符(可互换)作为列表标记:
1 | |
相当于:
1 | |
和:
1 | |
有序列表使用数字后跟句点:
1 | |
请务必注意,您用于标记列表对 Markdown 生成的 HTML 输出没有影响。HTML 的 Markdown 从上面的列表中产生是:
1 | |
如果你改为在 Markdown 中编写列表,如下所示:
1 | |
甚至:
1 | |
你会得到完全相同的 HTML 输出。关键是,如果你愿意的话, 您可以在有序的 Markdown 列表中使用序数,以便源代码中的数字与已发布 HTML 中的数字匹配。 但如果你想偷懒,你不必这样做。
但是,如果您确实使用惰性列表编号,您仍然应该启动 带有数字 1 的列表。在未来的某个时候,Markdown 可能会支持 以任意数字开始有序列表。
列表标记通常从左边距开始,但可以通过 最多三个空间。列表标记后面必须跟一个或多个空格 或 制表符。
为了使列表看起来更美观,您可以使用悬挂缩进来包装项目:
1 | |
但如果你想偷懒,你不必:
1 | |
如果列表项用空行分隔,Markdown 会将 HTML 输出中标记中的 <p> 项目。例如,以下输入:
1 | |
将变成:
1 | |
但是这个:
1 | |
将变成:
1 | |
列表项可以由多个段落组成。每个后续的 列表项中的段落必须缩进 4 个空格 或一个制表符:
1 | |
如果缩进后续的每一行,看起来都不错的段落,但在这里,Markdown 将允许您偷懒:
1 | |
要将块引用放在列表项中,块引用的 > 分隔符需要缩进:
1 | |
若要将代码块放入列表项中,代码块需要 缩进两次 — 8 个空格或两个制表符:
1 | |
值得注意的是,可以通过以下方式意外触发有序列表,通过写这样的内容:
1 | |
换句话说,在任一段开头如果包含一个 数字-点-空格 的序列模式就会触发有序列表。为避免这种情况,您可以反斜杠转义句点:
1 | |
5.代码块
预格式化的代码块用于编写有关编程或 标记源代码。这些行不是形成正常的段落,而是 代码块的字面解释。Markdown 包装代码块 在 和 <code> 标签中 <pre> 。
要在 Markdown 中生成代码块,只需缩进 至少以 4 个空格或 1 个制表符遮挡。例如,给定以下输入:
1 | |
Markdown 将生成:
1 | |
每个缩进级别(4 个空格或 1 个制表符)将被删除 代码块的行。例如,这个:
1 | |
将变成:
1 | |
代码块一直持续到未缩进的行 (或文章结尾)。
在代码块中,& 符号 ( & ) 和尖括号 ( < 和 > ) 会自动转换为 HTML 实体。这使得它非常轻松的使用 Markdown 包含示例 HTML 源代码 — 只需粘贴它 并缩进它,Markdown 将处理编码 & 符号和尖括号。例如,这个:
1 | |
将变成:
1 | |
常规 Markdown 语法不会在代码块中处理。例如, 星号只是代码块中的字面星号。这意味着 使用 Markdown 编写 Markdown 自己的语法也很容易。
6.水平规则
您可以通过 <hr /> 放置三个或 一行上更多的连字符、星号或下划线。如果你 希望,您可以在连字符或星号之间使用空格。每个 以下行将生成水平线:
1 | |
三、SPAN元素
1.链接
Markdown 支持两种样式的链接:内联链接和引用链接。
在这两种样式中,链接文本都用 [方括号] 分隔。
要创建内联链接,请立即使用一组常规括号 在链接文本的右方括号之后。括号内, 将 URL 放在您希望链接指向的位置,以及可选的 链接的标题,用引号括起来。例如:
1 | |
将产生:
1 | |
如果您引用的是同一服务器上的本地资源,您可以 使用相对路径:
1 | |
引用样式链接使用第二组方括号,位于 放置您选择的标签以识别链接:
1 | |
您可以选择使用空格来分隔括号集:
1 | |
然后,在文档中的任何位置,您可以像这样定义链接标签, 在一条线上:
1 | |
那是:
- 包含链接标识符的方括号(可选 从左边距缩进,最多使用三个空格);
- 后面跟一个冒号;
- 后跟一个或多个空格(或制表符);
- 后跟链接的 URL;
- (可选)后跟链接的标题属性,用 用双引号或单引号括起来,或用括号括起来。
以下三个链接定义是等效的:
1 | |
注意:Markdown.pl 1.0.1 中存在一个已知错误,该错误阻止了 单引号不用于分隔链接标题。
链接 URL 可以选择用尖括号括起来:
1 | |
您可以将 title 属性放在下一行并使用额外的空格 或用于填充的选项卡,这在较长的 URL 中往往看起来更好:
1 | |
链接定义仅用于在 Markdown 期间创建链接处理,并从 HTML 输出中的文档中删除。
链接定义名称可以由字母、数字、空格和 标点符号 — 但它们不区分大小写。例如这两个 链接:
1 | |
是等价的。
隐式链接名称快捷方式允许您省略 link,在这种情况下,链接文本本身用作名称。 只需使用一组空方括号——例如,链接单词 “Google”到 google.com 网站上,你可以简单地写:
1 | |
然后定义链接:
1 | |
由于链接名称可能包含空格,因此此快捷方式甚至适用于 链接文本中的多个单词:
1 | |
然后定义链接:
1 | |
链接定义可以放置在 Markdown 文档中的任何位置。我 倾向于将它们紧随其后 使用过,但如果你愿意,你可以把它们都放在你的末尾 文档,有点像脚注。
以下是参考链接的实际示例:
1 | |
使用隐式链接名称快捷方式,您可以改为编写:
1 | |
上述两个示例都将生成以下 HTML 输出:
1 | |
为了进行比较,这里是使用 Markdown 的内联链接样式:
1 | |
引用式链接的意义并不是它们更容易写。关键是,使用引用样式链接时,您源代码文档的可读性要高得多。比较上面的例子:使用 引用样式链接,段落本身只有 81 个字符 长;使用内联样式链接,它是 176 个字符;作为原始 HTML, 它是 234 个字符。在原始 HTML 中,标记比那里多 是文本。
使用 Markdown 的引用样式链接,源文档更多 与在浏览器中呈现的最终输出非常相似。允许您将与标记相关的元数据移出段落, 您可以在不中断叙述流程的情况下添加链接。
2.强调
Markdown 将星号 ( * ) 和下划线 ( _ ) 视为指示符 强调。用一个 * 换行或 _ 将用 HTML <em> 标签;双重* 或 _ 将用 HTML 包装 <strong> 标记。例如,此输入:
1 | |
将产生:
1 | |
您可以使用您喜欢的任何样式;唯一的限制是 必须使用相同的字符来打开和关闭强调范围。
强调可以在单词的中间使用:
1 | |
但是,如果您用空格包围 * 或 _ ,它将被视为 字面星号或下划线。
在它的位置生成一个字面星号或下划线 否则将用作强调分隔符,您可以反斜杠规避它:
1 | |
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`
Please don’t use any `
Please don't use any <blink> tags.
— is the decimal-encoded equivalent of —.
生产:
— is the decimal-encoded
equivalent of —.
4.图像
诚然,设计一个将图像置于纯文本文档格式中的 “自然”语法是相当困难的 。
Markdown 使用类似于链接语法的图像语法,允许两种样式:内联和引用。
内联图像语法如下所示:
1 | |
那是:
- 感叹号:
!; - 后跟一组方括号,其中包含
alt图像的属性文本; - 后跟一组括号,包含 URL 或路径 图像,以及一个包含在 double 中的可选
title属性 或单引号。
引用样式图像语法如下所示:
1 | |
其中“id”是已定义图像引用的名称。图片参考 使用与链接引用相同的语法定义:
1 | |
在撰写本文时,Markdown 没有用于指定 图像的尺寸;如果这对您很重要,您可以简单地 使用常规 HTML <img> 标签。
四、杂项
1.自动链接
Markdown 支持用于为 URL 和电子邮件地址创建“自动”链接的快捷方式样式:只需用尖括号将 URL 或电子邮件地址括起来即可。这意味着,如果您想显示 URL 或电子邮件地址的实际文本,并且还要将其作为可点击的链接,您可以执行以下作:
1 | |
Markdown 会将其转换为:
1 | |
电子邮件地址的自动链接的工作原理类似,不同之处在于 Markdown 还将执行一些随机化的小数和十六进制 实体编码,以帮助隐藏地址收集 垃圾邮件机器人。例如,Markdown 将改变:
1 | |
变成这样的东西:
1 | |
它将在浏览器中呈现为指向“address@example.com”的可点击链接。
(这种实体编码技巧确实会愚弄许多人,但不是大多数的地址收集机器人,但它绝对不会愚弄所有的他们。总比没有好,但以这种方式发布的地址 最终可能会开始接收垃圾邮件。)
2.反斜杠转义
Markdown 允许您使用反斜杠来转义生成文字字符,否则产生Markdown 的 格式化语法。例如,如果您想将一个单词括起来 使用文字星号(而不是 HTML <em> 标签),您可以使用 星号前的反斜杠,如下所示:
1 | |
Markdown 为以下字符提供反斜杠转义:
1 | |