---
name: pptx
description: "当涉及到 .pptx 文件的任何操作时使用此技能——无论是作为输入、输出还是两者兼有。包括：创建幻灯片、演示文稿或路演材料；读取、解析或提取任何 .pptx 文件中的文本（即使提取的内容将用于其他地方，如邮件或摘要）；编辑、修改或更新现有演示文稿；合并或拆分幻灯片文件；处理模板、布局、演讲者备注或批注。当用户提到“演示文稿”、”幻灯片“、”PPT“或引用 .pptx 文件名时触发，无论他们之后打算如何使用内容。如果需要打开、创建或操作 .pptx 文件，就使用此技能。"
license: Proprietary. LICENSE.txt has complete terms
metadata:
  builtin_skill_version: "1.1"
---

> **重要：** 所有 `scripts/` 路径都相对于此技能目录。
> 运行方式：`cd {this_skill_dir} && python scripts/...`
> 或使用 `execute_shell_command` 的 `cwd` 参数。

# PPTX 技能

## 前置依赖

- **markitdown[pptx]**：从演示文稿中提取文本
- **Pillow**：生成缩略图网格
- **pptxgenjs**（`npm install -g pptxgenjs`）：从零开始创建演示文稿
- **LibreOffice**（`soffice`）：演示文稿转 PDF
- **pdftoppm**（poppler-utils）：PDF 转图片，用于缩略图/视觉工作流
- 如果 `pdftoppm` 不可用，可使用 Python 备选方案 `pdf2image`。
- 在 Windows 上，依赖项必须已安装并在 `PATH` 中可用；如果缺失，报告依赖问题并停止（不要反复重试）。

## 快速参考

| 任务 | 指南 |
|------|------|
| 读取/分析内容 | `python -m markitdown presentation.pptx` |
| 编辑或基于模板创建 | 阅读 [editing.md](editing.md) |
| 从零开始创建 | 阅读 [pptxgenjs.md](pptxgenjs.md) |

---

## 读取内容

```bash
# 文本提取
python -m markitdown presentation.pptx

# 视觉概览
python scripts/thumbnail.py presentation.pptx

# 原始 XML
python scripts/office/unpack.py presentation.pptx unpacked/
```

---

## 编辑工作流

**阅读 [editing.md](editing.md) 了解完整细节。**

1. 使用 `thumbnail.py` 分析模板
2. 解包 → 操作幻灯片 → 编辑内容 → 清理 → 打包

---

## 从零开始创建

**阅读 [pptxgenjs.md](pptxgenjs.md) 了解完整细节。**

当没有模板或参考演示文稿可用时使用。

---

## 设计思路

**不要创建无聊的幻灯片。** 白底加纯文本要点无法打动任何人。为每张幻灯片考虑以下设计思路。

### 开始之前

- **选择大胆的、与内容相关的配色方案**：配色应该让人觉得是专门为这个主题设计的。如果把你的颜色换到一个完全不同的演示文稿中依然"适用"，说明你的选择还不够有针对性。
- **主次分明**：一种颜色应占主导（60-70% 视觉权重），搭配 1-2 种辅助色调和一种鲜明的点缀色。切勿让所有颜色等量分配。
- **明暗对比**：标题页和结尾页用深色背景，内容页用浅色（"三明治"结构）。或者全程使用深色背景营造高端感。
- **坚持一个视觉主题**：选择一个独特元素并反复使用——圆角图片框、彩色圆圈中的图标、粗单边边框。将其贯穿每张幻灯片。

### 配色方案

选择与主题匹配的颜色——不要默认使用通用蓝色。以下配色方案供参考：

| 主题 | 主色 | 辅助色 | 点缀色 |
|------|------|--------|--------|
| **Midnight Executive** | `1E2761` (navy) | `CADCFC` (ice blue) | `FFFFFF` (white) |
| **Forest & Moss** | `2C5F2D` (forest) | `97BC62` (moss) | `F5F5F5` (cream) |
| **Coral Energy** | `F96167` (coral) | `F9E795` (gold) | `2F3C7E` (navy) |
| **Warm Terracotta** | `B85042` (terracotta) | `E7E8D1` (sand) | `A7BEAE` (sage) |
| **Ocean Gradient** | `065A82` (deep blue) | `1C7293` (teal) | `21295C` (midnight) |
| **Charcoal Minimal** | `36454F` (charcoal) | `F2F2F2` (off-white) | `212121` (black) |
| **Teal Trust** | `028090` (teal) | `00A896` (seafoam) | `02C39A` (mint) |
| **Berry & Cream** | `6D2E46` (berry) | `A26769` (dusty rose) | `ECE2D0` (cream) |
| **Sage Calm** | `84B59F` (sage) | `69A297` (eucalyptus) | `50808E` (slate) |
| **Cherry Bold** | `990011` (cherry) | `FCF6F5` (off-white) | `2F3C7E` (navy) |

### 每张幻灯片

**每张幻灯片都需要视觉元素**——图片、图表、图标或形状。纯文本幻灯片令人印象淡薄。

**布局选项：**
- 两栏布局（左侧文字，右侧插图）
- 图标 + 文字行（彩色圆圈中的图标、粗体标题、下方描述）
- 2x2 或 2x3 网格（一侧图片，另一侧内容块网格）
- 半出血图片（铺满左侧或右侧）加内容叠加

