Julia + Jupyter + VSCode + Windows10 でNotebook to PDF
以前導入したJulia
のJupyter
環境をリセットして、再度セットアップしようとしたら死ぬほど詰まったのでメモ。
- はじめに
- 環境
- Juliaのインストール
- Juliaのパッケージ
- Jupyter Notebookのインストール
- VSCodeのインストールと拡張機能
- Notebookの作成とグラフの描画
- Notebook to PDF
- PDFの日本語出力
- Dockerでゴリ押し (2022/01/13)
- 最後に
はじめに
グラフ描画と言えばPython
+matplotlib
が文献も豊富で重宝するが、科学計算という点ではJulia
の方が優れている。
例えば、三角関数をプロットするだけを考えてもPython
ではnumpy
をインポートした上で、
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 2*np.pi, 100) y = np.sin(x) plt.plot(x, y)
と書かなければならないが、Julia
であれば、
using Plots x = collect(0:0.01:2π) y = sin.(x) plot(x, y)
で書けるので、ちょっとしたグラフのレポートや計算のレポートを作成する際に最適である。
物理学科所属の私にとってunicode
をそのままコードに書けること程ありがたいものはない。
理系学生はJulia
の導入を検討すべきだと思うし、普及させたいと考えているのでその一助となれば。
環境
- Windows10
- Julia-1.6.1
- Jupyter Notebook(IJuliaからminicondaを通してインストール)
- VSCode-1.58.0
-insider - MikTeX-21.6
- Inkscape-1.1
Juliaのインストール
julialang.org (accessd on 2021/6/15)
環境変数PATHを通しておくと、どこからでも起動できるので便利。
Juliaのパッケージ
コンソールからJulia
REPLを起動する。
$ julia _ _ _(_)_ | Documentation: https://docs.julialang.org (_) | (_) (_) | _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 1.6.1 (2021-04-23) _/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release |__/ | julia>
]
キーを入力してパッケージモードへ切り替えると、(@1.6) pkg>
になる。
使い方はGoogle検索しても良いし、help
で確認しても良い。
データ分析の基本的なパッケージを入れる。
(@1.6) pkg>add IJulia # Jupyter用のカーネル (@1.6) pkg>add Plots # グラフ描画ライブラリ (@1.6) pkg>add DataFrames # pandasのようなもの
それぞれの入門的なものは本題ではないのでここでは無し。 インターネット上のドキュメントは充実している。
Jupyter Notebookのインストール
既にインストールされている場合は必要ないかもしれないが、今回の本題であるNotebook to PDF という点では若干環境が異なるので注意。
パッケージモードからbackspace
キーで戻って、
julia> using IJulia julia> notebook()
conda
経由でインストールするか聞かれるのでyesと。
~\.julia\conda
にPython
やipython
等の必要なライブラリがインストールされてJupyter Notebook
が起動する。
因みに~\
はホームディレクトリのことでWindowsだとC:\Users\username\
。
Jupyter Notebook
はVSCode
から使用するため今は閉じて良し。
VSCodeのインストールと拡張機能
VSCode InsidersのNotebookのGUIが好みだったんだけど、最近
VSCode
の仕様と統一されたっぽい?setting.json
で
{ "jupyter.experiments.optOutFrom": ["NativeNotebookEditor"] }
となってただけでした。。。
code.visualstudio.com (accessd on 2021/6/15)
拡張機能はJupyter
とJulia
だけで良い。
github.com (accessd on 2021/6/15)
Notebookの作成とグラフの描画
# julia-sin.ipynb # using Plots x = collect(0:0.01:2π) y = sin.(x) plot(x, y)
カーネルにJulia
を選択してノートブックを実行するとグラフが描画される。
Notebook to PDF
さて、作成したノートブックをPDFのレポートとして提出したいわけだが、ここが難所なのである。
VSCode
のJupyter
拡張にはExport as
というオプションがあるが、準備なしにはそれは上手くいかない。環境ごとに問題が発生するせいでインターネットにもピンポイントな回答は少ない。
今回はWindows10という環境に絞ってこの問題を解決したいと思う。
Jupyter Interpreterの選択
Jupyter拡張機能を起動する用のPythonインタープリターを選択する。Python
を複数インストールしている場合は正しく選択されていない可能性があるので要確認。
VSCode
で「ctrl
+shift
+P
」でコマンドパレットを開いて、「Jupyter: Select interpreter to start Jupyter Server」から先ほどconda
でインストールしたPython
(~\.julia\conda\3\python.exe
)を指定する。
MiKTeXのインストール
PDFに変換する際nbconvert
というPython
のライブラリを通して一旦tex
に変換するわけだが、その際に必要なパッケージを管理するのにWindowsではMiKTeX
というソフトを使う。
miktex.org
(accessd on 2021/6/15)
念のためC:\Program Files\MiKTeX\miktex\bin\x64\
へPATHが通っている確認する。
Inkscapeのインストール
グラフをPDF出力するのにnbconvert
はInkscape
を必要とする。
inkscape.org (accessd on 2021/6/15)
さて、ここが詰まりポイントである。通常インストーラーでインストールするとC:\Program Files\
へインストールされるのだが、Program Files
のスペースのせいでnbconvert
のsvg2pdf.py
が機能しない。Inkscape
をCドライブ直下などに配置しなおすことで対処可能。このとき、C:\Inkscape\bin
にPATHを通すのを忘れないようにする。
PDFの日本語出力
レポートを書いていてすぐに気が付くのが、日本語が出力されないことである。日本の大学で教授も日本人(たとえいくら国際学会で活躍していたとしても)となると名前ぐらいは漢字で書くのが普通だと思うので厄介な問題となる。
結論から言うと、~\.julia\conda\3\share\jupyter\nbconvert\templates\latex\index.tex.j2
を次のように書き換える。
((=- Default to the notebook output style -=)) ((*- if not cell_style is defined -*)) ((* set cell_style = 'style_jupyter.tex.j2' *)) ((*- endif -*)) ((=- Inherit from the specified cell style. -=)) ((* extends cell_style *)) %=============================================================================== % Latex Article %=============================================================================== ((*- block docclass -*)) \documentclass[xelatex,ja=standard]{bxjsarticle} ((*- endblock docclass -*)) ((*- block packages -*)) ((( super() ))) % For greek in a code block \usepackage[Greek]{ucharclasses} \newfontfamily{\mygreek}{DejaVuSansMono} \setTransitionsForGreek{\mygreek}{} ((*- endblock packages -*))
もしファイルが見つからなければ、
$ cd ~\.julia\conda\3\Scripts $ ./jupyter --path
で出力されたdata
ディレクトリを調べる。
Dockerでゴリ押し (2022/01/13)
現在のタスクが一段落したらイメージを作成してDockerHub
に挙げたいと考えている。
イメージを作った。
最後に
どれも間接的にエラーとして出力はされてはいるんだけど、解決法は示してくれなくて相当手間取った。
例えば、「nbconvert is not installed」って出るけどpip
で確認するとインストールされているから意味がわからないし、MiKTeX
がインストールされていてパスも通っているのに「latex is not installed」って出るからイライラが募った。
特にInkscape周りはそもそもエラーが文字化けしてて何が問題なのかさっぱりだった。ディレクトリ名にスペース入れるのやめてもらえませんか?