# Wps Thesis

> 毕业论文排版。按高校标准生成论文文档，包含封面、中英文摘要、 目录、正文章节、参考文献(GB/T 7714)、致谢等完整结构。 用于帮助学生排版毕业论文。当用户提到论文、毕业论文、论文排版时触发。 Academic thesis formatter.

- Skill: `bwkyd/wps-thesis` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add bwkyd/wps-thesis`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bwkyd/wps-thesis/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: bwkyd (https://skillmd.com/u/bwkyd)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/bwkyd/wps-thesis

---


# 论文排版工具

按高校标准自动排版毕业论文 / 学术论文（.docx）。

> **每个大学生的论文排版噩梦，到此为止。**

## When to Use

- 毕业论文排版（本科/硕士/博士）
- 学术论文/期刊论文格式化
- 论文模板生成
- 已有论文内容需要重新排版

## When NOT to Use

- 一般工作报告 → 使用 `wps-report-writer`
- 公文排版 → 使用 `wps-gongwen`
- 只需要校对内容 → 使用 `wps-proofread`

## 论文通用格式标准

### 页面设置

```text
纸张：A4 (210mm × 297mm)
上边距：30mm
下边距：25mm
左边距：30mm（装订侧加宽）
右边距：20mm
页眉：15mm，含学校名/论文标题
页脚：页码居中，小五号
```

### 字体字号规范

| 元素 | 字体 | 字号 | 说明 |
|------|------|------|------|
| 论文题目 | 黑体 | 小二号(18pt) | 居中，加粗 |
| 章标题（第X章） | 黑体 | 三号(16pt) | 居中，加粗 |
| 节标题（X.X） | 黑体 | 四号(14pt) | 左对齐，加粗 |
| 小节标题（X.X.X） | 黑体 | 小四号(12pt) | 左对齐，加粗 |
| 正文 | 宋体 | 小四号(12pt) | 首行缩进2字符 |
| 摘要标题 | 黑体 | 三号(16pt) | 居中 |
| 摘要内容 | 宋体 | 小四号(12pt) | |
| 关键词 | 黑体+宋体 | 小四号(12pt) | "关键词："黑体，内容宋体 |
| 参考文献 | 宋体 | 五号(10.5pt) | |
| 页眉 | 宋体 | 小五号(9pt) | |
| 页码 | Times New Roman | 小五号(9pt) | |

### 行距

```text
正文：1.5倍行距
摘要：1.5倍行距
参考文献：单倍行距
图表标题：单倍行距
```

## 工作流程

### Step 1: 确认论文信息

**必填信息：**
- **论文题目**（中文 + 英文）
- **作者姓名**
- **学校/院系**
- **专业**
- **指导教师**
- **日期**
- **学位类型**：本科/硕士/博士

**可选信息：**
- 学号
- 分类号
- 密级
- UDC

### Step 2: 论文结构

**标准毕业论文结构：**

```text
[封面]
[独创性声明]
[中文摘要 + 关键词]
[英文摘要 + Keywords]
[目录]
──────────────────
第一章  绪论
  1.1 研究背景
  1.2 研究现状
  1.3 研究内容与方法
  1.4 论文结构
第二章  相关理论与技术
  2.1 ...
第三章  系统设计 / 方法论
  3.1 ...
第四章  实验与分析
  4.1 ...
第五章  总结与展望
  5.1 主要工作总结
  5.2 不足与展望
──────────────────
[参考文献]
[致谢]
[附录]（可选）
[个人简历/发表论文]（硕博）
```

### Step 3: 生成 .docx 文件

```bash
pip install python-docx 2>/dev/null || pip3 install python-docx 2>/dev/null
```

**核心生成逻辑：**

```python
from docx import Document
from docx.shared import Pt, Mm, Cm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.section import WD_ORIENT
from docx.oxml.ns import qn, nsdecls
from docx.oxml import parse_xml, OxmlElement
import os

