skills/ppt-station-skill/reference/layout-quote.md
wangyitong a65adcc2e5 Initial commit: merged, deduplicated, and vetted skill collection
Sources: extracted from two upstream archives (skill-repo, skills-main),
merged with the following policy:

- 15 broken symlinks (pointing to /Users/jameslee/.cc-switch/skills or
  ../../.agents/skills on a foreign machine) discarded
- 3 real name collisions with identical content (ai-pair, ifind-http-api,
  zhipu-websearch) kept as one copy
- Functional overlaps deduped keeping the strongest variant:
  - docx family: kept docx (official, full toolchain) + docx-cn
    (GB/T 9704 Chinese official-document constants),
    dropped docx_writer (no scripts, name collided with docx)
  - humanizer family: kept humanizer-zh (6 zh reference docs),
    dropped humanizer (en, redundant for CN workflow)
- Skills that only ran in a foreign environment removed:
  ablemind-ops, app-publish, hlb-design-system, openclaw-adj-skill,
  claude-driver
- alphapai excluded from this public repo because its SKILL.md hard-coded
  live credentials

Result: 25 skills, 572 files, ~7.5 MB.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 14:47:12 +08:00

223 lines
9.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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",
}
```