Markdown学习笔记(3)- 非容器文本块(1)

Markdown学习笔记(3)- 非容器文本块(1)


本章目标

上一篇文章里,我们已经了解了Markdown的基本概念。这篇文章主要讨论Markdown的非容器文本块。我们把非容器文本块中Markdown语法分成3部分食用,所以下一篇文章我们仍然会讨论非容器文本块的内容。


1. 分隔线
1.1 格式说明

正如第一篇文章所说,分隔线标识独占一行,这行文本可以由0~3个空格开始,包含3个及以上的_-或者*符号,并且此行不得有其他字符,所有行内的非空白符号都应该是相同的。符合上述描述的一行文本将被视为一个分隔线,这些符号之间可以包含任意数量的空格。

例子:---或者___或者***或者* ** * * * ** ***或者____ _____

1.2 前后行无需空白

值得注意的是,分隔线前后不要求有空行。即使分隔线前后没有空行,分割线也会把一个完整段落分隔成两个。

1.3 消除---的二义性

关于第一篇文章末尾提到的问题,当由3个或3个以上-组成的一行既符合Markdown中分隔线的定义,又符合Markdown中二级标题的定义,此行将被视为一个二级标题,而非一条分隔线(依据是上篇文章中提到的:如果同一段文本里同时有表示构成块结构的Markdown符号标记和表示构成内联结构的Markdown符号标记。那么,表示构成块结构的Markdown语法标记会起作用)。

1.4 分隔线优先于列表项被解析

而当分隔线也可以被解释为列表项的时候,比如下面这种情况:

* Foo
* * *
* Bar

中间那行的3个*号将被解释为分隔线,而非列表项。如果你恰好有一个列表项的子项叫做* * *,你可以把列表项前的子项标记符号由*改成-,就像下面这样:

- Foo
- * * *
- Bar

2. ATX标题

正如第一篇文章所说,Markdown中标题的书写格式有两种。这里先说第一种,这种标题也被称为ATX标题

2.1 格式说明

第一种格式的严谨格式描述是:0个或3个空格+#+1个或多个空格+标题文本(可以为空)+0个或多个空格(可选)+0个或多个#号(可选)+0个或多个空格(可选)。

标题行的#号和标题文本之间空格、最前面的空格以及最后面的空格都将不会被显示出来。

2.2 开头的#号标记

标题级别等于开头#字符的个数。开头超过6个#号的,这行将被视为普通文本而非标题。开头的#号和标题文本之间没有空格分隔的话,这行也将不被视为标题。

下面的例子也不是一个标题:\## foo

因为第一个#号前有一个\符号,\是用来转义的。就像很多别的语言一样,它放在语法规定的标识符前,会让标识符退化成一个表示本义的文本。因此上面的例子显示效果为## foo。变成了一个普通的文本而非标题。

2.3 结尾的#号标记

最后的#号文本要么要在行尾,要么前面就有空格。若既不在行尾,前面和标题又没又空格分隔。行尾的#将会作为标题的一部分显示出来。如果满足这两个条件之一,这些#号将不会显示出来,它们只是为了当你在写一个标题时,纯文本格式能够左右对称(当然你也可以写成左右不对称的样子),没有其他的含义。

2.4 可以内联其他格式标记

标题中可以内联其他Markdown书写格式标记。比如:###### foo *bar*
效果:

foo bar

可以明显看出,单词bar如我们期待的一样变成了斜体。

2.5 前后行无需空白

ATX标题和分割线一样,不需要通过空行与周围内容分开,它们可以中断段落。有些人会经常在一个ATX标题前后加上空白行,这只是一种习惯,而非Markdown的强制规定。

以上这些就是Markdown中ATX标题的使用细节。


3. Setext标题

Markdown中第二种可以标记的标题格式,我们称之为Setext标题(详细格式见本系列的第一篇文章,这里不再赘述)。和ATX标题不同的是,Setext标题不会中断一个段落。所以尽管Setext标题也不要求其前面必须有一个空白行,但是为了分段方便,我们在书写时通常在Setext标题前留一个空行。以示标题及其下面的文本属于一个全新的段落。

3.1 可以修饰多行文本作为标题内容

和Setext标题处于相同段落的,且位置在Setext标记之上的所有文本都将被视为标题的一部分。
例子:

1
2
3
---

对应效果:

1

2

3

可以看出,---前的所有文本都被当作了标题内容处理。

3.2 Setext标题文本中不能出现一些Markdown标记

Setext标题文本中,不能代码块标记、ATX标题标记、块引用标记,分割线标记, 列表项标记或HTML文本标记。这里的标题文本指的是和标记标识符在一个段落里,并且位置在标题标记符号上面的文本。Setext标题文本也不能为空。

也就是说,即使这些内容出现在Setext标题文本中,它们的效果也会显示出来,但它们不被当作将标题的文本。Setext标记标记符号也变成了一个普通文本。

例子:

- 这是一个列表项,这行不是Setext标题文本的一部分
这行也不会成为标题的一部分,因为本行和列表项同属于一个段落。
===

效果:
- 这是一个列表项,这行不是Setext标题文本的一部分
这行也不会成为标题的一部分,因为本行和列表项同属于一个段落。

===

3.3 Setext标题优于内联标记文本被解析

以下内容将不会被解析为一个Markdown中插入的Html文本,而会被解析成一个标题:

<a title="a lot
---
of dashes"/>

效果:

<a title="a lot

of dashes"/>


4. 空白行

空行,又称空白行,当一行都是空白的时候,其被视为一个空行。需要注意的是,Markdown文档开始和结束处的空行会被忽略,另外块级元素之间的一个以上的空行也会被忽略。

例子:




aaa - aaa

效果:

aaa

  • aaa

可以看出,超过一个的空行都被忽略掉了。


Have A Break

接下来的两篇文章中,我们将继续了解非容器文本块中Markdown符号的那些更富有细节的用法。稍作休息,我们在下篇文章再见。

原文链接:,转发请注明来源!

发表评论

要发表评论,您必须先登录