sekai013's blog

JavaScriptとかを勉強する

Vim で Markdown を使って数学の板書を取ってフル単する

夏休みが終わって講義が始まったけど板書を取っていると腕が筋肉痛になったり今自分が書いた字が読めなかったりして困る。 ノートパソコンで板書取れたら管理もしやすいし便利だなぁと思ったら Markdown 使えばできそうということが分かった。

早速試してみたらどうやら previm では数式がうまく変換されないらしい。数式が出てこない講義はほとんどないのでこれでは困る。
最初は Markdown を Latex に変換して対処しようとしたけど、ブラウザで開いて gyazo-chrome-extension とかでキャプチャできると便利そうなのでどうにかならないか探してみたら HTML で Latex っぽい数式を書ける MathJax という JavaScript ライブラリを見つけた。これを previm でオープンする index.html に読み込んでもらえばいけそうな気がしたので

~/.vim/bundle/previm/preview/index.html<head>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

を追加してみたけどダメだった。どうやら Markdown で書いたコンテンツは index.html が開かれてから html 要素に変換されて DOM に追加されるっぽいので MathJax くんにはそのあとで頑張ってもらわないといけないっぽい。
~/.vim/bundle/previm/preview/js/previm.js の loadPreview 関数内の
if (needReload && (typeof getContent === 'function') && (typeof getFileType === 'function'))
内を次のように変更する

_doc.getElementById('preview').innerHTML = transform(getFileType(), getContent());
MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ["\\(","\\)"]] } }); // added1
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);  //added2
autoScroll('body');

本来 MathJax を導入した HTML ではインラインの数式を \(\) で囲んで書くらしいけど、 Markdown ではバックスラッシュがエスケープ文字になってる関係で \\( \\) と書かないといけなくてめんどくさい。そこで Latex と同じように $ 記号で囲んで書けるようにする設定が added1 で、 DOM 変更後に MathJax くんが頑張る設定が added2
これでいい感じで数式書いたりプレビューしたりできた。ノートとか筆記用具忘れて板書取らないこともなくなるのでこれで今期はフル単!!!!!!

参考

VimでMarkdownの環境を整える | KEYPOINT – キー・ポイント株式会社 開発日誌

MathJaxメモ - Qiita