MathML2.0仕様に関する概要

2004年10月30日
アンテナハウス
小林 徳滋

特徴

MathMLの仕様の変遷

  1. MathML1.0 1998年4月7日勧告
  2. MathML2.0 2001年2月21日勧告
  3. MathML2.0第二版 2003年10月21日勧告
    Mathematical Markup Language (MathML) Version 2.0 (Second Edition) W3C Recommendation 21 October 2003

MathML2.0第二版の仕様書は、印刷用PDF版で本文262ページ、付録を含めトータル541ページの膨大なものである。ここに、MathML2.0仕様書の一部を抜粋して紹介する。仕様の詳細はW3CのWebサイトの本文を参照のこと。

MathMLはPostscriptのようにプログラムで生成することを想定した仕様である。PSファイルがあれば、プリンタや画面に表示する装置が広く入手可能なので、大勢の人が共有できる。これと同様にMathMLはMathの編集用のツール、レンダリング用のツール、TeXからHTML+MathMLへの変換ツールがあることを想定し、様々なツールで共有するものである。

将来は、MathMLが表計算、統計パッケージの世界にも広がるであろう。

既存の数式マークアップ言語

TeXが数学研究者の間では事実上の標準であり、科学界でも広く受け入れられている。MathMLがTeXと同等の数式のレンダリング品質になるように大きな努力が払われた。

MathMLとXML文法

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の要素と属性

MathMLの要素は次の3種類のいづれかに分類される。

MathMLのツリーの葉は、次のいづれかになる。

空要素
記号を表す。例<plus />
トークン要素
トークン要素のみが、MathMLの文字データを含むことができる。

MathMLの文字データとは、Unicode文字集合とmglyphで表現される特殊な文字集合である→後述。プレゼンテーション要素の中の最も重要なトークン要素は、mi、mn、moである。miは識別子、mnは数値、moはオペレータを表す。コンテント要素の中では、ci、cn、csymbolの3つがある。

アノーテンション要素
MathML以外のデータを保持するために使う。

属性

スタイルシートを基本とするレイアウトモデルより、むしろ属性を基本とするレイアウトモデル

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属性の既定値は要素毎に詳細に決まっている。

既定値が継承になっている場合、周辺要素の属性値から継承される。

すべての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の属性は、共通のもののほか下記のものがある。
  • form
  • fence
  • separator
  • lspace
  • rspace
  • stretchy
  • symmetric
  • maxsize
  • minsize
  • largeop (既定値はオペレータ辞書によって決まる(false)): displaystyle="true"の時、オペレータを大きく描くかどうかを設定する。→mstyleの項を参照。オペレータ辞書でlargeop="true"になっているのは&sum;, &int;, &prod;など。
  • movablelimits (既定値はオペレータ辞書によって決まる(false)): mo要素に添付される上文字、下文字をdisplaystyle="false"(通常、インラインの時falseになる)の時に、上付き、下付きとして描くかどうかを設定する。→mstyleの項を参照。オペレータ辞書でmovablelimits="true"になっているのは&sum;, &prod;, &lim;など。
  • accent
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ではレンダリング環境からスタイル情報を継承するメカニズムについては定めていない。

moと演算子辞書

MathMLでは、積分記号や、プラス記号などの数学的演算子のほか、通常は演算子には考えない、括弧類、絶対値記号(縦バー)、カンマ、セミコロン、上線やアクセントなども演算子としてmo要素で表す。これらの演算子には慣例的な組版方法がある。レンダラは演算子辞書を使って、個々の演算子の組版特性を属性値に指定しなくても演算子毎に最適な既定値が設定されるようすることが期待されている。属性の中で特にfence、separator、accentは演算子辞書で与えられるので普通は明記しない。

通常の演算子の例

<mo> + </mo>
<mo> &lt; </mo>
<mo> &le; </mo>
<mo> &lt;= </mo>
<mo> ++ </mo>
<mo> &sum; </mo>
<mo> .NOT. </mo>
<mo> and </mo>
<mo> &InvisibleTimes; </mo>
<mo mathvariant='bold'> + </mo>

囲い文字や区切り文字をもつ例 f(x,y)

<mrow>
  <mi> f </mi>
  <mo> &ApplyFunction; </mo>
  <mrow>
    <mo> ( </mo>
    <mrow>
      <mi> x </mi>
      <mo> , </mo>
      <mi> y </mi>
    </mrow>
    <mo> ) </mo>
  </mrow>
</mrow>

不可視演算子として⁢ (省略形⁢), ⁡ (同⁡), ⁣ (同⁣) がある。レンダリング時に間隔・改行などに影響を与えたり、読み上げ時、意味の解釈などに影響を与える。

