Python

.ipynbからPDFを作成したい

こんにちは、チズチズです。

先日私はこれを解決しようと奮闘しておりました。

弊部の新入生歓迎資料としてJupyter Labで制作したものを使いたいと思ったことがきっかけでした。結局できましたが、時間を浪費して終わったので紹介しようと思います。(他の人には僕のようになってほしくないという願いがある)

必要なライブラリのインストール

公式ドキュメントのinstallページに飛びます。

以上です。

日本語に対応するようにライブラリを書き換える

そのままだと文字コードがおかしくなってエラーになります。

../lib/python3.7/site-packages/nbconvert/templates/latex

最初のパスはAnacondaなど仮想環境のパスです。

その中の base.tplx というファイルを開いてください。10行目くらいです。

書き換えてください。推奨されるやり方かわかりません(if文にする必要が無くなったので)が、自分はこれで動きました。欧米文字を使うためのライブラリは日本語との相性が良くないようです。

だいたいのことをやりましたが、nbconvertで直接pdfに変換することは無理でした。しかし、.ipynb→.tex→.pdfというプロセスで可能になりました。

実際問題、もっとカスタマイズしたいという希望もあるので一度texに変換されてもいいかなと思っています。(実行時間に大きな影響を与えているわけでもないので)

スクリプトを書く

これを.ipynbと同じ階層に置いてください。まずnbconvertでlatexに変換し、そこからptex2pdfで直接pdfに変換するというコマンドを実行するスクリプトです。

input()にはファイル名(.ipynbを除いたもの)を入力してください。

 

以上です!できなかったら教えてください!! ググってもたまにヒットします。(たまに)

カスタマイズ

Jupyter nbextensions これを参考にしてください。

 

追記:一発でpdfにできた

面倒ですが、できました。

home/.jupyter/jupyter_nbonvert_config.pyをいじります

うえから230行目くらいです。

また、../lib/python3.7/site-packages/nbconvert/exporters/pdf.pyもいじります。

適宜良い感じにしちゃってYO(こっちでもWarning出るけど問題ない)

ぶっちゃけこっちも一度LaTeXに変換しているのでそんなに実行に大差はありませんがこっちのテンプレートを変えればもっと楽にカスタマイズできるというポイントがあります。どちらでも良いと思います。が、出来たので紹介しました。

 

これができるとJupyter Notebookの印刷ボタンでpdfが入手できます。Jupyter LabのExportには未対応ですが、もしかしたらいずれできるかもしれないので出来たら更新します。

Jupyter Notebookのprintviewなどは他の記事のほうがわかりやすいのでそちらを参照してください。わからなかったらTwitterでもコメントでもお気軽にご相談ください。

 

まとめ

エラーコードをよく読めばライブラリもいじれる。日本語は弊害が多い。達成感を得られた。

 

走り書きで書いてしまったので丁寧な説明になっていません。したがって何度も言いますが、困ったことがあったら尋ねてください。