ljg-present

star 5.9k

演讲铸造器(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/。

lijigang By lijigang schedule Updated 5/7/2026

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

#+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

{
  "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:全屏切换
  • 触屏左右滑:翻页
  • 点击右半屏:下一页;点击左半屏:上一页
Install via CLI
npx skills add https://github.com/lijigang/ljg-skills --skill ljg-present
Repository Details
star Stars 5,911
call_split Forks 689
navigation Branch main
article Path SKILL.md
More from Creator