自从 2004 年某个大佬发明了 Markdown,并且给出了其最初的 Perl 实现之后,这种轻量的标记语言就成为了互联网的新宠。在过去的十多年中愈演愈烈,直至今日有了大大小小几十种实现,大有成为互联网第一写作语言的趋势。现在你要弄个网站,不支持 Markdown 都不好意思说你有文本输入框。然而它仍然是最操蛋的语言之一。

我觉得 Markdown 的流行在于它比较好的解决了一个问题:为网站码字,不使用 HTML 如何排版?毕竟网站是不可能让用户写 HTML 的。即便是网站的所有者,也不可能用 HTML 来写长篇巨制。在 Markdown 出现之前,论坛与 Wiki 等文字产生最多的地方会采用富文本编辑器或者一些私有的标记符号(例如 BBCode)。然而它们仅仅是提供了一个能力而已,排版仍然是一个占用大量时间的头疼工作。

之后 Markdown 横空出世。实际上,我最初从 WordPress 换到了 Pelican 也是因为 Markdown 比起所谓的“富文本”编辑器要好用太多:一些简单的标记就能很好的控制格式,简直就是强迫症福音。我想有强迫症的同学用 Word 排版时都有打开“显示特殊字符”和“样式管理器”仔细检查每个缩进到底是不是用空格实现的灰暗经历。

markdown-word

↑ 我在用 Word 排版时

此外,我觉得 Markdown 最大的优点在于它成功强迫用户把 样式格式 分割开。所谓样式是指 “这段几个字是标题,或是正文,或是别的什么” ,对应于 HTML。而格式则是 “标题用几号字,是否加粗,正文用几号字,是否缩进” ,对应于 CSS。Markdown 本身只控制样式,而格式则交由网站管理员或“主题”来处理。大多数用 Word 的人,即便是经常和排版打交道,也可能会用“格式刷”刷遍整个文档而从未用过样式工具。论坛和邮箱中常见的的“富文本”编辑器更是直接没有了这个功能,把格式都写在了 HTML 标记里。

而另一个 Markdown 的也许是优点也许是缺点的特点是,它限制了一个非常小的样式的子集。最初作者只定义了标题、引用、列表、代码、分割线、链接、图片、斜体、粗体等几种样式。这又能强迫用户老老实实码字,而不会被五花八门的格式分散了精力。但也许是最初定义的样式太少了,甚至没有较为常用的表格。对于程序员,还需要代码块,对于科学工作者,还需要公式。当然“公式”已经不单单是样式,更是如何书写内容的问题了。

功能的匮乏与日益增长的需求之间的矛盾导致了各种“扩展”的出现。其中的一些扩展已经比较流行,几乎可能写进新的标准里,比如代码块、脚注等。但问题又来了,扩展是如此之多,却没有什么人来更新标准。各种实现对于 Markdown 的翻译结果也是五花八门:比如 #Title 这样源码,有些实现会翻译成标题,而有些实现则认为这是普通正文。

百花齐放的结果就是 Markdown 比起具体的准则,更像是一个概念或是思路1。用户在写 Markdown 时可能还要考虑采用的具体的翻译器是什么2,它支持什么格式。比如这个博客用的 Pelican 最终会采用 python-markdown 来翻译,但是本地编辑时我的预览器则是使用的 Pandoc,语法支持总有一些小的不同。GFM 也许是其中最流行的“野生标准”,但也并没有统一江湖。比如 python-markdown 需要一些扩展才能使用 ``` 环绕的代码块,这曾经让我头痛了好很久。

总的来说,Markdown 标准的羸弱使得其与专注写作的目标有些偏差。希望 CommonMark 的出现能够改善这一状况,虽然我不保什么希望,因为它并不打算将公式归于标准之内,而我仍然需要它。作为替代的第一候补是 reStructuredText,但它写起来又太像代码,在源码上的阅读性又不及 Markdown。也许这就是不可调和的矛盾吧。