Bir Jupyter / JupyterLab not defterine nasıl içindekiler tablosu ekleyebilirim?


108

En dokümantasyon http://ipython.org/ipython-doc/stable/interactive/notebook.html diyor

Farklı seviyelerde başlıklar kullanarak hesaplama belgeniz için bir bütün olarak kavramsal bir yapı sağlayabilirsiniz; Seviye 1'den (üst seviye) seviye 6'ya (paragraf) kadar 6 seviye mevcuttur. Bunlar daha sonra içindekiler vb. Oluşturmak için kullanılabilir.

Ancak, bu tür bir içindekiler tablosu oluşturmak için hiyerarşik başlıklarımı nasıl kullanacağımla ilgili talimatları hiçbir yerde bulamıyorum. Bunu yapmanın bir yolu var mı?

Not: Varsa ipython not defteri başlıklarını kullanan diğer gezinme türleriyle de ilgilenirim. Örneğin, her bölümün başlangıcını hızlıca bulmak veya tüm bölümün içeriğini gizlemek (katlamak) için başlıktan başlığa geri ve ileri atlamak. Bu benim dilek listem - ancak her türlü navigasyon ilgi çekici olacaktır. Teşekkürler!


Tüm web sayfalarında işe yarayan genel bir çözüm için aşağıdaki @ Nikolay'ın cevabına bakın .. bu harika bir cevap.
ihightower

Mevcut Jupyter dizüstü bilgisayar çözümlerini tamamlamak için aşağıdaki JupyterLab talimatlarını ekledim .
joelostblom

Yanıtlar:


52

Bir not defteri için içindekiler tablosu oluşturan bir ipython nbextension vardır. Görünüşe göre sadece navigasyon sağlıyor, bölüm katlama değil.


Teşekkürler, belgelerin kastettiği şeyin bu olduğunu varsayıyorum.
user2428107

2
Jupyter 4'e yüklemek isteyenler için bu yazı yardımcı olabilir.
Syrtis Major

9
Sadece bunu güncellemek için: Artık çok sayıda uzantıyı bir araya getiren ve bunları jupyter aracılığıyla yönetmenize izin veren bir nbextensions uzantısı var. Bence artık ToC2 almanın en kolay yolu bu. Ve bölüm katlama gibi diğer ilgili uzantıları sağlar. Hiç de var github.com/ipython-contrib/jupyter_contrib_nbextensions
user2428107

94

Markdown ve HTML ile manuel olarak bir TOC ekleyebilirsiniz. İşte nasıl ekledim:

Jupyter Not Defterinin üstünde TOC oluşturun:

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

Gövde boyunca html bağlantıları ekleyin:

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

code blocks...

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

code blocks...

En iyi yaklaşım olmayabilir ama işe yarıyor. Bu yardımcı olur umarım.


15
Bu artık benim için çalışmıyor, ancak benzer bir yaklaşım işe yarıyor .
joelostblom

