Chrome上で Jupyter notebook を使うときにMathJaxの数式の右側に縦棒が表示されてしまうバグを修正する

  • 6
    いいね
  • 1
    コメント

TL;DR

  • Jupyter notebook を更新することで、読み込まれるMathJax.jsのバージョンを更新すればよい
  • pyenvを使ってanaconda環境でJupyterを動かしているならば、以下の手順で Jupyter notebook を更新すればよい
  • $ pyenv version
    • anaconda3-2.5.0 (set by /Users/USER_NAME/.pyenv/version)
  • $ pip list
    • notebook (4.1.0)
  • $ conda update setuptools
  • $ pip install notebook -U
  • $ pip list
    • notebook (4.2.2)
  • $ jupyter notebook --version
    • 4.2.2
  • $ jupyter notebook
  • Jupyter notebook が更新されたことで読み込まれるMathJaxも更新され、正常に数式を描画できるようになっているはずである

Jupyter notebook 使ってますか

皆さん Jupyter notebook 使ってますか? すごく便利ですよね。PythonやR、Processingなどを試すときにさっと書いてみることができますし、機械学習や統計学なんかの勉強にも非常に重宝します。一画面の中でプログラムをそのまま実行してグラフを表示し、Markdownでメモなんかも取れるのでまさしく超強力な電子ノートとして使えます。しかも、プログラムの実行結果やメモは実体としてはJSON形式のファイルとして扱われている (グラフなどの画像データもbase64エンコードされた文字列として格納されている) ので、そのままGit管理もできてしまうという優れもの。

僕も Rによるやさしい統計学 を Jupyter notebook 上で実行することで統計学の勉強をしています。

JupyterNotebook上でR

こんな感じで一画面上でプログラムを作成してすぐにグラフを描くこともできますし、MathJaxを使って $ \TeX $ の記法で数式を書くこともできます!

JupyterNotebook上で数式

...あれ?なんか数式が変...?

数式の右側に縦棒が出る

何故か数式の右側に縦棒が表示されてる!この現象、どうやらChromeだけで生じるバグみたいです。この辺り
この辺りで議論されてますね。

どうやら、数式の描画に使われているMathJaxを 2.5 から 2.6 へと更新すればこの問題は解消するとのこと。Jupyter notebook の 4.2 以降ではMathJaxの 2.6 が使われるように修正されているらしいので、Jupyter notebook を更新すれば解消しそうですね!

まだ Jupyter notebook をインストールしていない人

まずは Jupyter notebook をインストールしましょう! この辺りの記事 を参考にすればインストールできるのではないかと思います。
手元の MacBook Pro Retina 2015 15inch (OSX 10.10.5) の環境では以下のような手順でインストールできました。

  • Homebrewをインストール
  • Homebrewの更新 $ brew update
  • 複数バージョンのPythonの切り替えを行ってくれるpyenvをインストール $ brew install pyenv
  • pyenvのインストール後、公式サイト の指示に従い、~/.bash_profile~/.bashrc~/.zshrc に対して以下のような設定を追記しておきましょう
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
  • 設定後、シェルを再起動することでpyenvが有効になります
  • pyenvを使ってPythonでデータ解析をする上で必要となるパッケージ (Jupyter notebook 含む) が一通り揃っている anaconda と言われるPythonディストリビューションをインストールしましょう
  • $ pyenv install anaconda3-2.5.0
  • $ pyenv global anaconda3-2.5.0
  • ここまでで基本的なインストール作業は終了です。シェル上から以下のコマンドで Jupyter notebook を起動できます
    • $ jupyter notebook

[寄り道1] Jupyter notebook 上でVimのキーバインドを有効にしたい人

Jupyter notebook は非常に便利なのですが、(僕のように) いつもエディタをVimモードで使っている人にとってはVimのキーバインドが使えないのは非常にストレスフルです。
幸い、同じような事を考えておられた先人が Jupyter notebook 上でVimのキーバインドを有効にできるような拡張機能を作成しておられます!感謝!!

公式サイト を見れば詳細なインストール方法を確認できますが、手元のMac環境では以下のコマンドでインストールできました。

