Jupyter Notebook から WordPressへの投稿環境 (TeX数式対応)

はじめに

Python使いなら,Jupyter Notebookの出力をそのままブログに投稿したくなると思います.

文章と数式はMarkdownで書いておいておけば良いし,もちろんコードと実行結果をセットで見せられるので魅力的.

今回はJupyter NotebookからWordPressへの投稿ができるjupy2wpモジュールの紹介です.

あと,jupy2wpだけだと,Notebook中のMarkdown中のTeX数式がうまく表示されないので,それに対応するためのWordPressプラグインもMathjax-Latexも紹介します.

Notebook の実行結果 WordPressに投稿する

Notebookの実行結果をWordPressに投稿する方法は主に以下のふたつ.

  • Export as HTMLからHTMLコードを出力し,WordPress投稿にコピペする
  • Jupy2wpモジュールを使う

前者は,楽なのだがCSSコードも直に記述されていて長いし重い.画像もBase64形式でHTMLに直に記述されてしまう.Notebook側としては,ひとつのhtmlファイルで完結させたい思惑なのだろう.これはこれで助かる局面もあるのだが,WordPressに貼り付けるとなると少し面倒.

それに対し後者のJupy2wpモジュールは,コマンドひとつで下書き投稿をしてくれて,画像はpngファイルとしてWordPressのメディアフォルダに勝手に投げてくれる.

Jupy2wpの導入

今回は,Jupy2wpモジュールの導入方法を紹介する.
基本的にはGithubの公式ページ(GitHub – Pybonacci/jupy2wp)に従えばよい.

Jupy2wpnbconvertというモジュールに依存しているのだが,ここら辺でバージョンによって互換性のないことがあるので注意が必要.
結論としてはnbconvert 4.2.0であればたぶん問題なし.(nbconvert 5系だとうまく動作しないぽいJupyterの結果をそのままwordpressに投稿する[jupy2wp] | On Your Mark . Tokyo)

pipでinstallする場合は,

pip install git+https://github.com/Pybonacci/jupy2wp.git

gitが導入していないなら,Githubページからzipファイルをダウンロードしてきても良い.
ローカルのパッケージをpipに取り込む場合は,zipを解凍して,setup.pyのあるディレクトリで

pip install .

をすれば良い.

投稿方法

基本的には,投稿したい.ipynbファイルがあるディレクトリで以下コマンドを実行する.

python -m jupy2wp.jupy2wp --xmlrpc-url https://takala.tokyo/takala_wp/xmlrpc.php --user XXXX --password YYYY --nb ZZZZ.ipynb --title TEST

オプションの説明

  • --xmlrpc-url https://takala.tokyo/takala_wp/xmlrpc.php : 仕組みはさておき,本ブログhttps://takala.tokyo/takala_wp/xmlrpc.phpのようにWordPress導入サイトURL+xmlrpc.phpを指定する
  • --user XXXX : WordPressのUser名XXXXを指定
  • --password YYYY : WordPressのパスワードYYYYを指定
  • --nb ZZZZ.ipynb : 投稿したいファイル名ZZZZ.ipynbを指定
  • --title TEST : 投稿タイトルTESTを指定

以上が最低限必要なオプションである.上のXXXXとかを書き換えればOK.この他に投稿カテゴリーとかを指定できたりする.

実行し無事成功すると,

It seems all worked fine!! Check your wordpress site admin.

と表示される.なお,この時点では下書き投稿されるだけなので,WordPressの投稿管理画面から体裁を確認して公開する必要がある.

CSSの調整

さて,ここで投稿された下書きの中身を見ればわかるようにCSSは記述されていないので,自分で体裁を整える必要がある.

まあ,めんどくさい..

裏技としては,NotebookをExport HTMLしたときにHTMLファイルの頭に長々と書いてるCSSコードを流用する方法が一番簡単.これを,WordPressテーマの追加CSSにコピペしてしまえば良い.

が長いし解読が難しい..自分で凝りたい人は以下などを参考にするとよい

これもとりあえずコピペして,コツコツカスタマイズになる.

TeX数式の対応

さらに調整が必要な点として,Markdown数式(TeX)がある.これはWordpressプラグインで対応する.

Mathjax-Latexプラグインの導入

WordPressの数式問題は記事が多いわりにレベルが低い.一方この記事WordPress の数式整形プラグイン | 永田 晴久は内容が濃いので,読むべし.

結論から言えば,MathJax-LaTeXプラグインを導入すればよい.

ただし,最新版はPHP7.0にしか対応していないので注意して欲しい(2018/10/16現在).WordPressが置いてあるサーバーのPHPバージョンを確認する必要がある.PHP5.0ならば,MathJax-LaTeX | WordPress.orgページからRecent Versionを落としてくる必要がある.(少なくともMathJax-LaTeX 1.3.8はPHP5.0に対応している)

ローカルのWordPressプラグインの導入方法は割愛.(ぐぐって欲しい)

あとMathJax-LaTeXの使いかたも他の記事に譲る.基本的には記事の最初に[mathjax]と宣言すればよい.

追加の修正

WordPress の数式整形プラグイン | 永田 晴久 でも言及されていたが,inline数式とdisplayed数式を区別を実装するの肝.

両者を併用したいがMathJax-LaTeXのデフォルトだとたぶん難しい(どちらかになってしまう)

Markdownの場合$ x $でinline数式,$$ y=x^2 $$でdisplayed数式になる.これをそのまま実現する.

たぶんいろいろ策はあるが,Mathjax inline mode not rendering – TeX – LaTeX Stack Exchangeの方法を採用した.

投稿の先頭に[mathjax]と合わせて,以下のように記述してやればOK.


[mathjax]

<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    tex2jax: {
      inlineMath: [ ['$','$'], ["\\(","\\)"] ],
      processEscapes: true
    }
  });
</script>

<script type="text/javascript"
    src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>

おわりに

いちおうこれで,一通りの環境は構築できると思う.快適な技術ブログ執筆環境で,どんどん記事を書いていこう.

2