教程 · Word → Markdown

Word 变成 Markdown 时留下了什么

「保留格式」这句话有两个意思,你指的是哪个,决定你会不会满意转出来的东西。

留下来的是那副骨架:标题、列表、表格、强调 —— 说明这份文档是怎么搭起来的那部分。另一半,也就是它的样子,没有地方可去:Markdown 是纯文本,而纯文本里没有字体、颜色、页边距和分页符。这是格式的天花板,不是功能缺了一块。

去转换器

结构留得下,外观留不下

把 .docx 拆开看,每个段落都带着一个样式名,旁边才是那堆格式。样式名是有意义的那部分 —— 标题 2、列表段落、引用 —— 格式只是 Word 今天恰好这么画而已。

转换器读前一件,扔掉后一件。一个标题 2 变成 ##,而不是一段带着字号的文字。这份 Markdown 落到哪儿,就跟着那边自己的标题样式走。

Markdown 里没有「字体」和「页边距」这两种语法,所以不存在一种能留住它们的转法。要页面长得一模一样,你要的是 PDF,不是 Markdown。

# 号是从真正的标题样式里长出来的

转之前只有这一件事值得在 Word 里做,而它决定了你拿到的是分好层的文档还是一大片段落。

你手动调大加粗的那一行,在文件里仍然是个普通段落,所以它转出来是段落。没有哪条规则能把「16pt 加粗」还原成 ##,又不顺手毁掉全文所有加粗强调的句子。

  1. 01在 Word 里点进你的某个标题,扫一眼样式库。高亮落在「正文」上,两个字就是全部问题。
  2. 02从样式库里挑标题 1、2、3。样子会变 —— 不喜欢就去改这个样式的定义,别退回手动调字号。
  3. 03列表也一样 —— 用列表按钮,别手打「1.」加一个 Tab。手打的数字转出来是死的文字,再也不会自动重新编号。
  4. 04转完扫一眼输出里有没有 # 和 -。一个 # 都没有的文件,说明它从一开始就没分过层。

能转过来的东西

一到六级标题,从 Word 的样式来。Word 的「标题」和「副标题」样式也映射成 # 和 ##,因为它们说的就是这个意思。

粗体转 **,斜体转 _,删除线转 ~~。上标和下标保留成 <sup> 和 <sub> —— Markdown 没有这两种语法,而扔掉它们会改变一个公式或者一个脚注标记的意思。

链接、任意层数的有序和无序列表、「引用」和「明显引用」样式转成的引用块,以及「代码」「预格式化」样式的段落转成的围栏代码块。

Word 里
一个嵌套的项目符号列表,
和一个从 3 开始的编号列表
Markdown
- Outer
  - Inner
- Second

3. Third
4. Fourth

会被扔掉的,以及为什么

字体、字号、颜色、突出显示、对齐、缩进、行距、分页符、页眉、页脚、页边距。全都是属于一张纸的排版,而 Markdown 不是一张纸。

下划线是最容易让人意外的一个。Markdown 没有下划线,而最接近的东西 —— 链接 —— 比什么都不做更糟,所以带下划线的文字出来是纯文字。

修订和批注会没:你拿到的是定稿,不是编辑过程。文本框、SmartArt、图表也留不下来,只有里面的文字(如果有)能留。Word 还会把它没能映射的样式告诉转换器,那些提示显示在输出上方,去重之后最多显示八条,后面跟一句一共还有多少条。

表格转得过来,合并单元格转不过来

表格变成标准的竖线表格。格子里的竖线转义成 \|,这样一格里有根竖线不会把整行劈成两半;比最宽那行短的行会补齐,表格保持是个矩形。

合并单元格是例外,而且是硬的:Markdown 没有 colspan 和 rowspan。跨两列合并的格子留下它的文字,旁边多一个空格子。如果这些合并有意义,先在 Word 里拆掉 —— 很多时候它们只是为了把标题居中。

格子里的行内格式没问题 —— 粗体、斜体、代码、链接都行。块级的不行:一格里的项目符号列表出来是几项挤在一起,因为竖线表格的一行只能是一行。

Word 里
表头跨两列合并
Markdown
| Merged head |  |
| --- | --- |
| 1 | 2 |

图片,以及 .doc 给不了的那一样

老 .doc 文件是例外。那是 2007 年以前的二进制格式,在你的浏览器里一个字节一个字节读出来,图片完全没法恢复,精确的列表编号也一样。文字、标题、表格、粗体斜体是能转的,而且输出会说明它走了这条路,不用你自己猜。手边有 Word 的话,另存成 .docx 结果会干净得多。

还有一件值得知道:Word 里的超链接常带跟踪参数,从 Google 文档转存出来的文档还会把链接包在 google.com/url 跳转里。这两样都会被还原成真正的目标地址,而且输出会说 —— 改了一个链接指向哪里,是该说一声的事。

  1. 01内嵌 base64 把每张图都塞进 Markdown 本身。一个自带图片的文件,不会丢图 —— 但 data URI 比原图大三分之一左右,而且在文本编辑器里看着很难受。
  2. 02留占位写成 ![alt](./images/name.png),图片文件归你自己放。Markdown 要进一个本来就有 images 目录的仓库时用这个。文件名是从 alt 文字来的,小写加连字符。
  3. 03不要图片就整个删掉。纯文字导出用这个,但以后想不起来那儿原来有什么就是它的代价。

先把标题样式弄对,再把文件拖进来。什么都不会上传 —— .docx 是在这个标签页里解开的 —— 所以拿一份还没定稿的保密文档来试正合适。

Word → MD