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>
10 KiB
10 KiB
Layout: agenda — 议程/目录页
幻灯片尺寸: 13.333 × 7.5 英寸 | 边距: 0.6 英寸 | 内容宽: 12.133 英寸
用途
报告目录、会议议程、章节索引页。当前章节高亮,其余章节降调显示。
ASCII 线框图
变体 A:竖向列表(3-6 项)
┌─────────────────────────────────────────────────────────────┐
│ [标题:如"报告目录"] y=0.25 │
│ ▬▬ (accent 装饰线) y=0.90 │
│ │
│ ┌──┐ 01 宏观经济环境分析 p.04 - 15 │
│ │ │ [描述文字,2行,text_muted] │
│ └──┘ │
│ │
│ ┌██┐ 02 ▶ 资产配置策略(当前) p.16 - 27 ←高亮 │
│ │██│ [描述文字,primary色,加粗] │
│ └██┘ │
│ │
│ ┌──┐ 03 固定收益市场 p.28 - 39 │
│ └──┘ │
│ ┌──┐ 04 权益资产展望 p.40 - 52 │
│ └──┘ │
│ ┌──┐ 05 风险管理与压力测试 p.53 - 60 │
│ └──┘ │
└─────────────────────────────────────────────────────────────┘
变体 B:两列布局(5-8 项)
┌─────────────────────────────────────────────────────────────┐
│ [标题] │
│ ▬▬ │
│ │
│ ┌──┐ 01 宏观经济 ┌██┐ 02 ▶资产配置(当前) │
│ └──┘ p.04-15 └██┘ p.16-27 │
│ │
│ ┌──┐ 03 固定收益 ┌──┐ 04 权益资产 │
│ └──┘ p.28-39 └──┘ p.40-52 │
│ │
│ ┌──┐ 05 风险管理 ┌──┐ 06 附录 │
│ └──┘ p.53-60 └──┘ p.61-70 │
│ │
└─────────────────────────────────────────────────────────────┘
精确坐标标注
变体 A(竖向列表,最多 6 项)
固定元素
| 元素 | x | y | w | h | 字号 | 颜色 | 对齐 |
|---|---|---|---|---|---|---|---|
| 页面标题 | 0.60 | 0.25 | 12.133 | 0.60 | title_size-2 | text_dark | 左 |
| 装饰线 | 0.60 | 0.90 | 2.00 | 0.04 | — | accent | — |
列表项布局计算
list_start_y = 1.20
available_h = 6.00 # 7.5 - 1.20 - 0.30(bottom margin)
item_h = available_h / N # N=5时 item_h=1.20", N=6时 item_h=1.00"
每项最小高度 = 0.90"(够放2行文字)
建议最多 6 项
单列表项结构(以 N=5, item_h=1.20" 为例)
| 元素 | x | y(相对本项顶部,item_y) |
w | h | 字号 | 颜色 | 备注 |
|---|---|---|---|---|---|---|---|
| 编号色块(方形) | 0.60 | item_y+0.15 | 0.40 | 0.40 | — | — | 非激活=secondary,激活=primary |
| 编号文字 | 0.60 | item_y+0.15 | 0.40 | 0.40 | caption_size | text_light / text_dark | 居中 |
| 章节编号文字("01") | 1.15 | item_y+0.15 | 0.60 | 0.40 | body_size | text_muted | 左 |
| 章节标题 | 1.80 | item_y+0.15 | 8.50 | 0.45 | subtitle_size | text_dark→primary(激活) | 左,激活时粗体 |
| 页码 | 10.50 | item_y+0.15 | 1.80 | 0.40 | body_size | text_muted | 右 |
| 描述文字 | 1.80 | item_y+0.65 | 9.00 | 0.45 | body_size-1 | text_muted | 左 |
| 分隔细线 | 0.60 | item_y+item_h-0.02 | 12.133 | 0.02 | — | border | — |
激活项(active_index)额外元素:
- 色块:
primary(非激活为secondary) - 标题:
primary,bold=True - 左侧 accent 竖条: x=0.58, y=item_y, w=0.04, h=item_h-0.02, fill=accent
- 行背景: 轻微高亮矩形(x=0.60, y=item_y, w=12.133, h=item_h-0.02, fill=secondary, 透明度低)
变体 B(两列布局,4-8 项)
每列宽计算
col_w = (12.133 - 0.40) / 2 = 5.867" # 两列各5.867",中间间距0.40"
col_x[0] = 0.60
col_x[1] = 0.60 + 5.867 + 0.40 = 6.867
row_count = ceil(N / 2)
available_h = 5.80 # 1.20 ~ 7.00
row_h = available_h / row_count
单格结构(以 col_x, row_y 为基准)
| 元素 | x | y | w | h | 字号 | 颜色 |
|---|---|---|---|---|---|---|
| 格内色块(圆角矩形) | col_x | row_y | 5.867 | row_h-0.20 | — | card_bg / secondary |
| 编号色块 | col_x+0.15 | row_y+0.20 | 0.45 | 0.45 | — | primary / secondary |
| 编号文字 | col_x+0.15 | row_y+0.20 | 0.45 | 0.45 | caption_size | text_light |
| 章节标题 | col_x+0.75 | row_y+0.20 | 4.70 | 0.50 | body_size+2 | text_dark / primary |
| 页码 | col_x+0.75 | row_y+0.75 | 4.70 | 0.35 | caption_size | text_muted |
| 描述 | col_x+0.75 | row_y+1.10 | 4.70 | 0.40 | caption_size | text_muted |
数据接口
data = {
"title": str, # 页面标题,如 "报告目录"
"active_index": int, # 当前激活章节(0-indexed),-1 表示无激活
"variant": "list" | "grid", # 布局变体
"items": [
{
"number": str, # 编号,如 "01", "02"(2字符)
"title": str, # 章节标题(15字以内)
"desc": str, # 可选,描述(25字以内)
"page_range": str, # 可选,页码范围,如 "p.04-15"
},
... # 最多 8 项(list变体最多6项)
],
}
实现伪代码
def layout_agenda(slide, data, theme):
m = theme["margin"]
sw, sh = 13.333, 7.5
cw = sw - 2 * m
set_slide_bg(slide, theme["bg_light"])
add_text(slide, data["title"],
x=m, y=0.25, w=cw, h=0.60,
font_size=theme["title_size"]-2, color=theme["text_dark"],
bold=True, font_name=theme["header_font"])
add_rect(slide, m, 0.90, 2.0, 0.04, fill=theme["accent"])
items = data["items"]
N = len(items)
active = data.get("active_index", -1)
if data.get("variant", "list") == "list":
list_y = 1.20
item_h = max(0.90, (sh - list_y - 0.30) / N)
for i, item in enumerate(items):
iy = list_y + i * item_h
is_active = (i == active)
# 激活行高亮背景
if is_active:
add_rect(slide, m, iy, cw, item_h-0.02,
fill=theme["secondary"], alpha=30)
# 左侧 accent 竖线
add_rect(slide, m-0.02, iy, 0.04, item_h-0.02,
fill=theme["accent"])
# 编号色块
block_color = theme["primary"] if is_active else theme["secondary"]
add_rect(slide, m, iy+0.15, 0.40, 0.40, fill=block_color)
add_text(slide, item["number"],
x=m, y=iy+0.15, w=0.40, h=0.40,
font_size=theme["caption_size"],
color=theme["text_light"] if is_active else theme["text_dark"],
align="center", bold=True, font_name=theme["body_font"])
# 章节标题
title_color = theme["primary"] if is_active else theme["text_dark"]
add_text(slide, item["title"],
x=1.20, y=iy+0.15, w=8.50, h=0.45,
font_size=theme["subtitle_size"], color=title_color,
bold=is_active, font_name=theme["header_font"])
# 页码
if item.get("page_range"):
add_text(slide, item["page_range"],
x=10.50, y=iy+0.15, w=1.80, h=0.40,
font_size=theme["body_size"], color=theme["text_muted"],
align="right", font_name=theme["body_font"])
# 描述
if item.get("desc"):
add_text(slide, item["desc"],
x=1.20, y=iy+0.65, w=9.30, h=0.45,
font_size=theme["body_size"]-1, color=theme["text_muted"],
font_name=theme["body_font"])
# 分隔线
add_rect(slide, m, iy+item_h-0.02, cw, 0.02, fill=theme["border"])
设计要点
- 激活章节 用三种视觉手段叠加:左侧 accent 竖线 + 行背景浅色 + 标题 primary 加粗
- 编号色块 激活时
primary,非激活时secondary(浅色),颜色差异明显 - 页码 右对齐,浅色,非核心信息,不抢焦点
- 分隔线 很细(0.02"),
border色,营造整洁感不显突兀 - 列表变体 最多 6 项;超过 6 项改用
grid变体
测试数据示例
data = {
"title": "报告目录",
"active_index": 1, # 第二章节为当前阅读位置
"variant": "list",
"items": [
{"number": "01", "title": "宏观经济环境分析", "desc": "GDP增长、通胀、货币政策", "page_range": "p.04-15"},
{"number": "02", "title": "资产配置策略", "desc": "大类资产配置建议与逻辑", "page_range": "p.16-27"},
{"number": "03", "title": "固定收益市场", "desc": "利率走势与债券策略", "page_range": "p.28-39"},
{"number": "04", "title": "权益资产展望", "desc": "A股与港股配置机会", "page_range": "p.40-52"},
{"number": "05", "title": "风险管理与压力测试", "desc": "尾部风险与情景分析", "page_range": "p.53-60"},
],
}