如何在ipython笔记本中添加目录?

问题描述 投票:68回答:9

http://ipython.org/ipython-doc/stable/interactive/notebook.html的文件说

您可以使用不同级别的标题为整个计算文档提供概念结构;有6个级别,从1级(顶级)到6级(段落)。这些可以在以后用于构建目录等。

但是,我无法在任何地方找到有关如何使用我的分层标题来创建此类目录的说明。有没有办法做到这一点?

注意:我也对使用ipython笔记本标题的其他导航感兴趣,如果有的话。例如,从标题跳回到标题以快速找到每个部分的开头,或者隐藏(折叠)整个部分的内容。这是我的愿望清单 - 但任何类型的导航都会引起人们的兴趣。谢谢!

ipython-notebook
9个回答
38
投票

有一个ipython nbextension构建了一个笔记本的目录。它似乎只提供导航,而不是折叠。


60
投票

您可以使用Markdown和HTML手动添加TOC。这是我一直在添加的方式:

Create TOC at top of Jupyter Notebook:

## TOC:
* [First Bullet Header](#first-bullet)
* [Second Bullet Header](#second-bullet)

Add html anchors throughout body:

## First Bullet Header <a class="anchor" id="first-bullet"></a>

code blocks...

## Second Bullet Header <a class="anchor" id="second-bullet"></a>

code blocks...

它可能不是最好的方法,但它有效。希望这可以帮助。


26
投票

这是另一个没有太多JS麻烦的选择:https://github.com/kmahelona/ipython_notebook_goodies


15
投票

如何使用浏览器插件,为您提供任何HTML页面的概述。我尝试过以下方法:

它们都适用于IPython笔记本电脑。我不愿意使用以前的解决方案,因为它们似乎有点不稳定,最终使用这些扩展。


10
投票

现在有两个可用于处理Jupyter扩展的包:

  1. 安装扩展的jupyter_contrib_nbextensions,包括目录;
  2. jupyter_nbextensions_configurator提供图形用户界面,用于配置启用哪些nbextensions(为每个笔记本自动加载),并提供控制以配置nbextensions的选项。

更新:

从最近版本的jupyter_contrib_nbextensions开始,至少使用conda,您不需要安装jupyter_nbextensions_configurator,因为它与这些扩展一起安装。


9
投票

我最近为Jupyter创建了一个名为jupyter-navbar的小扩展。它搜索以降价单元格编写的标题,并以分层方式显示侧栏中的链接。侧边栏可调整大小并可折叠。见下面的截图。

它易于安装,并且可以利用每当打开笔记本时执行的“自定义”JS和CSS代码,因此您无需手动运行它。

enter image description here


3
投票

这是我的方法,在github中可用的笨重的:

放入第一个笔记本电池,导入单元:

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()

在genTOCEntry cell`下面,将TOC单元格作为降价单元格:

<a id='TOC'></a>

#TOC

随着笔记本电脑的开发,在开始新的部分之前把这个genTOCMarkdownCell:

with open('TOCMarkdownCell.txt', 'w') as outfile:

    outfile.write(toc.genTOCMarkdownCell('Introduction'))

!cat TOCMarkdownCell.txt

!rm TOCMarkdownCell.txt

将genTOCMarkdownCell向下移动到笔记本中要开始新部分的位置,并将genTOCMarkdownCell的参数设为新部分的字符串标题,然后运行它。在它之后添加一个markdown单元格,并将genTOCMarkdownCell的输出复制到启动新部分的markdown单元格中。然后转到笔记本顶部附近的genTOCEntry单元格并运行它。例如,如果您将genTOCMarkdownCell参数设置为如上所示并运行它,则会将此输出粘贴到新索引部分的第一个markdown单元格中:

<a id='Introduction'></a>

###Introduction

然后,当您转到笔记本顶部并运行genTocEntry时,您将获得输出:

[Introduction](#Introduction)

复制此链接字符串并将其粘贴到TOC markdown单元格中,如下所示:

<a id='TOC'></a>

#TOC

[Introduction](#Introduction)

编辑TOC单元格以插入链接字符串然后按shift-enter后,指向新部分的链接将作为Web链接显示在您的笔记本目录中,单击它将使浏览器定位到新部分。

我经常忘记的一件事是,单击TOC中的一行会使浏览器跳转到该单元格,但不会选择它。当我们点击TOC链接时,无论哪个单元格处于活动状态仍然有效,因此向下或向上箭头或shift-enter指的是仍然活动的单元格,而不是我们通过单击TOC链接获得的单元格。


2
投票

正如Ian已经指出的那样,miny为IPython Notebook提供了一个目录扩展。我有一些麻烦使它工作,并使这个IPython Notebook半自动生成minrk的目录扩展在Windows中的文件。它不使用'curl'命令或链接,而是将* .js和* .css文件直接写入您的IPython Notebook-profile-directory。

笔记本上有一个名为“你需要做什么”的部分 - 按照它并有一个漂亮的浮动目录:)

这是一个已经显示它的html版本:http://htmlpreview.github.io/?https://github.com/ahambi/140824-TOC/blob/master/A%20floating%20table%20of%20contents.htm


1
投票

Introduction

正如@Ian和@Sergey所提到的,nbextensions是一个简单的解决方案。为了详细说明他们的答案,这里有一些信息。

什么是nbextensions?

nbextensions包含一组扩展,可为Jupyter笔记本添加功能。

例如,仅举几个扩展:

  • 目录
  • 可折叠的标题

Install nbextensions

安装可以通过Conda或PIP完成

# If conda:
conda install -c conda-forge jupyter_contrib_nbextensions
# or with pip:
pip install jupyter_contrib_nbextensions

Copy js and css files

要将nbextensions的javascript和css文件复制到jupyter服务器的搜索目录中,请执行以下操作:

jupyter contrib nbextension install --user

Toggle extensions

请注意,如果您不熟悉终端,最好安装nbextensions配置程序(请参阅下一节)

您可以启用/禁用所选的扩展程序。如文档所述,泛型命令是:

jupyter nbextension enable <nbextension require path>

具体来说,要启用ToC(目录)扩展,请执行以下操作:

jupyter nbextension enable toc2/main

Install Configuration interface (optional but useful)

正如其文档所述,nbextensions_configurator为nbextensions提供配置接口。

它看起来如下:nbextensions configurators

如果您使用conda要安装它:

conda install -c conda-forge jupyter_nbextensions_configurator

如果您没有Conda或者不想通过Conda安装,请执行以下两个步骤:

pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user
© www.soinside.com 2019 - 2024. All rights reserved.