《高中数学精编·代数(上海专版)》题目整理工作区
长期工作区。任何一次新的对话里,只要指向本文件,即可按同一套标准继续整理。 主对话工作区(WorkBuddy):
C:\Users\Administrator\WorkBuddy\下的会话目录会变, 但本目录 + 记忆文件里的规范不会变。
任务定义
把教材 PDF 中每道训练题整理成 Obsidian 笔记:
- 每题一个
.md文件,写入 vault 对应章节文件夹; - 每题配一张原书截图(从 PDF 高清裁剪),存放在该章节文件夹的
attFiles\下; #题目段为逐字转录的文字版(数学式用 LaTeX);- 截图在文件末尾用
![[文件名.png]]引用; - 模板:
D:\无非小筑\template\题目题目题目题目目目目目目.md。
目录约定
D:\无非小筑\3_数学题目\高中\《高中数学精编·代数·上海》\
├─ 1,集合与逻辑\ ← vault 第一章笔记(已有)
├─ 2,等式与不等式\ ← vault 第二章笔记
│ ├─ 1,不等式的性质与方程解集\
│ └─ 4,基本不等式及其应用\
│ ├─ 〚代数精编2.4-98〛.md
│ └─ attFiles\代数精编2.4-98.png
├─ 资料\
│ ├─ 高中数学精编·代数·上海.pdf ← 教材(305页纯扫描,无文字层)
│ └─ 高中数学精编·代数·上海·答案.pdf ← 答案册(219页,题号与教材一致)
└─ _work\ ← 本工作区(工具+数据,不进 Obsidian 索引)
├─ README.md ← 本文件
├─ extract_pages.py # 教材PDF → pages\pNNN.jpg(物理页序提取)
├─ build_notes.py # problems\X.X.json → 批量生成 md + 截图
├─ book_map.json # 全书目录 & 书页↔图片映射
└─ problems\X.X.json # 每节的题目清单(转录文本+裁剪框)
命名与编号规则
- 文件名:
〚代数精编<章>.<节>-<题号>〛.md,如〚代数精编2.4-98〛.md - 题号一律用书印题号(第2章在章内连续,如 2.4 节为 98~129)
- 截图名:
代数精编<章>.<节>-<题号>.png,放章节文件夹的attFiles\ - 章节文件夹名:
<章>,<节名>(如4,基本不等式及其应用)
第3章起的扩展命名(10-26 用户定)
例题、A组、B组分别加前缀,仍用书印题号(第3章题号在章内连续:3.1 为 132,3.2 续 3369):
| 类型 | 文件名 | 例 |
|---|---|---|
| 例题 | 〚代数精编<节>-e<例题号>〛 | 〚代数精编3.1-e1〛、〚代数精编3.2-e4〛 |
| A组 | 〚代数精编<节>-a<书印题号>〛 | 〚代数精编3.1-a1〛、〚代数精编3.2.1-a33〛 |
| B组 | 〚代数精编<节>-b<书印题号>〛 | 〚代数精编3.1-b26〛、〚代数精编3.2.2-b64〛 |
- 3.2 含两个子节,例题用
3.2-e*,训练题分别用3.2.1-*、3.2.2-* - 跨页题:一题跨两页时,第一段截图
名.png,续图名-2.png,笔记里依次![[名.png]]![[名-2.png]]
已定规范(勿再询问)
#解答默认留空,由用户自己做;如用户要求,才从答案册转录- 模板以
D:\无非小筑\template\t题目.md为准(10-26 更新版):frontmatter 只有关联/备注/tags:(tags下不再预置- "#题目"), 正文为# 题目 / # 导引 / # 解答 / # 解析 / # 附注,附注首行是带说明的评级标尺☆☆☆☆💯(必做好题)🏅(详细解读)📋(知识类)👍(好题)🙇(拓展思考) - 截图裁剪:约 2.6 倍放大,上边界贴题号行、下边界到选项/小题结束,不带邻题残影
- 转录遇到原书印刷可疑处,照原样转录并加 🔺 标记
工具用法
PY="C:/Users/Administrator/.workbuddy/binaries/python/envs/default/Scripts/python.exe" # 已装 pymupdf
# 1) 提取教材页面图片(首次或 PDF 变更后执行一次)
"$PY" ".../_work/extract_pages.py"
# 2) 第2章及以前:按 json 清单生成
"$PY" ".../_work/build_notes.py" problems/2.4.json
# 3) 第3章起:题目数据直接写在脚本里,按行带裁图
"$PY" ".../_work/build_ch3.py" # 只补缺的
"$PY" ".../_work/build_ch3.py" --force # 全部重出截图(改裁框后用)_bands.json 是 p064~p075 的行带表(每页各文本行的 [上,下] 页高比例),
build_ch3.py 里每题只记「页 + 起始行带 + 结束行带」,留白自动取相邻行带间隙的 75%(上限 0.006)。
换页做新题时重跑一遍行带提取即可。
新增一节的标准流程:
extract_pages.py确认页面图片在位;- 按
book_map.json定位节的训练题页码范围,读图确定题号起止; - 在
problems\X.X.json里逐题填:题号、所在页图、裁剪比例框、题干 LaTeX 文本; - 跑
build_notes.py生成,抽 2~3 张截图人工核验边界; - 用户在 Obsidian 里检查。
页序与映射(重要坑)
- 教材 PDF 是 Quark 扫描版,PDF 页树顺序与物理对象顺序不一致,且无文字层。
extract_pages.py按物理对象序提取为pages\pNNN.jpg(283/305 页,个别页字典格式不同未匹配)。- 第一、二章已验证:
pNNN.jpg = 书第 (NNN-4) 页,此范围无缺页。 - 偏移在第 40 页处变了:书 39 → p043(+4),书 40 → p045(+5),此后
pNNN = 书(NNN-5)。 即提取时缺了一页,第 40 页起普遍后移一位(已验证书 4048 → p045p053)。 - 第3章同样 +5:书 59 → p064(第三章开篇)、书 65 → p070(二、对数)、书 70 → p075(本章末页)。
- 更后面章节使用前,必须先抽查页码验证偏移(读页脚 ”· N ·”)。
- 第4章的偏移是分段变的,且中间有两张重复扫描页(已逐页读页脚核实):
- 书 71
75 → p076p080(+5); p081是书75 的重复扫描页(与 p080 图像近似度极高),弃用;- 书 76 起 →
书页 = pNNN − 6的实际锚点:p082=76、p083=77、p084=78; p085是书78 的重复扫描页(与 p084 同内容),弃用;- p086=79 之后稳定
书页 = pNNN − 7:p090=83、p091=84、p099=92、p106=99。 - 结论:第4章(书71
99)用 p076p080 + p082p084 + p086p106,跳过 p081、p085。
- 书 71
- 找重复页的快捷办法:把相邻页缩到 400×560 灰度算平均差,差值 < 6 的基本就是同一页重复扫描。
- 答案册同样提取在
_work\ans\aNNN.jpg,题号与教材一一对应(已验证 2.1、2.4)。 - 定位行首的可靠办法:先出「标尺图」——整页按行算墨迹带后画红线并标编号,一眼把每行对上编号; 再按编号区间裁图。注意分母/根式的浅灰横线常被行带漏检,会把一行拆成两带, 遇到例3、例4 这类大分式要目视确认末行没被切(3.2-e3 曾因此少截一行)。
进度
| 章节 | 状态 |
|---|---|
| 2.1 等式的性质与方程的解集(题1~17) | ✅ 已生成(书24 |
| 2.4 基本不等式及其应用(题98~129) | ✅ 已生成 32 篇(书45 |
| 3.1 幂与指数(例1 | ✅ 已生成 35 篇(书59 |
| 3.2 对数的例题(例1~4) | ✅ 已生成 4 篇(书65 |
| 3.2.1 对数(A33 | ✅ 已生成 21 篇(书66 |
| 3.2.2 换底公式(A54 | ✅ 已生成 16 篇(书68 |
| 4.1 幂函数(例1 | ✅ 19 篇(书71 |
| 4.2 指数函数(例1 | ✅ 39 篇(书76 |
| 4.3 对数函数(例1 | ✅ 46 篇(书84 |
| 4.4 指数方程和对数方程(例1 | ✅ 47 篇(书92 |
| 第5章起 | 未开始 |
第 4 章合计 151 篇 + 174 张截图(跨页/图文分裁的题各多一张续图)。
第 4 章题号规律:全章连续编号(1126),按小节顺序排;但 4.4 节内部是「(一)(二)(三) 三个子专题,每个子专题先 A 组后 B 组」,
所以 A/B 题号是交错的两段(A8694、B9598、A99104、B105113、A114122、B123~126),不是「A 段在前、B 段在后」。
第 3 章合计 76 篇 + 79 张截图(3 道跨页题各多一张续图)。第 3 章题号规律与第 2 章不同:
3.1 训练题从 1 重新起编(132),3.2 接着编(3369),不是全章连续到 2.4 的 129 之后。
生成脚本
| 脚本 | 覆盖 |
|---|---|
build_ch3.py | 第 3 章全部(行带表 _bands.json) |
build_ch4.py | 4.1 + 4.2(行带表 _bands4.json,含 crop() 与模板,其余脚本 import 它) |
build_ch43.py | 4.3 节 |
build_ch44.py | 4.4 节 |
crop() 的留白规则(第4章定稿):取与相邻行带间隙的 75%,上限 0.006 页高;间隙 < 0.004 时留白取 0(
否则会把上一行的下划线/笔锋带进来);裁完若某侧墨迹 < 12px,该侧逐步加宽重裁(单侧累计 ≤ 0.012)。
2.4 裁剪框速查([y0,y1] 页高比例,全宽)
页 45(p050):100 0.5905-0.653|101 0.6545-0.724|102 0.728-0.7925|103 0.795-0.8645|104 0.868-0.938
页 46(p051):105 0.064-0.113|106 0.115-0.138|107 0.1385-0.161|108 0.165-0.230|109 0.2295-0.252|110 0.2535-0.292|111 0.347-0.385|112 0.390-0.4675|113 0.480-0.538|114 0.5445-0.624|115 0.630-0.745|116 0.7465-0.7705|117 0.7745-0.7995|118 0.801-0.871|119 0.876-0.942
页 47(p052):120 0.059-0.130|121 0.1345-0.226|122 0.2285-0.3425|123 0.3455-0.483|124 0.5365-0.5985|125 0.5995-0.6235|126 0.624-0.663|127 0.6645-0.7065|128 0.711-0.807|129 0.8095-0.8325
快速定框法:用 pymupdf 渲染整页→按行算墨迹带(
dark<128的行和 >2), 行带首尾各留 0.005 页高即得框;分母/根号高行会额外占带,需目视回看顶部是否贴边。