# PPT 生成硬约束规范（Agent 版）

> 面向 PPT 生成 Agent 的可执行约束。规则等级：**MUST**（违反=失败）/ **SHOULD**（违反=扣分）/ **MAY**（建议）。
> 每条规则带唯一 ID，便于自动校验与追溯。

---

## 0. 决策流程（Agent 入口）

```
输入需求
  ↓
[STEP 1] 选风格（唯一）
  · 融资/商业/严肃汇报         → STYLE=business
  · 人文/编辑/发布会/杂志感    → STYLE=magazine
  · 科技/数据/极简/信息驱动    → STYLE=swiss
  ↓
[STEP 2] 选输出格式（唯一）
  · pptx / html / pdf
  ↓
[STEP 3] 加载对应约束（本文档 §3 + §4/§5/§6 其一）
  ↓
[STEP 4] 每页选版式 → 填内容 → 自校验（§7）→ 输出
```

**G-01 [MUST]** 一份 PPT 内 `STYLE` 与 `FORMAT` 全程唯一，禁止跨风格混用类名、字体、色号。
**G-02 [MUST]** 输入信息缺失时用 `[待补充:字段名]` 占位，**禁止编造数据、来源、人名、图片**。
**G-03 [MUST]** 所有数据须来自输入或明确的引用来源，图表底部标注 `来源：xxx`。

---

## 1. Design Tokens（跨风格通用）

### 1.1 Spacing（8pt grid，只允许枚举值）
```
--sp-1 = 4px    --sp-2 = 8px    --sp-3 = 12px
--sp-4 = 16px   --sp-5 = 24px   --sp-6 = 32px
--sp-7 = 48px   --sp-8 = 64px   --sp-9 = 96px
```
**T-01 [MUST]** 所有 margin/padding/gap 只能从上表取值，不允许写 `13px` `27px` 等任意值。

### 1.2 Type Scale（离散字号）

| Token | pt (PPTX) | px (HTML) | 用途 |
|---|---|---|---|
| `display` | 54 | 72 | 封面主标 |
| `h1` | 40 | 52 | 章节大标 |
| `h2` | 28 | 36 | 段落标题 |
| `h3` | 20 | 26 | 卡片标题 |
| `body` | 14 | 18 | 正文（**最小可读**） |
| `caption` | 12 | 14 | 标签/注释（**投屏下限**） |
| `metric` | 32 | 44 | 数据数字 |

**T-02 [MUST]** 正文 ≥ `body`，图表/图注 ≥ `caption`。任何文本禁止小于 `caption`。
**T-03 [MUST]** 一页内字号种类 ≤ 4 个 token。

### 1.3 Grid & 安全区
**T-04 [MUST]** 页面统一 12 栅格；gutter = `--sp-4`；外边距 = `--sp-7`。
**T-05 [MUST]** 底部预留 `--sp-8`（64px）安全区，任何内容不得进入。
**T-06 [MUST]** 页面比例默认 16:9；4:3 / 21:9 需在输入中显式声明。

---

## 2. 通用硬约束（所有风格适用）

### 2.1 信息密度
**C-01 [MUST]** 单页正文 ≤ 60 汉字 或 ≤ 100 英文单词。
**C-02 [MUST]** 单页核心信息 = 1；副信息 ≤ 3。
**C-03 [SHOULD]** 数据点 3–6 个/页；> 6 个必须拆页或改表格。
**C-04 [MUST]** 一页内字体家族 ≤ 2 种；主要色 ≤ 3 种（主色/次色/辅色）。

### 2.2 对齐与排版
**C-05 [MUST]** 所有元素左对齐（默认）或中心对齐（封面/引用），**同页不混用**。
**C-06 [MUST]** 左右轴线一致：所有标题/正文起点 x 坐标相同。
**C-07 [MUST]** 行高 1.4–1.6；段间距 ≤ 行高 × 0.8。
**C-08 [SHOULD]** 中英文混排：中英之间加半角空格；数字用比例字体等宽显示（`font-variant-numeric: tabular-nums`）。
**C-09 [MUST]** 列表格式统一：全部带句号或全部不带；同级项目符号一致。

### 2.3 可访问性
**C-10 [MUST]** 正文对比度 ≥ 4.5:1；大标题（≥ `h2`）≥ 3:1（WCAG AA）。
**C-11 [MUST]** 图表相邻色系 Hue 差 ≥ 30°，或差异用形状/纹理辅助表达。

