同一段文字,编辑窗口里有 #、** 和短横线,预览里却成了标题、粗体和列表。Markdown 就是用这些简单符号标记文字结构的写作格式。原文保存标记,支持 Markdown 的软件负责识别,再显示出相应的格式。理解这层关系,就能看懂为什么换个软件打开,效果可能不同。

先看一段带符号的原文
假设你想写一份周末安排,用 Markdown 可以这样输入:
# 周末安排
先完成 **备份**。
- 整理照片
- 检查更新
在支持这些基础语法的预览里,它会显示成下面这样,具体字体和大小由软件决定:
周末安排
先完成 备份。
- 整理照片
- 检查更新
原文里的 # 表示一级标题,两边的 ** 标记需要强调的内容,通常显示为粗体;每行开头的 - 表示无序列表项[1]。上面的代码框展示写法,所以保留符号;预览展示解析后的结果,所以这些标记不再作为普通文字出现。
空格和空行也有用。这个例子在 #、- 后各留一个空格,并用空行分开标题、段落和列表。按 CommonMark 的标题规则,# 周末安排 是标题,#周末安排 会被当作普通文字。有些软件接受后一种写法,照着带空格的版本写更稳妥。
软件怎样把符号变成格式
真正把符号变成格式的是软件。它读到行首的 # ,会把后面的文字识别为标题;读到这段文字里的 **备份**,会把“备份”识别为需要强调的部分。识别这些规则的过程叫解析,把结果画到屏幕上叫渲染。
在常见的网页显示流程中,解析器把 Markdown 转成 HTML,由 HTML 标签描述标题、段落、列表等结构,浏览器再按样式显示。John Gruber 最初介绍的 Markdown 既包括便于写作的纯文本格式,也包括将它转换为 HTML 的工具[2]。今天说“用 Markdown 写文章”,通常指这套写法,不限定必须使用最初的工具。

文件里保存的 **备份** 仍然是普通字符。只显示原文的文本编辑器会让你看到星号,支持 Markdown 的预览才会显示对应格式。有的软件边写边更新预览,有的在点击预览后再处理。
把文件名改成 .md,也不会让不支持 Markdown 的软件自动显示格式。扩展名通常提示“这是一份 Markdown 文档”,显示结果仍取决于打开它的软件。
为什么有人愿意这样写文章
Markdown 的一个好处是,不预览,原文也比较容易读。看到“周末安排”下面两行短横线,大致就知道它们是两个事项;修改时,直接改文字和标记。让源文本容易阅读,本来就是它的设计目标[3]。
对写笔记、说明文档或短文章的人来说,这种方式让常用的标题、列表和强调都能在输入文字时完成。你也可以把同一份源文本交给不同的软件显示,不必为每一种界面重新输入内容。这是写作方式上的便利,至于是否顺手,还要看个人习惯和编辑器。
它也有明显取舍。例子里的 # 说明“这里是标题”,没有规定标题必须用多大字号、什么字体;** 标记强调,也没有给文字指定颜色。如果你需要精确安排每一页的位置、复杂的图文混排,单靠这些基础标记就不够了,还要借助软件的排版或导出功能。
因此,写笔记、整理内容层次时,这些标记往往够用;需要精细版式时,还要看编辑器和导出工具能提供什么。
同一份文字,为什么显示不同
同一标题在一款软件里是蓝色,在另一款里是黑色,如果两边都已识别成标题,差别通常来自样式。网页中的字体、颜色、间距等外观主要由 CSS 控制[4],Markdown 源文本没有规定这些细节。
如果连结构都变了,就要看语法支持。Markdown 有不同的实现和扩展,一个平台能识别的写法,另一个未必支持。CommonMark 用明确规范减少基础语法的歧义[5],各款软件支持哪些扩展,仍可能不同。
例如,GitHub Flavored Markdown(GFM)把表格和任务列表列为扩展[6]。- [ ] 检查更新 在支持对应扩展的平台上可以显示成带勾选框的事项,不支持的地方可能仍保留方括号。换工具写作或导出时,这类扩展需要单独确认。

遇到格式没生效时,可以先检查两件事:当前窗口是否开启了 Markdown 预览,以及这款软件是否支持你用的语法。如果只是颜色、字号不同,再去看主题或样式设置。这样就能分清,是文字没有被正确识别,还是软件给它换了一种外观。
参考资料
- [1] CommonMark 规范:https://spec.commonmark.org/0.31.2/
- [2] Markdown 原始介绍:https://daringfireball.net/projects/markdown/
- [3] 原始语法说明:https://daringfireball.net/projects/markdown/syntax
- [4] MDN 的 CSS 说明:https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics/What_is_CSS
- [5] CommonMark 项目说明:https://commonmark.org/
- [6] GFM 规范:https://github.github.com/gfm/