直接导出为 slides 幻灯片的核心是先在 notebook 中为每个 cell 设置 slide 类型(如 slide、sub-slide 等),再执行 jupyter nbconvert --to slides notebook.ipynb;必须保存 notebook 以持久化元数据,且需通过 --reveal-prefix 指定 reveal.js 路径(推荐 cdn),并用本地服务器(如 python -m http.server)打开 html 文件,避免 file:// 协议导致 js 失效。

直接导出为 Slides 幻灯片,核心就两步:先在 Notebook 里标记 cell 类型,再用 jupyter nbconvert 命令生成 HTML。不装额外插件也能跑,但漏掉 cell 类型设置或路径配置错误,生成的 HTML 就不是幻灯片——而是普通网页。
怎么给 cell 设置 Slide 类型(必须做)
这是整个流程的前提。没设类型,nbconvert --to slides 会把所有 cell 当成普通内容堆在一起,不会分页。
- 在 Jupyter Notebook 界面顶部菜单栏点击 View → Cell Toolbar → Slideshow,右上角会出现
Slide Type下拉框 - 每个 cell 都要手动选一个类型:
Slide(主页)、Sub-Slide(上下翻页的子页)、Fragment(按空格逐步显示)、Skip(不导出)、Notes(仅演讲者备注) - 改完必须 保存 notebook(
Ctrl+S或File → Save and Checkpoint),否则nbconvert读不到这些元数据
jupyter nbconvert --to slides 的实际用法和常见报错
这条命令本身不依赖 jupyter2slides 或 RISE,是 nbconvert 内置的 SlidesExporter,但默认用的是老版本 reveal.js,容易报 Reveal is not defined。
- 基础命令:
jupyter nbconvert --to slides your_notebook.ipynb,会在同目录生成your_notebook.slides.html - 如果报
Reveal is not defined,说明 HTML 里没加载 reveal.js。解决方法:加--reveal-prefix指向本地或 CDN 路径,例如:--reveal-prefix "https://unpkg.com/reveal.js@4.4.0" - 若想用自定义主题或样式,不要硬改 HTML,而是通过
--template指向 jinja2 模板文件,比如:--template /path/to/my_reveal.tpl - 注意:命令运行时当前工作目录必须能访问到 notebook 文件,相对路径别写错;
.ipynb后缀不能省
为什么生成的 HTML 打不开或样式错乱
本质是静态资源路径问题。nbconvert 生成的 HTML 默认假设 reveal.js 在本地 reveal.js-3.1.0/ 目录下,但新版 reveal.js 结构变了,CDN 地址也不同。
- 最简方案:用 CDN 替代本地路径,命令里加
--reveal-prefix "https://unpkg.com/reveal.js@4.4.0"(版本号建议锁定) - 如果离线使用,得提前下载 reveal.js 到项目目录,比如
./reveal.js/,然后用--reveal-prefix "reveal.js" - 生成的 HTML 文件双击打开会因浏览器安全策略禁用 JS(
file://协议),必须用 HTTP 服务启动:python -m http.server 8000,然后访问http://localhost:8000/your_notebook.slides.html - 别用
--to html再手动改——它不带 slide 分页逻辑,跟--to slides生成的结构完全不同
真正卡住人的地方,往往不是命令敲错,而是 cell 类型没存、reveal.js 路径配错、或者双击 HTML 白屏却不查控制台报错。导出前确认三点:cell 类型已设且 notebook 已保存、命令里带了 --reveal-prefix、HTML 是通过本地服务器打开的。