### 2.4 图片
**I-01 [MUST]** 比例只从枚举取：`1:1 / 4:3 / 3:2 / 16:9 / 16:10 / 21:9`。同组图片比例一致。
**I-02 [MUST]** 单图源 ≥ 1600px 宽；单图体积 ≤ 500KB；单页图片总量 ≤ 2MB。
**I-03 [MUST]** 图片不得拉伸变形（`object-fit: cover` 或 `contain`）。
**I-04 [MUST]** 缺失图片用**同尺寸占位色块** + 标签 `[图:描述]`，**禁止 AI 生成假头像/假 logo**。
**I-05 [SHOULD]** 敏感信息（姓名、电话、内部数据）遮挡处理。

### 2.5 图表
**V-01 [MUST]** 柱/条形图 Y 轴从 0 开始；如需截断必须显式画断轴符号。
**V-02 [MUST]** 图表标题 + 单位 + 数据来源三要素齐全。
**V-03 [MUST]** 数字格式统一：千分位逗号、百分号位置、小数位数一页内一致。
**V-04 [SHOULD]** 图例数量 ≤ 6；> 6 项拆图或改表格。
**V-05 [MUST]** 禁用 3D 图表、饼图 > 6 片、双 Y 轴（除非输入明确要求）。

### 2.6 通用禁忌
**X-01 [MUST]** 禁止：过度阴影（blur > 8px / opacity > 0.2）、渐变背景（除封面主图）、毛玻璃、荧光色、emoji 作装饰。
**X-02 [MUST]** 禁止：任意字号（未在 Type Scale 中）、任意间距（未在 Spacing 中）、任意色号（未在主题色板中）。
**X-03 [MUST]** 禁止：占位符（`Lorem ipsum` / `xxx公司` / `[必填]`）出现在最终输出。

---

## 3. 风格 A · Business（融资/商业路演）

### 3.1 色板（固定）
```css
--brand-primary: #1B3A6B;   /* 藏青，主色：标题/线条/图表主系列/横幅 */
--brand-secondary: #40AF6A; /* 绿色，仅用于图表次系列 */
--paper: #FFFFFF;           /* 内容页背景 */
--ink: #1F2937;             /* 正文文字 */
--border: #E5E7EB;           /* 分隔线/表格边框 */
--zebra: #F5F7FA;           /* 表格斑马纹 */
```
**B-01 [MUST]** 内容页背景 = `--paper`（纯白），禁止深色底。
**B-02 [MUST]** 主色仅一种；次色（绿）**只允许出现在图表次要数据系列**。
**B-03 [MAY]** 用户可用自定义品牌色替换 `--brand-primary`，但结构不变。

### 3.2 字体（中文默认）
- 中文标题+正文：`"Source Han Serif SC", "STKaiti", serif`
- 英文/数字：`Arial, "Helvetica Neue", sans-serif`
- 强调加粗：同族 Bold；无 Bold 则回退 `"Microsoft YaHei Bold"`

**B-04 [MUST]** 中英文字体分离配置，禁止用中文字体渲染英文。
**B-05 [MUST]** 单位统一：PPTX 用 `pt`，HTML 用 `px`（不用 `vw`）。

### 3.3 版式元素
**B-06 [MUST]** 每页右上角固定 logo（高 = 32px / 12pt）；每页标题下方 2px `--brand-primary` 分隔线。
**B-07 [SHOULD]** 章节收尾可用底部全宽横幅：高 = `--sp-8`，底色 `--brand-primary`，文字白色 `h3`。
**B-08 [MUST]** 无过渡页、无水印、无"严格保密"页脚。

### 3.4 标准章节流（默认 14 页，可按输入裁剪）
1 封面 · 2 投资亮点 · 3 市场机遇 · 4 行业格局 · 5 公司定位 · 6 核心竞争力 · 7 产品组合 · 8 技术差异化 · 9 团队 · 10 财务预测 · 11 路线图 · 12 融资方案 · 13 附录 · 14 免责声明

**B-09 [MUST]** 团队页必须为真实照片（1:1），缺失则占位色块；**禁止 AI 生成人脸**。

---

## 4. 风格 B · Magazine（电子杂志）

### 4.1 色板（5 选 1，禁止自定义 hex）
`ink-classic` · `indigo-porcelain` · `forest-ink` · `kraft` · `dune`
（具体色号见 `themes.md`；一份 deck 只用一套）

**M-01 [MUST]** 主题色一次锁定，全 deck 不切换。
**M-02 [MUST]** 用户提任意 hex 时委婉拒绝，展示 5 套让选。

### 4.2 字体
- 标题：`"Playfair Display", "Noto Serif SC", serif`
- 正文：`"Noto Sans SC", "Inter", sans-serif`
- 元数据：`"JetBrains Mono", monospace`

**M-03 [MUST]** 衬线+非衬线+等宽最多同时 3 种，且用途固定不换。

