PowerPoint 默认启用
.pptx 创建、编辑、分析 — 从单页幻灯片修复到包含变体过渡和数据驱动生成的完整投资者演示文稿。
触发关键词
快速参考
| 任务 | 操作 |
|---|---|
| 按照现有 deck 格式化 | cp source.pptx target.pptx && officecli open target.pptx — 继承主题/布局/母版 |
| 读取/分析内容 | officecli view 和 officecli get 命令 |
| 编辑现有演示文稿 | 基于参考的编辑工作流(复制 → 修改) |
| 从头创建 | officecli create → 添加幻灯片 → 添加元素 |
| 融资演示文稿(种子轮/A轮) | 子技能:officecli-pitch-deck |
| 变体过渡动画 | 子技能:morph-ppt |
| 3D 变体效果 | 子技能:morph-ppt-3d |
| JS 编程回退方案 | pptxgenjs 用于 50+ 页数据驱动的幻灯片 |
| 配色方案/排版 | 设计系统:20 种调色板,8 种字体组合 |
| 缩略图网格/视觉 QA | python3 scripts/thumbnail.py deck.pptx grid.png |
| 解包/修复 | python3 scripts/pptx_cli.py {open|save|validate|repair} |
.pptx 文件并行运行命令。"~해줘" 示例
激活此技能的自然语言请求。支持韩语、英语或混合使用。
officecli view text 读取所有幻灯片内容,使用 officecli view issues 检查设计问题,运行验证,并报告摘要及任何问题(溢出、缺少替代文本、对比度低)。officecli add 及图表属性添加一个包含柱状图元素的新幻灯片。数据以内联方式传入,图表按照合适的边距定位。morph-ppt 子技能。从 48 种精选样式定义中选择深色风格,在幻灯片之间应用变体过渡,并使用缩略图进行视觉 QA。主要工具:OfficeCLI
officecli 可处理约 80% 的 PPTX 任务:幻灯片的添加/设置/删除、验证、查询和视觉检查。它是主要接口 — 在升级到其他工具之前,请始终先尝试 OfficeCLI。
发现规则
officecli --help 和 officecli help pptx ... --json。CLI 是可用属性和语法的唯一权威来源。officecli --help
officecli help pptx
officecli help pptx add slide --json # exact property list
officecli help pptx add shape --json
officecli help pptx set slide --json
officecli help pptx set shape --json
officecli view --help # all view modes
officecli help pptx query
核心工作流
读取与分析
# Text extraction
officecli view slides.pptx text
officecli view slides.pptx text --start 1 --end 5
# Structural views
officecli view slides.pptx outline
officecli view slides.pptx annotated
officecli view slides.pptx stats
元素检查(PATH 语法)
路径从 1 开始:/slide[1]、/shape[1]。在 zsh 中始终用引号包裹路径,以防止通配符展开。
officecli get slides.pptx '/slide[1]' --depth 1
officecli get slides.pptx '/slide[1]/shape[1]'
officecli get slides.pptx '/slide[1]/chart[1]'
officecli get slides.pptx '/slide[1]/table[1]' --depth 3
类 CSS 查询
officecli query slides.pptx 'shape:contains("Revenue")'
officecli query slides.pptx "picture:no-alt"
officecli query slides.pptx 'shape[fill=#4472C4]'
officecli query slides.pptx "shape[width>=10cm]"
视觉检查
officecli view slides.pptx html --browser # recommended
officecli view slides.pptx svg --start 1 --end 1 --browser
常驻模式
常驻模式将文件作为后台守护进程保持打开状态,以加快连续编辑速度。open 命令会立即返回 — 不要将其作为后台 shell 作业运行。
officecli open slides.pptx # returns IMMEDIATELY; daemon in bg
officecli add slides.pptx ...
officecli set slides.pptx ...
officecli close slides.pptx # always close explicitly
officecli open 作为后台 shell 作业运行。它会立即返回,守护进程会自动在后台运行。后台 shell 启动会创建僵尸进程和文件锁。批处理模式
使用 JSON 在单次调用中执行多个操作。使用带单引号分隔符的 heredoc 来防止 shell 语法泄漏到 JSON 中。
cat <<'EOF' | officecli batch slides.pptx
[
{"command":"add","parent":"/slide[1]","type":"shape","props":{"text":"Title","x":"2cm","y":"2cm","width":"20cm","height":"3cm","size":"36","bold":"true"}},
{"command":"add","parent":"/slide[1]","type":"shape","props":{"text":"Body","x":"2cm","y":"6cm","width":"20cm","height":"10cm","size":"16"}}
]
EOF
批处理支持:add、set、get、query、remove、move、swap、view、raw、raw-set、validate。
基于参考的编辑
当用户提供源文件或说"按照 X.pptx 的格式" — 始终从源文件开始。绝不从头重建主题。
为什么这很重要
幻灯片母版和主题定义(字体、颜色、占位符几何形状)是文档特有的。从头重建会丢失幻灯片间一致的品牌形象,破坏现有占位符位置,并且耗时是修改副本的 5-10 倍。
工作流
- 复制源文件:
cp source.pptx target.pptx— 继承主题、幻灯片母版、布局、字体、颜色 - 打开:
officecli open target.pptx— 守护进程立即返回 - 删除幻灯片内容,但保留
/slideMaster、/slideLayout、/theme - 添加新幻灯片,使用现有布局(
--prop layout=Title+Content)— 它们会自动继承主题
模板来源(优先级顺序)
| 优先级 | 来源 | 使用场景 |
|---|---|---|
| 1 | 用户提供的源文件 | 首选模板 — 始终优先使用 |
| 2 | tests/fixtures/*.pptx | 技能附带的预构建示例 |
| 3 | officecli-pitch-deck/ 模板 | 融资/投资者场景 |
| 4 | morph-ppt/reference/styles/* | 48 种精选样式定义 |
| 5 | officecli create 空白文件 | 仅在没有其他适用方案时使用 |
示例 — 继承现有品牌
# CORRECT: inherit theme and layouts
cp CompanyBrand.pptx Q4Report.pptx
officecli open Q4Report.pptx
officecli remove Q4Report.pptx "/slide[1]"
officecli add Q4Report.pptx / --type slide --prop layout=Title
officecli add Q4Report.pptx '/slide[1]' --type textbox \
--prop text="Q4 Report" --prop placeholder=title
officecli close Q4Report.pptx
# WRONG: recreate theme (loses brand)
officecli create Q4Report.pptx
# ... add all fonts, colors, masters from scratch ...
创建工作流
# 1. Work in /tmp/ with ASCII filenames (Korean filenames cause resident corruption)
officecli create /tmp/deck_work.pptx --type pptx
# 2. Add slide, set background, add shapes/textboxes/charts
officecli add /tmp/deck_work.pptx /slide --type slide
officecli set /tmp/deck_work.pptx '/slide[1]' --prop background=1E2761
officecli add /tmp/deck_work.pptx '/slide[1]' --type textbox \
--prop 'text=Title Here' --prop x=2cm --prop y=3cm --prop w=30cm --prop h=4cm \
--prop fontsize=44 --prop bold=true --prop color=FFFFFF --prop fontFamily=Pretendard
# 3. Explicitly close resident after edits
officecli close /tmp/deck_work.pptx
# 4. Copy to final filename (Korean OK for final output)
python3 -c "import shutil; shutil.copy2('/tmp/deck_work.pptx', 'final.pptx')"
升级梯度
当 OfficeCLI 无法完成任务时,按顺序升级。大多数任务停留在 L1。
| 级别 | 适用场景 | 工具 |
|---|---|---|
| L1 officecli 高级接口 | 常规的幻灯片/形状 添加/设置/删除 | officecli add/set/remove/query/view |
| L2 officecli raw-set | XML 注入 — 自定义动画、图表 XML、主题调整 | officecli raw-set FILE PATH --xpath X --action A --xml ... |
| L3 Python 脚本 | 缩略图生成、孤立资源清理、统一 CLI 操作 | python3 scripts/*.py |
| L4 解包 → 编辑 XML → 重新打包 | 超出 officecli 能力范围的变体过渡、自定义 p:transition XML、宏处理 |
scripts/pptx_cli.py open → 编辑 XML → save |
| L5 pptxgenjs | 从数据集生成 50+ 页幻灯片、可组合工厂、复杂循环逻辑 | npm install pptxgenjs + JS 管道 |
升级信号
- officecli 显示 "silently ignored" 或不支持的属性 → L2
- 需要超出高级接口能力的变体/自定义过渡 → L4
- 从数据批量生成(50+ 页幻灯片)→ L5 (pptxgenjs)
- 用于清理/重组的解包工作流 → L3 (
pptx_cli.py clean) - 设计选择(颜色、字体、样式)→ 先阅读
references/design-system.md+morph-ppt/reference/styles/INDEX.md
元素类型与命令
OfficeCLI 支持丰富的元素类型。请积极使用 — 纯文本幻灯片毫无记忆点。
形状作为内容容器
officecli add deck.pptx '/slide[1]' --type shape --prop geometry=roundRect \
--prop fill=1E2761 --prop x=1cm --prop y=4cm --prop w=15cm --prop h=12cm
表格
officecli add deck.pptx '/slide[2]' --type table \
--prop rows=4 --prop cols=3 --prop x=1cm --prop y=3cm \
--prop width=24cm --prop height=6cm
图表
officecli add deck.pptx '/slide[3]' --type chart \
--prop chartType=column --prop title='Revenue' \
--prop 'data=Q1:12,Q2:15,Q3:18,Q4:20'
图片
officecli add deck.pptx '/slide[1]' --type picture \
--prop path=photo.png --prop x=14cm --prop y=3cm \
--prop width=8cm --prop height=5cm --prop alt='Team photo'
视频/音频
officecli add deck.pptx '/slide[4]' --type video --prop path=demo.mp4 \
--prop x=2cm --prop y=3cm --prop width=20cm --prop height=12cm --prop autoplay=true
OLE 嵌入(Excel、Word、PDF)
officecli add deck.pptx '/slide[5]' --type ole --prop path=data.xlsx \
--prop x=2cm --prop y=3cm --prop width=20cm --prop height=12cm
连接线/箭头
officecli add deck.pptx '/slide[2]' --type connector \
--prop startShape=1 --prop endShape=2 --prop lineColor=4472C4 --prop tailEnd=arrow
演讲者备注
officecli add deck.pptx '/slide[1]' --type notes --prop 'text=Key talking point here.'
动画
officecli set deck.pptx '/slide[1]/shape[2]' --prop animation=fadeIn --prop delay=500
主题颜色
# Use theme tokens instead of hex for theme-aware decks
officecli set deck.pptx '/slide[1]/shape[1]' --prop fill=accent1
# Available: accent1..accent6, dk1, dk2, lt1, lt2, tx1, tx2, bg1, bg2
其他操作
# Hyperlinks
officecli set deck.pptx '/slide[1]/shape[2]' --prop link='https://example.com'
# Flip / rotate
officecli set deck.pptx '/slide[1]/shape[2]' --prop flipH=true
officecli set deck.pptx '/slide[1]/shape[2]' --prop rotation=45
# Slide master / layout editing
officecli set deck.pptx '/slideMaster[1]/shape[2]' --prop text='Company Name'
officecli set deck.pptx '/slideLayout[2]/shape[1]' --prop fill=1E2761
# Template merge with data
officecli merge template.pptx output.pptx --data '{"title":"Q4 Report","revenue":"$5.1M"}'
# Watch mode (live preview)
officecli watch deck.pptx --port 3000
# Slideshow settings
officecli set deck.pptx / --prop show.loop=true --prop show.narration=false
设计系统
设计旋钮
创建之前,先确定以下三个参数。如有歧义,请向用户确认。
| 旋钮 | 范围 | 默认值 | 含义 |
|---|---|---|---|
| DESIGN_VARIANCE | 1–10 | 4 | 1 = 对称网格,10 = 非对称艺术指导 |
| VISUAL_DENSITY | 1–10 | 5 | 1 = 画廊留白,10 = 仪表盘密集 |
| MOTION_INTENSITY | 1–10 | 3 | 1 = 静态切换,10 = 电影级变体 |
按演示文稿类型的预设
| 演示文稿类型 | 变化度 | 密度 | 动效 |
|---|---|---|---|
| 投资者路演 | 6 | 3 | 4 |
| 内部评审 | 3 | 7 | 1 |
| 大会主题演讲 | 8 | 2 | 7 |
| 工作坊/培训 | 4 | 6 | 2 |
| 产品发布 | 7 | 4 | 6 |
推荐调色板
选择与主题匹配的颜色 — 不要默认使用通用蓝色。
| 主题 | 主色 | 辅色 | 强调色 | 文本 | 次要文本 |
|---|---|---|---|---|---|
| 午夜商务 | 1E2761 | CADCFC | FFFFFF | 333333 | 8899BB |
| 石板专业 | 2C3E50 | ECF0F1 | E74C3C | 333333 | 7A8A94 |
| 森林与苔藓 | 2C5F2D | 97BC62 | F5F5F5 | 2D2D2D | 6B8E6B |
| 珊瑚活力 | F96167 | F9E795 | 2F3C7E | 333333 | 8B7E6A |
| 暖赤陶 | B85042 | E7E8D1 | A7BEAE | 3D2B2B | 8C7B75 |
| 海洋渐变 | 065A82 | 1C7293 | 21295C | 2B3A4E | 6B8FAA |
| 炭灰极简 | 36454F | F2F2F2 | 212121 | 333333 | 7A8A94 |
| 浆果与奶油 | 6D2E46 | A26769 | ECE2D0 | 3D2233 | 8C6B7A |
在浅色背景上使用文本色作为正文,次要文本色用于说明文字、标签和坐标轴文本。在深色背景(亮度 < 30%)上,所有正文文本必须为白色(FFFFFF)或近白色。非纯黑:使用 0A0A0A 而非 000000。
FFFFFF 背景 + 000000 文本(毫无个性)。排版
| 标题字体 | 正文字体 | 最适场景 |
|---|---|---|
| Georgia | Calibri | 正式商务、金融 |
| Arial Black | Arial | 大胆营销、产品发布 |
| Trebuchet MS | Calibri | 友好科技、初创企业 |
| Consolas | Calibri | 开发者工具、工程 |
韩语:Pretendard、Noto Sans KR、Wanted Sans。避免将 Malgun Gothic 作为唯一字体 — 仅可作为 a:ea 字体栈中的 CJK 回退字体。
| 元素 | 尺寸 |
|---|---|
| 幻灯片标题 | 36–44pt 粗体 |
| 章节标题 | 20–24pt 粗体 |
| 正文文本 | 16–20pt(最小 16pt) |
| 说明/来源 | 10–12pt 次要色 |
| 关键指标 | 60–72pt 粗体,强调色 |
幻灯片节奏
一个 10 页的演示文稿应至少包含 4 种不同的布局类型:
- 全出血主视觉 — 标题或关键指标
- 分栏布局 — 文本 + 视觉元素
- 网格或对比 — 2–3 项内容
- 数据可视化 — 图表、图解或信息图
内容到布局指南
| 内容类型 | 推荐布局 |
|---|---|
| 定价/套餐层级 | 2–3 列卡片(对比) |
| 团队/人物 | 图标网格或 2x3 卡片 |
| 时间线/路线图 | 带箭头的流程图/编号步骤 |
| 关键指标/KPI | 大字统计展示(3–4 个大数字) |
| 用户评价/引言 | 全宽引言加署名 |
| 功能对比 | 两栏前后对比或表格 |
| 架构/系统 | 形状 + 连接线图解 |
| 财务数据 | 图表 + 摘要表格并排 |
子技能
仅加载与您任务匹配的子技能。不要全部加载。
专为投资者路演设计的模板和结构。处理问题/方案/市场/牵引力/团队/财务的完整流程。
幻灯片之间的电影级变体过渡。包含 48 种精选样式定义、决策规则(金字塔原理、SCQA)、画布规格和质量门控。
将 3D 模型与变体过渡集成,用于高级视觉演示。
PptxGenJS API,用于通过可组合工厂和循环逻辑批量生成 50+ 页数据驱动的幻灯片。
参考资料
设计参考
| 文件 | 阅读时机 | 包含内容 |
|---|---|---|
references/design-system.md | 在选择颜色/字体之前 | 20 种调色板、8 种字体组合、4 种韩语字体 |
morph-ppt/reference/styles/INDEX.md | 选择独特视觉风格时 | 48 种样式定义,含规格与示例 |
morph-ppt/reference/decision-rules.md | 规划内容密集型演示文稿时 | 金字塔原理、SCQA、页面类型 |
morph-ppt/reference/pptx-design.md | 画布规格、幽灵位置数学计算 | 画布、字体、间距标记 |
morph-ppt/reference/quality-gates.md | 第 4–5 阶段 QA 门控 | 变体演示文稿的 QA 检查清单 |
recipes.md | 快速修复模式 | 章节分隔符 z-order、KPI 溢出、时间线间距 |
Python 脚本(scripts/)
| 脚本 | 用途 | 命令 |
|---|---|---|
pptx_cli.py | 统一 CLI:解包、保存、验证、修复、缩略图、搜索、目录、添加幻灯片、清理、导出 PDF | python3 scripts/pptx_cli.py {open|save|validate|repair|...} |
thumbnail.py | 幻灯片缩略图网格或单张 PNG,用于视觉 QA | python3 scripts/thumbnail.py IN.pptx grid.png |
clean.py | 查找/删除解包 PPTX 中的孤立媒体 | python3 scripts/clean.py work/ [--delete] |
add_slide.py | 在解包目录上添加或复制幻灯片(旧版 OOXML) | python3 scripts/add_slide.py work/ --blank |
run_tests.py | 运行技能回归测试 | python3 scripts/run_tests.py |
QA(必需)
步骤 1 — 机器 QA
officecli validate output.pptx
officecli view output.pptx issues
officecli view output.pptx text | grep -iE 'xxxx|lorem|ipsum|placeholder|TODO|click to'
officecli view output.pptx stats
步骤 2 — 视觉 QA
officecli view output.pptx html --browser
# Thumbnail grid for quick scan
python3 scripts/thumbnail.py output.pptx grid.png
使用子代理进行视觉检查 — 即使只有 2–3 页幻灯片。你会看到你期望的内容,而非实际的内容。新鲜的眼光能发现更多问题。
视觉 QA 检查清单
- 元素重叠(文本穿过形状、元素堆叠)
- 文本溢出或在文本框边界处被截断
- 元素间距过小(间隙 < 0.3 英寸)或几乎接触
- 间距不均匀(大面积空白 vs 拥挤区域)
- 距幻灯片边缘留白不足(< 0.5 英寸)
- 列或相似元素未对齐
- 低对比度的文本或图标
- 残留的占位符内容
- 文本框过窄导致过度换行
步骤 3 — 修复并重新验证
使用 officecli set 修复,重新运行 QA。在至少完成一轮修复-验证循环之前,不要宣布成功。
交付前检查清单
- 所有内容幻灯片都有演讲者备注
- 至少应用了一种过渡样式
- 所有图片都有替代文本:
officecli query deck.pptx 'picture:no-alt' - 布局多样性 ≥ 3 种类型
- 无溢出:
y + height ≤ 19.05cm,x + width ≤ 33.87cm - 无残留占位符文本
- 正文文本 ≥ 16pt
- 图表标题包含实际数值(无 TBD、空括号)
常见陷阱
| 陷阱 | 正确做法 |
|---|---|
在 zsh 中未引用 [N] | 始终加引号:"/slide[1]" 或 '/slide[1]' |
--name "foo" | 使用 --prop name="foo" — 所有属性通过 --prop 传递 |
| 猜测属性名 | 运行 officecli help pptx set shape --json 获取准确名称 |
十六进制颜色带 # | 使用 FF0000 而非 #FF0000 |
--prop text= 中的 $ | 使用单引号:'$15M' |
view text 遗漏表格 | 使用 view annotated 获取完整文本 |
| 创建后添加图表系列 | 无法添加 — 删除并重新创建图表 |
| 韩语文件名 + 常驻模式 | CJK 会导致常驻模式 UTF-8 损坏。使用 ASCII 文件名,最后再复制 |
| 常驻模式僵尸进程 | pkill -9 -f "resident-serve",等待 1 秒,重试 |
| 重建已有的主题/母版 | 先执行 cp source.pptx target.pptx。保留母版/布局/主题 |
将 officecli open 作为后台 shell 运行 | 在前台运行 — 它会立即返回,守护进程自动在后台运行 |
| 批处理 JSON 解析错误 | Shell 语法泄漏。使用 heredoc:cat <<'EOF' | officecli batch FILE.pptx |
| 盲目选择颜色/字体 | 选择之前先阅读 references/design-system.md |
反模式
- 绝不使用子技能文件中的示例数据(FitPulse、LearnFlow 等)
- 绝不留下占位符文本:
lorem、ipsum、XXXX、TODO - 每页幻灯片必须有标题(无障碍要求)
- 所有内容幻灯片都需要演讲者备注
- 每个演示文稿最多 2 种字体族
Malgun Gothic作为唯一字体 = 被拒绝view issues中空白布局显示 "(untitled)" 是正常的,不是缺陷- 标题下方的强调线 — AI 生成幻灯片的典型特征;应使用留白替代
- 装饰性网页 UI 元素(细侧边线、装饰性圆圈)— PPT 是投影介质,不是 Web 应用
- 每页使用相同布局 — 应变换列、卡片、标注
- 正文居中对齐 — 段落应左对齐;仅标题居中
- 尺寸对比不足 — 标题 36pt+ vs 正文 16pt
- 纯文本幻灯片 — 应添加形状、图表、色块、图片
无障碍(WCAG 2.1 AA)
- 每页幻灯片都有标题:
officecli view deck.pptx outline - 图片有替代文本:
officecli query deck.pptx 'picture:no-alt' - 阅读顺序 = 形状顺序(标题优先)
- 对比度 ≥ 4.5:1(正常文本),≥ 3:1(大号文本)
- 信息不仅通过颜色传达
CJK/韩语支持
cli-jaw 分支会自动检测韩语内容并应用语言标签和默认字体。在常驻模式编辑期间使用 ASCII 文件名以避免 UTF-8 损坏;最后一步再复制为韩语文件名。
前置条件
| 工具 | 用途 | 状态 |
|---|---|---|
officecli (PATH) | 主要 PPTX CLI | 必需 |
python3 + python-pptx | L3/L4 操作的脚本 | 脚本所需 |
pptxgenjs | 大规模编程生成(L5) | 可选 |
soffice (LibreOffice) | PDF 转换、QA 缩略图 | 可选(按需自动安装) |
# Check prerequisites
python3 -c "import pptx" || echo "MISSING: pip install python-pptx"
which officecli >/dev/null 2>&1 || echo "INFO: OfficeCLI not installed"
which soffice >/dev/null 2>&1 || echo "INFO: LibreOffice not installed (optional)"