jupyter notebook の出力は pdf 形式で保存できます
その方法は,画面左上の「メニュー」の「名前を付けてダウンロード」から「PDF via LaTeX (.pdf)」を選ぶだけ.
ただし,この機能が正常に動作するためには
- LaTeX がインストールされていること
- 日本語用に設定ファイルを編集していること
の二つの条件を満たしておく必要があります
以下,その具体的方法をまとめます.
LaTeX のインストール
debianとか ubuntu なら,ディストーション標準の パッケージを入れるだけです
$ sudo apt install texlive-lang-japanese texlive-xetex
macOS なら BasicTeX を入れる方法がオススメです
pyopyopyo.hatenablog.com
設定ファイルの準備
LaTeXをインストールすれば pdf は出力できますが,日本語の文字(ひらがな・漢字)が表示されません.
設定ファイルを編集する必要があります
pdf 出力は,内部的には nbconvert と言う python モジュールで処理されています.nbconvert は article.tplx と言うテンプレートファイルをベースにpdfを出力しています
まずはそのテンプレートファイル article.tplx を探します.このファイルは,python インストールされているディレクトリの下, site-packages/nbconvert/templates/latex/ と言うディレクトリに保存されています.
このディレクトリは,nbconvert の設定ファイル ~/.jupyter/jupyter_nbconvert_config.json でも指定できます.もし ~/.jupyter/jupyter_nbconvert_config.json と言うファイルがあれば,以下のような書式で template_path が設定されています
{ "version": 1, "Exporter": { "template_path": [ ".", "path/to/jupyter_contrib_nbextensions/templates" ], } }
article.tplx を見つけたら次のように編集します
修正前
((*- block docclass -*)) \documentclass[11pt]{article} ((*- endblock docclass -*))
修正後
((*- block docclass -*)) \documentclass[xelatex,ja=standard]{bxjsarticle} ((*- endblock docclass -*))
これだけで 日本語を含む 綺麗なpdfが出力できるようになります.
トラブルシューティング
設定が上手く行かない場合は,以下の点を確認しましょう
古い nbconvert や テンプレートファイルが残っていませんか?
python 2.7や python3.6 の残骸がシステムに残っていると,システムには複数の article.tplx が存在してることになります.運が悪いとarticle.tplx を編集してもnbconvert は別の article.tplx を参照しているので,一向に設定が反映されない・・・と言う悲劇が起きます
デバッグ方法
以下のコマンドで,nbconvert を手動で起動できます.
$ jupyter nbconvert --to pdf filename.ipynb
さらにコマンドラインオプションを追加することで,デバッグ情報を確認することもできます
$ jupyter nbconvert --to pdf filename.ipynb --debug
デバッグ情報には,参照している jupyter_nbconvert_config.json のパス名なども含まれていますので,しっかり確認しましょう
pdf 出力は,内部では *.tex を一度生成して,それを *.pdfにコンパイルする,と言う処理です.上手く行かない場合は,nbconvert を手動で起動して,*.tex ファイルを見てみる,と言う方法もあります.
具体的には
$ jupyter nbconvert --to latex filename.ipynb
とします
出力されたtexファイルのコンパイルは xelatex を使います
$ xelatex filename.tex
これで filename.pdf が生成されます.
またテンプレートファイルを指定することもできます.例えば article.tplx の代わりに hogehoge.tplx を使う場合は
$ jupyter nbconvert --to latex --template hogehoge.tplx filename.ipynb
とします
テンプレートファイルは,~/.jupyter/jupyter_nbconvert_config.json で指定されている template_path から検索されます.デフォルトでは "." つまりカレントディレクトリが含まれているので, カレントディレクトリに article.tplx を配置して,適宜カスタマイズする,と言う使い方もできます.