# 数学解题思路讲解

> 3:4 竖屏小学数学讲解模板。一块板子讲完一道题：题面彩色标注、方程 / 条形图 / 线段图 / 表格四选一，红色虚线框随旁白圈选，答案最后落进图形里。

Source: https://www.remixmate.ai/learn/templates/math-principles-expl · Updated: 2026-09-30

## 什么时候选它

**一道题讲到底**的知识类短视频：小学奥数、平均数、和差倍、鸡兔同笼、列表枚举、公式推导。画面上只有数学，节奏靠三件事推进：元素逐个出现、红框在元素之间跳动圈选、答案最后落进图形内部。

## 规格

| 项 | 值 |
|----|----|
| 画幅 | **固定 3:4**（竖屏，1080×1440） |
| 时长 | 15–180 秒 |
| 内容语言 | 中文 |
| 场景结构 | 单场景为主，整片就是一块板子；零转场、零镜头运动 |
| 旁白 | 需要（音频），每句旁白对应板面上的一个动作 |
| 字幕 | 默认开，板面自动上移 6% 给字幕条让位 |

主题变体 5 套（`meta.templateVariant`）：greenboard 教室绿板（新内容推荐）、blackboard 黑板深色、chalk 粉笔怀旧、ink 白纸墨线、kraft 牛皮纸练习册。

参考片没有独立开场和片尾。opening / ending 场景可用，但渲染与讲解场景相同；opening 不要超过 3 秒。

## 版面

1. **标题**：给了年级就渲染成黄字白描边的「四年级《平均数》」；只给 title 则是「· 整体思维 ·」这种解题思路名的形态。
2. **题面**：`statement.lines`，行内标记给关键词上色、加胶囊。写的是**角色**不是颜色，换主题时配色自动跟着变。
3. **讲解主体**：`figure` 四选一——equation 符号方程（△□○ 与推导行）、bar-chart 条形图、tape-diagram 线段图、table 表格。
4. **讲解节奏**：`steps` 与旁白逐句对应，每一步可以揭示元素、画红框、变色强调、把答案填进图形。

## 关键参数

所有参数都在讲解场景的 `customPayload` 里。