# Create required directory in case (optional)
$ mkdir -p $(jupyter --data-dir)/nbextensions
# Clone the repository
$ cd $(jupyter --data-dir)/nbextensions
$ git clone https://github.com/lambdalisue/jupyter-vim-binding vim_binding
# Activate the extension
$ jupyter nbextension enable vim_binding/vim_binding

この作業後、$ jupyter notebook を実行するとVimのキーバインドが有効になった状態で Jupyter notebook が起動するようになります。

[寄り道2] Jupyter notebook 上でRなどのPython以外のカーネルを利用したい人

Jupyter notebook はデフォルトでは Python しか実行することができませんが、カーネルと呼ばれるプログラムを追加することでPython以外の言語にも対応させることができます。
現在利用できるカーネルの一覧は ここ で確認できますね。RやRuby、Octave、Haskell、Processingなどが使えるみたいですね!

試しにR用のカーネル (IRKernel) をインストールすることで、Jupyter notebook 上からRを利用できるようにしてみましょう。(IRKernelの公式サイト)

手元のMac環境では以下の手順でIRKernelをインストールできました。
(こちらの記事も参考にさせていただきました。)

  • Homebrewを使ってRをインストール $ brew install r
  • シェル上からRを実行する $ R
  • Rが実行されると、Rのコンソール画面が表示される
  • Rのコンソール画面上で以下のコマンドを順に実行する
    • install.packages(c('repr', 'IRdisplay', 'pbdZMQ', 'devtools'))
    • devtools::install_github('IRkernel/IRkernel')
    • IRkernel::installspec()
  • [InstallKernelSpec] Installed kernelspec ir in /Users/USER_NAME/Library/Jupyter/kernels/ir のような表示が最後に出ればOK

  • 途中でエラーが出るときには (Rコンソール上ではなく) シェル上で 以下のコマンドが必要かも (HomebrewからRをインストールしたことに起因?)

    • $ mkdir -p /usr/local/Library/ENV/4.3/
    • $ which sed
      • /usr/bin/sed
    • $ ln -s /usr/bin/sed /usr/local/Library/ENV/4.3/sed

以上でインストールが完了しました。$ jupyter notebook を実行して新たにNotebookを作成しようとすると選択できるカーネルが増えているのが確認できると思います。

なお、Rでは変数名に日本語を使用することができ、日本語の変数をそのまま hist()plot() などのグラフ表示用関数の引数として渡すことができるようになっています。その際、グラフの縦軸や横軸のラベル名として変数名が使用されますが、変数名に日本語が含まれているとうまくグラフを表示できないようです。

ここの記事に書かれている方法を使うと、変数名が日本語でも問題なくグラフ表示ができました。

Jupyter notebook を更新することでMathJaxの数式表示バグを修正する

Jupyter notebook の更新を行うことでChromeの数式表示バグを修正しましょう。

手元のMac環境ではpyenvを使うことで、anaconda3-2.5.0を使用しています。

  • $ pyenv version
anaconda3-2.5.0 (set by /Users/USER_NAME/.pyenv/version)

では、Jupyter notebook のバージョンを確認しましょう

  • $ pip list
...
notebook (4.1.0)
...

確かに 4.2 よりも古いバージョンになっていますね。
では、Jupyter notebook を更新しましょう。その前に、どうやら anaconda 由来の setuptools を更新しておく必要があるようです。(参考)

  • $ conda update setuptools

setuptools の更新が完了したら、Jupyter notebook を更新しましょう (pip は -U でパッケージの更新ができる)

  • $ pip install notebook -U

更新が無事完了したかを確認しましょう。

  • $ pip list
...
notebook (4.2.2)
...

更新できていますね!4.2 よりも新しいバージョンがインストールされています。
念のため。

  • $ jupyter notebook --version
    • 4.2.2

大丈夫そうですね。では Jupyter notebook を起動してみて...

  • $ jupyter notebook

数式を表示してみると...

数式の表示が直った

直りましたね!これで気兼ねなく数式が書けますね!

以上となります。長文を読んで頂きありがとうございました。