Awesome-claude-skills-cn pptx
演示文稿创建、编辑和分析。当克劳德需要处理演示文稿(.pptx 文件)时使用:(1) 创建新演示文稿,(2) 修改或编辑内容,(3) 使用布局,(4) 添加批注或演讲者备注,或任何其他演示文稿任务
git clone https://github.com/Athe1st3154/awesome-claude-skills-cn
T=$(mktemp -d) && git clone --depth=1 https://github.com/Athe1st3154/awesome-claude-skills-cn "$T" && mkdir -p ~/.claude/skills && cp -r "$T/document-skills/pptx" ~/.claude/skills/athe1st3154-awesome-claude-skills-cn-pptx && rm -rf "$T"
document-skills/pptx/SKILL.mdPPTX 创建、编辑和分析
概述
用户可能要求您创建、编辑或分析 .pptx 文件的内容。.pptx 文件本质上是包含 XML 文件和其他资源的 ZIP 归档,您可以直接读取或编辑。对于不同的任务,您可以使用不同的工具和工作流程。
读取和分析内容
文本提取
如果您只需要读取演示文稿的文本内容,应将文档转换为 markdown:
# 将文档转换为 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
- 各幻灯片内容(slide1.xml、slide2.xml 等)ppt/slides/slide{N}.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% 的纯色块
- 渐变填充(仅垂直或对角线)
- 分屏背景(两种颜色,对角线或垂直)
- 边缘到边缘的色带
- 负空间作为设计元素
布局提示
创建带图表或表格的幻灯片时:
- 双列布局(首选):使用跨全宽的标题,然后在下方使用两列——一列放文本/项目符号,另一列放特色内容。这提供了更好的平衡,使图表/表格更具可读性。使用不等列宽(如 40%/60% 分割)来优化每种内容类型的空间。
- 全幻灯片布局:让特色内容(图表/表格)占据整个幻灯片以获得最大影响和可读性
- 切勿垂直堆叠:不要在单列中将图表/表格放在文本下方——这会导致可读性差和布局问题
工作流程
- 强制要求——完整阅读文件:从头到尾完整阅读
。在继续演示文稿创建之前,切勿设置任何范围限制。阅读完整文件内容以获取详细语法、关键格式规则和最佳实践。html2pptx.md - 为每张幻灯片创建 HTML 文件,设置适当尺寸(例如 16:9 为 720pt × 405pt)
- 使用
、<p>
-<h1>
、<h6>
、<ul>
处理所有文本内容<ol> - 使用
标记将添加图表/表格的区域(渲染为灰色背景以便可见)class="placeholder" - 关键:首先使用 Sharp 将渐变和图标栅格化为 PNG 图片,然后在 HTML 中引用
- 布局:对于带图表/表格/图片的幻灯片,使用全幻灯片布局或双列布局以获得更好的可读性
- 使用
- 使用
库创建并运行 JavaScript 文件,将 HTML 幻灯片转换为 PowerPoint 并保存演示文稿html2pptx.js- 使用
函数处理每个 HTML 文件html2pptx() - 使用 PptxGenJS API 将图表和表格添加到占位符区域
- 使用
保存演示文稿pptx.writeFile()
- 使用
- 视觉验证:生成缩略图并检查布局问题
- 创建缩略图网格:
python scripts/thumbnail.py output.pptx workspace/thumbnails --cols 4 - 阅读并仔细检查缩略图图像,查找:
- 文本截断:文本被标题栏、形状或幻灯片边缘截断
- 文本重叠:文本与其他文本或形状重叠
- 定位问题:内容过于靠近幻灯片边界或其他元素
- 对比度问题:文本与背景之间的对比度不足
- 如发现问题,调整 HTML 边距/间距/颜色并重新生成演示文稿
- 重复直到所有幻灯片视觉上正确
- 创建缩略图网格:
编辑现有的 PowerPoint 演示文稿
在编辑现有 PowerPoint 演示文稿中的幻灯片时,您需要使用原始 Office Open XML(OOXML)格式。这涉及解压 .pptx 文件、编辑 XML 内容,然后重新打包。
工作流程
- 强制要求——完整阅读文件:从头到尾完整阅读
(约 500 行)。在开始任何演示文稿编辑之前,切勿设置任何范围限制。阅读完整文件内容以获取 OOXML 结构和编辑工作流程的详细指导。ooxml.md - 解压演示文稿:
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 - 参见创建缩略图网格部分了解更多详情
- 提取文本:
-
分析模板并将清单保存到文件:
- 视觉分析:查看缩略图网格以了解幻灯片布局、设计模式和视觉结构
- 在
处创建并保存模板清单文件,包含:template-inventory.md# 模板清单分析 **总幻灯片数:[count]** **重要提示:幻灯片从 0 开始索引(第一张 = 0,最后一张 = count-1)** ## [类别名称] - 幻灯片 0:[布局代码(如果有)] - 描述/用途 - 幻灯片 1:[布局代码] - 描述/用途 - 幻灯片 2:[布局代码] - 描述/用途 [...每张幻灯片都必须单独列出,包含其索引...] - 使用缩略图网格:参考视觉缩略图来识别:
- 布局模式(标题幻灯片、内容布局、章节分隔符)
- 图片占位符位置和数量
- 幻灯片组之间的设计一致性
- 视觉层次和结构
- 此清单文件在下一步选择适当模板时是必需的
-
基于模板清单创建演示文稿大纲:
- 回顾步骤 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.pypython 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", // 或 null(对于非占位符) "left": 1.5, // 位置(英寸) "top": 2.0, "width": 7.5, "height": 1.2, "paragraphs": [ { "text": "段落文本", // 可选属性(仅在非默认值时包含): "bullet": true, // 检测到显式项目符号 "level": 0, // 仅在 bullet 为 true 时包含 "alignment": "CENTER", // CENTER、RIGHT(不是 LEFT) "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" // RGB 颜色 } ] } } } -
关键特性:
- 幻灯片:命名为 "slide-0"、"slide-1" 等
- 形状:按视觉位置(从上到下、从左到右)排序为 "shape-0"、"shape-1" 等
- 占位符类型:TITLE、CENTER_TITLE、SUBTITLE、BODY、OBJECT 或 null
- 默认字体大小:从布局占位符提取的默认字体大小(磅)(如果有)
- 幻灯片编号被过滤:具有 SLIDE_NUMBER 占位符类型的形状自动从清单中排除
- 项目符号:当
时,bullet: true
始终包含(即使为 0)level - 间距:
、space_before
和space_after
以磅为单位(仅在设置时包含)line_spacing - 颜色:
表示 RGB(例如 "FF0000"),color
表示主题颜色(例如 "DARK_1")theme_color - 属性:仅在非默认值时包含在输出中
-
-
生成替换文本并将数据保存到 JSON 文件 基于上一步的文本清单:
- 关键:首先验证清单中存在哪些形状——仅引用实际存在的形状
- 验证:replace.py 脚本将验证替换 JSON 中的所有形状是否存在于清单中
- 如果引用不存在的形状,您将收到显示可用形状的错误
- 如果引用不存在的幻灯片,您将收到指示幻灯片不存在的错误
- 所有验证错误在脚本退出前一次性显示
- 重要:replace.py 脚本在内部使用 inventory.py 识别所有文本形状
- 自动清除:清单中的所有文本形状将被清除,除非您为它们提供 "paragraphs"
- 向需要内容的形状添加 "paragraphs" 字段(不是 "replacement_paragraphs")
- 替换 JSON 中没有 "paragraphs" 的形状将自动清除其文本
- 带项目符号的段落将自动左对齐。设置
时不要设置"bullet": true
属性alignment - 为占位符文本生成适当的替换内容
- 使用形状大小来确定适当的内容长度
- 关键格式规则:包含原始清单中的段落属性——不要仅提供文本
- 重要:当 bullet: true 时,不要在文本中包含项目符号符号(•、-、*)——它们是自动添加的
- 基本格式规则:
- 标题/标题通常应有
"bold": true - 列表项需要有
(bullet 为 true 时 level 是必需的)"bullet": true, "level": 0 - 保留任何对齐属性(例如
用于居中文本)"alignment": "CENTER" - 当与默认值不同时包含字体属性(例如
、"font_size": 14.0
)"font_name": "Lora" - 颜色:使用
表示 RGB 或"color": "FF0000"
表示主题颜色"theme_color": "DARK_1" - 替换脚本期望格式正确的段落,而不仅仅是文本字符串
- 重叠形状:优先选择具有更大 default_font_size 或更合适 placeholder_type 的形状
- 标题/标题通常应有
- 将包含替换的更新清单保存到
replacement-text.json - 警告:不同的模板布局有不同的形状数量——在创建替换之前始终检查实际清单
显示正确格式的 paragraphs 字段示例:
"paragraphs": [ { "text": "新演示文稿标题文本", "alignment": "CENTER", "bold": true }, { "text": "章节标题", "bold": true }, { "text": "第一个项目符号(不含项目符号符号)", "bullet": true, "level": 0 }, { "text": "红色文本", "color": "FF0000" }, { "text": "主题颜色文本", "theme_color": "DARK_1" }, { "text": "无特殊格式的常规段落文本" } ]替换 JSON 中未列出的形状会自动清除:
{ "slide-0": { "shape-0": { "paragraphs": [...] // 此形状获得新文本 } // shape-1 和 shape-2 将自动从清单中清除 } }演示文稿的常见格式模式:
- 标题幻灯片:粗体文本,有时居中
- 幻灯片内的章节标题:粗体文本
- 项目符号列表:每项需要
"bullet": true, "level": 0 - 正文文本:通常不需要特殊属性
- 引言:可能有特殊对齐或字体属性
-
使用
脚本应用替换replace.pypython scripts/replace.py working.pptx replacement-text.json output.pptx脚本将:
- 首先使用 inventory.py 中的函数提取所有文本形状的清单
- 验证替换 JSON 中的所有形状是否存在于清单中
- 清除清单中识别的所有形状的文本
- 仅对替换 JSON 中定义了 "paragraphs" 的形状应用新文本
- 通过应用 JSON 中的段落属性来保留格式
- 自动处理项目符号、对齐、字体属性和颜色
- 保存更新的演示文稿
示例验证错误:
错误:替换 JSON 中的无效形状: - 形状 'shape-99' 在 'slide-0' 上未找到。可用形状:shape-0、shape-1、shape-4 - 在清单中未找到幻灯片 'slide-999'错误:替换文本使这些形状中的溢出更糟: - slide-0/shape-2:溢出增加了 1.25"(原来 0.00",现在 1.25")
创建缩略图网格
创建 PowerPoint 幻灯片的视觉缩略图网格以便快速分析和参考:
python scripts/thumbnail.py template.pptx [output_prefix]
功能:
- 创建:
(或大型演示文稿的thumbnails.jpg
、thumbnails-1.jpg
等)thumbnails-2.jpg - 默认:5 列,每网格最多 30 张幻灯片(5×6)
- 自定义前缀:
python scripts/thumbnail.py template.pptx my-grid- 注意:如果您希望输出到特定目录,输出前缀应包含路径(例如
)workspace/my-grid
- 注意:如果您希望输出到特定目录,输出前缀应包含路径(例如
- 调整列数:
(范围:3-6,影响每网格幻灯片数)--cols 4 - 网格限制:3 列 = 12 张幻灯片/网格,4 列 = 20,5 列 = 30,6 列 = 42
- 幻灯片从 0 开始编号(幻灯片 0、幻灯片 1 等)
用例:
- 模板分析:快速了解幻灯片布局和设计模式
- 内容审阅:整个演示文稿的视觉概览
- 导航参考:通过视觉外观查找特定幻灯片
- 质量检查:验证所有幻灯片格式正确
示例:
# 基本用法 python scripts/thumbnail.py presentation.pptx # 组合选项:自定义名称和列数 python scripts/thumbnail.py template.pptx analysis --cols 4
将幻灯片转换为图像
要视觉分析 PowerPoint 幻灯片,请使用两步过程将它们转换为图像:
-
将 PPTX 转换为 PDF:
soffice --headless --convert-to pdf template.pptx -
将 PDF 页面转换为 JPEG 图像:
pdftoppm -jpeg -r 150 template.pdf slide这会创建类似
、slide-1.jpg
等的文件。slide-2.jpg
选项:
:设置分辨率为 150 DPI(调整质量/大小平衡)-r 150
:输出 JPEG 格式(如果首选,使用-jpeg
输出 PNG)-png
:要转换的第一页(例如-f N
从第 2 页开始)-f 2
:要转换的最后一页(例如-l N
在第 5 页停止)-l 5
:输出文件的前缀slide
特定范围示例:
pdftoppm -jpeg -r 150 -f 2 -l 5 template.pdf slide # 仅转换第 2-5 页
代码风格指南
重要:在生成 PPTX 操作代码时:
- 编写简洁的代码
- 避免冗长的变量名和冗余操作
- 避免不必要的 print 语句
依赖项
必需的依赖项(应该已安装):
- markitdown:
(用于从演示文稿提取文本)pip install "markitdown[pptx]" - pptxgenjs:
(用于通过 html2pptx 创建演示文稿)npm install -g pptxgenjs - playwright:
(用于 html2pptx 中的 HTML 渲染)npm install -g playwright - react-icons:
(用于图标)npm install -g react-icons react react-dom - sharp:
(用于 SVG 栅格化和图像处理)npm install -g sharp - LibreOffice:
(用于 PDF 转换)sudo apt-get install libreoffice - Poppler:
(用于 pdftoppm 将 PDF 转换为图像)sudo apt-get install poppler-utils - defusedxml:
(用于安全 XML 解析)pip install defusedxml