Skip to content

An all-in-one easily extensible framework for converting LaTeX files to docx files.

Notifications You must be signed in to change notification settings

fncokg/latex2docx-framework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LaTeX到docx文档转换

注意:这是一个开发中的项目,文档并不完善,目前只推荐有一定Python基础的用户使用。

这是一个把LaTeX转换成docx的工作框架,框架核心是基于pandoc和pandoc-tex-numbering这个filter完成,但pandoc对LaTeX和docx的支持都不够完善,所以需要使用这个框架来完成转换前后一些额外的处理。

对于普通用户,我会提供简单的bat脚本,对于已知可以支持的功能,你只需要按照我描述的工作流程就可以零代码完成转换。对于高级用户,我会提供一些接口,你可以自定义转换的过程。

基本使用

如果你对于Python和LaTeX都不太熟悉,建议你直接使用以下步骤:

  1. 安装pandoc
  2. 安装conda
  3. 使用pip安装panflute和pylatexenc
pip install panflute pylatexenc
  1. 下载本项目
  2. 把你的全部LaTeX源文件拷贝到tex_source目录下
  3. 把要转换的tex文件或LaTeX项目的主文件重命名为main.tex
  4. 运行latex2docx.bat
  5. 转换后的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

来完成转换

更新pandoc filter

utils目录下的pandoc-tex-numbering.pylang-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])
Loading

简单来说,本框架先读取原始LaTeX(入口)文件,并循环读取所有被(循环)引入的文件,允许你对所有LaTeX文件做任何转换时修改,之后调用pandoc转换,转换之后允许你对docx做任何修改,最后输出docx文件。期间产生的任何临时文件都会被删除,从而不对原始文件造成任何影响。

自定义reader和writer

修改processor.py文件,你可以自定义readerwriter函数,来实现自己的转换需求。

注意:当前的readerwriter函数是一个针对hithesis的示例。

reader(tex:str)->str函数接受一个LaTeX文件的完整内容,你可以直接对它进行任何你想做的修改,然后返回一个字符串,这个字符串是修改后的LaTeX文件的内容。推荐基于repylatexenc来完成。

writer(tmp_docxfile:str, output_file:str)->None函数接受一个临时docx文件的路径和一个输出docx文件的路径(这样你就可以用任何你喜欢的方法读取并保存这个docx文件),你需要自己读取这个临时docx文件,做任何你想做的修改,然后保存到输出docx文件。推荐基于python-docx来完成。

自定义pandoc参数

修改latex2docx.py文件最顶部的两个常量PANDOC_ARGSPANDOC_FILTERS,你可以自定义pandoc的参数和filter。

About

An all-in-one easily extensible framework for converting LaTeX files to docx files.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published