Paul

Markdown 书写建议

虽然目前编辑器对 Markdown 的支持存在很大差异,方言现象严重,但是对于 Markdown 基础语法的支持都是相似的。

针对 Markdown 基础语法产生的差异大部分是在区块相接、嵌套和 Lazy 输入时产生的。所以养成一个良好的书写习惯可以规避掉大部分兼容性问题。

下面提供一些 Markdown 书写的建议,遵循这些建议会让你的 Markdown 文档更加易读,出现更少的语法歧义,同时也会具备更高的兼容性。

书写高兼容性的 Markdown 文档应该遵循以下两个原则:

范围元素

这里所说的范围元素指采用行内元素中标识包裹的语法元素,包括强调、重强调、删除线、行内代码和下划线 HTML 标签。

强调和重强调

强调默认是斜体,重强调默认是粗体。

为什么不直接叫斜体或粗体呢?因为强调和重强调的语法在 HTML 中输出就是 <em><strong> 标签,而不是直接表示斜体的 <i> 和粗体 <b> 标签,只不过 <em><strong> 标签默认对应斜体和粗体。

它们看似没有区别,但是在本质上有很大的区别。就好比在 Word 中使用样式添加标题,和直接对文字进行加粗并放大字号的区别一样。

强调不是一个具体的添加格式,它的格式是可以改变的,不一定非要是斜体。只是目前大部分编辑器都是直接把强调理解为斜体,这就感觉有些掉价了。这也是非常可惜的做法,尤其是在中文领域。

强调有两种书写方式:一对 *_ 包裹。重强调也有两种书写方式:一对 **__ 包裹。

无论强调还是重强调,都建议只使用星号,不建议使用下划线:

自动链接

链接的书写方式有三种:行内式、参考式和自动链接。

其中,自动链接是一种快速添加方式,只要用 <> 包裹即可。而有些编辑器的 Lazy 输入允许不用尖括号包裹,可以直接输入链接,请记得在后面加一个空格以防万一。

建议使用自动链接时用尖括号包裹,如 <https://www.baidu.com>,因为很多编辑器不一定能自动识别链接。

这三种链接书写方式建议使用行内式。当然,如果掌握熟练的话,随意使用。

行首空格

行首的空格(包括 Tab)主要的功能是用于缩进式区块代码、列表嵌套等。

原生 Markdown 允许在每一行行首任意输入 0~3 个空格,不会影响最终输出。其原意是让用户可以根据需要使用行首空格对源码进行对齐,增加易读性。

但是在 Markdown 语法百花齐放的今天,使用这种方式输入是很危险的,而且现在的编辑器都非常智能,基本不存在易读性问题。所以建议只在缩进式代码和列表嵌套时使用行首空格

有的教程说可以在段落行首添加 2 个空格进行缩进,更好看。除非对 Markdown 非常熟练,否则不建议随意添加。

空行

空行的作用主要是用于区块元素的连接。这里的建议是除了标题后接区块时可以不加空行以外,所有区块都使用一个空行区分。因为目前还没有一款编辑器要求标题后接区块必须添加空行。而且目前大部分编辑器都会把文档中的标题着重突出,也不存在易读性问题,所以标题后面的空行是可有可无的。

至于其他区块,都用空行区分,就可以大大增加文档的可读性了。而且,这样也不必去记忆到底哪些区块相接需要空行,哪些不需要。多敲一个空行也不是什么难事,这样做即符合清晰原则又符合简单原则。

一般使用一个空行就够了,多了虽然不会影响最后的输出,但是会让源码间隔过宽不利于源码的阅读。

标题

标题有两种书写方式:一种 Setext 标题,采用 =- 作为底线;一种 Atx 标题,采用行首 #

建议使用 Atx 标题。它比 Setext 标题有太多优势:

总之,Setext 标题不稳定、容易出错、功能也单一,所以只推荐使用 Atx 标题。使用 Atx 标题唯一需要注意的是,井号后面加一个空格,这是标准的 Markdown 书写方式。

区块代码

区块代码有两种书写方式:缩进式和围栏式。建议使用围栏式区块代码,它比缩进式代码有太多优势:

分割线

分割线的写法有三种:三个或以上的 _*-建议使用三个星号书写分割线,因为这样最安全、也最方便:

如果想使用减号写分割线,可以在减号前预留空行,这样会更安全。

区块引用

区块引用的书写其实很简单,因为最多就是嵌套一下段落之类的,出错率很低。建议不要使用 Lazy 输入,老老实实在每一行的行首输入 >

> 后面可接空格,也可不接,建议还是接一个空格,因为这样更好看,而且可以与列表、Atx 标题等语法对齐,减少记忆负担。

列表

与区块引用一样,请避免使用 Lazy 输入,因为列表太容易出问题。

项目表示后需要接空格,同时应该尽量少用列表嵌套。如果列表需要包含很多内容,可以多使用标题。

对于有序列表,建议从数字 1 开始,虽然后的语法允许用户自定义开始的数字,但是一般用不到。

对于无序列表,项目标识可以用 *+- 三种方式。首选使用减号,因为减号可以直接输入,非常方便。

另外还有一个建议:同一个列表中,同一级的项目使用同一个项目标识,不同级的列表用不同标识,这样效果更好。

- 一级列表
  + 二级列表
    * 三级列表
- 一级列表
  + 二级列表
    * 三级列表
- 一级列表
  + 二级列表
    * 三级列表

尽量不要使用不同符号写同一级列表,因为有的语法规定,用不同的项目符号会生成全新的列表,而且易读性差,也不符合清晰原则。

总结