thu-thesis
自动将清华毕业论文 Word (.docx) 转换为符合 thuthesis 官方模板规范的完整高质量 PDF,支持章节、摘要、图表、参考文献等处理。
Description
name: thu-thesis description: 清华大学毕业论文 Word → PDF 一键格式规范化工具。输入任意 Word (.docx) 格式的清华毕业论文,自动转换为符合清华 thuthesis 官方 LaTeX 模板规范的高质量 PDF。适用于所有清华学位论文(MBA/学硕/专硕),一条命令搞定。功能:自动提取章节结构、中英文摘要、参考文献(自动生成 BibTeX)、图片(含 caption)、表格(含表头和标题)、致谢、个人简历;自动生成符号和缩略语说明(含孤儿缩略语检测与正文首次出现处自动补写);自动生成插图清单和附表清单;输出完整 thuthesis LaTeX 项目并编译为 PDF,最终 PDF 复制到 Word 原文件同目录。运行时依赖:python-docx、jinja2、xelatex/bibtex(TeX Live);setup.sh 会从 GitHub 克隆 thuthesis 到 /tmp/thuthesis-latest;脚本仅读写技能 workspace 及临时目录,不访问无关系统配置或网络端点(仅访问 thuthesis GitHub 仓库);macOS 下自动用 open 打开生成的 PDF;外部命令:xelatex、bibtex、git。Use when: 用户需要把 Word 格式的清华毕业论文转为规范 PDF,或需要对毕业论文做格式规范化处理。
清华 MBA 论文 Word → PDF 一键转换
⚠️ 核心操作原则(不得违反)
只从 Word 中提取信息,不修改 thuthesis 模板格式。
- thuthesis 的封面、页眉、目录、参考文献、图表样式等,全部由
thuthesis.cls自动生成- 脚本只负责把 Word 里的内容(标题、摘要、章节、图表、参考文献等)提取出来填入
.tex文件- 若 Word 中某字段缺失,对应 LaTeX 字段留空,不删除、不跳过、不用占位符替代
- 任何格式上的"改进"都必须以
assets/databk/中的官方示例为准,不得自行发挥
格式参考:assets/databk/
assets/databk/ 是从官方 thuthesis 项目备份的原始示例 data 文件,是本工具一切格式决策的黄金标准:
| 文件 | 参考内容 |
|---|---|
chap01.tex ~ chap04.tex |
正文章节、三线表、图片、公式格式 |
abstract.tex |
中英文摘要格式 |
denotation.tex |
缩略语/符号说明格式 |
acknowledgements.tex |
致谢格式 |
resume.tex |
个人简历格式 |
committee.tex |
答辩委员会名单格式 |
comments.tex |
导师评语格式 |
resolution.tex |
答辩决议书格式 |
遇到任何格式问题,先查 databk/ 里的对应文件,再动代码。
初次使用:拉取 thuthesis 格式参考
首次使用前必须运行一次:
SKILL_DIR="${WORKSPACE}/skills/thu-thesis"
bash "$SKILL_DIR/scripts/setup.sh" "$SKILL_DIR"
这会从 GitHub 拉取最新 thuthesis 源码,将 data/ 目录复制到 assets/databk/ 作为格式参考基准,并将 thuthesis.cls 等类文件缓存到 /tmp/thuthesis-latest/。databk/ 不打包进 skill,每次按需拉取最新版。
依赖
pip3 install python-docx jinja2
# 需要已安装 TeX Live,xelatex 通常位于 /Library/TeX/texbin(macOS)或 /usr/bin(Linux)
一键转换
SKILL_DIR="${WORKSPACE}/skills/thu-thesis"
python3 "$SKILL_DIR/scripts/convert.py" <输入.docx> [输出目录]
# 示例:
python3 "$SKILL_DIR/scripts/convert.py" "论文.docx" /tmp/my-thesis
完成后自动打开 PDF。
四步流程(含评测与自动修复)
input.docx
↓ Step1 parse_docx.py → output/parsed_*.json + output/figures/(图片)
↓ Step2 render.py → <output_dir>/thesis.tex + data/*.tex + ref/refs.bib + figures/
↓ Step2.5 _auto_cite_missing() → 关键词匹配补 \cite;无匹配用 \nocite 兜底(100%覆盖)
↓ Step3 xelatex→bibtex→xelatex×2~3 → <output_dir>/thesis.pdf ✅
↓ Step4 evaluate.py → evaluation_report.md(33项 Rubric 评测)
↓ Step5 自动修复 → 发现可修复问题,立即重新执行受影响步骤,不询问用户
转换完成后 PDF 自动复制到 Word 原文件同目录(同名 .pdf)。
Step 5:评测后自动修复(不询问用户)
评测结果出来后,立即判断哪些问题可以工具修复,直接修复,无需等待确认。
可自动修复的问题(立即修复)
| 问题 | 修复方式 |
|---|---|
| 封面 title 被误识别(如答辩委员会名单被当成标题) | 修 parse_docx.py → 重跑 convert |
| BibTeX author/title 字段为空 | 修 render.py 解析逻辑 → 重跑 render + compile |
| B4 节级标题检测失败(数据结构问题) | 修 evaluate.py 检测逻辑 |
| C4 BibTeX 条目数不匹配(解析漏条目) | 检查 refs.bib,修 render.py → 重跑 |
| C7 author-year 引用未转 \cite(有 bib key 可匹配) | 修正则 → 重跑 render + compile |
| LaTeX 编译报错(& 转义、特殊字符等) | 修 render.py 转义逻辑 → 重跑 compile |
不可自动修复的问题(保留 WARN,报告说明)
| 问题 | 原因 |
|---|---|
| 表格/图片无 caption | Word 原文本来就没有,工具无中生有 |
| 孤儿缩略语无解释 | Word 原文未定义,只能标注待补充 |
| C5 文献未被正文引用 | Word 正文本来就没引用,已用 \nocite 兜底 |
| C7 author-year 匹配失败(无 bib key) | 姓名简称/别名无法映射,原文限制 |
| committee/comments/resolution 占位 | 答辩后才有内容,无法提前填写 |
修复循环规则
- 发现可修复问题 → 修复脚本 → 重跑受影响步骤 → 重新评测
- 循环最多 3 次,防止无限循环
- 每次修复后报告「修复了什么」和「新评分」
- 最终仍有 WARN 的不可修复项,报告中注明「原始 Word 内容限制,无法自动修复」
Rubric 评测(evaluate.py)
每次 convert 完成后自动运行,也可单独调用:
SKILL_DIR="${WORKSPACE}/skills/thu-thesis"
python3 "$SKILL_DIR/scripts/evaluate.py" <parsed.json> <latex_dir>
评测报告保存到 <latex_dir>/evaluation_report.md。
评分制度
- 必要项(满分3分):PASS=3分,WARN=1.5分,FAIL=0分;有必要项FAIL时整体不通过
- 重要项(满分2分):PASS=2分,WARN=1分,FAIL=0分
- 亮点项(满分1分):PASS=1分,WARN=0.5分,FAIL=0分
- 失误扣分项(满分0):错误1处扣1分,最多扣10分(如C6 cite内容关联性)
- NA项:无图/无表等不适用场景,跳过不计入分母
- 最终给出:总分 / 满分(百分比)+ 优秀≥90% / 良好≥75% / 合格≥60% / 不合格
报告要求(重要!)
所有扣分项必须在报告中写明扣分原因备注,包括:
- ❌ FAIL项:说明具体缺失或错误内容(不能只写"缺失")
- ⚠️ WARN项:说明半分原因和建议修复方法
- ➖ DEDUCT项:说明每处扣分的具体位置和内容
- 明细表说明列不截断,完整输出原因
评测维度(33项)
| 维度 | 项数 | 检查内容 |
|---|---|---|
| A. 内容-元信息 | 7项 | 中英文标题、作者、导师、培养单位、日期 |
| A. 内容-摘要 | 4项 | 中英文摘要内容量、关键词数量 |
| B. 内容-正文 | 4项 | 章节结构、.tex文件、文字总量、节级标题 |
| C. 参考文献 | 6项 | 列表完整、BibTeX生成、author/title字段、PDF条目数、引用覆盖率、C6 cite内容关联性抽检(失误扣分)、C7 author-year行文引用规范(关键失误) |
| D. 图片 | 3项 | 提取数量、caption、LaTeX渲染 |
| E. 表格 | 3项 | 提取数量、三线表格式、caption |
| F. 缩略语 | 2项 | 缩略语表生成、孤儿缩略语标注 |
| G. 附件 | 2项 | 致谢、个人简历 |
| H. 编译 | 3项 | PDF已生成、无LaTeX Error、thusetup格式 |
C6 cite内容关联性抽检说明
- 机器代理:bib字段(author+title均为空)→ 不可追溯,扣1分/处,最多扣10分
- 抽检报告:每次评测随机抽10个cite,输出「上下文 + 文献信息 + 人工核查勾选框」
- 人工核查后如发现错误关联,额外在备注中记录并手动扣分
SKILL_DIR="${WORKSPACE}/skills/thu-thesis"
python3 "$SKILL_DIR/scripts/parse_docx.py" <input.docx> [output_dir]
提取内容到 JSON:封面元数据、中英文摘要+关键词、章节结构(Heading1/2/3)、图片(提取到 output/figures/)、表格(表头+行数据+caption)、参考文献、致谢、个人简历。
封面字段提取规则(表格格式封面):
- 合并单元格每行去重,只取第一次出现的值
- 字段名和值在同一单元格("培养单位:经济管理学院")或相邻列("指导教师" | "肖勇波教授")均支持
- 导师格式化为"姓名, 职称"(thuthesis 要求)
- 字段缺失时留空,不强制填充
- 中文日期支持:二○二五年、二〇二五年、2025年 等多种写法
图片 caption 提取规则(优先级):
- 段落自身文本以"图"开头(图文在同一段落)
- 后面紧跟 Caption1 样式段落
- 后面2段内有 Normal/"图"开头的段落
- 前面4段内有 Caption1 或 Normal/"图"开头的段落
表格 caption 提取规则:
- 先向前查3个 body element,找 Normal/"表"开头或 Caption1
- 再向后查3个 body element(表格后才有 caption 的情况)
正文样式兼容列表: Body Text、Normal、List Paragraph、段落(不同 Word 模板会用不同样式名)
Step 2: render.py — 按模板填充,不改格式
SKILL_DIR="${WORKSPACE}/skills/thu-thesis"
python3 "$SKILL_DIR/scripts/render.py" <parsed.json> <output_dir>
渲染顺序(严格按此顺序,不能乱):
- 复制 thuthesis.cls 等类文件 + 图片
- thusetup.tex(封面元数据)
- abstract.tex
fix_orphan_abbrevs(data):孤儿缩略语补写(必须在章节渲染前!)generate_bibtex(refs, output_dir):Word 参考文献列表 →ref/refs.bib(BibTeX 格式)- 各章节 chap0N.tex(正文中
[N]/[N,M]/[N-M]自动转换为\cite{key}) - acknowledgements.tex、resume.tex
- denotation.tex(缩略语表)
- 占位文件:committee.tex、comments.tex、resolution.tex
表格格式(严格遵循 databk/chap02.tex 的三线表标准):
\begin{table}[htbp]
\centering
\caption{表题}
\begin{tabularx}{\textwidth}{*{N}{X}}
\toprule
表头1 & 表头2 \\
\midrule
内容1 & 内容2 \\
\bottomrule
\end{tabularx}
\end{table}
- 无竖线,三线(toprule/midrule/bottomrule)
tabularx+*{N}{X}自动分配列宽,防止超出页面- caption 在表格上方
Step 3: 编译 PDF(xelatex → bibtex → xelatex × 2)
convert.py 自动运行完整 BibTeX 编译流程:
xelatex(生成 .aux,含 \citation 记录)bibtex(根据 .aux 从 refs.bib 生成 .bbl)xelatex(把参考文献 .bbl 写入 PDF)xelatex(稳定目录/交叉引用)- 若 toc 仍变化,自动补第5次
参考文献处理
Word 原文格式 → BibTeX 自动转换:
render.py内置规则 based 解析器,自动识别@article/@book/@misc- BibTeX key 格式:
作者姓拼音 + 年份 + 关键词(全 ASCII,无中文) - 正文中
[10]→\cite{venkatraman1994venkatraman},支持[1,2,3]和[1-3]范围 - 文献综述等章节的 author-year 行文引用自动识别并补
\cite:曹玉(2025)分析了...→曹玉(2025)\cite{cao2025aigc}分析了...BiyuTang(2023)指出...→BiyuTang(2023)\cite{tang2023aigcfilm}指出...葛文婕和任海全(2025)→ 多作者取第一作者姓匹配- 支持:中文全角括号
(年)、英文半角括号(年)、CamelCase 拼音名 - 匹配失败(文献库无对应条目)时保留原文,rubric C6 会警告
- 输出文件:
<output_dir>/ref/refs.bib,包含编号→key 映射注释表
已知限制:
- 网络资源(
[EB/OL])title/author 字段依赖原文是否规范 - 原文引用编号超出参考文献总数时(如 [44] 但只有 43 条),bibtex 会警告 undefined
缩略语处理
已知缩略语提取(三种正则,词典优先覆盖):
XXX(中文解释)中文名称(XXX)Full English Name (XXX)(校验首字母匹配)
内置 MBA 词典 40+ 词条,词典结果覆盖正则结果。
孤儿缩略语(出现≥2次但无解释):
- 正文第一次出现处插入
XXX(待补充全称) - denotation.tex 中标注
% ← 请人工填写完整解释
已知限制
- SVG 图片跳过(xelatex 不原生支持)
- committee.tex / comments.tex / resolution.tex 为占位,需手工填写
.doc格式需先用textutil -convert docx转换(macOS 自带),但转换后段落样式会丢失,标题层级靠字体大小推断(实验性)
文件说明
| 路径 | 说明 |
|---|---|
scripts/convert.py |
一键入口 |
scripts/parse_docx.py |
Word 解析 → JSON(只提取,不格式化) |
scripts/render.py |
JSON → LaTeX 项目(填充模板,生成 BibTeX) |
assets/templates/*.j2 |
Jinja2 模板(6个) |
assets/databk/ |
thuthesis 官方格式示例,格式决策唯一参考 |
thuthesis 配置(MBA 专业硕士)
\thusetup{
degree = {master},
degree-type = {professional},
degree-category = {工商管理硕士},
degree-category* = {Master of Business Administration},
department = {经济管理学院},
}
Reviews (0)
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!