2
ayrıca bununla aynı "benzer yaklaşım": stackoverflow.com/questions/5319754/… tl; dr: <a name="pookie"></a>bağlantı ve bağlantı kullanımı için kullanın:Take me to [pookie](#pookie)
michael

2
Not indirimlerinizdeki tüm başlıklar için, not defteri otomatik olarak bağlantı noktaları ekler. Tarayıcınızın adres çubuğundaki çapayı göstermek için üzerlerine geldiğinizde gördüğünüz başlıkların sağındaki pilcrow (¶) üzerine tıklayabilirsiniz. Markdown'unuzun bölümlerine manuel olarak çapa eklemek yerine bu çapayı kullanabilirsiniz. Ayrıca en iyi şey, hücreler arasında çalışmasıdır.
aaruja

1
İçindekiler listesi ile en üste bir işaretleme hücresi ekleyen add_toc.py komut dosyası var . Uzantıları yüklemek istemiyorsanız fakir bir adamın çözümü.
user2148414


18

HERHANGİ bir html sayfasına genel bir bakış sunan bir Tarayıcı eklentisi kullanmaya ne dersiniz? Aşağıdakileri denedim:

Her ikisi de IPython Dizüstü Bilgisayarlar için oldukça iyi çalışıyor. Biraz dengesiz göründükleri ve bu uzantıları kullanmaya başladıkları için önceki çözümleri kullanmak konusunda isteksizdim.


1
Çok yararlı! Ancak bazı yerleşik işlevler çok mantıklı olacaktır - özellikle
markdown

13

Yakın zamanda Jupyter için jupyter-navbar adlı küçük bir uzantı oluşturdum . Markdown hücrelerinde yazılan başlıkları arar ve bunlara bağlantıları hiyerarşik bir şekilde kenar çubuğunda görüntüler. Kenar çubuğu yeniden boyutlandırılabilir ve daraltılabilir. Aşağıdaki ekran görüntüsüne bakın.

Kurulumu kolaydır ve bir not defteri her açıldığında yürütülen 'özel' JS ve CSS kodlarından yararlanır, böylece manuel olarak çalıştırmanıza gerek kalmaz.

görüntü açıklamasını buraya girin


1
Aslında kurulumu kolaydır ve kaynak kodu da dostudur. Güzel proje!
Carson

13

Artık Jupyter uzantılarını işlemek için kullanılabilecek iki paket var:

  1. içindekiler de dahil olmak üzere uzantıları yükleyen jupyter_contrib_nbextensions ;

  2. jupyter_nbextensions_configurator , hangi nbextensions'ın etkinleştirildiğini (her not defteri için otomatik olarak yüklenir) yapılandırmak için grafiksel kullanıcı arabirimleri sağlar ve nbextensions seçeneklerini yapılandırmak için kontroller sağlar.

GÜNCELLEME:

Uygulamasının son sürümlerinden başlayarak jupyter_contrib_nbextensions, en azından bu uzantılarla birlikte yüklendiği condaiçin yüklemenize gerek yoktur jupyter_nbextensions_configurator.


12

JupyterLab ToC talimatları

Bu sorunun halihazırda pek çok iyi yanıtı var, ancak JupyterLab'deki dizüstü bilgisayarlarla düzgün çalışması için genellikle ince ayar yapılmasını gerektiriyorlar. Bu cevabı, JupyterLab'de çalışırken ve JupyterLab'den dışa aktarırken bir not defterine bir ToC eklemenin olası yollarını detaylandırmak için yazdım.

Yan panel olarak

Jupyterlab-TOC uzantısı kutu numarası başlıkları, çökme bölümler ve (tanıtım için Aşağıdaki resimde bakınız) navigasyon için kullanılabilecek bir yan yüz paneli olarak TOC ekler. Aşağıdaki komutla kurun

jupyter labextension install @jupyterlab/toc

görüntü açıklamasını buraya girin


Defterde bir hücre olarak

Şu anda, bu, Matt Dancho'nun cevabında olduğu gibi manuel olarak veya toc2 jupyter not defteri uzantısıyla otomatik olarak yapılabilir. klasik dizüstü bilgisayar arayüzündeki .

İlk olarak, jupyter_contrib_nbextensions paketinin bir parçası olarak toc2'yi kurun :

conda install -c conda-forge jupyter_contrib_nbextensions

Ardından, JupyterLab'i başlatın, gidin ve ToC'yi Help --> Launch Classic Notebookeklemek istediğiniz not defterini açın. Yüzen ToC penceresini açmak için araç çubuğundaki toc2 sembolünü tıklayın (bulamazsanız aşağıdaki gif'e bakın), dişli simgesini tıklayın ve "Not defteri ToC hücresi ekle" kutusunu işaretleyin. Not defterini kaydedin ve ToC hücresi JupyterLab'de açtığınızda orada olacaktır. Eklenen hücre, içinde html bulunan bir markdown hücresidir, otomatik olarak güncellenmeyecektir.

Toc2'nin varsayılan seçenekleri, klasik not defteri başlatma sayfasındaki "Nbextensions" sekmesinde yapılandırılabilir. Örneğin, başlıkları numaralandırmayı ve ToC'yi bir yan çubuk olarak sabitlemeyi seçebilirsiniz (kişisel olarak daha temiz göründüğünü düşünüyorum).

görüntü açıklamasını buraya girin


Dışa aktarılan bir HTML dosyasında

nbconvertdışa aktarılan HTML'nin nasıl biçimlendirileceğine ilişkin kuralları izleyerek not defterlerini HTML'ye dışa aktarmak için kullanılabilir. toc2Yukarıda bahsedilen uzantı olarak adlandırılan bir ihracat biçimi ekler html_tocile direkt olarak kullanılabilir, nbconvert(sonra komut hattı toc2uzantısı kurulduktan):

jupyter nbconvert file.ipynb --to html_toc
# Append `--ExtractOutputPreprocessor.enabled=False`
# to get a single html file instead of a separate directory for images

Kabuk komutlarının, önlerine ünlem işareti eklenerek not defteri hücrelerine eklenebileceğini unutmayın !, böylece bu satırı not defterinin son hücresine yapıştırabilir ve her zaman "Tüm hücreleri çalıştır" a ( veya hangi çıktıdan arzu ederseniz edin nbconvert). Bu şekilde kullanabilirsinjupyterlab-toc çalışırken not defterinde gezinmek için ve yine de klasik dizüstü bilgisayar arayüzünü (aramızdaki sadık kişiler için) kullanmaya gerek kalmadan dışa aktarılan çıktıda ToC'leri alabilirsiniz.

Yukarıda açıklandığı gibi, varsayılan toc2 seçeneklerinin yapılandırılması edeceği Not değil biçimini değiştirmek nbconver --to html_toc. Meta verilerin .ipynb dosyasına yazılması için not defterini klasik not defteri arayüzünde açmanız gerekir (nbconvert, dışa aktarırken meta verileri okur) Alternatif olarak, meta verileri JupyterLab kenar çubuğunun Not Defteri araçları sekmesi aracılığıyla manuel olarak ekleyebilirsiniz, örneğin bir şey sevmek:

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

GUI tabanlı bir yaklaşımı tercih ediyorsanız, klasik not defterini açıp tıklatabilmeniz gerekir File --> Save as HTML (with ToC) (ancak bu menü öğesinin benim için mevcut olmadığını unutmayın).


Yukarıdaki gifler, uzantıların ilgili belgelerinden bağlantılıdır.


Birlikte çalışmayı tercih ediyorum jupyter lab, ancak büyük bir dizüstü bilgisayar HTML çıktısına bir TOC eklemem gerekiyordu. Bu kusursuz çalışıyor! Çalışmasını sağlamak için bazı ek adımlar vardı: 1. TOC2'yi etkinleştirin, ör conda install -c conda-forge jupyter_nbextensions_configurator. Gidin http://localhost:8888/nbextensions, "uyumluluk" un işaretini kaldırın ve "Toc2" yi etkinleştirin 2. Klasik Notebbok'u başlatın, TOC ayarlarını ihtiyaçlarınıza göre değiştirin ve Add TOC to Cell(açıklandığı gibi devam edin). 3..ipynb Dosyanızı açın ve "toc"json toc yapılandırmalarını arayın
Alex

TOC hücresi eklemek için klasik not defterinde toc2 uzantısının çalışmasını sağlayamadım. Ancak, dizüstü bilgisayarı nbconvert ile dışa aktarmak --to html_tocişe yaradı. Format harika ve yan tarafa güzel bir TOC ve başlık numaraları ekliyor.
aimfeld

6

Giriş

@Ian ve @Sergey'in de belirttiği gibi, nbextensions basit bir çözümdür. Yanıtlarını detaylandırmak için işte birkaç bilgi daha.

Nbextensions nedir?

Nbextensions, Jupyter not defterinize işlevsellik ekleyen bir dizi uzantı içerir.

Örneğin, birkaç uzantıya atıfta bulunmak için:

  • İçindekiler

  • Daraltılabilir başlıklar

Nbextensions yükleyin

Kurulum Conda veya PIP üzerinden yapılabilir

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

JS ve css dosyalarını kopyalayın

Nbextensions javascript ve css dosyalarını jupyter sunucusunun arama dizinine kopyalamak için aşağıdakileri yapın:

jupyter contrib nbextension install --user

Uzantıları değiştir

Terminale aşina değilseniz, nbextensions yapılandırıcı kurmanın daha iyi olacağını unutmayın (bir sonraki bölüme bakın)

İstediğiniz uzantıları etkinleştirebilir / devre dışı bırakabilirsiniz. Belgelerin bahsettiği gibi, genel komut şudur:

jupyter nbextension enable <nbextension require path>

Somut olarak, ToC (İçindekiler) uzantısını etkinleştirmek için şunları yapın:

jupyter nbextension enable toc2/main

Yapılandırma arayüzünü yükleyin (isteğe bağlı ancak kullanışlı)

Belgelerinde belirtildiği gibi, nbextensions_configurator , nbextensions için yapılandırma arayüzleri sağlar.

Aşağıdaki gibi görünür: nbextensions yapılandırıcıları

Conda kullanıyorsanız yüklemek için:

conda install -c conda-forge jupyter_nbextensions_configurator

Conda'nız yoksa veya Conda aracılığıyla yüklemek istemiyorsanız, aşağıdaki 2 adımı uygulayın:

pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

Bu harika ve ayrıntılı bir cevap. Etkinleştirmek toc2/main, localhost: 8888 / tree # nbextensions_configurator'daki "İçindekiler (2)" yi kontrol etmekle aynıdır .
flow2k

4

İşte benim yaklaşımım, olduğu gibi ve github'da mevcut :

İlk not defteri hücresini, içe aktarma hücresini yerleştirin:

from IPythonTOC import IPythonTOC

toc = IPythonTOC()

İçe aktarım hücresinden sonra bir yere, genTOCEntry hücresini yerleştirin ancak henüz çalıştırmayın:

''' if you called toc.genTOCMarkdownCell before running this cell, 
the title has been set in the class '''

print toc.genTOCEntry()

GenTOCEntry hücresinin altında, markdown hücresi olarak bir TOC hücresi yapın:

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

#TOC

Dizüstü bilgisayar geliştirilirken, yeni bir bölüme başlamadan önce bu genTOCMarkdownCell'i koyun:

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

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

!cat TOCMarkdownCell.txt

!rm TOCMarkdownCell.txt

GenTOCMarkdownCell'i not defterinizde yeni bir bölüm başlatmak istediğiniz noktaya taşıyın ve genTOCMarkdownCell argümanını yeni bölümünüzün dize başlığını yapın ve ardından çalıştırın. Hemen arkasına bir markdown hücresi ekleyin ve genTOCMarkdownCell'deki çıktıyı yeni bölümünüzü başlatan markdown hücresine kopyalayın. Ardından, dizüstü bilgisayarınızın üst kısmına yakın genTOCEntry hücresine gidin ve çalıştırın. Örneğin, yukarıda gösterildiği gibi genTOCMarkdownCell için bağımsız değişken oluşturup çalıştırırsanız, bu çıktının yeni dizine eklenen bölümünüzün ilk işaretleme hücresine yapıştırılmasını sağlarsınız:

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

###Introduction

Ardından, not defterinizin üstüne gidip genTocEntry'yi çalıştırdığınızda, çıktıyı alırsınız:

[Introduction](#Introduction)

Bu bağlantı dizesini kopyalayın ve aşağıdaki gibi TOC markdown hücresine yapıştırın:

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

#TOC

[Introduction](#Introduction)

Bağlantı dizesini eklemek için TOC hücresini düzenledikten ve ardından shift-enter tuşuna bastıktan sonra, yeni bölümünüzün bağlantısı defterinizin İçindekiler Tablosunda bir web bağlantısı olarak görünecek ve tıklandığında tarayıcı yeni bölümünüze konumlandırılacaktır.

Sıklıkla unuttuğum bir şey, TOC'deki bir satıra tıklamanın tarayıcının o hücreye atlamasına neden olması ancak onu seçmemesidir. TOC bağlantısını tıkladığımızda hangi hücre etkin olursa olsun hala aktiftir, bu nedenle aşağı veya yukarı ok veya shift-enter, TOC bağlantısına tıklayarak aldığımız hücreyi değil, hala etkin olan hücreyi ifade eder.


2

Ian'ın daha önce belirttiği gibi, IPython Notebook için minrk tarafından hazırlanan bir içindekiler tablosu uzantısı var. Çalıştırmak için biraz sorun yaşadım ve Windows'ta minrk'nin içindekiler uzantısı için dosyaları yarı otomatik oluşturan bu IPython Not Defterini yaptım . 'Curl' komutlarını veya bağlantılarını kullanmaz, ancak * .js ve * .css dosyalarını doğrudan IPython Notebook-profil-dizininize yazar.

Defterde 'Yapmanız gerekenler' adında bir bölüm var - onu takip edin ve güzel bir içindekiler tablosu yapın :)

İşte onu zaten gösteren bir html sürümü: http://htmlpreview.github.io/?https://github.com/ahambi/140824-TOC/blob/master/A%20floating%20table%20of%20contents.htm

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.