Xeebi

home categories feeds

javascript で LaTeX : KaTeX がすごい

KaTeX : html 上で数式を組む時の新星候補

The fastest math typesetting library for the web.

KaTeX というものが存在する.

これは mathjax のような,tex ベースの数式組版ライブラリで,高速で依存関係無しに動き,TeX の美しさを持つライブラリという触れ込みである. 実際試してみると明らかに mathjax よりも高速,殆どストレスなく閲覧できる1.また,環境によらず同じ組版結果となるので, node.js で server-side で組んどくというようなことも出来るということだ.

公式サイトの例(マウスホバーで中身が見えるのは僕が細工した). 速すぎて気付かないかもしれないけれど,このレンダリングは完全にクライアントサイドで行われている.

\displaystyle f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi

\left とか \! にも対応している.

\displaystyle \int_0^\infty\!\!\sin \left(\frac{x}{\log x} \right) \,dx

めり込んでみようか (\int_0^\infty\!\!\!\!\!\!\!\!\sin x)

\displaystyle \int_0^\infty\!\!\!\!\!\!\!\!\sin x\,dx

連分数(たんに \frac の連鎖で書いた)

\displaystyle\phi=1 + \frac{1}{1+\frac{1}{1+\frac{1}{1+\frac{1}{\cdots}}}}

サポートしている分は文句なく綺麗に表示できている感じだ.本家の github.io では interactive に遊べるところがあるので試すと良いと思う.

導入

導入は非常に簡単で,katex.min.js, katex.min.css, あとは fonts/ があればいい. release から新しいのを取ってきて展開,jscss を読み込んで,こういう感じに使う

katex.render(latexCode,domToWriteOn);

document.getElementsByClassName とかで要素を取ってきてループで回すといいんじゃないだろうか(この記事ではそうしている). 因みに,タグの中にベタ書きすると < とかで扱いがややこしいから追記2015-05-20,本家 github.io では <div class="tex" data-expr="\int"></div> みたいな書き方になっていて,これが一番やりやすいかもしれない.…と思ってたけど <pre> とかなら普通に問題ないな,うん.今 pull-req が入ってる.

なお,ライセンスは MIT なので色々やり放題でもあります.

追記: というより,innerHTML じゃなくて textContentを使うのが よいとおもう.html の中に例えば $$ で囲って数式を入れるのが contrib の中に プラグイン的に入っていて,その中でも textContent が使われている.

まだ Initial release から 3日しか経っておらず,行列サポートはじめさまざまな issue が立っている ところだけれど, これは非常に期待できるのではないだろうか.reveal.js とか impress.js とうまく組み合わせれば beamer のよりスタイリッシュな代替としての利用もできそうですね.めっちゃ楽しみ.

  1. ここで speed test やってるっぽい http://jsperf.com/katex-vs-mathjax/