zcbot/skills/ppt/references/design_principles.md

12 KiB
Raw Blame History

PPT 设计硬规则

出稿前过一遍。这些不是建议,是工程约束 —— 模型生成 PPT 最常见的失败模式都是违反这些规则。

信息设计纪律 (比视觉更重要 —— 先把这条吃透)

"好看"七成靠信息设计、三成靠视觉。同样的红色卡片,标题写"行业背景"还是"渗透率破 60%,行业进入深水区",观感差一个档次。模型最容易堆视觉、忘内功 —— 这一节是把 deck 从"AI 味模板"拉到"咨询级"的关键。

1. 论断式标题 (Assertion title) —— 标题写结论,不写主题

每页标题是一句可带走的结论,不是话题名。

类型 主题式(避免) 论断式(推荐)
背景 "行业背景" "数字渗透率破 60%,行业进入深水区"
现状 "什么是大模型" "大模型靠规模涌现出通用智能"
历程 "发展历程" "六年从 GPT-1 到推理模型,能力指数跃迁"
竞争 "竞品分析" "三家主要对手在渠道覆盖上明显薄弱"

2. Takeaway 结论框 —— 每页标题下一句话结论

内容页标题下加 P.add_takeaway(slide, "<一句话结论>")(浅主色底 + 左主色条)。把"这页要讲什么"压成一句。金字塔原则:结论先行,再展开 3 条论据。

3. 数据语境化 —— 数字不要孤立出现

每个关键数字配三件:数值本身(大)+ 对比基准(行业均值/上期/竞品)+ 含义("所以呢")。 用 P.add_kpi(..., baseline="行业均值 82%", delta="+11pt")(升=绿/降=红,业界约定);含数据的页用 P.add_source(slide, "<来源>") 标来源。

例:"97.3%" 下面跟 "行业均值 82% | 领先 15 个点",而不是光一个 "97.3%"。

4. page_rhythm 节奏 —— 相邻页不许同版式

逐页大纲给每页标密度,breathing 页强制打破卡片网格(否则每页都退化成卡片网格 = AI 味):

标签 版式纪律
anchor 结构页(封面/章节/目录/尾页),走固定品牌版式
dense 信息密集(默认):卡片网格 / KPI / 图表 / 时间轴 / 表格都行
breathing 低密度冲击页:禁止多卡网格,用大字 + 留白 + 整图 + 金句。典型:单个大数字 + 一句语境、整图 + 浮层标题、金句

内容→版式映射:历程→时间轴(add_timeline)、循环→闭环/流程(add_cycle)、2-4 数字→KPI 卡(add_kpi)、并列概念→均衡网格(add_card_grid,全 deck ≤2 次)、单个震撼数字→breathing 大字页。

0. 画布 (默认 16:9)

用途 比例 宽×高 (英寸) python-pptx
现代商务汇报 默认 16:9 13.33 × 7.5 Inches(13.33), Inches(7.5)
老投影 / 教学 4:3 10 × 7.5 Inches(10), Inches(7.5)
手机 / 视频号 9:16 7.5 × 13.33 Inches(7.5), Inches(13.33)
小红书 3:4 7.5 × 10 Inches(7.5), Inches(10)
A4 横 / 竖 √2:1 11.69 × 8.27 / 反 同左

不知道选哪个 → 16:9。安全边距统一:左右 0.7 in,上下 0.5 in。画布定了不要中途改,后续坐标全按这个尺寸算。画布超 16:9 默认尺寸时所有字号 × (实际宽 / 13.33)

1. 字号 (16:9 标准)

元素 字号 (Pt) 备注
主标题 (封面) 44-54 单行不换行
标题 (内页) 28-36 中文常用 32
副标题 / 章节小标题 20-24
正文 / bullet 18-22 低于 18 投影看不清
注释 / 数据来源 12-14 灰色,弱化
页脚页码 10-12 弱化处理

底线: 投影到 100 寸大屏,后排看得清最小字号是 18pt。绝不能小于 14pt,除非是数据来源等弱化信息。

2. 配色

