ljg-present

演讲铸造器(Outline-Faithful)。基于 orgmode/markdown outline 层级 1:1 视觉化呈现——色块大字、ultra-bold 错位,原文不动只做美化。三档主题色 black/red/yellow(默认 black 或按 filetags 推断),可用 -r/-b/-y 显式覆盖;可用 --cyber 走黑底绿字 cyber-hacker 风。使用时用户会说:'讲这个'、'present'、'做成演讲'、'呈现一下'、'铸成演示'、'做个 slides'、'标语流'、'宣言体'、'slogan'、'manifesto'、'按 outline 美化'。输出单文件 HTML 到 ~/Downloads/。

Skill file

Preview skill file
---
name: ljg-present
description: "演讲铸造器(Outline-Faithful)。基于 orgmode/markdown outline 层级 1:1 视觉化呈现——色块大字、ultra-bold 错位,原文不动只做美化。三档主题色 black/red/yellow(默认 black 或按 filetags 推断),可用 -r/-b/-y 显式覆盖;可用 --cyber 走黑底绿字 cyber-hacker 风。使用时用户会说:'讲这个'、'present'、'做成演讲'、'呈现一下'、'铸成演示'、'做个 slides'、'标语流'、'宣言体'、'slogan'、'manifesto'、'按 outline 美化'。输出单文件 HTML 到 ~/Downloads/。"
user_invocable: true
version: "3.0.0"
---

# 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 节选):

```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`、行间 gap `0.15em`——多行折行也有呼吸空间
- 文字垂直方向:居中
- 页脚:左下页码 + 右下副标题,13px monospace,opacity 0.5

## JSON Schema

```jsonc
{
  "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 渲染)

## 调用流程

1. **获取内容**(文件 → Read / 粘贴 → 直接用 / URL → WebFetch)
2. **解析 outline**:
   - org:识别 `*` `**` 标题层级、`-` `1.` 列表、`|...|` 表格、`*强调*` / `~code~`、`#+begin_example` 块
   - markdown(兼容):`#` `##` 标题、`-` `*` 列表、`|` 表格、`**强调**`、` ``` ` 代码块
   - 纯文本(fallback):按空行分段,每段一页
3. **推断 theme**:显式参数 > `#+filetags:` > 默认 black
4. **应用映射规则**生成 slides 数组:
   - `*` 标题 → emphasis 封面
   - `**`+ 标题 → theme 独占页
   - 段落 → theme 页(按分页规则)
   - 列表 → theme 页(错位 indent + 分页规则)
   - 表格 → theme 页(保留结构 + 分页规则)
   - 强调 → 自动 hl
   - example 块 → 独立 pre 页
5. **Read** `assets/slogan_template.html`(cyber 主题需在模板基础上注入扫描线/HUD/光标 CSS)
6. **替换占位符**:
   - `{{TITLE}}` → 文件 `#+title:` 或显式参数
   - `{{SUBTITLE}}` → `#+author:` `#+date:` 拼接,或留空
   - `{{THEME}}` → 推断或显式参数(black|red|yellow|cyber)
   - `{{SLIDES_JSON}}` → JSON.stringify(slides)
7. **写文件**到 `~/Downloads/{name}.html`(`{name}` 取自 `#+title:` 或文件名,去标点,≤ 20 字)
8. **报告路径** + 翻页键 `→ ← 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,别的不要

## 中文默认

默认输出中文。除非原文是英文且用户要求保留英文。

## 通用交互

- `→` `Space` `Enter` `j` `PageDown`:下一页(含蓝牙翻页笔)
- `←` `k` `PageUp`:上一页(含蓝牙翻页笔)
- `Home`/`End`:跳首末
- `f`/`F`:全屏切换
- 触屏左右滑:翻页
- 点击右半屏:下一页;点击左半屏:上一页

Source

Creator's repository · lijigang/ljg-skills

View on GitHub

Security

Security checks in progress
Results will appear here once audits complete
What this skill can do
Reads your filesConnects to the internetRuns code on your machine
Checked by 3 independent security firms
Does it try to trick the AI?Not yet checkedPending · Gen Agent Trust Hub
Does it sneak in hidden code?Not yet checkedPending · Socket
Does it have known bugs?Not yet checkedPending · Snyk