Làm cách nào để thêm mục lục vào sổ ghi chép Jupyter / JupyterLab?


106

Tài liệu tại http://ipython.org/ipython-doc/stable/interactive/notebook.html cho biết

Bạn có thể cung cấp một cấu trúc khái niệm cho toàn bộ tài liệu tính toán của mình bằng cách sử dụng các cấp tiêu đề khác nhau; Có 6 cấp độ có sẵn, từ cấp độ 1 (cấp cao nhất) xuống cấp độ 6 (đoạn văn). Chúng có thể được sử dụng sau này để xây dựng mục lục, v.v.

Tuy nhiên, tôi không thể tìm thấy hướng dẫn ở bất kỳ đâu về cách sử dụng tiêu đề phân cấp của mình để tạo mục lục như vậy. Có cách nào để làm việc này không?

NB: Tôi cũng quan tâm đến các loại điều hướng khác bằng cách sử dụng tiêu đề máy tính xách tay ipython, nếu có. Ví dụ: nhảy lùi và chuyển tiếp từ tiêu đề này sang tiêu đề khác để nhanh chóng tìm thấy phần đầu của mỗi phần hoặc ẩn (gấp) nội dung của toàn bộ phần. Đây là danh sách mong muốn của tôi - nhưng bất kỳ loại điều hướng nào cũng sẽ được quan tâm. Cảm ơn!


xem câu trả lời của @Nikolay bên dưới để biết giải pháp chung hoạt động trên tất cả các trang web .. đây là một câu trả lời tuyệt vời.
ihightower

Để bổ sung cho các giải pháp sổ ghi chép Jupyter hiện có, tôi đã thêm các hướng dẫn JupyterLab bên dưới.
joelostblom

Câu trả lời:


52

Có một ipython nbextension giúp xây dựng mục lục cho một cuốn sổ. Nó dường như chỉ cung cấp điều hướng, không phải gấp phần.


Cảm ơn, tôi cho rằng đây là những gì tài liệu đã đề cập đến.
user2428107

2
Đối với những người muốn cài đặt nó trong jupyter 4, bài đăng này có thể hữu ích.
Syrtis Major

9
Chỉ cần cập nhật điều này: hiện có một tiện ích mở rộng nbextensions, gói nhiều tiện ích mở rộng lại với nhau và cho phép bạn quản lý chúng thông qua chính jupyter. Tôi nghĩ bây giờ là cách dễ nhất để có được ToC2. Và nó cung cấp các phần mở rộng có liên quan khác như gấp phần. Đó là tại github.com/ipython-contrib/jupyter_contrib_nbextensions
user2428107 Ngày

93

Bạn có thể thêm TOC theo cách thủ công với Markdown và HTML. Đây là cách tôi đã thêm:

Tạo TOC ở đầu Jupyter Notebook:

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

Thêm neo html vào toàn bộ nội dung:

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

code blocks...

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

code blocks...

Nó có thể không phải là cách tiếp cận tốt nhất, nhưng nó hoạt động. Hi vọng điêu nay co ich.


15
Điều này không còn hiệu quả với tôi nữa, nhưng một cách tiếp cận tương tự thì có .
joelostblom

