1仕組みと動作原理
テンプレート全体の中核となる前提は「アウトラインこそが真理であり、スキルはレンダラーである」という点です。文言や順序の変更を固く禁じ、唯一許可される操作は長すぎる段落の物理的な改ページのみです。これにより「AI による要約・リライト」で最も頻発する情報欠落を根本から排除します。
- 标题不改字, 段落不改字, 列表不改字, 顺序不重排
Markdown 要素からスライド形式への変換は 1 対 1 のマッピング表に基づきます。H1 → emphasis カバーページ、H2 → 単独 theme ページ、段落は文字数に応じた区分、リストは項目数による分割、`---` → 単色ブレイクページ、`**強調**` → hl ハイライトとなります。
| `# 一级标题` | 独占 **emphasis** 封面页(accent 底色, 通常单字/单短词) |
テーマカラーはドキュメントのトーンから推定され、1 つのスライドにつき 1 色のみ適用可能です。デフォルトの black(内省・論証)、マニフェスト向けの red、皮肉・批評向けの yellow があり、各テーマには標準背景色、emphasis ページ背景色、hl カラーが紐づけられています。
| 沉思 / 论证 / 笔记(默认) | **black** | 黑底白字 | 红底白字 | 红 `#E63956` |
フォントサイズは手動指定ではなくランタイムで計算されます。SKILL.md で CJK を 1.8 係数とする重み付けテーブルを定義し、骨格 JS の lengthTier() が「最長行の文字数 +(行数 - 1)× 4」から clamp 階層を判定します。サンプルでは 8 ページに対して single/short/medium/long がそれぞれ算出されます。
| single | ≤2 | `clamp(320px, 80vmin, 1100px)` |
SKILL.md にはインライン CSS と JS を含む完全かつ実行可能な HTML 骨格が埋め込まれており、骨格コードは変更せず SLIDES / title / subtitle / data-theme のみを埋めるよう明示されています。サンプルファイルはその完成形です。
完整 HTML 骨架(agent 应**复用 CSS 与 JS 不要改**, 只填 SLIDES / title / subtitle / data-theme):
骨格自体に完備されたインタラクションを内蔵しています。キーボード(→/←/space/Enter/j/k/PageUp/PageDown/Home/End/F で全画面)、スワイプ操作(±40px の閾値)、左右画面クリックでのページ送り、さらに SLIDES に注入される全テキストを escapeHtml() でエスケープします。
return c.hl ? '<span class="hl">' + t + '</span>' : t;
サンプルは「同一アウトラインの忠実なレンダリング」です。example.md には 8 つのパラグラフからなる AI スピーチアウトライン(`---` 区切りを 1 つ含む)が記載され、example.html の SLIDES も正確に 8 項目となっています。冒頭の単語「AI」の emphasis ページは `# AI` に対応し、区切り線は空の emphasis 休憩ページ、末尾は問いかけで締めくくられます。
{ emphasis: true, lines: [] },
外部リソースの利用を明示的に禁止しています。骨格には CDN や外部フォントリンクが一切含まれず、システムフォント(Helvetica Neue / Arial Black / PingFang SC)を利用するため、生成物はオフライン環境でダブルクリックして直接開くことができます。
**不要外链 CDN, 不要外部资源**。
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| package | 无外部依赖:字体走系统栈(Helvetica Neue / Arial Black / PingFang SC),骨架不引任何 CDN |
| network | 宿主共享指令声明的 Tailwind CDN(宿主侧默认,本模板显式禁止使用) |
| network | 第三方 skill 来源标注(frontmatter example_source_url,仅作出处记录,非运行时调用) |
4推奨統制措置と判定根拠
- SKILL.md: 純粋なプロンプト指示および規則テキストのみで構成され、スクリプト実行や外部への影響はありません。
5二重目の独立検証
- [ok] 「1:1 铸页」是否在示例中真实成立 — example.md 的结构(# AI / ## 两个二级标题 / 两个列表 / --- / ## 收束问句)与 example.html 的 8 项 SLIDES 逐项对应:首项 emphasis 单字 AI、列表项按 indent:1 渲染、--- 变成空 lines 的 emphasis 休止页、末页 emphasis 收束。
- [ok] 字号档位是否由代码而非人工决定 — lengthTier() 以「最长行字符数 +(行数-1)×4」判断档位,lineCharLen() 对 CJK 字符计权 1.8,与 SKILL.md 的档位表一致。
- [ok] 「不要外链 CDN」是否被示例遵守 — example.html 与 SKILL.md 各自的 http(s):// 计数均为 0;SKILL.md 内有 2 处 github.com 链接(frontmatter example_source_url 与正文致谢的上游 ljg-skills 出处),属第三方来源标注而非运行时资源。内嵌骨架本身不含任何 CDN / 字体外链,字体走系统栈,产物可离线双击打开。
- [ok] 注入面:SLIDES 文本是否被转义 — escapeHtml() 对 & < > " ' 做实体转义,再拼进 innerHTML;SLIDES 内容来自用户大纲,属必要防护。
- [discrepancy] example.html 的 <script> 是否属模板自带可执行代码 — 是(本批 deck 示例里唯一有 1 个 <script> 的目录)。该脚本是 SKILL.md 内嵌骨架的一部分(翻页交互 + 字号分档),只会操作 DOM 与读取键盘/触摸事件,无网络请求、无存储、无凭证访问;展示层按「模板自带脚本」理解即可,不影响判档(仍为 green:无外发、无写盘)。
- [ok] pin commit 与路径 — HEAD = 553ed98c283f9c0f489902d035416a972d6a9699;skill.path = next/src/lib/templates/skills/deck-ljg-present,含 SKILL.md。
- [discrepancy] README 收录一致性 — README 的 deck 表列出 20 个 deck-* 模板,但没有 deck-ljg-present(该 pin 下 deck-* 实为 21 个)。文档滞后,不影响模板行为。
6結論
d549ea071c2237ec…