Jupyter是ipython notebook的新名字。可能很少有人知道,这个玩意居然还能制作slide。

可能有人有印象,我做过一个markdown to slides生成器,底下用的是reveal.js。今天才发现,jupyter也有类似的功能,底层也是reveal.js。不过用起来比我自己写的东西方便多了。

用法很简单。首先在View菜单里,使用Toggle Toolbar功能打开toolbar(如果已经打开就不用管)。在toolbar里能看到一项叫做Cell Toolvar的,后面一般是None。请转换为Slideshow。此时你能看到每个Cell都会多出一条来,上面有Slide Type。

Slide Type有六个选项,默认是啥都没有。后面依次是Slide,Sub-Slide,Fragment,Skip,Notes。Slide和Sub-Slide是主要的选项。在reveal.js里,Slide是指左右切换的那些页,而Sub-Slide则是你切到一个Slide后,按向下逐渐出现的一些页。这类似于章和节的关系。章和章之间左右切换,节和节之间上下切换。而如果选择为默认,那么就不开新页,跟在前面的页面里。

Skip的话,这个Cell会在Slide里跳过看不见。有很多时候,我们需要在Slide里嵌入Python代码。但是代码又有的时候需要做一些额外事情,我们不希望出现在Slide里面。如果将这些额外代码运行后删除,又恐怕下一次跑这个notebook跑不动。这时候就可以设定为Skip。

Notes原则来说是给slide里面加注释用的。照理说在页面上按s就可以跳出提示,但是我测试下来跳出来却是空的。看了一下页面源码,确实是有东西的。可能是因为我使用的是静态的文件,而没有开启服务的关系。

Fragment我也不知道干什么用的。看名字好像是代码碎片一类的,如果有知道的可以告诉我一下。

最后,用nbconvert就可以把结果转换为html来用。方法是:

ipython nbconvert --to slides --reveal-prefix "http://cdn.jsdelivr.net/reveal.js/2.6.2" ...

之所以要加reveal-prefix,是因为最新的reveal和jupyter生成的html不兼容。

生成过程需要使用nodejs,记得安装。

生成出来的Html就是个彻头彻尾的slide了。原则上,同一个ipynb也可以生成html或者pdf(借助reveal.js自身的pdf打印功能)。这样的话slide也有分发能力。

玩的愉快。