使用pandoc将markdown转换成word文件
pandoc可以完成多种文件类型的相互转换,支持的文件格式参见官方网站:https://pandoc.org/index.html。本博客参考了官方文档以及社区讨论,将介绍如何利用pandoc将markdown转换为word文档。
基本使用
-
在Installing页面选择合适的版本下载
-
命令行运行基本参数
- 使用参数
-f
FORMAT
和-t
FORMAT
指定源和目标文件格式;pandoc支持识别文档后缀,一般可以省略 - 使用参数
-o
FILE
指定输出文件
- 使用参数
-
一个例子
省略文件格式,使用命令
pandoc 课程回顾与总结.md -o 课程回顾与总结.docx
,得到的结果如下:课程回顾与总结.md 课程回顾与总结.docx
修改word文档格式
使用参数--reference-doc=
FILE
可以指定docx输出文件的格式参考对象,从而修改word文档的格式。
-
获取模板
首先使用命令
pandoc -o custom-reference.docx --print-default-data-file reference.docx
拷贝一份默认的参考文件模板,取名为custom-reference.docx
-
修改模板样式
用word打开
custom-reference.docx
,修改各部分对应样式。例如,将光标移动到Heading 2
,找到对应的样式,右键进行修改:下图修改了
Heading 1
和Heading 2
,将字体修改为黑体,颜色修改为黑色:custom-reference.docx修改前 custom-reference.docx修改后 如果要修改输出文件中的表格样式,直接给模板中的表格更换样式,不能达成效果。根据Github上的讨论得知,必须修改名为
Table
的表格样式,才能控制输出文件的表格样式。 -
再次转换文件
使用命令
pandoc 课程回顾与总结.md -o 课程回顾与总结.docx --reference-doc=custom-reference.docx
,此次运行结果和之前对比如下,注意到一级标题和二级标题变成黑色:默认格式 修改格式后
合并多个markdown文件,自动生成目录
pandoc可以接受多个文件为输入,例如pandoc file1.md file2.md file3.md -o result.docx
;另外有一些参数可以用于自动生成目录。
-
生成目录
-
使用参数
--toc
自动生成目录同时可以修改格式参考文件中,
TOC标题
/TOCHeader
的样式,选中段前分页
,这样之后手动插入文档封面会比较方便。 -
使用参数
--toc-depth=
NUMBER
指定目录包含的标题深度如果每一篇markdown的文章标题都是一级标题,使用
--toc-depth=1
可以生成最简单的目录。 -
使用参数
--reference-doc=
FILE
指定格式参考文件,并给格式参考文件添加页码如此生成的文件也会有页码。
-
-
文件分页
pandoc读入了多个文件,输出时各个文件的内容是连续的;希望每个文件能从新的一页开始,检索互联网得到两种解决方式:
-
格式选择段前分页
一级标题往往是文章标题。如果修改一级标题的格式,选中
段前分页
,每一个markdown文件的一级标题就会出现在新的一页。参考链接:How to add a page break in word document generated by RStudio & markdown
-
pandoc使用filter
Pandoc provides an interface for users to write programs (known as filters) which act on pandoc’s AST.
什么是filter,参考官网:Pandoc filters
如何使用filter达到分页目的,参考这个回答:Pandoc markdown page break
-
markdown预处理
提前处理markdown源文件,或者根据结果修改markdown文件,以得到排版较好的word文件。
-
合理使用标题层次
合并多篇markdown时,注意统一标题层次。
-
合理使用markdown语法
例如,避免仅仅为了排版美观而使用引用语法;markdown引用在word文件中显示效果不同,错误使用可能会产生奇怪的效果。
-
注意缩进和空行
使用缩进和空行以体现段落关系。观察下面两个结果:
markdwon word -
避免手动换行排版
markdown中不要为了让每行文字数量相同而手动使用回车换行。
-
替换html标签(暂时没有找到支持的方式)
如果使用了html表格/图片等,需要替换成相应的markdown语法。
操作指南:汇总软工实践课程博客
-
下载群文件:文档封面和提前处理好的格式参考文件
custom-reference.docx
- 后者参考了福大毕业论文撰写规范,提前调整了部分格式
- 后者仅修改了前四级标题格式;如果有需求,需要自行修改其他部分的格式
-
整理好历次作业的markdown文件
- 参考
markdown预处理
中的内容修改源文件 - 用作业的名字给每篇博客添加一级标题,用于生成目录,同时产生分页效果
- 参考
-
在命令行运行
pandoc hw1.md hw2.md hw3.md -o result.docx --reference-doc=custom-reference.docx --toc --toc-depth=1
- 命令中markdown文件的名字、数量和顺序,以及输出文件的名字,根据自己的情况填充
-
核查所有内容是否正确显示;如果不是,调整markdown源文件,再次生成结果
-
根据实际情况,调整文字格式/图片/表格/代码段/列表缩进
-
修改目录标题
Table of Contents
为目录
-
手动插入封面并填写相关信息
-
有必要时,调整页码(例如去除封面和目录部分的页码)
总结
个人感觉pandoc对于docx的格式控制是有限的。如果对word操作很熟练,使用pandoc的基本转换功能就可以,后续的格式/目录/页码都能够在word文档中完成。如果不熟悉word,或者希望pandoc提供一些便利,这篇博客的其他部分可以提供一些帮助。