为Jupyter Notebook添加目录

张三张三
最近从R的RMarkdown,转到了Python的Jupyter Notebook. 在使用RStudio生成RMarkdown的时候, 可以添加目录(Table of Contents, TOC). 可别小看这个功能, 当分析数据, 有很多步骤或者结果的时候, 经常需要在各个分析或者结果之间切换, 如果靠鼠标上下翻页来寻找想要的内容, 将会非常没有效率. 在RStudio可以添加一个目录, 目录里面的内容根据RMarkdown每一个标题自动生成. 这样只需要点击目录里面相应的内容, 就可以很快的跳到RMarkdown对应的地方.

很可惜的是, 默认Jupyter Notebook是没有生成目录这个功能的. 注意啊, 我说的是"默认", 否则这篇文章写到这里就结束了.

下面我们要用到 Jupyter notebook extensions, 你可以理解成是Jupyter安装各种plugins的扩展, 其中有一个plugins叫toc2, 可以为Jupyter Notebook提供目录. 效果见下图

TOC的大小和位置可以随意改变, 也支持对每个标题自动编号.

下面讲讲如何安装

第一步, 安装 Jupyter Notebook

这个是必须的. 如果还没安装的话, 建议安装 anaconda

第二步, 安装Jupyter Notebook extensions

conda install -c conda-forge jupyter_contrib_nbextensions
第三步, 开启toc2插件

运行Jupyter Notebook, 在打开的Notebook界面里, 你会发现多了一个Nbextensions,点击这个tab, 会有如下界面

勾选Table of Contents (有的版本是toc2). 然后创建或者打开一个Jupter Notebook

第四步, 生成目录

在Notebook上面选项中,多了一个生成目录图标, 如下图中最右边的图标.

点击这个图标就会生成一个目录. 在Notebook里添加标题(也就是用###生成的Markdown内容)会自动添加到目录里面. 在目录上面, 有个小的n图标, 这表示自动对每个标题编号, 点击这个图标可以打开或者关闭这个功能.

差不多就这样了, 你可以统TOC管理你的Notebook, 使你的数据分析变得更有条理.

这个TOC早期功能有个坑爹的bug, 开启这个功能之后, Notebook将不能保存, 不论是自动还是手动都不能保存. 所以当你开启这个功能后, 试试是否可以保存你的Notebook, 如果不行的话, 说明你使用的是比较老的版本. 解决方案是用pip直接安装Github上的最新版本, 具体安装方法见这里.