LaTeX 是非常适合排版和编写论文的工具,但是在一些情况下我们还是需要按要求提交 Word 文件,比如为了和合作者更好配合,提交系统的限制等。这时候如果有一个将 LaTeX 文档转化为 Word 文档的方案就可以省去从 tex 文件大量搬运内容的时间。帮助 LaTeX 用户专心在一个工具上编写,而将提交的 Word 文件交给转化工具。这篇博客将会介绍如何使用 pandoc 来将 LaTeX 文件转化为 Word 文件,保留其中的文字内容,公式,图片,表格,引用和参考文献。

TLDR

Pandoc版本信息:

pandoc.exe 2.18
Compiled with pandoc-types 1.22.2, texmath 0.12.5, skylighting 0.12.3,
citeproc 0.7, ipynb 0.2, hslua 2.2.0
Scripting engine: Lua 5.4

假设要转变的tex文件名称为main.tex,文献数据保存在了ref.bib文件,文献引用使用了ieee.csl格式,下面的脚本会转出文档到main.docx并且较为完整的论文排版要求:

pandoc --filter pandoc-crossref \
    --citeproc --bibliography=ref.bib --csl ieee.csl \
    -M autoEqnLabels -M tableEqns \
    -s main.tex -o main.docx

前言

在将一个latex文件转化为word的时候,需要转化后的文档能够满足下面的要求:

  • 文字内容,所有文字内容保留完整
  • 图片和表格的交叉引用,
  • 公式,公式内容正确而且自动标号,并且能够正确引用
  • 参考文献及其引用
  • Word排版样式

不是所有的文档都需要满足上面的全部要求,可以通过调节pandoc的参数选择需要实现哪些功能,功能要求越多那么需要调节的参数也会越多。下面分别介绍如何调整pandoc参数来满足上面的要求。

基本使用 - 保留文字内容

如果对转换后的 Word 文档没有任何特别的特别要求,只希望保证文字,图片等内容均完整,使用下面的命令:

pandoc -s main.tex -o main.docx

图片,表格的交叉引用

如果希望 LaTeX 中对图标的交叉引用,比如\Figure ref{fig:fig1}在word中依然显示为Figure 1,你可以使用加上pandoc-crossref参数:

pandoc --filter pandoc-crossref \
    -s mydoc.tex -o mydoc.docx

pandoc-crossref是另一个项目中的程序,所有需要先进行下载。可以到release页面中找到一个版本下载,可以放到环境变量指定的路径下,或者放到当前目录。

Pandoc-crossref 自定义设置

如果需要修改转化时候的Metadata,比如将图片的caption由figure 1变为图 1,你需要修改pandoc-crossref配置文件,参考http://lierdakil.github.io/pandoc-crossref/#settings-file

pandoc --filter pandoc-crossref --filter pandoc-citeproc --bibliography=ref.bib 
--csl ieee.csl --reference-docx=IEEE_template.doc 
-M pandoc-crossref.yaml mydoc.tex -o mydoc.docx

参考文献及其引用

过往版本的pandoc需要使用另外一个项目pandoc-citeproc中的程序,对于较新版本的pandoc,可以直接添加--citeproc参数来解析 bibliography 文件和 csl 风格文件来处理文献引用。

一个命令的例子如下,下面使用了ieee.csl作为引用风格设置的文件,使用ref.bib存放文献数据。

pandoc --filter pandoc-crossref \
    --citeproc \
    --bibliography=ref.bib --csl ieee.csl \
    -s mydoc.tex -o mydoc.docx

如果需要使用中文的引用风格,可以使用其它的csl文件,比如chinese-gb7714-2005-numeric.csl

公式

如果希望命令能在 Word 文档中的公式的右边自动按照1,2,……,编号,可以添加额外的参数,其中-M autoEqnLabels设置给公式编号,-M tableEqns让所有的编号靠右对齐,到目前为止完整的命令如下:

pandoc --filter pandoc-crossref \
    -M autoEqnLabels -M tableEqns \
    --citeproc \
    --bibliography=ref.bib --csl ieee.csl \
    -s mydoc.tex -o mydoc.docx

你会发现这个命令输出的公式编号虽然正确,但是在引用的位置没有按照 公式1,公式2 这样引用,而是类似于 公式{eq:eq1}。并且有些情况下编号没有靠右对齐。目前据我所知使用pandoc还不能完全解决这个问题,可以在输出文档上进行手动调节来满足提交要求。

Word排版样式

你可以将输出的 Word 文件按照模板文件进行排版,这可以在pandoc中输入额外的参数--reference-doc=IEEE_template.docx来实现。IEEE的模板文件可以在IEEE template selector找到一个进行试验。

pandoc --filter pandoc-crossref \
    -M autoEqnLabels -M tableEqns \
    --citeproc \
    --bibliography=ref.bib --csl ieee.csl \
    --reference-doc=IEEE_template.docx \
    -s mydoc.tex -o mydoc.docx

References