| name | pptx |
| description | 演示文稿创建、编辑和分析。当 Claude 需要处理演示文稿(.pptx 文件)时使用:(1)创建新演示文稿,(2)修改或编辑内容,(3)处理布局,(4)添加注释或演讲者备注,或任何其他演示文稿任务 |
| license | 专有。完整条款见 LICENSE.txt |
PPTX 创建、编辑和分析
概述
用户可能会要求您创建、编辑或分析 .pptx 文件的内容。.pptx 文件本质上是一个包含 XML 文件和其他资源的 ZIP 存档,您可以读取或编辑这些文件。针对不同的任务,您有不同的工具和工作流程可用。
读取和分析内容
文本提取
如果您只需要读取演示文稿的文本内容,您应该将文档转换为 markdown:
python -m markitdown path-to-file.pptx
原始 XML 访问
您需要原始 XML 访问权限来处理:注释、演讲者备注、幻灯片布局、动画、设计元素和复杂格式。对于这些功能中的任何一个,您都需要解包演示文稿并读取其原始 XML 内容。
解包文件
python ooxml/scripts/unpack.py <office_file> <output_dir>
注意:unpack.py 脚本位于项目根目录的 skills/pptx/ooxml/scripts/unpack.py。如果脚本在此路径不存在,请使用 find . -name "unpack.py" 来定位它。
关键文件结构
ppt/presentation.xml - 主演示文稿元数据和幻灯片引用
ppt/slides/slide{N}.xml - 单个幻灯片内容(slide1.xml、slide2.xml 等)
ppt/notesSlides/notesSlide{N}.xml - 每张幻灯片的演讲者备注
ppt/comments/modernComment_*.xml - 特定幻灯片的注释
ppt/slideLayouts/ - 幻灯片的布局模板
ppt/slideMasters/ - 主幻灯片模板
ppt/theme/ - 主题和样式信息
ppt/media/ - 图像和其他媒体文件
排版和颜色提取
当给定要模仿的示例设计时:始终使用以下方法首先分析演示文稿的排版和颜色:
- 读取主题文件:检查
ppt/theme/theme1.xml 中的颜色(<a:clrScheme>)和字体(<a:fontScheme>)
- 采样幻灯片内容:检查
ppt/slides/slide1.xml 中的实际字体使用(<a:rPr>)和颜色
- 搜索模式:使用 grep 在所有 XML 文件中查找颜色(
<a:solidFill>、<a:srgbClr>)和字体引用
从头创建新的 PowerPoint 演示文稿(不使用模板)
当从头开始创建新的 PowerPoint 演示文稿时,使用 html2pptx 工作流程将 HTML 幻灯片转换为具有准确定位的 PowerPoint。
设计原则
关键:在创建任何演示文稿之前,分析内容并选择合适的设计元素:
- 考虑主题:这个演示文稿是关于什么的?它暗示了什么基调、行业或情绪?
- 检查品牌:如果用户提到公司/组织,请考虑他们的品牌颜色和身份
- 将调色板与内容匹配:选择反映主题的颜色
- 说明您的方法:在编写代码之前说明您的设计选择
要求:
- ✅ 在编写代码之前说明您的内容驱动的设计方法
- ✅ 仅使用网络安全字体:Arial、Helvetica、Times New Roman、Georgia、Courier New、Verdana、Tahoma、Trebuchet MS、Impact
- ✅ 通过大小、粗细和颜色创建清晰的视觉层次
- ✅ 确保可读性:强烈的对比度、适当大小的文本、清晰的对齐
- ✅ 保持一致:在幻灯片之间重复模式、间距和视觉语言
调色板选择
创造性地选择颜色:
- 超越默认值:什么颜色真正匹配这个特定主题?避免自动驾驶仪选择。
- 考虑多个角度:主题、行业、情绪、能量水平、目标受众、品牌身份(如果提到)
- 大胆尝试:尝试意想不到的组合 - 医疗保健演示文稿不必是绿色的,金融演示文稿不必是海军蓝的
- 构建您的调色板:选择 3-5 种协同工作的颜色(主导色 + 支持色调 + 强调色)
- 确保对比度:文本必须在背景上清晰可读
示例调色板(使用这些来激发创造力 - 选择一个,调整它,或创建您自己的):
- 经典蓝色:深海军蓝(#1C2833)、石板灰(#2E4053)、银色(#AAB7B8)、灰白色(#F4F6F6)
- 青色和珊瑚色:青色(#5EA8A7)、深青色(#277884)、珊瑚色(#FE4447)、白色(#FFFFFF)
- 大胆红色:红色(#C0392B)、亮红色(#E74C3C)、橙色(#F39C12)、黄色(#F1C40F)、绿色(#2ECC71)
- 温暖腮红:淡紫色(#A49393)、腮红(#EED6D3)、玫瑰色(#E8B4B8)、奶油色(#FAF7F2)
- 勃艮第奢华:勃艮第酒红色(#5D1D2E)、深红色(#951233)、锈色(#C15937)、金色(#997929)
- 深紫色和祖母绿:紫色(#B165FB)、深蓝色(#181B24)、祖母绿(#40695B)、白色(#FFFFFF)
- 奶油色和森林绿:奶油色(#FFE1C7)、森林绿(#40695B)、白色(#FCFCFC)
- 粉色和紫色:粉色(#F8275B)、珊瑚色(#FF574A)、玫瑰色(#FF737D)、紫色(#3D2F68)
- 酸橙色和李子色:酸橙色(#C5DE82)、李子色(#7C3A5F)、珊瑚色(#FD8C6E)、蓝灰色(#98ACB5)
- 黑色和金色:金色(#BF9A4A)、黑色(#000000)、奶油色(#F4F6F6)
- 鼠尾草绿和赤陶色:鼠尾草绿(#87A96B)、赤陶色(#E07A5F)、奶油色(#F4F1DE)、炭灰色(#2C2C2C)
- 炭灰色和红色:炭灰色(#292929)、红色(#E33737)、浅灰色(#CCCBCB)
- 鲜艳橙色:橙色(#F96D00)、浅灰色(#F2F2F2)、炭灰色(#222831)
- 森林绿:黑色(#191A19)、绿色(#4E9F3D)、深绿色(#1E5128)、白色(#FFFFFF)
- 复古彩虹:紫色(#722880)、粉色(#D72D51)、橙色(#EB5C18)、琥珀色(#F08800)、金色(#DEB600)
- 复古大地色:芥末色(#E3B448)、鼠尾草绿(#CBD18F)、森林绿(#3A6B35)、奶油色(#F4F1DE)
- 海岸玫瑰色:老玫瑰色(#AD7670)、海狸色(#B49886)、蛋壳色(#F3ECDC)、灰烬灰色(#BFD5BE)
- 橙色和绿松石色:浅橙色(#FC993E)、灰绿松石色(#667C6F)、白色(#FCFCFC)
视觉细节选项
几何图案:
- 对角线分隔符而不是水平线
- 不对称列宽度(30/70、40/60、25/75)
- 90° 或 270° 旋转的文本标题
- 图像的圆形/六边形框架
- 角落的三角形强调形状
- 用于深度的重叠形状
边框和框架处理:
- 仅在一侧上的粗单色边框(10-20pt)
- 带有对比色的双线边框
- 角括号而不是完整框架
- L 形边框(顶部+左侧或底部+右侧)
- 标题下方的下划线强调(3-5pt 粗)
排版处理:
- 极端大小对比(72pt 标题 vs 11pt 正文)
- 宽字距的全大写标题
- 超大显示类型的编号部分
- 数据/统计/技术内容的等宽字体(Courier New)
- 稠密信息的压缩字体(Arial Narrow)
- 用于强调的轮廓文本
图表和数据样式:
- 带有单个强调色用于关键数据的单色图表
- 水平条形图而不是垂直条形图
- 点图而不是条形图
- 最少网格线或根本没有
- 元素上的数据标签(无图例)
- 关键指标的超大数字
布局创新:
- 带有文本覆盖的全出血图像
- 侧边栏列(20-30% 宽度)用于导航/上下文
- 模块化网格系统(3×3、4×4 块)
- Z 模式或 F 模式内容流
- 彩色形状上的浮动文本框
- 杂志风格多列布局
背景处理:
- 占据幻灯片 40-60% 的纯色块
- 渐变填充(仅垂直或对角线)
- 分割背景(两种颜色,对角线或垂直)
- 边到边缘的色带
- 作为设计元素的负空间
布局提示
当创建带有图表或表格的幻灯片时:
- 双列布局(首选):使用跨越全宽的标题,然后是下方的两列 - 一列中有文本/项目符号,另一列中有特色内容。这提供了更好的平衡并使图表/表格更具可读性。使用具有不等列宽的 flexbox(例如,40%/60% 分割)来优化每种内容类型的空间。
- 全幻灯片布局:让特色内容(图表/表格)占据整个幻灯片以获得最大影响力和可读性
- 绝不垂直堆叠:不要在单列中将图表/表格放置在文本下方 - 这会导致可读性差和布局问题
工作流程
- 强制 - 读取整个文件:从头到尾完整读取
html2pptx.md。在读取此文件时绝不要设置任何范围限制。 在继续进行演示文稿创建之前,读取完整文件内容以获取详细语法、关键格式规则和最佳实践。
- 使用适当尺寸为每张幻灯片创建一个 HTML 文件(例如,16:9 的 720pt × 405pt)
- 对所有文本内容使用
<p>、<h1>-<h6>、<ul>、<ol>
- 对将添加图表/表格的区域使用
class="placeholder"(渲染灰色背景以提高可见性)
- 关键:首先使用 Sharp 将渐变和图标光栅化为 PNG 图像,然后在 HTML 中引用
- 布局:对于带有图表/表格/图像的幻灯片,使用全幻灯片布局或双列布局以提高可读性
- 使用
html2pptx.js 库创建并运行一个 JavaScript 文件,将 HTML 幻灯片转换为 PowerPoint 并保存演示文稿
- 使用
html2pptx() 函数处理每个 HTML 文件
- 使用 PptxGenJS API 将图表和表格添加到占位符区域
- 使用
pptx.writeFile() 保存演示文稿
- 视觉验证:生成缩略图并检查布局问题
- 创建缩略图网格:
python scripts/thumbnail.py output.pptx workspace/thumbnails --cols 4
- 读取并仔细检查缩略图图像以查找:
- 文本截断:文本被标题栏、形状或幻灯片边缘切断
- 文本重叠:文本与其他文本或形状重叠
- 定位问题:内容太靠近幻灯片边界或其他元素
- 对比度问题:文本和背景之间的对比度不足
- 如果发现问题,调整 HTML 边距/间距/颜色并重新生成演示文稿
- 重复直到所有幻灯片在视觉上正确
编辑现有的 PowerPoint 演示文稿
当编辑现有 PowerPoint 演示文稿中的幻灯片时,您需要使用原始 Office Open XML (OOXML) 格式。这涉及解包 .pptx 文件、编辑 XML 内容并重新打包。
工作流程
- 强制 - 读取整个文件:从头到尾完整读取
ooxml.md(约 500 行)。在读取此文件时绝不要设置任何范围限制。 在任何演示文稿编辑之前,读取完整文件内容以获取有关 OOXML 结构和编辑工作流程的详细指导。
- 解包演示文稿:
python ooxml/scripts/unpack.py <office_file> <output_dir>
- 编辑 XML 文件(主要是
ppt/slides/slide{N}.xml 和相关文件)
- 关键:在每次编辑后立即验证并修复任何验证错误,然后再继续:
python ooxml/scripts/validate.py <dir> --original <file>
- 打包最终演示文稿:
python ooxml/scripts/pack.py <input_directory> <office_file>
使用模板创建新的 PowerPoint 演示文稿
当您需要创建遵循现有模板设计的演示文稿时,您需要复制并重新排列模板幻灯片,然后再替换占位符上下文。
工作流程
-
提取模板文本并创建视觉缩略图网格:
- 提取文本:
python -m markitdown template.pptx > template-content.md
- 读取
template-content.md:读取整个文件以了解模板演示文稿的内容。在读取此文件时绝不要设置任何范围限制。
- 创建缩略图网格:
python scripts/thumbnail.py template.pptx
- 有关更多详细信息,请参阅 创建缩略图网格 部分
-
分析模板并将清单保存到文件:
-
基于模板清单创建演示文稿大纲:
- 查看步骤 2 中的可用模板。
- 为第一张幻灯片选择介绍或标题模板。这应该是第一个模板之一。
- 为其他幻灯片选择安全的、基于文本的布局。
- 关键:将布局结构与实际内容匹配:
- 单列布局:用于统一叙述或单个主题
- 双列布局:仅在您恰好有 2 个不同的项目/概念时使用
- 三列布局:仅在您恰好有 3 个不同的项目/概念时使用
- 图像 + 文本布局:仅在您有要插入的实际图像时使用
- 引用布局:仅用于来自人员的实际引用(带归属),绝不用于强调
- 绝不要使用占位符多于您所拥有内容的布局
- 如果您有 2 个项目,不要将它们强制放入 3 列布局
- 如果您有 4+ 个项目,考虑分成多张幻灯片或使用列表格式
- 在选择布局之前计算您的实际内容片段
- 验证所选布局中的每个占位符都将用有意义的内容填充
- 选择一个代表每个内容部分的最佳布局的选项。
- 保存
outline.md,其中包含利用可用设计的内容和模板映射
- 示例模板映射:
# 要使用的模板幻灯片(从 0 开始的索引)
# 警告:验证索引在范围内!带有 73 张幻灯片的模板具有索引 0-72
# 映射:大纲中的幻灯片编号 -> 模板幻灯片索引
template_mapping = [
0, # 使用幻灯片 0(标题/封面)
34, # 使用幻灯片 34(B1:标题和正文)
34, # 再次使用幻灯片 34(重复用于第二个 B1)
50, # 使用幻灯片 50(E1:引用)
54, # 使用幻灯片 54(F2:结束 + 文本)
]
-
使用 rearrange.py 复制、重新排列和删除幻灯片:
- 使用
scripts/rearrange.py 脚本创建一个具有所需顺序幻灯片的新演示文稿:
python scripts/rearrange.py template.pptx working.pptx 0,34,34,50,52
- 该脚本自动处理重复幻灯片、删除未使用的幻灯片和重新排序
- 幻灯片索引从 0 开始(第一张幻灯片是 0,第二张是 1,等等)
- 同一幻灯片索引可以出现多次以重复该幻灯片
-
使用 inventory.py 脚本提取所有文本:
-
运行清单提取:
python scripts/inventory.py working.pptx text-inventory.json
-
读取 text-inventory.json:读取整个 text-inventory.json 文件以了解所有形状及其属性。在读取此文件时绝不要设置任何范围限制。
-
清单 JSON 结构:
{
"slide-0": {
"shape-0": {
"placeholder_type": "TITLE",
"left": 1.5,
"top": 2.0,
"width": 7.5,
"height": 1.2,
"paragraphs": [
{
"text": "段落文本",
"bullet": true,
"level": 0,
"alignment": "CENTER",
"space_before": 10.0,
"space_after": 6.0,
"line_spacing": 22.4,
"font_name": "Arial",
"font_size": 14.0,
"bold": true,
"italic": false,
"underline": false,
"color": "FF0000"
}
]
}
}
}
-
关键功能:
- 幻灯片:命名为 "slide-0"、"slide-1" 等
- 形状:按视觉位置(从上到下、从左到右)排序为 "shape-0"、"shape-1" 等
- 占位符类型:TITLE、CENTER_TITLE、SUBTITLE、BODY、OBJECT 或 null
- 默认字体大小:从布局占位符提取的以点为单位的
default_font_size(如果可用)
- 幻灯片编号被过滤:具有 SLIDE_NUMBER 占位符类型的形状会自动从清单中排除
- 项目符号:当
bullet: true 时,level 始终包含(即使为 0)
- 间距:
space_before、space_after 和 line_spacing 以点为单位(仅在设置时包含)
- 颜色:
color 用于 RGB(例如,"FF0000"),theme_color 用于主题颜色(例如,"DARK_1")
- 属性:仅非默认值包含在输出中
-
生成替换文本并将数据保存到 JSON 文件
基于上一步的文本清单:
- 关键:首先验证清单中存在哪些形状 - 仅引用实际存在的形状
- 验证:replace.py 脚本将验证替换 JSON 中的所有形状都存在于清单中
- 如果您引用不存在的形状,您将收到一个显示可用形状的错误
- 如果您引用不存在的幻灯片,您将收到一个指示幻灯片不存在的错误
- 所有验证错误在脚本退出之前一次显示
- 重要:replace.py 脚本内部使用 inventory.py 来识别所有文本形状
- 自动清除:除非您为它们提供 "paragraphs",否则清单中的所有文本形状都将被清除
- 为需要内容的形状(不是 "replacement_paragraphs")添加 "paragraphs" 字段
- 替换 JSON 中没有 "paragraphs" 的形状将自动清除其文本
- 带有项目符号的段落将自动左对齐。当
"bullet": true 时不要设置 alignment 属性
- 为占位符文本生成适当的替换内容
- 使用形状大小确定适当的内容长度
- 关键:包括来自原始清单的段落属性 - 不要只提供文本
- 重要:当 bullet: true 时,不要在文本中包含项目符号(•、-、*)- 它们会自动添加
- 基本格式规则:
- 标题/标题通常应该有
"bold": true
- 列表项应该有
"bullet": true, "level": 0(当项目符号为 true 时需要级别)
- 保留任何对齐属性(例如,用于居中文本的
"alignment": "CENTER")
- 在与默认不同时包含字体属性(例如,
"font_size": 14.0、"font_name": "Lora")
- 颜色:使用
"color": "FF0000" 表示 RGB 或使用 "theme_color": "DARK_1" 表示主题颜色
- 替换脚本期望正确格式的段落,而不仅仅是文本字符串
- 重叠形状:优先选择具有更大 default_font_size 或更适当 placeholder_type 的形状
- 将带有替换的更新清单保存到
replacement-text.json
- 警告:不同的模板布局具有不同的形状计数 - 在创建替换之前始终检查实际清单
显示正确格式的段落字段示例:
"paragraphs": [
{
"text": "新演示文稿标题文本",