---
name: mathlens
version: 1.0.0
category: 生活与工具
trigger_words:
tags:
platform: coze
source: DeepseekModel
source_url: https://deepseekmodel.com/skill?id=shuyicc-mathlens-skill-md
---

name MathLens description 专业的数学老师辅导技能，用于深入浅出的解答数学题，生成HTML讲解文档和带配音的Manim动画视频， 解答细致，深入浅出，浅显易懂，比较适合一般学情的学生。 核心工作流：数学分析 → HTML可视化 → 分镜脚本 → TTS音频 → 验证更新 → 脚手架 → Manim代码 → 渲染验证 触发条件：学生粘贴数学题图片、需要教学视频、需要HTML讲解资料 数学分析 核心工作流 WORKFLOW = [ # 步骤1: 数学建模 { "step" : 1 , "name" : "analyze_problem" , "input" : "题目图片/文本" , "output" : "math_analysis.md" , "tasks" : [ "推导数学事实" , "建立几何模型" , "确定图形构建方法" ] }, # 步骤2: HTML可视化 { "step" : 2 , "name" : "html_visualization" , "input" : "math_analysis.md" , "output" : "数学_{日期}_{题目}.html" , "tasks" : [ "SVG画图形" , "展示画图过程" , "标注关键要素" ] }, # 步骤3: 分镜脚本 { "step" : 3 , "name" : "storyboard" , "input" : "HTML内容" , "output" : "{日期}_{题目}_分镜.md" , "tasks" : [ "定义幕结构(不限制幕数)" , "设计画面/字幕/读白" , "音频清单(时长留空)" ] }, # 步骤4: TTS生成（含句级同步点） { "step" : 4 , "name" : "generate_tts" , "input" : "分镜脚本" , "output" : "audio/audio_{三位幕号}_{幕名}.wav + audio_info.json(含sync_points)" , "command" : "python scripts/generate_tts.py audio_list.csv ./audio --voice xiaoxiao" }, # 步骤5: 验证更新（含同步点摘要） { "step" : 5 , "name" : "validate_audio" , "input" : "分镜.md + audio/" , "output" : "更新后的分镜.md(填充时长) + 同步点摘要(供步骤7参考)" , "command" : "python scripts/validate_audio.py 分镜.md ./audio" , "check" : [ "音频存在性" , "时长>0" , "数量匹配" , "sync_points完整性" ] }, # 步骤6: 脚手架 { "step" : 6 , "name" : "scaffold" , "input" : "分镜.md + audio_info.json(含sync_points)" , "output" : "script.py (伪代码框架)" , "template" : "templates/script_scaffold.py" , "must_include" : [ "calculate_geometry() - 几何建模" , "assert_geometry() - 几何验证(题目条件+精度) + 画布范围检查(边界+中心)" , "COLORS - 颜色定义" , "SCENES[] - 幕信息数组(从audio_info.json加载时长)" , "start_scene_with_audio(scene_num) - 每幕起点（播放音频+记录起始时间）" , "end_scene_with_audio(expected_duration, safety_margin=0.2) - 每幕收尾（自动补齐等待）" , "wait_for_narration(keyword) - 等到读白说出关键词时刻再触发动画" , "wait_until_scene_time(seconds) - 等到幕内指定时刻" , ] }, # 步骤7: 生成代码 { "step" : 7 , "name" : "implement" , "input" : "script.py脚手架 + 分镜.md + audio_info.json(含sync_points)" , "output" : "完整的script.py" , "rules" : [ "根据分镜实现每幕动画" , "使用 wait_for_narration(keyword) 对齐读白和高亮" , "禁止 self.wait(max(..., duration - N)) 手动兜底" , "画面时长由 end_scene_with_audio() 自动补齐" , "calculate_geometry()必须完整实现" ] }, # 步骤8: 检查与渲染 { "step" : 8 , "name" : "check_and_render" , "input" : "script.py" , "output" : "视频文件 + 关键帧截图" , "command" : "python scripts/render.py" , "check" : [ "代码结构检查(check.py)" , "几何正确性" , "高亮同步" , "字幕清晰" , "动画流畅" ], "on_fail" : "回到步骤7修改代码" } ] # 工作流状态转换 # step1 → step2 → step3 → step4 → step5 → step6 → step7 → step8 # ↑____________↓ (失败时循环) 步骤1：分析题目，推导数学事实 目标 ：建立正确的数学计算方法和流程，形成画出符合数学的图形的方法。 输出格式 ## 数学事实分析 ### 已知条件 - 条件1：... - 条件2：... ### 推导的事实 1. **事实名称** : 描述 - 计算过程: ... - 数学表达: ... ### 图形构建方法 - 点的坐标: ... - 边的关系: ... - 圆/弧的定义: ... ### 需要证明的结论 - 结论1: ... 注意 ：所有证明题需要证明的结论，在分镜中都可以作为已确立的 事实 来使用。 步骤2：HTML + SVG 可视化 目标 ：用 HTML + SVG 画出图形，展示画图过程和解答流程，为分镜做规划。 补充 ：如果用户已经提供了准确的HTML文件，描述了画图过程，可以按文件名要求复制一份，跳过生成文件。 输出要求 文件命名： 数学_{日期}_{题目简述}.html 包含：题目陈述、SVG 图形、分步解答、关键要素标注 SVG 需要展示 画图过程 （如：先画三角形 → 再画圆 → 标注点） 步骤3：生成分镜脚本 目标 ：定义视频结构，不限制幕数，结尾预留音频文件名（时长为空）。 文件命名 {日期}_{题目}_分镜.md 分镜脚本结构 # 分镜脚本 - {题目名称} ## 分镜设计 ### 第1幕：{幕名} **画面** : ... **字幕** : ...（简洁，≤20字） **读白** : ...（详细，口语化，容易理解，适合普通学情的学生） **动画** : ... **目的** : ... --- ## 音频生成清单（步骤4填写） | 幕号 | 文件名 | 读白文本 | 时长 | 说话人 | 情感 | |------|--------|----------|------|--------|------| | 1 | audio _001_ {幕名}.wav | "读白文本" | | xiaoxiao | 热情 | | 2 | audio _002_ {幕名}.wav | "读白文本" | | xiaoxiao | 平和 | 关键规范 幕号从1开始连续编号 文件名格式： audio_{三位幕号}_{幕名}.wav 时长列为空 ，由步骤5填充 不限制幕数，根据内容需要决定 每幕读白建议 1 3 句，每句 8 20 字，避免单幕文本过长导致动画拥挤 动作节奏采用「句子拍点」：每句读白对应 1~2 个核心动画，不要一口气堆叠大量 Create/Transform 动画描述：使用读白关键词锚点（重要） 分镜的 动画 部分使用 @[关键词] 锚定读白中的句子，步骤4 TTS 生成后会自动产生每句话的精确时间戳（sync_points），步骤7中代码通过 wait_for_narration("关键词") 精确对齐。 不要写硬编码秒数 （如 0.0s , 3.0s ），因为 TTS 生成前无法预知准确时刻。 **动画** : - @[勾股定理]: 字幕"勾股定理"淡入 - @[正方形]: 正方形高亮 → 字幕退场 - @[所以]: 结论公式淡入，持续到幕末 @[关键词] 规则 ： 关键词取自 读白文本 中某句话的特征词（2~6字） 同一幕内关键词不要重复 步骤5验证后，可在同步点摘要中确认每个关键词的实际时间 如果某动画不需要对齐读白（如幕首淡入），可以省略锚点 字幕退场约定 为了避免动画中文字忘记退场，在 动画 部分使用退场标记： 退场标记方式 （三选一）： → 箭头符号表示退场（推荐，最简洁） 退场: 或 淡出: 显式标记 持续X秒 指定显示时长 示例 ： **动画** : - @[正方形性质]: 字幕淡入，持续3秒 → 自动退场 - @[勾股定理]: 标题淡入 → @[所以] 时退场 - 幕末：所有文字退场 参考示例 见 references/storyboard_sample.md - 第九十九题：证明四点共圆 音画节奏预算（必填） 每一幕必须包含节奏预算（写在分镜的 动画 末尾）： **节奏预算** : - 音频时长 D: __ _s（步骤5回填） - 读白句数: 3 句 - 核心动画数: 3 个（每句读白对应 1~2 个动画） - 关键同步词: "三角形ABC", "内切圆", "切点" 执行原则 ： 单幕内重动画（Create/Transform 大对象）连续不超过 3 个 每个关键结论后至少留 0.2~0.4s 的视觉停顿 幕末收尾由 end_scene_with_audio() 自动补齐，不需要手动兜底 禁止 self.wait(max(..., duration - N)) 模式 步骤4：TTS 生成语音文件（含句级同步点） 使用脚本 ： scripts/generate_tts.py （Edge TTS） 脚本通过 Edge TTS 的 WordBoundary 事件自动捕获每句话的起始时间，生成 sync_points 。 执行命令 python scripts/generate_tts.py audio_list.csv ./audio --voice xiaoxiao 输出文件 audio/ ├── audio_001_开场.wav ├── audio_002_展示图形.wav ├── audio_003_定理证明.wav ├── ... └── audio_info.json ← 含 sync_points audio_info.json 格式（含 sync_points） { "files" : [ { "scene" : 1 , "file" : "audio_001_开场.wav" , "duration" : 8.5 , "sync_points" : [ { "idx" : 0 , "text" : "大家好，今天我们来讲解一道经典的平面几何问题" , "time" : 0.0 } , { "idx" : 1 , "text" : "证明四点共圆" , "time" : 3.2 } , { "idx" : 2 , "text" : "这道题综合运用了切线长定理和双曲线的性质" , "time" : 4.8 } ] } , { "scene" : 2 , "file" : "audio_002_展示图形.wav" , "duration" : 15.2 , "sync_points" : [ { "idx" : 0 , "text" : "首先，我们来看题目给出的图形" , "time" : 0.0 } , { "idx" : 1 , "text" : "三角形 ABC 的内切圆 I" , "time" : 2.1 } , { "idx" : 2 , "text" : "三角形内一点 K" , "time" : 7.4 } ] } ] } sync_points 说明 ： idx ：句子在本幕中的序号（从 0 开始） text ：句子前 40 字（用于关键词匹配） time ：该句话在音频中的起始秒数（由 TTS WordBoundary 精确计算） 在步骤7中通过 self.wait_for_narration("关键词") 查找 text 包含关键词的条目 步骤5：验证音频并查看同步点 使用脚本 ： scripts/validate_audio.py 功能 读取 audio/audio_info.json 获取音频时长 验证所有音频文件存在且时长正常（>0秒） 更新分镜脚本的"音频生成清单"中的时长列 打印同步点摘要 ：列出每幕的句级同步点及其时间戳 如果缺少音频或时长异常，报错提醒 执行命令 python scripts/validate_audio.py 分镜.md ./audio 输出示例（含同步点摘要） 🎯 同步点摘要（用于 wait_for_narration） ================================================== 第1幕 (8.5s): 0.00s │ "大家好，今天我们来讲解一道经典的平面几何问题" 3.20s │ "证明四点共圆" 4.80s │ "这道题综合运用了切线长定理和双曲线的性质" 第2幕 (15.2s): 0.00s │ "首先，我们来看题目给出的图形" 2.10s │ "三角形 ABC 的内切圆 I" 7.40s │ "三角形内一点 K" 此摘要是步骤7中选择 wait_for_narration() 关键词的依据。 验证失败情况 缺少音频文件 → 报错："缺少第X幕音频文件" 时长为0或异常 → 报错："第X幕音频时长异常，请检查格式" 分镜与音频数量不匹配 → 报错："分镜X幕，音频Y个，数量不匹配" 步骤6：生成 script.py 脚手架 使用模板 ： templates/script_scaffold.py 输出 ： script.py （伪代码框架，由 AI 在步骤7完善） 脚手架核心方法一览 方法 作用 调用位置 calculate_geometry() 几何建模 construct() assert_geometry() 几何验证 + 画布范围 construct() define_elements() 定义 Manim 图形对象 construct() start_scene_with_audio(n) 播放音频 + 记录起始时间 construct() 循环 end_scene_with_audio(d) 自动补齐等待 construct() 循环