2
0

JupyerのnotebookをnbconvertでPDFに変換する

Last updated at Posted at 2022-02-21

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つずつ地道にダウンロードしていく仕様になっています。

インストーラーが起動したら、インストールオプションを設定します。入力の際の大文字・小文字は厳密に区別されますので、ご注意ください。

【インストールするコレクションの選択】

  1. メインメニューのEnter command:プロンプトでCを実行→サブメニューとなりプロンプトがEnter letter(s) to (de)select collection(s):となる。

  2. プロンプトで-を実行し、コレクションを未選択の状態に初期化する。

  3. プロンプトでabOを実行し、3つのコレクションを選択する。

  4. プロンプトでRを実行し、メインメニューに戻る。

【インストールディレクトリの設定】

  1. メインメニューのEnter command:プロンプトでDを実行→サブメニューへ移行。

  2. プロンプトで1を実行→New value for TEXDIR [/usr/local/texlive/2022]:というプロンプトが出現。

  3. プロンプトにインストールディレクトリを入力。ホームディレクトリ以下であれば任意で指定できるが、一例として~/.local/texlive/2022とする。

  4. Enter command:プロンプトに戻るのでRを実行し、メインメニューに戻る。

【オプションの設定】

  1. メインメニューのEnter command:プロンプトでOを実行→サブメニューへ移行。

  2. プロンプトで'D'を実行。

  3. プロンプトで'S'を実行。

  4. プロンプトで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を選択します。
image.png

変換にかかる時間は、notebookのサイズにより変わってきます。しばらく待っていると、生成されたPDFファイルのダウンロードが始まるはずです。
下図はブラウザで直接表示した例です。
image.png

【日本語フォントへの対応】

セル内で日本語を使ったnotebookの場合このままでは表示できず、下図のように空白の状態で表示されてしまいます。
image.png

この問題を解決するために、まずnbconvertに関わる設定ファイルを1つ変更します。
~/.local/share/jupyter/nbconvert/templates/latexディレクトリか、それが無ければ~/miniconda3/share/jupyter/nbconvert/templates/latexディレクトリのindex.tex.j2というファイルです。

index.tex.j2
((*- block docclass -*))
%\documentclass[11pt]{article}
\documentclass[xelatex,ja=standard]{bxjsarticle}
((*- endblock docclass -*))

ファイルの末尾のほうにある上記の項目で、元の設定を%でコメントアウトした上で、次の行に新しい値を挿入しました。
この設定変更に伴い、新たに追加のパッケージが必要になります。

tlmgr install bxjscls zxjatype xecjk haranoaji

ここまでの作業により、日本語のフォントも正常に表示できるようになります。
image.png

終わりに

用紙サイズやヘッダー・フッターなどを見映え良くカスタマイズするにはテンプレート・ファイルを作成しなければならないようですが、ある程度の知識が必要になってきます。
今回の作業を済ませ、せっかく作ったnotebookですから、ぜひ他の人に評価してもらうことを提案させていただいて、締めくくりにさせていただきます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0