In der Dokumentation unter http://ipython.org/ipython-doc/stable/interactive/notebook.html heißt es
Sie können eine konzeptionelle Struktur für Ihr Computerdokument als Ganzes mit verschiedenen Überschriftenebenen bereitstellen. Es stehen 6 Ebenen zur Verfügung, von Ebene 1 (oberste Ebene) bis Ebene 6 (Absatz). Diese können später zum Erstellen von Inhaltsverzeichnissen usw. verwendet werden.
Ich kann jedoch nirgendwo Anweisungen finden, wie ich meine hierarchischen Überschriften verwenden kann, um ein solches Inhaltsverzeichnis zu erstellen. Gibt es eine Möglichkeit, dies zu tun?
NB: Ich würde mich auch für andere Arten der Navigation mit ipython-Notizbuchüberschriften interessieren, falls vorhanden. Zum Beispiel von Überschrift zu Überschrift vor- und zurückspringen, um schnell den Anfang jedes Abschnitts zu finden, oder den Inhalt eines gesamten Abschnitts ausblenden (falten). Dies ist meine Wunschliste - aber jede Art von Navigation wäre von Interesse. Vielen Dank!
quelle
Antworten:
Es gibt eine ipython nbextension , die ein Inhaltsverzeichnis für ein Notizbuch erstellt. Es scheint nur eine Navigation zu bieten, keine Abschnittsfaltung.
quelle
Sie können ein Inhaltsverzeichnis manuell mit Markdown und HTML hinzufügen. So habe ich hinzugefügt:
Erstellen Sie ein Inhaltsverzeichnis oben auf dem Jupyter-Notizbuch:
Fügen Sie HTML-Anker im ganzen Körper hinzu:
Es ist vielleicht nicht der beste Ansatz, aber es funktioniert. Hoffe das hilft.
quelle
<a name="pookie"></a>
für Anker- undTake me to [pookie](#pookie)
Hier ist eine weitere Option ohne allzu großen JS-Aufwand: https://github.com/kmahelona/ipython_notebook_goodies
quelle
Wie wäre es mit einem Browser-Plugin, das Ihnen einen Überblick über JEDE HTML-Seite gibt. Ich habe folgendes versucht:
Beide funktionieren ziemlich gut für IPython-Notebooks. Ich wollte die vorherigen Lösungen nur ungern verwenden, da sie etwas instabil erscheinen und letztendlich diese Erweiterungen verwenden.
quelle
Ich habe kürzlich eine kleine Erweiterung für Jupyter namens jupyter-navbar erstellt . Es sucht nach Überschriften, die in Markdown-Zellen geschrieben sind, und zeigt Links zu diesen in der Seitenleiste hierarchisch an. Die Seitenleiste kann in der Größe geändert und reduziert werden. Siehe Screenshot unten.
Es ist einfach zu installieren und nutzt die benutzerdefinierten JS- und CSS-Codes, die beim Öffnen eines Notebooks ausgeführt werden, sodass Sie es nicht manuell ausführen müssen.
quelle
Es gibt jetzt zwei Pakete, mit denen Jupyter-Erweiterungen verarbeitet werden können:
jupyter_contrib_nbextensions , das Erweiterungen einschließlich des Inhaltsverzeichnisses installiert;
jupyter_nbextensions_configurator , der grafische Benutzeroberflächen zum Konfigurieren der aktivierten nbextensions bereitstellt (automatisch für jedes Notebook laden) und Steuerelemente zum Konfigurieren der Optionen der nbextensions bereitstellt.
AKTUALISIEREN:
Ab neueren Versionen von
jupyter_contrib_nbextensions
müssen Sie zumindest beiconda
nicht installieren,jupyter_nbextensions_configurator
da es zusammen mit diesen Erweiterungen installiert wird.quelle
JupyterLab ToC Anweisungen
Es gibt bereits viele gute Antworten auf diese Frage, aber sie erfordern häufig Optimierungen, um mit Notebooks in JupyterLab ordnungsgemäß zu funktionieren. Ich habe diese Antwort geschrieben, um detailliert zu beschreiben, wie ein Inhaltsverzeichnis in ein Notizbuch aufgenommen werden kann, während in JupyterLab gearbeitet und aus JupyterLab exportiert wird.
Als Seitenwand
Die Erweiterung jupyterlab-toc fügt den ToC als Seitenbereich hinzu, der Überschriften nummerieren, Abschnitte reduzieren und für die Navigation verwendet werden kann (siehe GIF unten für eine Demo). Installieren Sie mit dem folgenden Befehl
Im Notizbuch als Zelle
Derzeit kann dies entweder manuell wie in Matt Danchos Antwort oder automatisch über die toc2 jupyter Notebook-Erweiterung in der klassischen Notebook-Oberfläche erfolgen.
Installieren Sie zunächst toc2 als Teil des Bundles jupyter_contrib_nbextensions :
Starten Sie dann JupyterLab, gehen Sie zu
Help --> Launch Classic Notebook
und öffnen Sie das Notizbuch, in dem Sie den ToC hinzufügen möchten. Klicken Sie auf das toc2-Symbol in der Symbolleiste, um das schwebende ToC-Fenster aufzurufen (siehe das GIF unten, wenn Sie es nicht finden können), klicken Sie auf das Zahnradsymbol und aktivieren Sie das Kontrollkästchen "Notebook-ToC-Zelle hinzufügen". Speichern Sie das Notizbuch und die ToC-Zelle wird angezeigt, wenn Sie es in JupyterLab öffnen. Die eingefügte Zelle ist eine Markdown-Zelle mit HTML. Sie wird nicht automatisch aktualisiert.Die Standardoptionen des toc2 können auf der Registerkarte "Nbextensions" auf der klassischen Startseite des Notebooks konfiguriert werden. Sie können z. B. Überschriften nummerieren und den ToC als Seitenleiste verankern (was meiner Meinung nach sauberer aussieht).
In einer exportierten HTML-Datei
nbconvert
kann verwendet werden, um Notizbücher nach den folgenden Regeln zum Formatieren des exportierten HTML-Codes in HTML zu exportieren. Dietoc2
oben erwähnte Erweiterung fügt ein Exportformat mit dem Namen hinzuhtml_toc
, das direkt übernbconvert
die Befehlszeile verwendet werden kann (nachdem dietoc2
Erweiterung installiert wurde):Denken Sie daran, dass Shell-Befehle zu Notebook-Zellen hinzugefügt werden können, indem ihnen ein Ausrufezeichen vorangestellt wird.
!
Sie können diese Zeile also in die letzte Zelle des Notebooks einfügen und immer eine HTML-Datei mit einem ToC generieren lassen, wenn Sie auf "Alle Zellen ausführen" klicken ( oder was auch immer Sie ausgeben möchtennbconvert
). Auf diese Weise können Siejupyterlab-toc
während der Arbeit im Notebook navigieren und trotzdem ToCs in der exportierten Ausgabe abrufen, ohne auf die klassische Notebook-Oberfläche zurückgreifen zu müssen (für Puristen unter uns).Beachten Sie, dass das Konfigurieren der Standardoptionen für toc2 wie oben beschrieben das Format von nicht ändert
nbconver --to html_toc
. Sie müssen das Notizbuch in der klassischen Notizbuchoberfläche öffnen, damit die Metadaten in die IPynb-Datei geschrieben werden (nbconvert liest die Metadaten beim Exportieren). Alternativ können Sie die Metadaten manuell über die Registerkarte Notizbuch-Tools der JupyterLab-Seitenleiste hinzufügen, z mögen:Wenn Sie einen GUI-gesteuerten Ansatz bevorzugen, sollten Sie in der Lage sein, das klassische Notizbuch zu öffnen und auf zu klicken
File --> Save as HTML (with ToC)
(obwohl zu beachten ist, dass dieser Menüpunkt für mich nicht verfügbar war).Die obigen Gifs sind aus der jeweiligen Dokumentation der Erweiterungen verlinkt.
quelle
jupyter lab
, musste aber einer großen HTML-Ausgabe eines Notizbuchs ein Inhaltsverzeichnis hinzufügen. Das funktioniert einwandfrei! Es gab einige zusätzliche Schritte, um es zum Laufen zu bringen: 1. Aktivieren Sie TOC2, z. B.conda install -c conda-forge jupyter_nbextensions_configurator
gehen Sie zuhttp://localhost:8888/nbextensions
, deaktivieren Sie "Kompatibilität" und aktivieren Sie "Toc2". 2. Starten Sie Classical Notebbok, ändern Sie die TOC-Einstellungen an Ihre Bedürfnisse undAdd TOC to Cell
(fahren Sie wie beschrieben fort). 3. Öffnen Sie Ihre.ipynb
Datei und suchen Sie nach den"toc"
json toc-Konfigurationen, kopieren Sie sie und fügen Sie sie mithilfe der Registerkarte "Tools" des Jupyter LabEinführung
Wie @Ian und @Sergey erwähnt haben, ist nbextensions eine einfache Lösung. Um ihre Antwort zu erläutern, finden Sie hier einige weitere Informationen.
Was ist nbextensions?
Zum Beispiel, um nur einige Erweiterungen zu nennen:
Inhaltsverzeichnis
Zusammenklappbare Überschriften
Installieren Sie nbextensions
Die Installation kann über Conda oder PIP erfolgen
Kopieren Sie JS- und CSS-Dateien
Gehen Sie wie folgt vor, um die Javascript- und CSS-Dateien der nbextensions in das Suchverzeichnis des Jupyter-Servers zu kopieren:
Erweiterungen umschalten
Beachten Sie, dass es besser ist, den nbextensions-Konfigurator zu installieren, wenn Sie mit dem Terminal nicht vertraut sind (siehe nächster Abschnitt).
Sie können die Erweiterungen Ihrer Wahl aktivieren / deaktivieren. Wie in der Dokumentation erwähnt, lautet der generische Befehl:
Um die ToC-Erweiterung (Inhaltsverzeichnis) zu aktivieren, gehen Sie konkret wie folgt vor:
Konfigurationsschnittstelle installieren (optional, aber nützlich)
Wie in der Dokumentation angegeben, bietet nbextensions_configurator Konfigurationsschnittstellen für nbextensions.
Es sieht folgendermaßen aus:
So installieren Sie es, wenn Sie conda verwenden:
Wenn Sie Conda nicht haben oder nicht über Conda installieren möchten, führen Sie die folgenden zwei Schritte aus:
quelle
toc2/main
ist dasselbe wie das Überprüfen von "Inhaltsverzeichnis (2)" auf localhost: 8888 / tree # nbextensions_configurator .Hier ist mein Ansatz, klobig wie er ist und in Github verfügbar ist :
Geben Sie in die allererste Notizbuchzelle die Importzelle ein:
Fügen Sie irgendwo nach der Importzelle die genTOCEntry-Zelle ein, führen Sie sie jedoch noch nicht aus:
Erstellen Sie unterhalb der genTOCEntry-Zelle eine TOC-Zelle als Markdown-Zelle:
Setzen Sie diese genTOCMarkdownCell während der Entwicklung des Notebooks ein, bevor Sie einen neuen Abschnitt beginnen:
Bewegen Sie die genTOCMarkdownCell bis zu dem Punkt in Ihrem Notizbuch, an dem Sie einen neuen Abschnitt beginnen möchten, und führen Sie das Argument für genTOCMarkdownCell als Zeichenfolgentitel für Ihren neuen Abschnitt aus. Führen Sie ihn dann aus. Fügen Sie direkt danach eine Markdown-Zelle hinzu und kopieren Sie die Ausgabe von genTOCMarkdownCell in die Markdown-Zelle, die Ihren neuen Abschnitt startet. Gehen Sie dann zur genTOCEntry-Zelle oben in Ihrem Notebook und führen Sie sie aus. Wenn Sie beispielsweise das Argument für genTOCMarkdownCell wie oben gezeigt ausführen und es ausführen, wird diese Ausgabe in die erste Markdown-Zelle Ihres neu indizierten Abschnitts eingefügt:
Wenn Sie dann zum Anfang Ihres Notizbuchs gehen und genTocEntry ausführen, erhalten Sie die folgende Ausgabe:
Kopieren Sie diese Verknüpfungszeichenfolge und fügen Sie sie wie folgt in die TOC-Markdown-Zelle ein:
Nachdem Sie die Inhaltsverzeichniszelle bearbeitet haben, um die Verknüpfungszeichenfolge einzufügen, und dann die Umschalttaste drücken, wird der Link zu Ihrem neuen Abschnitt in Ihrem Notizbuch als Weblink angezeigt. Wenn Sie darauf klicken, wird der Browser in Ihrem neuen Abschnitt positioniert.
Eine Sache, die ich oft vergesse, ist, dass der Browser durch Klicken auf eine Zeile im Inhaltsverzeichnis zu dieser Zelle springt, diese aber nicht auswählt. Welche Zelle auch immer aktiv war, als wir auf den Inhaltsverzeichnis-Link geklickt haben, ist immer noch aktiv. Ein Abwärts- oder Aufwärtspfeil oder eine Umschalttaste bezieht sich also auf die noch aktive Zelle, nicht auf die Zelle, die wir durch Klicken auf den Inhaltsverzeichnis-Link erhalten haben.
quelle
Wie Ian bereits betont hat, gibt es für das IPython Notebook eine Erweiterung des Inhaltsverzeichnisses von minrk. Ich hatte einige Probleme damit und habe dieses IPython-Notizbuch erstellt, das die Dateien für die Inhaltsverzeichniserweiterung von minrk in Windows halbautomatisch generiert. Es verwendet nicht die 'curl'-Befehle oder -Links, sondern schreibt die Dateien * .js und * .css direkt in Ihr IPython Notebook-Profilverzeichnis.
Es gibt einen Abschnitt im Notizbuch mit dem Titel "Was Sie tun müssen" - folgen Sie ihm und haben Sie ein schönes schwebendes Inhaltsverzeichnis :)
Hier ist eine HTML-Version, die es bereits zeigt: http://htmlpreview.github.io/?https://github.com/ahambi/140824-TOC/blob/master/A%20floating%20table%20of%20contents.htm
quelle