Jupyter Notebook 폰트 변경

Yoonkeee·2021년 1월 17일
6
post-thumbnail

서론

이 글에서 소개하는 것

Jupyter Notebook 환경 설정

  • CSS를 사용하지 않고 jt -t [theme] -f [font] ... 명령어를 통해 특정 Font(D2Coding)로 설정하기

가능한 것

  • 원하는 Theme(이하 테마)와 Font(이하 폰트) 및 기타 옵션들을 명령어를 통해 쉽게 설정
  • Windows, macOS 환경에서 설정

설정하는 곳으로 바로가기(링크)

Jupyter Themes 폰트 설정

Jupyter Notebook에 특정 폰트(ex: D2Coding)를 설정하는 방법으로는 custom.css 파일에 font-family를 설정해주는 방법(링크)이 널리 알려졌습니다.
하지만 이는 근본적인 방법이 아니므로 어색함과 불편함을 느꼈고, 개발자스러운 근본적인 해결 방법을 찾아봤습니다.

근본적인 해결 방법이란?

jt -t monokai -f D2Coding -fs 14 -altp -tf D2Coding -tfs 14 -nf D2Coding -nfs 14 -cellw 90% -T -N -ofs 12 -cursc r

제게 근본적인 해결 방법이란 Terminal에서 위와 같은 명령어 입력으로 설정하는 방법입니다.
이 방식이 필요한 이유는 jt -t [테마] 로 설정 시 custom.css 파일이 해당 테마로 덮어쓰기가 되기 때문에, 원하는 폰트를 적용하는 방법이 매우 복잡해집니다.
custom.css에서 수많은 font-family 중에 원하는 부위에 적용되는 부분을 찾아가며 노가다를 하는 것은 개발자스럽지 않은 방법이라고 생각되어 거부감이 생겼습니다.

  • 만약 CSS를 수정해서 사용 중에 테마를 바꾸고 싶은 상황이 온다면?

본론

0. 환경

  • Jupyter Notebook (Installed via pip)

    • NameVersion
      jupyter core4.6.0
      jupyter-notebook6.0.1
      ipython7.8.0
      ipykernel5.1.3
      jupyter client5.3.4
  • OS

    • macOS Big Sur 11.1 with iTerm2
    • Windows 10 with cmder
    • Jupyter installed via pip
  • Font

1. Non-Default Font로 설정 시 발생하는 에러 원인 찾아가기

jt -t monokai -f D2Coding -fs 14 -altp -tf D2Coding -tfs 14 -nf D2Coding -nfs 14 -cellw 90% -T -N -ofs 12 -cursc r

각 명령어의 옵션 정보를 보려면 여기를 눌러주세요.
에러 내용을 살펴보면 ...\stylefx.py 파일의 line 143에서 에러가 발생했습니다.

stylefx.py를 찾았습니다.
경로를 보고 찾아가도 되고, 제가 사용한 프로그램은 Everything입니다.

VSCode, 메모장등의 에디터로 파일을 열어봅니다.

2. stylefx.py 코드 살펴보기

위의 에러에서 봤던 코드입니다. 이 부분을 고쳐주면 될 것 같습니다.

monofont에 어떤 값이 문제인지 print를 통해 확인해봅니다.

jt -t monokai -f D2Coding ...

해당 코드의 monofont는 -f 옵션에 넣은 폰트명임을 알게 됐습니다.

stored_font_dicts를 살펴보겠습니다.

위에서 봤던 에러 메세지가 보입니다.

3. 문제 해결

dict형의 fonts에 설정하고자 하는 폰트명을 작성합니다. 'mono', 'sans', 'serif' 세 곳에 모두 작성했습니다.

fontdir을 살펴봅니다.

4. 폰트 넣기

경로: fontdir = ... \monospace\[폰트명] 입니다. 설정하고자 하는 폰트를 어디에 넣어야 될지 찾았습니다.

