Як я можу додати зміст до ноутбука Jupyter / JupyterLab?


106

У документації за адресою http://ipython.org/ipython-doc/stable/interactive/notebook.html сказано

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

Однак я ніде не можу знайти інструкцій, як використовувати свої ієрархічні заголовки для створення такої змісту. Чи є спосіб це зробити?

NB: Мені також були б цікаві інші види навігації, використовуючи заголовки ноутбуків ipython, якщо такі є. Наприклад, стрибки назад і вперед від заголовка до заголовка, щоб швидко знайти початок кожного розділу, або сховати (скласти) вміст цілого розділу. Це мій список побажань - але будь-який тип навігації взагалі був би цікавим. Дякую!


див. відповідь @Nikolay нижче для загального рішення, яке працює на всіх веб-сторінках. Це чудова відповідь.
ihightower

Щоб доповнити існуючі рішення для ноутбуків Jupyter, я додав інструкції JupyterLab нижче.
joelostblom

Відповіді:


52

Існує ipython nbextension, який створює зміст для зошита. Здається, це забезпечує лише навігацію, а не складання секцій.


Дякую, я припускаю, що саме про це йдеться в документації.
користувач2428107

2
Для тих, хто хоче встановити його в jupyter 4, ця публікація може допомогти.
Сиртіс-майор

9
Просто для оновлення: зараз є розширення nbextensions, яке поєднує цілу кількість розширень разом і дозволяє керувати ними за допомогою самого jupyter. Я думаю, що зараз найпростіший спосіб отримати ToC2. І він пропонує інші відповідні розширення, такі як складання секцій. Це на github.com/ipython-contrib/jupyter_contrib_nbextensions
user2428107

93

Ви можете додати TOC вручну за допомогою Markdown та HTML. Ось як я додаю:

Створіть TOC у верхній частині ноутбука Юпітера:

## 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...

Це може бути не найкращий підхід, але він працює. Сподіваюся, це допомагає.


15
Це для мене більше не працює, але подібний підхід робить .
joelostblom

