skills/ppt-station-skill/reference/layout-quote.md

223 lines
9.9 KiB
Markdown
Raw Normal View History

# Layout: `quote` — 引用/金句页
> 幻灯片尺寸: 13.333 × 7.5 英寸 | 边距: 0.6 英寸 | 内容宽: 12.133 英寸
---
## 用途
管理层观点、投资建议语录、风险提示声明、年报核心金句。
---
## ASCII 线框图
```
┌─────────────────────────────────────────────────────────────┐
│ │
│ ❝ │
│ │
│ 在波动的市场中,坚守长期投资原则, │
│ 比追求短期收益更能实现财富的稳健增长。 │
│ │
│ ❞ │
│ │
│ ───────────────── │
│ 王明远 | 首席投资官 │
│ │
│ [可选:小字来源说明] │
└─────────────────────────────────────────────────────────────┘
```
---
## 变体
### 变体 A深色背景`bg_dark` 款,强调感强)
```
┌─────────────────────────────────────────────────────────────┐
│ [bg_dark 背景] │
│ │
│ ❝ accent 色大引号) │
│ │
│ [quote 文字text_light居中大字] │
│ │
│ ❞ │
│ ─── accent 色横线 ─── │
│ [author] | [title] text_light较小
│ │
└─────────────────────────────────────────────────────────────┘
```
### 变体 B浅色背景`bg_light` 款,报告内页用)
```
┌─────────────────────────────────────────────────────────────┐
│ [bg_light 背景] │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ card_bg 卡片(圆角矩形,带 border 边框) │ │
│ │ │ │
│ │ ❝ primary 色引号) │ │
│ │ │ │
│ │ [quote 文字text_dark居中] │ │
│ │ │ │
│ │ ❞ │ │
│ │ ─── secondary 色横线 ─── │ │
│ │ [author] | [title] │ │
│ │ │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
---
## 精确坐标标注
### 变体 A深色背景
| 元素 | x | y | w | h | 字号 | 颜色 | 对齐 | 备注 |
|------|---|---|---|---|------|------|------|------|
| 背景 | 0 | 0 | 13.333 | 7.5 | — | bg_dark | — | 全页背景 |
| 左引号 ❝ | 0.60 | 1.00 | 1.50 | 1.50 | 96pt | accent | 左 | 装饰引号 |
| 右引号 ❞ | 11.40 | 4.20 | 1.30 | 1.20 | 96pt | accent | 右 | 装饰引号 |
| 引文正文 | 1.80 | 2.00 | 9.733 | 2.80 | 28pt | text_light | 中 | 行高 1.5x |
| 分隔线 | 5.167 | 5.00 | 3.00 | 0.04 | — | accent | — | 居中于页面 |
| 作者名 | 1.80 | 5.15 | 9.733 | 0.50 | body_size+2 | text_light | 中 | 粗体 |
| 职衔 | 1.80 | 5.65 | 9.733 | 0.40 | body_size | text_light | 中 | 细体muted |
| 来源说明 | 0.60 | 6.90 | 12.133 | 0.35 | caption_size | text_muted | 左 | 可选 |
> **引号字号说明**: 96pt 装饰引号实际使用 `❝` `❞` Unicode 字符U+275D / U+275E
> 或用中文弯引号 `"` `"` 加大字号模拟。
### 变体 B浅色卡片
| 元素 | x | y | w | h | 字号 | 颜色 | 对齐 | 备注 |
|------|---|---|---|---|------|------|------|------|
| 背景 | 0 | 0 | 13.333 | 7.5 | — | bg_light | — | 全页背景 |
| 卡片 | 0.60 | 0.80 | 12.133 | 6.20 | — | card_bg | — | 圆角 0.12", border |
| 左引号 | 0.90 | 1.00 | 1.20 | 1.20 | 72pt | primary | 左 | — |
| 右引号 | 11.20 | 4.40 | 1.10 | 1.10 | 72pt | primary | 右 | — |
| 引文正文 | 1.60 | 2.00 | 10.133 | 2.60 | 24pt | text_dark | 中 | 行高 1.5x |
| 分隔线 | 5.417 | 4.80 | 2.50 | 0.04 | — | secondary | — | — |
| 作者名 | 1.60 | 5.00 | 10.133 | 0.45 | body_size+2 | primary | 中 | 粗体 |
| 职衔 | 1.60 | 5.50 | 10.133 | 0.40 | body_size | text_muted | 中 | — |
---
## 数据接口
```python
data = {
"quote": str, # 引文内容(建议 50-120 字,过长则字号自动缩小)
"author": str, # 作者姓名
"title": str, # 职衔/身份(如 "首席投资官" 或 "投行研报, 2024Q4"
"source": str, # 可选,来源说明(显示在左下角)
"variant": "dark" | "light", # 背景变体,默认 "dark"
"quote_font_size": int, # 可选,强制引文字号(默认根据文字长度自动)
}
```
---
## 字号自适应规则
```
引文字数 <= 40 字: quote_font_size = 32pt
引文字数 41-80 字: quote_font_size = 26pt
引文字数 81-120 字: quote_font_size = 22pt
引文字数 > 120 字: quote_font_size = 18pt或换用文字较多的布局
```
---
## 实现伪代码
```python
def layout_quote(slide, data, theme):
sw, sh = 13.333, 7.5
m = theme["margin"]
cw = sw - 2 * m
variant = data.get("variant", "dark")
bg = theme["bg_dark"] if variant == "dark" else theme["bg_light"]
qt_color = theme["accent"] if variant == "dark" else theme["primary"]
text_color = theme["text_light"] if variant == "dark" else theme["text_dark"]
line_color = theme["accent"] if variant == "dark" else theme["secondary"]
set_slide_bg(slide, bg)
if variant == "light":
add_rounded_rect(slide, m, 0.80, cw, 6.20,
fill=theme["card_bg"], border=theme["border"],
radius=0.12)
# 自适应字号
q_len = len(data["quote"])
if q_len <= 40: qfont = 32
elif q_len <= 80: qfont = 26
elif q_len <= 120: qfont = 22
else: qfont = 18
qfont = data.get("quote_font_size", qfont)
# 装饰引号
add_text(slide, "\u275d", # ❝
x=m, y=1.00, w=1.50, h=1.50,
font_size=96, color=qt_color, bold=True,
font_name=theme["header_font"])
add_text(slide, "\u275e", # ❞
x=11.40, y=4.20, w=1.30, h=1.20,
font_size=96, color=qt_color, bold=True,
font_name=theme["header_font"])
# 引文
add_text(slide, data["quote"],
x=1.80, y=2.00, w=sw-3.60, h=2.80,
font_size=qfont, color=text_color,
align="center", font_name=theme["body_font"])
# 分隔线(居中)
line_w = 3.00
add_rect(slide, (sw-line_w)/2, 5.00, line_w, 0.04, fill=line_color)
# 作者 + 职衔
add_text(slide, data["author"],
x=1.80, y=5.15, w=sw-3.60, h=0.50,
font_size=theme["body_size"]+2, color=text_color,
bold=True, align="center", font_name=theme["header_font"])
add_text(slide, data["title"],
x=1.80, y=5.65, w=sw-3.60, h=0.40,
font_size=theme["body_size"], color=theme["text_muted"],
align="center", font_name=theme["body_font"])
if data.get("source"):
add_text(slide, f"来源:{data['source']}",
x=m, y=6.90, w=cw, h=0.35,
font_size=theme["caption_size"], color=theme["text_muted"],
font_name=theme["body_font"])
```
---
## 设计要点
1. **装饰引号** 用 Unicode `❝❞``""` 超大字号72-96pt纯作装饰不参与文字排版
2. **分隔线** 宽 2.5-3.0 英寸,水平居中,比内容区窄,营造"浮雕"感
3. **引文字体** 建议用 `body_font`(更易读),不用 `header_font`(太方正)
4. **深色变体** 适合章节封面、结论页之前的观点陈述页
5. **浅色变体** 适合内容页中间插入的专家观点
---
## 测试数据示例
```python
data = {
"quote": "长期投资的核心不是预测市场的每一次波动,而是在确定性的复利中耐心等待价值的回归。",
"author": "李明华",
"title": "首席投资策略师 | 国投养老基金",
"source": "2024年度投资策略报告",
"variant": "dark",
}
```