利用pandoc将markdown转换为word文档

pandoc可以完成多种文件类型的相互转换,支持的文件格式参见官方网站:https://pandoc.org/index.html。本博客参考了官方文档以及社区讨论,将介绍如何利用pandoc将markdown转换为word文档。


基本使用

  1. Installing页面选择合适的版本下载

  2. 命令行运行基本参数

    • 使用参数-f FORMAT-t FORMAT指定源和目标文件格式;pandoc支持识别文档后缀,一般可以省略
    • 使用参数-o FILE指定输出文件
  3. 一个例子

    省略文件格式,使用命令pandoc 课程回顾与总结.md -o 课程回顾与总结.docx,得到的结果如下:

    课程回顾与总结.md 课程回顾与总结.docx

修改word文档格式

使用参数--reference-doc=FILE可以指定docx输出文件的格式参考对象,从而修改word文档的格式。

  1. 获取模板

    首先使用命令pandoc -o custom-reference.docx --print-default-data-file reference.docx拷贝一份默认的参考文件模板,取名为custom-reference.docx

  2. 修改模板样式

    用word打开custom-reference.docx,修改各部分对应样式。例如,将光标移动到Heading 2,找到对应的样式,右键进行修改:

    下图修改了Heading 1Heading 2,将字体修改为黑体,颜色修改为黑色:

    custom-reference.docx修改前 custom-reference.docx修改后

    如果要修改输出文件中的表格样式,直接给模板中的表格更换样式,不能达成效果。根据Github上的讨论得知,必须修改名为Table的表格样式,才能控制输出文件的表格样式。

  3. 再次转换文件

    使用命令pandoc 课程回顾与总结.md -o 课程回顾与总结.docx --reference-doc=custom-reference.docx,此次运行结果和之前对比如下,注意到一级标题和二级标题变成黑色:

    默认格式 修改格式后

合并多个markdown文件,自动生成目录

pandoc可以接受多个文件为输入,例如pandoc file1.md file2.md file3.md -o result.docx;另外有一些参数可以用于自动生成目录。

  1. 生成目录

    • 使用参数--toc自动生成目录

      同时可以修改格式参考文件中,TOC标题/TOCHeader的样式,选中段前分页,这样之后手动插入文档封面会比较方便。

    • 使用参数--toc-depth=NUMBER指定目录包含的标题深度

      如果每一篇markdown的文章标题都是一级标题,使用--toc-depth=1可以生成最简单的目录。

    • 使用参数--reference-doc=FILE指定格式参考文件,并给格式参考文件添加页码

      如此生成的文件也会有页码。

  2. 文件分页

    pandoc读入了多个文件,输出时各个文件的内容是连续的;希望每个文件能从新的一页开始,检索互联网得到两种解决方式:


markdown预处理

提前处理markdown源文件,或者根据结果修改markdown文件,以得到排版较好的word文件。

  1. 合理使用标题层次

    合并多篇markdown时,注意统一标题层次。

  2. 合理使用markdown语法

    例如,避免仅仅为了排版美观而使用引用语法;markdown引用在word文件中显示效果不同,错误使用可能会产生奇怪的效果。

  3. 注意缩进和空行

    使用缩进和空行以体现段落关系。观察下面两个结果:

    markdwon word
  4. 避免手动换行排版

    markdown中不要为了让每行文字数量相同而手动使用回车换行。

  5. 替换html标签(暂时没有找到支持的方式)

    如果使用了html表格/图片等,需要替换成相应的markdown语法。


操作指南:汇总软工实践课程博客

  1. 下载群文件:文档封面和提前处理好的格式参考文件custom-reference.docx

    • 后者参考了福大毕业论文撰写规范,提前调整了部分格式
    • 后者仅修改了前四级标题格式;如果有需求,需要自行修改其他部分的格式
  2. 整理好历次作业的markdown文件

    • 参考markdown预处理中的内容修改源文件
    • 用作业的名字给每篇博客添加一级标题,用于生成目录,同时产生分页效果
  3. 在命令行运行pandoc hw1.md hw2.md hw3.md -o result.docx --reference-doc=custom-reference.docx --toc --toc-depth=1

    • 命令中markdown文件的名字、数量和顺序,以及输出文件的名字,根据自己的情况填充
  4. 核查所有内容是否正确显示;如果不是,调整markdown源文件,再次生成结果

  5. 根据实际情况,调整有问题的文字格式/图片/表格/代码段/列表缩进

  6. 修改目录标题Table of Contents目录

  7. 手动插入封面并填写相关信息

  8. 有必要时,调整页码(例如去除封面和目录部分的页码)


总结

个人感觉pandoc对于docx的格式控制是有限的。如果对word操作很熟练,使用pandoc的基本转换功能就可以,后续的格式/目录/页码都能够在word文档中完成。如果不熟悉word,或者希望pandoc提供一些便利,这篇博客的其他部分可以提供一些帮助。

posted @ 2021-06-27 19:19  kofyou  阅读(9795)  评论(2编辑  收藏  举报