Skill: sashavegal/paper-check (version 1.0.0)

--- name: paper-check description: > 本科/研究生毕业论文格式规范检测、自动修复与对比报告生成工具。 当用户需要检查论文格式是否符合学校规范、修复论文格式问题、生成修改对比报告时使用此 Skill。 支持任意学校的撰写规范文档（.doc/.docx/.txt/.pdf）输入，自动解析规范要求并与论文文档进行逐项对比检测。 典型触发场景：用户提到"论文格式检查"、"毕业论文排版"、"格式规范检测"、"论文格式修复"、"对比报告"等。 --- # 毕业论文格式规范检测与修复 ## Overview 本 Skill 提供一套完整的毕业论文格式检测工作流，支持任意学校的撰写规范文档输入，自动化完成：规范解析 → 格式检测 → 问题诊断 → 自动修复 → 对比报告生成。 ## 前置要求 - Python 3.7+ - 依赖库：`python-docx`（必需），`pywin32`（仅 Windows 读取 .doc 格式时需要），`lxml` - 安装命令：`pip 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`）： - **页面设置**：页边距（上/下/左/右）、装订线、页眉距、页脚距 - **字体字号**：各部分（封面/摘要/正文/标题/参考文献/致谢等）的中英文字体、字号、加粗/斜体 - **段落格式**：对齐方式、首行缩进、悬挂缩进、行距、段前段后间距 - **页眉页脚**：内容、字体、对齐、页码格式 - **标题格式**：各级标题的字体字号、编号格式、段前段后 - **表格格式**：三线表规则、边框粗细 - **图片格式**：图题位置、字体字号 - **参考文献**：著录格式（GB/T 7714）、缩进方式、文献标识 - **特殊部分**：摘要、目录、致谢、附录的特殊格式要求 ### Phase 3: 论文格式全面检测 运行格式检测脚本 `scripts/check_format.py` 对论文文档进行全面扫描。检测脚本会输出以下信息： 1. **页面设置信息**（每个节的页边距、页眉页脚距、纸张方向） 2. **文档样式定义**（Normal、Heading 1-4、TOC 等关键样式） 3. **段落详细格式**（每个段落的样式、对齐、间距、缩进、字体信息） 4. **表格格式信息**（边框样式、粗细、对齐） 5. **图片信息**（尺寸、位置、上下文） 6. **编号/列表定义** 7. **文档默认字体设置** 执行方式： ```bash python scripts/check_format.py <论文路径> <报告输出路径> ``` ### Phase 4: 问题诊断与分析 将检测报告与规范要求逐项比对，生成问题清单。每个问题包含： | 字段 | 说明 | |------|------| | 位置 | 段落编号/节编号/表格编号 | | 检查项 | 检查的格式属性 | | 规范要求 | 对应的规范条款内容 | | 当前值 | 论文中的实际值 | | 严重程度 | 高/中/低 | | 修复建议 | 具体的修复方案 | 严重程度分级标准： - **高**：页边距错误、标题字体字号错误、行距错误等影响整体排版的问题 - **中**：缩进方式不当（固定厘米值 vs 字符单位）、段前段后间距缺失 - **低**：需人工确认的内容性问题（参考文献格式、页眉横线等） ### Phase 5: 自动修复 使用 `scripts/fix_format.py` 脚本模板自动修复可自动化的格式问题。 修复能力范围： - ✅ 页面边距（上/下/左/右/页眉距/页脚距/装订线） - ✅ 段落首行缩进（固定厘米值 → 字符单位） - ✅ 段落悬挂缩进 - ✅ 段前段后间距 - ✅ 对齐方式（左/中/右/两端对齐） - ✅ 字体设置（中文字体 + 西文字体 + 字号） - ✅ 页眉内容和格式 - ✅ 表格三线表边框 - ✅ 标题字间距（如"参 考 文 献"） 无法自动修复（需提示用户手动处理）： - ❌ 页眉横线（python-docx 限制） - ❌ 参考文献编号内容（如添加 [1] [2]） - ❌ 目录更新（需在 Word 中操作） - ❌ 图片/公式的精确位置调整 - ❌ 脚注格式 ### 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. 页面设置（默认值） - 纸张大小：A4 (210mm × 297mm) - 页边距：上 2.8cm / 下 2.2cm / 左 3.0cm / 右 2.0cm - 装订线：0mm（左侧） - 页眉距：1.8cm - 页脚距：1.4cm ### 2. 封面格式（默认值） - 题目字体字号：三号黑体加粗，居中 - 学生信息字体字号：小四号宋体 - 对齐方式：居中 - 日期格式：中文格式 ### 3. 摘要格式（默认值） - "摘要"标题：三号黑体加粗，居中，字间 2 个汉字字距，段前段后各 1 行 - 摘要正文：小四号宋体/Times New Roman，首行缩进 2 字符，1.5 倍行距 - 关键词："关键词"三字加粗，分号分隔，末尾无标点 - 英文摘要（Abstract）与中文摘要对应格式 ### 4. 目录格式（默认值） - "目录"标题：三号黑体加粗，居中，字间 2 个汉字字距 - 各级目录条目：小四号宋体 - 目录显示级数：3 级 ### 5. 正文格式（默认值） - 中文字体：小四号宋体 - 英文/数字字体：小四号 Times New Roman - 行距：1.5 倍 - 首行缩进：2 字符 - 各级标题格式：一级 三号黑体 / 二级 小三号黑体 / 三级 四号黑体 / 四级 小四号黑体 ### 6. 图表格式（默认值） - 表格：一律三线表（上下粗线 1.5 磅，中间细线 1 磅） - 图题：在图下方，五号宋体，居中 - 表题：在表上方，五号宋体，居中 - 续表标注 ### 7. 参考文献（默认值） - "参考文献"标题：三号黑体加粗，居中，字间加空格 - 著录格式：GB/T 7714-2015 - 文献类型标识：[M] [J] [D] [C] [P] [R] [S] [N] [EB/OL] 等 - 缩进方式：悬挂缩进 2 字符 - 字体：小四号宋体 / Times New Roman ### 8. 页眉页脚（默认值） - 页眉内容：奇数页为论文题目，偶数页为学校名+论文类型（如有要求） - 页眉字体字号：五号宋体 / Times New Roman，居中 - 页码格式：阿拉伯数字，底部居中 - 页眉横线：细线（0.5 磅） ### 9. 致谢/附录（默认值） - 标题：三号黑体加粗，居中，字间加空格 - 内容字体字号：小四号宋体 / Times New Roman - 段前段后间距：标题段前段后各 1 行 ### 10. 其他规范性检查 - 标点符号规范（中文全角 vs 英文半角） - 计量单位规范（国际单位制） - 数字使用规范 - 缩写使用规范（首次出现写全称） - 公式编号格式 - 脚注格式 - 中英文混排时的字体一致性 - 孤行控制（标题不在页末、段尾不在页首） ## 脚本设计注意事项 > **重要**：在编写修复脚本时，必须注意以下问题，避免函数间的逻辑冲突。 ### 1. 函数执行顺序与依赖问题 **问题描述**：多个修复函数之间存在隐式依赖，后执行的函数可能无法检测到已被修改的内容。 **典型案例**： ```python # 错误示例：fix_special_titles 先执行，修改了"参考文献"标题 def fix_special_titles(doc): # 将 "参考文献" 改为 "参 考 文 献"（字间加空格） ... def fix_references(doc): # 用 '参考文献' in text 检测，但此时文本已被修改为 "参 考 文 献" if '参考文献' in text and len(text) < 10: # 检测失败！ ... ``` **解决方案**： ```python # 方案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`），导致误判。 **典型案例**： ```python # 错误示例：目录条目被误判为致谢标题 if '致谢' in text: # "致 谢\t43" 也包含 "致谢" in_refs = False # 提前退出参考文献检测！ ``` **解决方案**： ```python # 方案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`，导致报告中缺少该类别。 **典型案例**： ```python # 错误示例：只修改，不记录 if para.alignment != WD_ALIGN_PARAGRAPH.CENTER: para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 没有调用 add_record changes += 1 ``` **解决方案**： ```python # 正确做法：每次修复都添加记录 if para.alignment != WD_ALIGN_PARAGRAPH.CENTER: add_record('特殊标题', '对齐方式', location, text, '居中', '非居中', '居中') para.alignment = WD_ALIGN_PARAGRAPH.CENTER changes += 1 ``` ### 4. 推荐的脚本结构 ```python # 完整修复脚本模板 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. 调试技巧 ```python # 在关键检测点添加调试输出 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`）：随字号自动调整，推荐使用 修复时应将固定厘米值转换为字符单位： ```python # 设首行缩进为 2 字符 ind.set(qn('w:firstLineChars'), '200') # 200 = 2字符 × 100 ind.set(qn('w:firstLine'), '480') # 配合值 ``` ### Normal 样式继承 Normal 样式可能自带首行缩进。对于不需要缩进的段落（如居中标题），必须显式设置为 0，不能仅删除 `<w:ind>` 元素： ```python ind.set(qn('w:firstLine'), '0') ind.set(qn('w:firstLineChars'), '0') ``` ### 三线表实现 ```python # 表级边框：上下粗线，无左右线，无内部线 # 标题行：通过单元格级别的 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 已知限制 + 修复优先级） ### assets/ 此 Skill 不包含静态资产文件。


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)