Подтвердить что ты не робот

Как добавить оглавление в блокнот ipython?

Документация на http://ipython.org/ipython-doc/stable/interactive/notebook.html говорит

Вы можете предоставить концептуальную структуру вашего вычислительного документа в целом с использованием разных уровней заголовков; доступно 6 уровней: от уровня 1 (верхний уровень) до уровня 6 (абзац). Они могут быть использованы позже для построения оглавлений и т.д.

Однако я не могу найти инструкции о том, как использовать мои иерархические заголовки для создания такого оглавления. Есть ли способ сделать это?

NB: Я бы также интересовался другими видами навигации, используя заголовки IP-заголовков, если таковые имеются. Например, перепрыгивая назад и вперед от заголовка к заголовку, чтобы быстро находить начало каждого раздела или скрывать (складывать) содержимое всей секции. Это мой список пожеланий, но любой вид навигации представлял бы интерес. Спасибо!

4b9b3361

Ответ 1

Существует ipython nbextension, который создает оглавление для ноутбука. Кажется, что он обеспечивает навигацию, а не разворот секции.

Ответ 2

Вы можете добавить TOC вручную с помощью Markdown и HTML. Вот как я добавляю:

Создать TOC наверху ноутбука Jupyter:

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

Добавить html привязки по всему телу:

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

code blocks...

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

code blocks...

Это не лучший подход, но он работает. Надеюсь, это поможет.

Ответ 4

Как использовать плагин Browser, который дает вам обзор ЛЮБОЙ HTML-страницы. Я пробовал следующее:

Оба они отлично работают для IPython Notebooks. Я не хотел использовать предыдущие решения, поскольку они кажутся немного нестабильными и в конечном итоге используют эти расширения.

Ответ 5

Теперь есть два пакета, которые можно использовать для обработки расширений Jupyter:

  1. jupyter_contrib_nbextensions, который устанавливает расширения, включая оглавление;

  2. jupyter_nbextensions_configurator, который предоставляет графические пользовательские интерфейсы для настройки включенных nbextensions (автоматически загружать для каждого ноутбука) и предоставляет элементы управления для настройки параметров nbextensions.

ОБНОВИТЬ:

Начиная с последних версий jupyter_contrib_nbextensions, по крайней мере, с conda вам не нужно устанавливать jupyter_nbextensions_configurator потому что он устанавливается вместе с этими расширениями.

Ответ 6

Недавно я создал небольшое расширение для Jupyter с именем jupyter-navbar. Он ищет заголовки, записанные в ячейках уценки, и отображает ссылки на них на боковой панели в иерархической форме. Боковая панель может быть изменяемого размера и складной. Смотрите скриншот ниже.

Он прост в установке и использует преимущества "пользовательских" кодов JS и CSS, которые выполняются при открытии ноутбука, поэтому вам не нужно запускать его вручную.

enter image description here

Ответ 7

Вот мой подход, неуклюжий, как есть, и доступен в 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, сделайте ячейку 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 в ячейку уценки, которая начнет ваш новый раздел. Затем перейдите в ячейку genTOCEntry возле верхней части ноутбука и запустите ее. Например, если вы сделаете аргумент genTOCMarkdownCell, как показано выше, и запустите его, вы получите этот вывод для вставки в первую ячейку уценки вашего недавно проиндексированного раздела:

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

###Introduction

Затем, когда вы переходите на верхнюю часть своего ноутбука и запускаете genTocEntry, вы получаете вывод:

[Introduction](#Introduction)

Скопируйте эту строку ссылки и вставьте ее в ячейку разметки TOC следующим образом:

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

#TOC

[Introduction](#Introduction)

После того, как вы редактируете ячейку TOC, чтобы вставить строку ссылки, а затем нажмите shift-enter, ссылка на ваш новый раздел появится в вашем ноутбуке. Содержание в виде веб-ссылки и нажатие на нее приведет к тому, что браузер переключится на ваш новый раздел.

Одна вещь, которую я часто забываю, заключается в том, что щелчок по строке в TOC заставит браузер перейти к этой ячейке, но не выбирает ее. Независимо от того, какая ячейка была активна, когда мы нажали на ссылку TOC, все еще активна, поэтому стрелка вниз или вверх или shift-enter относится к неподвижной активной ячейке, а не к ячейке, которую мы получили, нажав на ссылку TOC.

Ответ 8

Как уже указывал Ян, для IP-памяти Notebook имеется расширение содержимого таблицы minrk. У меня возникли проблемы с тем, чтобы он работал и сделал это IPython Notebook, который полуавтоматически генерирует файлы для расширения содержимого таблицы minrk в Windows. Он не использует "curl'-команды или ссылки", но записывает файлы *.js и *.css непосредственно в каталог вашего IPython-профиля.

В ноутбуке есть раздел под названием "Что вам нужно сделать" - следуйте за ним и получите красивое плавающее оглавление:)

Вот версия html, которая уже показывает это: http://htmlpreview.github.io/?https://github.com/ahambi/140824-TOC/blob/master/A%20floating%20table%20of%20contents.htm

Ответ 9

Вступление

Как уже упоминали @Ian и @Sergey, nbextensions - это простое решение. Чтобы уточнить их ответ, вот еще немного информации.

Что такое расширения?

Nbextensions содержит набор расширений, которые добавляют функциональность вашему ноутбуку Jupyter.

Например, просто привести несколько расширений:

  • Оглавление

    v9oh0.png

  • Складные заголовки

    gFXSh.gif

Установите nbextensions

Установка может быть выполнена через Conda или PIP

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

Скопируйте JS и CSS файлы

Чтобы скопировать файлы javascript и css nbextensions в каталог поиска сервера jupyter, выполните следующие действия:

jupyter contrib nbextension install --user

Переключить расширения

Обратите внимание, что если вы не знакомы с терминалом, было бы лучше установить конфигуратор nbextensions (см. Следующий раздел)

Вы можете включить/отключить расширения по вашему выбору. Как упоминается в документации, общая команда:

jupyter nbextension enable <nbextension require path>

Конкретно, чтобы включить расширение ToC (Оглавление), выполните:

jupyter nbextension enable toc2/main

Установить интерфейс конфигурации (необязательно, но полезно)

Как сказано в документации, nbextensions_configurator предоставляет интерфейсы конфигурации для nbextensions.

Это выглядит следующим образом: nbextensions configurators

Чтобы установить его, если вы используете conda:

conda install -c conda-forge jupyter_nbextensions_configurator

Если у вас нет Conda или вы не хотите устанавливать его через Conda, выполните следующие 2 шага:

pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user