2
також такий же "подібний підхід", як і цей: stackoverflow.com/questions/5319754/… tl; dr: використання <a name="pookie"></a>для якоря та для використання посилань:Take me to [pookie](#pookie)
michael

2
Для всіх заголовків у ваших розмітках ноутбук автоматично додає якорі. Ви можете натиснути на стовпчик (¶) праворуч від заголовків, які ви бачите, коли ви наводите курсор на них, щоб виявити якір у адресному рядку веб-переглядача. Ви можете використовувати цей якір замість того, щоб додавати анкери вручну до розділів розмітки. Також найкраще, щоб він працював у клітинах.
aaruja

1
У мене є цей скрипт add_toc.py, який додає комірку розмітки вгорі зі списком вмісту. Рішення поганого чоловіка, якщо ви не хочете встановлювати розширення.
користувач2148414


18

Як щодо використання плагіна Browser, який дає вам огляд БУДЬ-якої сторінки html. Я спробував таке:

Вони обидва працюють досить добре для ноутбуків IPython. Мені неохоче було користуватися попередніми рішеннями, оскільки вони здаються трохи нестабільними і в кінцевому підсумку використовували ці розширення.


1
Дуже корисний! Але деякі вбудовані функції мали б такий сенс - особливо в поєднанні з
відміткою

13

Нещодавно я створив невелике розширення до Юпітера під назвою jupyter-navbar . Він здійснює пошук заголовків, записаних у клітинках розмітки, і відображає посилання на них на бічній панелі ієрархічно. Бічна панель може бути змінена та збірна. Дивіться скріншот нижче.

Встановити його легко і користується «спеціальними» кодами JS та CSS, які виконуються щоразу, коли ноутбук відкритий, тому не потрібно вручну запускати його.

введіть тут опис зображення


1
Дійсно встановити його просто, і вихідний код також дружній. Гарний проект!
Карсон

13

Зараз є два пакети, які можна використовувати для обробки розширень Jupyter:

  1. jupyter_contrib_nbextensions, що встановлює розширення, включаючи вміст;

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

ОНОВЛЕННЯ:

Починаючи з останніх версій jupyter_contrib_nbextensions, принаймні, condaвам не потрібно встановлювати, jupyter_nbextensions_configuratorоскільки він встановлюється разом із цими розширеннями.


10

Інструкції JC для JupyterLab

На це питання вже багато хороших відповідей, але вони часто вимагають налаштування, щоб правильно працювати з ноутбуками в JupyterLab. Я написав цю відповідь, щоб детально ознайомитись із можливими способами включення ToC у зошит під час роботи та експорту з JupyterLab.

Як бічна панель

Розширення jupyterlab-toc додає ToC як бічну панель, яка може нумерувати заголовки, згортати секції та використовуватись для навігації (див. Демонстраційний графік нижче). Встановіть за допомогою наступної команди

jupyter labextension install @jupyterlab/toc

введіть тут опис зображення


У зошиті як клітина

На даний момент це можна зробити вручну, як у відповіді Метта Данчо, або автоматично через розширення ноутбука jucter toc2 в класичному інтерфейсі ноутбука.

Спочатку встановіть toc2 як частину пакету jupyter_contrib_nbextensions :

conda install -c conda-forge jupyter_contrib_nbextensions

Потім запустіть JupyterLab, перейдіть до Help --> Launch Classic Notebookта відкрийте ноутбук, у який потрібно додати ToC. Клацніть на символі toc2 на панелі інструментів, щоб відкрити вікно плаваючої ToC (див. Графік нижче, якщо ви не можете його знайти), натисніть значок шестірні та встановіть прапорець "Додати комірку ToC для ноутбука". Збережіть ноутбук, і комірка ToC буде там, коли ви відкриєте його в JupyterLab. Вставлена ​​комірка - це клітинка розмітки з html-адресою, вона не оновлюється автоматично.

Параметри toc2 за замовчуванням можна налаштувати на вкладці "Nbextensions" на класичній сторінці запуску ноутбука. Наприклад, ви можете вибрати номер заголовків і прикріпити ToC як бічну панель (що, на мою думку, виглядає чистіше).

введіть тут опис зображення


У експортованому HTML-файлі

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

Пам’ятайте, що команди оболонок можна додавати до комірок ноутбука, попередньо позначивши їх знаком оклику !, тому ви можете вставити цей рядок в останню комірку ноутбука та завжди мати HTML-файл із ToC, сформованим при натисканні кнопки «Запустити всі комірки» ( або що б ви не хотіли nbconvert). Таким чином, ви можете використовувати jupyterlab-tocдля навігації ноутбук під час роботи, і все ж отримувати ToCs у експортованому виході, не вдаючись до використання класичного інтерфейсу для ноутбука (для пуристів серед нас).

Зауважте, що конфігурація параметрів toc2 за замовчуванням, як описано вище, не змінить формат nbconver --to html_toc. Вам потрібно відкрити ноутбук у класичному інтерфейсі ноутбука, щоб метадані були записані у файл .ipynb (nbconvert читає метадані під час експорту). Крім того, ви можете додавати метадані вручну через вкладку інструментів Ноутбук бічної панелі JupyterLab, наприклад, щось подібно до:

    "toc": {
        "number_sections": false,
        "sideBar": true
    }

Якщо ви віддаєте перевагу підходу, керованого графічним інтерфейсом, ви маєте змогу відкрити класичний ноутбук та натиснути File --> Save as HTML (with ToC) (хоча зауважте, що цей пункт меню був для мене недоступним).


Наведені вище зображення посилаються на відповідну документацію розширень.


Я вважаю за краще працювати з jupyter lab, але мені потрібно додати TOC до великого виводу HTML ноутбука. Це працює бездоганно! Були деякі додаткові кроки , щоб отримати його роботу: 1. Включити TOC2, наприклад conda install -c conda-forge jupyter_nbextensions_configurator, піти на http://localhost:8888/nbextensions, зніміть прапорець «сумісність» та дає можливість «Toc2» 2. Запустіть Класичну Notebbok, що змінює параметри змісту до ваших потреб і Add TOC to Cell(дійте , як описано). 3. Відкрийте свій .ipynbфайл і знайдіть "toc", скопіюйте конфігурації json toc та додайте до метаданих за допомогою вкладки інструментів лабораторії Юпітера
Алекс

6

Вступ

Як згадували @Ian та @Sergey, nbextensions - це просте рішення. Щоб розробити їх відповідь, ось ще кілька відомостей.

Що таке nbextensions?

Nbextensions містить колекцію розширень, які додають функціональності вашому ноутбуку Юпітера.

Наприклад, лише навести кілька розширень:

  • Зміст

  • Заголовки, що складаються

Встановити 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

Щоб встановити його, якщо ви використовуєте conda:

conda install -c conda-forge jupyter_nbextensions_configurator

Якщо у вас немає Conda або не хочете встановлювати через Conda, виконайте наступні 2 дії:

pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

Це чудова і детальна відповідь. Я думаю, що ввімкнути toc2/mainте саме, що перевірити "Зміст (2)" на localhost: 8888 / tree # nbextensions_configurator .
flow2k

4

Ось мій підхід, незграбний, як є, і доступний у 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 заголовок рядка для нового розділу, а потім запустіть його. Додайте клітинку розмітки відразу після неї та скопіюйте вихід з 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.


2

Як вже зазначав Іан, для ноутбука IPython існує розширення таблиці вмісту minrk. У мене виникли проблеми з тим, щоб він працював, і зробив цей ноутбук IPython, який напівавтоматично генерує файли для розширення змісту вмісту 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.