Guided Book Reader
目标
把一本英文技术书 PDF 变成可持续阅读的学习项目:
- 读取 PDF。
- 转成全文 txt。
- 按章节拆分成独立 txt。
- 创建
notes/。 - 用中文为主、对话式深读的方式逐小节带读。
- 每小节后用选择题确认理解。
- 每读完一节,更新对应 markdown 笔记。
工作流
1. 准备文本
当用户给出 PDF 路径时,先检查文件是否存在。然后运行:
python <skill_dir>/scripts/split_pdf_by_chapters.py "<pdf_path>"
脚本会优先调用本机的 pdftotext -layout,将 PDF 转成全文 txt,再根据正文中的章节标题自动切分。
如果脚本输出的章节明显不完整,先不要继续讲书。把 MANIFEST.txt 展示给用户,让用户确认或提供需要修正的章节标题/边界。
2. 建立阅读目录
默认在 PDF 同级目录下创建同名目录,例如:
book.pdf
book/
00-Preamble.txt
01-Chapter.txt
notes/
MANIFEST.txt
如果用户指定输出目录,使用用户指定目录。
3. 带读方式
读取对应章节 txt。进入新章节时,先给 5-8 行中文路线图,说明本章要解决什么问题、和上一章如何连接、内部小节大致怎么推进。
正式带读时,一次只讲一个小节;如果小节很长,再拆成 2-3 个阅读块。不要一次讲完整章,除非用户明确要求。
每小节使用这个结构:
- 说明这一小节在本章中的作用:承接什么、铺垫什么、为什么现在讲。
- 处理必要英文术语:给中文翻译、在本书语境里的意思、常见误解。
- 说明作者在反对什么误解、建立什么区分或工具。
- 用中文解释核心意思,默认保持对话式深度,不要压成提纲。
- 给一个贴近日常、工程或书中主题的例子,把概念落地。
- 说明这个点为什么重要,以及它如何影响后续阅读。
- 用一句话总结。
- 给一道选择题,并标出推荐答案。
详细风格见 references/teaching-style.md。
4. 笔记更新
每读完一节,都更新 notes/chapter-XX-<slug>-notes.md。
笔记保持中文复习版,不要和聊天讲解一样长,也不要堆英文原文:
- 核心意思
- 例子
- 结论
只保留必要英文术语,例如 facts、concepts、categories、modalities。
聊天里讲得丰富,notes 只保留复习地图。
5. 继续阅读
用户说“继续”时:
- 找到当前章节和上次读到的小节。
- 继续下一小节。
- 保持同样讲解粒度。
- 更新 notes。
如果无法确定进度,读取 notes/ 和当前章节 txt,推断最近读到的位置;推断不稳时,简短询问用户。
PDF 切分策略
优先使用已经验证过的路线:
pdftotext -layout -> full.txt -> Python 按章节标题切分
不要默认依赖 pypdf、PyPDF2、pdfplumber 等 Python 包。只有在 pdftotext 不可用时,才考虑其它方案或提示用户安装 Poppler/Git for Windows。
交互原则
- 中文为主。
- 英文术语不只是列词表:要解释中文含义、本书语境和容易误解的地方。
- 不要大段复制原文。
- 用户说“太简洁”时,补充例子和解释。
- 用户说“太多”时,拆小节、缩短输出。
- 用户希望选择题时,固定用 A/B/C/D。
- 用户要求写 notes 时,立即落盘,不只在聊天里总结。
- 不要每次都输出 notes 文件完整路径。notes 照常写,聊天里最多一句“笔记已同步”,除非用户要路径。