用 Markdown 写东西很爽,但交作业、交论文、交报告的时候,老师/期刊/甲方要的是 Word。

直接用 Pandoc 转一下?能转,但出来的 docx 打开一看:水平线是过时的 VML 矢量图、表格全贴在左边、代码块没有颜色、有些属性 Word 还会报兼容性警告。能用,但不好看。

于是就有了 M2W

M2W 是什么

M2W(Markdown → Word)是一个自部署的在线转换服务,底层是 Pandoc 引擎,上层包了一层精心调校的 DOCX 后处理。你在浏览器里写 Markdown,右侧实时预览,点一下就能下载一份排版精致的 .docx 文件。

在线体验:md2doc.mrwuliu.top

M2W 浅色主题界面
M2W 编辑器界面(浅色主题):左侧 Markdown 编辑,右侧实时预览

它解决了什么问题

Pandoc 是文档转换领域的瑞士军刀,功能强大,但它直接输出的 DOCX 有几个硬伤:

  1. 水平线丑——Pandoc 用的是已被废弃的 VML <v:rect> 矢量图形画水平线,在新版 Word 里显示异常。
  2. 表格不居中——表格默认紧贴页面左侧,学术论文里非常难看。
  3. 没有三线表——中文学术论文标配的「三线表」(上下粗线 + 表头下方细线,无竖线)Pandoc 做不到。
  4. 代码没颜色——代码块输出后是一片灰白,没有语法高亮。
  5. 兼容性警告——部分冗余的 OOXML 属性会触发 Word 的格式校验警告。

M2W 在 Pandoc 转完之后,额外跑了五步 OOXML 后处理,一次性解决以上全部问题。

核心功能

LaTeX 公式实时渲染

行内公式 $E=mc^2$ 和独立公式块都能写,编辑器里用 KaTeX 实时渲染,导出的 Word 里是真正的 LaTeX 公式(不是图片)。配合 pandoc-crossref,公式还能自动编号、用 \eqref{} 交叉引用,编号右对齐。

LaTeX 公式实时渲染
编辑器中写 LaTeX,右侧即时渲染散度定理和高斯积分

深色 / 浅色主题

编辑器和预览区都支持深色、浅色、跟随系统三种主题。深夜写论文的时候,眼睛会感谢你。

M2W 深色主题界面
深色主题下的编辑器与预览

输出效果:Word 里长这样

这是转换后的 docx 在 Microsoft Word 里打开的样子——标题层级、正文、公式、代码块,排版干净。

转换结果在 Word 中打开
转换后的 DOCX 在 Microsoft Word 中打开

隐私模式:Pandoc 跑在你的浏览器里

这是我最喜欢的功能。点一下「离线模式」,M2W 会加载一份编译成 WebAssembly 的 Pandoc(pandoc-wasm),在浏览器的 Web Worker 里完成全部转换。你的文档内容不会离开你的设备,不会经过任何服务器。

更厉害的是,服务端那套五步 DOCX 后处理逻辑,用 JavaScript 完整重写了一遍(基于 JSZip),所以离线模式输出的 docx 和服务端输出的一模一样

其他特性

  • 实时预览——左侧编辑,右侧即时渲染标题、代码高亮、表格、公式。
  • 拖拽导入——直接把 .md 文件拖进页面,自动加载内容。
  • 分页控制——工具栏一键插入分页符,精确控制文档分页。
  • 交叉引用——基于 pandoc-crossref,图表公式自动编号,中英文前缀自适应(图/表/公式 vs Figure/Table/Equation)。
  • 参考文献——支持上传 CSL 引用样式和 BibTeX 文献库,自动生成符合学术规范的参考文献列表。
  • 自定义模板——上传 .docx 参考模板,输出文档继承模板的字体、段落样式和页面布局。

五步 DOCX 后处理:让输出「能看」

Pandoc 生成 docx 后,M2W 不是简单地修修补补,而是对 OOXML 做了一次完整的「单遍重写」——解压 docx(本质是个 zip),在一次读取、一次写入的过程中,按固定顺序依次完成五个变换:

  1. 水平线修正——把 Pandoc 那套废弃的 VML <v:rect> 替换成干净的 <w:pBdr> 段落底边框。
  2. 表格居中——给每个表格的 <w:tblPr> 注入 jc="center"
  3. 三线表——应用经典学术三线表样式:上下粗边框(sz=12)、表头下方细边框(sz=6)、垂直居中、无内部竖线。
  4. 代码着色——把 Pandoc 的约 30 种语法 token 类型映射到 GitHub Light 配色(关键字 #CF222E、字符串 #0A3069、注释 #6E7781……),代码块背景色 #F6F8FA
  5. 兼容性清理——剥离会触发 Word 校验警告的冗余属性(tblLookcnfStyledurableId 等)。

这五个步骤的顺序是有讲究的——水平线修正必须在表格处理之前,代码着色必须在兼容性清理之前。换一次 zip 就改完,高效且正确。

怎么用

网页版(最简单)

打开 md2doc.mrwuliu.top,在编辑器里写 Markdown,点转换,下载 docx。不需要注册,匿名就能用(有速率限制)。

API 调用

# 提交转换
curl -X POST https://md2doc.mrwuliu.top/api/ \
  -H "Content-Type: application/json" \
  -d '{"text": "# Hello\n\nWorld", "crossref": true}'

# 轮询状态
curl https://md2doc.mrwuliu.top/api/task/{task_id}

# 下载结果
curl https://md2doc.mrwuliu.top/api/task/{task_id}/download -o output.docx

请求体支持 24 个字段,覆盖 Pandoc 的主要能力:目录深度、章节编号、交叉引用前缀、CSL/BibTeX 引用、自定义模板、附件嵌入等。

写在最后

M2W 起初是为了解决自己写论文时的痛点——脑子里想的是 Markdown,但交出去必须是 Word。Pandoc 能转,但转出来不好看;手动调格式又太累。于是花了几天时间,把 Pandoc 包了一层精心调校的后处理,又加了个浏览器端的离线模式,最后打磨成了一个可以自部署的完整服务。

如果你也经常在 Markdown 和 Word 之间反复横跳,不妨试试:md2doc.mrwuliu.top