Jupyter Notebook PDF出力 日本語設定

毎月開催している桜井進のPython・UNIX教室ではJupyter Notebookファイルをテキストにしています
受講生にはhoge.ipynbと全セル出力したhoge.pdfを配付するので
hoge.ipynbをhoge.pdfに変換します
以下の方法がわかるまでは印刷からPDF出力する方法を用いてきましたが
印刷レイアウトがイマイチでした

ようやくNotebook 7.0.0がリリースされました
これを機にnbconvertとjupyterで日本語PDF変換できるようにするための方法を探りました

Jupyter Notebookファイル hoge.ipynbをPDFに変換する方法は2つ
ターミナルから

$ jupyter nbconvert hoge.ipynb --to pdf

jupyterから
File -> Save and Export Notebook As… -> PDF

スクリーンショット 2023 07 27 15 49 05

どちらもLaTeX経由でPDFに変換するので
TeX Live等がインストールされていることが必須です
デフォルトでは日本語は通りません
それぞれの設定ファイルを編集して日本語が通るようにします

設定ファイルの場所を調べる

$ jupyter --path
config:
    /Users/sakuraisusumu/.jupyter
    /Users/sakuraisusumu/.local/etc/jupyter
    /Users/sakuraisusumu/.pyenv/versions/3.11.4/etc/jupyter
    /usr/local/etc/jupyter
    /etc/jupyter
data:
    /Users/sakuraisusumu/Library/Jupyter
    /Users/sakuraisusumu/.local/share/jupyter
    /Users/sakuraisusumu/.pyenv/versions/3.11.4/share/jupyter
    /usr/local/share/jupyter
    /usr/share/jupyter
runtime:
    /Users/sakuraisusumu/Library/Jupyter/runtime

dataに示されたディレクトリを1つずつ調べて
index.tex.j2
base.tex.j2
を探します

jupyter nbconvert の設定ファイル

~/.pyenv/versions/3.11.4/share/jupyter/nbconvert/templates/latex/index.tex.j2

これを開いて次のように書き換えます

%===============================================================================
% Latex Article
%===============================================================================

((*- block docclass -*))
\documentclass[xelatex,ja=standard]{bxjsarticle}
((*- endblock docclass -*))

jupyter の設定ファイル

~/.pyenv/versions/3.11.4/share/jupyter/nbconvert/templates/latex/base.tex.j2

これを開いて14行目を次のように書き換えます

((=- Latex base template (must inherit)
This template builds upon the abstract template, adding common latex output
functions. Figures, data_text,
This template defines defines a default docclass, the inheriting class should
override this.-=))

((*- extends 'document_contents.tex.j2' -*))

%===============================================================================
% Abstract overrides
%===============================================================================

((*- block header -*))
    ((* block docclass *))\documentclass[xelatex,ja=standard]{bxjsarticle}((* endblock docclass *))

MacOSでは以上の変更で日本語出力OK
ubuntu 22.04では、以上の設定ではダメで
/Users/sakuraisusumu/.local/share/jupyter
の2つのファイルの変更で日本語出力OKでした

これでどちらの方法でも日本語PDFが出力されるようになります
スクリーンショット 2023 07 27 16 13 35