원하는 폰트를 넣어줄 경로입니다. 해당 경로에서 Admin은 제 PC에 설정된 계정명입니다.
이는 사용자마다 다를 수 있습니다.

해당 위치에 원하는 폰트 이름으로 폴더를 생성하고, 그 폴더에 폰트이름.ttf 형식으로 넣어줍니다.

결론

1. 폰트 적용

다시 명령어를 입력해줬더니 아무런 에러도 출력되지 않았습니다. 적용이 제대로 됐는지 확인해보겠습니다.

브라우저는 Google Chrome을 사용했고, cmder에서 jupyter notebook 명령어를 통해 실행했습니다. CSS는 따로 설정하지 않았습니다.
Chrome 웹 스토어에서 설치한 확장 프로그램 WhatFont를 사용해서 적용된 폰트를 확인해봅니다.
D2Coding이 정상적으로 적용된 것을 확인했습니다.

ipynb 내부에서도 잘 적용이 되었는지 확인해봅니다.

Input Cells, Output Cells, Markdown Cells 모두 D2Coding Font가 적용되었음을 확인했습니다.

2. macOS에서 설정하기

macOS Big Sur 11.1에서도 위와 동일한 프로세스로 에러 없이 설정하였습니다.

3. jt 명령어 옵션

jt -t monokai -f D2Coding -fs 14 -altp -tf D2Coding -tfs 14 -nf D2Coding -nfs 14 -cellw 90% -T -N -ofs 12 -cursc r
  • -t monokai : monokai 테마로 설정
  • (-f, -tf, -nf) D2Coding : D2Coding으로 폰트 설정
  • -fs, -tfs, -nfs, -ofs : 폰트 사이즈 설정
  • cursc r : 커서의 색상을 red로 설정

전체 옵션

Description of Command Line options(Github 링크)

cl optionsargdefault
Usage help-h--
List Themes-l--
Theme Name to Install-t--
Code Font-f--
Code Font-Size-fs11
Notebook Font-nf--
Notebook Font Size-nfs13
Text/MD Cell Font-tf--
Text/MD Cell Fontsize-tfs13
Pandas DF Fontsize-dfs9
Output Area Fontsize-ofs8.5
Mathjax Fontsize (%)-mathfs100
Intro Page Margins-mauto
Cell Width-cellw980
Line Height-lineh170
Cursor Width-cursw2
Cursor Color-cursc--
Alt Prompt Layout-altp--
Alt Markdown BG Color-altmd--
Alt Output BG Color-altout--
Style Vim NBExt*-vim--
Toolbar Visible-T--
Name & Logo Visible-N--
Kernel Logo Visible-kl--
Reset Default Theme-r--
Force Default Fonts-dfonts--

마무리

Jupyter Notebook 환경에서 테마와 폰트를 모두 원하는대로 설정하기 위해 찾아봤으나 마땅한 방법이 없었고, CSS 설정 방법만 나와있어서 안타까웠습니다.
나 자신이 편하고 만족하기 위해서 해결 방법을 찾았고, 이를 널리 공유하고자 블로그를 만들어봤습니다.
출처를 링크로 남겨주신다면 외부 사용은 감사합니다😆

6개의 댓글

comment-user-thumbnail
2021년 3월 11일

존경합니다 :)

답글 달기
comment-user-thumbnail
2021년 5월 18일

진짜 너무 최고에요,,, 감사합니다!

답글 달기
comment-user-thumbnail
2021년 6월 25일

Jupyter Theme 설치 후 진행하세요...
이 글을 첨으로봤는데 jt가 뭔지 몰라서 찾아봤네요...

답글 달기
comment-user-thumbnail
2021년 9월 29일

감사합니다!! 큰 도움됐습니다ㅎㅎ 그런데 Alt Prompt Layout이 무슨 기능을 하나요? 찾아봐도 기능이 나오진 않네요ㅜㅜ

1개의 답글
comment-user-thumbnail
2024년 4월 12일

정말 초고수시군요 ...

답글 달기