Markdown 标记语言介绍

Markdown 是一个轻量级的标记语言。标记语言[1]听起来很可怕。但其实 Markdown 只是一个简单的格式化文本的方法,它可以在各种设备上显示好看的文字。它甚至不支持设置字体、颜色和字号。

效果很简单,输入:

轻量级标记语言
============
来自维基百科:
> 轻量级标记语言是一类用简单句法描述简单格式
的文本语言。轻量级标记语言作为一种标记语言,
它的语法简单,可方便地使用简单的文本编辑器
输入,原生格式接近自然语言。
例子:
- Markdown
- BBCode(论坛里常用)
- Wikitext(使用 MediaWiki,如维基百科)
轻量级标记语言

来自维基百科:

轻量级标记语言是一类用简单句法描述简单格式 的文本语言。轻量级标记语言作为一种标记语言, 它的语法简单,可方便地使用简单的文本编辑器 输入,原生格式接近自然语言。 例子:

  • Markdown
  • BBCode(论坛里常用)
  • Wikitext(使用 MediaWiki,如维基百科)

Markdown 用来做什么?

Markdown 在技术人员中应当非常流行。GitHub、Stack Overflow 和 Reddit 这些技术人员经常逛的网站都支持 Markdown。不过显而易见,在国内并非如此。然而如果见到做技术的英语公民,他要是不会 Markdown,那真可以惊讶一番。 对了,作家也应该用 Markdown

Markdown 在 ASCII 字母和符号之上打造。在英语的环境中,如果你打字时很想强调某些内容,你可能很自然地就使用了 *星号*。斜体是英文表达强调的一种格式。不幸的是,中文没人这么玩,甚至中文都不用斜体(中文的斜体是伪斜体[2])。不过摆脱语言的壁垒之后,理解 Markdown 的用处并非难事。

与标记语言相对的另一种格式化文字的方法是,所见即所得(What You See Is What You Get,WYSIWYG)。中国软件世界的天下一定是和 WYSIWYG 同步的,没有那么多人知道标记语言。

Word 2013 工具栏

WYSIWYG 并不是不好。只是你没有办法知道底层的格式化标签做了什么事情。回忆一下,有多少次你从网页里复制黏贴到 Word 里的时候,格式和间距总是不对。有的时候,你都没法找到究竟是哪个格式需要更改。对于技术人员,依赖不可控制的隐形标签是很危险的。当你需要比较差异、版本控制和编辑历史的时候尤其糟糕。所以我们才需要使用简单的并且可以看见的格式符号。

在代码中的文档很多也是用标记语言写就。科学论文也经常使用 TeX 来写作。

Markdown 怎么写?

Markdown 一直是随 Web 而生的,通常它会被转换成 HTML 格式查看。甚至 Markdown 文本里本身也可以插入 HTML 标签。比起 HTML 的 <p>文字</p>,Markdown 要简单自由的多。

结果 Markdown
粗体 **文本**
强调 *文本*
删除线 ~~文本~~
链接 [标题](http://)
行内代码 `代码`
图片 ![图片替换文本](http://)
列表 * 项目
引用 > 引用
H1 # 标题
H2 ## 标题
H3 ### 标题

在现实中,Markdown 有更多的细致语法需要深究,所以网上的中文教程跳跃不小。这不如把学习建立在使用(练习)之上。 CommonMark 建立了简要的帮助10 分钟交互式教程,Chen Yaojun 翻译了他们,你一定不要错过这个教程。 英文原版简要介绍10 分钟交互式教程

除此之外,有相当多的各种篇幅的中文教程。简书WowUbuntu少数派张弛的傻瓜教程。可以作为参考。

对于使用 Markdown 的平台,像 GitHub 自然就有完整的教程,Markdown BasicsGitHub Flavored Markdown。Ghost 的编辑器有如上表一般的帮助以及 Markdown Guide

国内少有网站使用 Markdown,简书是不可多得的一家。简书有教程来解释 Markdown,但是编辑器里找不到任何帮助,对新手基本上是负分。

简书编辑器

Markdown 预览工具

这方面的工具各个平台、Web 都有,选择特别多:

Markdown 的纷争和未来

Markdown 是很简便的标记语言,这也是它流行的原因之一。John Gruber(Daring Fireball 博主)在 2004 年创造了 Markdown,也 11 年没有再他的博客上更新语法,他拒绝对语言的细节问题作出限制。加入 GitHub 后,无数对 Markdown 的改进接踵而至,所以产生了几乎是最流行的 Markdown 方言——GitHub Flavored Markdown

如今如此多的预览工具,天知道这些解析器会有什么行为[3]。所以 Stack Overflow 的创始人 Jeff Atwood 想要用 CommonMark[4] 来为 Markdown 设立一个统一的标准

现在这个标准已经迭代到了很多个版本,已经出现了许多种语言的不同实现,JavaScript 这有一个很有意思的实现,markdown-it。我相信这个标准能在很多 CJK 文字与格式化符号的细微末节上有诸多帮助。


  1. HTML 是通过 SGML 定义出来的,HTML 5 之后算是分道扬镳。DTD 是 SGML 用来定义标记语言的工具。XML 是一种 SGML 定义的标记语言。除此之外,reStructuredText 也是一种优秀的标记语言,它被 Python 用来写文档。AsciiDoc 是另外一种不错的标记语言。Wikitext 是及其糟糕的标记语言

  2. 斜体分为 oblique type 和 italic type。伪斜体是前者,字形从正方形改为平行四边形;后者是倾斜同时随着字形变化。这两个类型在中文里被统称为了斜体。

  3. CommonMark 的各处细节语法 http://spec.commonmark.org/。

  4. John Gruber 最后告诉他们,Standard Markdown 这种文艺矫情名字快去死。