Comment puis-je ajouter une table des matières à un carnet ipython?

la documentation à http://ipython.org/ipython-doc/stable/interactive/notebook.html dit

vous pouvez fournir une structure conceptuelle pour votre document de calcul dans son ensemble en utilisant différents niveaux de titres; il y a 6 niveaux disponibles, du niveau 1 (Niveau supérieur) au niveau 6 (paragraphe). Ceux-ci peuvent être utilisés plus tard pour construire des tables des matières, etc.

cependant, je ne trouve pas d'instructions sur la façon d'utiliser mon des titres hiérarchiques pour créer une telle table des matières. Est-il un moyen de faire cela?

NB: je serais également intéressé par d'autres types de navigation en utilisant ipython notebook headings, s'il en existe. Par exemple, en sautant d'un titre à l'autre pour trouver rapidement le début de chaque section, ou en cachant (pliant) le contenu d'une section entière. C'est ma liste de souhaits, mais n'importe quel type de navigation serait intéressant. Merci!

45
demandé sur user2428107 2014-01-16 04:54:14

8 réponses

Il y a un ipython nbextension qui construit une table des matières pour un ordinateur portable. Il semble fournir seulement la navigation, pas le pliage de section.

28
répondu Ian 2014-01-16 09:56:22

vous pouvez ajouter un TOC manuellement avec Markdown et HTML. Voici comment j'ai été en ajoutant:

Créer une table des matières en haut de la Jupyter Portable:

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

ajouter des ancrages html dans tout le corps:

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

code blocks...

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

code blocks...

ce n'est peut-être pas la meilleure approche, mais ça marche. Espérons que cette aide.

34
répondu Matt Dancho 2016-10-02 13:10:44

Voici une option de plus sans trop de tracas JS: https://github.com/kmahelona/ipython_notebook_goodies

20
répondu Anaderi 2014-03-05 19:42:15

Que Diriez-vous d'utiliser un plugin de navigateur qui vous donne un aperçu de n'importe quelle page html. J'ai essayé le code suivant:

ils fonctionnent tous les deux assez bien pour les ordinateurs portables IPython. J'ai hésité à utiliser les solutions précédentes car elles semblent un peu instables et ont fini par utiliser ces extensions.

11
répondu Nikolay 2015-11-03 23:34:29

il y a maintenant deux paquets qui peuvent être utilisés pour gérer les extensions Jupyter:

  1. jupyter_contribu_nb extensions qui installe des extensions, y compris la table des matières;

  2. jupyter_nbextensions_configurator qui fournit des interfaces utilisateur graphiques pour la configuration des extensions NB qui sont activées (charger automatiquement pour chaque bloc-notes) et fournit des contrôles pour configurer les extensions NB option.

4
répondu Sergey Zakharov 2017-05-16 13:09:50

j'ai récemment créé une petite extension de Jupyter nommée jupyter-barre de navigation. Il recherche les en-têtes écrits dans les cellules de markdown, et affiche les liens vers eux dans la barre latérale d'une manière hiérarchique. La barre latérale est redimensionnable et pliable. Voir la capture d'écran ci-dessous.

il est facile à installer, et tire profit des codes JS et CSS "personnalisés" qui sont exécutés à chaque fois qu'un ordinateur portable est ouvert, de sorte que vous n'avez pas besoin d'exécuter manuellement il.

enter image description here

4
répondu Shovalt 2018-01-30 08:42:47

comme Ian l'a déjà souligné, il y a une extension de table des matières par minrk pour le carnet IPython. J'ai eu quelques difficultés à le faire fonctionner et fait de ce IPython Notebook qui produit semi-automatiquement les fichiers pour l'extension de la table des matières de minrk dans Windows. Il n'utilise pas les commandes 'curl'-ni les liens, mais écrit *.js et *.les fichiers css directement dans votre ordinateur portable IPython-profil-répertoire.

il y a une section dans le carnet appelée "Ce que vous devez faire' - suivre et avoir une belle flottant table des matières : )

Voici une version html qui le montre déjà: http://htmlpreview.github.io/?https://github.com/ahambi/140824-TOC/blob/master/A%20floating%20table%20of%20contents.htm

1
répondu Anna Christine 2014-08-24 13:42:15

Voici mon approche, maladroit comme il est, et disponibles dans github:

mettez dans la toute première cellule de carnet, la cellule d'importation:

from IPythonTOC import IPythonTOC

toc = IPythonTOC()

quelque part après la cellule d'importation, mettez dans la cellule genTOCEntry mais ne la lancez pas encore:

''' 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

comme le carnet est développé, mettez ce genTOCMarkdownCell avant de commencer un nouveau section:

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

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

!cat TOCMarkdownCell.txt

!rm TOCMarkdownCell.txt

Déplacer la genTOCMarkdownCell au point dans votre ordinateur où vous souhaitez commencer une nouvelle section et faire de l'argument de genTOCMarkdownCell la chaîne de titre pour votre nouveau l'article, puis l'exécuter. Ajoutez une cellule markdown juste après elle et copiez la sortie de genTOCMarkdownCell dans la cellule markdown qui commence votre nouvelle section. Ensuite, allez à la cellule de genTOCEntry près du haut de votre carnet et lancez-le. Par exemple, si vous faites l'argument à genTOCMarkdownCell comme montré ci-dessus et l'exécuter, vous obtenez cette sortie pour coller à la première démarque des cellules de votre nouvellement indexée section:

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

###Introduction

puis quand vous allez en haut de votre carnet et lancez genTocEntry, vous obtenez la sortie:

[Introduction](#Introduction)

copiez cette chaîne de liens et collez-la dans la cellule TOC markdown comme suit:

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

#TOC

[Introduction](#Introduction)

après avoir édité la cellule TOC Pour insérer la chaîne de liens et appuyer sur Maj-enter, le lien vers votre nouvelle section apparaîtra dans votre bloc-notes table des matières en tant que Lien web et en cliquant dessus, vous positionnerez le navigateur vers votre nouvelle section.

une chose que j'oublie souvent, c'est que cliquer sur une ligne dans la table des matières fait passer le navigateur à cette cellule mais ne le sélectionne pas. Quelle que soit la cellule active lorsque nous avons cliqué sur le lien TOC, elle est toujours active, donc une flèche vers le bas ou vers le haut ou shift-enter se réfère à une cellule encore active, et non à la cellule que nous avons obtenue en cliquant sur le lien TOC.

1
répondu upandacross 2015-08-15 01:19:00