您可以使用不同级别的标题为整个计算文档提供概念结构;有6个级别可用,从级别1(顶级)到级别6(段落)。这些以后可以用于构建目录等。
但是,我找不到任何关于如何使用我的分层标题来创建这样的目录的说明。是否有办法做到这一点?
NB:如果存在任何其他类型的导航,我也会对使用ipython笔记本电脑标题进行跳转和查找每个部分的开头,或隐藏(折叠)整个部分内容等感兴趣。这是我的愿望清单-但任何形式的导航都将很有意义。谢谢!
您可以使用不同级别的标题为整个计算文档提供概念结构;有6个级别可用,从级别1(顶级)到级别6(段落)。这些以后可以用于构建目录等。
但是,我找不到任何关于如何使用我的分层标题来创建这样的目录的说明。是否有办法做到这一点?
NB:如果存在任何其他类型的导航,我也会对使用ipython笔记本电脑标题进行跳转和查找每个部分的开头,或隐藏(折叠)整个部分内容等感兴趣。这是我的愿望清单-但任何形式的导航都将很有意义。谢谢!
您可以使用Markdown和HTML手动添加目录。以下是我的添加方式:
## TOC:
* [First Bullet Header](#first-bullet)
* [Second Bullet Header](#second-bullet)
## First Bullet Header <a class="anchor" id="first-bullet"></a>
code blocks...
## Second Bullet Header <a class="anchor" id="second-bullet"></a>
code blocks...
可能不是最好的方法,但它能够起作用。
<a name="pookie"></a>
来创建锚点,然后在链接中使用 [pookie](#pookie)
的方式来链接到该锚点。 - michael对于这个问题,已经有很多很好的答案,但它们通常需要调整才能正确地与JupyterLab中的笔记本一起使用。我写这篇答案是为了详细介绍在JupyterLab中工作并导出时包含ToC的可能方法。
jupyterlab-toc扩展程序将ToC添加为侧边栏,可以对标题进行编号、折叠部分并用于导航(请参见下面的gif演示)。此扩展程序从JupyterLab 3.0开始默认包含,在旧版本中,您可以使用以下命令进行安装。
jupyter labextension install @jupyterlab/toc
目前而言,这可以手动完成,如Matt Dancho的答案中所述,也可以通过经典笔记本界面中的toc2 jupyter笔记本扩展自动完成。
首先,请将toc2作为jupyter_contrib_nbextensions捆绑包的一部分进行安装:
conda install -c conda-forge jupyter_contrib_nbextensions
然后,
启动JupyterLab,
转到Help --> Launch Classic Notebook
,
并打开您想要添加ToC的笔记本。
单击工具栏中的toc2符号
弹出ToC窗口
(如果找不到,请参见下面的gif),
单击齿轮图标,选中
“Add notebook ToC cell”的框。
保存笔记本电脑,打开它时将会有ToC单元格
在JupyterLab中。
插入的单元格是一个带有html的标记单元格,
它不会自动更新。
toc2的默认选项 可以在“Nbextensions”选项卡中进行配置 在传统笔记本电脑启动页面上。 例如,您可以选择编号标题 并将ToC固定为侧边栏 (我个人认为看起来更干净)。
nbconvert
可用于将笔记本导出为HTML
遵循如何格式化导出的HTML规则。
上面提到的toc2
扩展添加了一个导出格式叫做html_toc
,
可以直接使用nbconvert
命令行进行操作
(安装了toc2
扩展之后):
jupyter nbconvert file.ipynb --to html_toc
# Append `--ExtractOutputPreprocessor.enabled=False`
# to get a single html file instead of a separate directory for images
请记住,可以在笔记本单元格前面加上感叹号!
将Shell命令添加到笔记本单元格中,
因此您可以将此行代码粘贴到笔记本的最后一个单元格中,
每次运行所有单元格时都会生成一个具有目录的HTML文件,
或者您可以从nbconvert
获得所需的任何输出方式。
这样,您可以在工作时使用jupyterlab-toc
浏览笔记本,并且仍然可以在导出的输出中获得目录,而无需使用经典笔记本界面(对于我们中的纯粹主义者)。
请注意,按照上述描述配置默认的toc2选项不会更改nbconver --to html_toc
的格式。
您需要在经典笔记本界面中打开笔记本,以便将元数据写入.ipynb文件(nbconvert在导出时读取元数据)。
或者,您可以通过JupyterLab侧边栏的Notebook工具选项卡手动添加元数据,例如:
"toc": {
"number_sections": false,
"sideBar": true
}
如果你更喜欢图形用户界面的方式,你应该能够打开传统笔记本,并点击文件-->保存为HTML(带有ToC)
(尽管请注意这个菜单项对我来说不可用)。
上述gif来自各自扩展的文档链接。
jupyter lab
,但需要将TOC添加到大型笔记本HTML输出中。 这个方法完美无缺! 有一些额外的步骤来使其正常工作:1. 启用TOC2,例如conda install -c conda-forge jupyter_nbextensions_configurator
,进入 http://localhost:8888/nbextensions
, 取消选中“兼容性”并启用“Toc2” 2. 启动经典Notebbok,根据您的需求修改TOC设置并Add TOC to Cell
(按照说明进行)。 3. 打开您的.ipynb
文件并搜索“toc”,复制JSON toc配置并使用Jupyter lab的工具选项卡添加到元数据中。 - Alex"toc_threshold: "6"
或"threshold": "6"
,具体取决于您的版本。将其添加到“toc”部分中。 - Bastianconda install "nbconvert=5.6.1"
。 - Bastian有一个IPython nbextension,可以为笔记本构建目录。它似乎只提供导航功能,而不支持章节折叠。
这里还有一个不需要太多JS麻烦的选项:https://github.com/kmahelona/ipython_notebook_goodies
你可以考虑使用浏览器插件来获取任意html页面的概述信息,我已经尝试过以下两种插件:
它们都非常适用于IPython笔记本。由于之前的解决方案似乎有点不稳定,所以我有些犹豫,最终选择了这些插件。
我最近为 Jupyter 创建了一个小扩展,名为 jupyter-navbar。它会搜索 markdown 单元格中编写的标题,并以分层方式在侧边栏中显示链接。该侧边栏可调整大小和折叠。请参见以下截图。
它易于安装,并利用“自定义”JS和CSS代码,在打开笔记本时执行,因此您不需要手动运行它。
正如@Ian和@Sergey所提到的,nbextensions是一个简单的解决方案。为了详细说明他们的答案,这里提供更多信息。
什么是nbextensions?
nbextensions包含一系列扩展程序, 可为Jupyter笔记本添加功能。
例如,只列举几个扩展:
目录
折叠式标题
可以通过Conda或PIP进行安装。
# If conda:
conda install -c conda-forge jupyter_contrib_nbextensions
# or with pip:
pip install jupyter_contrib_nbextensions
您将在jupyter笔记本菜单中看到新标签Nbextensions
。取消顶部的复选框disable configuration for nbextensions without explicit compatibility(它们可能会破坏您的笔记本环境,但对于nbextension开发很有用)
,然后选中Table of Contents(2)
。就这样了。截图:
要将nbextensions的javascript和css文件复制到jupyter服务器的搜索目录中,请执行以下操作:
jupyter contrib nbextension install --user
请注意,如果您不熟悉终端,最好安装nbextensions配置器(请参见下一节)
您可以启用/禁用所选的扩展。正如文档所提到的,通用命令是:
jupyter nbextension enable <nbextension require path>
具体来说,要启用目录(Table of Contents)扩展,请执行以下操作:
jupyter nbextension enable toc2/main
如其文档所述,nbextensions_configurator为nbextensions提供了配置界面。
如果您使用conda,则可以执行以下命令进行安装:
conda install -c conda-forge jupyter_nbextensions_configurator
如果您没有安装Conda或不想通过Conda安装,则执行以下两个步骤:
pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user
toc2/main
就相当于在 http://localhost:8888/tree#nbextensions_configurator 上勾选 "Table of Contents (2)"。 - flow2kjupyter_contrib_nbextensions 安装扩展,包括目录;
jupyter_nbextensions_configurator 提供图形用户界面,用于配置哪些 nbextensions 被启用(自动为每个笔记本加载),并提供控件以配置 nbextensions 的选项。
jupyter_contrib_nbextensions
开始,在使用 conda
时,您不需要安装 jupyter_nbextensions_configurator
,因为它会随着这些扩展一起安装。您可以使用Markdown超链接跳转到Markdown标题,而无需定义HTML标签。无论标题中有多少个井号 #
,在超链接中只需使用一个即可。标题中的任何空格都将被替换为连字符-
。
# Contents
- [Section 1](#Section-1)
- [Section 2](#Section-2)
- [Section 3](#Section-3)
# Section 1
## Section 2
您还可以添加一个超链接返回目录。
### Section 3
[top](#Contents)
这与Matt Dancho的答案类似,但我总是觉得html锚点很棘手。
from IPythonTOC import IPythonTOC
toc = IPythonTOC()
在导入单元格之后的某个位置,放置 genTOCEntry 单元格,但现在不要运行它:
''' if you called toc.genTOCMarkdownCell before running this cell,
the title has been set in the class '''
print toc.genTOCEntry()
<a id='TOC'></a>
#TOC
with open('TOCMarkdownCell.txt', 'w') as outfile:
outfile.write(toc.genTOCMarkdownCell('Introduction'))
!cat TOCMarkdownCell.txt
!rm TOCMarkdownCell.txt
<a id='Introduction'></a>
###Introduction
然后,当你到笔记本的顶部并运行genTocEntry时,你会得到以下输出:
[Introduction](#Introduction)
将此链接字符串复制并粘贴到目录的 markdown 单元格中,如下所示:
<a id='TOC'></a>
#TOC
[Introduction](#Introduction)