def create_thesis(info, content=None, output_path=None):
    """
    info = {
        'title_cn': '基于深度学习的图像识别系统研究',
        'title_en': 'Research on Image Recognition System Based on Deep Learning',
        'author': '张三',
        'school': 'XX大学',
        'department': '计算机科学与技术学院',
        'major': '计算机科学与技术',
        'advisor': '李四 教授',
        'degree': '硕士',  # 本科/硕士/博士
        'student_id': '2023XXXX',
        'date': '2026年6月',
    }
    """
    doc = Document()

    # 页面设置
    section = doc.sections[0]
    section.page_width = Mm(210)
    section.page_height = Mm(297)
    section.top_margin = Mm(30)
    section.bottom_margin = Mm(25)
    section.left_margin = Mm(30)
    section.right_margin = Mm(20)

    def set_font(run, name='宋体', size=12, bold=False, color=None):
        run.font.size = Pt(size)
        run.font.name = name
        run._element.rPr.rFonts.set(qn('w:eastAsia'), name)
        run.bold = bold
        if color:
            run.font.color.rgb = color

    def add_heading_cn(text, font_name='黑体', size=16, bold=True,
                       align=WD_ALIGN_PARAGRAPH.CENTER):
        p = doc.add_paragraph()
        p.alignment = align
        p.paragraph_format.space_before = Pt(24)
        p.paragraph_format.space_after = Pt(18)
        p.paragraph_format.line_spacing = Pt(28)
        run = p.add_run(text)
        set_font(run, font_name, size, bold)
        return p

    def add_body(text, indent=True):
        p = doc.add_paragraph()
        p.paragraph_format.line_spacing = Pt(22)
        if indent:
            p.paragraph_format.first_line_indent = Pt(24)
        run = p.add_run(text)
        set_font(run, '宋体', 12)
        return p

    # === 封面 ===
    for _ in range(3):
        doc.add_paragraph()

    # 学校名
    p = doc.add_paragraph()
    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = p.add_run(info['school'])
    set_font(run, '华文中宋', 26, True)

    # 学位类型
    p = doc.add_paragraph()
    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
    p.paragraph_format.space_before = Pt(10)
    degree_text = {'本科': '本科毕业论文', '硕士': '硕士学位论文',
                   '博士': '博士学位论文'}.get(info['degree'], '学位论文')
    run = p.add_run(degree_text)
    set_font(run, '华文中宋', 22)

    doc.add_paragraph()

    # 论文题目
    p = doc.add_paragraph()
    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
    p.paragraph_format.space_before = Pt(30)
    run = p.add_run(info['title_cn'])
    set_font(run, '黑体', 18, True)

    doc.add_paragraph()

    # 信息表
    fields = [
        ('作    者', info['author']),
        ('学    号', info.get('student_id', '')),
        ('院    系', info.get('department', '')),
        ('专    业', info['major']),
        ('指导教师', info['advisor']),
        ('完成日期', info['date']),
    ]
    for label, value in fields:
        if value:
            p = doc.add_paragraph()
            p.alignment = WD_ALIGN_PARAGRAPH.CENTER
            run1 = p.add_run(f'{label}：')
            set_font(run1, '宋体', 14)
            run2 = p.add_run(value)
            set_font(run2, '宋体', 14)

    doc.add_page_break()

    # === 中文摘要 ===
    add_heading_cn('摘  要', '黑体', 16)
    add_body('（在此输入中文摘要内容，一般300-500字）')
    doc.add_paragraph()
    p = doc.add_paragraph()
    run = p.add_run('关键词：')
    set_font(run, '黑体', 12, True)
    run2 = p.add_run('关键词1；关键词2；关键词3')
    set_font(run2, '宋体', 12)
    doc.add_page_break()

    # === 英文摘要 ===
    add_heading_cn('Abstract', 'Times New Roman', 16)
    add_body('(Type your English abstract here, typically 200-300 words)')
    doc.add_paragraph()
    p = doc.add_paragraph()
    run = p.add_run('Keywords: ')
    run.font.size = Pt(12)
    run.font.name = 'Times New Roman'
    run.bold = True
    run2 = p.add_run('keyword1; keyword2; keyword3')
    run2.font.size = Pt(12)
    run2.font.name = 'Times New Roman'
    doc.add_page_break()

    # === 目录占位 ===
    add_heading_cn('目  录', '黑体', 16)
    add_body('（请在WPS中插入 → 引用 → 目录 → 自动目录）', False)
    doc.add_page_break()

    # === 正文章节框架 ===
    chapters = [
        ('第一章  绪论', ['1.1 研究背景', '1.2 国内外研究现状',
         '1.3 研究内容与方法', '1.4 论文结构安排']),
        ('第二章  相关理论与技术', ['2.1 （根据论文主题填写）']),
        ('第三章  （核心内容章节）', ['3.1 （根据论文主题填写）']),
        ('第四章  实验与结果分析', ['4.1 实验环境', '4.2 实验设计',
         '4.3 结果与分析']),
        ('第五章  总结与展望', ['5.1 主要工作总结', '5.2 不足与展望']),
    ]

    for chapter_title, sections in chapters:
        add_heading_cn(chapter_title, '黑体', 16)
        for sec in sections:
            p = doc.add_paragraph()
            p.paragraph_format.space_before = Pt(12)
            run = p.add_run(sec)
            set_font(run, '黑体', 14, True)
            add_body('（在此输入内容）')
        doc.add_page_break()

    # === 参考文献 ===
    add_heading_cn('参考文献', '黑体', 16)
    refs = [
        '[1] 作者. 论文题目[J]. 期刊名, 年, 卷(期): 起止页.',
        '[2] 作者. 书名[M]. 出版地: 出版社, 年.',
        '[3] Author. Title[J]. Journal, Year, Vol(No): Pages.',
    ]
    for ref in refs:
        p = doc.add_paragraph()
        run = p.add_run(ref)
        set_font(run, '宋体', 10.5)
    doc.add_page_break()

    # === 致谢 ===
    add_heading_cn('致  谢', '黑体', 16)
    add_body('（在此输入致谢内容）')

    # 保存
    if not output_path:
        output_path = f"{info['title_cn'][:20]}_论文.docx"
    doc.save(output_path)
    return os.path.abspath(output_path)
```

### Step 4: 交付

1. 生成 .docx 论文框架
2. 提示用户填充各章节内容
3. 提醒在WPS中插入自动目录
4. 建议使用WPS的样式功能维护标题层级

## 参考文献格式（GB/T 7714-2015）

```text
[期刊]  作者. 题名[J]. 刊名, 出版年, 卷(期): 起止页码.
[图书]  作者. 书名[M]. 版次. 出版地: 出版者, 出版年: 页码.
[学位论文] 作者. 题名[D]. 保存地: 保存单位, 年份.
[会议论文] 作者. 题名[C]//会议录. 出版地: 出版者, 年: 页码.
[网络文献] 作者. 题名[EB/OL]. (发布日期)[引用日期]. URL.
[专利]  申请者. 专利名[P]. 专利国: 专利号, 公告日期.
[标准]  标准号. 标准名称[S]. 出版地: 出版者, 年份.
```

## 示例

```bash
# 生成论文模板
/wps-thesis 基于深度学习的图像识别系统研究，硕士论文，浙江大学计算机学院

# 只要框架
/wps-thesis 帮我生成一份本科毕业论文的排版模板，题目是"中小企业数字化转型研究"

# 排版已有内容
/wps-thesis 帮我把 draft.md 的论文内容排版成标准格式的docx
```

