Jupyter 4.0 で Tex 数式が描画されなくなった方へ。


前置き

これたぶん普通にデフォルトで使っている人は気付かないと思う。

私の環境で、Jupyter を 3.x → 4.0 にアップグレードしたら、今まで作った notebook の $\TeX$ 数式がことごとく描画されない($\sum_{n=1}^{\infty} … $ のようにソース状態で表示されてしまう)事象が発生。

例:

対処法を書き残しておきます。

環境

  • Mac OSX 10.8/10.9/10.10
    • Ubuntu とかでもたぶん同様
  • Python 2.7.9 (pyenv でインストール)
  • Jupyter 4.0.4

現象(詳細)と、原因

この事象が起きるのは(おそらく)、MathJax の設定で、Math Renderer をデフォルトの HTML-CSS 以外(MathML, SVG 等)で表示させていた人。
(きちんと確認していませんが)デフォルトの HTML-CSS で表示していた人なら、問題が起きていないかもしれません。

私は(ブラウザの対応状況と好みで)SVG にしていたのですが、数式を表示しようとすると jupyter を実行したターミナルに以下のような警告ログ(例)が出力されました。

[W 12:34:56.789 NotebookApp] 404 GET /static/components/MathJax/jax/output/SVG/config.js?rev=2.5.3 (::1) 1.74ms referer=http://localhost:8888/notebooks/path/to/notebook.ipynb

つまり、根本的に何かが足りない、と。

調査した結果、原因は、以下の2点から来ているものと判明:

  1. Jupyter 4.0 から、MathJax はローカルにインストールされたコピーを参照するようになった1
  2. (Jupyter をインストールしたときに配置された?)MathJax のコピーが、必要最低限のサブセットでしかない。

ということで、それをなんとかすれば良さげ、ということ。

対処法

1. MathJax コピーのインストール場所特定

これは普通、Jupyter を起動している Python の環境下になります。
私の場合、pyenv でインストールした Python2.7.x で動かしているので、以下にありました(例):
~/.pyenv/versions/2.7.x/lib/python2.7/site-packages/notebook/static/components/MathJax/

でその中身を見てみたら確かに、〜/jax/output/ ディレクトリ内には HTML-CSS/ しかなく、SVG/ なんていうディレクトリは存在しませんでした。

2. MathJax をダウンロード(またはクローン)して置換

すべてコマンドラインで済ますなら以下(例):

$ cd ~/.pyenv/versions/2.7.x/lib/python2.7/site-packages/notebook/static/components/
$ mv MathJax MathJax_org
$ git clone https://github.com/mathjax/MathJax.git

これだけ。

MathJax 公式サイト から "download a copy" というリンクを見付けて .zip ファイルをダウンロード・展開・フォルダ丸ごと置き換え、でももちろん OK。

3. 動作確認

Jupyter を起動(起動中なら一旦終了して再起動)して、数式を含む notebook を開いてみる。

きちんと数式が描画されるようになりました。めでたしめでたし。

参考


  1. 以前(Jupyter 3.x まで)は、インターネット上の CDN を参照していました。その参照先がフルセットだったので問題なかったというわけですね。ただネットワーク未接続環境で jupyter 起動しても「MathJax 使えないよ」という警告がそう言えば出力されなくなってたのでそれはそれで便利になったというわけで。