# Paper Check

> 本科/研究生毕业论文格式规范检测、自动修复与对比报告生成工具。 当用户需要检查论文格式是否符合学校规范、修复论文格式问题、生成修改对比报告时使用此 Skill。 支持任意学校的撰写规范文档（.doc/.docx/.txt/.pdf）输入，自动解析规范要求并与论文文档进行逐项对比检测。 典型触发场景：用户提到"论文格式检查"、"毕业论文排版"、"格式规范检测"、"论文格式修复"、"对比报告"等。

- Skill: `dvcrn/paper-check` (Agent Skill, multi-file: 9 files)
- Install (CLI): `npx skillmds@latest add dvcrn/paper-check`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dvcrn/paper-check/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: dvcrn (https://skillmd.com/u/dvcrn)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/dvcrn/paper-check

---


# 毕业论文格式规范检测与修复

## 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 不包含静态资产文件。

