科研技能库/演示文稿
科研效率
未发现用户侧风险

演示文稿

创建、管理、验证、预览和导出 HTML 演示文稿幻灯片(1920x1080)。当需要构建幻灯片、导出为 PDF/PPTX 或在浏览器中预览时加载此技能。

文件预览

9 个文件
scripts
SKILL.md
3.6 KB · 可预览
---
name: presentations
description: "Create, manage, validate, preview, and export HTML presentation slides (1920x1080). Load this skill when you need to build a slide deck, export to PDF/PPTX, or preview slides in a browser."
---

# Presentations

1920x1080 HTML slide decks. Inter font, D3.js, and Chart.js pre-loaded.

```
SCRIPT=~/.opencode/skills/GENERAL-KNOWLEDGE-WORKER/presentations/presentation.ts
```

## Commands

```bash
# Create a slide (content = HTML body only, no html/head/body tags)
bun run "$SCRIPT" create_slide '{"presentation_name":"my-deck","slide_number":1,"slide_title":"Intro","content":"<div style=\"...\">...</div>","presentation_title":"My Deck"}'

# List slides
bun run "$SCRIPT" list_slides '{"presentation_name":"my-deck"}'

# Delete a slide
bun run "$SCRIPT" delete_slide '{"presentation_name":"my-deck","slide_number":2}'

# List all presentations
bun run "$SCRIPT" list_presentations

# Delete a presentation
bun run "$SCRIPT" delete_presentation '{"presentation_name":"my-deck"}'

# Validate dimensions (Playwright)
bun run "$SCRIPT" validate_slide '{"presentation_name":"my-deck","slide_number":1}'

# Export to PDF
bun run "$SCRIPT" export_pdf '{"presentation_name":"my-deck"}'

# Export to PPTX
bun run "$SCRIPT" export_pptx '{"presentation_name":"my-deck"}'

# Generate viewer HTML (no server)
bun run "$SCRIPT" preview '{"presentation_name":"my-deck"}'

# Start on-demand viewer server (port 3210 by default)
bun run "$SCRIPT" serve '{"port":3210}'
```

## Viewer Server

The viewer is **not** a persistent background service. Start it on-demand with the `serve` action when you need to preview slides:

```bash
bun run "$SCRIPT" serve '{"port":3210}'
```

This starts a Bun server on port 3210 that serves all presentations under the `presentations/` directory. When you need it to keep running, launch the same command in `pty_spawn`.

URL scheme:
- `http://localhost:3210/` — index listing all presentations
- `http://localhost:3210/presentations/<name>/` — viewer for that deck
- `http://localhost:3210/presentations/<name>/slide_01.html` — raw slide file

After starting the server, show the URL to the user via `show`:
```
show(action="show", type="url", url="http://localhost:3210/presentations/<name>/", title="Slide Preview")
```

## Slide HTML Rules

- `content` is the `<body>` content only — wrapper injected automatically
- Canvas: 1920×1080px, `box-sizing: border-box`, max 40px padding
- Inter pre-loaded. D3.js v7 + Chart.js 3.9.1 loaded async
- Wrap Chart.js init in `window.addEventListener('load', () => { ... })`
- Images → `presentations/images/` → reference as `../images/filename`

## Layout Patterns

**Title slide:**
```html
<div style="width:1920px;height:1080px;background:linear-gradient(135deg,#1e1b4b,#312e81);
     color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;
     box-sizing:border-box;padding:100px;text-align:center;">
  <div style="font-size:24px;color:#a5b4fc;letter-spacing:4px;text-transform:uppercase;margin-bottom:32px;">SUBTITLE</div>
  <h1 style="font-size:80px;font-weight:800;margin:0;line-height:1.1;">Title</h1>
</div>
```

**Two column:**
```html
<div style="width:1920px;height:1080px;background:#0f172a;color:#f8fafc;
     display:grid;grid-template-columns:1fr 1fr;gap:80px;
     box-sizing:border-box;padding:80px;align-items:center;">
  <div><!-- left --></div><div><!-- right --></div>
</div>
```

**Typography:** Title 64–80px/700+, Subtitle 36–48px, Body 28–36px, min 18px

