jupyter notebookをTex,PDFへと変換
jupyterでコードとプリアンブルを書いてTexに移せばいろいろと捗るのではという目論見の元はじめたこの企み,思ったより面倒なことがあります。
結論
下のような感じでjupyterの見た目を保存したようなTex,PDF資料を作れます。
必要箇所を抜き出せば普通に資料にできますね。
結局何をすればいい?
ここのGistからファイルをダウンロードして,
New template for jupyter · GitHub
以下のようなPathの下に置いて,
C:\Users\<User>\Anaconda3\envs\matlab\Lib\site-packages\nbconvert\templates\latex
(追記)C:\Users\
にある場合もありました。
作成手順は,例えば名前がipythonの名前がfooだった場合,
Texをダウンロード
jupyter-nbconvert --to latex foo.ipynb
extractbb foo_files/*.png platex foo.tex dvipdfmx foo.dvi
以上!
大体の人はドコかでエラーがでるので詳細な手順を順に追っていきましょう。
LatexやPDFへの変換
GUIでやる
[File]から[Download as]で好きなフォーマットを選択できます。
pandocのインストール
そのままだとpandocがありませんという旨のエラーが出ます。
anaconda search -t conda pandoc
の出力を見た感じ,conda-forgeが良さそうですので
anaconda show conda-forge/pandoc
とうってURLを確認します。
2017年10月現在では以下のURLからダウンロードできます。
conda install --channel https://conda.anaconda.org/conda-forge pandoc
これで,Latex形式で落とせます。
PDFへの変換
手順は,例えば名前がipythonの名前がfooだった場合,
Texをダウンロード
jupyter-nbconvert --to latex foo.ipynb
コンパイル関係
extractbb foo_files/*.png platex foo.tex dvipdfmx foo.dvi
XXX.styがない,XXX.defがない
日本語を用いる場合,様々なエラーが出ます。
例えば実行するとucs.styが無いことに気づきます。
ここからダウンロードしましょう。
CTAN: /tex-archive/macros/latex/contrib/ucs
いかのサイトからコピーしたほうが良いです。
https://mirror.hmc.edu/ctan/macros/latex/contrib/ucs/ucs.sty
私はucs.styの他,以下の3つのdefファイルが最終的に必要でした。
ucsencs.def,uni-global.def,utf8x.def
適宜Pathの通ったフォルダにおいておいてください。
Package amsmath Error: Erroneous nesting of equation structures;(amsmath) trying to recover with `aligned'. \end{align}
alignの前に\[がついているせいです。数式の二重宣言をやめさせるべきです。
noboundingbox
dvipdfmxを使うようにTexを書き換えるべきです。
つまり
\usepackage[dvipdfmx]{graphicx}
と変更します。
これは非常に変更点が多い上,面倒ですね…
テンプレートの変更
いままでの問題は使用しているテンプレートに主に問題があるようです。
デフォルトのテンプレート
僕の場合,場所は以下の所にありました。
C:\Users\User\Anaconda3\envs\matlab\Lib\site-packages\nbconvert\templates\latex
デフォルトで使われる設定ファイルはarticle.tplxというファイルで,中身はこんな感じです。
% Default to the notebook output style ((* if not cell_style is defined *)) ((* set cell_style = 'style_ipython.tplx' *)) ((* endif *)) % Inherit from the specified cell style. ((* extends cell_style *)) %=============================================================================== % Latex Article %=============================================================================== ((* block docclass *)) \documentclass[11pt]{article} ((* endblock docclass *))
この\documentclassの箇所を
\documentclass[10pt,dvipdfmx,fleqn]{jarticle}
と変更します。jarticleにすることでutf8等の面倒なdefを入れずとも日本語をコンパイル出来るはずです。
fleqnは数式左寄せ,dvipdfmxはBoundingBox問題を起こさないようにする配慮です。
参考:
Jupyter nbconvert(ファイル変換)メモ - はしくれエンジニアもどきのメモ
jupyter notebookをLaTeXに変換 - Qiita
プリアンブルや基本関数の変更
構造として,このarticle.tplxがstyle_ipython.tplxを呼び出し,base.tplxを呼び出すという構造になっていました。
プリアンブルや諸関数に関しては,
base.tplxというファイルに全て記述があるのでこれを変更することでより細かな調整ができます。
例えば不要そうなパッケージを排除できます。
- utf8まわりなど
変更した新しいファイル群をGistにあげておきました。
New template for jupyter · GitHub
テンプレートの見た目変更
こだわりたい人はどうぞ…
人の作ったものを流用するのが最初は良いでしょう。
nbconvert-examples/style_notebook.tplx at master · jupyter/nbconvert-examples · GitHub