Nice programing

ipython 노트북에 목차를 추가하려면 어떻게해야합니까?

nicepro 2020. 10. 11. 11:18
반응형

ipython 노트북에 목차를 추가하려면 어떻게해야합니까?


http://ipython.org/ipython-doc/stable/interactive/notebook.html 의 설명서에 따르면

다른 수준의 제목을 사용하여 전체적으로 계산 문서에 대한 개념적 구조를 제공 할 수 있습니다. 레벨 1 (최상위 레벨)에서 레벨 6 (문단)까지 6 개의 레벨을 사용할 수 있습니다. 나중에 목차 등을 구성하는 데 사용할 수 있습니다.

그러나 계층 적 제목을 사용하여 이러한 목차를 만드는 방법에 대한 지침은 어디에서도 찾을 수 없습니다. 이 작업을 수행하는 방법이 있습니까?

NB : ipython 노트북 제목이있는 경우 다른 종류의 탐색에도 관심이 있습니다. 예를 들어 각 섹션의 시작 부분을 빠르게 찾기 위해 제목에서 제목으로 앞뒤로 건너 뛰거나 전체 섹션의 내용을 숨 깁니다 (접기). 이것은 내 위시리스트이지만 모든 종류의 탐색이 흥미로울 것입니다. 감사!


노트북의 목차를 구성 하는 ipython nbextension 이 있습니다. 섹션 접기가 아닌 탐색 만 제공하는 것 같습니다.


Markdown 및 HTML을 사용하여 TOC를 수동으로 추가 할 수 있습니다. 내가 추가 한 방법은 다음과 같습니다.

Jupyter Notebook 상단에 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...

최선의 방법은 아니지만 작동합니다. 도움이 되었기를 바랍니다.


너무 많은 JS 번거 로움이없는 옵션이 하나 더 있습니다 : https://github.com/kmahelona/ipython_notebook_goodies


모든 html 페이지의 개요를 제공하는 브라우저 플러그인을 사용하는 것은 어떻습니까? 나는 다음을 시도했다 :

둘 다 IPython 노트북에서 잘 작동합니다. 나는 이전 솔루션이 약간 불안정 해 보이며 결국 이러한 확장을 사용하기 때문에 사용을 꺼려했습니다.


최근에 jupyter-navbar 라는 이름의 Jupyter에 대한 작은 확장을 만들었습니다 . 마크 다운 셀에 쓰여진 헤더를 검색하고 계층 구조로 사이드 바에 링크를 표시합니다. 사이드 바는 크기를 조정하고 접을 수 있습니다. 아래 스크린 샷을 참조하십시오.

설치가 쉽고 노트북이 열릴 때마다 실행되는 '사용자 지정'JS 및 CSS 코드를 활용하므로 수동으로 실행할 필요가 없습니다.

여기에 이미지 설명 입력


이제 Jupyter 확장을 처리하는 데 사용할 수있는 두 개의 패키지가 있습니다.

  1. 목차 를 포함하여 확장 프로그램을 설치하는 jupyter_contrib_nbextensions

  2. 사용할 nbextension 을 구성하기위한 그래픽 사용자 인터페이스 (모든 노트북에 대해 자동로드)를 제공하고 nbextensions의 옵션을 구성하는 컨트롤을 제공하는 jupyter_nbextensions_configurator입니다.

최신 정보:

의 최신 버전부터는 해당 확장과 함께 설치 되므로 jupyter_contrib_nbextensions최소한 conda설치할 필요가 없습니다 jupyter_nbextensions_configurator.


내 접근 방식은 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에서 한 줄을 클릭하면 브라우저가 해당 셀로 이동하지만 선택하지는 않는다는 것입니다. 목차 링크를 클릭했을 때 활성 상태였던 셀은 여전히 ​​활성 상태이므로 아래쪽 또는 위쪽 화살표 또는 Shift-Enter는 TOC 링크를 클릭하여 얻은 셀이 아니라 여전히 활성 셀을 나타냅니다.


Ian이 이미 지적했듯이 IPython Notebook에 대한 minrk의 목차 확장이 있습니다. 나는 그것을 작동시키는 데 약간의 어려움이 있었고 Windows에서 minrk의 목차 확장을위한 파일을 반자동으로 생성하는 IPython Notebook만들었습니다 . 'curl'명령 또는 링크를 사용하지 않지만 * .js 및 * .css 파일을 IPython Notebook-profile-directory에 직접 씁니다.

노트북에는 'What you need to do' 라는 섹션이 있습니다. 따라 가면 멋진 플로팅 목차가 있습니다.)

다음은 이미 표시된 html 버전입니다. http://htmlpreview.github.io/?https://github.com/ahambi/140824-TOC/blob/master/A%20floating%20table%20of%20contents.htm


소개

@Ian과 @Sergey가 언급했듯이 nbextensions 는 간단한 솔루션입니다. 그들의 대답을 자세히 설명하기 위해 여기에 몇 가지 추가 정보가 있습니다.

nbextensions는 무엇입니까?

nbextensions에는 Jupyter 노트북에 기능을 추가하는 확장 프로그램 모음이 포함되어 있습니다.

예를 들어, 몇 가지 확장을 인용하기 위해 :

  • 목차

  • 접을 수있는 제목

nbextensions 설치

Conda 또는 PIP를 통해 설치할 수 있습니다.

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

js 및 css 파일 복사

nbextensions의 javascript 및 css 파일을 jupyter 서버의 검색 디렉토리에 복사하려면 다음을 수행하십시오.

jupyter contrib nbextension install --user

확장 기능 전환

터미널에 익숙하지 않은 경우 nbextensions configurator를 설치하는 것이 좋습니다 (다음 섹션 참조).

선택한 확장을 활성화 / 비활성화 할 수 있습니다. 문서에서 언급했듯이 일반 명령은 다음과 같습니다.

jupyter nbextension enable <nbextension require path>

구체적으로 ToC (목차) 확장을 사용하려면 다음을 수행하십시오.

jupyter nbextension enable toc2/main

구성 인터페이스 설치 (선택 사항이지만 유용함)

설명서에서 알 수 있듯이 nbextensions_configuratornbextensions에 대한 구성 인터페이스를 제공합니다.

다음과 같이 보입니다. nbextensions 구성자

conda를 사용하는 경우 설치하려면 :

conda install -c conda-forge jupyter_nbextensions_configurator

Conda가 없거나 Conda를 통해 설치하지 않으려면 다음 두 단계를 수행하십시오.

pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

참고 URL : https://stackoverflow.com/questions/21151450/how-can-i-add-a-table-of-contents-to-an-ipython-notebook

반응형