paper-check
by @sashavegal
本科/研究生毕业论文格式规范检测、自动修复与对比报告生成工具。 当用户需要检查论文格式是否符合学校规范、修复论文格式问题、生成修改对比报告时使用此 Skill。 支持任意学校的撰写规范文档(.doc/.docx/.txt/.pdf)输入,自动解析规范要求并与论文文档进行逐项对比检测。 典型触发场景:用户提到"论文...
clawhub install paper-check📖 About This Skill
name: paper-check description: > 本科/研究生毕业论文格式规范检测、自动修复与对比报告生成工具。 当用户需要检查论文格式是否符合学校规范、修复论文格式问题、生成修改对比报告时使用此 Skill。 支持任意学校的撰写规范文档(.doc/.docx/.txt/.pdf)输入,自动解析规范要求并与论文文档进行逐项对比检测。 典型触发场景:用户提到"论文格式检查"、"毕业论文排版"、"格式规范检测"、"论文格式修复"、"对比报告"等。
毕业论文格式规范检测与修复
Overview
本 Skill 提供一套完整的毕业论文格式检测工作流,支持任意学校的撰写规范文档输入,自动化完成:规范解析 → 格式检测 → 问题诊断 → 自动修复 → 对比报告生成。
前置要求
python-docx(必需),pywin32(仅 Windows 读取 .doc 格式时需要),lxmlpip install python-docx lxml pywin32核心工作流
Phase 1: 输入收集
收集以下信息: 1. 规范文档(可选):学校的毕业论文撰写规范文件(支持 .doc / .docx / .txt / .pdf 格式) 2. 论文文档:待检查的毕业论文 .docx 文件 3. 输出目录:检查报告和修复文件的存放路径(默认与论文文件同目录)
规范来源优先级: 1. ✅ 用户提供了规范文档 → 解析该文档,按院校规范执行检查和修复 2. ✅ 用户未提供规范文档 → 使用本 Skill 内置的通用默认规范(见下方"通用格式检查清单"章节),基于 GB/T 7713.1-2006 等国标和多校通用惯例
注意:建议告知用户"当前使用通用默认规范,如需按特定院校规范检查,请提供学校官方的论文撰写规范文件"。
Phase 2: 规范文档解析
根据规范文档格式选择解析方式:
1. .txt 文件:直接读取 2. .docx 文件:使用 python-docx 提取文本 3. .doc 文件(Windows):使用 pywin32 COM 接口转换 4. .pdf 文件:使用可用的 PDF 提取工具
解析规范文档后,提取以下关键格式要求(参考 references/format_rules_template.md):
Phase 3: 论文格式全面检测
运行格式检测脚本 scripts/check_format.py 对论文文档进行全面扫描。检测脚本会输出以下信息:
1. 页面设置信息(每个节的页边距、页眉页脚距、纸张方向) 2. 文档样式定义(Normal、Heading 1-4、TOC 等关键样式) 3. 段落详细格式(每个段落的样式、对齐、间距、缩进、字体信息) 4. 表格格式信息(边框样式、粗细、对齐) 5. 图片信息(尺寸、位置、上下文) 6. 编号/列表定义 7. 文档默认字体设置
执行方式:
python scripts/check_format.py <论文路径> <报告输出路径>
Phase 4: 问题诊断与分析
将检测报告与规范要求逐项比对,生成问题清单。每个问题包含:
| 字段 | 说明 | |------|------| | 位置 | 段落编号/节编号/表格编号 | | 检查项 | 检查的格式属性 | | 规范要求 | 对应的规范条款内容 | | 当前值 | 论文中的实际值 | | 严重程度 | 高/中/低 | | 修复建议 | 具体的修复方案 |
严重程度分级标准:
Phase 5: 自动修复
使用 scripts/fix_format.py 脚本模板自动修复可自动化的格式问题。
修复能力范围:
无法自动修复(需提示用户手动处理):
Phase 6: 对比报告生成
使用 scripts/generate_report.py(v5.0)生成修改前后对比报告(.docx 格式,A4 横向),包含:
1. 报告标题:论文名称、修改日期、修改项数 2. 对比表格(6列):序号 | 位置/定位 | 检查项 | 规范文档要求 | 修改前(原文件) | 修改后(已修复) 3. 智能位置定位: - 单个段落显示为"第N段" - 多处同类修改合并显示范围"第88~394段(共166处)" - 附带章节名称(如【研究背景和意义、国内外研究现状等】) - 附带原文内容预览,便于快速定位修改位置 4. 颜色区分:修改前红色文字、修改后绿色文字+绿色底纹 5. 分类展示:按检查类别(页面设置/摘要/页眉/正文/参考文献等)分组,交替行背景色 6. 修改统计:按分类显示已修复/总数,✅已完成 / ⚠️待确认 7. 人工确认事项:列出无法自动修复的问题 8. 修改依据:标注规范文档来源
两种调用接口:
create_report_from_records(output, title, subtitle, date, records) — ★推荐:从 fix_format.repair_records 自动生成,智能合并同类修改create_report(output, title, subtitle, date, total, categories) — 兼容v2.0:手动传入 categories通用格式检查清单(默认规范)
以下为中国高校毕业论文常见的格式检查项,基于 GB/T 7713.1-2006 等国标和多校规范汇总。 当用户未提供规范文档时,按以下默认值执行检查和修复:
1. 页面设置(默认值)
2. 封面格式(默认值)
3. 摘要格式(默认值)
4. 目录格式(默认值)
5. 正文格式(默认值)
6. 图表格式(默认值)
7. 参考文献(默认值)
8. 页眉页脚(默认值)
9. 致谢/附录(默认值)
10. 其他规范性检查
脚本设计注意事项
> 重要:在编写修复脚本时,必须注意以下问题,避免函数间的逻辑冲突。
1. 函数执行顺序与依赖问题
问题描述:多个修复函数之间存在隐式依赖,后执行的函数可能无法检测到已被修改的内容。
典型案例:
# 错误示例:fix_special_titles 先执行,修改了"参考文献"标题
def fix_special_titles(doc):
# 将 "参考文献" 改为 "参 考 文 献"(字间加空格)
...def fix_references(doc):
# 用 '参考文献' in text 检测,但此时文本已被修改为 "参 考 文 献"
if '参考文献' in text and len(text) < 10: # 检测失败!
...
解决方案:
# 方案1:使用清理后的文本进行检测
clean_text = text.replace(' ', '')
if clean_text == '参考文献':
...方案2:调整函数执行顺序,先检测再修改
1. 先执行需要检测原文本的函数(如 fix_references)
2. 再执行会修改文本的函数(如 fix_special_titles)
方案3:使用内置的 scripts/fix_format.py 函数,它们已处理好依赖关系
from fix_format import fix_page_setup, fix_special_titles, fix_references
2. 标题检测的精确性
问题描述:目录中可能包含类似标题的条目(如 致 谢\t43),导致误判。
典型案例:
# 错误示例:目录条目被误判为致谢标题
if '致谢' in text: # "致 谢\t43" 也包含 "致谢"
in_refs = False # 提前退出参考文献检测!
解决方案:
# 方案1:清理文本后精确匹配
clean_text = text.replace(' ', '').replace('\t', '')
if clean_text == '致谢' and len(text) < 15:
...方案2:使用正则表达式匹配
import re
if re.match(r'^致\s*谢$', text.strip()) and len(text) < 15:
...
3. 修复记录的完整性
问题描述:修复操作没有添加到 repair_records,导致报告中缺少该类别。
典型案例:
# 错误示例:只修改,不记录
if para.alignment != WD_ALIGN_PARAGRAPH.CENTER:
para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 没有调用 add_record
changes += 1
解决方案:
# 正确做法:每次修复都添加记录
if para.alignment != WD_ALIGN_PARAGRAPH.CENTER:
add_record('特殊标题', '对齐方式', location, text,
'居中', '非居中', '居中')
para.alignment = WD_ALIGN_PARAGRAPH.CENTER
changes += 1
4. 推荐的脚本结构
# 完整修复脚本模板
def main():
# 1. 初始化文档结构
init_structure(doc)
# 2. 按正确顺序执行修复(先检测后修改)
# 顺序:页面设置 → 段落格式 → 参考文献 → 特殊标题 → 页眉
fix_page_setup(doc) # 无文本依赖
fix_paragraph_indent(doc) # 依赖原文本
fix_references(doc) # 依赖原文本(必须在 fix_special_titles 之前)
fix_special_titles(doc) # 会修改文本
fix_header(doc) # 无依赖
# 3. 确保所有修复都有记录
print(f"修复记录数: {len(repair_records)}")
# 4. 生成报告
generate_report(...)
5. 调试技巧
# 在关键检测点添加调试输出
if '参考文献' in text.replace(' ', ''):
print(f" [参考文献] P{i}: 进入参考文献部分")检查修复记录是否完整
for cat in ['页面设置', '特殊标题', '段落格式', '页眉', '参考文献']:
count = sum(1 for r in repair_records if r['category'] == cat)
print(f" {cat}: {count} 项")
关键技术要点
python-docx 缩进处理
重要经验:Word 文档中的首行缩进有两种单位:
firstLine in twips):不随字号变化,不同字号下显示效果不一致firstLineChars):随字号自动调整,推荐使用修复时应将固定厘米值转换为字符单位:
# 设首行缩进为 2 字符
ind.set(qn('w:firstLineChars'), '200') # 200 = 2字符 × 100
ind.set(qn('w:firstLine'), '480') # 配合值
Normal 样式继承
Normal 样式可能自带首行缩进。对于不需要缩进的段落(如居中标题),必须显式设置为 0,不能仅删除 元素:
ind.set(qn('w:firstLine'), '0')
ind.set(qn('w:firstLineChars'), '0')
三线表实现
# 表级边框:上下粗线,无左右线,无内部线
标题行:通过单元格级别的 tcBorders 添加底部细线
页眉字体双重设置
页眉中文用宋体,西文用 Times New Roman,需要同时设置 w:eastAsia 和 w:ascii/w:hAnsi。
Resources
scripts/
check_format.py — v2.0 全面格式检测脚本,含 DocumentStructure 章节定位能力,扫描 docx 文件的所有格式属性fix_format.py — v2.0 格式修复脚本模板,包含各类 fix_* 函数,修复过程自动收集 repair_records 记录generate_report.py — v5.0 精简对比报告生成器(6列表格含位置/定位列,智能合并同类修改,颜色区分,A4横向)references/
format_rules_template.md - 格式规则模板,用于结构化存储从规范文档解析出的格式要求common_issues.md - 常见格式问题汇总与修复方案(TOP 10 + python-docx 已知限制 + 修复优先级)