| name | wps-exam-paper |
| description | 试卷排版。按标准格式排版考试试卷,包含密封线、评分栏、题号编排,
支持选择题、填空题、判断题、简答题等题型。
用于帮助教师制作考试试卷。当用户提到试卷、考试、出题时触发。
Exam paper formatter.
|
| license | MIT |
| user-invocable | true |
| argument-hint | [学科/年级/考试类型] |
| allowed-tools | Read, Grep, Glob, Bash, Write, Edit |
| metadata | {"author":"BWKYD","title":"试卷排版","description_zh":"按标准格式排版试卷,包含密封线、评分栏、题号等","tags":["试卷","考试","教育","python-docx","WPS"],"version":"1.0.2","license":"MIT"} |
试卷生成器
题目 → 规范排版 → 带密封线和评分栏的标准试卷。
老师出题最头疼的不是题目本身,而是排版。
When to Use
- 制作期中/期末考试试卷
- 练习卷/测验卷
- 需要规范的试卷格式(密封线、评分表)
- 用户说"帮我做份试卷""出几道题"
When NOT to Use
- 课件制作 → 使用
wps-courseware
- 普通文档 → 使用
wps-docx-writer
试卷格式标准
┌──────────────────────────────────────────────┐
│ ┃ 姓 ┃ │
│ ┃ 名 ┃ XX学校 2025-2026学年第二学期 │
│ ┃ : ┃ 【XX学科】期末考试试卷 │
│ ┃ ┃ │
│ ┃ 班 ┃ 考试时间:120分钟 满分:100分 │
│ ┃ 级 ┃ │
│ ┃ : ┃ ┌────┬────┬────┬────┬────┬────┐ │
│ ┃ ┃ │题号│ 一 │ 二 │ 三 │ 四 │总分│ │
│ ┃ 学 ┃ ├────┼────┼────┼────┼────┼────┤ │
│ ┃ 号 ┃ │得分│ │ │ │ │ │ │
│ ┃ : ┃ └────┴────┴────┴────┴────┴────┘ │
│ ┃ ┃ │
│密封线 ┃ 一、选择题(每小题3分,共30分) │
│ ┃ ┃ 1. 题目内容 │
│ ┃ ┃ A. 选项A B. 选项B │
│ ┃ ┃ C. 选项C D. 选项D │
│ ┃ ┃ │
└──────────────────────────────────────────────┘
支持的题型
[1] 选择题 → A/B/C/D 四选一,可设单选/多选
[2] 填空题 → 下划线留空
[3] 判断题 → 对(√) 错(×)
[4] 简答题 → 留答题空间
[5] 计算题 → 留解题步骤空间
[6] 作文/论述 → 留方格纸区域
[7] 连线题 → 左右匹配
[8] 材料分析 → 阅读材料+问题
工作流程
Step 1: 确认试卷信息
- 学校名称
- 学科/年级
- 考试类型(期中/期末/月考/模拟)
- 时间和分值
- 题型和题量
Step 2: 生成试卷
from docx import Document
from docx.shared import Pt, Cm, Mm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.oxml.ns import qn
import os
def create_exam_paper(info, sections, output_path=None):
"""
info = {
'school': 'XX中学',
'semester': '2025-2026学年第二学期',
'subject': '数学',
'exam_type': '期末考试',
'duration': 120,
'total_score': 100,
}
sections = [
{'type': '选择题', 'score_each': 3, 'total': 30, 'questions': [...]},
{'type': '填空题', 'score_each': 3, 'total': 15, 'questions': [...]},
]
"""
doc = Document()
section = doc.sections[0]
section.page_width = Mm(210)
section.page_height = Mm(297)
section.top_margin = Mm(25)
section.bottom_margin = Mm(20)
section.left_margin = Mm(30)
section.right_margin = Mm(20)
def set_font(run, name='宋体', size=12, bold=False):
run.font.size = Pt(size)
run.font.name = name
run._element.rPr.rFonts.set(qn('w:eastAsia'), name)
run.bold = bold
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run(info['school'])
set_font(run, '黑体', 10)
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run(f"{info[]}")
set_font(run, , )
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run()
set_font(run, , , )
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run(
)
set_font(run, , )
num_sections = (sections)
table = doc.add_table(rows=, cols=num_sections + )
table.alignment = WD_TABLE_ALIGNMENT.CENTER
headers = [] + [ i (num_sections)] + []
i, h (headers):
table.cell(, i).text = h
table.cell(, i).paragraphs[].alignment = WD_ALIGN_PARAGRAPH.CENTER
table.cell(, ).text =
table.cell(, ).paragraphs[].alignment = WD_ALIGN_PARAGRAPH.CENTER
doc.add_paragraph()
section_labels =
q_num =
idx, sec (sections):
p = doc.add_paragraph()
label = section_labels[idx]
run = p.add_run(
)
set_font(run, , , )
q sec.get(, []):
p = doc.add_paragraph()
run = p.add_run()
set_font(run, , )
p.paragraph_format.line_spacing = Pt()
sec[] == q:
p = doc.add_paragraph()
opts = q[]
run = p.add_run(
)
set_font(run, , )
sec[] [, , ]:
_ ():
doc.add_paragraph()
q_num +=
output_path:
output_path =
doc.save(output_path)
os.path.abspath(output_path)
Step 3: 交付
- 生成试卷.docx文件
- 可选:生成答案卷
- 提醒教师检查题目和分值
示例
/wps-exam-paper 帮我做一份初三数学期末试卷,选择题10道填空题5道计算题3道
/wps-exam-paper 生成一个空白的语文试卷模板
/wps-exam-paper 把这些题目排成标准试卷格式