md-to-word 是一个命令行脚本(md-to-word.cjs),用于把 Markdown 文档转换为面向利益相关者、管理层和外部读者的专业 Word(.docx)文件。其目标是在首次转换时就正确处理图表、表格与格式。
主要能力:
- 支持全部标准 Markdown 格式:H1-H6 标题、粗体/斜体/删除线、项目符号列表(含嵌套)、编号列表、任务列表、表格、代码块、行内代码、链接、PNG/JPG 图片、块引用、水平线;脚注通过 pandoc 扩展支持;YAML frontmatter 可通过 --strip-frontmatter 选项移除。
- 自动转换 Mermaid 图表:支持 flowchart LR/TB、sequenceDiagram、gantt、classDiagram、erDiagram、stateDiagram、pie、mindmap、timeline 等类型,按 8 倍缩放(宽 2400px)渲染为白底 PNG,再根据图表类型采用宽度优先或高度优先的尺寸策略。
- 自动转换 SVG 插图为 PNG 并嵌入,需安装 svgexport。
- 根据 PNG 实际尺寸计算最佳缩放,使图片在页面可用区域内适配(Letter 页面可用 6.5"×9.0",内联图片高度上限约 3.6")。
- 通过 pandoc 完成 Markdown 到 docx 的转换,并用 jszip 进行 OOXML 后处理:表格采用 Microsoft 蓝色表头、边框、隔行底色、分页防断行和跨页重复表头;标题按层级使用品牌色与间距;代码块使用 Consolas 字体、浅灰背景和左边框;超链接蓝色下划线;页脚居中页码;图注/表注居中斜体灰色。
- 提供样式预设:professional(Segoe UI 10.5pt、Microsoft 蓝)、academic(Times New Roman 12pt、双倍行距)、course(Calibri 11pt、Virginia Tech 酒红)、creative(Georgia 11pt、石板蓝)。
使用方式: 基本命令:node .github/muscles/md-to-word.cjs docs/spec.md 可指定输出名:node .github/muscles/md-to-word.cjs README.md output.docx 常用选项包括 --toc(生成目录)、--cover(由 H1 和日期生成封面)、--style PRESET、--page-size(letter/a4/6x9)、--reference-doc(自定义 .dotx 模板)、--images-dir、--embed-images、--strip-frontmatter、--no-format-tables、--keep-temp、--watch、--recursive、--dry-run、--debug。
依赖安装: 需要 Node.js 18+、pandoc、mermaid-cli(npm install -g @mermaid-js/mermaid-cli)、svgexport(npm install -g svgexport);jszip 由扩展捆绑。macOS 可使用 brew install pandoc;Windows 可使用 winget install JohnMacFarlane.Pandoc,mermaid-cli 与 svgexport 通过 npm 全局安装。
适用场景: 将技术规范、报告、论文、课程材料、博客等 Markdown 文档批量或单次转换为 Word 交付件;可结合 GitHub Actions 作为构建产物生成,或在 npm scripts 中调用;支持 --recursive 处理目录及 --watch 监听源文件变化自动重建。
限制:
- 依赖外部工具(pandoc、mermaid-cli、svgexport),缺失时相应功能不可用。
- macOS 无 pandoc 时可用 textutil 作为回退(需先将 Markdown 转为 HTML),但表格样式、图片尺寸、交叉引用等能力受限。
- SVG 源文件建议使用 viewBox、内嵌字体、体积小于 500KB,并避免外部引用。
- 复杂图表可能需通过 --debug 检查生成的 PNG 尺寸。
- 输出为无宏的 docx;超大文件可能因未压缩图片而体积偏大。 文档中提到的版本历史显示 5.3.0 引入样式预设、--cover、--toc;5.0.0 引入 SVG 自动转换、监听模式、递归处理;4.0.0 引入 OOXML 后处理。