Summary: A short introduction to writing Content MathML by hand. It covers tokens, prefix notation, and applying functions and operators. In addition it introduces writing derivatives, integrals, vectors, and matrices.
Note: Your browser may not currently support MathML. See our browser support page for additional details. You can always view the correct math in the PDF version.
Content MathMLの正式なリファレンスはSection 4 of the MathML 2.0 Specificationです。World Wide Web Consortium(W3C)はMathMLのための使用を書きました。テキストは読み込み可能で、検索も簡単です。詳しいことや分からないことのために、このチュートリアルを見てください。このチュートリアルはMathML 2.0に基づいています。
このドキュメントでは、MathMLネームスペース内でタグを定義するのに、プリフィックスmが使用されています。そのため、<apply>タグは<m:apply>として参照されます。MathMLネームスペース内でのすべてのマークアップは、<m:math>タグに囲まれなければならないことを覚えていてください。
Content MathMLについて理解するための基本概念は、一連の機能と演算子を、他の要素に適用することから成っています。これを行うためにContent MathMLは、プリフィックスnatationを使用します。Prefix notationでは、演算子が最初になり、その後に演算対象が続きます。2+3は以下のように書きます。
<m:math>
<m:apply>
<m:plus/>
<m:cn>2</m:cn>
<m:cn>3</m:cn>
</m:apply>
</m:math>
上記のContent MathMLの例には3つの種類の要素があります。最初はapplyタグですこれは演算子(または関数)が演算対象に適用されようとしていることを示します。次は適用される関数もしくは演算子がきます。この例の場合、演算子plusが適用されています。最後は、演算子の後にくる演算対象です。この例の場合、演算対象は加えられる数です。要約すると、applyタグは、関数(sinや
Content MathMLには、ci、cn、csymbolの3つのトークンがあります。トークンは基本的に最も低い要素です。トークンは作用している要素の種類を意味します。cnタグは、タグの中身が数字であることを示します。ciタグは、タグの中身が識別子であることを示します。識別子とは変数や関数のことです。例えばci要素は、Presentation MathMLを含めることができます。トークン(特にciとcn)は、Content MathMLで多く使用されます。あらゆる数、変数、または関数がトークンによってマークされます。
csymbolは、ciとcnとは異なったタイプのトークンです。それは、新しいオブジェクトを作成するために使用されます。それはplainテキストかPresentation MathMLを含むことができます。Content MathMLで定義されている演算子か関数を必要とするとき、それの作成にcsymbolを使用することができます。
ciとcsymbolの両方は、識別子か新しいシンボルがどように表示されるかを決めるPresentation MathMLを使用することができます。Presentation MathMLについてより詳しく学びたいなら、Section 3
of the MathML 2.0 Specificationを見てください。例えば、添字2がある
<m:math>
<m:ci>
<m:msub>
<m:mi>x</m:mi>
<m:mn>2</m:mn>
</m:msub>
</m:ci>
</m:math>
ci要素には、要素の内容に関する詳しい情報を提供するために使用するtype属性があります。例えば、ciタグの内容が関数(type='fn')、ベクトル(type='vector')、複素数(type='complex')、そして他のいろいろなもの同様に、宣言することができます。type属性の使用は、あなたが書いている数字の意味をエンコードするのを助けてくれます。
関数を変数に適用するため、関数の最初の引数を適用してください。2番目の引数は変数になるでしょう。例えば、以下のコードを使って意味をエンコードします。引数ciタグのtype属性にtype='fn'と入力してください)。
<m:math>
<m:apply>
<m:ci type='fn'>f</m:ci>
<m:ci>x</m:ci>
</m:apply>
</m:math>
また事前に定義された関数と演算子がContent MathMLにはあります。例えばサインとコサインは事前に定義されています。事前に定義されたこれらの関数と演算子は、applyタグに直接続く空のタグです。
<m:math>
<m:apply>
<m:sin/>
<m:ci>x</m:ci>
</m:apply>
</m:math>
MathML specificationのチャプター4で、事前に定義された関数の違いについてのより詳しい記述を見ることができます。
また、事前に定義された関数に加えて、多くの事前に定義された演算子があります。それらのいくつかは、plus(和)、minus(差)、times(乗)、divide(商)、power(べき乗)、root(ルート)などです。
ほとんどの演算子が、特定の数の子要素タグを持っています。例えば、power演算子は2つの子要素を持っています。最初の子要素はbaseで、2番目がexponentのvalueです。しかし、多くの子要素を含むことができる他のタグがあります。例えば、plus演算子は1つ以上の子要素を持つことができます。これはn-ary operatorと呼ばれます。
負の変数を表すことは、正の変数を表すことと少し異なる構文があります。この場合、あなたは問題の変数や数へ、plusやminus演算子を適用します。以下のコードは負の
<m:math>
<m:apply>
<m:minus/>
<m:ci>x</m:ci>
</m:apply>
</m:math>
負の変数を表すこととは対象的に、負の数を表すには以下のようなコードを使います。
<m:math><m:cn>-1</m:cn></m:math>
より複雑な式を作成するためには、これらの要素を互いに入れ子にしてください。複雑な式はこのように作成することができます。
<m:math>
<m:apply>
<m:times/>
<m:ci>a</m:ci>
<m:apply>
<m:plus/>
<m:ci>b</m:ci>
<m:ci>c</m:ci>
</m:apply>
</m:apply>
</m:math>
eq演算子は方程式を書くのに使用されます。それは他の演算子と同じように使用されます。これはapplyの最初の子要素です。それは2つ(以上)の子要素を持ちます。それらは等しい量になります(例えば右辺=左辺)。例えば、
<m:math>
<m:apply>
<m:eq/>
<m:apply>
<m:plus/>
<m:apply>
<m:times/>
<m:ci>a</m:ci>
<m:ci>b</m:ci>
</m:apply>
<m:apply>
<m:times/>
<m:ci>a</m:ci>
<m:ci>c</m:ci>
</m:apply>
</m:apply>
<m:apply>
<m:times/>
<m:ci>a</m:ci>
<m:apply>
<m:plus/>
<m:ci>b</m:ci>
<m:ci>c</m:ci>
</m:apply>
</m:apply>
</m:apply>
</m:math>
積分のための演算子はintです。しかし、演算子や上記の関数とは異なり、それは子要素を持っています。積分対象を表すbvar、積分範囲を表すlowlimitとuplimit(もしくはintervalとcondition)です。lowlimit、uplimit(この2つはセット)、interval、およびconditionは3つの異なった方法です。bvar、lowlimit、uplimit、interval、およびconditionの各子要素は、トークン要素を取ることを忘れないでください。以下は、「0から
<m:math>
<m:apply>
<m:int/>
<m:bvar><m:ci>x</m:ci></m:bvar>
<m:lowlimit><m:cn>0</m:cn></m:lowlimit>
<m:uplimit><m:ci>b</m:ci></m:uplimit>
<m:apply>
<m:ci type='fn'>f</m:ci>
<m:ci>x</m:ci>
</m:apply>
</m:apply>
</m:math>
微分の演算子はdiffです。積分と同じような方法で行えます。まずbvarを使用して、微分対象を定義する必要があります。以下は、「
<m:math>
<m:apply>
<m:diff/>
<m:bvar>
<m:ci>x</m:ci>
</m:bvar>
<m:apply>
<m:ci type="fn">f</m:ci>
<m:ci>x</m:ci>
</m:apply>
</m:apply>
</m:math>
より高次の微分を関数に適用するには、bvarタグのdegreeタグを追加して行ってください。degreeタグは微分の回数を含みます。以下は、「
<m:math>
<m:apply>
<m:diff/>
<m:bvar>
<m:ci>x</m:ci>
<m:degree><m:cn>2</m:cn></m:degree>
</m:bvar>
<m:apply><m:ci type="fn">f</m:ci>
<m:ci>x</m:ci>
</m:apply>
</m:apply>
</m:math>
ベクトルはvectorタグを使用し、他の要素の組み合わせで作成されます。
<m:math>
<m:vector>
<m:apply>
<m:plus/>
<m:ci>x</m:ci>
<m:ci>y</m:ci>
</m:apply>
<m:ci>z</m:ci>
<m:cn>0</m:cn>
</m:vector>
</m:math>
行列は同じように行えます。matrix要素はいくつかのmatrixrow要素を含み、matrixrow要素は行列の値を含みます。
<m:math>
<m:matrix>
<m:matrixrow>
<m:ci>a</m:ci>
<m:ci>b</m:ci>
<m:ci>c</m:ci>
</m:matrixrow>
<m:matrixrow>
<m:ci>d</m:ci>
<m:ci>e</m:ci>
<m:ci>f</m:ci>
</m:matrixrow>
<m:matrixrow>
<m:ci>g</m:ci>
<m:ci>h</m:ci>
<m:ci>j</m:ci>
</m:matrixrow>
</m:matrix>
</m:math>
また、行列式を得るため、行列内の要素を選択して、行列を移項するための演算子があります。
使用する必要があると思われる文字(例えば、Greek、letters)のために、MathMLはエンティティを定義しています。Content MathML内で、Presentation MathMLを埋め込む必要があるときに、それらは非常に役に立ちます。エンティティのリストはMathML 2.0の仕様の中で見つけられます。これらのエンティティを使用することは、ユニコードの文字で表すよりもいい方法です。なぜなら、これらエンティティは必要ならば再定義することができるからです。
Content MathMLでは、さらにいろいろなことができます。Content MathMLを多く書く計画があるなら、MathML specificationを見ることをお勧めします。