在创建演示文稿幻灯片时,有很多选项。 有些方法很直接,而直接从 Jupyter 生成幻灯片不是其中之一。 但我从来都不是一个喜欢走简单道路的人。 我对其他任何幻灯片生成软件都无法完全满足的高期望。
为什么要从幻灯片过渡到 Jupyter?
我希望我的演示文稿软件具有四个功能
- 一个我可以运行源代码以检查错误的环境
- 一种包含演讲者备注但在演示期间隐藏它们的方法
- 为与会者提供有用的讲义以供阅读
- 为与会者提供有用的讲义以供探索性学习
在演讲中最令人不舒服的事情莫过于观众指出我的幻灯片之一上存在编码错误。 通常,它是拼错一个单词、忘记一个 return 语句,或者做一些其他的事情,这些事情在我离开我的开发环境后就变得不可见了,因为在我的开发环境中,我运行着 一个 linter 来捕捉这些错误。
在经历了太多次这样的时刻之后,我决定找到一种方法直接从我的幻灯片编辑器运行代码,以确保它是正确的。 在我的解决方案中,我需要考虑三个“陷阱”
- 很多代码都很无聊。 没有人关心三张幻灯片的
import
语句,而且我模拟socket
模块的技巧分散了我的重点。 但是,我可以测试代码而不造成网络中断至关重要。 - 包含样板代码几乎和听我逐字逐句地朗读幻灯片上的文字一样无聊。 我们都听过(甚至做过)这样的演讲:幻灯片上有三个要点,而演讲者逐字逐句地朗读它们。 我试图通过使用演讲者备注来避免这种行为。
- 当演讲的参考资料没有任何演讲者备注时,这对观众来说是最令人恼火的事情。 所以我想要生成一份精美的讲义,其中包含我所有的备注和来自同一来源的幻灯片。 更好的是,我不希望一份讲义上有幻灯片,而另一个 GitHub 存储库用于存放源代码。
与往常一样,为了解决这个问题,我发现自己求助于 JupyterLab 及其笔记本管理功能。
使用 Jupyter Notebooks 进行演示
我开始我的演示文稿时,在 Jupyter Notebook 中使用 Markdown 和代码块,就像我在 JupyterLab 中处理任何其他内容一样。 我使用单独的 Markdown 部分来写出我的演示文稿,一部分用于我想在幻灯片上显示的文本,另一部分用于演讲者备注。 代码片段像您期望的那样放入它们自己的代码块中。
因为您可以向单元格添加“标签”,所以我将任何包含“无聊”代码的单元格标记为 no_markdown
。

(Moshe Zadka, CC BY-SA 4.0)
然后我使用以下命令将我的 Notebook 转换为 Markdown
$ jupyter nbconvert presentation.ipynb --to markdown --TagRemovePreprocessor.remove_cell_tags='{"no_markdown"}' --output build/presentation.md
有很多方法可以将 Markdown 转换为幻灯片——但我不知道如何使用它们中的任何一个,甚至更不愿意学习。 此外,我已经有了我最喜欢的演示文稿创建工具:Beamer。
但是 Beamer 需要自定义 LaTeX,而当您将 Markdown 转换为 LaTeX 时,通常不会生成自定义 LaTeX。 幸运的是,一种 Markdown 实现——Pandoc Markdown——具有一项功能,可以让我做我想做的事情。 它的 raw_attribute 扩展允许在 Markdown 中包含目标格式的“原始”位。
这意味着如果我在从笔记本导出的 Markdown 上运行 pandoc
,其中包含 raw_attribute
LaTeX 位,我可以根据需要控制 LaTeX
$ pandoc --listings -o build/presentation.tex build/presentation.md
--listings
使 pandoc
使用 LaTeX 的 listings
包,这使代码看起来更漂亮。 将这两部分放在一起,我可以从笔记本生成 LaTeX。
通过一系列转换步骤,我能够通过使用以下方法隐藏我想要隐藏的部分
- Jupyter Notebook 的 Markdown 单元格内的 LaTeX
raw_attribute
位 - 将无聊的单元格标记为
no_markdown
- Jupyter 的 “nbconvert” 将笔记本转换为 Markdown
- Pandoc 将 Markdown 转换为 LaTeX,同时插值
raw_attribute
位 - Beamer 将 Pandoc 输出转换为 PDF 幻灯片
- Beamer 的 beamerarticle 模式
所有这些都与一点胶带(以 UNIX shell 脚本的形式)结合在一起,以生成幻灯片创建软件。 最终,这个管道对我有效。 使用这些或类似的工具,以及一些简单的 UNIX 脚本,您可以制作自己的自定义幻灯片创建管道,针对您的需求和偏好进行优化。
您曾经使用过的最复杂的管道是什么来构建幻灯片? 请在评论中告诉我——以及您是否会再次使用它。
1 条评论