**数据展示：**
- 大数字突出显示（60-72pt 大数字搭配下方小标签）
- 对比列（前后对比、优缺点、并排选项）
- 时间线或流程图（编号步骤、箭头）

**视觉润色：**
- 章节标题旁放置小彩色圆圈中的图标
- 关键数据或标语使用斜体点缀文字

### 字体排版

**选择有趣的字体搭配**——不要默认使用 Arial。选择一个有个性的标题字体，搭配一个简洁的正文字体。

| 标题字体 | 正文字体 |
|----------|----------|
| Georgia | Calibri |
| Arial Black | Arial |
| Calibri | Calibri Light |
| Cambria | Calibri |
| Trebuchet MS | Calibri |
| Impact | Arial |
| Palatino | Garamond |
| Consolas | Calibri |

| 元素 | 尺寸 |
|------|------|
| 幻灯片标题 | 36-44pt 粗体 |
| 章节标题 | 20-24pt 粗体 |
| 正文 | 14-16pt |
| 说明文字 | 10-12pt 柔和色 |

### 间距

- 最小边距 0.5"
- 内容块之间 0.3-0.5"
- 留出呼吸空间——不要填满每一寸

### 避免（常见错误）

- **不要重复相同的布局**——在不同幻灯片之间变换列、卡片和标注样式
- **不要居中正文文本**——段落和列表左对齐；仅标题居中
- **不要忽视大小对比**——标题需要 36pt+ 才能与 14-16pt 正文区分开
- **不要默认使用蓝色**——选择能反映特定主题的颜色
- **不要随意混用间距**——选择 0.3" 或 0.5" 的间距并保持一致
- **不要只设计一张幻灯片而其余留白**——要么全部精心设计，要么全程保持简约
- **不要创建纯文本幻灯片**——添加图片、图标、图表或视觉元素；避免纯标题加要点
- **不要忘记文本框内边距**——当将线条或形状与文本边缘对齐时，设置文本框的 `margin: 0` 或偏移形状以补偿内边距
- **不要使用低对比度元素**——图标和文字都需要与背景有强烈对比；避免浅色背景上的浅色文字或深色背景上的深色文字
- **绝对不要在标题下使用强调线**——这是 AI 生成幻灯片的典型标志；改用留白或背景色

---

## 质量检查（必须执行）

**假设存在问题，你的任务就是找到它们。**

你的首次渲染几乎不会完全正确。将质量检查视为找 Bug 的过程，而非确认步骤。如果第一次检查就零问题，说明你检查得不够仔细。

### 内容检查

```bash
python -m markitdown output.pptx
```

检查是否有遗漏内容、错别字、顺序错误。

**使用模板时，检查是否有残留的占位符文本：**

```bash
python -m markitdown output.pptx | grep -iE "xxxx|lorem|ipsum|this.*(page|slide).*layout"
```

如果 grep 返回结果，修复后再宣布完成。

### 视觉检查

**⚠️ 使用子代理**——即使只有 2-3 张幻灯片。你一直盯着代码看，会看到你期望看到的而非实际的内容。子代理有全新的视角。

将幻灯片转换为图片（参见[转换为图片](#转换为图片)），然后使用以下提示：

```
视觉检查这些幻灯片。假设存在问题——找到它们。

检查以下方面：
- 元素重叠（文字穿过形状、线条穿过文字、元素堆叠）
- 文本溢出或在边缘/框边界处被截断
- 为单行文本定位的装饰线，但标题换成了两行
- 来源引用或页脚与上方内容冲突
- 元素间距过小（< 0.3" 间隙）或卡片/区域几乎相接
- 间距不均（某处大面积留白，另一处过于紧凑）
- 距幻灯片边缘的边距不足（< 0.5"）
- 列或类似元素未一致对齐
- 低对比度文字（如浅灰色文字在奶油色背景上）
- 低对比度图标（如深色图标在深色背景上且没有对比色圆圈）
- 文本框过窄导致过度换行
- 残留的占位符内容

对每张幻灯片列出问题或关注点，即使是小问题也要列出。

读取并分析这些图片：
1. /path/to/slide-01.jpg（预期：[简要描述]）
2. /path/to/slide-02.jpg（预期：[简要描述]）

报告发现的所有问题，包括轻微问题。
```

### 验证循环

1. 生成幻灯片 → 转换为图片 → 检查
2. **列出发现的问题**（如果没发现问题，用更严格的标准再检查一遍）
3. 修复问题
4. **重新验证受影响的幻灯片**——一个修复往往会引发另一个问题
5. 重复直到完整检查一遍不再发现新问题

**在完成至少一个修复-验证循环之前，不要宣布成功。**

---

## 转换为图片

将演示文稿转换为单独的幻灯片图片以进行视觉检查：

```bash
python scripts/office/soffice.py --headless --convert-to pdf output.pptx
pdftoppm -jpeg -r 150 output.pdf slide
```

这将创建 `slide-01.jpg`、`slide-02.jpg` 等文件。

修复后重新渲染特定幻灯片：

```bash
pdftoppm -jpeg -r 150 -f N -l N output.pdf slide-fixed
```
