JupyterLabでPDFを出力する際に日本語が表示できずに困っていました。なんとか解決できたので、忘れないように備忘録を残しておきます。
JupyterLabとは
公式ページの言葉を借りると、JupyterLab は、ノートブック、コード、データのための最新の Web ベースのインタラクティブな開発環境です。
JupyterLab is the latest web-based interactive development environment for notebooks, code, and data.
百聞は一見に如かずで、ブラウザ版のデモを使ってみると雰囲気が掴めるかもしれません。 jupyter.org
Docker版JupyterLabの選定
インストール方法を調べたりしている中で、Docker版が公開されていることがわかりました。
Selecting an Image — Docker Stacks documentation
Docker環境を構築済みの場合は非常に楽に実行できるため、今回はDocker版を利用することにしました。
No | 名称 | 特徴 |
---|---|---|
1 | jupyter/docker-stacks-foundation | ・最も小さい ・JupyterLabなどは含まない |
2 | jupyter/base-notebook | ・jupyter/docker-stacks-foundationの全内容を含む ・JupyterLabなどを含む ・LaTeXを含まない(PDF出力不可) |
3 | jupyter/minimal-notebook | ・jupyter/base-notebookの全内容を含む ・LaTeXを含む |
4 | jupyter/r-notebook | ・jupyter/minimal-notebookの全内容を含む ・Rの環境を含む |
5 | jupyter/julia-notebook | ・jupyter/minimal-notebookの全内容を含む ・Juliaの環境を含む |
6 | jupyter/scipy-notebook | ・jupyter/minimal-notebookの全内容を含む ・Pythonの環境を含む |
この他にもいくつかイメージがあるようでした。私はPythonの一部のライブラリを使いたい程度でしたので、jupyter/minimal-notebookをベースに、必要なライブラリを手動で追加することにしました。
環境構築
簡単のためにバージョンの固定などはせず、最新版を取得する構成としました。あくまで2023年12月時点に動作しただけということにご注意ください。
■フォルダ構成
% ls -1F
Dockerfile
docker-compose.yml
requirements.txt
work/
■Dockerfile
% cat Dockerfile # jupyter/minimal-notebookイメージをベースにする FROM jupyter/minimal-notebook:latest # LaTeXをインストールする USER root RUN apt-get update && \ apt-get install -y --no-install-recommends \ texlive-lang-japanese \ texlive-lang-chinese \ texlive-xetex \ && apt-get clean && rm -rf /var/lib/apt/lists/* # nbconvertのテンプレートファイルを編集する RUN sed -i 's/\\documentclass\[11pt\]{article}/\\documentclass\[xelatex,ja=standard\]{bxjsarticle}/g' /opt/conda/share/jupyter/nbconvert/templates/latex/index.tex.j2 # 外部ライブラリをインストールする COPY requirements.txt . RUN pip install -r requirements.txt # ユーザーをjovyanに戻す USER jovyan # 作業用ディレクトリを指定する WORKDIR /work
■docker-compose.yml
% cat docker-compose.yml version: '3' services: jupyterlab: # Dockerfileで作成したイメージをビルドする build: context: . dockerfile: Dockerfile # ポートを開放する ports: - "8888:8888" # コンテナ名称を設定する container_name: jupyterlab # ローカルのworkディレクトリをマウントする volumes: - "./work:/home/jovyan/work" # 環境変数を指定する environment: - JUPYTER_ENABLE_LAB=yes # 作業用ディレクトリを指定する working_dir: /home/jovyan/work # 起動コマンドを指定する command: start.sh jupyter lab --NotebookApp.token=''
■requirements.txt
% cat requirements.txt numpy pandas # JupytetLab拡張機能 jupyterlab_code_formatter isort black
■ビルド・起動
% docker compose build % docker compose up
苦労したポイント
さまざまなサイトを調べていると、日本語PDF出力のために2つのポイントがあると分かりました。
- 日本語出力のためにパッケージを追加でインストールする
- JupyterLabで使用しているテンプレートが日本語環境向けでないので修正する
2.の修正はサイトによって対処方がまちまちで、私の環境ではどうするかが不明でした。
JupyterのPDF出力の日本語対応法(2020年12月版) #Python - Qiita こちらの記事を参考に、私の環境での当該テンプレートファイルの保存場所を調査していきました。
以下は、JupyterLab内のTerminalにて確認しています。
(base) jovyan@107e7788214c:~/work$ jupyter --path config: /home/jovyan/.jupyter /home/jovyan/.local/etc/jupyter /opt/conda/etc/jupyter /usr/local/etc/jupyter /etc/jupyter data: /home/jovyan/.local/share/jupyter /opt/conda/share/jupyter /usr/local/share/jupyter /usr/share/jupyter runtime: /home/jovyan/.local/share/jupyter/runtime (base) jovyan@107e7788214c:~/work$ ls /opt/conda/share/jupyter/nbconvert/templates/latex base.tex.j2 display_priority.j2 index.tex.j2 report.tex.j2 style_bw_python.tex.j2 style_jupyter.tex.j2 conf.json document_contents.tex.j2 null.j2 style_bw_ipython.tex.j2 style_ipython.tex.j2 style_python.tex.j2 (base) jovyan@107e7788214c:~/work$
data:
の各パスを順次見ていくと、/opt/conda/share/jupyter/nbconvert/templates/latex
に当該のindex.tex.j2
が保存されていました。
こちらの修正も手作業は面倒なため、Dockerfileにてsedで置換しております。