关于 ppt-editing-skill
通过基于模板的流程编辑 PowerPoint 演示文稿,适合改编现有幻灯片的用户,涵盖结构调整、XML 内容编辑、打包与验证。
主要功能
- 01模板分析与幻灯片映射
- 02添加、删除和重排幻灯片
- 03编辑幻灯片 XML 内容
- 04清理并打包演示文稿
- 05内容与格式检查
适用场景
- 01将新内容改编到现有演示文稿
- 02调整模板幻灯片顺序或删除页面
- 03替换占位内容并验证输出
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ minimax-ai/ skills --skill ppt-editing-skill安装后在 Claude Code 中输入/ppt-editing-skill确认已加载。
详细介绍
编辑演示文稿
基于模板的工作流
使用现有演示文稿作为模板时:
-
复制并分析:
cp /path/to/user-provided.pptx template.pptx python -m markitdown template.pptx > template.md查看
template.md,了解占位文本和幻灯片结构。 -
规划幻灯片映射:为每个内容章节选择一个模板幻灯片。
⚠️ 使用多样化的版式——演示文稿单调乏味是常见问题。不要默认使用基本的标题加项目符号幻灯片。积极选用以下版式:
- 多栏版式(2 栏、3 栏)
- 图片 + 文本组合
- 带文字叠加的全幅图片
- 引言或重点提示幻灯片
- 章节分隔页
- 数据/数字重点展示
- 图标网格或图标 + 文本行
避免: 每张幻灯片都重复使用相同的文字密集型版式。
根据内容类型匹配版式风格(例如,关键要点 → 项目符号幻灯片,团队信息 → 多栏版式,用户评价 → 引言幻灯片)。
-
解包
-
构建演示文稿(自行完成,不要使用子 Agent):
- 删除不需要的幻灯片(从
<p:sldIdLst>中移除) - 复制要重复使用的幻灯片(
add_slide.py) - 在
<p:sldIdLst>中重新排列幻灯片 - 在第 5 步之前完成所有结构性更改
- 删除不需要的幻灯片(从
-
编辑内容:更新每个
slide{N}.xml中的文本。 如有可用的子 Agent,请在此处使用——幻灯片是独立的 XML 文件,因此子 Agent 可以并行编辑。 -
清理
-
打包
输出结构
将用户提供的文件复制到当前工作目录中的 template.pptx。这样既能保留原始文件,也能为所有下游脚本提供一个固定名称。
cp /path/to/user-provided.pptx template.pptx
./
├── template.pptx # Copy of user-provided file (never modified)
├── template.md # markitdown extraction
├── unpacked/ # Editable XML tree
└── edited.pptx # Final repacked deck
最低交付要求:edited.pptx。
脚本
| 脚本 | 用途 |
|---|---|
unpack.py | 解压并美化 PPTX |
add_slide.py | 复制幻灯片或根据版式创建幻灯片 |
clean.py | 删除孤立文件 |
pack.py | 重新打包并验证 |
删除不在 <p:sldIdLst> 中的幻灯片、未引用的媒体文件和孤立的 rels。
始终先写入 /tmp/,然后再复制到最终路径。Python 的 zipfile 模块在内部使用 seek,在某些卷挂载(例如 Docker 绑定挂载)上会失败。写入本地临时路径可以避免此问题。
验证、修复、精简 XML,并重新编码智能引号。
幻灯片操作
幻灯片顺序位于 ppt/presentation.xml → <p:sldIdLst>。
重新排序:重新排列 <p:sldId> 元素。
删除:移除 <p:sldId>,然后运行 clean.py。
添加:使用 add_slide.py。切勿手动复制幻灯片文件——此脚本会处理备注引用、Content_Types.xml 和关系 ID,这些都是手动复制时容易遗漏的。
编辑内容
子 Agent: 如有可用的子 Agent,请在此处使用(完成第 4 步后)。每张幻灯片都是独立的 XML 文件,因此子 Agent 可以并行编辑。向子 Agent 提示时,请注明:
- 要编辑的幻灯片文件路径
- “所有更改均使用 Edit 工具”
- 以下格式规则和常见问题
对于每张幻灯片:
- 阅读幻灯片的 XML
- 找出所有占位内容——文本、图片、图表、图标、说明文字
- 将每个占位内容替换为最终内容
使用 Edit 工具,不要使用 sed 或 Python 脚本。 Edit 工具要求明确指定要替换的内容及其位置,因此可靠性更高。
格式规则
- 所有标题、副标题和行内标签均使用粗体:在
<a:rPr>上使用b="1"。包括:- 幻灯片标题
- 幻灯片内的章节标题
- 行首的行内标签(例如:“状态:”“说明:”)
- 切勿使用 Unicode 项目符号(•):使用
<a:buChar>或<a:buAutoNum>设置正确的列表格式 - 项目符号保持一致:让项目符号继承版式设置。仅指定
<a:buChar>或<a:buNone>。
常见问题
模板调整
当源内容的条目少于模板时:
- 彻底删除多余元素(图片、形状、文本框),不要只清除文本
- 清除文本内容后,检查是否有孤立的视觉元素
- 使用
markitdown执行内容 QA,检查条目数量是否匹配
将文本替换为长度不同的内容时:
- 替换内容较短:通常没有问题
- 替换内容较长:可能溢出或意外换行
- 文本更改后,使用
markitdown进行验证 - 考虑截断内容或拆分内容,以适应模板的设计限制
模板插槽 ≠ 源条目:如果模板中有 4 位团队成员,而源内容中有 3 位用户,请删除第 4 位成员的整个组(图片 + 文本框),而不只是删除文本。
多条目内容
如果源内容包含多个条目(编号列表、多个章节),请为每个条目创建单独的 <a:p> 元素——绝不要将所有条目合并成一个字符串。
❌ 错误 — 所有条目都放在一个段落中:
<a:p>
<a:r><a:rPr .../><a:t>Step 1: Do the first thing. Step 2: Do the second thing.</a:t></a:r>
</a:p>
✅ 正确 — 使用加粗标题和独立段落:
<a:p>
<a:pPr algn="l"><a:lnSpc><a:spcPts val="3919"/></a:lnSpc></a:pPr>
<a:r><a:rPr lang="en-US" sz="2799" b="1" .../><a:t>Step 1</a:t></a:r>
</a:p>
<a:p>
<a:pPr algn="l"><a:lnSpc><a:spcPts val="3919"/></a:lnSpc></a:pPr>
<a:r><a:rPr lang="en-US" sz="2799" .../><a:t>Do the first thing.</a:t></a:r>
</a:p>
<a:p>
<a:pPr algn="l"><a:lnSpc><a:spcPts val="3919"/></a:lnSpc></a:pPr>
<a:r><a:rPr lang="en-US" sz="2799" b="1" .../><a:t>Step 2</a:t></a:r>
</a:p>
从原始段落复制 <a:pPr>,以保留行距。标题使用 b="1"。
智能引号
由 unpack/pack 自动处理。但 Edit 工具会将智能引号转换为 ASCII 字符。
添加带引号的新文本时,请使用 XML 实体:
<a:t>the “Agreement”</a:t>
| 字符 | 名称 | Unicode | XML 实体 |
|---|---|---|---|
" | 左双引号 | U+201C | “ |
" | 右双引号 | U+201D | ” |
' | 左单引号 | U+2018 | ‘ |
' | 右单引号 | U+2019 | ’ |
其他
- 空白字符:对带有前导或尾随空格的
<a:t>使用xml:space="preserve" - XML 解析:使用
defusedxml.minidom,不要使用xml.etree.ElementTree(会破坏命名空间)