Ответ 1
Существует ipython nbextension, который создает оглавление для ноутбука. Кажется, что он обеспечивает навигацию, а не разворот секции.
Документация на http://ipython.org/ipython-doc/stable/interactive/notebook.html говорит
Вы можете предоставить концептуальную структуру вашего вычислительного документа в целом с использованием разных уровней заголовков; доступно 6 уровней: от уровня 1 (верхний уровень) до уровня 6 (абзац). Они могут быть использованы позже для построения оглавлений и т.д.
Однако я не могу найти инструкции о том, как использовать мои иерархические заголовки для создания такого оглавления. Есть ли способ сделать это?
NB: Я бы также интересовался другими видами навигации, используя заголовки IP-заголовков, если таковые имеются. Например, перепрыгивая назад и вперед от заголовка к заголовку, чтобы быстро находить начало каждого раздела или скрывать (складывать) содержимое всей секции. Это мой список пожеланий, но любой вид навигации представлял бы интерес. Спасибо!
Существует ipython nbextension, который создает оглавление для ноутбука. Кажется, что он обеспечивает навигацию, а не разворот секции.
Вы можете добавить TOC вручную с помощью 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...
Это не лучший подход, но он работает. Надеюсь, это поможет.
Вот еще один вариант без лишних проблем JS: https://github.com/kmahelona/ipython_notebook_goodies
Как использовать плагин Browser, который дает вам обзор ЛЮБОЙ HTML-страницы. Я пробовал следующее:
Оба они отлично работают для IPython Notebooks. Я не хотел использовать предыдущие решения, поскольку они кажутся немного нестабильными и в конечном итоге используют эти расширения.
Теперь есть два пакета, которые можно использовать для обработки расширений Jupyter:
jupyter_contrib_nbextensions, который устанавливает расширения, включая оглавление;
jupyter_nbextensions_configurator, который предоставляет графические пользовательские интерфейсы для настройки включенных nbextensions (автоматически загружать для каждого ноутбука) и предоставляет элементы управления для настройки параметров nbextensions.
ОБНОВИТЬ:
Начиная с последних версий jupyter_contrib_nbextensions
, по крайней мере, с conda
вам не нужно устанавливать jupyter_nbextensions_configurator
потому что он устанавливается вместе с этими расширениями.
Недавно я создал небольшое расширение для Jupyter с именем jupyter-navbar. Он ищет заголовки, записанные в ячейках уценки, и отображает ссылки на них на боковой панели в иерархической форме. Боковая панель может быть изменяемого размера и складной. Смотрите скриншот ниже.
Он прост в установке и использует преимущества "пользовательских" кодов JS и CSS, которые выполняются при открытии ноутбука, поэтому вам не нужно запускать его вручную.
Вот мой подход, неуклюжий, как есть, и доступен в 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.
Как уже указывал Ян, для 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
Как уже упоминали @Ian и @Sergey, nbextensions - это простое решение. Чтобы уточнить их ответ, вот еще немного информации.
Что такое расширения?
Nbextensions содержит набор расширений, которые добавляют функциональность вашему ноутбуку Jupyter.
Например, просто привести несколько расширений:
Оглавление
Складные заголовки
Установка может быть выполнена через Conda или PIP
# If conda:
conda install -c conda-forge jupyter_contrib_nbextensions
# or with pip:
pip install jupyter_contrib_nbextensions
Чтобы скопировать файлы 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.
Это выглядит следующим образом:
Чтобы установить его, если вы используете conda:
conda install -c conda-forge jupyter_nbextensions_configurator
Если у вас нет Conda или вы не хотите устанавливать его через Conda, выполните следующие 2 шага:
pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user