notebookを共有するなら、やっぱりPDF
導入に際して
Jupyter環境の有無にかかわらず、notebookを他者と共有したい。そんな時にnotebookを別形式のファイルに変換できるパッケージnbconvertは超便利です。
Githubにアップロードするという手もありますが、アカウントが必要ですし、部外者も閲覧OKかどうかといったことも、配慮が必要になってきます。
LaTeXやMarkdownという選択肢もありますが、デバイスを問わず閲覧可能な形式と言ったら、やはりPDFが一番に挙げられます。
今回も例によって、以前CloudShellで構築した環境を利用します。
通常は既にインストールされているはずです。
~/miniconda3/bin/pip list | grep nbconvert
nbconvert 6.4.2
万が一未インストールであっても、すぐに出来ます。
~/miniconda3/bin/pip install nbconvert
Pandocのインストール
始めにドキュメント・コンバータPandocのインストールです。Minicondaにパッケージが用意されていますのでインストールもアップデートも容易です。
~/miniconda3/bin/conda install -c conda-forge pandoc
LaTeXのインストール
問題は組版処理システムLaTeXの導入に関わる部分です。こちらもMinicondaにtexlive-coreというパッケージが用意されていますが、このパッケージでは、今回の目的にのための要件を満たすことが出来ないため、使用しません。
一から導入するには通常公式サイトにて任意の公式ミラーサイトを選んでインストーラーを入手するところからとなりますが、操作手順も多くダウンロードにもかなり時間がかかります。
自身により手作業でセットアップしてみたいという方は、まずは下記のコマンドでインストーラーをダウンロードして展開して実行します。
curl -L https://ftp.yz.yamagata-u.ac.jp/pub/CTAN/systems/texlive/tlnet/install-tl-unx.tar.gz | tar xzv
./install-tl-20220611/install-tl
インストーラーを展開するディレクトリ名の数字の部分はリリース年月日をベースにしているため、アップデートのたびに変わりますので、確認の上、適宜修正をお願いします。
texliveのインストーラーinstall-tl
およびパッケージマネージャtlmgr
はperlのスクリプトで実装されていますが、無圧縮のファイルを1つずつ地道にダウンロードしていく仕様になっています。
インストーラーが起動したら、インストールオプションを設定します。入力の際の大文字・小文字は厳密に区別されますので、ご注意ください。
【インストールするコレクションの選択】
-
メインメニューの
Enter command:
プロンプトでC
を実行→サブメニューとなりプロンプトがEnter letter(s) to (de)select collection(s):
となる。 -
プロンプトで
-
を実行し、コレクションを未選択の状態に初期化する。 -
プロンプトで
abO
を実行し、3つのコレクションを選択する。 -
プロンプトで
R
を実行し、メインメニューに戻る。
【インストールディレクトリの設定】
-
メインメニューの
Enter command:
プロンプトでD
を実行→サブメニューへ移行。 -
プロンプトで
1
を実行→New value for TEXDIR [/usr/local/texlive/2022]:
というプロンプトが出現。 -
プロンプトにインストールディレクトリを入力。ホームディレクトリ以下であれば任意で指定できるが、一例として
~/.local/texlive/2022
とする。 -
Enter command:
プロンプトに戻るのでR
を実行し、メインメニューに戻る。
【オプションの設定】
-
メインメニューの
Enter command:
プロンプトでO
を実行→サブメニューへ移行。 -
プロンプトで'D'を実行。
-
プロンプトで'S'を実行。
-
プロンプトで
R
を実行し、メインメニューに戻る。
【インストールを実行】
メインメニューのEnter command:
プロンプトでI
を実行すると、インストールが開始される。インストールされるパッケージ数は300以上あり時間がかかるので、他の作業をしながら完了するのを待っていてもよい。
【パッケージマネージャでの追加作業】
TeX Live へようこそ!
といったメッセージが表示されていれば、インストーラーによる作業は完了しています。
さらにTeX LiveのランタイムにをPATHに追加した上で、nbconvertに必要なパッケージをtlmgr
コマンドでインストールします。
export PATH=${PATH}:${HOME}/.local/texlive/2022/bin/x86_64-linux
tlmgr install tcolorbox pgf environ etoolbox parskip caption float upquote eurosym fontspec unicode-math fancyvrb adjustbox xkeyval collectbox titling booktabs enumitem ulem jknapltx rsfs gettitlestring ucs
約30ほどのパッケージがインストールされ、最低限の準備が完了します。
【事前準備と起動】
インストール作業がやっと終わったら、起動方法を確認して、すぐに初回起動と動作確認ができます。
またこれは必須ではありませんが、念のためformatファイルを更新しておきます。
fmtutil-user --all
PDFに変換するためには、MinicondaとTeX LiveのランタイムがPATHに追加されていなければなりません。一時的にPATHを設定してJupyter Labを起動する例を下記に示します。
PATH=${HOME}/miniconda3/bin:${PATH}:${HOME}/.local/texlive/2022/bin/x86_64-linux jupyter lab &
起動したらPDF形式への変換テストを実施してみます。
notebookを開いた状態から、下図のようにファイルメニューを開き、エクスポートする際のファイル形式としてPDFを選択します。
変換にかかる時間は、notebookのサイズにより変わってきます。しばらく待っていると、生成されたPDFファイルのダウンロードが始まるはずです。
下図はブラウザで直接表示した例です。
【日本語フォントへの対応】
セル内で日本語を使ったnotebookの場合このままでは表示できず、下図のように空白の状態で表示されてしまいます。
この問題を解決するために、まずnbconvertに関わる設定ファイルを1つ変更します。
~/.local/share/jupyter/nbconvert/templates/latex
ディレクトリか、それが無ければ~/miniconda3/share/jupyter/nbconvert/templates/latex
ディレクトリのindex.tex.j2
というファイルです。
((*- block docclass -*))
%\documentclass[11pt]{article}
\documentclass[xelatex,ja=standard]{bxjsarticle}
((*- endblock docclass -*))
ファイルの末尾のほうにある上記の項目で、元の設定を%
でコメントアウトした上で、次の行に新しい値を挿入しました。
この設定変更に伴い、新たに追加のパッケージが必要になります。
tlmgr install bxjscls zxjatype xecjk haranoaji
ここまでの作業により、日本語のフォントも正常に表示できるようになります。
終わりに
用紙サイズやヘッダー・フッターなどを見映え良くカスタマイズするにはテンプレート・ファイルを作成しなければならないようですが、ある程度の知識が必要になってきます。
今回の作業を済ませ、せっかく作ったnotebookですから、ぜひ他の人に評価してもらうことを提案させていただいて、締めくくりにさせていただきます。