| 参数 | 位置 | 类型 / 取值 | 默认 | 说明 |
|------|------|-------------|------|------|
| `grade` | `customPayload.grade` | 字符串，如 `四年级` | — | 给了它标题切换成大字描边形态，`titleDots` 自动关 |
| `title` | `customPayload.title` | 字符串（建议 ≤ 8 字） | — | 有 grade 时写知识点，没有时写解题思路名 |
| `titleBracket` | `customPayload.titleBracket` | `《》` / `〈〉` / `none` | `《》` | 知识点两侧符号，只在给了 grade 时生效 |
| `titleDots` | `customPayload.titleDots` | 布尔 | true（有 grade 时 false） | 标题两侧装饰点 |
| `statement.lines` | `customPayload.statement` | 字符串数组（建议 ≤ 3 行） | — | 题面。`{文本\|role}` 彩色字、`[[文本\|role]]` 胶囊、`**文本**` 加粗，字面花括号写 `\{` `\}` |
| role | 题面标记与 `colorRole` | `given` / `total` / `groupA` / `groupB` / `focus` / `unknown` / `plain` | — | 题面和图形共用同一套角色，颜色才对得上 |
| `statement.fontSize` / `align` | `customPayload.statement` | 数字 / `center`、`left` | 52 / `center` | 题干长时调小字号 |
| `problemType` | `customPayload.problemType` | `average` / `statistics-compare` → 条形图；`sum-diff` / `multiple` / `fraction-part` / `ratio` → 线段图；`enumerate` / `pattern` / `chicken-rabbit-list` → 表格；`symbol-equation` / `assume` / `work-rate` → 方程 | — | 不确定用哪种图就写题型，系统自动挑。写了 `figure.type` 时被忽略 |
| `figure.type` | `customPayload.figure` | `equation` / `bar-chart` / `tape-diagram` / `table` | 按题型推断，兜底 equation | 讲解主体。数据**平铺**在 type 旁边，不要再套一层 `data` |
| `figure.bars` | `customPayload.figure`（bar-chart） | `{id, label, value, display?, colorRole?, answer?}` 数组 | — | 柱子，建议 ≤ 6 根 |
| `figure.baseline` | `customPayload.figure`（bar-chart） | `{id, value, label?, colorRole?}` | — | 基准线（平均数题眼），必须在某一步 reveal 才会画 |
| `figure.unit` / `axisMin` / `axisMax` | `customPayload.figure`（bar-chart） | 字符串 / 数字或 `auto` / 数字 | — / `auto` / 自动 | 数值后缀；极差小时自动抬高基线并画断轴符号 |
| `figure.rows` | `customPayload.figure`（tape-diagram / table） | 线段图 `{id, label?, segments}`；表格 `{id, cells, answer?}` | — | 两种图共用这个键，字段不同。线段图建议 ≤ 5 行，表格 ≤ 8 行 |
| `figure.columns` | `customPayload.figure`（table） | `{id, label, colorRole?, width?}` 数组 | — | 表头 |
| `figure.symbols` / `board.rows` | `customPayload.figure` / `customPayload.board` | 形状 `triangle` / `square` / `circle` / `diamond` / `pentagon` / `hexagon` / `star`；方程行 `{id, lhs, rhs, relation?, derived?}` | — | 方程题的未知量（建议 ≤ 5 个）与方程行（建议 ≤ 8 行）。方程行写在 `board.rows`，推导行 `derived: true` 结果用焦点红 |
| `steps[].reveal` | `customPayload.steps` | id 数组 | — | 本步新出现的元素 |
| `steps[].highlights` | `customPayload.steps` | `[{ids, part?, color?}]`，part: `all` / `lhs` / `rhs` / `label` / `value` | `all` | 红色虚线框。`[]` = 清框，不写 = 沿用上一步的框。可以同时框题面和图形 |
| `steps[].solve` | `customPayload.steps` | id 数组 | — | 把答案填进形状 / 柱身 / 线段 / 表格行 |
| `steps[].emphasize` | `customPayload.steps` | id 数组 | — | 结果数字变焦点红 |
| `steps[].revealResult` | `customPayload.steps` | 行 id 数组 | — | 推迟推导行的「= 结果」，防止答案比旁白先出现 |
| `steps[].atSec` | `customPayload.steps` | 秒 | 自动对齐第 i 句旁白 | 一般不用写，只有「一句话里分两次揭示」时才写 |
| `initial` | `customPayload.initial` | `revealedRows` / `solved` / `revealAll` | — | 拆成多场景时必填，列出上一场景末尾已在屏上的状态 |
| `figure.layout` | `customPayload.figure.layout` | equation: `centerY`(0.2–0.85，默认 0.56) / `symbolSize`(78) / `fontSize`(68) / `rowGap`(62) / `tokenGap`(20)；bar-chart: `chartHeight`(600) / `barWidth`(190) / `barGap`(150)；tape-diagram: `barHeight`(118) / `totalWidth`(980)；table: `rowHeight`(88) / `cellPadX`(28) | 见左 | 版式微调，一般不用动，内容超出安全区会自动等比缩小 |
| `background.preset` | `customPayload.background` | `board` / `solid` / `gradient` / `image` / `video` / `noise` / `none` | `board` | 配 `assetRef` / `videoAssetRef` 可铺图片或视频底 |
| `showSubtitles` | `customPayload.showSubtitles` | 布尔 | true | 要 1:1 复刻参考片（无字幕）时设 false |
| `coverHook` | `customPayload.coverHook` | 字符串 | 回落 title | 封面金句 |

题面元素的 id：整行是 `stmt-0` / `stmt-1`…，给某段起名（`{89 分|groupA#boy}`）后是 `stmt-1#boy`。表格可以按列（`c3`）和单元格（`r2c3`）引用。

## 什么时候别选它

- **不是一道具体的题，而是讲一门课的概念** → [黑板粉笔](/learn/templates/html-slide-blackboard)，有 26 种版式和章节页眉。
- **要 16:9 横屏或 9:16 全屏竖屏** → 本模板固定 3:4。横屏走 [知识看板](/learn/templates/html-slide)。
- **题目要十几行推导、好几张图** → 超出上限会被缩到看不清，拆多场景又要维护 `initial`，考虑是否真的适合一条短视频。

## 常见坑 {#pitfalls}

- **steps 条数 ≠ 旁白句数**。第 i 步对齐第 i 句，句数按句末标点（。！？；）数。不等时校验只打一条 warning，成片照样渲出来、退出码 0，错位只有人眼看得见。注意对齐的是句，不是字幕段——长句会被切成多段字幕。
- **首帧是空板**。首帧就是信息流封面，空帧像加载失败。第 1 步就要把讲解主体的主要元素 reveal 出来。
- **答案先于旁白出现**。推导行整行揭示时结果会一起出现，旁白要过几句才讲到时用 `revealResult` 推迟。
- **bar-chart 的 baseline 没有 reveal**。不 reveal 就整片不画。
- **figure 数据套了一层 `data`**。bars / rows / columns / symbols 要平铺在 `type` 旁边。
- **题面写颜色而不是角色**，或 `given` 写成彩字。`given` 在深色主题上和正文几乎同色，题目给的条件请写成胶囊 `[[…|given]]`。
- **字面花括号没转义**。会被当成标记吞掉。
- **给了 16:9 或 9:16**。只支持 3:4。
- **拆多场景忘了 `initial`**。每切一次场景板子就重新淡入一遍；同时要把转场设为 none。
- **沿用默认语速估时长**。估算器按参考片 4.7 字/秒标定，不等于 TTS 语速，换音色要先实测。
