SKILL.md
ljg-present: 演讲铸造器
把 outline 铸成色块——视觉化渲染器,把舞台还给讲的人。
这不是什么
- 不是 manifesto 提炼器——不抽"那句话",不写"完整断言句",不重组顺序
- 不是高桥流——不削词到单字
- 不是 deck-style——不是企业 PPT 那种规整版式
这是什么
Outline → 视觉化渲染器:
- 输入 = orgmode 文件(
***层级 + 列表 + 表格 + 强调)
- 输出 = 视觉美化的 slogan-style HTML,1:1 保留 outline 结构
- 不抽提、不重写、不浓缩——只决定怎么把这一行/这一节渲染为页面
视觉语言(参考审美:Felipe Franco / BIG STUDIOS 的 manifesto 美学):
- 整篇一个主题色——red/black/yellow 三选一
- left-aligned 舞台美学——文字左对齐,超大字号自然撑屏
- 超大字 ultra-bold——单字 70vmin、长句 11vmin
- 多行错位——按 outline 嵌套深度自动 indent 0/1/2
- 关键词自动换色——
*强调*~code~自动 hl
- 章节切换打节拍——一级标题
*→ emphasis 封面页,其余 → theme 页
核心哲学
Outline 是真理。Skill 是渲染器。
不动内容是一条铁律:
- 标题不改字
- 段落不改字
- 列表项不改字
- 表格不改结构
- 顺序不重排
唯一允许的"动"是:物理分页(一段太长拆成多页),并保持视觉一致性。
Orgmode → 页面映射规则
标题层级
Org 元素
页面
* 一级标题
独占 emphasis 封面页(accent 底色)
** 二级标题
独占 theme 页(大字标题独占一页)
*** 三级标题+
独占 theme 页(字号降一档)
内容元素
Org 元素
页面行为
段落
theme 页,按句号/换行/字数分页
- 列表项
theme 页,每项一行,indent 按嵌套深度(0/1/2)
1. 编号列表
同上,保留序号前缀
嵌套列表
子项 indent +1(最多 indent=2)
| 表格 |
单页或多页,保留表格结构(首行加粗)
*强调*
自动 hl: true
~code~ 或 =verbatim=
自动 hl: true
「」 内的关键词
视觉单元(保留括号,不强制 hl)
引用 > ...
theme 页,indent 1 显示
分隔符 -----
独立 emphasis 休止页(无内容,纯色块)
#+begin_example 块
独立 pre 页(monospace 渲染 ASCII art)
文件级元数据
Org 元素
用途
#+title:
→ JSON title(浏览器 tab)
#+author: 或 #+date:
→ JSON subtitle(页脚右下)
#+filetags:
用于推断 theme(见下)
#+identifier:
忽略
Theme 推断
优先级:显式参数 > filetags 推断 > 默认 black
显式覆盖(参数):
-r/--theme=red→ red
-b/--theme=black→ black
-y/--theme=yellow→ yellow
--cyber→ cyber-hacker(黑底绿字 + CRT 扫描线 + HUD + 终端光标)
filetags 自动推断:
filetags 含
theme
调性
:share: :talk: :manifesto: :keynote:
red
宣言、号召
:essay: :think: :learn: :note:
black
沉思、论证
:critique: :warn: :rant:
yellow
反讽、警觉
都没有
black
默认沉思调
分页规则(内容多时)
铁律:拆分后保持视觉一致性。同一逻辑块的页用同样的字号档位/底色/缩进规则。
情形
拆法
段落 ≤ 30 字
单页
段落 30-80 字,含多句号
每句一页(每页 medium 档字号)
段落 > 80 字
按 ~30 字一页拆,加 ⋯ 续标
列表 ≤ 4 项
单页全部展示(错位 indent)
列表 5-8 项
拆 2 页,每页 3-4 项(保持每页项数接近)
列表 > 8 项
拆多页,每页 4 项
嵌套列表(如 4 革命×4 属性)
父项 1 页 + 每个子项独立成组(标题 1 页 + 子项 1 页)
表格 ≤ 6 行
单页
表格 > 6 行
拆多页,每页保留表头
一致性检查:拆完后扫一遍——同源拆分的页要长得像同一种东西,字号/缩进/底色都对齐。
自动 emphasis(节拍)
- 所有
* 一级标题→ emphasis 封面页
- 文件首页(标题或第一行非空文本)→ emphasis 开场页(如已是一级标题则合并)
- 文件末页(最后一段或最后一项)→ emphasis 收束页
-----分隔符 → emphasis 休止页
- 其他全是 theme 页
不要为了凑节奏强行加 emphasis——一级标题就是天然的章节断点。
自动 hl(高亮)
- org
*强调*→hl: true
- org
~code~=verbatim=→hl: true
- emphasis 页内的 hl 自动忽略(CSS
color: inherit)
映射举例
输入(org 节选):
#+title: 美团分享
#+filetags: :share:
* AI
** 为什么说 AI 是一次革命?
人类革命:能力让渡的层级跃迁
- 「人之为人」重新定义
- 社会组织重排
映射结果:
#
类型
内容
来源
1
emphasis
「AI」
* AI(一级标题封面)
2
theme
「为什么说 AI 是一次革命?」
** ... 二级标题独占页
3
theme
「人类革命:能力让渡的层级跃迁」
段落,单句
4
theme
两行错位:「『人之为人』重新定义」/「社会组织重排」
列表 ≤4 项一页
theme 自动选 red(filetags :share:),title=美团分享。
视觉规范
色板(仅 4 色)
--c-black: #1A1A1A
--c-red: #E63956
--c-yellow: #FFD400
--c-white: #FFFFFF
--c-gold: #FFE082
主题映射(一篇只用 ≤3 色)
theme
默认页
emphasis 页
hl 色(仅 theme 页)
black 沉思
黑底白字
红底白字
红色 #E63956
red 宣言
红底白字
黑底白字
柔金黄 #FFE082
yellow 反讽
黄底黑字
黑底白字
红色 #E63956
cyber 终端
黑底矩阵绿
绿底黑字
白色 #FFFFFF(带绿光 + CRT 扫描线 + 顶部 HUD)
字体栈
"Helvetica Neue", "Arial Black", "Inter", "PingFang SC", "Heiti SC", -apple-system, sans-serif
font-weight: 900
letter-spacing: -0.05em
cyber 主题额外字体(用于 HUD/footer/pre):
"JetBrains Mono", "Fira Code", "IBM Plex Mono", "Source Code Pro", "Menlo", monospace
字号自适应
按本页"最长那一行"的字符数(CJK 字符按 1.8 计权)自动分档:
档位
字符数
字号
single
≤ 2
70vmin
short
3-6
48vmin
medium
7-14
28vmin
long
15-26
16vmin
xlong
27+
10vmin
多行页自动降一档。
排版
- 内容区域 padding 6vmin 7vmin(贴近边缘,让大字有撑满感)
- lines 块水平居中 + 行内左对齐——
align-items: center让 lines 块整体在屏幕水平居中(消除 16:9 右侧空白),但每一行的文字仍是 left-aligned 起始,indent 0/1/2 在块内制造错位
- letter-spacing
-0.05em——ultra-bold 应有的字字挤压感
- line-height
1.05、行间 gap0.15em——多行折行也有呼吸空间
- 文字垂直方向:居中
- 页脚:左下页码 + 右下副标题,13px monospace,opacity 0.5
JSON Schema
{
"theme": "black|red|yellow|cyber", // 主题色(必选,决定整篇调性)
"title": "演讲标题(浏览器 tab)",
"subtitle": "副标题/品牌(页脚右下,可选)",
"slides": [
// 默认 theme 页
{
"lines": [ // 1-N 行
{
"indent": 0, // 0/1/2 缩进档(按 outline 嵌套深度)
"align": "left|center|right", // 可选,默认 left
"chunks": [ // 行内片段
{"t": "句子前段"},
{"t": "高亮词", "hl": true}, // 仅 theme 页生效
{"t": "句子后段"}
]
}
]
},
// emphasis 页(accent 底色,整页就是高亮,不允许 inline hl)
{ "emphasis": true, "lines": [...] },
// pre 页(ASCII art / 预格式化块)
{ "preTitle": "diagram_name", "pre": "...preformatted text..." }
]
}
字段省略约定:
- 不写
emphasis= 默认 theme 页
- emphasis 页内
chunks[].hl: true会被忽略
- 写
pre字段则该页为 ASCII art 页(monospace 渲染)
调用流程
- 获取内容(文件 → Read / 粘贴 → 直接用 / URL → WebFetch)
- 解析 outline:
- org:识别
***标题层级、-1.列表、|...|表格、*强调*/~code~、#+begin_example块
- markdown(兼容):
###标题、-*列表、|表格、**强调**、代码块
- 纯文本(fallback):按空行分段,每段一页
- 推断 theme:显式参数 >
#+filetags:> 默认 black
- 应用映射规则生成 slides 数组:
*标题 → emphasis 封面
**+ 标题 → theme 独占页
- 段落 → theme 页(按分页规则)
- 列表 → theme 页(错位 indent + 分页规则)
- 表格 → theme 页(保留结构 + 分页规则)
- 强调 → 自动 hl
- example 块 → 独立 pre 页
- Read
assets/slogan_template.html(cyber 主题需在模板基础上注入扫描线/HUD/光标 CSS)
- 替换占位符:
{{TITLE}}→ 文件#+title:或显式参数
{{SUBTITLE}}→#+author:#+date:拼接,或留空
{{THEME}}→ 推断或显式参数(black|red|yellow|cyber)
{{SLIDES_JSON}}→ JSON.stringify(slides)
- 写文件到
~/Downloads/{name}.html({name}取自#+title:或文件名,去标点,≤ 20 字)
- 报告路径 + 翻页键
→ ← Space F Home End
品味准则
- outline 是真理——不动字、不抽提、不重写、不重排
- 一级标题 = emphasis 封面——天然的章节断点,自动节拍
- 二级标题 = 独占 theme 页——给标题应有的重量
- 列表错位——靠 indent 0/1/2 体现 outline 嵌套深度
- **
*强调*自动 hl**——尊重作者的标记意图
- 拆页保持一致——同一逻辑块的视觉处理一致(字号档位/缩进/底色)
- 页脚保留——页码 + 副标题不要删,那是品牌的冷气
- 左对齐不居中——VACAT 美学的灵魂
禁区
- 不抽 manifesto——不要"找钉子",作者已经写好了 outline
- 不写新句子——不要"完整断言句"重组
- 不重排顺序——按 outline 顺序输出,作者怎么排就怎么呈现
- 不删内容——所有列表项/段落都要呈现,不挑挑拣拣
- 不放图片/图标——色块就是图(cyber 主题的 HUD/扫描线除外,那是主题的一部分)
- 不用过渡动画——硬切
- 不在 emphasis 页用 inline hl——emphasis 整页就是高亮,再 hl 就乱了
- 不混用多个 theme——一篇一个气质,不切换
- 不要副标题字过大——页脚 13px,气场不能抢主标
- 不擅自加 emphasis——只有一级标题、首末页、
-----是 emphasis,别的不要
中文默认
默认输出中文。除非原文是英文且用户要求保留英文。
通用交互
→SpaceEnterjPageDown:下一页(含蓝牙翻页笔)
←kPageUp:上一页(含蓝牙翻页笔)
Home/End:跳首末
f/F:全屏切换
- 触屏左右滑:翻页
- 点击右半屏:下一页;点击左半屏:上一页