<mrow>
  <mi> f </mi>
  <mo> &ApplyFunction; </mo>
  <mrow>
    <mo> ( </mo>
    <mi> x </mi>
    <mo> ) </mo>
  </mrow>
</mrow>

演算子、囲い文字、アクセントの伸縮

stretchy, symmetric, maxsizeとminsize属性は、演算子を伸縮させるために使われる。stretchy="true"が設定されているとレンダラは演算子を適切な方向へ引き伸ばす。minsizeとmaxsize属性は引き伸ばす量の最小値と最大値を設定する。symmetric 属性は縦方向へ引き伸ばす際に、文字の軸に対して上下対象になるように強制するかどうかを設定する。

mspaceによる空白

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対の囲い文字と分離文字で本体を囲む。囲い文字の規定値は括弧、分離文字の規定値はカンマ。下記の属性で既定値を変更する。
  • open:開き括弧に使う文字
  • close:閉じ括弧に使う文字
  • separators:分離文字
menclose 長い分割記号のような伸びた記号で内容を囲む。

mfrac

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を一つ上げる。

スタイルの変更mstyle

displaystyle、scriptlevelのような属性は、明示的に設定されていない時は組版環境から継承する。これらはmstyleに設定すると子要素に継承される。linethicknessはmfracの既定値を持つので、linethicknessをmstyleに設定するとそのスコープの中での既定値変更となる。strechyやformはオペレータ辞書で計算されるので、mstyleで設定すると計算された値を上書きする。 mstyleで使える特殊な属性のリストは次の通り。

  • scriptlevel
  • displaylevel
  • scriptsizemultiplier
  • scriptminsize
  • color
  • background
  • veryverythinmathspace
  • verythinmathspace
  • thinmathspace
  • mediummathspace
  • thickmathspace
  • verythickmathspace
  • veryverythickmathspace

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要素を使って指定し、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> &OverBar; </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属性はレンダリング情報を変更するように解釈もできる。

次の一般属性も利用できる。

混合マークアップ

意味があるところでは、プレゼンテーション・マークアップとコンテンツ・マークアップの混合が許される。

MathML文字

Unicode文字のサブセットまたはmglyph要素を使える。Unicode文字の表し方は、次の3通りである。

数学のアルファベットと数字は、単語ではなく、一つ一つが特別な意味を持つことが多い。そこで、Unicode3.1で面1に約1,000の数学用文字が導入された。さらにUnicode3.2で900文字以上が導入された。そこで、mglyph要素が必要になるのはまれである。

新しい文字はSMP (Secondary Multilingual Plane)とも呼ばれる面1に定義されているので、ソフトウェアの広範なサポートは期待できない。そこで代替手段として、BMPとmathvariantを使う方法もある。

例) <mi>&#x1D504;</mi>は、 <mi mathvariant="fraktur">A</mi>と同等。

非表示マーク

印刷などの品質を向上させたり、視覚的に曖昧な状態のテキストに数学的な意味を与えるための記号。

文字名 Unicode 説明
&InvisibleTimes; U+2062 乗算
&InvisibleComma; U+2063 指数の分離子として使う
&ApplyFunction; U+2061 プレゼンテーション・マークアップで関数の適用を示す。

文字記号リスト

特殊常数

MathMLが導入した特殊常数。Unicodeの番号も持っている。

実体名 Unicode番号 説明
&CapitalDifferentialD; U+2145 D 微分記号
&DifferentialD; U+2146 d 微分記号
&ExponentialE; U+2147 自然対数の指数ベース
&ImaginaryI; U+2148 虚数

文字表

数学に関係ありそうな文字の一覧表

Unicodeブロック別文字表

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文字名

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

MathMLインターフェイス

MathMLを他の文書に埋め込む

MathMLの名前空間
http://www.w3.org/1998/Math/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>要素の属性は次の通り。

class, id, style
スタイルシート用
xref
XSL処理のためのidを提供する
macros
外部のマクロ定義ファイルを示す方法を提供する
mode(非推奨)
属性値displayかinline(既定値)でMathMLの式のレンダリング方法を示す。
display(こちらを推奨)
属性値blockかinline(既定値)。MathMLの式のレンダリング方法を示す。display="block"であれば、内部の数式をブロックとして組版する。display="inline"であれば、内部の数式をインラインとして組版する。

各種のプロセサを起動するためのCSSの拡張[Behavior Extensions on CSS]は作業中である。

MathMLが別ファイルになっていて、embed、objectなどの要素から参照しているとき、MIMEタイプはRFC3023のapplication/mathml+xmlを使う。

CSSをMathMLに使う

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のパージング

MathMLではDTDを使う必要はないが、DTDを使わないと実体参照を使うことができない。この場合、ドキュメントは、&int;ではなく&#x222B;のような文字参照を使って参照しなければならない。

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"
>