2004年10月30日
アンテナハウス
小林 徳滋
MathMLの仕様の変遷
MathML2.0第二版の仕様書は、印刷用PDF版で本文262ページ、付録を含めトータル541ページの膨大なものである。ここに、MathML2.0仕様書の一部を抜粋して紹介する。仕様の詳細はW3CのWebサイトの本文を参照のこと。
MathMLはPostscriptのようにプログラムで生成することを想定した仕様である。PSファイルがあれば、プリンタや画面に表示する装置が広く入手可能なので、大勢の人が共有できる。これと同様にMathMLはMathの編集用のツール、レンダリング用のツール、TeXからHTML+MathMLへの変換ツールがあることを想定し、様々なツールで共有するものである。
将来は、MathMLが表計算、統計パッケージの世界にも広がるであろう。
TeXが数学研究者の間では事実上の標準であり、科学界でも広く受け入れられている。MathMLがTeXと同等の数式のレンダリング品質になるように大きな努力が払われた。
MathMLはXMLの応用であるが、XMLの文法のみでは表すことができない文法的制約も加えている。MathMLではXMLの文法に、主に次の二つの基準を追加している。
MathML2.0 DTDとMathML XML Schemaが仕様書の付録として提供されている。DTDよりSchemaの方が属性の制約を詳しく記述できる。あるMathML文書をDTDで検証してValidになっても、MathML XML SchemaではValidでないとされることがありうる。
但し、XML Schemaでは、実体参照の仕組みがない。MathMLでは文字に対して実体参照を使うことがよくあるので、&DifferencialID;のような数学的記号への実体参照を使っている場合は、MathMLの文書型宣言(DTD)が必要である。
MathMLの要素は次の3種類のいづれかに分類される。
MathMLのツリーの葉は、次のいづれかになる。
MathMLの文字データとは、Unicode文字集合とmglyphで表現される特殊な文字集合である→後述。プレゼンテーション要素の中の最も重要なトークン要素は、mi、mn、moである。miは識別子、mnは数値、moはオペレータを表す。コンテント要素の中では、ci、cn、csymbolの3つがある。
スタイルシートを基本とするレイアウトモデルより、むしろ属性を基本とするレイアウトモデル
MathML1.01ではCSSのテキスト描画プロパティに良く似た属性があり、この属性の名前と値を可能な限りCSS勧告に対応させていた。しかし、MathML2.0ではこれらを廃止した。以下の6種類。
| MathML属性 | CSSプロパティ |
|---|---|
| fontsize | font-size |
| fontweight | font-weight |
| fontstyle | font-style |
| fontfamily | font-family |
| color | color |
| background | background |
属性の処理順が決まっている。MathMLの要素に明示的に指定したものよりも、CSSでimportantと宣言したスタイルが優先される。
MathML属性の既定値は要素毎に詳細に決まっている。
既定値が継承になっている場合、周辺要素の属性値から継承される。
プレゼンテーション・マークアップは、次の要素からなる。
多くの要素では引数の数が決まっていて、引数の順序でその意味が決まる。
| 要素 | 要求される引数の数 | 位置により異なる場合、引数の役割 |
|---|---|---|
| mrow | 0 以上 | |
| mfrac | 2 | numerator denominator |
| msqrt | 1* | |
| mroot | 2 | base index |
| mstyle | 1* | |
| merror | 1* | |
| mpadded | 1* | |
| mphantom | 1* | |
| mfenced | 0 以上 | |
| menclose | 1* | |
| msub | 2 | base subscript |
| msup | 2 | base superscript |
| msubsup | 3 | base subscript superscript |
| munder | 2 | base underscript |
| mover | 2 | base overscript |
| munderover | 3 | base underscript overscript |
| mmultiscripts | 1 以上 | base (subscript superscript)* [<mprescripts/> (presubscript presuperscript)*] |
| mtable | 0 以上の行 | 0 以上のmtrまたはmlabeledtr要素 |
| mlabeledtr | 1 以上 | labelひとつと0以上のmtd 要素 |
| mtr | 0 以上 | 0 以上の mtd 要素 (仕様書の誤り?) |
| mtd | 1* | |
| maction | 1 以上 | actiontype属性に依存 |
| math | 1* |
0個または2個以上の引数を取る要素では、その内容となる要素全てを囲むmrow要素があるものと考える。例えば、
<msqrt> <mo> - </mo> <mn> 1 </mn> </msqrt>
は次と同じものとして扱われる。
<msqrt>
<mrow>
<mo> - </mo>
<mn> 1 </mn>
</mrow>
</msqrt>
要素の内容として文字、malignmark、mglyph、実体参照を含むことができる。
| 要素名 | 説明 |
|---|---|
| mi | 変数、関数名、シンボル定数などの識別子。識別子であるかのようにレンダリングされる内容であって、識別子を保証するものではない。属性mathvariantの既定値は1文字で無ければnormal、1文字であればitalic。 |
| mn | 数 |
| mo | 演算子、囲い文字(fence)、区切り文字(separator)など。これらを総称して演算子という。moの属性は、共通のもののほか下記のものがある。
|
| mtext | コメントのテキスト |
| mspace | 空白を示す空要素。属性値で幅を決定する。また、視覚的なレンダラに対して改行を示唆する。 |
| ms | 文字列リテラル。引用符で囲ってプログラム言語として解釈する。普通の文字列はmtext要素を使う。 |
| mglyph | 属性で文字を指定する。Unicode未定義の文字や定義済み文字の変形を選択する。fontfamilyとindexでグリフを特定する。 |
MathML2.0で新しい数学用スタイル属性が定義された。この属性は、mspaceとmglyph以外のトークン要素、およびmstyleで有効となる。
| 属性 | 属性値 | 既定値 |
|---|---|---|
| mathvariant | normal | bold | italic | bold-italic | double-struck | bold-fraktur | script | bold-script | fraktur | sans-serif | bold-sans-serif | sans-serif-italic | sans-serif-bold-italic | monospace | normal (miを除く) |
| mathsize | small | normal | big | number v-unit | inherited |
| mathcolor | #rgb | #rrggbb | html-color-name | inherited |
| mathbackground | #rgb | #rrggbb | html-color-name | inherited |
HTMLにMathMLを埋め込んだ場合、周囲の文字とMathMLでレンダリングが互換になるようにフォントの大きさといったレンダリング情報を共有する必要がある。MathML2.0ではレンダリング環境からスタイル情報を継承するメカニズムについては定めていない。
MathMLでは、積分記号や、プラス記号などの数学的演算子のほか、通常は演算子には考えない、括弧類、絶対値記号(縦バー)、カンマ、セミコロン、上線やアクセントなども演算子としてmo要素で表す。これらの演算子には慣例的な組版方法がある。レンダラは演算子辞書を使って、個々の演算子の組版特性を属性値に指定しなくても演算子毎に最適な既定値が設定されるようすることが期待されている。属性の中で特にfence、separator、accentは演算子辞書で与えられるので普通は明記しない。
通常の演算子の例
<mo> + </mo> <mo> < </mo> <mo> ≤ </mo> <mo> <= </mo> <mo> ++ </mo> <mo> ∑ </mo> <mo> .NOT. </mo> <mo> and </mo> <mo> ⁢ </mo> <mo mathvariant='bold'> + </mo>
囲い文字や区切り文字をもつ例 f(x,y)
<mrow>
<mi> f </mi>
<mo> ⁡ </mo>
<mrow>
<mo> ( </mo>
<mrow>
<mi> x </mi>
<mo> , </mo>
<mi> y </mi>
</mrow>
<mo> ) </mo>
</mrow>
</mrow>
不可視演算子として⁢ (省略形⁢), ⁡ (同⁡), ⁣ (同⁣) がある。レンダリング時に間隔・改行などに影響を与えたり、読み上げ時、意味の解釈などに影響を与える。
<mrow>
<mi> f </mi>
<mo> ⁡ </mo>
<mrow>
<mo> ( </mo>
<mi> x </mi>
<mo> ) </mo>
</mrow>
</mrow>
stretchy, symmetric, maxsizeとminsize属性は、演算子を伸縮させるために使われる。stretchy="true"が設定されているとレンダラは演算子を適切な方向へ引き伸ばす。minsizeとmaxsize属性は引き伸ばす量の最小値と最大値を設定する。symmetric 属性は縦方向へ引き伸ばす際に、文字の軸に対して上下対象になるように強制するかどうかを設定する。
mspaceを使って空白量や改行を設定できる。mspaceの属性は次の表の通り。
| 名前 | 値 | 既定値 |
|---|---|---|
| width | number h-unit | namedspace | 0em |
| height | number v-unit | 0ex |
| depth | number v-unit | 0ex |
| linebreak | auto | newline | indentingnewline | nobreak | goodbreak | badbreak | auto |
linebreak属性ではレンダラに対して改行の示唆をすることができる。値の意味は次の通り。
| 値 | 意味 |
|---|---|
| newline | 新しい行を開始し、インデントしない。 |
| indentingnewline | 新しい行を開始し、インデントする。 |
| nobreak | ここでは改行を許さない。 |
| goodbreak | 行の中で改行が必要ならば、ここが適切な箇所。 |
| badbreak | 行の中で改行が必要であっても、ここを避けるように勤めよ。 |
一般的なレイアウトの指定のための要素集合。数式の部品をまとめて大きな数式に構成する。要素のみを含む。
| 要素名 | 説明 |
|---|---|
| mrow | 部分式を水平方向にグループ化する。mrowは推定される場合がある。(省略可能)。 |
| mfrac | 二つの部分式から一つの分数を作成する。 |
| msqrt | 自乗根を作る。 |
| mroot | 引数はbaseとindexを取る。指定された指数をもつ根を作る。indexの中ではscriptlevelを2増やし、displaystyle="false"とする。baseでは両方の属性を変更しない。 |
| mstyle | 内容要素の既定値のスタイルを変更する(詳細は後述)。 |
| merror | プリプロセサからの構文エラーメッセージを包含する。 |
| mpadded | 本体の周囲の空白を調整する。 |
| mphantom | 場所を確保し、本体を不可視にする。 |
| mfenced | 1対の囲い文字と分離文字で本体を囲む。囲い文字の規定値は括弧、分離文字の規定値はカンマ。下記の属性で既定値を変更する。
|
| menclose | 長い分割記号のような伸びた記号で内容を囲む。 |
mfracの文法は:<mfrac> 分子 分母 </mfrac>。属性で分数の表示方法を設定する。
| 名前 | 値 | 既定値 |
|---|---|---|
| linethickness | number [ v-unit ] | thin | medium | thick | 1 (rule thickness) |
| numalign | left | center | right | center |
| denomalign | left | center | right | center |
| bevelled | true | false | false |
linethickness属性で線の太さを示す。linethickness="0"とすると線が表示されない。numalign、denomalign属性で分母と分子の配置を指定する。bevelled属性は分子と分母を線の上下に配置するか、それとも、斜め線で区切るかを示す。
mfrac要素は、分子と分母のdisplaylevelをfalseに設定する。もし、既にfalseになっていれば、scriptlevelを一つ上げる。
displaystyle、scriptlevelのような属性は、明示的に設定されていない時は組版環境から継承する。これらはmstyleに設定すると子要素に継承される。linethicknessはmfracの既定値を持つので、linethicknessをmstyleに設定するとそのスコープの中での既定値変更となる。strechyやformはオペレータ辞書で計算されるので、mstyleで設定すると計算された値を上書きする。 mstyleで使える特殊な属性のリストは次の通り。
MathMLでは、TeXが一つのスタイル属性にしていた、直交する属性を制御するためにdisplaystyleとscriptlevelという二つの属性を使う。 displaystyleは、mo要素のlargeopやmovablelimits属性の効果を決める。scriptlevelはフォントの大きさを決める。数が大きくなる程、フォントが小さくなる。
largeopは、displaystyle="true"の時、オペレータを現在の組版環境の標準よりも大きく描画することを指定する。
movablelimit属性は、displaystyle="false"の時、moに付属する上文字、下文字を上付、下付として組版するかどうかを指定する。movablelimits="false"であれば上文字、下文字を上付、下付として組版することは決してない。movablelimit="true"であれば、ブロック・レベルの数式は上文字、下文字をオペレータの上と下に組む。インライン・レベルの数式は、上文字、下文字を上付、下付として組む。
| displaystyle | movablelimits | undesrcript/oberscript |
|---|---|---|
| true (ブロック数式) | true | 文字/下文字 |
| false | 文字/下文字 | |
| false (インライン数式、表のセル内、添え字、分数) | true | 上付/下付 |
| false | 文字/下文字 |
HTMLなどにMathMLのインスタンスが段落として、つまりdisplayモードで埋め込まれたとこ、もっとも外側の式のdisplaystyle="true"、scriptlevel="0"である。MathMLが文字として、つまり、inlineモードで埋め込まれたとき、もっとも外側のdisplaystyle="false"、scriptlevel="0"である。
一般的に、MathMLのレンダラは組版しているMathMLのインスタンスの位置と文脈に応じて、好きなように初期値を設定して構わない。決定する方法が無いとき、displaystyle="true"、scriptlevel="0"とすることを推奨する。
添え字、分数、有理数、表、行列などではdisplaystyle="false"とし、scriptlevelを幾つか増やす。
| 要素名 | 説明 |
|---|---|
| msub | 引数はbase subscriptを取る。下付き文字を設定する。下付き(subscript)の中ではscriptlevelを1あげて、displaystyle="false"にする。 |
| msup | 引数はbase superscriptを取る。上付き文字を設定する。上付き(superscript)の中ではscriptlevelを1あげて、displaystyle="false"にする。 |
| msubsup | 引数はbase subscript superscriptを取る。上付き・下付き文字の組を設定する。例として積分記号の上限・下限を示すとき。下付き(subscript)と上付き(superscript)の中ではscriptlevelを1あげて、displaystyle="false"にする。 |
| munder | 下文字を設定する。 |
| mover | 上文字を設定する。 |
| munderover | 下文字、上文字の組を設定する。上文字、下文字がベースに対して同等に位置づけられるようにする。 |
| multiscripts | 基底に上付き文字と下付き文字のセットを任意数添える。上付きのみまたは下付きのみの場合、空要素<none />を無い文字の代わりに埋める。また、基底文字の前に上付き、下付きを添える時は<mprescripts />の後ろに付ける。 文法: <mmultiscripts> base (subscript superscript)* [<mprescripts /> (presubscript presuperscript)*] </mmultiscripts> |
mlabeledtr要素は表のラベル付きの行を表し、番号を付けた式のために使う。最初の要素がラベルである。ラベルは行列の表現とは考えらないで、列の数にも数えられないという点が特殊である。
| 要素名 | 説明 |
|---|---|
| mtable | 表、あるいは行列を表す。mtableの子供はmtrかmlabeledtrのみである。行の中で、列数が他の行より少ない場合は、空のmtdで埋められる。 |
| mlabeledtr | 表ないし行列のラベルや式番号の付いた行。先頭の子要素がラベルである。二つ目からは、通常行のセルとして扱われる。 |
| mtr | 表ないし行列の行 |
| mtd | 表ないし行列の一つのエントリー |
表または行列はmtable要素を使って指定し、mtable中にmtrとmlabeldtrを置くことができる。mtableの属性は次の表の通り。
| 名前 | 値 | 既定値 |
|---|---|---|
| align | (top | bottom | center | baseline | axis) [ rownumber ] | axis |
| rowalign | (top | bottom | center | baseline | axis) + | baseline |
| columnalign | (left | center | right) + | center |
| groupalign | group-alignment-list-list | {left} |
| alignmentscope | (true | false) + | true |
| columnwidth | (auto | number h-unit | namedspace | fit) + | auto |
| width | auto | number h-unit | auto |
| rowspacing | (number v-unit) + | 1.0ex |
| columnspacing | (number h-unit | namedspace) + | 0.8em |
| rowlines | (none | solid | dashed) + | none |
| columnlines | (none | solid | dashed) + | none |
| frame | none | solid | dashed | none |
| framespacing | (number h-unit | namedspace) (number v-unit | namedspace) | 0.4em 0.5ex |
| equalrows | true | false | false |
| equalcolumns | true | false | false |
| displaystyle | true | false | false |
| side | left | right | leftoverlap | rightoverlap | right |
| minlabelspacing | number h-unit | namedspace | 0.8em |
何行かに渡る式の特定の点を縦に位置揃えするとき、整列用のマーカを使う。整列の対象となる式全体は、mtableの中のmtdに含まれなければならない。表の列が整列のスコープとなる。
式の中で水平に移動させる単位が整列グループである。整列グループ同士の間に必要な量の水平の空白を挿入することで指定した点を垂直に揃える。整列グループはmaligngoup要素のある場所から始まり、次のmaligngroupまでの範囲である。maligngoup要素は、整列のスコープの範囲外ではゼロ幅空白であるが、整列のスコープの中では、適切な量の空白になる。セルがn個のmaligngroup要素を含むとき、n個の整列グループがある。
整列グループ一つには整列の対象となる整列点を、最低一つ指定する。整列点はmalignmark要素で指定するか、それともmaligngroupのgroupalign属性で自動的に決定する。
malignmark要素はedge属性により整列点が先行する要素の右の端か、次の要素または文字の左の端になるかを指定する。malignmarkはひとつのmaligngroupに一つが有効である。沢山あってもエラーではないが二つ目以降は無視する。
groupalign属性の値は、left, center, right, decimalpointのどれかである。groupalign属性は、グループに先行するmaligngroup要素か、それを含むmtd, mtr, mtable要素に指定する。通常は、groupalignで十分である。mtableの要素に指定して、それを継承させることですべてのmaligngroupに指定しないで済ませることができる。
| 要素名 | 説明 |
|---|---|
| maligngroup | 文字の寄せのためのマーカー。MathMLの数式の中の指定した点を垂直に揃えるため。連立方程式の係数と変数を垂直に揃える例。パーツを揃えたい式はmtableの一つの列の表要素とする。並べるときのスコープは列である。 属性groupalignでグループの整列点を示す。値は、left, center, right, decimalpointのいづれかである。 |
| malignmark | 文字の寄せのためのマーカー。id, xref, styleの共通属性の他に、left, rightの値をとる。 |
数式の中で二つのアクションを切り替えるなど。
| 要素名 | 説明 |
|---|---|
| maction | 一部分にアクションを結合する。 |
コンテンツ・マークアップの目標は表示ではなく、数式に潜む数学的構造を明示的にマークアップすることである。プレゼンテーション・マークアップから数学的意味を推測するには、高度な推定が必要で、誤りが起き易い。これに対して、コンテンツ・マークアップからは直接意味を汲み取れる。
コンテンツ・マークアップの要素は、米国のHigh Schoolから大学2年位までのレベルで使われる式を簡単にコード化するのに適切なように選択されている。
| タイプ | 要素 |
|---|---|
| トークン | ci, cn, csymbol |
| コンストラクタ | interval, list, matrix, matrixrow, set, vector, apply, reln, fn, lambda, piecewise, piece, otherwise |
| 特殊 | declare |
MathMLの式ツリーの葉になる。識別子、数字、記号を示す。
| 要素 | 意味 |
|---|---|
| cn | 数字を表す。 |
| ci | 識別子または変数 |
| csymbol | MathMLコアのコンテント要素ではなく、外部で定義した記号。 |
複合要素を構成する。
| 要素 | 説明 |
|---|---|
| interval | 区間 |
| set, list | vbar、condition要素も条件付要素を定義するのに使うことができる。 |
| matrix, matrixrow | 行列を表す。 |
| vector | n次元のベクトルを作る。 |
| apply | 関数、オペレータを引数に適用して式を作る。 |
| reln | MathML1.0で関係式を作るのに使われた。MathML2.0ではapplyを使う。 |
| fn | MathML1.0で関数であることを示すために使われた。MathML2.0ではapplyが使われる。 |
| labmda | ユーザ定義関数 |
| piecewise, piece, 他 | 部分宣言 |
| 要素 | 説明 |
|---|---|
| declare | 他のオブジェクトの意味を変更する目的 |
| カテゴリ | 関数、オペレータ、修飾子 |
|---|---|
| unary arithmetic | factorial, minus, abs, conjugate, arg, real, imaginary, floor, ceiling |
| unary logical | not |
| unary functional | inverse, ident, domain, codomain, image |
| unary elementary classical functions | sin, cos, tan, sec, csc, cot, sinh, cosh, tanh, sech, csch, coth, arcsin, arccos, arctan, arccosh, arccot, arccoth, arccsc, arccsch, arcsec, arcsech, arcsinh, arctanh, exp, ln, log |
| unary linear algebra | determinant, transpose |
| unary calculus and vector calculus | divergence, grad, curl, laplacian |
| unary set-theoretic | card |
| binary arithmetic | quotient, divide, minus, power, rem |
| binary logical | implies, equivalent, approx |
| binary set operators | setdiff |
| binary linear algebra | vectorproduct, scalarproduct, outerproduct |
| n-ary arithmetic | plus, times, max, min, gcd, lcm |
| n-ary statistical | mean, sdev, variance, median, mode |
| n-ary logical | and, or, xor |
| n-ary linear algebra | selector |
| n-ary set operator | union, intersect, cartesianproduct |
| n-ary functional | fn(deprecated), compose |
| integral, sum, product operators | int, sum, product |
| differential operator | diff, partialdiff |
| quantifier | forall, exists |
applyの子要素の先頭にオペレータが来る。オペレータの種類によって、それに続く要素の数が、次のリストのように変わる。ただし、declareは例外。
また、次の表は限定語を取るオペレータである。
| オペレータ | 限定語 |
|---|---|
| int | lowlimit, uplimit, vbar, interval, condition, domainofapplication |
| diff | vbar |
| partialdiff | vbar, degree |
| sum, product | vbar, lowlimit, uplimit, interval, condition, domainofapplication |
| limit | vbar, condition, lowlimit |
| log | logbase |
| moment | momentabout, degree |
| min, max | vbar |
| forall, exists | vbar |
外部のアプリケーションが評価した結果、真値を返すもの。関数と同じようにapply要素を使って引数とともに括弧で括る。MathML1.0ではrelnを使ったが、MathML2.0でapplyを使うようになった。
| カテゴリ | 関係子 |
|---|---|
| binary relation | neq, equivalent, approx, factorof |
| binary logical relation | implies |
| binary set relation | in, notin, notsubset, notprsubset |
| binary series relation | tendsto |
| n-ary relation | eq, leq, lt, geq, gt |
| n-ary set relation | subset, prsubset |
condition要素は、数式で"such that"構文を作成する。
| カテゴリ | 関係子 |
|---|---|
| condition | condition |
semantics, annotation, annotation-xml要素によって要素によって式の意味を対応づけることができる。 semanticは、式とその意味を包含するコンテナであり、複数の要素を含むことができる。最初は式であり、annotationとannotation-xmlに意味のコンテナである。
例
<semantics>
<apply>
<divide/>
<cn>123</cn>
<cn>456</cn>
</apply>
<annotation encoding="Mathematica">
N[123/456, 39]
</annotation>
<annotation encoding="TeX">
$0.269736842105263157894736842105263157894\ldots$
</annotation>
<annotation encoding="Maple">
evalf(123/456, 39);
</annotation>
<annotation-xml encoding="MathML-Presentation">
<mrow>
<mn> 0.269736842105263157894 </mn>
<mover accent='true'>
<mn> 736842105263157894 </mn>
<mo> ‾ </mo>
</mover>
</mrow>
</annotation-xml>
<annotation-xml encoding="OpenMath">
<OMA xmlns="http://www.openmath.org/OpenMath">
<OMS cd="arith1" name="divide"/>
<OMI>123</OMI>
<OMI>456</OMI>
</OMA>
</annotation-xml>
</semantics>
| 属性 | 適用できる要素 | 意味 |
|---|---|---|
| base | cn | 数字のベース。既定値は10 |
| closure | interval | 区間の囲み(open, closed, open-closed, closed-open) |
| definitionURL | csymbol, declare, semantics, すべてのオペレータ要素 | 記号や式の意味の定義 |
| encoding | annotation, annotation-xml, csymbol, semantics, すべてのオペレータ要素 | 注釈の符号化を示す |
| nargs | declare | 関数宣言の引数の数 |
| occurrence | declare | オペレータ宣言の出現数を示す |
| order | list | 既定値のリストの順番 |
| scope | declare | 宣言の入手可能な範囲 |
| type | cn | 数値の種類 |
| type | ci | 識別子の種類 |
| type | declare | 宣言されている識別子の種類 |
| type | set | 集合の種類 |
| type | tendsto |
type属性はレンダリング情報を変更するように解釈もできる。
次の一般属性も利用できる。
意味があるところでは、プレゼンテーション・マークアップとコンテンツ・マークアップの混合が許される。
Unicode文字のサブセットまたはmglyph要素を使える。Unicode文字の表し方は、次の3通りである。
数学のアルファベットと数字は、単語ではなく、一つ一つが特別な意味を持つことが多い。そこで、Unicode3.1で面1に約1,000の数学用文字が導入された。さらにUnicode3.2で900文字以上が導入された。そこで、mglyph要素が必要になるのはまれである。
新しい文字はSMP (Secondary Multilingual Plane)とも呼ばれる面1に定義されているので、ソフトウェアの広範なサポートは期待できない。そこで代替手段として、BMPとmathvariantを使う方法もある。
例) <mi>𝔄</mi>は、 <mi mathvariant="fraktur">A</mi>と同等。
印刷などの品質を向上させたり、視覚的に曖昧な状態のテキストに数学的な意味を与えるための記号。
| 文字名 | Unicode | 説明 |
|---|---|---|
| ⁢ | U+2062 | 乗算 |
| ⁣ | U+2063 | 指数の分離子として使う |
| ⁡ | U+2061 | プレゼンテーション・マークアップで関数の適用を示す。 |
MathMLが導入した特殊常数。Unicodeの番号も持っている。
| 実体名 | Unicode番号 | 説明 |
|---|---|---|
| ⅅ | U+2145 | D 微分記号 |
| ⅆ | U+2146 | d 微分記号 |
| ⅇ | U+2147 | 自然対数の指数ベース |
| ⅈ | U+2148 | 虚数 |
数学に関係ありそうな文字の一覧表
Unicodeのブロックの中で数学に関係ありそうな文字がある箇所
| Block Range | Description |
|---|---|
| 00000 - 000FF | Controls and Basic Latin, and Latin-1 Supplement |
| 00100 - 001FF | Latin Extended-A, Latin Extended-B |
| 00200 - 002FF | IPA Extensions, Spacing Modifier Letters |
| 00300 - 003FF | Combining Diacritical Marks, Greek [and Coptic] |
| 00400 - 004FF | Cyrillic |
| 02000 - 020FF | General Punctuation, Superscripts and Subscripts, Currency Symbols, Combining Diacritical Marks for Symbols |
| 02100 - 021FF | Letter-like Symbols, Number Forms, Arrows |
| 02200 - 022FF | Mathematical Operators |
| 02300 - 023FF | Miscellaneous Technical |
| 02400 - 024FF | Control Pictures, Optical Character Recognition, Enclosed Alphanumerics |
| 02500 - 025FF | Box Drawing, Block Elements, Geometric Shapes |
| 02600 - 026FF | Miscellaneous Symbols |
| 02700 - 027FF | Dingbats |
| 02900 - 029FF | Supplemental Arrows, Miscellaneous Mathematical Symbols |
| 02A00 - 02AFF | Supplemental Mathematical Operators |
| 03000 - 030FF | CJK Symbols and Punctuation, [Hiragana, Katakana] |
| 0FB00 - 0FBFF | Alphabetic Presentation Forms |
| 0FE00 - 0FEFF | [Combining Half Marks, CJK Compatibility Forms, Small Form Variants, Arabic Presentation Forms-B] |
| 1D400 - 1D4FF | Mathematical Styled Latin (Bold, Italic, Bold Italic, Script, Bold Script begins) |
| 1D500 - 1D5FF | Mathematical Styled Latin (Bold Script ends, Fraktur, Double-struck, Bold Fraktur, Sans-serif, Sans-serif Bold begins) |
| 1D600 - 1D6FF | Mathematical Styled Latin (Sans-serif Bold ends, Sans-serif Italic, Sans-serif Bold Italic, Monospace, Bold), Mathematical Styled Greek (Bold, Italic begins) |
| 1D700 - 1D7FF | Mathematical Styled Greek (Italic continued, Bold Italic, Sans-serif Bold), Mathematical Styled Digits |
Unicode文字の直後にU+0338(̸)、U+20D2(𠴠)、U+20E5(⃥)を続けることで、その文字の無効/削除形になる。原則としてすべての文字に無効/削除形を適用できるが、数学用にデザインしたフォントには無効/削除形のグリフが予め用意されているものもある。MathMLのレンダラはそれらのグリフが用意されている場合は、使えるようにするべきである。
合成した文字の中にはUCS文字もある。これらの一覧を次に示す。
Unicode3.2には、特殊なコードとしてU+FE00(VARIATION SELECTOR-1)がある。これは、次に一覧した文字の接尾修飾子としてのみ適用できて、二つの文字の結合は独自の文字ではなく、ベース文字の異体字として認識される。Unicodeを処理するシステムでは入手可能なフォントが異体字をサポートしていない場合、ベース文字としてレンダリングして良い。
数学用のアルファベットのリスト。ここで付けたアルファベットの名前は、数学用組版の世界の最近の慣行名に過ぎないことに注意すること。既に述べたように、数学用のアルファベットは、BMPの文字にmathvariant属性の適切な値をセットしたものと同等である。
MathML DTDの中での実体参照で使われている文字名。最後の一つを除いてISO 8879またはISO 9573-13で定義されている実体集合と同じ。
| ISO Handle | Description |
|---|---|
| ISOAMSA | Added Mathematical Symbols: Arrows |
| ISOAMSB | Added Mathematical Symbols: Binary Operators |
| ISOAMSC | Added Mathematical Symbols: Delimiters |
| ISOAMSN | Added Mathematical Symbols: Negated Relations |
| ISOAMSO | Added Mathematical Symbols: Ordinary |
| ISOAMSR | Added Mathematical Symbols: Relations |
| ISOBOX | Box and Line Drawing |
| ISOCYR1 | Cyrillic-1 |
| ISOCYR2 | Cyrillic-2 |
| ISODIA | Diacritical Marks |
| ISOGRK3 | Greek-3 |
| ISOLAT1 | Latin-1 |
| ISOLAT2 | Latin-2 |
| ISOMFRK | Mathematical Fraktur |
| ISOMOPF | Mathematical Openface (Double-struck) |
| ISOMSCR | Mathematical Script |
| ISONUM | Numeric and Special Graphic |
| ISOPUB | Publishing |
| ISOTECH | General Technical |
| MMLEXTRA | Extra Names added by MathML |
次の例のようにxmlnsを属性として使うと、その要素と子要素の既定値の名前空間を設定する。
<math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow>...</mrow> </math>
次の例のようにxmlnsを接頭辞として使うと、他の要素と属性がその名前空間に属することを示すための接頭辞宣言となる。
<body xmlns:m="http://www.w3.org/1998/Math/MathML"> ... <m:math><m:mrow>...</m:mrow></m:math> ... </body>
上の二つの方法を混在させることができる。
MathMLのトップレベルの要素は<math>である。文書の中のすべてのMathMLのインスタンスを<math>で囲まねばならない。
<math>要素の属性は次の通り。
各種のプロセサを起動するためのCSSの拡張[Behavior Extensions on CSS]は作業中である。
MathMLが別ファイルになっていて、embed、objectなどの要素から参照しているとき、MIMEタイプはRFC3023のapplication/mathml+xmlを使う。
CSSをサポートする環境でMathMLをレンダリングする際は、CSSのスタイルシートでMathMLのスタイル属性を制御するのが望ましい。一般的にはMathMLの開発者はCSSをできるだけ使うべきである。一方、文章と数学では次のような違いもある。
上のようなことからCSSによる文書全体のスタイルの変更が直接MathMLのレンダリングに影響を与えるのは危険である。MathML2.0では4つの新しい数学スタイルを導入してCSSのスタイルシート・メカニズムとMathMLのレンダラとの相互作用をよりうまくできるようにした。
一般的にCSSスタイルシートでは、次のようなルールを提供したら良いだろう。
math *.[mathsize="small"] {
font-size: 80%
}
この意味は、math要素の子供でmathsize属性をもつものは、フォントを小さくするということ。MathMLのレンダラは、CSSのスタイルエンジンに問い合わせて、与えられた値を自身のレイアウト・アルゴリズムへの入力として使用する。
文書全体のスタイルの変更がMathMLには影響を与えないようにCSSスタイルシートを作成する必要がある。MathML2.0の数学スタイルをCSSのルールの選択子として使うことでこの危険性は減る。
MathMLではDTDを使う必要はないが、DTDを使わないと実体参照を使うことができない。この場合、ドキュメントは、∫ではなく∫のような文字参照を使って参照しなければならない。
MathMLのXML DTDを文書型宣言に含めるときは次のようにする。
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
XHTMLでマークアップされた文書の一部モジュールとしてのMathMLを使うときは、次のような文書型宣言を使う。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd" >