Back to skills
SKILL.md
Open Book Exam Pack
ASecurityBuild 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
Works with
Security analysis
92/100- Installs packages at runtime which could introduce malicious dependencies
Pro scans all 11 files and shows the line behind each finding
npx -y skills add X1a0heZzzz/open-book-exam-pack --skill open-book-exam-pack --agent claude-codeAre you the author of Open Book Exam Pack?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/x1a0hezzzz-open-book-exam-pack)---
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.md
- agents/openai.yaml
- references/answer-templates.md
- references/example-ai-course.md
- references/pack-format.md
- scripts/build_pdf.py
- scripts/extract_text.py
- scripts/peek_text.py
- scripts/probe_pdfs.py
- scripts/requirements.txt
- scripts/textbook_pages.py
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.