とほほのMathML入門
- MathMLとは
- プレゼンテーションマークアップ
- コンテントマークアップ
- 記法
- 数式(math)
- 数値(mn)
- 演算子(mo)
- 識別子(mi)
- 加減乗除(+ー×÷)
- 見えない掛け算(⁢)
- 括弧((,))
- 分数(mfrac)
- グルーピング(mrow)
- 累乗(msup)
- 添字(msub)
- 上付文字(mover)
- 下付文字(munder)
- 右上・右下文字(msubsup)
- 上下付文字(munderover)
- 四隅(mmultiscripts)
- 順列(nPr)
- 総和(Σ)
- 平方根(msqrt)
- 累乗根(mroot)
- 行列((...))
- 関数(f(x))
- 三角関数(sin,cos,tan)
- 積分(∫)
- 対数(log)
- スタイル(mstyle)
- テキスト(mtext)
- 文字列(ms)
- エラー(merror)
- スペース(mspace)
- パディング(mpadded)
- ファントム(mphantom)
- 改行(linebreak)
- セマンティクス(semantics)
- MathMLの使用例
- MyScript Math
- リンク
MathMLとは
- Mathematical Markup Language の略で、数式を記述するための XML ベースのマークアップ言語です。
- 2010年に MathML 3.0、2014年に MathML 3.0 2nd が勧告されました。MathML 4.0 のドラフト版も進んでいます。
- まだまだ仕様変更も激しく、安定して利用できるとは言い難い状態です。
- 特に括弧を示す
<mfenced>
要素が廃止されたことにより、古い MathML で記述された式は括弧が表示されないなどの混乱があります。 - 表示を重視するプレゼンテーションマークアップと、意味を重視するコンテントマークアップの2種類の記法があります。
- 数式を表示するには他にも MathJax を用いる方法もあります。
プレゼンテーションマークアップ
プレゼンテーションマークアップでは見栄えにより数式を表現します。例えば x2
は下記の様に表します。「二乗」という意味はなく、<msup>
を用いて 2
という数字を x
の右上に表示することを指示しています。
<math> <msup> <mi>x</mi> <mn>2</mn> </msup> </math>
コンテントマークアップ
コンテントマークアップでは数式を意味で表現します。例えば x2
は下記の様に表します。<power>
を用いて x
を 2
乗することを示しています。コンテントマークアップを表示できるブラウザはまだあまりありません。
<math> <apply> <power /> <ci>x</ci> <cn>2</cn> </apply> </math>
記法
数式(math)
数式は <math>
~</math>
の間に記述します。
<math> <mi>x</mi><mo>+</mo><mi>y</mi> </math>
デフォルトではインライン要素として表示されますが display="block"
を指定するとブロック要素として表示します。
<math display="block"> <mi>x</mi><mo>+</mo><mi>y</mi> </math>
数値(mn)
<mn>
(math number) は数字を示します。
<math> <mn>123</mn> </math>
演算子(mo)
<mo>
(math operator) は演算子を示します。
<math> <mn>5</mn> <mo>+</mo> <mn>3</mn> <mo>=</mo> <mn>8</mn> </math>
識別子(mi)
<mi>
(math identifier) は変数などの識別子を示します。
<math> <mi>a</mi> <mo>+</mo> <mi>b</mi> <mo>=</mo> <mi>c</mi> </math>
加減乗除(+ー×÷)
加減乗除(+ー×÷)は下記の様に表します。
<math> <mi>a</mi> <mo>+</mo> <mi>b</mi> <mo>−</mo> <mi>c</mi> <mo>×</mo> <mi>d</mi> <mo>÷</mo> <mi>e</mi> </math>
見えない掛け算(⁢)
⁢
は下記のように見えない掛け算がある場所に記述します。
<math> <mi>a</mi> <mo>⁢</mo> <mi>x</mi> <mo>=</mo> <mi>c</mi> </math>
括弧((,))
括弧は以前は <mfenced>
を使用していましたが、現在では <mo>(</mo>
~<mo>)</mo>
で表します。
<math> <mi>a</mi> <mo>×</mo> <mo>(</mo> <mi>b</mi> <mo>+</mo> <mi>c</mi> <mo>)</mo> </math>
# 古い書き方 <math> <mi>a</mi> <mo>×</mo> <mfenced> # 非推奨 <mrow> <mi>b</mi> <mo>+</mo> <mi>c</mi> </mrow> </mfenced> </math>
分数(mfrac)
<mfrac>
は分数を表します。2個の子要素を持ち、一つ目が分母、二つ目が分子となります。
<math> <mfrac> <mn>5</mn> <mn>123</mn> </mfrac> </math>
分数は小さめに表示されるので CSS で mfrac のフォントサイズを 120% の大きさにしています。
mfrac { font-size: 120%; }
グルーピング(mrow)
<mrow>
は式をグルーピングします。
<math> <mfrac> <mi>a</mi> <mrow> <mi>b</mi> <mo>+</mo> <mi>c</mi> </mrow> </mfrac> </math>
累乗(msup)
<msup>
は式を右上に表示します。累乗などを表現する際に用いられます。
<math> <msup> <mi>x</mi> <mn>2</mn> </msup> </math>
添字(msub)
<msub>
は式を右下に表示します。
<math> <msub> <mi>x</mi> <mn>2</mn> </msub> </math>
上付文字(mover)
<mover>
は式を上部に表示します。ベクトルなどに使用されます。
<math> <mover> <mi>v</mi> <mo>→</mo> </mover> </math>
下付文字(munder)
<munder>
は式を下部に表示します。
<math> <munder> <mi>lim</mi> <mrow> <mi>x</mi><mo>→</mo><mi>∞</mi> </mrow> </munder> <mi>x</mi> </math>
右上・右下文字(msubsup)
<msubsup>
は式を右上と右下に表示します。
<math> <msubsup> <mi>x</mi> <mi>a</mi> <mi>b</mi> </msubsup> </math>
上下付文字(munderover)
<munderover>
は式を上部と下部に表示します。
<math> <munderover> <mi>x</mi> <mi>a</mi> <mi>b</mi> </munderover> </math>
四隅(mmultiscripts)
<mmultiscripts>
は式を右下・右上・左下・左上に表示します。右側と左側の境界には <mprescripts />
を挿入します。
<math> <mmultiscripts> <mi>x</mi> <mo>a</mo> <mo>b</mo> <mprescripts /> <mo>c</mo> <mo>d</mo> </mmultiscripts> </math>
順列(nPr)
順列を表現するには mmultiscripts
を使用します。右上と左上には <none />
を指定します。
<math> <mmultiscripts> <mi>X</mi> <none /> <mi>c</mi> <mprescripts /> <mi>b</mi> <none /> </mmultiscripts> </math>
総和(Σ)
総和(Σ)は <munderover>
を用いて表現します。
<math> <munderover> <mi>∑</mi> <mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow> <mi>n</mi> </munderover> <msub><mi>k</mi><mi>i</mi></msub> </math>
平方根(msqrt)
<msqrt>
は平方根を表示します。
<math> <msqrt> <mi>2</mi> </msqrt> </math>
累乗根(mroot)
<mroot>
は累乗根を表示します。
<math> <mroot> <mi>x</mi> <mn>3</mn> </mroot> </math>
行列((...))
行列を表すには <mtable>
, <mtr>
, <mtd>
によるテーブルを用います。
<math> <mo>(</mo> <mtable> <mtr> <mtd><mn>1</mn></mtd><mtd><mn>2</mn></mtd> </mtr> <mtr> <mtd><mn>3</mn></mtd><mtd><mn>4</mn></mtd> </mtr> </mtable> <mo>)</mo> </math>
関数(f(x))
関数は下記の様に表します。(x)
が f
の引数であることを示すために ⁡
を記述します。
<math> <mi>f</mi> <mo>⁡</mo> <mo>(</mo> <mi>x</mi> <mo>)</mo> </math>
三角関数(sin,cos,tan)
三角関数の場合にも ⁡
を指定します。
<math> <mi>sin</mi> <mo>⁡</mo> <mi>θ</mi> </math>
積分(∫)
積分には <msubsup>
を使用します。
<math> <msubsup> <mo>∫</mo> <mi>a</mi> <mi>b</mi> </msubsup> <mrow> <mi>f</mi> <mo>⁡</mo> <mo>(</mo> <mi>x</mi> <mo>)</mo> <mi>d</mi> <mi>x</mi> </mrow> </math>
対数(log)
対数には <msub>
を使用します。
<math> <msub> <mi>log</mi> <mi>a</mi> </msub> <mi>x</mi> </math>
スタイル(mstyle)
<mstyle>
を用いて色、フォントサイズなどのスタイルを指定することができます。
<math> <mstyle mathcolor="red" mathbackground="#fcc" mathsize="24pt"> <mn>3</mn><mo>+</mo><mn>2</mn><mo>=</mo><mn>5</mn> </mstyle> </math>
テキスト(mtext)
<mtext>
はテキストを記述します。
<math> <mtext>Text...</mtext> </math>
文字列(ms)
<ms>
は数式処理システムやプログラムなど他のシステムで解釈される文字列を記述します。
<math> <ms>String</ms> </math>
エラー(merror)
<merror>
はエラーを示します。
<math> <merror> <mrow> <mtext>Division by zero:</mtext> <mfrac> <mn> 1 </mn> <mn> 0 </mn> </mfrac> </mrow> </merror> </math>
スペース(mspace)
<mspace>
は何らかの理由でスペースを開けたい場合に使用します。
<math> <mi>a</mi> <mspace width="2em" /> <mi>b</mi> </math>
パディング(mpadded)
<mpadded>
を用いて数式をパディングすることができます。
<math display="block"> <mpadded width="20em" height="1em" depth="5em" lspace="2em" voffset="-3em" style="background: lightblue"> <mi>x</mi> <mo>+</mo> <mi>y</mi> </mpadded> </math>
ファントム(mphantom)
<mphantom>
は幻影の意味を持ち、見えない式を記述します。式の位置を揃えたい場合に使用します。
<math> <mi>2</mi><mo>⁢</mo><mi>x</mi><mo>=</mo><mn>6</mn> </math> <br> <math> <mphantom><mi>1</mi><mo>⁢</mo></mphantom><mi>x</mi><mo>=</mo><mn>3</mn> </math>
改行(linebreak)
linebreak
や linebreakstyle
などの属性が定義されていますが、大半のブラウザではサポートされていません。
<math> <mn>2</mn><mo>+</mo><mn>3</mn> <mo linebreak="newline" linebreakstyle="after">=</mo> <mi>5</mi> </math>
display="block"
を指定することによりブロック要素として表示することができますがセンタリングされてしまいます。行間も狭いです。行間は margin-bottom
で制御できますが、センタリングは text-align
も効かないようです。
<math display="block"> <mn>2</mn><mi>x</mi><mo>+</mo><mn>3</mn><mi>x</mi><mo>=10</mo> </math> <math display="block"> <mi>x</mi><mo>=</mo><mn>2</mn> </math>
<div>
で囲むのが手っ取り早いかもしれません。
<div> <math><mn>2</mn><mi>x</mi><mo>+</mo><mn>3</mn><mi>x</mi><mo>=10</mo></math> </div> <div> <math><mi>x</mi><mo>=</mo><mn>2</mn></math> </div>
MDN では <mtable>
を使用していました。
<math> <mtable> <mtr><mtd><mn>2</mn><mi>x</mi><mo>+</mo><mn>3</mn><mi>x</mi><mo>=10</mo></mtd></mtr> <mtr><mtd><mi>x</mi><mo>=</mo><mn>2</mn></mtd></mtr> </mtable> </math>
セマンティクス(semantics)
<semantics>
を用いて数式に対して注釈をつけることができます。
<math> <semantics> <mrow> <msup> <mi>x</mi> <mn>2</mn> </msup> </mrow> <annotation-xml encoding="MathML-Content"> <apply> <power /> <ci>x</ci> <cn>2</cn> </apply> </annotation-xml> </semantics> </math>
MathMLの使用例
二次方程式
<math> <mi>a</mi><mo>⁢</mo><msup><mo>x</mo><mn>2</mn></msup> <mo>+</mo> <mi>b</mi><mo>⁢</mo><mo>x</mo> <mo>+</mo> <mi>c</mi> <mo>=</mo> <mn>0</mn> </math>
二次方程式の解
<math> <mrow> <mi>x</mi> <mo>=</mo> <mfrac> <mrow> <mrow><mo>-</mo><mi>b</mi></mrow> <mo>±</mo> <msqrt> <mrow> <msup><mi>b</mi><mn>2</mn></msup> <mo>-</mo> <mrow><mn>4</mn><mo>⁢</mo><mi>a</mi><mo>⁢</mo><mi>c</mi></mrow> </mrow> </msqrt> </mrow> <mrow><mn>2</mn><mo>⁢</mo><mi>a</mi></mrow> </mfrac> </mrow> </math>
アインシュタインの公式
<math> <mi>E</mi> <mo>=</mo> <mi>m</mi> <mo>⁢</mo> <msup><mi>c</mi><mn>2</mn></msup> </math>
シュレディンガー方程式
<math> <mi>i</mi><mo>⁢</mo><mi>ℏ</mi> <mo>⁢</mo> <mfrac> <mrow><mo>∂</mo><mi>ψ</mi></mrow> <mrow><mo>∂</mo><mi>t</mi></mrow> </mfrac> <mo>=</mo> <mo>−</mo> <mfrac> <msup><mi>ℏ</mi><mn>2</mn></msup> <mrow><mn>2</mn><mo>⁢</mo><mi>m</mi></mrow> </mfrac> <mo>⁢</mo> <mfrac> <mrow><msup><mo>∂</mo><mn>2</mn></msup><mi>ψ</mi></mrow> <mrow><mo>∂</mo><msup><mi>x</mi><mn>2</mn></msup></mrow> </mfrac> <mo>+</mo> <mi>V</mi><mo>⁡</mo><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mi>ψ</mi> </math>
MyScript Math
MyScript というサイトの Math というデモサービスがすごいです。手書きの数式を MathML に変換してくれます。
リンク
- https://developer.mozilla.org/ja/docs/Web/MathML
- https://www.w3.org/TR/MathML3/
- https://w3c.github.io/mathml/
- http://takamu.sakura.ne.jp/mathml3-ja/index.html
- https://www.antenna.co.jp/AHF/ahf_publication/MathML/1.1/mathml-guide.pdf