Install
openclaw skills install paper-check本科/研究生毕业论文格式规范检测、自动修复与对比报告生成工具。 当用户需要检查论文格式是否符合学校规范、修复论文格式问题、生成修改对比报告时使用此 Skill。 支持任意学校的撰写规范文档(.doc/.docx/.txt/.pdf)输入,自动解析规范要求并与论文文档进行逐项对比检测。 典型触发场景:用户提到"论文...
openclaw skills install paper-check本 Skill 提供一套完整的毕业论文格式检测工作流,支持任意学校的撰写规范文档输入,自动化完成:规范解析 → 格式检测 → 问题诊断 → 自动修复 → 对比报告生成。
python-docx(必需),pywin32(仅 Windows 读取 .doc 格式时需要),lxmlpip install python-docx lxml pywin32收集以下信息:
规范来源优先级:
注意:建议告知用户"当前使用通用默认规范,如需按特定院校规范检查,请提供学校官方的论文撰写规范文件"。
根据规范文档格式选择解析方式:
解析规范文档后,提取以下关键格式要求(参考 references/format_rules_template.md):
运行格式检测脚本 scripts/check_format.py 对论文文档进行全面扫描。检测脚本会输出以下信息:
执行方式:
python scripts/check_format.py <论文路径> <报告输出路径>
将检测报告与规范要求逐项比对,生成问题清单。每个问题包含:
| 字段 | 说明 |
|---|---|
| 位置 | 段落编号/节编号/表格编号 |
| 检查项 | 检查的格式属性 |
| 规范要求 | 对应的规范条款内容 |
| 当前值 | 论文中的实际值 |
| 严重程度 | 高/中/低 |
| 修复建议 | 具体的修复方案 |
严重程度分级标准:
使用 scripts/fix_format.py 脚本模板自动修复可自动化的格式问题。
修复能力范围:
无法自动修复(需提示用户手动处理):
使用 scripts/generate_report.py(v5.0)生成修改前后对比报告(.docx 格式,A4 横向),包含:
两种调用接口:
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 等国标和多校规范汇总。 当用户未提供规范文档时,按以下默认值执行检查和修复:
重要:在编写修复脚本时,必须注意以下问题,避免函数间的逻辑冲突。
问题描述:多个修复函数之间存在隐式依赖,后执行的函数可能无法检测到已被修改的内容。
典型案例:
# 错误示例: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
问题描述:目录中可能包含类似标题的条目(如 致 谢\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:
...
问题描述:修复操作没有添加到 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
# 完整修复脚本模板
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(...)
# 在关键检测点添加调试输出
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} 项")
重要经验:Word 文档中的首行缩进有两种单位:
firstLine in twips):不随字号变化,不同字号下显示效果不一致firstLineChars):随字号自动调整,推荐使用修复时应将固定厘米值转换为字符单位:
# 设首行缩进为 2 字符
ind.set(qn('w:firstLineChars'), '200') # 200 = 2字符 × 100
ind.set(qn('w:firstLine'), '480') # 配合值
Normal 样式可能自带首行缩进。对于不需要缩进的段落(如居中标题),必须显式设置为 0,不能仅删除 <w:ind> 元素:
ind.set(qn('w:firstLine'), '0')
ind.set(qn('w:firstLineChars'), '0')
# 表级边框:上下粗线,无左右线,无内部线
# 标题行:通过单元格级别的 tcBorders 添加底部细线
页眉中文用宋体,西文用 Times New Roman,需要同时设置 w:eastAsia 和 w:ascii/w:hAnsi。
check_format.py — v2.0 全面格式检测脚本,含 DocumentStructure 章节定位能力,扫描 docx 文件的所有格式属性fix_format.py — v2.0 格式修复脚本模板,包含各类 fix_* 函数,修复过程自动收集 repair_records 记录generate_report.py — v5.0 精简对比报告生成器(6列表格含位置/定位列,智能合并同类修改,颜色区分,A4横向)format_rules_template.md - 格式规则模板,用于结构化存储从规范文档解析出的格式要求common_issues.md - 常见格式问题汇总与修复方案(TOP 10 + python-docx 已知限制 + 修复优先级)此 Skill 不包含静态资产文件。