Markdown学习笔记(8)- 内联文本块(2)- 完结篇

Markdown学习笔记(8)- 内联文本块(2)- 完结篇


本章目标

上一篇文章里,我们已经了解了一些比较常用的Markdown内联文本块的标记。本篇文章里我们将讨论Markdown中参考式链接、自动链接、插入图片、硬软换行这些语法的细节,这些就是本系列文章最后的部分了。


1. 参考式链接

Markdown中的参考链接有三种:完整参考链接,折叠式参考链接 和 快捷参考链接。基本的参考链接格式正如本系列第五篇文章里描述的一样,这里我们并不想重复赘述已经讨论过的内容,而是更进一步讨论参考式链接作为内连文本的一部分(也不是作为单独的一行)存在时,它前后的文本结构(比如空白,多余的]标记)对它的影响。

1.1 完整参考式链接

一个完整的参考链接由的链接文字和后面紧跟(也就是两者之间不能有空白)的一个链接标签(标签和其后的链接引用可以定义在文件中的其他地方)组成。

链接文本的规则与内嵌链接相同。链接文本可以包含一对中括号,但不能包含不成对的中括号,除非它们被转义。和之前说的一样,链接文本可以包含其他Markdown样式标记符号但不能包含其他Markdown链接。

一个链接标签必须以前面没有反斜杠的[标记开始、以前面没有反斜杠的]标记结尾。在这两个括号之间必须至少有一个非空白字符,也不能包括未转义]或者[。最后一个值得提醒的是,这两个括号内的文本数量是有限制的,里面可以包含最多999个字符。

例子:

[link [foo [bar]]][ref]
[ref]: www.ubisoft.com

效果:

link [foo [bar]]
这里的链接文本[link [foo [bar]]]中含有3组成对的中括号,因此它可以作为正确的链接文本。否则,Markdown就会试图使链接文本平衡,并把多出来不成对的中括号当成链接标签的一部分。

1.2 折叠式参考链接

当一个链接的链接标签为空的时候,就像这样:[foo][],这种写法将被视为折叠式参考链接。[foo][]相当于[foo][foo]

1.3 快捷参考链接

快捷参考链接则是更为懒人式的参考式链接写法。即链接文本后面没有任何链接标签标记。比如[foo],这相当于[foo][foo]。这也是链接文本不能包含其他Markdown链接的原因——因为那会被解释为多个快捷参考链接,而不是一个完整的参考链接。当然,简单的内联链接比快捷参考链接优先级更高一些:

例子:

[foo](www.baidu.com)

[foo]: www.zhihu.com

效果:
foo

[foo]: www.zhihu.com

可以看到,上面的简单内联链接先被解析了,这导致下面的这行文本没有被是为是一个链接标签定义。

2. 图像链接

Markdown中插入一个图片,你首先要把你的图片放进一个图床或者一个类似的东西,让你的这个图片在大家都可以访问的互联网服务器上有一个URL,然后把这个URL插入到Markdown文本中,它就可以被解析出来。这个过程除了需要上传到图床这个步骤麻烦一点,其他特征的简直和在Markdown文本中插入一个链接一模一样!当然,它们的写法和链接的写法也是类似的,只需在链接文本前面多加一个!。这也导致了它的语法细节和上述的链接几乎完全一致。

这里我们几乎没什么可以说的,就简单说明一下图像链接和参考式链接的两个差异吧:

  1. 图像链接的链接文本里可以含有链接,而链接的链接文本不能。
  2. 如果你想在一个普通文本!后面加上一个参考式链接,你需要把反斜杠加在!的前面以防止它们被解析成一个图像链接。
3. 自动链接

在一个URL文本前面加上<符号,后面加上>符号,这个URL就变成了一个自动链接。

例子:

<https://www.niconi.cn/>

效果:

https://www.niconi.cn/

很简单吧。要注意的只有以下3几点:
1. 链接URL里不能含有<或者>
2. 在自动链接之中不能有空格。
3. 在自动链接的链接文本内反斜杠没有转义的功能。

综上所述,如果你的自动链接文本中含有<>或者空白字符,你需要用%后面加数字的编码形式体现它们的存在,比如,%20代表一个空格。

URL文本也可以用一个电子邮件文本替换,比如:

<sherlzerock@icloud.com>

效果:

sherlzerock@icloud.com

4. 硬换行 和 软换行

硬/软换行是Html术语,我们在这里只讨论在Markdown中如何书写换行文本会被解析为硬换行或者软换行。

4.1 硬换行

在满足以下两个条件的文本中,如果换行符前面有两个或者更多的空格,这个换行符会带来一个硬换行。硬换行的效果是下一行的行首所有空格都将被忽略。

条件
1. 文本不是代码段或HTML标签。
2. 文本中换行符所在行不是一个文本块的最后一行。

例子:(foo后面有两个空格和一个换行符)

foo  
    bar

效果:

foo
bar

当然,正如以前我们提过的,用反斜杠\代替两个空格,也有一样的效果。

4.2 软换行

除了硬换行,其他的换行方式(直接在行尾加换行符,换行符前没有两个或者两个以上空格、也没有反斜杠)都将被视为软换行。

5 文本内容

任何未被上述规则解释的字符将被解析为纯文本内容。

Happy Ending!!!

至此,我们对于CommonMark的探索已经完成了,你已经掌握了足够多的语法细节来书写Markdown!现在就去试试吧!

参考文章

CommonMark官方规则文档 0.28版本
CommonMark快速上手指南
交互式CommonMark新手指南
Markdown中文网
Github 格式化书写语法参考
Markdown 语法说明 (简体中文版)

特别鸣谢

陈关州
小楠的次元

EOF

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

发表评论

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