Markdown 转 Word
转出来的是真正的 .docx:标题带大纲级别,列表带编号定义,表格和代码块都在,Word 里可以接着改。
约 99 字,3 个标题,28 行
文档设置
当前纸面 210 × 297 毫米,正文 11 磅。字体选项只写字体名,最终以打开文档的机器上装了没有为准。
转换前看一眼
- 标题3转成 Word 的「标题 1」到「标题 6」
- 表格1转成真正的表格,不再依赖等宽对齐
- 列表5项目符号和数字编号各有一套定义
- 代码块1用等宽字体段落呈现,不带语法高亮
- 链接 / 图片1 / 0合在一行的是两者各有多少处
大纲
这里只做粗略的计数和结构预览,真正的转换以生成出来的文档为准。任务列表会退化成普通列表项,脚注、引用块里的复杂嵌套也可能被拍平。
关于 Markdown 转 Word
.docx 就是一个装 XML 的 ZIP。把任意 .docx 后缀改成 .zip 再解开,会看到 word/document.xml、styles.xml、numbering.xml 这些文件。正文、样式、编号各自独立,所以「Word 转 Markdown」本质上就是把 document.xml 里的段落属性翻译成 Markdown 语法。这也解释了为什么转换总是丢东西:文本框、批注、修订痕迹、域代码、嵌入对象都各有自己的 XML 分支,不在正文流里。
标题级别来自样式名而不是字号。Word 里的「标题 1」是一个段落样式(pStyle w:val="Heading1"),不是「加大加粗的一行字」。所以有人手动把正文调大加粗来当标题时,转换工具只能看到普通段落,转出来就是普通段落。反过来也一样:从 Markdown 转出去的 Word,标题带的是真正的标题样式,导航窗格和大纲级别都能用。
编号定义在 numbering.xml 里。段落本身只记「我用第几个编号定义的第几层」(numPr 里的 numId 和 ilvl),具体是圆点还是数字、从几开始、缩进多少,全在 numbering.xml 里。所以光看 document.xml 判断不了一个列表是项目符号还是数字编号,必须把两份 XML 对照着读。
往哪边转都会掉信息。Markdown 的表达能力是 Word 的子集:没有分栏、页眉页脚、字体、颜色、批注。Word 的表达能力又超出 Markdown:脚注、交叉引用、域、样式继承都没地方放。所以这两个方向都适合「把内容搬过去继续编辑」,不适合当无损存档。需要严格的格式还原,还是得用 PDF 或者原文件。