slides v0.13.0
slides 命令及其库:用 Go 解析并渲染 Marp 的 Markdown,并在其上加入 Go 模板和幻灯片类型。已发布 v0.13.0:go install github.com/go-slides/slides/cmd/slides@latest。
语法就是 Marpit 和 Marp Core 的语法,而不是它的某种方言。为 Marp 编写的演示文稿在这里以同样的方式读取;slides expand 还能导出纯粹的 Marp Markdown,因此用下面两项扩展写成的内容不会被锁定。
--- 分隔幻灯片。全局、局部和单页(_class)指令,可写在 front matter 或 HTML 注释中,并沿用 Marp 在幻灯片之间的继承规则。
![bg] 及其尺寸与滤镜、分栏背景,以及 Marp 能识别的各种图片关键字。
页眉、页脚和页码;来自注释的演讲者备注;分步显示的列表;用 <style scoped> 为单张幻灯片写 CSS。
default、gaia 和 uncover,与 Marp 一样用 theme: 选择。
整个演示文稿是一个 text/template,在解析 Markdown 之前求值。因此模板可以生成幻灯片,演示文稿也可以是「数据加版式」。
{{ .title }} 读取 front matter,其中的 data: 映射可存放演示文稿所需的任何其他内容。
输出 --- 的 {{ range }} 就是幻灯片生成器:每个条目、每位讲者、每次发布各一张。
{{ page }} 和 {{ total }} 要等演示文稿分页后才能确定,届时再填入。
围栏代码块和行内代码默认不求值,所以讲 Go 模板的幻灯片也能原样展示模板。include 可引入另一个文件。
kind: section 指定一组预设的局部指令:页眉、页脚、页码、class、背景。kind: 作用于当前及之后的幻灯片,_kind: 只作用于一张。直接写在幻灯片上的指令依然优先。
title、section、content 和 blank,每个都可重新定义。
写在 front matter 的 kinds: 中,或写进一个 kinds YAML 文件,供团队的所有演示文稿引用。
切换类型会清除上一个类型的设置,class 或页脚不会一路跟到下一节。
在线体验就是编译成 WebAssembly 的 go-slides 本身:左边写,右边的幻灯片随之更新。无需安装,也不会向服务器发送任何内容。 在线体验的界面本身为英文。
边输入边在 worker 中渲染,预览随编辑器滚动,缩略地图和一列幻灯片缩略图同步跟随,放映模式带过渡动画。点击 Present 会在第二个窗口打开演讲者视图,附带备注和计时器。
指令、类型和模板函数的补全与说明;问题标注在对应行上;示例演示文稿,涵盖数学公式、图片和背景(把图片文件拖进编辑器即可);文档链接。文件面板管理整个项目:你的主题、类型、数据文件以及拖入的媒体,目录结构与 slides 命令生成的一致。Format 选项卡替你写 Markdown,可撤销:粗体、斜体、下划线、列表、从网格生成表格、幻灯片文字对齐和链接。每个面板都可调整大小。
链接本身就携带演示文稿,压缩在 # 之后。可保存为 HTML、矢量 PDF,或可编辑的 PowerPoint、OpenDocument 演示文稿,全部在浏览器中生成;也可将整个项目下载为 .zip。草稿在刷新后依然保留,只存在你的浏览器里。
marp-cli 靠驱动无头 Chrome 来渲染图片和 PDF,这里则由本组织自己的 Go 库完成。图片和 PDF 始于 v0.1.0;PPTX、数学公式和代码高亮始于 v0.2.0;ODP、自适应标题和 HCL 始于 v0.3.0;矢量 PDF(文字可选中)和 emoji 始于 v0.4.0;v0.5.0 起 PPTX 和 ODP 可编辑,而 marp-cli 的 PPTX 只是图片;v0.6.0 加入 watch、serve、过渡动画和 marp-cli 的选项,v0.7.0 加入演讲者视图。详见文档。
每个演示文稿一个页面,与 Marp 的渲染方式相同:每张幻灯片是一个以 SVG 为框、随窗口缩放的 <section>,附带主题 CSS 和键盘查看器。
对模板求值、把类型展开为单页指令后,写回为纯粹的 Marp Markdown,任何 Marp 工具都能接手。
slides notes 输出演讲者备注;slides kinds 和 slides themes 列出演示文稿可引用的名称。
为整个文件夹的演示文稿提供配置文件:共享的类型、主题、模板数据、HTML 选项和语言。
--images png|jpeg 为每张幻灯片输出一张图片(deck.001.png,…),--image 只输出第一张。由 Go 编写的浏览器引擎 go-webengine 渲染,而不是无头 Chrome。--image-scale 2 以两倍密度渲染。
--pdf 或 -o deck.pdf:每张幻灯片一页,页面尺寸与幻灯片一致,附带幻灯片和标题的书签大纲,由 go-pdfkit 写出。字体内嵌,不访问网络。自 v0.4.0 起页面为矢量:文字可选中、图形清晰,100 张幻灯片仅 758 KiB,而 marp-cli 为 837 KiB(--pdf-raster 仍可每页一张图片)。
--pptx 或 -o deck.pptx:包含演讲者备注和演示文稿元数据,由 go-ooxml 写出。自 v0.5.0 起幻灯片可编辑:文本框使用演示文稿自带的字体(内嵌),还有形状、渐变,图片只存一份;而 marp-cli 输出的是图片(--pptx-raster 保留这种方式)。100 张幻灯片:348 ms、760 KiB,marp-cli 则需 7.8 s、7.2 MiB。
--odp 或 -o deck.odp:带演讲者备注的 OpenDocument 演示文稿;自 v0.5.0 起与 PPTX 一样可编辑(--odp-raster 则每张幻灯片一张图片)。
# <!-- fit --> Title 让标题在一行内撑满幻灯片宽度,页面和所有导出格式中都一样。
:smile: 短代码和 Unicode emoji(😄 👩💻 🇫🇷)会变成 Twemoji 图片,写法与 Marp Core 完全一致,但它们内嵌自 go-icons/twemoji,而非从 CDN 加载,因此无需网络,在页面、图片、PDF、PPTX 和 ODP 中都能绘制。Emoji →
凡是演示文稿接受 YAML 的地方都可以用 HCL2:---hcl front matter、slides.hcl、类型文件和数据文件,从而支持表达式和函数:footer = "${upper(data.company)} · ${page()}/${total()}"。slides expand 会把 front matter 写回为 YAML。HCL →
--watch 只重新构建变动的部分并刷新已打开的页面;--server dir 为一个文件夹的演示文稿提供服务:deck.md 作为页面,deck.md?pdf、?pptx、?png、?notes 按需转换;只监听 127.0.0.1,校验 Host 和 Origin,绝不越出该文件夹;--preview 打开浏览器。拥有 marp-cli 的路由和实时刷新,却不对外开放端口。命令行 →
slides -I decks/ -o site/ 转换文件夹下的所有演示文稿并保持目录结构;可一次处理多个文件、一个文件夹或一个通配模式,-P 个并行。
marp-cli 的 <!-- transition: fade 1s -->,包含 33 种内置过渡,借助浏览器的 View Transition API 播放;附带屏幕控制器;--template bare。
--notes 将演讲者备注输出为文本,--pdf-notes 把备注放到 PDF 页面上,--pdf-outlines 生成书签;--title、--author、--keywords、--url、--og-image、--theme;并会读取 marp-cli 的 .marprc 和 --config-file(JSON、YAML)。
按 o:所有幻灯片排成网格,方向键选择,回车或点击即可跳转;可叠加在页面或演讲者视图之上,沿用 marp-cli 的 URL 和同步机制,无需网络。幻灯片带有标签且可获得焦点;总览关闭时处于 inert 状态。命令行 →
在页面上按 p:当前幻灯片、下一步、你的演讲者备注(已转义,绝不会出现在观众屏幕阅读器读取的内容中)、时钟和计时器,显示在第二个窗口中,两个窗口相互同步。沿用 marp-cli 的 URL 和同步机制,通过 localStorage 实现,无需服务器和网络。每页约 10 KB。命令行 →
```go {lineNumbers} 为代码块编行号({lineNumbers=10} 从 10 开始);在行尾注释中放一个标记(// <1>),再接一个编号列表,就会在该行及其说明上显示编号圆标,页面、图片、PDF、PPTX 和 ODP 中都一样。复制代码时不会带上行号和圆标。数学公式与代码 →
slides 命令及其库:用 Go 解析并渲染 Marp 的 Markdown,并在其上加入 Go 模板和幻灯片类型。已发布 v0.13.0:go install github.com/go-slides/slides/cmd/slides@latest。
文档(Hugo + Hextra),对应 v0.13.0:入门、Marp 兼容性、模板、类型和命令行。源码 →
VS Code 扩展,地位如同 Marp for VS Code 之于 Marp:由编译成 WebAssembly 的 go-slides 在 VS Code 的 Markdown 预览中预览演示文稿(无需二进制,可在 vscode.dev 上使用),经由模板也能与编辑器同步滚动,错误显示在「问题」面板中,补全指令、类型和模板函数,在编辑器旁提供总览视图和演讲者视图,并通过 slides 导出。请安装 GitHub 发布页附带的 .vsix;上架 Marketplace 和 Open VSX 的准备已经就绪,但尚未发布。VS Code →
标志:一张立在支架上的幻灯片,采用文档家族的靛蓝色,并提供各种格式:SVG、PNG、JPG、ICO、ICNS、头像和社交分享图。