注意:这是一个开发中的项目,文档并不完善,目前只推荐有一定Python基础的用户使用。
这是一个把LaTeX转换成docx的工作框架,框架核心是基于pandoc和pandoc-tex-numbering这个filter完成,但pandoc对LaTeX和docx的支持都不够完善,所以需要使用这个框架来完成转换前后一些额外的处理。
对于普通用户,我会提供简单的bat脚本,对于已知可以支持的功能,你只需要按照我描述的工作流程就可以零代码完成转换。对于高级用户,我会提供一些接口,你可以自定义转换的过程。
如果你对于Python和LaTeX都不太熟悉,建议你直接使用以下步骤:
- 安装pandoc
- 安装conda
- 使用pip安装panflute和pylatexenc
pip install panflute pylatexenc
- 下载本项目
- 把你的全部LaTeX源文件拷贝到
tex_source
目录下 - 把要转换的
tex
文件或LaTeX项目的主文件重命名为main.tex
- 运行
latex2docx.bat
- 转换后的docx文件会出现在与
latex2docx.bat
同级目录的下,名字是main.docx
你如果比较熟悉命令行,可以做一些Customized的操作,比如:
转换脚本是latex2docx.py
,它接受三个参数:
--input
或-I
:指定输入的LaTeX文件,默认是tex_source/main.tex
--output
或-O
:指定输出的docx文件,默认是input
同目录下,后缀改为.docx
--metadata
或-M
:pandoc转换的metadata文件,默认是tex_source/metadata.yaml
--project
或-P
:指定LaTeX项目的根目录,默认是tex_source
。当此参数为空时,仅处理单个目标文件,否则处理整个项目。当文件中使用了input
等命令引入其他文件时,必须使用此参数。
因此你可以在命令行运行:
python latex2docx.py -I tex_source/main.tex -O output.docx -M tex_source/metadata.yaml -P tex_source
来完成转换
utils
目录下的pandoc-tex-numbering.py
和lang-num.py
是本repo创建时从这里下载的,如果这个filter有更新,你可以直接替换这个文件。
对于熟悉Python的用户,你可以把这个项目视为一个工作脚手架。本项目的工作流如下:
flowchart LR
A([LaTeX]) --> B{Python Reader}
B --> C[Temp Tex File / Project]
C --> D("`pandoc
pandoc-tex-numbering`")
D --> E[Temp Docx File]
E --> F{Python Writer}
F --> G([Docx])
简单来说,本框架先读取原始LaTeX(入口)文件,并循环读取所有被(循环)引入的文件,允许你对所有LaTeX文件做任何转换时修改,之后调用pandoc转换,转换之后允许你对docx做任何修改,最后输出docx文件。期间产生的任何临时文件都会被删除,从而不对原始文件造成任何影响。
修改processor.py
文件,你可以自定义reader
和writer
函数,来实现自己的转换需求。
注意:当前的reader
和writer
函数是一个针对hithesis
的示例。
reader(tex:str)->str
函数接受一个LaTeX文件的完整内容,你可以直接对它进行任何你想做的修改,然后返回一个字符串,这个字符串是修改后的LaTeX文件的内容。推荐基于re
和pylatexenc
来完成。
writer(tmp_docxfile:str, output_file:str)->None
函数接受一个临时docx文件的路径和一个输出docx文件的路径(这样你就可以用任何你喜欢的方法读取并保存这个docx文件),你需要自己读取这个临时docx文件,做任何你想做的修改,然后保存到输出docx文件。推荐基于python-docx
来完成。
修改latex2docx.py
文件最顶部的两个常量PANDOC_ARGS
和PANDOC_FILTERS
,你可以自定义pandoc的参数和filter。