### 4.3 版式（10 种，编号 L1–L10）
  封面 / 幕封 / 数据大字报 / 左文右图 / 图片网格 / 双列 pipeline / 问题页 / 大引用 / Before-After / 图文混排

  **M-04 [MUST]** 每 `<section>` 声明 `data-layout="L1"…"L10"`；禁止自造版式。
  **M-05 [SHOULD]** 图片网格统一高度（推荐 `26vh`），比例一致。

---

## 5. 风格 C · Swiss（瑞士国际主义）

### 5.1 色板（4 选 1 高反差强调色）
`IKB / lemon-yellow / lemon-green / safety-orange` + 灰阶

**S-01 [MUST]** 主强调色只选 1 种，全 deck 不换。

### 5.2 字体（全无衬线）
- 全部：`"Inter", "Helvetica Neue", "Noto Sans SC", sans-serif`
- 字重阶梯（越大越细）：

| 字号 | 字重 |
|---|---|
| ≥ `display` | 200 |
| `h1` | 200–300 |
| `h2`–`h3` | 300–400 |
| `body` | 400–500 |
| `caption` | 500–600 |

**S-02 [MUST]** 同页内：字号越小的元素字重必须 ≥ 字号越大的元素。
**S-03 [MUST]** 全部直角（`border-radius: 0`），禁止圆角、阴影、渐变。

### 5.3 版式（22 个注册版式 S01–S22）
**S-04 [MUST]** 每 `<section>` 声明 `data-layout="Sxx"`；禁止自造版式。
**S-05 [MUST]** ≥ 7 页 deck 使用 ≥ 6 种不同 Sxx；≥ 10 页 使用 ≥ 8 种。
**S-06 [MUST]** SVG 只画几何图形，禁止在 SVG 内嵌文字（用 HTML 覆盖层）。

### 5.4 中文标题字号分档
| 形态 | 字号（vw+vh 二取小） |
|---|---|
| 1 行 ≤ 8 字 | `min(6.4vw, 11.2vh)` |
| 2 行 每行 ≤ 8 字 | `min(5.8vw, 10.2vh)` |
| 2 行 9–12 字 | `min(5.2vw, 9.2vh)` |
| ≥ 3 行 | 先删文案；不得已 `min(4.6vw, 8.2vh)` |

---

## 6. 主题节奏（仅 Magazine / Swiss）

每 `<section>` 必须标注 `light` / `dark` / `hero light` / `hero dark`。

**R-01 [MUST]** 连续同主题页数 ≤ 2。
**R-02 [MUST]** deck ≥ 8 页时，`hero light` 与 `hero dark` 各 ≥ 1。
**R-03 [SHOULD]** 每 3–4 页出现 1 个 hero 页。

---

## 7. Agent 自校验清单（生成后必跑）

自动校验（脚本可执行）：

```yaml
- id: T-01  check: all(spacing ∈ SPACING_TOKENS)
- id: T-02  check: min(font_size) >= caption_size
- id: T-03  check: distinct(font_sizes_per_page) <= 4
- id: C-01  check: body_chars_per_page <= 60
- id: C-04  check: distinct(font_families) <= 2 AND distinct(colors) <= 3
- id: C-10  check: contrast(text, bg) >= 4.5
- id: I-01  check: image_ratio ∈ RATIO_ENUM
- id: I-04  check: no_ai_generated_face AND no_ai_generated_logo
- id: V-01  check: bar_chart.y_axis.start == 0 OR has_break_marker
- id: X-03  check: no_placeholder_pattern(["Lorem", "xxx", "[必填]"])
- id: R-01  check: max_consecutive_same_theme <= 2
```

人工确认（可选）：
- 数据准确性 · 图片版权 · 品牌授权 · 文案语气

---

## 8. Fallback 规则

| 输入缺失 | 处理 |
|---|---|
| 图片缺失 | 同尺寸占位块 + `[图:说明]`；禁止改用 AI 生成 |
| 数据缺失 | 数字位置写 `[待补充]`；禁止编造 |
| 字段少于版式要求（如 6 宫格给 4 项） | 降级到承载数目匹配的版式，不留空槽 |
| 字体加载失败 | 走 fallback 链，不允许 UI 显示"字体缺失" |
| 内容超长无法压缩 | 拆页，禁止缩小字号突破 T-02 |

---

## 附：规则 ID 索引

- `G-*` 全局
- `T-*` Token（字号/间距/网格）
- `C-*` 通用内容/排版
- `I-*` 图片
- `V-*` 图表
- `X-*` 禁忌
- `B-*` Business 风格
- `M-*` Magazine 风格
- `S-*` Swiss 风格
- `R-*` 主题节奏
