ppt-master-cn(中文演示文稿 · 新建/理解/修订三合一)
定位
单源 DSL 同时驱动 HTML 实时预览与 OOXML 导出,python-pptx 仅作序列化器,排版自由度全在 DSL,因此杜绝模板感与「丑」导出。一份技能覆盖 create(从零做)/ understand(读懂旧 PPT)/ revise(原地改) 三模式,共享 15 条排版基因与 10 项 deck 硬门禁。与 SkillHub 社区版 ppt-master 无关。
适用 / 不适用(触发契约)
- 适用:做 / 生成 / 排版 PPT、文档变幻灯片、可视化汇报;理解 / 拆解 / 读懂 PPT 结构;改 PPT、修订、换版式、套配色、优化排版;附着 pptx / pdf / md 要读懂或修订。
- 不适用(负意图,转其它技能):公众号长文排版(墨排 mo-pai)、纯英文国际化设计(Gamma)、图像生成、网页、Excel、Word 报告、PDF/Word 格式转换。
第 0 步:判定 mode(内部分流,必跑)
运行 python core/scripts/triggers.py '<用户原话>' → 得到 mode ∈ {create, understand, revise}。
路由优先级:负意图 > 修订线索 > 理解线索 > 新建线索。
手工判定兜底:要新做 → create;只读懂不改动 → understand;附着现成 pptx + 改 → revise。
分支 A:create(新建)
- 收齐输入:主题 / 大纲 / 源文档;缺则追问关键约束(页数 / 受众 / 风格)。
- 内容策略:读
references/create-playbook.md的叙事导演 + 风格矩阵 + 页数→骨架映射,产出结构化大纲。仅此步读该文件。 - 写 DSL:大纲 + 选定基因 → 写
core/references/dsl-spec.md规定的 DSL(布局 / 字阶 / 配色全部显式声明)。 - 预览:
python core/scripts/preview.py <dsl>起本地预览。 - 门禁(必跑):
python core/scripts/bench.py <dsl>;任一硬门禁不过 → 按core/references/visual-qc-checklist.md自动修复或阻断。 - 导出:
python core/scripts/dsl_compile.py <dsl> <out.pptx>(python-pptx 仅序列化)。 - 交付:返回 pptx + 预览链接 + bench_report.json。
分支 B:understand(理解)
- 解析:
python core/scripts/understand.py --pptx <file> --dsl <out.yaml> --report <report.md>把 pptx 反向解析为 DSL 中间表示 + 结构解读;pdf / md 暂走文本抽取。 - 解读:按
references/understand-playbook.md输出三块——讲了什么 / 结构树 / 可改点(版式 / 数据 / 排版)。 - 不导出:仅返回文本解读与 DSL;除非用户明确要求转 create(重制)或 revise(精修)。
分支 C:revise(修订)
- 判定后端:
python core/scripts/revise_com.py --pptx <f> --patch <p> --out <o>先探测本地 PowerPoint;可用则 COM 原地精修,否则自动降级revise.py。 - 原地精修(优先):COM 可用 → 按 patch 原地改指定 shape,保留动画 / 母版;跑 bench 门禁。
- 降级重编译(无 COM):
revise.py解析 pptx→DSL→应用 patch→dsl_compile.py重导;明示特效可能丢失。 - 交付:返回 pptx + 门禁报告 + (降级时)特效风险说明。
质量门禁(三模式共用,deck 级 10 项硬 + WYSIWYG 后置硬)
| 所属标准 | 门禁项 | 阈值 | 级别 |
|---|---|---|---|
| 无模板感 | layout_homogeneity(同质页比例) | < 0.15 | 硬 |
| 专业中文排版 | punctuation_errors(半角标点) | = 0 | 硬 |
| 专业中文排版 | overflow_blocks(估算溢出块) | = 0 | 硬 |
| 专业中文排版 | emoji_consistency(离群 emoji) | = 0 | 硬(M8) |
| 专业中文排版 | numbering_consistency(序号系统混用) | ≤ 1 | 硬(M8) |
| 零安装 | missing_fonts(白名单外字体) | = 0 | 硬 |
| 零安装 | external_calls(外部网络调用) | = 0 | 硬 |
| 强质量门禁 | gate_integrity(静默放过门禁) | = 0 | 硬 |
| 强质量门禁 | empty_blocks(空置文本块) | = 0 | 硬 |
| 强质量门禁 | unverified_data(源外量化断言) | = 0 | 硬 |
| 所见即所得 | wysiwyg(HTML↔OOXML 偏差) | < 0.03 | 硬(导出后后置) |
> 另有 package 级硬门禁 gene_count ≥ 12(可复用基因库下限)+ 软门禁 reuse_success ≥ 0.95。
边界(红线)
- 数据未核对 → 硬阻断(禁编造)。
- 无头渲染缺失 → WYSIWYG 降级为指标比对(软告警)。
- 反向解析为确定性(python-pptx 读 XML),不依赖 PowerPoint COM。
- COM 路径依赖本机 Office + pywin32,当前未实测;无则走可测降级路径并明示特效风险。
资源索引(严格按需打开)
references/create-playbook.md:仅 create 第 2 步(内容策略)打开。references/understand-playbook.md:仅 understand 第 2 步(输出框架)打开。references/revise-playbook.md:仅 revise 第 1–3 步(指令映射 / 降级)打开。core/references/dsl-spec.md:写 DSL / 读反向解析结果时打开。core/references/typography-genes.md:仅当需确认字号 / 行距 / 标点时打开。core/references/visual-qc-checklist.md:门禁失败修复时打开。core/templates/:基因 / 字体资源。core/scripts/:triggers.py(mode 分流)、bench.py(门禁)、preview.py(预览)、dsl_compile.py(导出)、understand.py / revise.py / revise_com.py(反向与修订)。