Skip to content
Back to skills

Open Book Exam Pack

ASecurity

Build reusable open-book exam review packages from courseware, past papers, textbooks, scanned PDFs, and user-provided guidance. Use when the user asks to create, improve, condense, expand, add page indexes to, or otherwise format open-book exam PDFs, cheat sheets, or study packs with chapter order, answer templates, calculation steps, and textbook page lookup tables.

  • 4 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 26, 2026
ai-agentspythonshellapi

Works with

  • api

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 11 files and shows the line behind each finding

Scanned October 26, 2026

npx -y skills add X1a0heZzzz/open-book-exam-pack --skill open-book-exam-pack --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Open Book Exam Pack?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Open Book Exam Pack
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/x1a0hezzzz-open-book-exam-pack/badge)](https://www.skillsdirectory.com/skills/x1a0hezzzz-open-book-exam-pack)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: open-book-exam-pack
description: Build reusable open-book exam review packages from courseware, past papers, textbooks, scanned PDFs, and user-provided guidance. Use when the user asks to create, improve, condense, expand, add page indexes to, or otherwise format open-book exam PDFs, cheat sheets, or study packs with chapter order, answer templates, calculation steps, and textbook page lookup tables.
---

# 技能名称

Open Book Exam Pack / 开卷考试资料包生成流程。

# 适用场景

用于把课程课件、往年试卷、教材 PDF、用户口头要求整合为可打印、可开卷携带的复习 PDF。触发语包括:

- “给我一份开卷考试 PDF 资料”
- “按章节速查”
- “结合试卷重点”
- “加教材页码”
- “计算题步骤详细点”
- “排版紧凑/不要空白/字不要太小”
- “最后单独放计算题”

核心目标:生成一份考试时能快速翻查的结构化资料,而不是普通课堂笔记。

适用于任何课程(理工、文科、管理、法学等)。内容结构、高频考点和答题骨架都必须从本次课程的素材中提炼,不要套用其他课程的考点清单。

# 配套资源

本技能目录下的文件(路径相对于本 `SKILL.md`):

| 文件 | 用途 |
| --- | --- |
| `scripts/probe_pdfs.py` | 素材盘点:页数、文字量、是否扫描件、是否有书签、角色猜测 |
| `scripts/extract_text.py` | 逐页抽文本到 `work/text/`,扫描页可 `--ocr`,可 `--render` 出页面截图 |
| `scripts/textbook_pages.py` | `toc` 找目录 / `offset` 测印刷页与 PDF 页偏移 / `check` 核对具体页 |
| `scripts/peek_text.py` | 以 UTF-8 安全打印或检索文本,避免控制台乱码误判 |
| `scripts/build_pdf.py` | 把 Markdown 子集渲染成 A4 中文 PDF(表格、高亮、分栏、附录分页) |
| `scripts/requirements.txt` | 依赖:`pymupdf`、`reportlab`,OCR 可选 `rapidocr_onnxruntime` |
| `references/pack-format.md` | `build_pdf.py` 支持的 Markdown 语法与排版参数 |
| `references/answer-templates.md` | 各题型通用答题模板与内容密度标准 |
| `references/example-ai-course.md` | 一个真实课程(人工智能导论)的考点清单与句子库示例,仅作参考 |

首次使用先安装依赖:`python -m pip install -r <skill目录>/scripts/requirements.txt`。若环境不允许安装,可改用环境里已有的 PDF/文档工具完成同样步骤,但页码核验和排版规则不变。

# 工作模式

根据用户材料和要求选择模式;用户不指定模式时自动判断。

1. `pack`:完整资料包模式。整合课件、试卷、教材页码和排版要求,最终输出开卷 PDF。
2. `page-index`:教材页码模式。重点抽目录和正文页码,建立知识点到教材页码的速查表。
3. `past-paper`:旧卷分析模式。重点从往年卷中提取高频题型、题干模式、分值分布和可复用答题模板。
4. `calculation`:计算题模式。重点核对公式、数字、图表和步骤,输出教程式解题流程。
5. `polish`:排版优化模式。已有内容时,重点改善字号、空白、表格列宽、分页和最终可读性。

若用户只给出单一材料,也必须先说明可完成的部分和缺失材料对准确性的影响。

# 前置输入

必须尽量收集:

1. 课程课件:章节 PDF/PPT/讲义,通常用于章节知识结构。
2. 往年试卷:用于判断题型、重点、分值、计算题模板。
3. 开卷教材:用于建立准确的教材页码速查表。
4. 用户排版偏好:页数上限、是否紧凑、是否突出重点、是否只允许带教材。
5. 考试规则:能带什么(实体教材 / 打印资料 / 电子 PDF)、考试范围、题型与分值。
6. 输出要求:PDF 文件名、是否追加到既有资料、是否保留旧版。

缺少第 5 项时,主动问一句“考场能带电子 PDF 吗?”——它决定页码表是否出现 PDF 页码。

默认输出目录:当前工作区 `outputs/`。中间文件(文本、OCR、截图、Markdown 源稿)放 `work/`。

# 分步执行逻辑

## 1. 素材识别

1. 运行 `scripts/probe_pdfs.py <所有文件或文件夹> --json work/inventory.json`,确认存在性、大小、页数、文字量。
2. 对每份 PDF 用 `scripts/extract_text.py` 抽文本。
3. 盘点表中 `Scanned? = YES` 或抽取结果为空/极短的,判定为扫描/图片型 PDF,加 `--ocr` 重跑。
4. PPT/DOCX 等非 PDF 文件不要静默跳过:转成 PDF 或用对应工具读取。
5. 将素材分类(盘点表的角色猜测只是提示,以内容为准):
   - 课件:按章节建立知识结构。
   - 试卷:抽题型、分值、题干、计算题数据、选择题高频点。
   - 教材:抽目录页,建立页码索引。

识别完成后,用一句话确认本次任务走哪个模式或模式组合,例如:“本次按 pack + page-index 处理,因为同时有课件、旧卷和教材”。

工具习惯:

- 中文路径在 PowerShell 中容易乱码;脚本全部用 Python `pathlib` 处理,查看文本用 `scripts/peek_text.py`。
- 文本量大时先 `peek_text.py --grep` 定位,再精读相关页,不要整本塞进上下文。
- 公式、矩阵、图表类内容用 `extract_text.py --render --pages ...` 出截图核对。

## 2. 旧卷分析(有试卷时)

1. 按题型(选择/判断/填空/简答/论述/计算/案例)统计每份卷的题量与分值。
2. 把每道题映射到课件章节,统计各章出现次数,得到高频考点排序。
3. 记录常见题干表达(如“简述……的区别”“结合实例分析……”),用于构造答题模板。
4. 标出“可能借鉴题型”:旧卷出现过、但换了对象或数据就能再考的题。
5. 高频考点清单就是第 5 步页码索引必须覆盖的范围。

## 3. 缺源补全网检索

只有在本地素材缺失或用户要求补全时才检索互联网。

检索判定:

- 若缺少教材、课件或试卷原文,但题目必须引用具体页码/内容:先向用户说明缺源;若可联网查公开教材/课程信息,再检索。
- 若本地 OCR 不完整但有目录/章节标题可用:优先基于本地目录,不用网文替代教材页码。
- 若涉及新版模型、法规、政策、工具版本等时效内容:必须检索。

检索输出规则:

- 外部来源只能作为补充背景,不能伪装成教材内容。
- 页码必须来自用户提供教材或可验证目录,不得由网页推断。
- 最终 PDF 中若混用外部信息,应标明“补充资料,非教材页码”,最终回复列出来源。

## 4. 开卷资料库结构化处理

按“考试可用”而非“课堂完整性”组织资料。推荐结构:

1. 开卷使用法:说明如何用资料答题。
2. 章节速查:按课件/教材章节顺序。
3. 高频简答模板:定义、区别、流程、优缺点、例子。
4. 选择/判断速查:往年卷答案和绝对化表述规律。
5. 主观题骨架:按本课程题型提炼(论述、案例分析、方案设计等)。
6. 旧卷可能借鉴题型。
7. 万能句子库:本课程反复可用的评价句、过渡句、结论句。
8. 教材页码速查:只保留用户考试允许使用的页码体系。
9. 计算题专题教程:最后独立附录。

各题型的模板和内容密度标准见 `references/answer-templates.md`。核心规则:

- 5 分简答题答案必须可直接写:定义 1 句 + 核心机制/区别 2-3 句 + 例子 1 句 + 风险/优缺点 1 句。
- 不要只写关键词;每个框里应写成完整句子。
- 选择题答案可简短,但简答、主观、计算题必须完整。
- 计算题每一步写出公式、代入数字和中间结果,并自己重算一遍核对。

## 5. 页码索引速查体系搭建

页码必须以教材目录为主,用 `scripts/textbook_pages.py` 完成:

1. `textbook_pages.py toc 教材.pdf --scan 25`:列出书签和目录页条目(印刷页码)。扫描版先对前 25 页 `extract_text.py --ocr`。
2. 抽取每章、每节及关键小节的印刷页码。
3. 判断用户能带什么:
   - 若用户只能带实体教材:只保留“教材页码”,最终表格不得出现 PDF 页码。
   - 若用户用电子 PDF:可增加“PDF页码”列,并写明换算依据。
4. 需要 PDF 页码时,`textbook_pages.py offset 教材.pdf` 测偏移:`PDF页 = 教材页 + offset`(印刷第 1 页在 PDF 第 N 页时 offset = N - 1)。书中插页会让偏移分段变化,按脚本报告的分段换算。每次都必须重新测,不能沿用旧任务的偏移。
5. `textbook_pages.py check 教材.pdf --offset <offset> --printed <页码...> --render` 抽查 2-3 个页码,确认正文内容与知识点一致。
6. 用第 2 步的高频考点清单逐条映射目录小节,确保高频考点全部有页码。

页码表字段:

- 考试知识点
- 教材页码
- 对应内容/怎么查(如“3.2 节,对比图在 P60”)

准确性阈值:

- 页码来自目录,优先可信。
- 若某知识点只能定位到章节范围,写页码范围,不写单页。
- 不确定时写“约/附近”并说明原因;但用户要求“必须准确”时,必须回到目录或正文页码再次确认。

## 6. 生成 PDF

1. 把资料写成 Markdown 源稿 `work/<课程>_pack.md`(语法见 `references/pack-format.md`)。
2. 运行 `scripts/build_pdf.py work/<课程>_pack.md -o outputs/<文件名>.pdf`,按用户偏好调整 `--body-size`、`--margin-mm`、`--columns`。
3. 生成后把 1-2 页渲染成图片(`extract_text.py outputs/xxx.pdf --render --pages 1-2 --out work/preview`)自查:字号、列宽、空白、分页是否合理。
4. 用户要求改排版时,改源稿或参数重新生成,不要手改 PDF。

# 分支判定规则

## 文本抽取分支

- 文本长度足够且章节清晰:直接结构化。
- 文本为空、乱码或平均每页少于约 50 字符:判定扫描件,走 OCR。
- OCR 有噪声:保留关键术语和题干,结合课件语义校正,不得虚构页码。
- 没有可用 OCR 引擎:渲染页面截图后直接阅读图片,或告知用户安装 `rapidocr_onnxruntime`。

## 排版分支

- 用户说“紧凑”:`--margin-mm 7`、`--body-size 6.8`,合并短表,可用 `--columns 2`,避免强制分页。
- 用户说“字太小”:`--body-size` 提升到 7.5-8.5,允许页数增加。
- 用户说“不要大片空白”:删掉不必要的 `<!-- pagebreak -->`,让内容自然流动。
- 用户说“最后单独放计算题”:计算题前加 `<!-- appendix -->`,作为最后附录从新页开始。
- 用户说“只能带教材”:页码速查只保留教材页码,不写 PDF 页。
- 用户限定页数:先压缩重复内容和空白,再小幅降字号;正文不低于 6.3 pt。

## 输出版本分支

- 若旧 PDF 可能被打开占用:另存新文件名,不强行覆盖(`build_pdf.py` 遇到占用会提示)。
- 每次用户提出排版修改:保留旧版,生成带明确后缀的新版本或覆盖用户指定版本。

# 检索调用规范

1. 本地材料优先,特别是试卷和教材页码。
2. 用户明确要求“结合教材页码”时,必须从教材目录或正文页码确认。
3. 外网检索只用于缺源补全、时效性事实或公开背景,不用于替代本地教材页码。
4. 如引用网络信息,最终答复必须说明来源;资料 PDF 内部应标注“补充来源”。

# 资料库排版模板

推荐 PDF 页面:

- A4 竖版,适合打印和实体携带;表格很宽时可 `--landscape`。
- 中文字体:优先微软雅黑/黑体/宋体(`build_pdf.py` 自动查找,也可 `--font` 指定 .ttf/.ttc)。
- 黄色背景(`==文字==`):只标最常考、最可直接拿分内容。
- 表格列宽按内容分配,不让一列过窄;需要时用 `<!-- widths: ... -->` 手动指定。
- 表格内文字写完整句子,不用只有关键词的碎片。

推荐字号:

- 标题:14-16 pt。
- 小标题:10-11 pt。
- 表格正文:6.3-7.5 pt;若用户嫌小,提升到 6.8-8 pt。
- 行距:正文约字号的 1.2-1.3 倍。

推荐顺序:

1. 章节速查
2. 高频简答模板
3. 选择/判断速查
4. 主观题万能骨架
5. 旧卷可能借鉴题型
6. 考前最后一页/万能句子库
7. 教材页码速查(贴近前文,不单独浪费一页)
8. 计算题专题教程(最后独立附录)

# 输出格式约束

1. 最终产物必须是 PDF,保存到 `outputs/`;Markdown 源稿保留在 `work/`,方便再次修改。
2. 文件名必须反映课程和版本,例如:
   - `<课程名>开卷资料_含教材页码.pdf`
   - `<课程名>开卷资料_4页密集版.pdf`
   - `<课程名>开卷资料_清晰大字版.pdf`
3. 最终回复只给核心变更和文件链接,不长篇复述。
4. 如果运行过 OCR、安装库、生成多个版本,应简短说明最终采用哪个版本。
5. 若用户要求可读性,宁可增加页数,不要把字压到不可读。

# 交付前检查清单

- 已确认所有输入文件存在,并说明缺失材料。
- 已区分课件、试卷、教材和用户口头要求。
- 已说明本次采用的工作模式。
- 高频考点来自本课程旧卷/课件,而不是其他课程的清单。
- 教材页码来自目录或正文核验,不来自猜测;PDF 页码(若有)已用 `check` 抽查。
- 只能带实体教材时,PDF 中没有 PDF 页码列。
- 若使用外部来源,已在最终回复或 PDF 中标明为补充资料。
- 计算题附录位于最后,步骤完整且公式/数字经过核对。
- 已渲染预览检查字号、列宽和空白。
- 最终 PDF 位于 `outputs/`,文件名能体现版本差异。

# 异常兜底处理

## 中文路径/编码

- PowerShell 输出乱码不等于文件内容乱码。
- 用 Python `pathlib`/`os.listdir` 扫描中文文件名,必要时用 Unicode 转义。
- 读取 UTF-8 文本用 `scripts/peek_text.py`;老旧 GBK 文本加 `--encoding gb18030`。

## PDF 被占用

- Windows 上 PDF 被阅读器打开时可能无法覆盖。
- 另存新文件名,如 `_2页版`、`_清晰详解版`。

## PDF 加密或损坏

- `probe_pdfs.py` 会标出 `encrypted`/`cannot open`;请用户提供未加密版本,不要尝试破解密码。

## OCR 不完整

- 明确说明 OCR 来自扫描版,个别文字按课件语义校正。
- 对题干、数字、公式必须截图核对,尤其卷积核、矩阵、图表拐点。

## 页码冲突

- 以教材目录为准。
- 印刷页码和 PDF 页码分开;用户只能带教材时删 PDF 页码。
- 若目录页码和正文页码不一致,用 `textbook_pages.py check --render` 打开正文页确认后再写。

## 排版冲突

- “字大”和“页少”冲突时,优先可读性。
- “不要空白”和“计算题最后独立”冲突时,计算题独立优先,但可把页码速查并入前页节省空间。

Files in this skill

  • SKILL.md14.7 KB
  • agents/openai.yaml405 B
  • references/answer-templates.md3.8 KB
  • references/example-ai-course.md2.1 KB
  • references/pack-format.md3.1 KB
  • scripts/build_pdf.py14.4 KB
  • scripts/extract_text.py5.3 KB
  • scripts/peek_text.py2.2 KB
  • scripts/probe_pdfs.py5 KB
  • scripts/requirements.txt195 B
  • scripts/textbook_pages.py6.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.