新授课教学设计
依据导学提纲(内容来源)自动产出一份新授课教学设计,格式严格沿用内置模板。
用途
- 版式不重做:所有段落、表格单元格都是从模板里克隆已有元素、只替换文字,
因此字体 / 字号 / 加粗 / 缩进 / 行距 / 边框 / 页码 / 页面设置全部原样保留; - 未改动的段落原样保留原 XML,不产生任何多余差异;
- 日期口径(详见下文「日期规则」):
- 页眉 / 页脚中的「编写日期」(即设计日期)= 导学案页眉的编写 / 设计日期,保持一致;
- 页眉 / 页脚中的「使用日期」= 导学案页眉的使用日期,保持一致(不顺延);
- 课时数:默认按 1 课时设计(「八、教学安排」表 = 表头 + 1 行课时,
「九」只写 1 个「第1课时」);只有导学提纲 / 用户明确写明课时数时才用其他课时数,
绝不按内容多少自行推断; - 插图:导学提纲里的图(如「图2-1-2」)会被抽取出来,在教学设计对应位置插入,
图片字节原样保留,内容不缺失。
环境
脚本仅用 Python 标准库(zipfile / re / json),无需安装任何第三方包。
使用当前会话可用的 Python(优先托管版本):
C:\Users\郭震\.workbuddy\binaries\python\versions\3.13.12\python.exe
脚本目录:本技能目录下的 scripts/。下文用 $SKILL 表示技能目录
(即本 SKILL.md 所在目录,通常为 ~/.workbuddy/skills/new-lesson-design)。
> Windows 上 PowerShell 抓不到 Python 的标准输出时,请让脚本自身写文件
> (如 --out、--json),再用 Read 读取;不要依赖控制台回显。
标准流程(4 步)
第 1 步:读导学提纲
& "<python>" "$SKILL\scripts\read_outline.py" "<导学提纲.docx>" --json "<工作目录>\outline.json"
不带 --json 时直接打印可读文本。输出字段:
| 字段 | 含义 |
|---|---|
title |
文档标题(如 §1.4.1 速度变化快慢的描述——加速度 导学提纲) |
sec / name |
从文件名解析的节号与课题名(如 1.4.1 / 加速度) |
header |
页眉信息:设计人 / 审核人 / 编写日期(或 设计日期)/ 使用日期 |
sections |
按“一、二…”与“(一)(二)…”切分后的条目与子条目 |
images |
插图清单:key / file / path(已导出)/ cx·cy(原始显示尺寸,EMU)/ para / context |
插图会同时导出到 <outline.json 所在目录>\<导学提纲文件名>_images\,
教学设计里用 img 块引用这些文件即可(见「图片规则」)。
第 2 步:取模板骨架(含模板原文预填)
& "<python>" "$SKILL\scripts\build_design.py" --skeleton --out "<工作目录>\content.json"
得到一个 content.json:结构与模板完全同序,文字用模板原文预填,
每个块带 src(模板原始段落下标,决定版式)。
> - 也可以先 --show-map 查看模板的块类型清单。
> - 骨架默认按 1 课时出:「八、教学安排」表只给 1 行表头 + 1 行课时
> (模板里原本多带的示例课时行会被自动裁掉)。
> 只有导学提纲 / 用户明确写了别的课时数时,才加 --periods N(如 --periods 2)。
第 3 步:改写内容(本技能的核心智力工作)
对照 outline.json,把 content.json 中每一个块的文字改成新课题的内容。
规则:
- 框架一个字都不能动:
blocks的块类型、h1块的数量(固定 9 个,对应
一~九九个板块)、以及各板块的先后顺序,必须与骨架一致。
h1块的标题文字会自动取自模板,不要给h1填文字。 - 只改
x/k/v/rows的文字,保留所有src字段不动。 - 内容映射(与模板九个板块对应):
| 板块 | 内容来源 |
|---|---|
| 一、课标分析(教学依据) | 导学提纲「一、课标表述」,可补一句本节地位 |
| 二、教材分析 | 由课题、教材版本、节次、引入情境归纳 |
| 三、考向分析 | 围绕本节高考考点分条列出(pi 块,k 为“考向n:”) |
| 四、学情分析 | 结合本节易错点、认知障碍 |
| 五、教学目标及学习“三点” | 导学提纲「二、学习目标」→(一);再归纳重点/难点/关键点 →(二) |
| 六、重要知识建构节点 | 由导学提纲「三、学习过程」的问题链提炼为节点1…n |
| 七、读背或拓展材料内容 | 由提纲「(五)聚焦核心」与教材要求提炼读背内容、拓展内容 |
| 八、教学安排(表格) | 默认 1 课时=表头 1 行 + 课时 1 行;列=学习内容/限时训内容/读背内容/拓展内容/评价方式(课时数规则见下) |
| 九、平台视频主要内容及特点 | 课时标题 + 课标表述/学习目标/教学准备/学习过程(一~六)+ 板书设计 + 教学反思 |
- 课时数规则(重要,默认 1 课时):
- 默认按 1 课时设计,所有课时相关的位置都按 1 课时写:
- 「八、教学安排」表 = 1 行表头 + 1 行课时(共 2 行),课时列写
第1课时\n§节号 课题; - 「九、平台视频主要内容及特点」只保留 1 个
ctr块(第1课时 §节号 课题); - 「板书设计」按
第1课时:…写。
- 「八、教学安排」表 = 1 行表头 + 1 行课时(共 2 行),课时列写
- 绝对不要根据下列任何因素自行推算课时数:导学提纲内容的多少、学习过程的条目数、
知识建构节点的个数、表格的行数、骨架里预填的行数(模板骨架里原本带着 2 行示例课时,
那是模板残留,必须删成 1 行)。 - 只有在导学提纲或用户明确写明课时数时才使用其他课时数,例如
「本节共 2 课时」「第2课时」「本课时为第 2 课时」「按 2 课时设计」。此时:- 「八」表按课时数增行(2 课时 → 表头 + 2 行);
- 「九」按课时重复
ctr及其后的kv/h3/p/… 内容块(脚本支持增删块,克隆同类型版式); - 没明确说明就一律 1 课时,不要反问用户。
- 也可在取骨架时直接指定课时数:
--skeleton --periods N(默认 1;N>1 时表格自动预置 N 行)。
- 「九」的「学习过程」子标题与正文,逐条对引导学提纲「三、学习过程」的
(一)~(六):(一)温故导新 →(二)用笔思考(提纲里叫“痛苦思考”)
→(三)主动讲解 →(四)双师导学 →(五)聚焦核心 →(六)强化反馈。
强化反馈中的题目按导学提纲原样录入(p0块)。
题目完整落地的两条硬规则(用户明确要求“一个空都不能丢”):
- (二)用笔思考也要把提纲(二)痛苦思考的题目全部录入,不能只写一句
“思考:①…②…”。做法:p0引导句直接用提纲原文(如“阅读教材P39—P41页内容,
思考以下问题:”),随后把提纲里的第 1、2、3… 题连同选项(A.~F.)、小问
(1)(2)(3)逐行原样录入(p0块,一行一块)。题号沿用提纲原编号,
不要重排、不要合并——「(三)主动讲解」里引用的“第1~4问”要对得上。
必要时把选项里的公式/上下标补成完整文字(如2 m/s²、v=v₀+at)。 - 提纲若有「四、拓展提升」(题干、选项、答案)→ 落到「七(二)拓展内容」,
把题干 + 各选项 + 答案/解析完整写成若干p块,不要只写“拓展:某某模型”。
分式用(v₀−v)/(3a)这类纯文本写法,上下标用 Unicode(v₀、m/s²)。
6. 条目数量可以增删:直接增删块即可,增删的块自动克隆同类型版式。
7. 表格行数可增删:rows多一行自动克隆一行,少一行自动删一行。
「八、教学安排」表的行数由课时数决定(默认 1 课时=表头 1 行 + 课时 1 行,
见上文「课时数规则」),不随内容多少变化。
表格版式(6 列全边框)来自模板的「八、教学安排」表,列宽也是照搬它的
([900, 2600, 1400, 1200, 1400, 1260]dxa)。
若要在「九、学习过程」里录提纲的数据表格(列数、列宽都不同),
给该tbl块加cols:[...](各列宽度,单位 dxa/缇,1cm≈567)覆盖列宽即可:
列数按cols长度、单元格按rows逐格填,缺的补空字符串;
版心宽约 9024 dxa,表格总宽建议取 8760(与教学安排表齐)。
8. 图片按原提纲位置就近插入:提纲里在哪个段落附近出现插图,就在
教学设计对应位置的块后面插入img块(见「图片规则」)。
块类型速查(细节见 references/template-map.md):
{t:"h1"} 一级标题,文字自动取自模板
{t:"p", x:"正文,首行缩进2字"}
{t:"p0", x:"正文,无缩进"}
{t:"pi", k:"加粗提示语", x:"其余正文"}
{t:"h2", x:"(一)教学目标"} 宋体加粗小四,无缩进
{t:"h3", x:"(一)温故导新"} 仿宋加粗小四,缩进
{t:"ctr", x:"第1课时 §1.4.1 …"} 居中大标题(默认只 1 个)
{t:"kv", k:"课标表述", v:"1.1.3 理解加速度。"} 标签行(标签+冒号+内容)
{t:"bhead", x:"板书设计"} 无缩进加粗标题
{t:"gap"} 空行
{t:"tbl", rows:[["课时","学习内容",…], …]} 表格
{t:"tbl", rows:[[…]], cols:[3460,1325,…]} 表格(cols 覆盖列宽,单位 dxa/缇)
{t:"img", x:"图片路径", w:12.5, cap:"图2-1-2"} 插图(w 为宽度cm,可省)
{t:"title", x:"§1.4.1 …… 教学设计"}
第 4 步:生成教学设计
& "<python>" "$SKILL\scripts\build_design.py" --outline "<导学提纲.docx>" --content "<工作目录>\content.json"
默认输出到导学提纲同目录,文件名为 X.X 课题名 教学设计(新).docx
(可用 --out 指定)。脚本会打印实际用到的编写 / 使用日期与嵌入的插图清单。
生成后务必用 present_files 把成品打开给用户看。
日期规则
| 教学设计页眉 / 页脚 | 取值 |
|---|---|
| 编写日期(=设计日期) | 与导学案页眉的「编写日期 / 设计日期」完全一致 |
| 使用日期 | 与导学案页眉的「使用日期」完全一致 |
核心:两项日期都是从导学案原样照抄,不做任何 ±1 天位移。
- 支持多种写法:
9.12、9月12日、09.12、2024.3.5、2024年3月5日、9-12、9/12;
输出沿用导学案原文格式,不做归一化。 - 页眉字段名容错:导学案写「设计日期 / 编写日期 / 制作日期 / 编写时间」都认;
使用日期写「使用日期 / 使用时间 / 授课日期」都认。 - 页眉、页脚都扫、都改:若导学案的日期写在页脚(或模板的页脚里也有日期字段),
同样按上述规则对齐;教学设计的页眉文字标签保持模板原样
(仍是「编写日期:…/使用日期:…」),只改日期值。 - 导学案只写了「使用日期」没写「编写日期」时:两项都取导学案的「使用日期」;
只写了「编写日期」没写「使用日期」时:两项都取「编写日期」。都不会自动 +1。 - 两项都读不到时:用
--write-date/--use-date手动指定(指定值原样写入)。 - 只查看日期口径与页眉原文:
--dates-only(同时给出「使用日期早于编写日期」的复核提示)。 - 若导学案页眉把两个日期写反了,脚本只提示、不擅自改动,值仍按导学案照抄。
图片规则
read_outline.py会把提纲中的插图(w:drawing与 VMLw:pict,OLE 公式对象不计)
导出到<导学提纲文件名>_images\,并在outline.json的images里给出清单,
含file、path、原始显示尺寸与所在位置的上下文文字,便于判断该图属于哪个环节。- 用
img块插入:
json
{ "t": "img", "x": "导学案_§2.1实验_…_images/image1.png", "w": 13 }
x:图片路径;相对路径按content.json所在目录解析,也可写绝对路径;w/h:宽度 / 高度,单位 cm。只给w时按原图比例算高度;
都不给时按原图像素尺寸(96dpi),超出版心宽度会自动等比缩小;cap:可选题注,居中小四排在图片下方。
3. 放图位置=提纲中该图的位置(提纲里出现在哪个问题/段落附近,教学设计就放在对应块之后)。
提纲中有的图必须全部落到教学设计里,一张都不能丢。
4. 图片是按字节原样写进 docx 的word/media/,并自动登记关系与
[Content_Types].xml;同一张图被引用多次只写一份。
5. 若提纲图是公式(位图/WMF),教学设计里对应位置优先补完整文字;
确实无法用文字表达时才插图,避免版式被图片割裂。
常见情况处理
- 模板被更新:替换
assets/教学设计模板.docx即可;用--show-map核对块结构,
src机制会让未改动段落保持逐字节一致。 - 用户只发了导学提纲、没提模板:直接用内置模板,不要反问。
- 课时数怎么定:默认 1 课时。导学提纲里没写「共几课时 / 第几课时」就按 1 课时出,
内容再多也不自行拆成多课时。骨架里若残留「第2课时…」的示例行,删掉。
只有提纲或用户明确写下课时数时才照该数生成(可用--skeleton --periods N预置行数)。 - 导学提纲中的插图与公式:提纲里的公式常以图片/嵌入对象存在,
read_outline.py
的纯文字提取会出现残缺(如选项变成A.,,则物体做加速运动)。教学设计对应位置
以完整文字呈现,要依据上下文把公式补全,不要照抄残缺文本。 - 提纲里的数据表格:不要只写成几行文字,也不要用默认 6 列宽硬套。
用{"t":"tbl","cols":[…],"rows":[…]}原样录入(列数按提纲,总宽 8760 dxa 与教学安排表齐),
否则「填入下表」的题干会悬空。 - 多份导学提纲:逐份处理,输出文件名按各自节号区分;每份的插图目录各自独立。
- 增删块时不要重新编号
src:src是模板段落下标,不是content.json里的序号。
自己在某个板块多加了一条,后面所有块的src仍要写模板里原来的下标;
新增的块克隆同类型版式(如多加的正文p就复制同板块内p的src)。
若把src按 0,1,2… 顺次重排,脚本会把块错配到别的版式上。 - 控制台回显不可靠:本机 PowerShell 抓不到 Python 输出时只回显一串
X,
请用--json/--out让脚本写文件,或用*> log.txt重定向后转码读取
(*>写出的是 UTF-16,需先用 Python 解码)。 - 本技能原名
lesson-design-generator,现更名new-lesson-design(显示名「新授课教学设计」):
遇到旧路径 / 旧叫法时按新目录~/.workbuddy/skills/new-lesson-design找脚本。
已知坑(改脚本前必读)
- 课时数只能「明说」、不能「推断」:模板自带的「八、教学安排」表原本有 2 行示例课时
(第1课时/第2课时),那是模板残留,不代表新课题要 2 课时;内容条目多、学习过程长,
也不意味着要多课时。默认一律 1 课时(表=表头 + 1 行、「九」= 1 个ctr);
make_skeleton()默认已把该表裁成 1 行,--periods N才能改成 N 行。
只有导学提纲或用户明确写明课时数时,才按该数生成。 - 日期只照抄、不位移:教学设计页眉 / 页脚里的「编写日期」「使用日期」都等于导学案
对应日期,脚本已删除shift_date。不要再引入「使用日期 +1 天」之类的顺延逻辑;
date_order_hint仅在「使用日期早于编写日期」时打印复核提示,不允许自动改值。 - docx 内部件名必须是 ASCII:
word/media/下若用中文文件名(如教学图1.png),
Word 会直接报「文件可能已经损坏」。图片一律命名image1.png、image2.png… - 日期正则里「日」要写成
(?:\s*日)?,不能写\s*日?:后者会把日期后面的空格
一并吃掉,导致页眉里「编写日期:9月12日 使用日期:9月15日」的间隔消失。 - 改完必须用 Word 实际打开验证:XML 良构 ≠ Word 可打开。
可用 PowerShell 的Word.ApplicationCOM 打开并导出 PDF 复核页数与图片数。
自检清单(输出前)
content.json的h1块数量是否为 9?脚本会提示不一致。- 课时数是否为 1?「八、教学安排」表是不是「表头 + 1 行」,「九」是不是只有 1 个
ctr
(第1课时 …)?除导学提纲 / 用户明确说明课时数外,一律按 1 课时,不要按内容多少定课时。 - 生成命令是否打印了正确的「编写日期 / 使用日期」(两项都应与导学案页眉/页脚一致,不作顺延)?
若脚本打印了「使用日期早于编写日期」的提示,回到导学案复核页眉,但不要擅自改动日期值。 - 提纲里的插图是否全部出现在
content.json的img块里?生成日志里嵌入张数是否对得上? - 输出文件是否落在导学提纲同目录、命名符合
X.X 课题名 教学设计(新).docx? - 用 Word 打开一次,确认无「文件已损坏」、图片显示正常;并核对页眉与页脚两处
的日期与导学案完全一致。 - 题目有没有漏?逐条比对导学提纲,确认(二)用笔思考已收录「痛苦思考」的全部题目
(含所有选项与小问)、(六)强化反馈的题目原样录入、提纲「四、拓展提升」的题目已进入
「七(二)拓展内容」。题号与提纲一致,不重排。
> 页眉空格自查:模板页眉是「编写日期:9.1 使用日期:9.9」(日期之间 4 个空格),
> 生成后应保留(用 Word COM 读会看不到空格,要看header1.xml原文)。