TL;DR
- 本文解決:用 AI 產投影片但還是要手動美化到死的問題
- 推薦給:需要常做簡報、會寫一點程式的人(工程師、PM、講師、內訓企劃)
- 讀完你會知道:Anthropic 官方 pptx Skill 怎麼裝、怎麼用、怎麼自動做視覺 QA、踩過哪些坑
📌 目錄
這篇在講什麼
我把 Anthropic 官方開源的 pptx Skill 裝進 Claude Code,直接叫它幫我做企業內訓第一堂課的 10 頁簡報。不是給我 Markdown 大綱、不是吐文字讓我自己排,是真的輸出一份 .pptx 檔,排版、配色、對齊、甚至視覺檢查都做好了。
整個流程從指令到成品 15 分鐘。過程中 Claude 還自己抓到一個 LibreOffice 會把 emoji 吃掉的 bug,自己改了再重新渲染驗證。
成品長這樣(這是第 1 張,標題頁):
為什麼 ChatGPT 產投影片一直不好用
我相信你試過這個流程:
問題不在 AI 不夠聰明,問題在它沒有真的拿到產 .pptx 檔的權限。它只能給你文字,排版永遠是你自己的事。
pptx Skill 是什麼
Claude 的 Skills 是 Anthropic 官方維護的一組「能力包」,其中 pptx 這個 Skill 專門解決產簡報這件事。
它的運作邏輯:
- 底層用
pptxgenjs(Node.js 套件)直接產.pptx檔 - 內建
SKILL.md一份詳盡的設計指南:10 套配色調色盤、字體搭配、版面範式 - 強制要求每一張 slide 都要有視覺元素、禁止純文字頁、禁止 AI 招牌的「標題下面一條線」
- 有完整的 QA 流程:產完自動
soffice轉 PDF、再轉 JPG、叫 subagent 用視覺檢查找 bug
對比:三種做簡報的方式
| 面向 | ChatGPT 聊天 | Claude pptx Skill | 手工 Keynote |
|---|---|---|---|
| 產出格式 | Markdown / 文字 | .pptx 檔 | .key / .pptx |
| 自動排版 | ✗ | ✓ | ✗ |
| 配色指南 | △(給你文字建議) | ✓(10 套 palette) | ✗ |
| 視覺 QA | ✗ | ✓(subagent 看圖) | 自己看 |
| 踩坑自動修復 | ✗ | ✓ | ✗ |
| 時間成本 | 你後面還要 3 小時 | 15 分鐘 | 2-4 小時 |
從 0 開始安裝步驟
前置需求:
- Claude Code(CLI 版本,不是 Claude.ai 聊天)
- Node.js 18+
- Python 3.10+(markitdown 做文字檢查用)
- LibreOffice(
brew install --cask libreoffice,轉 PDF 用) - Poppler(
brew install poppler,PDF 轉 JPG 用)
# 1. Clone 官方 skills repo
git clone https://github.com/anthropics/skills.git
# 2. 把 pptx skill 複製到你的 Claude 目錄
cp -r skills/pptx ~/.claude/skills/
# 3. 裝相依套件
pip install "markitdown[pptx]" Pillow
npm install -g pptxgenjs
裝完之後,在任何 Claude Code session 只要提到「投影片」、「簡報」、.pptx,Claude 會自動偵測到這個 Skill 並啟用它。
我實際下的指令
我的 prompt 很簡單,就是把第一堂課的逐字稿丟給它:
基於 @第一堂-逐字稿-part1.md 的內容,
幫我做一份 10 頁的 .pptx 簡報給學員看,
用 Midnight Executive 配色、Arial Black + Arial 字體,
重點是「Claude Code 是什麼」和「為什麼不直接看官方文件」。
它做了什麼:
#1E2761 + ice blue #CADCFC + gold #FFB84D)build.js 用 pptxgenjs 產 10 張 slidenode build.js 產 .pptxsoffice 轉 PDF、pdftoppm 轉 JPG成品中的一頁(四件事 2x2 grid):
它怎麼做視覺 QA
這是 pptx Skill 最強的一部分。產完 .pptx 之後它會:
# 1. 轉 PDF
python scripts/office/soffice.py --headless --convert-to pdf output.pptx
# 2. 轉 JPG
pdftoppm -jpeg -r 150 output.pdf slide
# 3. 文字層檢查(找殘留的 placeholder)
python -m markitdown output.pptx | grep -iE "xxxx|lorem|ipsum"
然後叫 subagent 用這個 prompt 看圖:
假設每張 slide 都有問題,找出來。
看:重疊元素、文字溢出、decorative line 錯位、
source citation 撞到上方內容、間距不一致、
邊緣留白不足(< 0.5")、低對比文字、
殘留 placeholder。
至少找到一個問題才算通過。
這個「假設有問題」的心態是關鍵。一般 AI 自己檢查會傾向找不到問題,但這個 prompt 強制它挑毛病。
踩到的坑
坑 1:LibreOffice 會吃掉 emoji
我原本 slide 9 有用 👷🔨 emoji 當角色標示(你 = 建築師、AI = 工人)。
錯誤訊息(沒有 error,但 JPG 裡空白):
渲染出的 slide 9 — emoji 位置空白,下方文字排版也跑掉
為什麼: LibreOffice 的 headless 模式沒載入 Apple Color Emoji 字體,遇到 emoji 直接丟掉不渲染。
解法: 改用 roundRect + 中文字當 badge:
// 原本
s.addText('👷 建築師', { ... })
// 改成
s.addShape('roundRect', {
x: 0.9, y: y + 0.25, w: 0.8, h: 0.55,
fill: { color: '#1E2761' },
rectRadius: 0.08,
});
s.addText('你', {
x: 0.9, y: y + 0.25, w: 0.8, h: 0.55,
fontFace: 'Arial Black', fontSize: 14, bold: true,
color: '#FFB84D', align: 'center', valign: 'middle',
});
重點:不要用 emoji,改用 shape + text 組合。這條教訓 SKILL.md 沒提,是 Claude 實測發現後自己記在 progress 裡。
坑 2:Chinese 字體如果沒指定會跑 fallback
pptxgenjs 預設字體是 Calibri,中文字會被瀏覽器 fallback 到系統字體,到了 LibreOffice 變成難看的 substitution。
解法: 明確指定字體 family:
const F = {
header: 'Arial Black', // 英文標題
body: 'Arial', // 英文內文
code: 'Menlo', // 程式碼
};
// 中文交給 macOS 系統 fallback 到 PingFang TC
坑 3:Visual QA 要真的再 render 一次
第一輪 QA 找到問題、改 build.js、覺得改好了,千萬不要直接交件。要:
node build.js
soffice --headless --convert-to pdf 第一堂-Part1.pptx
pdftoppm -jpeg -r 150 第一堂-Part1.pdf slide-fixed
再叫 subagent 看一次 slide-fixed-*.jpg。我第一次改完以為沒事,結果 slide 9 的 badge 垂直置中沒調好,又跑了一輪才真的乾淨。
心法 / 時間成本拆解
傳統手排 vs pptx Skill 的時間分配:
| 階段 | 手排 | pptx Skill |
|---|---|---|
| 想內容大綱 | 30min | 5min(丟逐字稿即可) |
| 選配色字體 | 30min | 0(內建 10 套) |
| 做第一版 | 60min | 3min(程式跑) |
| 手動美化 | 60min | 0 |
| 視覺檢查修正 | 30min | 4min(subagent + 1 輪修復) |
| 總計 | 3.5 小時 | 12 分鐘 |
另一個心法:讓 AI 寫程式產檔,不要讓 AI 填 template 的格子。pptxgenjs 給 Claude 的是 API,它可以寫任何版面;template 給它的只是格子,最後還是長得一樣。
延伸資源
- Anthropic Skills GitHub Repo — 官方原始碼
- pptxgenjs 文件 — 所有 API 參考
- markitdown — 檢查 pptx 文字層
- 本站其他文章:用 Claude + Figma MCP 畫系統圖
我輩修行之人,以聖的標準要求自己,以凡的眼光理解別人。
如果你有企業內訓需求,或想學怎麼把 AI 真的接到日常工作流,歡迎聯繫我諮詢。