--- name: ppt description: 生成 PowerPoint 演示文稿 (.pptx)。当用户要求做汇报 PPT、把材料/会议纪要/方案转为幻灯片、生成演示稿时使用。 --- # PPT 把材料变成可演示的 .pptx。**先定调,再出稿,再验收** —— 不要一口气把整份 deck 丢出去。 ## 资源 - `references/design_principles.md` —— 字号/颜色/层级/留白/字数预算等硬规则,出稿前先翻一遍 - `references/canvas_presets.md` —— 16:9 / 4:3 / 9:16 / A4 等画布尺寸表 - `references/layouts.md` —— 9 种常用版式的 python-pptx 起手代码 + safe area 辅助 (封面/目录/分章/要点/双栏/图表/图片/金句/结尾) - `references/icons.md` —— MSO_SHAPE 图标目录 + unicode 字形表 (替代大色块的轻量装饰) - `scripts/source_to_md.py` —— 可执行,把 PDF/DOCX/PPTX/URL 转成干净 Markdown 再做素材 - `scripts/render_icon.py` —— 可执行,unicode 字形 → 透明 PNG (MSO_SHAPE 覆盖不到时兜底) - `scripts/quality_check.py` —— 可执行,产物 .pptx 出来后跑一遍验收 (含越界 / 文本溢出检测) ## 默认主题 **商务红** —— PRIMARY `#C00000` / SECONDARY `#E15554` / ACCENT `#FFC107`。除非 spec_lock 指定其它配色,layouts.md 起手代码就用这套。其它备选见 `design_principles.md` §2。 ## 两阶段工作流 ### 阶段一: 策略 (Strategist) 产物:`spec_lock.md` —— 整个 deck 的"宪法",执行阶段每生成一页前都要重读。 **八条对齐**(不全部确认完,不开工): 1. **画布**: 16:9 / 4:3 / 9:16 (默认 16:9,见 canvas_presets.md) 2. **页数**: 默认 5-8 页;长报告再加,但每超 1 页就要问一次"这页非加不可吗" 3. **受众**: 领导汇报 / 同行评审 / 大众科普 / 客户 pitch —— 决定信息密度和措辞 4. **风格**: 商务正式 / 学术严谨 / 现代简约 / 极简留白 (默认现代简约) 5. **配色**: 主色 + 辅色 + 强调色,三色封顶。给具体 hex,不要"蓝色系"这种话 6. **字体**: 中文标题/正文,英文标题/正文。Win 默认 微软雅黑 + Arial 7. **图标/插图**: 是否要、风格 (线性/扁平/拟物)、来源 (用户提供 / 不用) 8. **图表**: 数据 ≥ 3 个点的页面默认配图;明确哪几页要图 写入 `spec_lock.md` 后给用户看一眼再继续。**spec_lock 写定后不要再改**,有冲突回头跟用户重新对齐。 ### 阶段二: 执行 (Executor) **逐页生成**,不是一次性 dump 全 deck。每页前先读一次 `spec_lock.md`,然后: 1. 写一个 `run_python` block,用 python-pptx 添加这一页 (载入已有 .pptx,append slide,save) 2. 跑完报这一页的:版式、标题、要点条数、是否含图 3. 用户确认 / 微调后再下一页 **为什么逐页?** 一次性出全 deck 很容易越到后面越糊。逐页能让用户在第 2 页就发现风格不对,而不是看完 8 页才推翻重来。 **例外**: 用户明确说 "你别问,直接全做了" —— 那就一次跑完,但跑完后必须用 `quality_check.py` 验收。 ### 阶段三: 验收 - `python scripts/quality_check.py ` —— 检页数/标题/bullet 条数/文件大小 - 不通过的项,回头 edit 对应页 ## 设计原则 (硬规则) - **每页一个核心信息**: 一页讲一件事,塞两件就拆页 - **bullet ≤ 5 条**: 超过就拆页或改成图表/双栏 - **正文不写完整段落**: 列要点;长句留给演讲者口述 - **数据 ≥ 3 个点应有图表**: 用 matplotlib 生成 .png 嵌入 - **中文标题 ≤ 30 字** / **英文标题 ≤ 12 词** - **配色三色封顶**: 主色 + 辅色 + 强调色,其他都用灰阶 - **少用大色块,多用细线 + 图标 + 留白**: 满铺色块只在封面/分章/结尾克制使用 - **图标走 MSO_SHAPE**: 原生形状可编辑、可缩放;复杂图标走 `render_icon.py` - **Shape 不能越界**: `layouts.md` 的起手代码用 `assert_inside` 在生成时即报错;最终必跑 `quality_check.py` - **字数按预算来**: 写 bullet 前查 `design_principles.md §4.1` 的字数预算表,溢出靠拆条不靠收缩字号 - 详细规则见 `references/design_principles.md` ## 工作目录约定 ``` / ├── source.md # 阶段一: source_to_md.py 转出的素材 ├── spec_lock.md # 阶段一: 八条对齐落定 ├── slides/ │ └── chart_p3.png # 各页用到的图片素材 └── .pptx # 最终产物 (文件名按主题命名,不要 untitled.pptx) ``` ## 反模式 - 用户没给材料就开始硬编内容 - 八条没对齐就跑 python-pptx - 一个 `run_python` 出整 deck (中途改方向就要全推翻) - 跑完不做 `quality_check.py` 就交付 - 起名 `output.pptx` / `untitled.pptx` —— 务必按主题给文件名 - 文字塞满整张幻灯片 —— 留白本身是设计 ## 输出 完成后告诉用户:文件路径、页数、用到的版式列表、是否有未满足的 spec 项。问一句要不要再改。