三色制

  • 主色 (Primary) —— 标题、强调、关键数据。占视觉权重 60%
  • 辅色 (Secondary) —— 副标题、次要图形元素。占 30%
  • 强调色 (Accent) —— 关键数据点、CTA、警告。占 10%,不要泛滥
  • 其他全部用灰阶 (#1F1F1F / #555 / #888 / #CCC / #F5F5F5)

推荐配色对照 (红色主题为默认)

风格 主色 辅色 强调色 备注
商务红 默认 #C00000 #E15554 #FFC107 党政/年终/路演通用
中国红 #8B0000 #B22222 #FFD700 民族/国货/红色文化主题
现代红 #B91C1C #DC2626 #F59E0B 新消费/科技产品发布
暖朱红 #C73E1D #E76F51 #F4A261 学术汇报/行业会议
商务蓝 #1F4E79 #2E75B6 #FFC000 金融/保险/政企
学术灰 #2F2F2F #595959 #C00000 严肃论文/答辩
现代简约 #2D3748 #4A5568 #38B2AC 互联网/SaaS
科技深色 #0A192F #112240 #64FFDA 黑客松/技术大会

派生色阶(卡片式视觉的层次来源)

set_palette 从主/辅/强调自动派生明暗阶,这些不算"新色"(quality_check 按色相归桶,同色系深浅收敛成一个):

  • PRIMARY_WASH(主色兑 92% 白)—— 整页/大区域浅底(尾页、L13 论据卡)
  • PRIMARY_SOFT(兑 80% 白)—— 卡片/图标底块/标签浅底
  • PRIMARY_DARK(主色压暗)—— 封面/章节渐变深端
  • ACCENT_SOFT(强调兑 78% 白)—— 渐变深底上的弱化文字

白底之上靠卡片(add_card 圆角+投影)+ 浅色阶分层,才有"现代咨询风"的层次;纯白底裸贴元素 = 扁平办公模板。

语义状态色 (例外)

趋势/状态用业界约定:绿 P.GOOD = 增长/正向,红 P.BAD = 下降/风险,灰 = 持平。这套语义色不计入三色制(quality_check 把绿色当语义色豁免)。只用在 KPI 趋势、表格升降这类语义场景,别拿来当装饰。

禁忌

  • 红配绿、紫配黄等高对比互补色不要直接用(语义升降色除外)
  • 渐变只用在大色块(封面右块 / 章节整页,apply_brand 已内置);正文/标题/小图形不要渐变
  • 一份 deck 主色不要换。封面是 A 色、内页变 B 色 —— 这是大忌
  • 渐变深底上文字一律用白 / ACCENT_SOFT,别用深灰 INK(看不清)

视觉深度:投影是克制,不是默认

抄自 pptmaster shared-standards §6 —— "设计感来自'没有',不是'到处都有'"。模型最爱给每张卡都加投影,这恰恰是模板味的来源。

  • 平卡是常态:add_card 默认平卡(白底描发丝边)。平铺网格里的对等卡一律平,不投影。
  • 投影只给真悬浮的:照片/色块上的卡、被挑出的"推荐"项、浮层/标注。add_card(..., shadow=True) 手动开。
  • 每页 ≤2-3 个投影元素。够第 4 个了,先撤一个。
  • 一个容器只用一种视觉手段:投影 / 描边 / 渐变底 / 强主色底 —— 四选一,不叠加(叠加 = 瞬间模板味)。
  • 单一光源:同页所有投影同方向(默认光从上方,dy>0)。
  • 渐变深底上投影会消失,改用 1px 低透明白描边或外发光。

3. 留白

  • 标题与上边距 ≥ 0.4 英寸
  • bullet 之间行距 1.3-1.5 倍
  • 一页内容占满 70% 即可,不要塞到边缘
  • 边距统一 (左右 0.7 寸,上下 0.5 寸常用值)

4. 信息密度

页类型 字数上限 图表
封面 30 字 可选装饰图
目录 每条 ≤ 15 字 不要图
分章页 ≤ 20 字 大号数字 + 章节名
要点页 bullet ≤ 5 条,每条 ≤ 25 字 可选小图标
数据页 标题 + 一句结论 必须有图表;2-4 个数字优先 KPI 卡(L10)而非柱图
概念页 卡片标题 ≤6 字 + 说明 ≤2 行 图标底块 + 卡片网格(L11),别裸圆点
图片页 ≤ 15 字标题 + 1-2 行说明 主体是图

4.1 字数预算 (避免溢出)

这是布局超界的根因表。bullet 写超了会顶到下一页元素;标题写超了会换行顶下来。开写前查这张表,而不是写完看 quality_check 报错。

公式: 每行字数 ≈ 框宽(in) × 72 / 字号(pt)

字号 框宽 11.93 in (整宽) 框宽 5.5 in (双栏单边) 框宽 4.6 in (图片页文字区)
44 pt (主标题) ≤ 19 字
36 pt (大标题) ≤ 23 字
32 pt (内页标题) ≤ 26 字
22 pt (要点) ≤ 39 字 ≤ 18 字 ≤ 15 字
18 pt (正文) ≤ 47 字 ≤ 22 字 ≤ 18 字
14 pt (注释) ≤ 61 字 ≤ 28 字 ≤ 23 字

英文字符按中文 0.5 个换算 (即英文每行约 2× 中文字数)。

行高估算

每行高度 ≈ 字号 × 1.4 / 72 (英寸)

字号 单行高 1 行框高 2 行框高 3 行框高
32 pt 0.62 in 0.7 in 1.3 in 1.9 in
22 pt 0.43 in 0.5 in 0.9 in 1.3 in
18 pt 0.35 in 0.4 in 0.8 in 1.1 in
14 pt 0.27 in 0.3 in 0.6 in 0.9 in

用法: bullet 字数预计超表上限就拆条,不要试图靠 auto_size 收缩字号兜底 —— 会出现一页里字号大小不一,反而难看。

5. 文字层级

  • 一页最多 3 级层级 (标题 / 正文 / 子项)
  • 子项缩进 0.3-0.5 英寸
  • 子项字号比父级小 2-4pt
  • 不要四级以上嵌套

6. 图片规则

  • 分辨率: 投影建议 150 dpi 以上,印刷 300 dpi
  • 占位: 图片占满指定区域,不要拉伸变形 —— 用 width=height= 单一参数让 python-pptx 等比缩放
  • 背景: 透明 PNG 优先;白底 JPG 在深色页上要做底色匹配
  • 数量: 一页最多 2 张图,3 张以上是网格图,按九宫格摆

7. 图表规则 (matplotlib)

先问要不要图表:只有 2-4 个数字 → 用 KPI 卡(layouts L10),别画柱图;真有趋势/分布/多系列才上 matplotlib。图表 png 嵌进 add_card 白卡片里(L6)比裸图精致。

  • 颜色用 spec 里定的主/辅/强调三色,不要用 matplotlib 默认色板
  • 字号: 标题 16,坐标轴 12,刻度 10
  • 去四边框,只留极淡横向网格 (ax.spines[*].set_visible(False) + ax.grid(axis='y', color='#EEEEEE', lw=0.8))—— 比全框 + 默认网格干净,跟卡片观感一致
  • 数据标签直接标在柱子/点上,优先于看坐标
  • 透明底:fig.savefig(..., transparent=True),嵌白卡片上无白边
  • 中文字体: plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'SimHei']
  • 负号: plt.rcParams['axes.unicode_minus'] = False
