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>
223 lines
9.9 KiB
Markdown
223 lines
9.9 KiB
Markdown
# 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",
|
||
}
|
||
```
|