jupyter nbconvert 是唯一可靠、可复现的导出方式,直接生成独立 html 文件,不依赖 jupyter 服务或浏览器插件;需显式指定 --reveal-prefix 以正确加载 reveal.js(cdn 或本地路径),并提前在 notebook 中设置 cell 的 "slideshow": {"slide_type": "..."} 元数据,否则无法正常分页播放。

jupyter nbconvert 是唯一可靠、可复现的导出方式,直接生成独立 HTML 文件,不依赖 Jupyter 服务或浏览器插件。
用 nbconvert 命令行导出为 Reveal.js 幻灯片
这是最稳定、最可控的方式。关键不是“点菜单下载”,而是调用底层转换器:
-
jupyter nbconvert --to slides your_notebook.ipynb—— 最简命令,但生成的 HTML 会缺 Reveal.js 脚本,打不开 - 必须显式指定
--reveal-prefix,告诉它从哪加载 Reveal.js:jupyter nbconvert --to slides your_notebook.ipynb --reveal-prefix "https://cdn.jsdelivr.net/npm/reveal.js@4" - 如果离线使用,可下载 Reveal.js 到本地(比如
./reveal.js),然后用相对路径:--reveal-prefix "reveal.js"(注意路径需与输出 HTML 同级) - 输出文件名默认是
your_notebook.slides.html,想自定义用--output mytalk,结果就是mytalk.slides.html
为什么 RISE 插件导出的 HTML 不能直接当幻灯片用
RISE 的“Download as → Reveal.js Slides”选项实际只是调用 nbconvert,但它默认用的是旧版内置路径(如 reveal.js-3.1.0),而新版 Reveal.js(v4+)结构已变,脚本路径、CSS 类名、初始化方式都不同——导致页面白屏或导航失效。
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
- 现象:
Uncaught ReferenceError: Reveal is not defined或幻灯片无法翻页 - 根本原因:RISE 自带的导出逻辑没同步更新 Reveal.js 版本,也不允许你传参覆盖
--reveal-prefix - 解决办法:绕过 UI,手动用
nbconvert命令,自己控制版本和路径
Slide 类型设置必须提前在 Notebook 里完成
nbconvert 不读取你“当前是否开着 RISE”,它只解析 .ipynb 文件里的元数据字段 "slideshow": {"slide_type": "slide"}。没设,就全堆成一页。
- 在 Jupyter Notebook(非 Lab)中:View → Cell Toolbar → Slideshow,每个 cell 右上角选类型
- 在 JupyterLab 中:打开右侧 Property Inspector → Slide Type 下拉框选择(JupyterLab 3.6+ 原生支持,无需 RISE)
- 五种类型含义:
slide(新页)、subslide(垂直页)、fragment(逐步显示)、skip(跳过)、notes(演讲者备注) - 检查方法:用文本编辑器打开 .ipynb,搜索
"slide_type"确认字段存在且值合法
导出后打不开?先看浏览器控制台报什么错
常见问题几乎都集中在资源加载失败,而不是代码逻辑错误。
-
Failed to load resource: net::ERR_CONNECTION_REFUSED→--reveal-prefix指向的 CDN 不可达,换镜像或切本地 -
Reveal is not defined→ Reveal.js 主 JS 未加载,检查 HTML 中<script src="..."></script>路径是否拼错、是否 404 - 样式错乱(文字重叠、无动画)→ 用了 v4 的 JS 但 CSS 还是 v3 的,版本必须严格匹配
- 空格键/方向键无效 → 浏览器焦点不在幻灯片区域,点击一下幻灯片内容再试;或禁用某些浏览器扩展(如广告拦截器)
--reveal-prefix 指对、版本配齐、路径写准。其他所有操作,包括 cell 类型设置、主题定制、PDF 导出,都是在此基础上叠加的。