2
cũng "cách tiếp cận tương tự" như sau: stackoverflow.com/questions/5319754/… tl; dr: sử dụng <a name="pookie"></a>cho neo và sử dụng liên kết:Take me to [pookie](#pookie)
michael

2
Đối với tất cả các tiêu đề trong mục đánh dấu của bạn, sổ ghi chép sẽ tự động thêm ký tự neo. Bạn có thể nhấp vào dấu ngoặc kép (¶) ở bên phải của các tiêu đề mà bạn thấy khi di chuột qua chúng, để hiển thị mỏ neo trong thanh địa chỉ trình duyệt của bạn. Bạn có thể sử dụng mỏ neo này thay vì thêm neo theo cách thủ công vào các phần của phần đánh dấu của bạn. Ngoài ra, điều tốt nhất là nó hoạt động trên các tế bào.
aaruja

1
Tôi có tập lệnh add_toc.py này thêm một ô đánh dấu xuống ở trên cùng với danh sách nội dung. Giải pháp của một người nghèo nếu bạn không muốn cài đặt tiện ích mở rộng.
user2148414


18

Làm thế nào về việc sử dụng một plugin Trình duyệt cung cấp cho bạn tổng quan về BẤT KỲ trang html nào. Tôi đã thử những cách sau:

Cả hai đều hoạt động khá tốt cho Máy tính xách tay IPython. Tôi đã miễn cưỡng sử dụng các giải pháp trước đó vì chúng có vẻ hơi không ổn định và cuối cùng đã sử dụng các phần mở rộng này.


1
Rất hữu ích! Nhưng một số chức năng tích hợp sẽ có ý nghĩa rất nhiều - đặc biệt là khi kết hợp với đánh dấu
dmeu 15/02/16

13

Gần đây tôi đã tạo một tiện ích mở rộng nhỏ cho Jupyter có tên là jupyter-navbar . Nó tìm kiếm các tiêu đề được viết trong các ô đánh dấu và hiển thị các liên kết đến chúng trong thanh bên theo kiểu phân cấp. Thanh bên có thể thay đổi kích thước và thu gọn. Xem ảnh chụp màn hình bên dưới.

Nó rất dễ cài đặt và tận dụng các mã JS và CSS 'tùy chỉnh' được thực thi bất cứ khi nào sổ ghi chép được mở, vì vậy bạn không cần phải chạy nó theo cách thủ công.

nhập mô tả hình ảnh ở đây


1
Thật vậy, nó rất dễ cài đặt và mã nguồn cũng thân thiện. Dự án tốt đẹp!
Carson

13

Hiện có hai gói có thể được sử dụng để xử lý các phần mở rộng của Jupyter:

  1. jupyter_contrib_nbextensions cài đặt các phần mở rộng, bao gồm cả mục lục;

  2. jupyter_nbextensions_configurator cung cấp giao diện người dùng đồ họa để định cấu hình nbextensions nào được bật (tải tự động cho mọi sổ ghi chép) và cung cấp các điều khiển để định cấu hình các tùy chọn của nbextensions.

CẬP NHẬT:

Bắt đầu từ các phiên bản gần đây của jupyter_contrib_nbextensions, ít nhất condabạn không cần cài đặt jupyter_nbextensions_configuratorvì nó được cài đặt cùng với các tiện ích mở rộng đó.


10

Hướng dẫn JupyterLab ToC

Đã có nhiều câu trả lời hay cho câu hỏi này, nhưng chúng thường yêu cầu các chỉnh sửa để hoạt động bình thường với sổ ghi chép trong JupyterLab. Tôi đã viết câu trả lời này để trình bày chi tiết các cách có thể để đưa ToC vào sổ ghi chép khi làm việc và xuất từ ​​JupyterLab.

Như một bảng điều khiển bên

Phần mở rộng jupyterlab-toc thêm ToC làm bảng điều khiển bên có thể đánh số tiêu đề, phần thu gọn và được sử dụng để điều hướng (xem gif bên dưới để biết bản trình diễn). Cài đặt bằng lệnh sau

jupyter labextension install @jupyterlab/toc

nhập mô tả hình ảnh ở đây


Trong sổ ghi chép như một ô

Hiện tại, điều này có thể được thực hiện thủ công như trong câu trả lời của Matt Dancho hoặc tự động thông qua tiện ích mở rộng sổ ghi chép toc2 jupyter trong giao diện sổ ghi chép cổ điển.

Trước tiên, hãy cài đặt toc2 như một phần của gói jupyter_contrib_nbextensions :

conda install -c conda-forge jupyter_contrib_nbextensions

Sau đó, khởi chạy JupyterLab, truy cập Help --> Launch Classic Notebookvà mở sổ ghi chép mà bạn muốn thêm ToC. Nhấp vào biểu tượng toc2 trên thanh công cụ để hiển thị cửa sổ ToC nổi (xem gif bên dưới nếu bạn không tìm thấy), nhấp vào biểu tượng bánh răng và chọn hộp "Thêm ô ToC sổ ghi chép". Lưu sổ ghi chép và ô ToC sẽ ở đó khi bạn mở nó trong JupyterLab. Ô được chèn là ô đánh dấu có html trong đó, nó sẽ không tự động cập nhật.

Các tùy chọn mặc định của toc2 có thể được định cấu hình trong tab "Nbextensions" trong trang khởi chạy sổ tay cổ điển. Ví dụ, bạn có thể chọn đánh số các tiêu đề và neo ToC như một thanh bên (cá nhân tôi nghĩ rằng nó trông gọn gàng hơn).

nhập mô tả hình ảnh ở đây


Trong một tệp HTML đã xuất

nbconvertcó thể được sử dụng để xuất sổ ghi chép sang HTML sau các quy tắc về cách định dạng HTML đã xuất. Phần toc2mở rộng được đề cập ở trên thêm một định dạng xuất được gọi là html_toc, có thể được sử dụng trực tiếp nbconverttừ dòng lệnh (sau khi toc2phần mở rộng đã được cài đặt):

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

Hãy nhớ rằng các lệnh shell có thể được thêm vào các ô sổ tay bằng cách đặt trước chúng bằng dấu chấm than !, vì vậy bạn có thể dán dòng này vào ô cuối cùng của sổ ghi chép và luôn có tệp HTML có ToC được tạo khi bạn nhấn "Chạy tất cả các ô" ( hoặc bất kỳ đầu ra nào mà bạn mong muốn nbconvert). Bằng cách này, bạn có thể sử dụngjupyterlab-toc để điều hướng sổ ghi chép trong khi đang làm việc và vẫn nhận được ToC trong đầu ra đã xuất mà không cần phải sử dụng giao diện sổ ghi chép cổ điển (đối với những người thuần túy trong số chúng ta).

Lưu ý rằng việc định cấu hình các tùy chọn toc2 mặc định như được mô tả ở trên, sẽ không thay đổi định dạng của nbconver --to html_toc. Bạn cần mở sổ ghi chép trong giao diện sổ ghi chép cổ điển để siêu dữ liệu được ghi vào tệp .ipynb (nbconvert đọc siêu dữ liệu khi xuất) Ngoài ra, bạn có thể thêm siêu dữ liệu theo cách thủ công qua tab Công cụ sổ tay của thanh bên JupyterLab, ví dụ: giống:

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

Nếu bạn thích cách tiếp cận theo hướng GUI, bạn có thể mở sổ ghi chép cổ điển và nhấp vào File --> Save as HTML (with ToC) (mặc dù lưu ý rằng mục menu này không khả dụng cho tôi).


Các gif ở trên được liên kết từ tài liệu tương ứng của các phần mở rộng.


Tôi thích làm việc hơn jupyter lab, nhưng cần thêm TOC vào đầu ra HTML sổ ghi chép lớn. Điều này hoạt động hoàn hảo! Có một số bước bổ sung để nó hoạt động: 1. Bật TOC2, ví dụ: conda install -c conda-forge jupyter_nbextensions_configuratorđi tới http://localhost:8888/nbextensions, bỏ chọn "khả năng tương thích" và bật "Toc2" 2. Khởi chạy Notebbok cổ điển, sửa đổi cài đặt TOC theo nhu cầu của bạn và Add TOC to Cell(tiến hành như mô tả). 3. Mở .ipynbtệp của bạn và tìm kiếm "toc", sao chép cấu hình json toc và thêm vào siêu dữ liệu bằng tab công cụ của phòng thí nghiệm Jupyter
Alex

6

Giới thiệu

Như @Ian và @Sergey đã đề cập, nbextensions là một giải pháp đơn giản. Để làm rõ câu trả lời của họ, đây là một vài thông tin thêm.

Nbextensions là gì?

Nbextensions chứa một tập hợp các phần mở rộng bổ sung chức năng cho sổ ghi chép Jupyter của bạn.

Ví dụ: chỉ để trích dẫn một vài phần mở rộng:

  • Mục lục

  • Các tiêu đề có thể thu gọn

Cài đặt nbextensions

Việc cài đặt có thể được thực hiện thông qua Conda hoặc PIP

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

Sao chép tệp js và css

Để sao chép các tệp javascript và css của nbextensions vào thư mục tìm kiếm của máy chủ jupyter, hãy làm như sau:

jupyter contrib nbextension install --user

Chuyển đổi tiện ích mở rộng

Lưu ý rằng nếu bạn không quen với thiết bị đầu cuối, tốt hơn là cài đặt trình cấu hình nbextensions (xem phần tiếp theo)

Bạn có thể bật / tắt các tiện ích mở rộng mà bạn chọn. Như tài liệu đã đề cập, lệnh chung là:

jupyter nbextension enable <nbextension require path>

Cụ thể, để bật tiện ích mở rộng ToC (Mục lục), hãy thực hiện:

jupyter nbextension enable toc2/main

Cài đặt giao diện cấu hình (tùy chọn nhưng hữu ích)

Như tài liệu của nó cho biết, nbextensions_configurator cung cấp các giao diện cấu hình cho nbextensions.

Nó trông giống như sau: cấu hình nbextensions

Để cài đặt nó nếu bạn sử dụng conda:

conda install -c conda-forge jupyter_nbextensions_configurator

Nếu bạn không có Conda hoặc không muốn cài đặt thông qua Conda, hãy làm theo 2 bước sau:

pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

Đây là một câu trả lời tuyệt vời và chi tiết. Tôi đoán việc bật toc2/maincũng giống như kiểm tra "Mục lục (2)" trên localhost: 8888 / tree # nbextensions_configurator .
flow2k

4

Đây là phương pháp tiếp cận của tôi, khá phức tạp và có sẵn trong github :

Đặt vào ô sổ ghi chép đầu tiên, ô nhập:

from IPythonTOC import IPythonTOC

toc = IPythonTOC()

Ở đâu đó sau ô nhập, hãy đặt ô genTOCEntry nhưng chưa chạy:

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

print toc.genTOCEntry()

Bên dưới ô genTOCEntry`, tạo ô TOC làm ô đánh dấu:

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

#TOC

Khi sổ tay được phát triển, hãy đặt genTOCMarkdownCell này trước khi bắt đầu một phần mới:

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

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

!cat TOCMarkdownCell.txt

!rm TOCMarkdownCell.txt

Di chuyển genTOCMarkdownCell đến điểm trong sổ ghi chép của bạn nơi bạn muốn bắt đầu một phần mới và tạo đối số cho genTOCMarkdownCell tiêu đề chuỗi cho phần mới của bạn rồi chạy nó. Thêm một ô đánh dấu xuống ngay sau ô đó và sao chép kết quả từ genTOCMarkdownCell vào ô đánh dấu bắt đầu phần mới của bạn. Sau đó, chuyển đến ô genTOCEntry gần đầu sổ ghi chép của bạn và chạy nó. Ví dụ: nếu bạn tạo đối số cho genTOCMarkdownCell như được hiển thị ở trên và chạy nó, bạn sẽ nhận được đầu ra này để dán vào ô đánh dấu đầu tiên của phần mới được lập chỉ mục của bạn:

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

###Introduction

Sau đó, khi bạn lên đầu sổ ghi chép của mình và chạy genTocEntry, bạn sẽ nhận được kết quả:

[Introduction](#Introduction)

Sao chép chuỗi liên kết này và dán vào ô đánh dấu TOC như sau:

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

#TOC

[Introduction](#Introduction)

Sau khi bạn chỉnh sửa ô TOC để chèn chuỗi liên kết và sau đó bạn nhấn shift-enter, liên kết đến phần mới của bạn sẽ xuất hiện trong Mục lục sổ ghi chép của bạn dưới dạng một liên kết web và việc nhấp vào nó sẽ định vị trình duyệt đến phần mới của bạn.

Một điều tôi thường quên là việc nhấp vào một dòng trong TOC làm cho trình duyệt chuyển đến ô đó nhưng không chọn nó. Bất kỳ ô nào đang hoạt động khi chúng tôi nhấp vào liên kết TOC vẫn đang hoạt động, do đó, mũi tên xuống hoặc lên hoặc shift-enter đề cập đến ô vẫn hoạt động, không phải ô mà chúng tôi nhận được khi nhấp vào liên kết TOC.


2

Như Ian đã chỉ ra, có một phần mở rộng mục lục của minrk cho IPython Notebook. Tôi đã gặp một số khó khăn để làm cho nó hoạt động và làm cho nó Máy tính xách tay IPython tạo bán tự động các tệp cho phần mở rộng mục lục của minrk trong Windows. Nó không sử dụng các lệnh hoặc liên kết 'curl', nhưng ghi các tệp * .js và * .css trực tiếp vào thư mục IPython Notebook-profile-của bạn.

Có một phần trong sổ tay được gọi là 'Những gì bạn cần làm' - hãy làm theo nó và có một mục lục nổi đẹp mắt:)

Đây là phiên bản html đã hiển thị nó: http://htmlpreview.github.io/?https://github.com/ahambi/140824-TOC/blob/master/A%20floating%20table%20of%20contents.htm

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.