1
0
Files
bagu-thesis/pandoc/README.md

131 lines
8.8 KiB
Markdown
Raw Normal View History

2026-05-26 16:54:54 +08:00
# Pandoc Thesis Environment
2026-06-13 14:25:50 +08:00
适用于Pandoc的将LaTeX论文转换为DOCX格式论文的环境。
2026-05-26 16:54:54 +08:00
2026-06-13 14:25:50 +08:00
# 必要条件
你需要一些必要条件来使用本环境:
- Pandoc 3.9.0.2
* 我强烈建议安装完全一致的版本因为我曾看过一些Pandoc Filter需要与Pandoc版本完全一致才能使用比如`pandoc-crossref`而我不太清楚我现在用的Pandoc Filter是否有相似的要求除非你完全确信你选择的版本可以运行多试试也没坏处如果你不是急着要转换文档的话
* 安装完成后需要确保Pandoc在你的环境变量中。使用`pandoc --version`指令检查Pandoc版本并测试是否能成功找到Pandoc。
- Python 3.11和Astral UV
* Python和UV的版本实际上限制不是那么大没必要完全一致确定能用即可。
* Astral UV安装完后在本目录下运行`uv sync`来初始化环境。
2026-05-26 16:54:54 +08:00
# 用法
2026-06-13 14:25:50 +08:00
在本目录下执行以下指令进行文档转换:
```bat
2026-05-26 16:54:54 +08:00
uv run pandoc <thesis.tex> \
-s \
-f latex -t docx \
--citeproc \
2026-06-23 15:10:11 +08:00
--metadata-file=shared-meta.yaml \
--metadata-file=chinese-meta.yaml \
2026-05-26 16:54:54 +08:00
-F pandoc-tex-numbering \
--resource-path <path-to-tex-dir> \
2026-06-13 14:25:50 +08:00
--reference-doc=my-thesis.docx \
2026-05-26 16:54:54 +08:00
-o <thesis.docx>
```
参数解释:
2026-06-13 14:25:50 +08:00
- `uv run pandoc`要求在UV的虚拟环境中执行Pandoc命令让Pandoc能够找到在虚拟环境中安装的使用Python编写的Pandoc Filter。
- `<thesis.tex>`在执行的时候替换为指向你待转换的LaTeX文档的路径。
- `-s`表示Standalone模式用于表示生成一个独立的文档而不仅仅是文档片段。
- `-f latex -t docx`用于显式指定输入输出格式。
- `--citeproc`用于启用引用解析功能,不启用就没有引用标识。
2026-06-23 15:10:11 +08:00
- `--metadata-file=shared-meta.yaml`指定了中英文共享的元数据,包括:开启要求将文内引用连接到文末参考列表文献等。以及`pandoc-tex-numbering`过滤器的基础共享配置等。
- `--metadata-file=chinese-meta.yaml`指定了中文论文需要的元数据,如果你正在处理纯英文论文,请切换到`english-meta.yaml`。这部分元数据包括:参考文献样式,以及`pandoc-tex-numbering`过滤器的引用文本配置等。
2026-06-13 14:25:50 +08:00
- `-F pandoc-tex-numbering`显式指定使用`pandoc-tex-numbering`过滤器。
- `--resource-path <path-to-tex-dir>`用于设置LaTeX资源文件夹。Pandoc会在你指定的`<path-to-tex-dir>`文件夹中查找文档中引用的图片和子文档等内容。一般来说需要设置为你待转换的LaTeX文件所在的文件夹的路径。
- `--reference-doc=my-thesis.docx`设置了转换到DOCX格式时使用的模板。你也可以把`my-thesis.docx`换成你想要的模板,至于如何编辑属于你的模板,请参考后文。
- `-o <thesis.docx>`:在执行的时候将`<thesis.docx>`替换为指向你存储转换后的DOCX文档的路径。
# 过滤器补丁
2026-06-14 09:57:53 +08:00
本项目采用了名为`pandoc-tex-numbering`的过滤器这是一个很棒的项目但它能够做到我期望的样子的新版本并没有及时在PyPI上发布因此我不得不使用一种比较“脏”的手段来使其达到我想要的效果。我采用Git Diff的方式给下载下来的最新版`pandoc-tex-numbering`的源码打补丁使其符合我的需求。等新版本发布在PyPI上后这一步就不再需要了。下面将介绍如何打这个补丁。
## 应用补丁
> [!WARNING]
> 应用补丁前,请确保已经使用`uv sync`指令配置好虚拟环境,否则以下指令无效。
在该目录下执行以下命令以应用补丁:
```sh
git apply --directory pandoc/.venv/Lib/site-packages/pandoc_tex_numbering numbering-caption-delimiter.diff
```
其中`--directory`选项用于在`diff`文件的路径前附加指定路径使其成为一个完整的相对于git根目录的路径。
## 撤销补丁
> [!WARNING]
> 如果不执行撤销补丁的指令由于Astral UV的硬链接原因所有使用该版本`pandoc-tex-numbering`包的项目都会受到该补丁影响。因此我强烈建议在使用完本环境后将补丁撤销。
当你使用完本环境后,执行以下命令以撤销补丁:
```sh
git apply -R --directory pandoc/.venv/Lib/site-packages/pandoc_tex_numbering numbering-caption-delimiter.diff
```
其中`-R`选项表示反向应用补丁。
2026-06-13 14:25:50 +08:00
# DOCX模板
该目录下的`my-thesis.docx`文件是我已经编辑好的模板。该模板可以满足我的大部分的需求,输出也足够的美观。
## 创建模板
通常而言你无需重新创建该模板但如果你更换了Pandoc的版本或者你的格式需求与我不一致你就需要重新创建属于你自己的DOCX模板。以下内容将讲述如何创建属于你自己的DOCX模板这也是我创建我自己模板时的步骤。
### 导出默认模板
使用`pandoc -o <custom-reference.docx> --print-default-data-file reference.docx`来导出模板。其中:
- `<custom-reference.docx>`是导出的DOCX模板的存放路径。
- `--print-default-data-file`用于指示Pandoc导出内部模板。
- `reference.docx`是固定文本,不得改变。
### 修改模板
使用Word而非WPSLibreOfficemacOS Word等软件来修改此模板。打开模板后你会发现其中包含一系列文本。这些文本是方便你预览效果用的我们需要修改的是样式修改样式后这些文本也会变化。
在Ribbon栏的“开始”选项卡下找到“样式”部分点击右下角的小箭头展开“样式”对话框。可选的你可以点击最下方的“选项...”按钮,将列表的排序方式选择为“按类型”以获得更好的浏览体验。
- 找到“正文”样式,它是几乎所有样式的基础,我们要在这里修改全局的字体设置。点击其右边的小箭头,选择“修改”,打开对话框。
* 字体的中文改为宋体西文改为Times New Roman字号设置为小四。
* 段落的间距改为段后0.5行。
- 找到“正文文本”样式它是所有正文文字的样式。其段落为首行缩进2字符。
- 找到“标题1”至“标题9”样式依次修改。将颜色设置为自动。中文改为黑体西文保持Times New Roman。字号依次为三号四号小四后面全是小四。并删除所有倾斜和加粗。
- 找到“标题”样式它是除了正文标题以外的其它标题的基础格式。将字体中文改为黑体西文改为Times New Roman。
- 找到“题注”样式它是“Image Caption”和“Table Caption”这两个样式的基础。对其进行修改。
* 字体设置为黑体,字号为五号,并删除斜体样式。
* 段落设置为居中。
- 找到“Figure”样式它决定了插入的图的样式。将其段落设置为居中以让插入的图居中。
2026-06-14 10:08:54 +08:00
- 找到“超链接”样式
* 字体的中文改为宋体,字号设置为小四。如果不改的话,它会试图继承“题注”的样式,会导致正文里样式不一致。
* 删除其颜色。
2026-06-13 14:25:50 +08:00
- 找到“书目”样式,它是参考文献列表所用的样式。
* 字体设置为宋体,字号为五号。
* 段落设置为悬挂缩进2字符。
- 找到“脚注文本”样式。它是脚注文本的样式。
* 字体的字号改为五号。
- 点击文档中的表格转到Ribbon栏的“表设计”选项卡下点击表格样式右边的下拉箭头选择“修改表格样式”。打开对话框。
* 进入“边框和底纹”对话框,把上下框线加上,这样就实现了三线表。
* 进入“表格属性”对话框设置
- 把“表格”选项卡里的“对齐方式”设置为“居中”,让表格在段落中居中。
- 把“行”选项卡里的“允许跨页断行选项”关掉,以保证表格美观。
# 缺点
目前该环境存在以下缺点:
2026-06-23 15:10:11 +08:00
- 不能够按照原生Word编写的方式使用交叉引用来进行文献和图表的引用。我不打算在这个环境中通过Pandoc Filter来解决这个问题我打算直接通过未来规划中的专门的转换器来解决。
- 不能够将LaTeX的`\clearpage``\newpage`换页指令翻译成换页符。我写了一个Lua Filter来完成这个工作现存的也有官方的过滤器可以完成这一工作但它必须启用`latex+raw_tex`扩展后才能正常使用。然而这个`raw_tex`扩展带来的副作用远大于启用其的好处。首先是我各种图片的大小设置全部失效了,另外,面对不认识的环境名,它也不输出环境中的内容了。
- 不能够处理不认识的命令。我的LaTeX文档中用了一些自定义的命令这些命令它不识别就算了它连其参数都不愿意以字面量输出出来。比如`\my_style{Keywords}`,它直接什么都不输出,但我期望他能够至少把`Keywords`输出出来,即使在不认识`\my_style`的情况下。