Hatena::ブログ(Diary)

Yet Another Hackadelic

2009-04-14

MathML を itex2MML を使って書く

前に id:nanto_vi さんのアルゴリズムイントロダクションの資料見たときに純粋にスゲーって思ったんですが、さすがに一から MathML を書く気力も無いので itex2MML ってのを使ってみました。

itex2MML はどうも TeX の廉価版みたいな位置づけの記法を書けて、これを MathML に変換してくれるという代物。

で、これをダウンロードしてビルドすると itex2MML コマンドがインストールされます。XHTML の書き方は、id:nanto_vi さんの XHTML を丸っとパクった。DTD が MathML 用になってたりとか、拡張子を xhtml *1 にしてみたりしつつ、次のようなソースを書きます。

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" 
"http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>MathML with itex2MML</title>
    <style type="text/css">
code {
  display: block;
  width: 90%;
  margin: 0.5em auto;
}

math {
  text-align: left;
}
    </style>
  </head>
  <body>
    <h1>MathML with itex2MML</h1>
    <address>
      Toru Yamaguchi &lt;zigorou@cpan.org&gt;
    </address>
    <div class="section">
      <h2>テキストスタイル</h2>
      <div class="section">
        <h3>なんとか乗</h3>
        <code>
$y=x^{-2}$
        </code>
      </div>
      <div class="section">
        <h3>ルート</h3>
        <code>
$\sqrt{x}$
        </code>
      </div>
      <div class="section">
        <h3>log や sin など</h3>
        <code>
$\log_{10} x$, $\ln x$, $\sin x$
        </code>
      </div>
      <div class="section">
        <h3>化学記号</h3>
        <code>
硝酸ナトリウム(NaNO$_3$)
        </code>
      </div>
      <div class="section">
        <h3>元素記号</h3>
        <code>
重水素(${}^2_1$H)は水素の同位元素である.
        </code>
      </div>
    </div>
    <div class="section">
      <h2>ディスプレイスタイル</h2>
      <div class="section">
        <h3>微分</h3>
        <code>
\[
\frac{d}{dx}x^2=2x
\]
        </code>
      </div>
      <div class="section">
        <h3>数式上のローマン体</h3>
        <code>
\[
F = ma[\mathrm{N}]
\]
        </code>
      </div>
      <div class="section">
        <h3>数式上のローマン体</h3>
        <code>
\[
F = ma[\mathrm{N}]
\]
        </code>
        <p>微分の d をローマンにする</p>
        <code>
\[
 F=-\frac{\mathrm{d}E}{\mathrm{d}x}
\]
        </code>
      </div>
      <div class="section">
        <h3>偏微分</h3>
        <code>
\[
\frac{\partial^2 T}{\partial y^2}=0
\]
        </code>
      </div>
      <div class="section">
        <h3>総和</h3>
        <code>
\[
\sum_{i=1}^N m_ip_i
\]
        </code>
      </div>
      <div class="section">
        <h3>積分</h3>
        <code>
\[
V=2\pi\int_0^ry^2\,dx
\]
        </code>
      </div>
      <div class="section">
        <h3>場合わけ</h3>
        <code>
\[
V(x)=
\begin{cases}
0 &amp; (x &lt; x_0) \\
V_0 ( &gt; 0) &amp; (x \ge 0)
\end{cases}
\]
        </code>
      </div>
      <div class="section">
        <h3>太字のベクトル</h3>
        <code>
\[
 \mathbf{A}\cdot\mathbf{B}=A_xB_x+A_yB_y+A_zB_z
\]
        </code>
      </div>
      <div class="section">
        <h3>太字のベクトル</h3>
        <code>
\[
 \mathbf{A}\cdot\mathbf{B}=A_xB_x+A_yB_y+A_zB_z
\]
        </code>
      </div>
      <div class="section">
        <h3>行列</h3>
        <code>
\[
 A=
  \begin{pmatrix}
   a &amp; b \\
   c &amp; d
  \end{pmatrix}
\]
        </code>
      </div>
      <div class="section">
        <h3>適当な括弧の大きさ</h3>
        <code>
\[
\left(\frac{1}{\pi}\right)
\]
        </code>
      </div>
    </div>
  </body>
</html>

でこれを index_src.xhtml とかで保存しといて、

cat index_src.xhtml | /usr/local/bin/itex2MML --display --raw-filter > index.xhtml

とかって変換する。

さて、これを Firefox3 で見てみましょう。

f:id:ZIGOROu:20090415004350j:image

f:id:ZIGOROu:20090415004351j:image

f:id:ZIGOROu:20090415004353j:image

とかって感じ。TeX ほどじゃないけど結構満足出来る感じ。しかも TeX 記法で書けるのでいい感じ。

Tips

  • 改行コードは LF
  • ついでに XHTML にベタで書くんだけど、& とか < > とかは実態参照で。

SEE ALSO

*1:application/xhtml+xml として扱われるよう