## Workflow

```
create_slide × N → validate_slide → serve → show viewer URL → export_pdf / export_pptx
```

SKILL.md

元数据
namepresentations
description创建、管理、验证、预览和导出 HTML 演示文稿幻灯片(1920x1080)。当需要构建幻灯片、导出为 PDF/PPTX 或在浏览器中预览时加载此技能。

演示文稿

1920x1080 HTML 幻灯片。预加载 Inter 字体、D3.js 和 Chart.js。

text
SCRIPT=~/.opencode/skills/GENERAL-KNOWLEDGE-WORKER/presentations/presentation.ts

命令

bash
# Create a slide (content = HTML body only, no html/head/body tags)
bun run "$SCRIPT" create_slide '{"presentation_name":"my-deck","slide_number":1,"slide_title":"Intro","content":"<div style=\"...\">...</div>","presentation_title":"My Deck"}'

# List slides
bun run "$SCRIPT" list_slides '{"presentation_name":"my-deck"}'

# Delete a slide
bun run "$SCRIPT" delete_slide '{"presentation_name":"my-deck","slide_number":2}'

# List all presentations
bun run "$SCRIPT" list_presentations

# Delete a presentation
bun run "$SCRIPT" delete_presentation '{"presentation_name":"my-deck"}'

# Validate dimensions (Playwright)
bun run "$SCRIPT" validate_slide '{"presentation_name":"my-deck","slide_number":1}'

# Export to PDF
bun run "$SCRIPT" export_pdf '{"presentation_name":"my-deck"}'

# Export to PPTX
bun run "$SCRIPT" export_pptx '{"presentation_name":"my-deck"}'

# Generate viewer HTML (no server)
bun run "$SCRIPT" preview '{"presentation_name":"my-deck"}'

# Start on-demand viewer server (port 3210 by default)
bun run "$SCRIPT" serve '{"port":3210}'

查看器服务器

查看器不是持久后台服务。按需使用 serve 操作启动:

bash
bun run "$SCRIPT" serve '{"port":3210}'

这将启动一个监听 3210 端口的 Bun 服务器,服务 presentations/ 目录下的所有演示文稿。如需保持运行,请在 pty_spawn 中启动相同命令。

URL 方案:

  • http://localhost:3210/ — 列出所有演示文稿的索引页
  • http://localhost:3210/presentations/<name>/ — 该演示文稿的查看器
  • http://localhost:3210/presentations/<name>/slide_01.html — 原始幻灯片文件

启动服务器后,通过 show 向用户显示 URL:

text
show(action="show", type="url", url="http://localhost:3210/presentations/<name>/", title="幻灯片预览")

幻灯片 HTML 规则

  • content 仅为 <body> 内容 — 包装会自动注入
  • 画布:1920×1080px, box-sizing: border-box, 最大内边距 40px
  • 已预加载 Inter 字体。D3.js v7 与 Chart.js 3.9.1 异步加载
  • 将 Chart.js 初始化包裹在 window.addEventListener('load', () => { ... }) 中
  • 图片 → presentations/images/ → 引用为 ../images/filename

布局模式

标题幻灯片:

html
<div style="width:1920px;height:1080px;background:linear-gradient(135deg,#1e1b4b,#312e81);
     color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;
     box-sizing:border-box;padding:100px;text-align:center;">
  <div style="font-size:24px;color:#a5b4fc;letter-spacing:4px;text-transform:uppercase;margin-bottom:32px;">SUBTITLE</div>
  <h1 style="font-size:80px;font-weight:800;margin:0;line-height:1.1;">Title</h1>
</div>

两栏:

html
<div style="width:1920px;height:1080px;background:#0f172a;color:#f8fafc;
     display:grid;grid-template-columns:1fr 1fr;gap:80px;
     box-sizing:border-box;padding:80px;align-items:center;">
  <div><!-- left --></div><div><!-- right --></div>
</div>

排版: 标题 64–80px/700+, 副标题 36–48px, 正文 28–36px, 最小 18px

工作流

text
create_slide × N → validate_slide → serve → 显示查看器 URL → export_pdf / export_pptx