# 示例:符合规则的柱状图 (默认红色主题)
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'SimHei']
plt.rcParams['axes.unicode_minus'] = False
fig, ax = plt.subplots(figsize=(10, 5), dpi=150)
bars = ax.bar(["Q1","Q2","Q3","Q4"], [12,18,25,31],
              color=["#C00000","#C00000","#C00000","#FFC107"])  # 末尾突出
for bar, v in zip(bars, [12,18,25,31]):
    ax.text(bar.get_x()+bar.get_width()/2, v+0.5, str(v),
            ha='center', fontsize=11)
ax.set_title("季度营收 (亿元)", fontsize=16)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
fig.savefig("chart.png", bbox_inches="tight", dpi=150)

8. 一致性 (跨页)

  • 标题位置不要跳来跳去 —— 所有内页标题都在同一像素位置
  • 页脚 (页码 / logo / 标题) 在所有内页位置一致
  • 字体在同 deck 内不要换 —— 中文一种字体,英文一种,够了
  • 配色不变,字号梯度不变

9. 反模式速查

症状 原因 修法
一页字密密麻麻 没拆页 拆 2-3 页或转图表
投影看不清 字号 < 18 加大字号或拆页
颜色花 用了超过 5 种色 退回三色制
bullet 是完整段落 把演讲稿当 bullet 写 提炼关键词,完整句留给口述
图表默认配色 没改 matplotlib 色板 用 spec 主色
图标/图片随意找的 没统一风格 同一来源 / 同一风格
标题在每页位置都不一样 没用统一版式 见 layouts.md,固定模板