mcpField
P
ppt-editing-skill

ppt-editing-skill

github.com/minimax-ai文档处理13.7k73 次安装28 周前更新
代码仓库

关于 ppt-editing-skill

通过基于模板的流程编辑 PowerPoint 演示文稿,适合改编现有幻灯片的用户,涵盖结构调整、XML 内容编辑、打包与验证。

主要功能

  1. 01模板分析与幻灯片映射
  2. 02添加、删除和重排幻灯片
  3. 03编辑幻灯片 XML 内容
  4. 04清理并打包演示文稿
  5. 05内容与格式检查

适用场景

  1. 01将新内容改编到现有演示文稿
  2. 02调整模板幻灯片顺序或删除页面
  3. 03替换占位内容并验证输出

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/minimax-ai/skills --skill ppt-editing-skill

安装后在 Claude Code 中输入/ppt-editing-skill确认已加载。

详细介绍

编辑演示文稿

基于模板的工作流

使用现有演示文稿作为模板时:

  1. 复制并分析:

    cp /path/to/user-provided.pptx template.pptx
    python -m markitdown template.pptx > template.md
    

    查看 template.md,了解占位文本和幻灯片结构。

  2. 规划幻灯片映射:为每个内容章节选择一个模板幻灯片。

    ⚠️ 使用多样化的版式——演示文稿单调乏味是常见问题。不要默认使用基本的标题加项目符号幻灯片。积极选用以下版式:

    • 多栏版式(2 栏、3 栏)
    • 图片 + 文本组合
    • 带文字叠加的全幅图片
    • 引言或重点提示幻灯片
    • 章节分隔页
    • 数据/数字重点展示
    • 图标网格或图标 + 文本行

    避免: 每张幻灯片都重复使用相同的文字密集型版式。

    根据内容类型匹配版式风格(例如,关键要点 → 项目符号幻灯片,团队信息 → 多栏版式,用户评价 → 引言幻灯片)。

  3. 解包

  4. 构建演示文稿(自行完成,不要使用子 Agent):

    • 删除不需要的幻灯片(从 <p:sldIdLst> 中移除)
    • 复制要重复使用的幻灯片(add_slide.py)
    • 在 <p:sldIdLst> 中重新排列幻灯片
    • 在第 5 步之前完成所有结构性更改
  5. 编辑内容:更新每个 slide{N}.xml 中的文本。 如有可用的子 Agent,请在此处使用——幻灯片是独立的 XML 文件,因此子 Agent 可以并行编辑。

  6. 清理

  7. 打包

输出结构

将用户提供的文件复制到当前工作目录中的 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 工具”
  • 以下格式规则和常见问题

对于每张幻灯片:

  1. 阅读幻灯片的 XML
  2. 找出所有占位内容——文本、图片、图表、图标、说明文字
  3. 将每个占位内容替换为最终内容

使用 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 &#x201C;Agreement&#x201D;</a:t>
字符名称UnicodeXML 实体
"左双引号U+201C&#x201C;
"右双引号U+201D&#x201D;
'左单引号U+2018&#x2018;
'右单引号U+2019&#x2019;
其他
  • 空白字符:对带有前导或尾随空格的 <a:t> 使用 xml:space="preserve"
  • XML 解析:使用 defusedxml.minidom,不要使用 xml.etree.ElementTree(会破坏命名空间)

评论

支持 Markdown