数学マークアップ言語 (MathML) バージョン 4.0

W3C 作業草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2025/WD-mathml4-20251218/
最新の公開版:
https://www.w3.org/TR/mathml4/
最新の編集者草案:
https://w3c.github.io/mathml/
履歴:
https://www.w3.org/standards/history/mathml4/
コミット履歴
編集者:
David Carlisle (NAG)
前編集者:
Patrick Ion
Robert Miner (deceased)
フィードバック:
GitHub w3c/mathmlプルリクエスト, 新規 issue, オープンな issue
最新の MathML 勧告
https://www.w3.org/TR/MathML/

要旨

この仕様は数学マークアップ言語、MathMLを定義します。MathMLは数式表記を記述し、その構造と内容の両方を捕捉するためのマークアップ言語です。MathMLの目標は、[HTML]がテキストに対してこの機能を可能にしたのと同様に、ワールド・ワイド・ウェブ上で数学を配信、受信、および処理できるようにすることです。

このMathMLマークアップ言語の仕様は、主にそれを使用してレンダラーやエディターを開発または実装する者、あるいは入出力のプロトコルとしてMathMLを用いて通信するソフトウェアを対象としています。これはユーザー向けガイドではありません。むしろ参照文書です。

MathMLは数学的表記と数学的内容の両方をエンコードするために使用できます。MathMLのタグのうち約38個は抽象的な表記構造を記述し、さらに約170個は式の意図された意味を曖昧なく指定する方法を提供します。追加の章では、MathMLのcontent要素とpresentation要素がどのように相互作用するか、またMathMLレンダラーがどのように実装され、ブラウザとどのように連携すべきかを論じます。最後に、本書は数学で使用される特殊文字、それらのMathMLでの扱い、Unicodeへの存在、およびフォントとの関係の問題を扱います。

MathMLは人間が読める形式ですが、著者は通常、数式エディター、変換プログラム、その他の専門的なソフトウェアツールを用いてMathMLを生成します。そのようなMathMLツールのいくつかのバージョンは、フリーソフトウェアおよび商用製品の両方として存在し、さらに多くが開発中です。

MathMLはもともとXMLアプリケーションとして仕様化されており、この仕様のほとんどの例はその構文を想定しています。他の構文も可能で、特に [HTML] はHTML内でのMathMLの構文を規定しています。特に明記されていない限り、この仕様の例はHTML構文としても有効です。

この文書の状況

このセクションは、本書の公開時点における状況を説明します。現在の W3C 出版物の一覧およびこの技術報告書の最新改訂は W3C standards and drafts indexで確認できます。

MathMLおよびWeb上の数学のサポートに関する公開の議論は、Math Working Groupの公開メーリングリストリストアーカイブ)で行われます。購読するには件名にsubscribeと記してwww-math-request@w3.orgへメールを送信してください。あるいは、この仕様のGitHubリポジトリで問題を報告してください。

文書の進化についてのより詳しい議論は I. Changes にあります。

一部のセクションは折りたたまれており、展開して詳細を表示できます。以下のボタンを使ってそのようなすべてのセクションを展開できます。

この文書は Math Working Group によって作業草案として、 Recommendation track を使用して公開されました。

作業草案として公開されたことは、W3Cおよびそのメンバーによる支持を意味するものではありません。

これは草案文書であり、随時更新、置換、または他の文書により廃止されることがあります。本書を進行中の作業以外として引用するのは不適切です。

この文書は W3C Patent Policy の下で運営されるグループによって作成されました。 W3C は、グループの成果物に関連して行われた特許開示の公開リストを維持しています(公開特許開示リスト)。そのページには特許を開示するための手順も含まれています。個人が、当該個人が重要な請求項(Essential Claim(s))を含むと信じる特許について実際に知識を有している場合、当該情報は W3C特許方針のセクション6に従って開示しなければなりません。

この文書は 2025年8月18日付のW3Cプロセス文書 によって管理されています。

問題の概要

1. はじめに

この節は規範的ではありません。

1.1 数学とその表記法

数学とその表記法は数世紀あるいは数千年にわたって発展してきました。 経験のある読者にとって、数学表記は多くの情報を迅速かつ簡潔に伝えます。 しかしながら、表記の記号や配置は表現される数学の意味構造や意味論と深い対応関係を持つ一方で、 表記と意味論は同じものではありません。意味的な記号や構造は表記とは微妙に異なります。

したがって、伝統的な表示表記とその意味的内容の両方を表現できるマークアップ言語が必要です。 伝統的なレンダリングは視覚的読者に有用ですが、マークアップ言語はアクセシビリティもサポートしなければなりません。 意味的形式はさまざまな計算目的をサポートする必要があります。 いずれの形式も初等教育から研究レベルまでのすべての教育段階に適したものであるべきです。

1.2 概要

MathMLは数学を記述するためのマークアップ言語です。 単独で使われる場合や他のXML内で使われる場合はXML構文を使用し、 HTML文書内で使われる場合はHTML構文を使用します。 概念的には、MathMLは主に二つの系統のマークアップで構成されています: 表示(Presentation)マークアップは数式を表示するために用いられ、 コンテンツ(Content)マークアップは数学的な意味を伝えるために用いられます。 これら二つの系統は、他の外部表現とともに並列マークアップを用いて組み合わせることができます。

本仕様の構成は次のとおりです: 2. MathMLの基本 は表示とコンテンツのマークアップに共通する基本事項を論じ、 3. 表示マークアップ および 4. コンテンツマークアップ はそれぞれ表示とコンテンツのマークアップを扱います; 5. Annotating MathML: intent は特にアクセシビリティのためにマークアップに注釈を付ける方法を論じ、 6. Annotating MathML: semantics は表示、コンテンツ、その他の形式を組み合わせるための注釈方法を論じます; 7. ホスト環境との相互作用 はMathMLがアプリケーションとどのように相互作用するかを扱います; 最後に、特殊記号や文字、エンティティ、フォントに関する問題は 8. 文字、エンティティ、およびフォント に示します。

1.3 MathML Coreとの関係

MathMLの仕様は二つの層で開発されています。 MathML Core([MathML-Core)は(ほとんどの)表示マークアップをカバーしており、 ウェブブラウザで数学を表示するための精密な詳細に焦点を当てています。 MathML Full、すなわち本仕様は、主に MathML Core を拡張して 4. コンテンツマークアップ におけるコンテンツMathMLを定義します。 また、従来のMathMLとの互換性のためや、3.1.7 式の改行3.6 基本的な数式 といった MathML Core のレベル1に含まれない側面をカバーするために、 表示マークアップへの属性、要素、または属性の拡張された構文を定義しています。これらは将来の MathML Core のバージョンに取り込まれる可能性があります。

本仕様は MathML Core とその拡張の両方を扱います; 共通の機能は で示され、 拡張は で示されます。

MathML Full は MathML Core の真の上位集合であることが意図されています。 また、有効な Core マークアップは Full マークアップとしても有効と見なされることが意図されています。 さらに、MathML Core の実装であって、MathML Full の拡張の一部または全部を実装する場合でも、 その実装は引き続き MathML Core の適合実装と見なされることが意図されています。

1.4 MathMLに関する注記

これら二つの仕様に加えて、Math WG は非規範的な Notes on MathML を作成しており、 MathMLを使用する際のベストプラクティスを理解するのに役立つ追加の例や情報を含んでいます。

2. MathMLの基本

2.1 MathMLの構文と文法

2.1.1 一般的な考慮事項

MathMLの基本的な「構文」はXML構文を用いて定義されていますが、 ラベル付き木をエンコードできる他の構文も可能です。特にHTMLパーサもMathMLで使用できます。 これに基づいて、要素の許容、出現順序、入れ子の方法、および属性値に対する追加の構文規則からなる「文法」を重ねます。 これらの規則は本仕様によって定義され、A. MathMLの解析 にあるRELAXNG-SCHEMA [RELAXNG-SCHEMA] により形式化されています。 他の形式の派生スキーマ、DTD(Document Type Definition)およびXML Schema [XMLSchemas] も提供されています。

MathMLの文字集合は、使用される構文で許可される任意のUnicode文字 [Unicode] で構成されます。(例えば [XML] や [HTML] を参照してください。) 数学におけるUnicode文字の使用については 8. 文字、エンティティ、およびフォント で論じます。

以下のセクションでは、MathML文法の一般的側面および属性値に使用される構文について説明します。

2.1.2 MathMLと名前空間

XML名前空間 [Namespaces] はURIによって識別される名前の集合です。 MathML名前空間のURIは次のとおりです:

http://www.w3.org/1998/Math/MathML

MathMLのXMLシリアライゼーションを使用する際に名前空間を宣言するには、 xmlns 属性、または xmlns プレフィックス付きの属性を使用します。

<math xmlns="http://www.w3.org/1998/Math/MathML">
  <mrow>...</mrow>
</math>

xmlns 属性がプレフィックスとして使われる場合、それはプレフィックスを宣言し、 他の要素や属性を特定の名前空間に明示的に関連付けるために使用できます。 MathMLをXML構文でHTMLに埋め込む場合、次のように使用することがあります:

<body xmlns:m="http://www.w3.org/1998/Math/MathML">
  ...
  <m:math><m:mrow>...</m:mrow></m:math>
  ...
</body>

HTMLは同じ方法で名前空間の拡張性をサポートしません。HTMLパーサはHTML、SVG、およびMathML名前空間を内蔵知識として持っています。xmlns 属性は単に通常の属性として扱われます。したがって、MathMLのHTMLシリアライゼーションを使用する場合、プレフィックス付き要素名を使用してはなりません。xmlns=http://www.w3.org/1998/Math/MathMLmath 要素上で使用でき、HTMLパーサによって無視されます。 MathML式がXMLパーサまたはHTMLパーサのどちらかで解析される可能性のある文脈に置かれる場合、 最大の互換性を確保するために次の形式を使用することが推奨されます(SHOULD)

<math xmlns="http://www.w3.org/1998/Math/MathML">
  ...
</math>

2.1.3 子要素と引数

概念的に単一の引数のみを受け取る表示要素が存在しますが、便宜上任意の数の子要素を受け取るように書かれている場合があります; その場合、当該子要素を含む mrow を推論して、それが該当要素の引数として扱われます。詳しくは 3.1.3.1 推論される <mrow>s を参照してください。

MathML仕様全体で各要素ごとに与えられる要素構文の詳細な議論では、必要な引数の数と順序、ならびに内容に対する他の制約が指定されています。 この情報は、表示要素のための 3.1.3 必須引数 にも表形式でまとめられています。

2.1.4 MathMLとレンダリング

ウェブプラットフォーム上の [MathML-Core] の実装は、 当該文書で指定されている詳細なレイアウト規則に従うべきです。

本書は表示MathMLの具体的なレンダリング方法を推奨(推奨するが必須ではない)するのみです;これは媒体依存のレンダリングやCSSベースのウェブプラットフォームを用いない実装を許容するためです。

2.1.5 MathML属性値

MathML要素は、要素の意味や効果をさらに特化させる値を持つ属性を取ります。属性名は本書全体で 等幅フォント で示されています。属性の意味と許される値は各要素の仕様内で説明されています。 この節で説明する構文表記は、許可される値を指定する際に使用されます。

2.1.5.1 本仕様で使用される構文表記

属性値のMathML特有の構文を記述するために、本書のほとんどの属性に対して以下の慣習と表記を使用します。

表記 一致するもの
boolean [MathML-Core] に定義されるように、true または false とASCII大文字小文字を区別せずに一致する文字列。
unsigned-integer [MathML-Core] に定義されるように、integer で、その最初の文字が U+002D HYPHEN-MINUS (-) でも U+002B PLUS SIGN (+) でもないもの。
positive-integer 先の unsigned-integer のうち、全てが "0"(U+0030)だけで構成されないもの、すなわち正の整数を表すもの
integer オプションの "-" (U+002D) に続く unsigned-integer で、整数を表す
number オプションの先頭の "-" (U+002D) に続く unsigned-number で、終端小数数(有理数の一種)を表す
unsigned-number [CSS-VALUES-3] に定義される number の値で、 最初の文字が U+002D HYPHEN-MINUS (-) でも U+002B PLUS SIGN (+) でもないもの、 非負の終端小数数(有理数の一種)を表す
character 単一の非空白文字
string 任意の、空でない、有限な character の文字列
length 以下で説明する長さ、2.1.5.2 長さ値を取る属性
namedspace 名前付きの lengthnamedspace。詳細は 2.1.5.2 長さ値属性 を参照。
color [CSS-Color-3] で指定された構文を用いる色
id 文書内で一意な識別子; XML勧告のNAME構文を満たす必要があります [XML]
idref 文書内の他の要素を参照する識別子; XML勧告のNAME構文を満たす必要があります [XML]
URI Uniform Resource Identifier [RFC3986]。 スキーマでは anyURI として型付けされ、任意のXML文字の列を許容する点に注意してください。 この文字列をURIとして使用する必要のあるシステムは、URIで許可されない文字のUTF-8エンコーディングのバイトを %HH エンコーディングでエンコードしなければなりません。 これにより、そのような属性値をIRIや一般的なLEIRIとして解釈できるようになります(詳細は [IRI] を参照)。
斜体の語 各属性について本文中で説明される値; 2.1.5.3 属性のデフォルト値 を参照
"literal" 引用された記号が属性値に文字通り存在する(例: "+" または '+')

上で説明した '型' は string を除き、以下の演算子を用いて複合パターンに組み合わせることができます。属性値全体はマークアップ文書内ではシングルクォート(')かダブルクォート(")で囲まれていなければなりません。本仕様ではリテラル式を示すためにダブルクォートがしばしば使われます;例えば表の5行目の "-" のように。

下表では形式 f は上の表で説明した型のインスタンスを意味します。 結合演算子は優先順位の高い順に示します:

表記 一致するもの
( f ) 同じ f
f ? f のオプションのインスタンス
f * f の0個以上のインスタンス、区切りは空白文字
f + f の1個以上のインスタンス、区切りは空白文字
f 1 f 2 f n 各形式 f i を順に1つずつ、区切りの空白なしで
f 1 , f 2 , , f n 各形式 f i を順に1つずつ、区切りは空白文字(ただしコンマは含まない)
f 1 | f 2 | | f n 指定された形式 f i のいずれか一つ

ここで選んだ表記は、MathMLの基本スキーマに用いられるRelaxNGの構文表記のスタイルに沿ったものです。A. MathMLの解析 を参照してください。

いくつかのアプリケーションでは空白の正規化への扱いが一貫していないため、互換性を最大にするためには値の部分を区切る際に単一の空白文字のみを使用することが望ましいです。 また、属性値の先頭および末尾の空白は避けるべきです。

HTMLとの互換性のため、列挙された文字列値を持つ属性は ASCII 大文字小文字を区別しない 比較を行います。

ほとんどの数値属性については、表現可能な値の部分集合のみが実際に意味を持ちます;この部分集合外の値は、特に指定がない限りエラーではなく、レンダラの裁量で許容される最も近い値へ繰り上げまたは繰り下げされます。許容される値の集合はレンダラによって異なり、MathMLによって指定されるものではありません。

属性値構文の説明でマイナス記号 ('-') を許可している場合(例えば numberinteger)、 意味的に負の値が適切でない場合にマイナス記号が与えられていても構文エラーにはなりません。代わりに、その値は前述の段落で説明されたように処理アプリケーションによって扱われるべきです。明示的なプラス記号 ('+') は、構文で明示的にリストされている場合(引用された '+' や "+" のように)を除き数値の一部としては許可されず、その存在は属性値の意味を変えることがあります(許可される場合は各属性の文書で説明されています)。

2.1.5.2 長さ値を持つ属性

ほとんどの表示要素には、サイズ、間隔、または類似のプロパティに使用される長さを表す値を受け取る属性があります。 [MathML-Core] は長さを <length-percentage> 構文のみで受け入れます([CSS-VALUES-3] を参照)。MathML Full は長さ構文を拡張し、namedspace も受け付けます。これは次のいずれかに対するASCII大文字小文字を区別しない一致です:

正の空白 負の空白
veryverythinmathspace negativeveryverythinmathspace ±1/18 em
verythinmathspace negativeverythinmathspace ±2/18 em
thinmathspace negativethinmathspace ±3/18 em
mediummathspace negativemediummathspace ±4/18 em
thickmathspace negativethickmathspace ±5/18 em
verythickmathspace negativeverythickmathspace ±6/18 em
veryverythickmathspace negativeveryverythickmathspace ±7/18 em

MathML 3 では、mpadded の属性はコンテンツの元の寸法を示す三つの 疑似単位heightdepth、および width を許容していました(これらは通常のCSS単位の代わりに用いられるものです)。 また、単位なしの数値として長さを指定し、それを参照値の倍数として解釈する非推奨の用法も許容していました。これらの形式は MathML 4 では無効と見なされます。

2.1.5.2.1 単位に関する追加注記

しかしながら相対単位に関しては二つの追加事項を明確にする必要があります。 第一に、3.4 スクリプトと極限のスキーマmfrac のような要素は、 いくつかの引数に対して暗黙に小さなフォントサイズへ切り替えます。 同様に mstyle は現在のフォントサイズを明示的に変更するために使えます。そのような場合、属性値中の emex の有効値は文脈内で外側とは異なります。第二に、属性値で使われる emex の有効値は現在のフォントサイズの変更によって影響を受けることがあります。 したがって、mathsizescriptlevel のように現在のフォントサイズに影響を与える属性は、他の長さ値属性を評価する前に処理されなければなりません。

2.1.5.3 属性のデフォルト値

MathML属性のデフォルト値は、一般に各要素の詳細な説明とともに本文中で示されます。属性の表に平体で示されたデフォルト値はリテラルですが、斜体で示された場合はデフォルト値の算出方法の説明です。

inherited として記述されたデフォルト値は、3.3.4 スタイル変更 <mstyle> に記載されたようにレンダリング環境から取られます。また場合によっては(個別に説明されるケース)、周囲の要素の他の属性値、あるいはそれらの値の一部から取られることがあります。使用される値は、明示的に指定できたであろうもので、同じ要素の内容や属性に依存することはなく、常にその環境からのみ取られます。(ただし、その意味が使われる際にそれらの属性や内容に依存することはあり得ます。)

automatic として記述されたデフォルト値は、MathMLレンダラが高品質のレンダリングを生成する方法で算出すべきです;その方法は通常MathML仕様で指定されません。算出される値は、明示的に指定し得たものであり得ますが、通常は要素の内容やレンダリングされる文脈に依存します。

属性の表に現れる他の斜体によるデフォルト値の説明は、各属性ごとに個別に説明されています。

XML開始タグ内で属性値を囲む単一または二重引用符は、各要素の属性値構文の表では表示されていませんが、本文中の例では属性値が引用符で囲まれているため、示されたコード片が正しいことがわかります。

一般に、inherited または automatic とされる属性を指定しない効果をMathMLでシミュレートするメカニズムはありません。単語として inheritedautomatic を明示的に与えても機能せず、通常は許されません。さらに、mstyle 要素(3.3.4 スタイル変更 <mstyle>)は、 子に対する表示属性のデフォルト値を変更するためにも使えます。

また、これらのデフォルトは属性が供給されなかった場合のMathMLアプリケーションの振る舞いを記述するものであり、DTDベースの仕様で時折要求されるようにXMLパーサが値を埋めることを示すものではない点に注意してください。

一般に、MathMLレンダリングのいくつかのプロパティは文書全体、あるいは大きな文書の一部の全体的プロパティと考えられることがあります。例としては mathsize(数学フォントサイズ:3.2.2 トークン要素に共通の数学スタイル属性 を参照)や、積分や和のような演算子の極限の設定(例:movablelimitsdisplaystyle)や、式の行分割時の振る舞い(例:linebreakstyle)などが挙げられます。これらは何らかの包含スコープから継承されると考えられます。上で述べたように、MathML属性のデフォルト値の設定を inheritedautomatic として言及しましたが、レンダリングにおける振る舞いのグローバルなデフォルト値の第三の供給源として、MathMLの演算子辞書があります。デフォルトの例は B. 演算子辞書 に示されています。 これはまた 3.2.5.6.1 演算子辞書 で論じられ、例は 3.2.5.2.1 辞書に基づく属性 に示されています。

2.1.6 すべてのMathML要素で共有される属性

各要素に特に記載された属性に加えて、次の表の属性はすべてのMathML要素で許可されます。 また xml:lang のような xml 名前空間からの属性や、 MathML以外の名前空間からの属性も許可され、これらはデフォルトでは無視されます。

名前 デフォルト
id id なし
要素に関連付けられた一意の識別子を確立し、リンク、相互参照、並列マークアップをサポートします。 xref6.9 並列マークアップ を参照してください。
xref idref なし
文書内の別の要素を参照します。 id および 6.9 並列マークアップ を参照してください。
class string なし
要素にスタイルクラスの集合を関連付け、[CSS21] と共に使用します。 7.5 MathMLでのCSSの使用 を参照してください。
style string なし
要素にスタイル情報を関連付け、[CSS21] と共に使用します。 7.5 MathMLでのCSSの使用 を参照してください。
href URI なし
指定した URI へのハイパーリンクとして要素を確立するために使用できます。これは MathML Core のすべての要素でサポートされているわけではありませんが、a 要素ではサポートされています。

すべての表示MathML要素は、intent および arg 属性を受け取り、intent を指定することをサポートします。 これらは 5. Annotating MathML: intent でより詳しく説明されています。

名前 デフォルト
intent intent expression なし
intent 属性は 5. Annotating MathML: intent にて詳細に記述されています。表示要素上で式の意図する意味についての情報を与えるために使用でき、主に音声や点字のアクセシブルなレンダリングを導くために用いられます。
arg name なし
arg 属性は 5. Annotating MathML: intent にて詳細に記述されています。祖先要素の intent 式から参照される要素に名前を付けるために使用できます。

また、ほとんどの表示トークン要素で使用できるMathML属性の一覧については 3.2.2 トークン要素に共通する数学スタイル属性 を参照してください。

2.1.7 入力における空白の折りたたみ

MathMLでは、XMLと同様に 空白 は単純なスペース、タブ、改行、またはキャリッジリターン、すなわち16進で U+0020, U+0009, U+000A, U+000D の文字を意味します;[XML] のセクション2.3の空白に関する議論も参照してください。

MathMLはトークン要素の外側に出現する空白を無視します。 そこに非空白文字は許されません。トークン要素の内容内に出現する空白は、<cs> を除き、次のように正規化されます。 内容の先頭と末尾のすべての空白は削除され、要素の内容内部の空白は標準的に折りたたまれます、すなわち1文字以上の空白文字の各列は1つのスペース文字(U+0020、いわゆる空白文字)に置き換えられます。

例えば、<mo> ( </mo><mo>(</mo> と等価であり、また

 <mtext>
Theorem
1:
 </mtext>
Theorem 1:

は次と等価です: <mtext>Theorem 1:</mtext> または <mtext>Theorem&#x20;1:</mtext>

トークンの内容の先頭や末尾、あるいは単一スペース以外の連続として空白文字をエンコードしたい著者は、無視されないように非改行スペース U+00A0(または nbsp)や他の非マーキング文字を使用しなければなりません。 例えば、上の mtext の使用と次を比較してください。

 <mtext>
&#x00A0;<!--nbsp-->Theorem &#x00A0;<!--nbsp-->1:
 </mtext>
 Theorem  1:

最初の例がレンダリングされるとき、Theorem の前には何もなく、Theorem1: の間には1つのUnicodeスペース文字があり、1: の後には何もありません。 第二の例では、Theorem の前に単一のスペース文字がレンダリングされます;1: の前にはUnicodeスペース文字とUnicodeのノーブレークスペース文字の2つのスペースがレンダリングされます;1: の後には何もありません。

xml:space 属性の値はこの状況では関連しないことに注意してください。XMLプロセッサはトークン内の空白をMathMLプロセッサへ渡すため、空白がトリミングされ折りたたまれるのはMathML処理の要求によるものです。

トークン要素 mi, mn, mo, ms, mtext, ci, cn, cs, csymbol および annotation の内容外に出現する空白については、 空白だけを含む mtext 要素の代わりに mspace 要素を使用すべきです。

2.2 最上位の <math> 要素

MathMLは単一の最上位またはルートの math 要素を規定しており、 文書内の各MathMLマークアップのインスタンスをカプセル化します。他のすべてのMathMLコンテンツは math 要素内に含まれていなければなりません;言い換えれば、すべての有効なMathML式は外側の <math> タグで囲まれています。math 要素は常にMathML式の最外層要素でなければならず、一つの math 要素が別の math 要素を含むことはエラーです。これらの考慮事項は、式の切り取り貼り付けなどのアプリケーション間で部分式が渡される場合にも当てはまります;7.3 MathMLの転送 を参照してください。

math 要素は任意の数の子要素を含むことができます。デフォルトではこれらは mrow 要素に含まれているかのようにレンダリングされます。

2.2.1 属性

math 要素は、表示要素に共通の数学属性 で指定された一般的な表示属性のいずれも受け取り、 さらに 2.1.6 すべてのMathML要素で共有される属性 で指定された共通属性も受け取ります。 特に、全体の方向性を設定するための dir 属性を受け取ります;方向性を指定するのに math 要素が通常最も有用な場所です(詳細は 3.1.5 方向性 を参照)。 dir 属性は math 要素上ではデフォルトで ltr に初期化されます(ただし dir を受け入れる他の要素では 継承 します);これは方向性の概念がなかった MathML 2.0 との後方互換性を提供します。 また、mstyle や他の表示要素と同じ意味で境界ボックスの背景色を設定するための mathbackground 属性も受け取ります(属性のデフォルトを指定するのではなく)(詳細は 3.1.9 表示要素に共通の属性 を参照)。

これらの属性に加えて、math 要素は次を受け取ります:

名前 デフォルト
display "block" | "inline" inline
包含されたMathML式が別個の垂直ブロック(表示様式)としてレンダリングされるか、 隣接するテキストと整列されたインラインとしてレンダリングされるかを指定します。 display=block の場合、 displaystyletrue に初期化されます。 一方 display=inline の場合、displaystylefalse に初期化されます;どちらの場合も scriptlevel は 0 に初期化されます(詳細は 3.1.6 displaystyle と scriptlevel を参照)。 さらに、math要素が大きな文書に埋め込まれている場合、ブロックのmath要素は文書型に応じたブロック要素として扱われるべきであり(通常新しい垂直ブロックとして)、インラインのmath要素はインラインとして扱われるべきです(通常ちょうど通常のテキスト中の語列のように扱う)。特に、これは間隔や改行に適用されます:例えばインライン数式と直後の句読点の間に空白や改行を挿入してはなりません。 display属性が欠けている場合、レンダリングエージェントは文脈に適した初期化を行う自由があります。
比較は ASCII 大文字小文字を区別しない です、 一致するすべての文字列が値として許可されます。
maxwidth length 利用可能な幅
改行に使用する最大幅を指定します。デフォルトは周囲環境で利用可能な最大幅です。 その値が決定できない場合、レンダラは無限のレンダリング幅を仮定するべきです。
overflow "linebreak" | "scroll" | "elide" | "truncate" | "scale" linebreak
式が許容幅に収まらない場合の推奨処理方法を指定します。以下で議論します。
比較は ASCII 大文字小文字を区別しない です、 一致するすべての文字列が値として許可されます。
altimg URI なし
組み込みMathMLをサポートしていないユーザーエージェントのフォールバックとして表示する画像を指すURIを提供します。
altimg-width length altimg の幅
altimg を表示する幅を指定し、必要に応じて画像を拡大縮小します; altimg-height を参照してください。
altimg-height length altimg の高さ
altimg を表示する高さを指定し、必要に応じて画像を拡大縮小します; altimg-widthaltimg-height のうち片方だけが与えられた場合は、アスペクト比を維持して拡大縮小します; どちらの属性も与えられない場合は、画像は自然サイズで表示されます。
altimg-valign length | "top" | "middle" | "bottom" 0ex
隣接するインライン素材に対する画像の垂直方向の整列を指定します。 altimg-valign の正の値は画像の底部を現在のベースラインより上に移動し、負の値は下に移動させます。 キーワード "top" は画像の上部を隣接インライン素材の上部に揃えます; "center" は画像の中央を隣接素材の中央に揃えます; "bottom" は画像の下部を隣接素材の下部に揃えます(必ずしもベースラインではありません)。この属性は display=inline の場合にのみ有効です。 デフォルトでは画像の底部がベースラインに揃えられます。
比較は ASCII 大文字小文字を区別しない です、 一致するすべての文字列が値として許可されます。
alttext string なし
組み込みMathMLや画像をサポートしないユーザーエージェントのフォールバックとしてテキストの代替を提供します。
cdgroup URI なし
この math 要素内の csymbol, annotation, および annotation-xml 要素の OpenMath コンテンツ辞書を見つけるための CD ベースのカタログとして機能する CD グループファイルを指定します;詳細は 4.2.3 コンテンツ記号 <csymbol> を参照してください。明示的に cdgroup 属性が指定されていない場合、この math 要素を埋め込んでいる文書形式は CD ベースを決定する方法を提供するかもしれません。そうでない場合、システムはCDベースを決定しなければならず、特定の情報がない場合は http://www.openmath.org/cd がすべての csymbol, annotation, および annotation-xml 要素のCDベースとして仮定されます。これはOpenMath Societyが維持する標準CDの集合のCDベースです。

サイズ交渉が不可能または失敗した場合(例えば、式が許容幅に収まらない場合など)、 overflow 属性がレンダラに処理方法を示唆するために提供されます。 許される値は次のとおりです:

意味
"linebreak" 式を複数行に分割して表示します。 さらなる議論は 3.1.7 式の改行 を参照してください。
"scroll" ウィンドウは数学式の完全な表示へのビューポートを提供します。必要に応じて水平方向または垂直方向のスクロールバーがウィンドウに追加され、ビューポートを別の位置に移動できるようにします。
"elide" 表示を短縮してウィンドウに収まるようにします。例えば、大きな多項式の最初と最後の項を表示し、その間を + ... + で示すことがあります。高度なレンダラは省略された領域をズームする機能を提供する場合があります。
"truncate" 表示を単純に右端および下端で切り詰めて短縮します。切り詰めが行われたことを閲覧者に示す何らかの表示を行うことが推奨されます。
"scale" 式全体がウィンドウに収まるように使用されるフォントが選ばれます。これは式が大きすぎる場合にのみ発生します。ウィンドウが必要以上に大きい場合は、式は通常のサイズでより大きなウィンドウ内に表示されます。

3. 表示マークアップ

3.1 はじめに

本章では、数学表記のレイアウト構造を記述するために用いられる MathML の「表示(presentation)」要素を規定します。

表示マークアップの大部分は [MathML-Core] に含まれています。 精密な表示上の詳細(コアに属する要素や属性をウェブブラウザで表示する際の取り扱い)については、その仕様を参照してください。 ウェブブラウザ以外の環境では、MathML の表示要素は特定のレンダリング方法を提案する(必須としない)にとどまり、媒体依存のレンダリングや個々のスタイルの好みに対応できるようになっています。 ブラウザ非依存のレンダラーは、表示が可読である限り独自のレイアウト規則を使用することが許されています。

表示要素に使われる名前は視覚的なレイアウトを示唆するものです。 しかしながら、数学表記は新しい概念の発展に伴って再利用される長い歴史があります。 そのため、例えば mfrac のような要素が実際には分数でない場合もあり得ます。その場合は音声出力などのために intent 属性を用いて意図を示すべきです。

本章では、MathML の表示要素と属性のすべてを、使用例とともに説明します。

3.1.1 表示 MathML の構造

表示要素は、文書における章や節や段落が本文の上位の構造を表すのと同じように、数学表記の構文的構造を表現することを目的としています。このため、識別子や演算子の単一行は単一の mrow ではなく、複数の入れ子になった mrow 要素で表現されることがよくあります。例えば、 x + a / b は通常次のように表現されます:

<mrow>
  <mi> x </mi>
  <mo> + </mo>
  <mrow>
    <mi> a </mi>
    <mo> / </mo>
    <mi> b </mi>
  </mrow>
</mrow>
x + a / b

同様に、上付き・下付きは直前の単一文字ではなく、その基となる式全体に付属します。 この構造により、表示幅などレンダリング環境の詳細が文書作成時に不明であっても高品質なレンダリングが可能になり、表現された数学構造の自動解釈も容易になります。

伝統的な表記で他の記号と同じように表示される、あるいは可視化されない識別子や演算子を示すために特定の文字が用いられます。例えば、U+2146、U+2147、U+2148 はそれぞれ微分の d、指数の e、虚数単位の i を表し、単なる変数として使われる同じ文字とは意味的に区別されます。同様に U+2061、U+2062、U+2063、U+2064 は関数適用、不可視掛け算、不可視カンマ、不可視プラスを表します。これらは通常不可視にレンダリングされますが、空白や改行位置に影響を与え得る重要な情報を表し、音声出力では別個の読み方を持つことがあります。したがって、該当する場合はこれらの文字(または対応するエンティティ)を使用するべきです。

MathML のエンティティの完全な一覧は [Entities] に記載されています。

3.1.2 本章で使用される用語

表示要素は二つのクラスに分けられます。 トークン要素 は個々の記号、名前、数値、ラベルなどを表します。 レイアウトスキーマ は部分式から式を構築し、その内容として要素だけを持つことができます。 これらは 一般的なレイアウトスクリプトおよび極限表形式の数式、 および 基本的な数式 のスキーマに細分されます。 また、いくつかの空要素が特定のレイアウトスキーマと組み合わせてのみ使われます。

数式内のすべての個々の「記号」は MathML のトークン要素(例: <mn>24</mn>)で表すべきです。主なトークン要素の型は識別子(mi、変数や関数名など)、数値(mn)、演算子(mo、括弧類や区切り記号(コンマ等)を含む)です。さらにテキストや美観上の空白を表す要素や、コンピュータ代数系との互換性のための「文字列リテラル」を表す要素もあります。

レイアウトスキーマは、部分式が分数やスクリプト付きの表現などのより大きな式にどのように組み込まれるかを指定します。レイアウトスキーマは子要素の数や位置に特別な意味を付与します。レイアウトスキーマの子はその要素の 引数 とも呼ばれます。したがって、レイアウトスキーマの内容は、まさにそれが引数となる 0 個以上の要素の列から成ります。

3.1.3 必須引数

ここで記述される多くの要素は特定の数の引数(常に 1、2、または 3)を必要とします。以下の要素構文の詳細説明では、必要な引数の数はそれぞれの位置に対する引数名を示すことによって暗黙的に示されています。いくつかの要素には引数の数や型に関する追加の要件があり、それらは個々の要素説明で述べられます。例えば、いくつかの要素は 0 個以上の引数の列を受け入れる(すなわち引数が全く無くても許される)場合があります。

レンダリングされる空白をエンコードする要素は、それが現れる要素の引数として 計上される ことに注意してください。3.2.7 空白 <mspace/> を参照して、その適切な使用法を確認してください。

3.1.3.1 推論される <mrow>

次表に 1* 引数を必要とすると示されている要素(msqrt, mstyle, merror, mpadded, mphantom, menclose, mtd, mscarry, および math)は概念的には単一の引数を受け取りますが、実際には任意個の子を受け取ります。子が 0 個または 1 個より多い場合、それらの内容をすべて結合して単一の推論された mrow と見なしてその mrow を引数として扱います。

例えば、

<msqrt>
  <mo> - </mo>
  <mn> 1 </mn>
</msqrt>
- 1

は次のように扱われます

<msqrt>
  <mrow>
    <mo> - </mo>
    <mn> 1 </mn>
  </mrow>
</msqrt>
- 1

この機能により、多くの mrow 要素を明示的に含めなくても済むようになります。

3.1.3.2 引数要件の表

便宜上、各要素の引数数要件と、位置によって区別される場合の各引数の役割を示す表を示します。引数数が 1* の場合は上で述べた推論された mrow を意味します。なお math 要素は表示要素ではありませんが、完全性のために以下に列挙しています。

要素 必要な引数数 引数の役割(位置により異なる場合)
mrow 0 個以上
mfrac 2 分子 分母
msqrt 1*
mroot 2 指数
mstyle 1*
merror 1*
mpadded 1*
mphantom 1*
mfenced 0 個以上
menclose 1*
msub 2 下付き
msup 2 上付き
msubsup 3 下付き 上付き
munder 2 下書き
mover 2 上書き
munderover 3 下書き 上書き
mmultiscripts 1 個以上 (下付き 上付き)* [<mprescripts/> (先行下付き 先行上付き)*]
mtable 0 個以上の行 0 個以上の mtr 要素
mtr 0 個以上 0 個以上の mtd 要素
mtd 1*
mstack 0 個以上
mlongdiv 3 個以上 除数 結果 被除数 (msrow | msgroup | mscarries | msline)*
msgroup 0 個以上
msrow 0 個以上
mscarries 0 個以上
mscarry 1*
maction 1 個以上 属性 actiontype に依存
math 1*

3.1.4 特別な振る舞いをする要素

特定の MathML 表示要素は、特定の文脈で特殊な振る舞いを示します。これらの特殊な振る舞いは以下の各要素の詳細な説明で論じられますが、便宜上、重要な振る舞いのクラスをここに列挙します。

いくつかの要素は空白に類するものと見なされます;これらは 3.2.7 空白 <mspace/> で定義されています。この定義は mo 要素(3.2.5 演算子、フェンス、区切り記号またはアクセント <mo>)の提案されるレンダリング規則の一部に影響します。

例えば msup のような要素は、その第一引数である演算子を装飾することができます。これらの要素は 3.2.5 演算子、フェンス、区切り記号またはアクセント <mo> に列挙されており、装飾された演算子 の定義や伸縮可能な演算子に対する提案されるレンダリング規則への影響について説明しています。

3.1.5 方向性

多くの読者に馴染みのある表記では、全体のレイアウトもテキスト記号も左から右(LTR)に配置されます。しかし前述のように、ヘブライ語やモロッコ、ペルシャのような地域で書かれる数学では、全体のレイアウトはそのままに、埋め込まれた記号(しばしばヘブライ語やアラビア語)は右から左(RTL)に書かれます。さらに、アラブ圏の多くでは表記全体が完全に RTL に配置されます;その場合も上付きは上方に配置されますが、基の右ではなく左に続きます。

したがって MathML 3.0 では二つの異なる方向性を認識します:トークン要素内のテキストおよび記号の方向性と、レイアウトスキーマによって表される全体的な方向性です。これら二つの側面について以下で述べます。

注意

ここに縦書き言語に関する議論(および現状のサポート欠如)を少し追加する必要があるかもしれません

3.1.5.1 数式全体の方向性

数式の全体的な方向性、すなわちレイアウトスキーマの方向は、包含する math 要素の dir 属性で指定されます(参照: 2.2 最上位の <math> 要素)。 デフォルトは ltr です。dir=rtl を用いると、レイアウトは従来の欧文レイアウトの鏡映になります。つまり、上下の移動は変わらず、配置の進行方向だけが右から左になります。

例えば、RTL レイアウトでは下付き/上付きは基の左側に現れます;根号のルート記号は右側に現れ、横棒は基の左へ伸びます。方向性に依存する要素のレイアウト詳細はそれぞれの要素の説明で示されます。これらの議論では、どちらの側を使うかが方向性に依存する場合にオブジェクトの側を指定するために leading(前端)と trailing(後端)という用語を用います;すなわち leading は LTR では左、RTL では右を意味します。left と right はそれ以外の場合は通常の左・右を意味すると考えて差し支えありません。

全体的な方向性は通常 math に設定されますが、個々の部分式に対して mrowmstyledir 属性を用いて切り替えることもできます。指定されていない場合、要素は包含する要素の方向性を継承します。


比較は ASCII 大文字小文字を区別しない 方式で行われます。すべての一致する文字列が値として許可されます。
3.1.5.2 トークン要素における双方向レイアウト

テキストの方向性は、テキストを含む MathML のトークン要素(mtext, mo, mi, mnms)において問題になります。これはそのテキストの Unicode プロパティによって決まります。トークン要素が完全に LTR または RTL の文字のみを含む場合は、その方向に従って表示されます。RTL のアラビア語と LTR の数字が混在するような場合は、Unicode の双方向アルゴリズム [Bidi] を適用するべきです。このアルゴリズムは同じ方向の文字列の処理方法と、それらの列の(再)順序付けを規定します。基底、すなわち初期の方向は上で述べた全体的方向性(3.1.5.1 数式全体の方向性)によって与えられ、弱い方向性を持つ文字の扱いや列のネストに影響します。(まれなケースで初期方向を明示するために dir 属性がトークン要素上で許可されています。)mglyphmalignmark 要素がトークン要素内に現れる場合、それらは実質的に中立(neutral)とみなされ、順序に影響を与えません。

重要なのは、双方向アルゴリズムは各トークン要素の内容に対して独立に適用されるという点です;各トークン要素は独立した文字列ラン(走査単位)です。

Unicode と各種スクリプトに関する他の機能、例えば“鏡像(mirroring)”や“字形の成形(glyph shaping)”も尊重されるべきです。いくつかの Unicode 文字は RTL 文脈で鏡像表示されるとマークされています;つまり文字は鏡像化されるか対応する文字に置き換えられます。したがって開き括弧 ‘(’ は RTL では ‘)’ のように表示されます。逆にスラッシュ(/ U+002F)は鏡像としてマークされていません。したがってインライン除算でスラッシュを逆に表示したいアラビア語の筆者は、逆スラッシュ(\ U+005C)やミラーリングされた DIVISION SLASH(U+2215)のような代替を明示的に使うべきです。

さらに、アラビア書体のような書法では文字列を連結して見た目を変える(連続する文字を結合する)ことがあります。可読性や美観に大きな影響を与えるため、可能であればそのような字形の成形を適用することが重要です。字形の成形は方向性と同様に各トークン要素の内容ごとに適用されます。

ヘブライ文字で表される超限数(transfinite cardinals)については、見かけ上似たアルファベットのコードポイントではなく、U+2135-U+2138(ALEF SYMBOL, BET SYMBOL, GIMEL SYMBOL, DALET SYMBOL)を MathML で使うべきであり、これらのコードポイントは強い左から右の方向性を持ちます。

3.1.6 displaystyle と scriptlevel

いわゆる「表示された」式(行を独立して占めるもの)は、通常インライン式よりも垂直方向の余白を大きく取ります。インライン式は隣接するテキストと馴染むようにし、隣の行に侵入しないようにするべきです。例えば、表示された総和記号では極限が総和記号の上下に置かれますが、インラインでは上付き・下付きの位置に置かれます。同様に、上付き・下付きや入れ子の分数などは通常、式の主要部分より小さいサイズで表示されます。MathML は各表示ノードに displaystylescriptlevel を暗黙に関連付け、現在の文脈でより広い垂直レイアウトが適用されるか、スクリプトのレベルがどの程度かを反映します。

これらの値は math 要素によって display 属性に従って初期化されます。さまざまな スクリプトおよび極限スキーマ 要素や、mfracmroot のような要素は、通常その引数の一部または全部に対して displaystyle を false に設定し scriptlevel を増加させます(具体的な規則は各要素の説明を参照)。これらの属性はすべての表示要素で明示的に設定することもでき、その場合はその要素に適用され、さらに規則が適用されない限り子要素のデフォルトとなります。なお、scriptlevel+- が付く場合はその値だけ増減し、符号のない整数が与えられた場合はその値に設定されます。それ以外のケースでは親から継承されます。

displaystyle は式の垂直空間の使用量に影響します:true の場合は表示式の広いレイアウトが用いられ、false の場合はインライン式のよりコンパクトなレイアウトが用いられます。これは主に mo 要素の largeopmovablelimits の解釈に影響しますが、より高度なレンダラはこの属性を用いて任意に表示の密度を変えることができます。

scriptlevel の主な効果はフォントサイズを制御することです。通常は scriptlevel が高いほどフォントサイズは小さくなります(非視覚的レンダラは媒体に合わせて同様に応答できます)。scriptlevel が変更されるたびに、現在のフォントサイズは scriptsizemultiplier の値の(変更された)scriptlevel の差分乗により乗算されます。しかし、スクリプトによるフォントサイズの変化は読み取り不能に小さくなるのを防ぐために scriptminsize を下回らないようにすべきです。デフォルトの scriptsizemultiplier はおよそ √(1/2) で、scriptminsize はデフォルトで 8pt です;これらは任意の表示要素で変更可能です(詳細は MathML Core Attributes を参照)。scriptlevel 属性は任意の値(負値を含む)を許し、負値はフォントサイズを増やす結果になります。

scriptlevel によるフォントサイズの変更はノードの「外側」から課されるものと見なされます。つまり、mfrac のトークン子に対する明示的な mathsizescriptlevel の効果より後に適用されるため、mathsize が実質的に scriptlevel の効果を上書きします。ただし、scriptlevel の変更は現在のフォントサイズを変更するため、em 長さの意味(2.1.5.2 長さ値属性 を参照)に影響し、結果として scriptlevel が影響を残す場合があります。なお、mathsizescriptminsize によって制約されないため、直接のフォントサイズ変更によって scriptminsize より小さくなる場合があります。

CSS や mathsize3.2.2 トークン要素に共通する数学スタイル属性 を参照)による現在のフォントサイズの直接的な変更は、scriptlevel の値には影響しないことに注意してください。

TeX の \displaystyle, \textstyle, \scriptstyle, \scriptscriptstyle はそれぞれ displaystylescriptlevel に対応し、 true0, false0, false1, false2 に対応します。したがって、mathdisplay=block は \displaystyle に対応し、display=inline は \textstyle に対応します。

3.1.7 式の改行

3.1.7.1 改行の制御

MathML は、過度に長い式を複数行に分割するための自動および手動(強制)改行の両方をサポートします。 すべての改行は mrow(推論された mrow を含む)または mfenced の内部で行われます。 改行は通常 mo 要素で行われ、下位互換性のために mspace でも行われます。 レンダラは自動改行を他の箇所、例えば隣接する mi 要素の間や非常に長い単一トークン(長い mn など)の内部にも挿入することがあります。MathML はそのような改行を指定する手段を提供しませんが、レンダラがそのような点で改行を行う場合は、続く行のインデントはその時点で有効な インデント属性 に従って行うべきです。

自動改行は、包含する math 要素が overflow=linebreak であり、表示エンジンが式全体を表示するのに十分な幅がないと判断したときに発生します。したがって利用可能な幅はレンダラに知られている必要があります。フォント特性と同様に、その幅は MathML 要素が存在する環境から継承されると考えられます。幅が決定できない場合は無限幅を仮定するべきです。mtable の内部では各列に幅があり、それは属性で指定するか内容によって決定されます。この幅は改行幅として使われ、各セルは必要に応じて折り返されます。

強制改行は mo または mspace 要素に linebreak=newline を設定することで指定します。自動改行と手動改行は同じ式内で共存できます。

mfrac, msqrt, mroot, menclose および各種スクリプト要素の部分式の自動改行は必須ではありません。レンダラはこれらの要素内の強制改行を無視する自由があります。

mo や場合によっては mspace 要素上の属性は、改行と続く行のインデントを制御します。制御可能な改行の側面は次のとおりです:

  • どこで — 属性は特定の演算子や空白での改行の望ましさ、特に改行が必須か抑制されるかを決定します。これらは momspace のみで設定できます。(参照: 3.2.5.2.2 改行属性。)

  • 演算子の表示/位置 — 改行が発生したとき、演算子が行末に現れるか次行先頭に現れるか、あるいは両方に現れるか、また改行後にどれだけ垂直空間を追加するかを決定します。これらの属性は mo 要素上で設定するか、mstylemath 要素から継承できます。(参照: 3.2.5.2.2 改行属性。)

  • インデント — 改行後の行のインデントを決定します。例えば次行が前の行のある点に揃うようにインデントすることを含みます。これらの属性は mo 要素上で設定するか、mstylemath 要素から継承できます。(参照: 3.2.5.2.3 インデント属性。)

math 要素がインライン文脈に現れる場合、文書のテキストレンダリングエンジンが採用する段落フロー規則に従うことがあります。そのような規則は本仕様の範囲外です。あるいは math 要素の overflow 属性の値を使用することもできます。 (参照: 2.2.1 属性。)

3.1.7.2 改行の例

次の例は強制改行と強制整列を示します:

<mrow>
 <mrow>
  <mi>f</mi><mo>&#x2061;<!--ApplyFunction--></mo><mo>(</mo><mi>x</mi><mo>)</mo>
 </mrow>
 <mo id='eq1-equals'>=</mo>
 <mrow>
  <msup>
   <mrow><mo>(</mo><mrow><mi>x</mi><mo>+</mo><mn>1</mn></mrow><mo>)</mo></mrow>
   <mn>4</mn>
  </msup>
  <mo linebreak='newline' linebreakstyle='before'
      indentalign='id' indenttarget='eq1-equals'>=</mo>
  <mrow>
   <msup><mi>x</mi><mn>4</mn></msup>
   <mo id='eq1-plus'>+</mo>
   <mrow>
    <mn>4</mn><mo>&#x2062;<!--InvisibleTimes--></mo><msup><mi>x</mi><mn>3</mn></msup>
   </mrow>
   <mo>+</mo>
   <mrow>
    <mn>6</mn><mo>&#x2062;<!--InvisibleTimes--></mo><msup><mi>x</mi><mn>2</mn></msup>
   </mrow>
   <mo linebreak='newline' linebreakstyle='before'
       indentalignlast='id' indenttarget='eq1-plus'>+</mo>
   <mrow>
    <mn>4</mn><mo>&#x2062;<!--InvisibleTimes--></mo><mi>x</mi>
   </mrow>
   <mo>+</mo>
   <mn>1</mn>
  </mrow>
 </mrow>
</mrow>

これの表示は次のようになります

等号と加算記号が整列された例

なお、indentalignlast のデフォルトが indentalign であるため、上の例では indentalignlast の代わりに indentalign を使用することも可能でした。また linebreakstyle='before' はデフォルト値であるため明示する必要はありません。

3.1.8 表示要素の要約

3.1.8.1 トークン要素
mi 識別子
mn 数値
mo 演算子、フェンス、または区切り記号
mtext テキスト
mspace 空白
ms 文字列リテラル

さらに、mglyph 要素はトークン要素内で使用され、非標準の記号を画像として表現するために用いられます。

3.1.8.2 一般的なレイアウトスキーマ
mrow および a 任意個の部分式を水平方向にグループ化
mfrac 二つの部分式から分数を形成
msqrt 平方根(指数のない根)を形成
mroot 指定された指数を持つ根を形成
mstyle スタイルの変更
merror 前処理器による構文エラーメッセージを囲む
mpadded コンテンツまわりの空間を調整
mphantom コンテンツを不可視にするがそのサイズを保持
mfenced 一対のフェンスでコンテンツを囲む
menclose 長い除算線などの伸縮する記号でコンテンツを囲む
3.1.8.3 スクリプトおよび極限のスキーマ
msub 基に下付き文字を付ける
msup 基に上付き文字を付ける
msubsup 基に下付き・上付きのペアを付ける
munder 基に下書きを付ける
mover 基に上書きを付ける
munderover 基に下書き・上書きのペアを付ける
mmultiscripts 基にプレスクリプトやテンソル添字を付ける
3.1.8.4 表と行列
mtable 表または行列
mtr 表または行列の行
mtd 表または行列の一つの項目
maligngroup および malignmark 配置マーカー
3.1.8.5 基本的な数式レイアウト
mstack 揃えられた文字の列(列状)
mlongdiv msgroup に似るが除数と結果が追加される
msgroup 同様にシフトされた複数の行のグループ(mstack 内)
msrow mstack の行
mscarries 繰り上がりや繰り下がりを表す mstack 内の行
mscarry mscarries の一項目
msline mstack 内の水平線
3.1.8.6 式の活性化
maction 部分式にアクションを結びつける

3.1.9 表示要素に共通の属性

2.1.6 すべてのMathML要素で共有される属性 に列挙された属性に加え、 すべての MathML 表示要素は次のクラスの属性を受け取ります。MathML 3 ではこれらは mstyle 要素のみに設定可能でしたが、 [MathML-Core] と整合させるため、現在では任意の表示要素で許可されています。

3.1.9.1 MathML Core 属性

表示要素はまた [MathML-Core] で規定された グローバル属性 を受け取ります。

これらの属性には主に視覚媒体を想定した属性が含まれており、表示される式の意図される意味には通常影響しないと考えられます。最初の二つは強調や注目を引くためのもので、例えば赤い "x" が黒い "x" と意味的に異なると想定されるわけではありません。一方、残りの二つは式のレイアウトに関する一部のデフォルト規則を上書きします。詳細は 3.1.6 displaystyle と Scriptlevel を参照してください。

名前 デフォルト
mathcolor color 継承
この要素の構成要素を描画する際に使用する前景色を指定します(トークン要素の内容や線、根号線、その他の装飾など)。レイアウト要素上で使用された場合は子要素の既定の mathcolor を設定します。
mathbackground color | "transparent" transparent
要素とその子孫の境界ボックスを塗りつぶすために使用する背景色を指定します。デフォルトの "transparent" は、現在のレンダリング文脈で使われている背景色を透過させます。
scriptlevel ( "+" | "-" )? unsigned-integer 継承
子に対して適用される displaystyle を変更します。詳細は 3.1.6 displaystyle と Scriptlevel を参照してください。
displaystyle "true" | "false" 継承
子に対して適用される displaystyle を変更します。詳細は 3.1.6 displaystyle と Scriptlevel を参照してください。
比較は ASCII 大文字小文字を区別しない です。
3.1.9.2 MathML Full 専用の属性

これらの属性も任意の MathML 表示要素に設定できます。

名前 デフォルト
scriptsizemultiplier number 0.71
scriptlevel の変化に伴うフォントサイズ調整に用いる乗数を指定します。詳細は 3.1.6 displaystyle と Scriptlevel を参照してください。
scriptminsize length 8pt
scriptlevel の変化によるフォントサイズの最小許容値を指定します。なおこれは mathsize によるフォントサイズの制限ではありません。詳細は 3.1.6 displaystyle と Scriptlevel を参照してください。
infixlinebreakstyle "before" | "after" | "duplicate" before
中置演算子に対して使用する既定の linebreakstyle を指定します。詳細は 3.2.5.2.2 改行属性 を参照してください。
decimalcharacter character .
mstack において "decimalpoint" を用いて整列を指定する際の整列点を決める文字を指定します。デフォルトの "." は多くの国で浮動小数点数の整数部と小数部を分ける小数区切り文字です。
3.1.9.2.1 属性

もし scriptlevel がある要素によって増分的に変更され、その要素が他のいくつかの属性も同時に設定する場合、変更の全体的な効果は処理順序に依存することがあります。そのような場合、以下の属性は XML 開始タグの属性リスト内に現れる順序にかかわらず、次の順序で処理されるべきです: scriptsizemultiplier, scriptminsize, scriptlevel, mathsize

MathML 式はしばしば HTML のようなテキストデータ形式に埋め込まれるため、MathML レンダラは埋め込み先の文脈で使われている前景色を継承するべきです。ただし MathML([MathML-Core] と対照的に)は、レンダリング環境からスタイル情報がどのように継承されるかの仕組みを指定していない点に注意してください。詳細は 3.2.2 トークン要素に共通する数学スタイル属性 を参照してください。

なお、提案される MathML の視覚的レンダリング規則は、mathbackground 属性が影響する領域の正確な範囲を定義しません。ただし、内容が負の寸法を持たず、周囲の負の間隔によって描画領域が重なるべきでない場合は、その領域は内容の描画の背後にあり、周囲の式の描画の背後にはならないようにするべきです。負の間隔による描画領域の重なりが mathbackground 属性の影響範囲に与える効果はここでは定義されていません。

3.2 トークン要素

表示マークアップのトークン要素は、意味を持つ数学表記の最小単位を表現することを広く意図しています。トークンはテキスト内の単語に大まかに相当します。しかし、数学表記が厳密かつ記号的であるため、トークン要素のさまざまなカテゴリやプロパティは MathML マークアップで大きな役割を果たします。対照的に、テキストデータでは個々の単語を特別にマークアップしたりスタイル指定したりする必要はほとんどありません。

トークン要素は 識別子(mi)、 数値(mn)、 演算子(mo)、 テキスト(mtext)、 文字列(ms) および空白(mspace)を表現します。 mglyph 要素は トークン要素の内部で 標準でない記号を画像で表現するために使われます。 各トークン要素について詳述する前に、 次の2つの小節でトークン要素の許容内容とそれらに共通の属性について説明します。

3.2.1 トークン要素の内容文字、 <mglyph/>

MathML マークアップ内の文字データは、トークン要素の内容の一部としてのみ現れることが許可されています。要素間の空白は無視されます。 空の mspace 要素を除き、 トークン要素は任意の個数(ゼロ以上)の Unicode 文字、 または mglyphmalignmark 要素を含むことができます。 mglyph 要素は 標準でない文字や記号を画像で表現するために使われます。 malignmark 要素は表構造内で使うための配置点を設定し、それ以外の場合は不可視です(3.5.4 配置マーカー <maligngroup/>, <malignmark/>を参照)。

文字 は Unicode 文字データとして直接表現することもでき、数値または文字エンティティ参照を介して間接的に表現することもできます。 Unicode には似たような文字が多数存在します。 どの場面でどの文字を使うべきかについては [MathML-Notes] を参照してください。

mspace を除く)トークン要素は、その内容があれば内容として(すなわち視覚の場合は、標準的な文字のグリフや mglyph の画像を横に詰めて配置して)レンダリングされるべきです。 mspace 要素はその属性で決まる幅の空白としてレンダリングされます。 レンダリングアルゴリズムは、後述する数学スタイル属性も考慮し、種類ごとの規則や属性によって周囲の間隔も調整されるようにする必要があります。 内容の方向性の特性も必ず尊重されなければなりません(3.1.5.2 トークン要素における双方向レイアウト を参照)。

3.2.1.1 記号を表す画像の使用 <mglyph/>
: mglyph は MathML-Core には含まれません

mglyph は [MathML-Core] でサポートされていません。 ウェブプラットフォームでは HTML の img 要素の使用が推奨されます。これは MathML を (X)HTML 内に埋め込む場合、トークン要素内で許可されます。

既存の MathML で mglyph を使用している場合、Javascript ポリフィル がウェブドキュメント向けに提供されており、mglyphimg で実装します。

3.2.1.1.1 説明

mglyph 要素は標準でない記号を画像として表示する仕組みを提供します。 既存の Unicode 文字では十分でない場合、 mglyphmimnmomtextms のトークン要素の内容中で使用できます。

Unicode には数学で用いられる膨大な文字が定義されており、 そして、ほとんどの場合、これらの文字を表現するグリフがさまざまなフォントで広く利用可能です。これらの文字はほとんど全てのニーズを満たすはずですが、MathML は数学が静的なものではなく、必要に応じて新しい記号が追加されていくことを認識しています。十分に普及した記号は最終的に Unicode Consortium や他の標準化機関に取り込まれるでしょうが、それは大抵時間がかかるものです。

グリフの src 属性は mglyph を一意に識別することに注意してください; 同じ src を持つ 2 つの mglyph は、 2 文字/グリフが同一かどうかを判定する必要があるアプリケーションにおいて同一と見なされるべきです。

3.2.1.1.2 属性

mglyph 要素は 3.1.9 表示要素に共通の属性 で挙げられた属性を受け取りますが、 mathcolor には効果がない点に注意してください。 mathbackground で指定された背景色は、画像に透明部分があれば透けて見えるべきです。

mglyph はここに列挙する追加属性も受け取ります。

名前 デフォルト
src URI 必須
画像リソースの場所を指定します; MathML のソースの base-URI からの相対 URI にすることもできます。
width length 画像から取得
グリフの希望幅を指定します。height を参照してください。
height length 画像から取得
グリフの希望高さを指定します。 widthheight のいずれか一方のみが与えられた場合、 画像は縦横比を維持して拡大縮小されるべきです; 両方とも与えられていない場合は画像は本来のサイズで表示されるべきです。
valign length 0ex
画像のベースライン整列点を現在のベースラインに対して指定します。 正の値は画像の底部を現在のベースラインより上に移動し、負の値は下に移動します。 0(デフォルト)の場合は画像のベースラインが画像の底部に一致します。
alt string 必須
グリフの代替名を指定します。指定した画像が見つからない場合や表示できない場合、 レンダラは警告メッセージや未知のグリフ記号としてこの名前を使うことがあります。 この名前は音声レンダラや記号処理系でも使われる可能性があり、記述的に選ぶべきです。
3.2.1.1.3

以下の例は、研究者が画像の集合を使って braid 群記法で mglyph を活用する方法を示します。

<mrow>
  <mi><mglyph src="my-braid-23" alt="2 3 braid"/></mi>
  <mo>+</mo>
  <mi><mglyph src="my-braid-132" alt="1 3 2 braid"/></mi>
  <mo>=</mo>
  <mi><mglyph src="my-braid-13" alt="1 3 braid"/></mi>
</mrow>

これは次のようにレンダリングされます:

\includegraphics{image/braids}

3.2.2 トークン要素に共通する数学スタイル属性

すべての表示要素に定義された属性に加えて (3.1.9 表示要素に共通の属性)、MathML には2つの数学スタイル属性と、すべての表示トークン要素で有効な方向性属性が含まれます。 また、math および mstyle 要素、さらに dir 属性は mrow 要素でも有効です。 属性は以下の通りです:

名前 デフォルト
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" | "initial" | "tailed" | "looped" | "stretched" normal (<mi> 以外)
トークンの論理クラスを指定します。このクラスは単なるスタイル以上のものであり、通常は意味的な意図を伝えます。詳細は下記の議論を参照。
比較はASCII 大文字小文字を区別しないで行い、 すべての一致する文字列が値として許可されます。
mathsize "small" | "normal" | "big" | length 継承
トークン内容の表示サイズを指定します。 smallbig の値は 現在のフォントサイズより小さくまたは大きくなりますが、正確な比率は未指定です;normal は完全性のために許可されていますが、 100%1em と同じで効果はありません。
比較はASCII 大文字小文字を区別しないで行い、 すべての一致する文字列が値として許可されます。
dir "ltr" | "rtl" 継承
トークン内テキストの初期方向を指定します: ltr(左から右)または rtl(右から左)。 この属性は弱いまたは中立的な文字を含むまれな場合のみ必要になるはずです。 詳細は3.1.5.1 数式全体の方向性を参照。 mspace には効果がありません。
比較はASCII 大文字小文字を区別しないで行い、 すべての一致する文字列が値として許可されます。

mathvariant 属性はトークン要素の論理クラスを定義します。各クラスは書体的に関連する記号トークンの集合を提供します。各トークンには与えられた数学式内で特定の意味があり、その意味が変わることのないよう視覚的に識別され、文書全体のスタイル変更による予期せぬ変化から保護される必要があります。各トークンは mathvariant 属性値とトークン要素内の文字データの組み合わせで識別されます。

MathML のレンダリングが CSS を利用できる環境で行われる場合、数学スタイル属性は CSS スタイル規則の定義済みセレクタとしてみなすことができます。MathML と CSS の連携については7.5 MathML で CSS を使うを参照。 また、[MathMLforCSS] にも MathML を CSS でレンダリングする方法やサンプル CSS スタイルシートが議論されています。 CSS が利用できない場合は、レンダリングアプリケーションの内部スタイル機構により各論理クラスを視覚的に区別すべきです。 多くの MathML レンダラは内部処理のスタイルアルゴリズムも何らかの程度で利用するでしょう。 特に、mathvariant 属性は CSS 継承モデルには従いません; デフォルト値は normal(右傾斜でない)ですが、mi の単一文字内容の場合を除きます。 詳細は3.2.3 識別子 <mi> を参照。

レンダラは 数学スタイル属性を特定のレンダリングプロパティにマッピングする自由を持ちます。 しかし実際には、数学スタイル属性名と値は明白な書体的性質を示唆しており、レンダラはできるだけこれらの自然な解釈を尊重すべきです。 例えば、mathvariant 属性が sans-serif の場合は Helvetica や Arial で表示するのが妥当です。しかし Times Roman フォントで表示すると誤解を生む可能性があるため避けるべきです。

原則として、どの mathvariant 値もどの文字データとも自由に組み合わせて特定の記号トークンを定義できますが、実際にはレンダラによって区別されるのは限られた組み合わせだけです。例えば、"fraktur alpha" や "bold italic Kanji" の明確な書体は存在せず、"initial"、"tailed"、"looped"、"stretched" の値はアラビア文字の場合のみ適切です。

ある種の文字データと mathvariant の組み合わせは、数学アルファベット記号に割り当てられた Unicode コードポイントと等価です。これらの Unicode コードポイントは Arabic Mathematical Alphabetic Symbols(U+1EE00~U+1EEFF)、 Mathematical Alphanumeric Symbols(U+1D400~U+1D7FF)、 および Letterlike Symbols(U+2100~U+214F)で、これはSMP内でアルファベットに“穴”を表しています。8.2 数学アルファベット記号参照。 これらの文字はUTR #25 の2.2節で詳述されています。 それぞれの Unicode 標準でのキャラクタの説明には、スタイルを除けば同等である元の基本文字も記載されており、そのスタイル変更が mathvariant に対応します。素のキャラクタ+対応する mathvariant 値でのトークン要素は、その数学的アルファベット記号文字を mathvariant なしで使った要素と等価です。また、数学アルファベット記号文字自体の見た目は周囲の mathvariant やスタイル宣言によって変わるべきではありません。

レンダラは、Unicode 文字に対応する文字データと mathvariant の組み合わせ、かつ利用可能なフォントグリフで区別可能なものは対応すべきです。 Unicode コードポイントに対応しない組み合わせはレンダラが無視・対応どちらもしてもよく、作者はそのような記号のサポートがレンダラによって大きく異なりうることを認識すべきです。

MathML 式は HTML のようなテキストデータ形式に埋め込まれることが多いため、周囲のテキストと MathML は同じフォントサイズなどのレンダリング属性を共有する必要があり、整合的なスタイルで描画されます。このため、テキスト描画に影響するほとんどの属性値はレンダリング環境から継承されます(表の「デフォルト」列参照)。( MathML と周囲テキストの描画が別アプリ(例:ブラウザとプラグイン)で行われる場合は、MathML レンダラに周囲テキストのベースライン位置など追加情報も与えるべきです。これは MathML 属性では指定できません。) ただし、MathML はスタイル情報がレンダリング環境から継承される仕組み自体は規定していません。

現在のフォントで要求された mathsize が利用できない場合、レンダラは最も可読性や品質が高くなるように近似すべきです。 多くの MathML 要素が自動的に一部子要素のフォントサイズを変更することにも注意が必要です;詳細は3.1.6 displaystyle と scriptlevelを参照してください。

3.2.2.1 MathML への HTML 埋め込み

MathML は他フォーマットと組み合わせて使用できます( 7.4 MathML と他フォーマットの組み合わせ参照)。 推奨方法は、MathML スキーマを拡張して mtext 要素やその他のリーフ要素の子として追加要素を許可することで MathML に他フォーマットを埋め込むことです( 3.2.3 識別子<mi>3.2.4 数値<mn>3.2.5 演算子・フェンス・区切り・アクセント<mo>参照)。 方向性やフォントサイズ等の属性は、包含リーフ要素の文字に使われるものを継承すべきです( 3.2.2 トークン要素に共通する数学スタイル属性参照)。

以下はHTML文脈で mtext の内部に SVG を埋め込む例です:

<mtable>
 <mtr>
  <mtd>
   <mtext><input type="text" placeholder="what shape is this?"/></mtext>
  </mtd>
 </mtr>
 <mtr>
  <mtd>
   <mtext>
    <svg xmlns="http://www.w3.org/2000/svg" width="4cm" height="4cm" viewBox="0 0 400 400">
     <rect x="1" y="1" width="398" height="398" style="fill:none; stroke:blue"/>
     <path d="M 100 100 L 300 100 L 200 300 z" style="fill:red; stroke:blue; stroke-width:3"/>
    </svg>
   </mtext>
  </mtd>
 </mtr>
</mtable>

3.2.3 識別子 <mi>

3.2.3.1 説明

mi 要素は、識別子としてレンダリングされるべき記号名や任意のテキストを表します。識別子には変数、関数名、記号定数が含まれます。 一般的なグラフィカルレンダラは、mi 要素をその内容として(3.2.1 トークン要素の内容文字、<mglyph/>を参照)、 周囲に余分な空白を加えず(隣接要素にともなう空白を除く)に表示します。

すべての数学的識別子mi 要素で表されるわけではありません。例えば、下付きやダッシュ付き変数はそれぞれ msubmsup を用いて表すべきです。逆に、 の役割を果たす任意のテキスト(たとえば和の記号列に現れる省略記号など)は mi 要素で表してかまいません。

mi は表示要素であり、その内容が識別子としてレンダリングされるべきであることだけを示していることを強調するべきです。ほとんどの場合、mi の内容は実際には変数や関数名などの数学的識別子を表します。しかし、前段で示したように、識別子としてレンダリングされるべき表記と実際に数学的識別子を意図する表記との対応は完全ではありません。セマンティクスが確定している識別子要素については、4. コンテンツマークアップci の記述を参照してください。

3.2.3.2 属性

mi 要素は 3.2.2 トークン要素に共通する数学スタイル属性で挙げられた属性を受け取りますが、1件だけデフォルト値が異なります:

名前 デフォルト
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" | "initial" | "tailed" | "looped" | "stretched" (内容に依存。下記に記述)
トークンの論理クラスを指定します。デフォルトは normal(直立)ですが、内容が単一文字の場合は italic となります。
比較はASCII 大文字小文字を区別しないで行い、 すべての一致する文字列が値として許可されます。

Math Alphanumeric Symbol 文字の等価判定(8.2 数学アルファベット記号参照)の目的では、上記に記載した特別な既定動作も含め、まず mathvariant 属性の値を解決すべきです。

3.2.3.3
<mi>x</mi>
x
<mi>D</mi>
D
<mi>sin</mi>
sin
<mi mathvariant='script'>L</mi>
L
<mi></mi>

内容のない mi 要素も許容されます。 <mi></mi> は、たとえば 数式エディタ で、従来の数学構文上 が必要だがまだ入っていない場所を表現するのに使われる可能性があります。

識別子には sin のような関数名も含まれます。sin x のような式は、下記のようにU+2061(エンティティ af または ApplyFunction)を使って記述すべきです。 また不可視演算子についての議論は 3.2.5 演算子・フェンス・区切り・アクセント <mo>を参照してください。

<mrow>
  <mi> sin </mi>
  <mo> &#x2061;<!--ApplyFunction--> </mo>
  <mi> x </mi>
</mrow>
sin x

「項」として扱うべき多様なテキストも次のように mi 要素で表せます:

<mrow>
  <mn> 1 </mn>
  <mo> + </mo>
  <mi></mi>
  <mo> + </mo>
  <mi> n </mi>
</mrow>
1 + + n

このような特別な用途で mi を使う際は、明示的に mathvariant 属性を設定すると、一部レンダラの既定動作よりより良い結果になることがあります。

記号定数の名前も mi 要素で表現します:

<mi> π </mi>
<mi></mi>
<mi></mi>
π

3.2.4 数値 <mn>

3.2.4.1 説明

mn 要素は、数値リテラル または数値リテラルとしてレンダリングされるべき他のデータを表します。一般的に、数値リテラルとは桁(数字)の並びであり、小数点を含むこともあり、非負整数や実数を表現します。 一般的なグラフィカルレンダラは、mn 要素をその内容として(3.2.1 トークン要素の内容文字、<mglyph/>参照)、それらの周囲に余分な空白を加えずに(mo などの隣接要素による空白を除いて)レンダリングします。 mn 要素は通常、傾斜していないフォントでレンダリングされます。

という数学的概念は文脈によって非常に微妙で複雑になり得ます。このため、すべての数学的な数を mn で表現すべきとは限りません。mn 以外で表現すべき数学的数の例は以下のとおりで、複素数、分数で表された数の比、および数値定数の名称が含まれます。

逆に、mn は表示要素なので、特定の標準的な数字列でなくとも単に数値リテラルとしてレンダリングされるべき任意のテキストを内容として含める状況が時に存在します。たとえ内容がどの標準的な数値エンコーディングにも明確に解釈できない場合でもです。ただし一般論として、mn 要素は実際に何らかの数的量を表現しようと意図している場合に使用すべきです。特定の種類の数学的数としての意味が保証される要素については、4. コンテンツマークアップ内の cn の記述を参照してください。

3.2.4.2 属性

mn 要素は 3.2.2 トークン要素に共通する数学スタイル属性で挙げられた属性を受け取ります。

3.2.4.3
<mn> 2 </mn>
2
<mn> 0.123 </mn>
0.123
<mn> 1,000,000 </mn>
1,000,000
<mn> 2.1e10 </mn>
2.1e10
<mn> 0xFFEF </mn>
0xFFEF
<mn> MCMLXIX </mn>
MCMLXIX
<mn> twenty-one </mn>
twenty-one
3.2.4.4 <mn> だけで書くべきでない

多くの数学的な数は、mn だけでなく他の表示要素を使って表現すべきです。これには複素数、負の数、分数として示される数の比、数値定数の名称が含まれます。

3.2.4.4.1 数の複雑な表現の例
<mrow>
  <mn> 2 </mn>
  <mo> + </mo>
  <mrow>
    <mn> 3 </mn>
    <mo> &#x2062;<!--InvisibleTimes--> </mo>
    <mi></mi>
  </mrow>
</mrow>
2 + 3
<mfrac> <mn> 1 </mn> <mn> 2 </mn> </mfrac>
1 2
<mrow><mo>-</mo><mn>2</mn></mrow>
- 2
<mi> π </mi>
π
<mi></mi>

3.2.5 演算子、フェンス、区切りまたはアクセント <mo>

3.2.5.1 説明

mo 要素は演算子または演算子として表示すべきものを表します。一般に数学の演算子に関する表記規約はかなり複雑であるため、MathML は mo 要素のレンダリング動作を指定する比較的洗練された仕組みを提供します。その結果、MathML における「演算子として表示されるべきもの」の一覧には、通常の意味での数学的演算子ではない表記も多く含まれます。中置・前置・後置の形式を持つ通常の演算子に加え、波括弧や括弧、絶対値記号のようなフェンス文字、コンマやセミコロンのような区切り記号、および記号上のバーやチルダのような数学的アクセントが含まれます。本章ではこの広義の意味で「演算子」という用語を用います。

一般的なグラフィカルレンダラはすべての mo 要素をその内容として表示します(3.2.1 トークン要素の内容文字、 <mglyph/>を参照)、 その周囲の余白は属性によって決まり、下記でさらに説明されます。 MathML 文字セット用の完全なフォントにアクセスできないレンダラは、場合によっては mo 要素を内容と正確に同じ文字としてではなく別の形で表示することを選ぶことがあります。たとえば <mo> ≤ </mo> を端末では <= として表示することがあり得ます。しかし一般的な規則として、レンダラは mo 要素の内容をできるだけ文字通りにレンダリングするよう努めるべきです。つまり <mo> ≤ </mo><mo> &lt;= </mo> は異なる表示をすべきです。前者は単一の「小なりイコール」記号として表示され、後者は二文字列の列 <= として表示されるべきです。

mo 要素の重要な特徴は、その既定属性値が以下で説明する「演算子辞書」から個々に設定される点です。特に stretchsymmetric、および accent の既定値は通常演算子辞書で見つかるため、各 mo 要素に毎回指定する必要はありません。

また、いくつかの数学的演算子は単に mo 要素だけで表されるのではなく、(たとえば周囲に上付き文字があるなど)装飾された mo 要素として表されることがあります。これは後述します。逆に表示要素として、mo 要素は標準的な演算子としての解釈を持たない任意のテキストを含めることもできます。例は 3.2.6 テキスト <mtext> の「テキストと数学の混在」の議論を参照してください。特定の数学的演算子のセマンティクスが保証される MathML コンテンツ要素の定義については 4. コンテンツマークアップ を参照してください。

また、3.1.7 式の改行 で論じられるように、改行は通常演算子で行われます(前か後かは慣習に依存します)。したがって mo 要素は特定の演算子での改行の望ましさを符号化する属性や、改行がその演算子で行われた場合の演算子の扱いやインデントを記述する属性を受け取ります。

3.2.5.2 属性

mo 要素は 3.2.2 トークン要素に共通する数学スタイル属性 とここに列挙する追加の属性を受け取ります。 演算子の表示は数学において極めて重要であるため、mo 要素は多くの属性を受け取ります。これらは次の三つの小節で説明されます。

ほとんどの属性は包摂する mstyle 要素、math 要素、 文書の包含部、 または 3.2.5.6.1 演算子辞書 から既定値を取得します。 要素上で「継承」として示された値が明示的に与えられていない場合、momstylemath のいずれにも指定がなく、かつ演算子辞書にもその mo 要素に対する値が見つからない場合、表に示された括弧内の既定値が使用されます。

3.2.5.2.1 辞書に基づく属性
Name values default
form "prefix" | "infix" | "postfix" mrow 内での演算子の位置により設定される
包含する式における演算子の役割を指定します。この役割と演算子の内容は演算子辞書の検索に影響し、間隔や他の既定プロパティに影響します;詳細は 3.2.5.6.2 属性 form の既定値 を参照してください。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
lspace length 辞書で設定 (thickmathspace)
演算子の前に現れる先行空白の量を指定します;詳細は 3.2.5.6.4 演算子まわりの間隔 を参照してください。 (RTL 文脈では before が右側であることに注意してください;3.1.5 方向性 を参照。)
rspace length 辞書で設定 (thickmathspace)
演算子の後に現れる追随空白の量を指定します;詳細は 3.2.5.6.4 演算子まわりの間隔 を参照してください。 (RTL 文脈では after が左側であることに注意してください;3.1.5 方向性 を参照。)
stretchy boolean 辞書で設定 (false)
演算子が隣接する要素の大きさに合わせて伸縮すべきかを指定します;詳細は 3.2.5.7 演算子・フェンス・アクセントの伸縮 を参照してください。
symmetric boolean 辞書で設定 (false)
伸縮する際に演算子が数学の を中心として対称に保たれるべきかを指定します。この特性は垂直方向に伸縮する記号にのみ適用されます。詳細は 3.2.5.7 演算子・フェンス・アクセントの伸縮 を参照してください。
maxsize length 辞書で設定 (無制限)
伸縮する際の演算子の最大サイズを指定します;詳細は 3.2.5.7 演算子・フェンス・アクセントの伸縮 を参照してください。指定がない場合、最大サイズは無制限です。 単位なしまたはパーセンテージ値は参照サイズ(未伸縮グリフのサイズ)の倍数を示します。MathML 4 では "infinity" を値として用いることは非推奨になりました(指定しない場合と同じため)。
minsize length 辞書で設定 (100%)
伸縮する際の演算子の最小サイズを指定します;詳細は 3.2.5.7 演算子・フェンス・アクセントの伸縮 を参照してください。 単位なしまたはパーセンテージ値は参照サイズ(未伸縮グリフのサイズ)の倍数を示します。
largeop boolean 辞書で設定 (false)
演算子が「大きな」演算子と見なされるかどうかを指定します。つまり displaystyle=true のとき通常より大きく描かれるべきかどうかを示します(TeX の \displaystyle に類似)。大きな演算子の例には U+222B や U+220F(エンティティ int および prod)が含まれます。詳細は 3.1.6 Displaystyle と Scriptlevel を参照してください。
movablelimits boolean 辞書で設定 (false)
この演算子に付属する下付き・上付きが displaystyle が false の場合によりコンパクトな下付き・上付き位置に「移動」するかどうかを指定します。通常 movablelimits=true となる演算子の例には U+2211 や U+220F(エンティティ sum, prod)や lim などがあります。詳細は 3.1.6 Displaystyle と Scriptlevel を参照してください。
accent boolean 辞書で設定 (false)
演算子が下付きや上付きとして用いられる場合にアクセント(ダイアクリティカルマーク)として扱うべきかを指定します;該当する要素は mundermover、 および munderover です。
注意: MathML Core との互換性のために、この属性の代わりに囲む mover および munderoveraccent=true を指定して用いることができます。
3.2.5.2.2 改行属性

以下の属性は改行が発生するか否か、また改行が発生した場合の見た目に影響します。

名前 既定
linebreak "auto" | "newline" | "nobreak" | "goodbreak" | "badbreak" auto
この演算子で改行が発生することの望ましさを指定します: 既定の auto はレンダラが既定の改行アルゴリズムを用いて改行するかどうかを決定すべきことを示します;newline は改行を強制します;自動改行において nobreak は改行を禁止し、goodbreak は良い改行位置を示唆し、badbreak は良くない改行位置を示唆します。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
lineleading length 継承 (100%)
改行後に使用する垂直空白(行間)の量を指定します。高さのある行では改行時により多くの行送りを使う方が明瞭なことがあります。レンダリングエージェントは適切な既定値を選ぶ自由があります。
linebreakstyle "before" | "after" | "duplicate" | "infixlinebreakstyle" 辞書で設定 (before)
演算子で改行が起きたときに、改行が演算子の「前」に起きるか「後」に起きるか、あるいは演算子を複製するかを指定します。before は改行後の新しい行の先頭に演算子を表示させます(ただしインデントされる場合あり);after は改行前の行の末尾に表示させます。duplicate は両方の位置に演算子を置きます。infixlinebreakstyle は中置演算子のために指定された値を使用します;この値(beforeafter、または duplicate のいずれか)はアプリケーションによって指定されるか、または mstyle により束縛されることがあります(before は最も一般的な改行スタイルに対応します)。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
linebreakmultchar string 継承 (&InvisibleTimes;)
改行時に &InvisibleTimes; 演算子を可視化するために使われる文字を指定します。たとえば linebreakmultchar="·" とすれば掛け算を中央ドットで可視化できます。

隣接する mo および mspace 要素上の linebreak 値は相互作用しません;ある mo 上で linebreak=nobreak が指定されていても、それだけで前後の(入れ子の可能性がある)momspace の改行を抑止したり、前後の molinebreakstyle と相互作用したりはしません。とはいえ、通常の状況ではその mo の両側での改行を防ぎます。

3.2.5.2.3 インデント属性

以下の属性は式を構成する行のインデントに影響します。主にこれらの属性は自動または手動の改行の後に新しい行を配置する方法を制御します。ただし indentalignfirst および indentshiftfirst は改行のない単一行式の配置も制御します。これらの属性が mo または mspace に現れると、その要素で改行が発生した場合に適用されます。mstylemath 要素に現れる場合、それらは内部で発生する改行のスタイルの既定値を決定します。大規模に手動改行をマークアップしない限り、これらの多くの属性は mstyle または math にバインドして用いると有用です。

レンダリング文脈(利用可能幅や現在のフォントなど)が MathML の作者に常に利用できるわけではないため、レンダラはこれらの属性の値が残り幅が小さすぎる行を生じさせる場合や残り幅が利用可能な折り返し幅を超える行を生じさせる場合には、これらの属性の値を無視することがあります。

名前 既定
indentalign "left" | "center" | "right" | "auto" | "id" 継承 (auto)
mrow 内で改行が起きた場合の行の配置を指定します;各値の意味については下記を参照してください。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
indentshift length 継承 (0)
indentalign により決定される位置に対する追加のインデントオフセットを指定します。値がパーセンテージの場合、その値は MathML レンダラが利用可能な水平空間に対する割合に相対します。これは 3.1.7 式の改行 に記載された改行用の現在の目標幅です。注意:単位のない数値は MathML 3 で許可されパーセンテージと同様に扱われましたが、MathML 4 では単位なし数値は非推奨です。
indenttarget idref 継承 (none)
indentalign=id の場合に、インデントされた行の位置を決める別の要素の水平位置を指定するためのその要素の id を指定します。指定された要素は現在の math 要素の外にあって相互式の整列に使われる場合や、mphantom のような不可視コンテンツ内にある場合があります;ただし参照される前に出現していなければなりません。これにより一部のレンダラで id が利用不可能になったり整列が不可能な位置にあることがあります。そのような場合、indentalignauto に戻るべきです。
indentalignfirst "left" | "center" | "right" | "auto" | "id" | "indentalign" 継承 (indentalign)
式の最初の行に使うインデントスタイルを指定します;値 indentalign(既定)は一般行と同じ方法でインデントすることを意味します。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
indentshiftfirst length | "indentshift" 継承 (indentshift)
式の最初の行に使うオフセットを指定します;値 indentshift(既定)は一般行と同じオフセットを使うことを意味します。比較は ASCII 大文字小文字を区別しない方式です。パーセンテージ値や単位なし数値は indentshift と同様に解釈されます。
indentalignlast "left" | "center" | "right" | "auto" | "id" | "indentalign" 継承 (indentalign)
指定された mrow 内で改行があった場合に最後の行に使うインデントスタイルを指定します;値 indentalign(既定)は一般行と同じ方法でインデントすることを意味します。行がちょうど二行の場合、この属性の値は第二行に対して indentalign より優先して使用されるべきです。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
indentshiftlast length | "indentshift" 継承 (indentshift)
指定された mrow 内で改行があった場合に最後の行に使うオフセットを指定します;値 indentshift(既定)は一般行と同じオフセットを使うことを意味します。比較は ASCII 大文字小文字を区別しない方式です。行がちょうど二行の場合、この属性の値は第二行に対して indentshift より優先して使用されるべきです。パーセンテージ値や単位なし数値は indentshift の説明に従って解釈されます。

indentalign の合法的な値の意味は次のとおりです:

意味
left 次行の左側を折返し幅の左側に揃える
center 次行の中央を折返し幅の中央に揃える
right 次行の右側を折返し幅の右側に揃える
auto (既定)レンダラの既定のインデントスタイルを用いてインデントする;これは固定量であったり mrow のネスト深さに応じて変化する方法であったりします。
id 次行の左側を indenttarget により参照される要素の左側に揃える;そのような要素が存在しない場合は auto を用いる
3.2.5.3 通常の演算子の例
<mo>+</mo>
+
<mo>&lt;</mo>
<
<mo></mo>
<mo>&lt;=</mo>
<=
<mo>++</mo>
++
<mo></mo>
<mo>.NOT.</mo>
.NOT.
<mo>and</mo>
and
<mo>&#x2062;<!--InvisibleTimes--></mo>
3.2.5.4 フェンスと区切りの例

以下の例の mo 要素は明示的な stretchysymmetric 属性を必要としません。これらは後述するように演算子辞書から見つけられるためです。これらの例の一部は 3.3.8 括弧対内の式 <mfenced> で記述することもできます。

(a+b)

<mrow>
  <mo> ( </mo>
  <mrow>
    <mi> a </mi>
    <mo> + </mo>
    <mi> b </mi>
  </mrow>
  <mo> ) </mo>
</mrow>
( a + b )

[0,1)

<mrow>
  <mo> [ </mo>
  <mrow>
    <mn> 0 </mn>
    <mo> , </mo>
    <mn> 1 </mn>
  </mrow>
  <mo> ) </mo>
</mrow>
[ 0 , 1 )

f(x,y)

<mrow>
  <mi> f </mi>
  <mo> &#x2061;<!--ApplyFunction--> </mo>
  <mrow>
    <mo> ( </mo>
    <mrow>
      <mi> x </mi>
      <mo> , </mo>
      <mi> y </mi>
    </mrow>
    <mo> ) </mo>
  </mrow>
</mrow>
f ( x , y )
3.2.5.5 不可視演算子

伝統的な数学表記で「不可視」な演算子として扱われるべきものは、単に何も書かないのではなく、特定の文字(またはエンティティ参照)を mo 要素内で用いて表すべきです。これらの「不可視演算子」に用いる文字は次のとおりです:

文字 エンティティ名 短名
U+2061 ApplyFunction af
U+2062 InvisibleTimes it
U+2063 InvisibleComma ic
U+2064
3.2.5.5.1

上の表の例の MathML による表現は次のとおりです:

<mrow>
  <mi> f </mi>
  <mo> &#x2061;<!--ApplyFunction--> </mo>
  <mrow>
    <mo> ( </mo>
    <mi> x </mi>
    <mo> ) </mo>
  </mrow>
</mrow>
f ( x )
<mrow>
  <mi> sin </mi>
  <mo> &#x2061;<!--ApplyFunction--> </mo>
  <mi> x </mi>
</mrow>
sin x
<mrow>
  <mi> x </mi>
  <mo> &#x2062;<!--InvisibleTimes--> </mo>
  <mi> y </mi>
</mrow>
x y
<msub>
  <mi> m </mi>
  <mrow>
    <mn> 1 </mn>
    <mo> &#x2063;<!--InvisibleComma--> </mo>
    <mn> 2 </mn>
  </mrow>
</msub>
m 1 2
<mrow>
  <mn> 2 </mn>
  <mo> &#x2064; </mo>
  <mfrac>
    <mn> 3 </mn>
    <mn> 4 </mn>
  </mfrac>
</mrow>
2 3 4
3.2.5.6 <mo> 要素の詳細なレンダリング規則

mo 要素の典型的な視覚的レンダリング動作は他のトークン要素より複雑であるため、ここにそれらのルールを別途記述します。

これらの規則はすべての MathML におけるレンダリング規則と同様、推奨(suggestions)であって必須ではないことに注意してください。下記の記述は各種レンダリング属性の意図する効果をできる限り明確にするためのものです。ブラウザ実装向けの演算子に関する詳細なレイアウト規則は MathML Core に示されています。

3.2.5.6.1 演算子辞書

積分記号やプラス記号、括弧のような多くの数学記号は確立された予測可能な表記用途を持ちます。典型的にはこの用途は特定の内容と特定の form 属性を持つ mo 要素に対するある種の既定属性値に相当します。これらの既定値は記号ごとに異なるため、MathML は各 mo 要素の内容と form 属性で索引付けされた演算子用の既定属性の「演算子辞書」をレンダラが保持することを想定しています(参照:B. 演算子辞書)。もしある mo 要素が辞書にリストされていなければ、mo の属性表で括弧内に示された既定値を用いるべきです。これらの値は一般的な演算子に対して典型的に適切です。

いくつかの演算子は「オーバーロード」されており、複数の形式(前置・中置・後置)で現れ得て、それぞれの形式で描画特性が異なることがあります。例えば「+」は前置でも中置でもあり得ます。視覚的レンダラは通常中置演算子の両側にスペースを追加し、前置演算子の場合は前側のみにスペースを追加します。演算子辞書と下記の既定値の例外が問題となる場合にどの形式を使うかを指定するために form 属性が用意されています。

3.2.5.6.2 属性 form の既定値

form 属性は通常明示的に指定する必要はありません。なぜならコンテキストから属性値を推論するための効果的なヒューリスティックがあるからです。もし指定されておらず、かつ与えられた内容に対して辞書に複数の形式が存在する場合、レンダラは次のようにどの形式を使うかを選ぶべきです(ただし後で述べる 装飾された演算子 の例外を参照):

  • 演算子が(空白状の引数を無視して)複数引数を持つ mrow の最初の引数である場合は prefix 形式を使用する;

  • 演算子が(空白状の引数を無視して)複数引数を持つ mrow の最後の引数である場合は postfix 形式を使用する;

  • 暗黙または明示の mrow の唯一の要素であり、かつそれが 3.4 スクリプトおよび極限スキーマ に列挙される要素のスクリプト位置にある場合は postfix 形式を使用する;

  • その他のすべての場合(演算子が mrow の一部でない場合を含む)は infix 形式を使用する。

上で述べた mrow推論された ものであり得ることに注意してください;参照 3.1.3.1 推論される <mrow>

開きフェンスは form="prefix"、閉じフェンスは form="postfix" を持つべきで、区切り記号は周囲に依存して通常は中置(infix)ですが常にそうとは限りません。通常、これらの値を明示的に指定する必要はありません。

もし指定された形式で演算子が辞書に存在しない場合、レンダラは優先順で利用可能な形式のいずれかを使用すべきです:infix、postfix、prefix;もし与えられた mo 内容のための形式が一切辞書に無ければ、レンダラは mo の属性表にある括弧内の既定値を用いるべきです。

3.2.5.6.3 装飾された演算子に対する例外

上記の mo の既定 form を選ぶ規則には一つの例外があります。ネストした下付き・上付き、周囲のテキストや空白、またはスタイル変更によって「装飾された」(embellished) mo 要素は異なる振る舞いをします。装飾された演算子全体(後で正確に定義します)の位置が mrow 内で上記の規則により考慮され、その形式によって周囲のスペーシングが影響を受けますが、周囲のスペーシングに影響を与える属性は核心の mo 要素(またはその辞書エントリ)から取られます。

例えば、次の + 4 a + 4 b の中では全体として中置演算子と見なされるべきですが、そのレンダリング属性は核心となる mo(この場合は + ) から取られるべきです。もしそれらが明示的に指定されていなければ、<mo form="infix"> + </mo> に対する演算子辞書エントリから取られます。以下に「装飾された演算子(embellished operator)」の正確な定義を示します:

  • ある mo 要素;

  • またはその第一引数が装飾された演算子である次の要素のいずれか: msub, msup, msubsup, munder, mover, munderover, mmultiscripts, mfrac, または semantics (6.5 <semantics> 要素);

  • または同じ引数を持つ mrow が装飾された演算子となるような mstylemphantom、または mpadded のいずれか;

  • または選択された部分式が装飾された演算子である maction 要素;

  • または引数が(任意の順序で)一つの装飾された演算子とゼロ個以上の空白状要素から成る mrow 要素。

この定義は、上記以外の囲み要素が挟まらない場合にのみ入れ子の装飾を許すことに注意してください。

演算子形式の選択や装飾された演算子の定義に関する上記の規則は、通常の場合において作者が form を明示する必要がないように選ばれています。

3.2.5.6.4 演算子まわりの間隔

mrow 内に現れる演算子(または装飾された演算子)の周囲に追加される水平方向の空白量は、直接 lspace および rspace 属性で指定できます。RTL 方向の場合、これらは先行空間および追随空間として解釈されるべきです。慣例として、引数に密接に結びつく演算子は間隔が小さく、結びつきが弱い演算子は間隔が大きく設定されます。この慣例はレンダラに付属する演算子辞書で守られるべきです。

一部のレンダラは TeX のように上付きや下付きの中に現れる多くの演算子の周囲に空白を使わないことを選ぶ場合があります。

非視覚的レンダラは、ここで述べられる間隔属性や他のレンダリング属性をそれぞれの媒体に対応する方法で扱うべきです。例えばより多くの空白は音声レンダリングではより長い間の区切りに相当するかもしれません。

3.2.5.7 演算子、フェンス、アクセントの伸縮

演算子(装飾されている場合も含む)が他の要素の大きさに合わせて伸縮するかどうか、またその方法を支配する属性が四つあります:stretchysymmetricmaxsize、および minsize。もし演算子に stretchy=true が設定されていれば、その内容の各文字は下記の伸縮規則に従います。ただしフォントやフォントレンダリングの限界により、実際のレンダラが伸縮できる文字は限られ、離散的なサイズしか生成できないことが一般的です。

MathML には特定の文字や演算子をどの方向(水平あるいは垂直)に伸ばすかを指定する仕組みはありません。代わりに stretchy=true の場合、その文字は伸縮が可能で妥当な各方向に伸縮されるべきです。どの方向に伸縮するのが妥当かはレンダラが判断すべきです。多くの記号は典型的には最大で一方向にのみ伸縮可能ですが、一部のレンダラは対角線矢印のような記号を両方向に独立して伸縮できるかもしれません。

minsizemaxsize は伸縮量を制限します。これらの属性は伸縮方向での演算子の通常サイズの乗数として、または単位付きの絶対サイズとして与えられます。例えば文字に maxsize=300% が指定されていれば、その文字は未伸縮のサイズの最大三倍までしか大きくなれません。

symmetric 属性は、文字の上下の高さと深さが軸に対して等しくなるよう強制するかどうかを制御します(高さと深さの最大値にそろえることで実現)。行列の周りの括弧が軸に揃っていない場合(非正方行列の掛け算など)に symmetric=false を設定することが有用な例があります。この場合は括弧を行列を覆うように伸縮させたいが、対称に伸縮させると行列の一方の端がはみ出してしまいます。symmetric は垂直方向に伸縮する文字にのみ適用されます(それ以外は無視されます)。

もし伸縮する mo 要素が装飾されている場合(この節で定義した通り)、核となる mo 要素は装飾全体の文脈に基づいて伸縮されます。つまり、装飾がなかった場合と同じサイズに伸縮されます。例えば次の例(演算子辞書で通常伸縮するよう設定される括弧を含む)は、括弧が互いに同じサイズに伸縮され、下線や上線があっても同じ垂直区間を覆うようにされます:

<mrow>
  <munder>
    <mo> ( </mo>
    <mo> _ </mo>
  </munder>
  <mfrac>
    <mi> a </mi>
    <mi> b </mi>
  </mfrac>
  <mover>
    <mo> ) </mo>
    <mo></mo>
  </mover>
</mrow>
( _ a b )

これは伸縮の規則が装飾全体の文脈に基づくべきであり、単に mo 要素自身だけではないことを意味します。

3.2.5.7.1 伸縮属性の例

次は括弧の最大サイズを設定して、たとえその既定が stretchy=true であっても括弧が成長しないようにする一例です。

<mrow>
  <mo maxsize="100%">(</mo>
  <mfrac>
    <msup><mi>a</mi><mn>2</mn></msup>
    <msup><mi>b</mi><mn>2</mn></msup>
  </mfrac>
  <mo maxsize="100%">)</mo>
</mrow>
( a 2 b 2 )

上はデフォルトのレンダリング(括弧が伸縮する場合)ではなく (\frac{a^2}{b^2}) のように表示されるべきで、デフォルトでは \left(\frac{a^2}{b^2}\right) のようになります。

各括弧は独立にサイズ付けされることに注意してください;もし片方のみが maxsize=100% を持っていれば、それらは異なるサイズで描かれます。

3.2.5.7.2 垂直方向の伸縮規則

伸縮可能な演算子を支配する一般規則は次のとおりです:

  • 伸縮可能な演算子が直接 mrow の部分式であるか、または表のある行の mtd 要素のただ一つの直接部分式である場合、伸縮はその mrow 要素や表行内の非伸縮の直接部分式の高さと深さ(軸を中心に上下)を覆うように行われるべきです。ただし minsizemaxsize によって伸縮が制約される場合はその限りではありません。

  • 装飾された伸縮可能な演算子の場合、前述の規則はその核心にある伸縮可能な演算子に適用されます。

  • 上記の規則は mrow が推論された場合にも適用されます。

  • 対称伸縮の規則は symmetric=true の場合にのみ適用され、かつ伸縮が mrow または mtr(その rowalign 値が baseline または axis の場合)で行われるときに限ります。

垂直に伸縮された文字の高さと深さを決定するアルゴリズムは次のとおりです:

  1. 同じ mrow または mtr 内の非伸縮の兄弟要素の最大の高さと深さをそれぞれ maxheightmaxdepth とします。軸はベースラインから上の数学軸の高さとします。

    注:伸縮可能な演算子に minsizemaxsize が設定されていても、それは mrow の最大高さ・深さの初期計算には使われません。

  2. もし symmetric=true なら、計算された高さと深さは次のとおりです:

    height=max(maxheight-axis, maxdepth+axis) + axis
    depth =max(maxheight-axis, maxdepth+axis) - axis

    そうでなければ高さと深さは次のようになります:

    height= maxheight
    depth = maxdepth
  3. 合計サイズ = height+depth が minsize より小さいか maxsize より大きい場合、実効サイズが制約を満たすように高さと深さの両方を比例的に増減します。

既定では、多くの垂直方向の矢印や多数の開閉フェンスは演算子辞書によりデフォルトで伸縮するよう定義されています。

表セル内の伸縮可能な演算子(つまり mtd 内)については、上の規則は演算子を含む表行の各セルがちょうど一行を覆うものと仮定しています(同等に表のすべてのセルの rowspan が 1 と仮定)。もしそうでない場合、演算子はその演算子のセルが覆う表行の集合に完全に含まれるセルのみを縦方向に覆うように伸縮されるべきであり、演算子のセルが覆っていない行まで伸びるセルは無視されます。3.5.3.2 属性 を参照して rowspan 属性の詳細を確認してください。

3.2.5.7.3 水平方向の伸縮規則
  • 伸縮可能な演算子、または装飾された伸縮演算子が直接 mundermover、または munderover の部分式である場合、あるいは表のある列の mtd 要素の唯一の直接部分式である場合、その(またはその核心の mo)は与えられた要素(または同じ表列)内の他の直接部分式の幅を覆うように伸縮されるべきです(上記の制約のもとで)。

  • 装飾された伸縮演算子の場合、前述の規則はその核心にある伸縮演算子に適用されます。

既定では、多くの水平矢印およびいくつかのアクセントは水平方向に伸縮します。

表セル内の伸縮可能な演算子については、上の規則は演算子を含む表列の各セルがちょうど一列を覆うものと仮定します(同等に表のすべてのセルの columnspan が 1 と仮定)。もしそうでない場合、演算子は演算子のセルが覆う表列集合に完全に含まれるセルのみを水平方向に覆うように伸縮されるべきであり、演算子のセルが覆っていない列まで伸びるセルは無視されます。3.5.3.2 属性 を参照してください。

水平方向の伸縮規則は mtd 要素を含むことで、行列を使った可換図式などで矢印を伸縮させることを可能にします。水平伸縮の規則はスクリプトも含むため、次のような例が機能します:

<mrow>
  <mi> x </mi>
  <munder>
    <mo></mo>
    <mtext> maps to </mtext>
  </munder>
  <mi> y </mi>
</mrow>
x maps to y
3.2.5.7.4 垂直および水平方向の伸縮に共通する規則

伸縮可能な演算子が伸縮する必要がない場合(上で述べた位置にない、または一致させるべき他の式が存在しない場合)は、フォントと現在の mathsize によって決まる標準の(未伸縮の)サイズを持ちます。

伸縮が要求されるが包含要素内の他のすべての式も伸縮可能である場合、伸縮可能なすべての要素は含むオブジェクト内のすべての要素の未伸縮の通常サイズの最大値まで成長すべきです(それが可能であれば)。もし minsize または maxsize がこれを妨げる場合は指定された(最小または最大)サイズが使われます。

例えば、垂直に伸縮可能な演算子だけを含む mrow がある場合、それらの各演算子は他のすべての未伸縮の通常サイズの最大値まで伸縮するべきです(別の属性がこの挙動を上書きしていない限り)。もちろんフォントやレンダリングの制約により、最終的な伸縮サイズは近似的にしか一致しないことがあります。

3.2.6 テキスト <mtext>

3.2.6.1 説明

mtext 要素は、そのまま表示される任意のテキストを表現するために使われます。一般に、mtext 要素は注釈テキストを示すことを意図しています。

記法上の役割が明確なテキストについては、mi または mo を使ってマークアップする方が適切な場合があります。

mtext 要素は 表示可能な空白、すなわち周囲の要素の位置決めを変更するための不可視文字も含むことができます。非グラフィカルな媒体では、こうした文字はポジティブやネガティブな時間遅延や、音声レンダラでリズムに影響を与えるなど、類似の効果を持つと考えられます。ただし 2.1.7 入力時の空白折り畳み も参照してください。

3.2.6.2 属性

mtext 要素は 3.2.2 トークン要素に共通する数学スタイル属性で挙げられた属性を受け取ることができます。

空白様要素 の合法的なグルーピングに関する警告は 3.2.7 空白 <mspace/> を、またこの種の要素を「細工」に使う場合の警告は [MathML-Notes] を参照してください。

3.2.6.3
<mrow>
  <mtext> Theorem 1: </mtext>
  <mtext> &#x2009;<!--ThinSpace--> </mtext>
  <mtext> &#x205F;<!--ThickSpace-->&#x205F;<!--ThickSpace--> </mtext>
  <mtext> /* a comment */ </mtext>
</mrow>
Theorem 1:    /* a comment */

3.2.7 空白 <mspace/>

3.2.7.1 説明

mspace 空要素は、属性で設定された任意の大きさの空白を表します。またビジュアルレンダラへの改行提案に用いることもできます。属性の既定値は通常レンダリングに影響を与えないよう選ばれていることに注意してください。したがって mspace 要素は、たいていの場合何らかの属性値を明示的に指定して使います。

この後述べる 空白様要素 の合法的なグルーピングに関する警告や、[MathML-Notes] 内で述べられている「細工」用の要素利用に関する警告にも注意してください。また、空白としてレンダリングされうる他の要素として mtext, mphantom, maligngroup があります。

3.2.7.2 属性

下記の属性に加え、 mspace 要素は 3.2.2 トークン要素に共通する数学スタイル属性で説明されている属性も受け取りますが、mathvariant および mathcolor は効果がなく、mathsize はサイズ系属性の単位解釈のみに影響します(2.1.5.2 長さ値属性 参照)。 mspace はまた 3.2.5.2.3 インデント属性で説明されているインデント関連属性も受け取ります。

名前 既定
width length 0em
空白の希望幅を指定します。
height length 0ex
空白の希望高さ(ベースライン上)を指定します。
depth length 0ex
空白の希望深さ(ベースライン下)を指定します。

改行を mspace で指定することは MathML2 では規定されていましたが、MathML 3 以降 mo で改行やインデントをよりきめ細かく制御できるようになりました。MathML 4 では mspace での改行指定は非推奨です。

3.2.7.3
<mspace height="3ex" depth="2ex"/>
3.2.7.4 空白様要素の定義

多くの MathML 表示要素は「空白様」(space-like)であり、通常は空白としてレンダリングされ、それが現れる数式表現の意味には影響を与えません。そのため、こうした要素はいくつかの他の MathML 式の中で特別な振る舞いをすることがあります。たとえば空白様要素は 3.2.5 演算子・フェンス・区切り・アクセント <mo> で示されている推奨レンダリング規則の中で特別扱いされます。 次の MathML 要素は「空白様」と定義されます:

  • 空か、すべての文字が Unicode の空白文字である mtext 要素;

  • mspacemaligngroupmalignmark のいずれかの要素;

  • すべての直下の部分式が空白様である mstylemphantommpadded 要素;

  • 第一引数が存在しかつそれが空白様である semantics 要素;

  • 選択された部分式が空白様である maction 要素;

  • 直下の部分式がすべて空白様である mrow 要素。

内容が空白様でない限り mphantom は自動的に空白様とは定義されないことに注意してください。これは演算子間のスペーシングが隣接要素が空白様かどうかによって影響を受けるからです。mphantom 要素は主に位置合わせ補助のために使われるため、mphantom の隣の演算子は空白領域ではなく mphantom の中身と隣り合っているかのように振る舞うべきです。

3.2.8 文字列リテラル <ms>

3.2.8.1 説明

ms 要素は、コンピュータ代数システムや他の プログラミング言語 を含むシステムで解釈されるべき式中の 文字列リテラル を表現するために使われます。デフォルトでは、文字列リテラルは二重引用符で囲んで表示され、その前後に余計な空白は加えられません。3.2.6 テキスト <mtext> で述べられている通り、通常のテキストを数式中に埋め込む場合は mtext 、場合によっては mo または mi でマークアップすべきであり、ms は使うべきではありません。

ms でエンコードされた文字列リテラルは 文字、mglyph、および malignmark から構成される点に注意してください。つまり ASCII 文字列 ではありません。たとえば <ms>&amp;</ms> は1文字(&)からなる文字列リテラルを表し、<ms>&amp;amp;</ms> は先頭1文字が & である5文字の文字列リテラルを表します。

ms 要素の内容は、少なくとも左右の引用符、およびできればスペース以外の空白も「エスケープ」表示されるべきです。これは読者がその式が文字列リテラルであること、また正確にどの文字が内容なのかが分かるようにするためです。たとえば <ms>double quote is "</ms> は「double quote is \""」のように表示されるかもしれません。

他のトークン要素と同様、ms も内容中の空白を 2.1.7 入力時の空白折畳み のルールに従ってトリム・折畳みします。内容に空白を残したい場合は当該節で述べた方法でエンコードしてください。

3.2.8.2 属性

ms 要素は 3.2.2 トークン要素に共通する数学スタイル属性で挙げられた属性に加えて、以下の属性も受け取ります。

名前 既定
lquote string U+0022 (entity quot)
内容を囲む開き引用符を指定します(RTL文脈では必ずしも「左引用符」ではありません)。
rquote string U+0022 (entity quot)
内容を囲む閉じ引用符を指定します(RTL文脈では必ずしも「右引用符」ではありません)。

3.3 一般的なレイアウトスキーマ

トークンのほかに、いくつかの系統の MathML 表示要素があります。ある系統の要素は下付き・上付きなどの各種の「スクリプト」表記を扱い、別の系統は行列や表を扱います。本節で扱う残りの要素は、分数や根号のような基本的な表記法を記述したり、スタイル属性の設定やエラー処理のような一般的な機能を扱ったりします。

3.3.1 部分式を水平方向にグループ化する <mrow>, <a>

3.3.1.1 説明

mrow または a 要素は、任意の数の部分式をまとめるために使われます。通常、これらは一つ以上の mo 要素が一つ以上の他の式に対して「演算子」として働き、その「オペランド」を持つような形になります。

いくつかの要素はその引数を自動的に mrow に含まれているかのように扱います。推論された mrow の議論は 3.1.3 必須引数 を参照してください。また、引数をコンマで区切って含む mrow を実質的に形成できる mfenced3.3.8 括弧対内の式 <mfenced>)も参照してください。

mrow 要素は通常、その引数を水平方向の一連として視覚的に表示します。LTR(左から右)の文脈では引数は出現順に左から右へ、RTL(右から左)の文脈では右から左へ配置されます。個別の mrow に対しては dir 属性で方向性を指定でき、指定がない場合は文脈から継承します。音声出力では引数は引数ごとのレンダリングの列として順に読み上げられます。3.2.5 演算子・フェンス・区切り・アクセント <mo> にある mo 要素の推奨レンダリング規則の説明は、演算子とそのオペランドの間の水平方向の間隔は mrow 自体ではなく(より一般的には装飾された演算子である)mo 要素のレンダリングによって付加される、という前提に基づいています。

MathML は式の自動および手動の改行(過度に長い式を複数行に分けること)をサポートします。すべての改行は、文書内で明示的に示されている場合でも推論される場合でも、mrow 内で行われます(参照:3.1.3.1 推論される <mrow>s)。ただし改行の制御は他の要素の属性を通して行われます(参照:3.1.7 式の改行)。

MathML 4 では mrowa は同一の振る舞いを持ちますが、互換性のために a が追加されています。MathML Core は a 要素に対して href 属性のみをサポートします。

3.3.1.2 属性

mrow 要素は、3.1.9 表示要素に共通の属性 に列挙された属性に加えて、以下の属性を受け取ります。

Name values default
dir "ltr" | "rtl" 継承
行の子要素をレイアウトするために使用する全体の方向性 ltr(左から右)または rtl(右から左)を指定します。詳細は 3.1.5.1 数式の全体的な方向性 を参照してください。
比較は ASCII 大文字小文字を区別しない 方式で行われます。 すべての一致する文字列が値として許可されます。
3.3.1.3 部分式を <mrow> で適切にグループ化する

部分式は、その数学的解釈におけるグルーピング、すなわち式の基になる「構文木」に従って、文書作成者がグループ化すべきです。具体的には、演算子とその数学的引数は単一の mrow に現れるべきです。複数の演算子が一つの mrow に直接現れて良いのは、それらが(構文上)中間の引数に対して一緒に作用すると見なせる場合のみです。例えば、一つの括弧つき項とその括弧、関係演算子の連鎖、あるいは +- で区切られた項の列などが該当します。以下に厳密な規則を示します。

適切なグループ化にはいくつかの目的があります:表示を改善し(間隔に影響を与える可能性がある)、より賢明な改行やインデントを可能にし、コンピュータ代数システムや音声レンダラによる表示要素の意味的解釈を単純化します。

不適切なグループ化はしばしば表示を最適でなくし、視覚以外の解釈を困難または不可能にすることが多いですが、MathML 構文では任意の mrow によるグループ化が許容されます。つまり、レンダラは適切なグループ化の規則が必ず守られていると仮定すべきではありません。

3.3.1.3.1 <mrow> が一つの引数のみの場合

MathML レンダラは、ちょうど一つの引数を持つ mrow 要素を、その単一の引数が単独で出現する場合とすべての点で等価に扱うことが要求されます。ただし mrow 要素に属性がある場合は等価性の要求は課されません。この等価性条件は、装飾された演算子や空白様要素の定義、そして mo 要素の form 属性の既定値を決定する規則に直接影響します(参照:3.2.5 演算子・フェンス・区切り・アクセント および 3.2.7 空白 <mspace/>)。また MathML 式の同値性に関する議論は D.1 MathML 準拠 を参照してください。

3.3.1.3.2 適切なグループ化のための厳密な規則

式の表示(例えば TeX など他の形式から自動変換して MathML を生成する場合)において、部分式をどのように mrow で入れ子にするかの厳密な規則が望まれることがあります。特に、元の形式が部分式の入れ子方法を必ずしも明示しない場合に有用です。グループ化のための厳密な規則を使うときは、次の規則を使用してください:

二つの隣接する演算子(装飾されていることがある)、間にオペランド(演算子以外のもの)が挟まれている場合でも、前の演算子が infix または prefix 形式(推論されることもある)を持ち、次の演算子が infix または postfix 形式を持ち、かつ演算子辞書において同じ優先度を持つ場合に限り、それらは同じ mrow に出現すべきです(参照:B. 演算子辞書)。その他の場合は、入れ子になった mrow を用いるべきです。

生成時に二つの連続する演算子のうちの一方のみを含む入れ子 mrow を作る場合(これは原則としてどちらの演算子も中間のオペランドに作用し得ることを意味します)、どちらの演算子がそれらのオペランドに直接作用するかを決める必要があります。理想的にはこれは元の式から決定されるべきであり、例えば演算子優先度に基づく形式からの変換であれば、優先度の高い演算子が選ばれます。

上記の規則は MathML 式の妥当性に影響を与えるものではなく、他の表示数式形式から MathML を生成する際や手書きの表記から直接 MathML を生成する際の推奨方式に関するものです。

(上の規則で用いられる一部の用語は 3.2.5 演算子・フェンス・区切り・アクセント で定義されています。)

3.3.1.4

例えば、2x+y-z は次のように書くべきです:

<mrow>
  <mrow>
    <mn> 2 </mn>
    <mo> &#x2062;<!--InvisibleTimes--> </mo>
    <mi> x </mi>
  </mrow>
  <mo> + </mo>
  <mi> y </mi>
  <mo> - </mo>
  <mi> z </mi>
</mrow>
2 x + y - z

括弧で囲まれた (x, y) の正しいエンコーディングは、入れ子になった mrow のより明示的な例です:

<mrow>
  <mo> ( </mo>
  <mrow>
    <mi> x </mi>
    <mo> , </mo>
    <mi> y </mi>
  </mrow>
  <mo> ) </mo>
</mrow>
( x , y )

この場合、括弧とコンマはフェンスや区切りとしての「演算子」と見なされ、引数に一緒に作用しないため、括弧内に入れ子の mrow が必要です。

MathML Core と互換性のあるハイパーリンクは、<a> 要素を <mrow> の代わりに使用して指定できます:

<a href="https://openmath.org/cd/transc1.html#arccsch">
  <mi>arccsch</mi>
  <mrow>
    <mo>(</mo>
    <mi>z</mi>
    <mo>)</mo>
  </mrow>
</a>
arccsch ( z )

3.3.2 分数 <mfrac>

3.3.2.1 説明

mfrac 要素は分数に用いられます。二項係数やルジャンドル記号など、分数様のオブジェクトのマークアップにも用いることができます。mfrac の構文は次のとおりです

<mfrac> numerator denominator </mfrac>

mfrac 要素は、分子および分母の内部で displaystylefalse に設定するか、すでに false であれば scriptlevel を 1 増やします(3.1.6 displaystyle と scriptlevel を参照)。

3.3.2.2 属性

mfrac 要素は、3.1.9 表示要素に共通の属性 に列挙された属性に加えて以下の属性を受け取ります。分数線がある場合、その線は mathcolor で指定された色で描かれるべきです。

Name values default
linethickness length | "thin" | "medium" | "thick" medium
横方向の「分数バー」または「ルール」の太さを指定します。既定値は medium です;thin はより細く(ただし可視)、thick はより太くなります。これらの正確な太さはレンダラに任されます。OpenType Math フォントが利用可能であれば、レンダラは mediumMATH.MathConstants.fractionRuleThickness に設定するべきです(MathML-Core の既定)。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
注:MathML Core は <length-percentage> 値のみを許可します。
numalign "left" | "center" | "right" center
分子の配置を指定します。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
denomalign "left" | "center" | "right" center
分母の配置を指定します。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
bevelled boolean false
分数がビーヴェル(斜めのスラッシュで分子をやや上げ、分母をやや下げて区切る)形式で表示されるかどうかを指定します。垂直に「組み上げる」表示ではなく斜め形式にするかどうかを指定します。例は下にあります。

入れ子の分数にはより太い線(例:linethickness="thick")が用いられることがあります;値が "0" の場合はバーなしでレンダリングされ、二項係数などに使えます。

RTL(右から左)方向の文脈では、分子が先行(右側)、分母が従う(左側)位置になり、斜め線は右から左に向かって上向きに傾きます(詳細は 3.1.5.1 数式の全体的な方向性 を参照)。この形式は確立された慣例ではありますが普遍的ではないため、RTL 文脈で順方向のスラッシュが望ましい場合は、mrow 内に mo を用いるなどの代替マークアップを使うべきです。

3.3.2.3

ここに異なる linethickness 値を使った例があります:

<mfrac linethickness="3px">
  <mrow>
    <mo> ( </mo>
      <mfrac linethickness="0">
        <mi> a </mi>
        <mi> b </mi>
      </mfrac>
    <mo> ) </mo>
    <mfrac>
      <mi> a </mi>
      <mi> b </mi>
    </mfrac>
  </mrow>
  <mfrac>
    <mi> c </mi>
    <mi> d </mi>
  </mfrac>
</mfrac>
( a b ) a b c d

次はビーヴェル分数の例です:

<mfrac>
  <mn> 1 </mn>
  <mrow>
    <msup>
      <mi> x </mi>
      <mn> 3 </mn>
    </msup>
    <mo> + </mo>
    <mfrac>
      <mi> x </mi>
      <mn> 3 </mn>
    </mfrac>
  </mrow>
</mfrac>
<mo> = </mo>
<mfrac bevelled="true">
  <mn> 1 </mn>
  <mrow>
    <msup>
      <mi> x </mi>
      <mn> 3 </mn>
    </msup>
    <mo> + </mo>
    <mfrac>
      <mi> x </mi>
      <mn> 3 </mn>
    </mfrac>
  </mrow>
</mfrac>
\frac{{1}}{{x^3 + \frac{{x}}{{3}}}} = \raisebox{{1ex}}{{$1$}}\!\left/ \!\raisebox{{-1ex}}{{$x^3+\frac{{x}}{{3}}$}} \right.

より一般的な例:

<mfrac>
  <mrow>
    <mn> 1 </mn>
    <mo> + </mo>
    <msqrt>
      <mn> 5 </mn>
    </msqrt>
  </mrow>
  <mn> 2 </mn>
</mfrac>
1 + 5 2

3.3.3 根号 <msqrt>, <mroot>

3.3.3.1 説明

これらの要素は根号を構成します。msqrt は平方根に用いられ、mroot は指数を持つ根号(例えば立方根)を描くために用いられます。これらの要素の構文は次のとおりです:

<msqrt> base </msqrt>
<mroot> base index </mroot>

mroot はちょうど2つの引数を必要とします。しかし msqrt は単一の引数を受け取り、その引数は複数の子を持つ推論された mrow であり得ます(参照:3.1.3 必須引数)。mroot 要素は index 内で scriptlevel を 2 増やし、displaystylefalse に設定しますが、base 内ではこれらの属性を変更しません。msqrt 要素はその引数内で両方の属性を変更しません(参照:3.1.6 displaystyle と scriptlevel)。

RTL(右から左)の文脈では、ルート記号の始まりは左ではなく右に来ます。mroot の場合は指数も同様に右側に配置されます。

3.3.3.2 属性

msqrt および mroot 要素は、3.1.9 表示要素に共通の属性 に列挙された属性を受け取ります。サージ(ルートの覆い)や上線は mathcolor で指定された色で描かれるべきです。

3.3.3.3

平方根と立方根の例

<mrow>
  <mrow>
    <msqrt>
      <mi>x</mi>
    </msqrt>
    <mroot>
      <mi>x</mi>
      <mn>3</mn>
    </mroot>
  <mrow>
  <mo>=</mo>
  <msup>
    <mi>x</mi>
    <mrow>
      <mrow>
        <mn>1</mn>
        <mo>/</mo>
        <mn>2</mn>
      </mrow>
      <mo>+</mo>
      <mrow>
        <mn>1</mn>
        <mo>/</mo>
        <mn>3</mn>
      </mrow>
    </mrow>
  </msup>
</mrow>
x x 3 = x 1 / 2 + 1 / 3

3.3.4 スタイルの変更 <mstyle>

3.3.4.1 説明

mstyle 要素は、その内容のレンダリングに影響を与えるスタイルの変更を行うために使われます。表示要素として、3.1.9 表示要素に共通の属性 に記載された属性を受け取ります。さらに、下で述べる属性を除き、他の任意の表示要素が受け取る属性を与えることができます。

mstyle 要素は単一の引数を受け取ります。その引数は複数の子を持つ推論された mrow であり得ます(参照:3.1.3 必須引数)。

大まかに言うと、mstyle 要素の効果は、その中に含まれる要素に対する属性の既定値を変更することです。スタイルの変更は、属性の既定値がどのように指定されているかによっていくつかの方法で働きます。以下のケースがあります:

  • 一部の属性(例:displaystylescriptlevel)は、明示的に設定されていない場合に周囲の文脈から継承されます。mstyle にそのような属性を指定すると、子要素が継承する値が設定されます。子要素がこの継承値を上書きしない限り、その子はさらにその子孫に値を継承していきます。もし子要素が明示的に上書きするか、自動的に上書きする(scriptlevel のように)場合は、上書きされた新しい値がその要素の子孫に継承されます。

  • 他の属性(例:linethickness のように通常継承されない既定値を持つ属性)では、mstyle 要素で値を指定すると、そのスコープ内のすべての要素の既定値が変更される効果があります。つまり、その属性が個別の要素で明示的に上書きされない限り、mstyle による設定がその子孫に伝播します。こうした属性の設定は MathML-Core ではサポートされていないことに注意してください。

  • 別の属性グループ(例:stretchyform)は演算子辞書情報や包む mrow 内での位置などから計算されます。これらについては、包む mstyle によって指定された値が通常計算される値を上書きします。これらも MathML-Core ではサポートされていないことに注意してください。

mstyle によりいかなる方法で継承された属性値も、その属性が子孫要素によって明示的に与えられている場合にのみその子孫要素に影響します。ある要素上で属性が明示的に設定されている場合、その値が継承値に優先します。例外は、属性値がその要素の文脈やレンダリング環境から継承した値に対する増分変更として文書化されている場合のみです。

また、上で説明した mstyle による継承属性と非継承属性の違いは、mstyle の内容の中でその属性を設定する別の要素が子孫も同時に設定している場合にのみ問題になります。従って、トークン要素にのみ設定できるような属性(例:mathsize)については通常この差異は問題になりません。

mstyleheightdepth、または width を指定した場合、それらは mspace 要素にのみ適用され、対応する mglyphmpaddedmtable の属性には適用されないことが規定されています。同様に、rowaligncolumnalignmstyle に指定された場合、それらは mtable 要素にのみ適用され、mtrmtd、および maligngroup には適用されません。lspacemstyle で設定されると、それは mo 要素にのみ適用され、mpadded には適用されません。一貫性のために、mpaddedvoffsetmstyle 上で設定できません。alignmstyle で設定すると、それは mundermovermunderover にのみ適用され、mtablemstack には適用されません。mglyphsrcalt、および mactionactiontypemstyle 上で設定できません。

表示要素として mstyle は直接 mathcolormathbackground を受け取ります。したがって、mathbackgroundmstyle 要素自身のバウンディングボックスを塗りつぶす色を指定します;既定の背景色を指定するものではありません。

3.3.4.2

連分数では、入れ子になった分数が縮小されてはいけません。代わりに、それらは同じサイズのままであるべきです。これは各 mfrac の子に対して mstyle を使い、displaystylescriptlevel をリセットすることで実現できます。以下のように示します:

<mrow>
  <mi>π</mi>
  <mo>=</mo>
  <mfrac>
    <mstyle displaystyle="true" scriptlevel="0"> <mn>4</mn> </mstyle>
    <mstyle displaystyle="true" scriptlevel="0">
      <mn>1</mn>
      <mo>+</mo>
      <mfrac>
        <mstyle displaystyle="true" scriptlevel="0">
          <msup> <mn>1</mn> <mn>2</mn> </msup>
        </mstyle>
        <mstyle displaystyle="true" scriptlevel="0">
          <mn>2</mn>
          <mo>+</mo>
          <mfrac>
            <mstyle displaystyle="true" scriptlevel="0">
              <msup> <mn>3</mn> <mn>2</mn> </msup>
            </mstyle>
            <mstyle displaystyle="true" scriptlevel="0">
              <mn>2</mn>
              <mo>+</mo>
              <mfrac>
                <mstyle displaystyle="true" scriptlevel="0">
                  <msup> <mn>5</mn> <mn>2</mn> </msup>
                </mstyle>
                <mstyle displaystyle="true" scriptlevel="0">
                  <mn>2</mn>
                  <mo>+</mo>
                  <mo></mo>
                </mstyle>
              </mfrac>
            </mstyle>
          </mfrac>
        </mstyle>
      </mfrac>
    </mstyle>
  </mfrac>
</mrow>
π = 4 1 + 1 2 2 + 3 2 2 + 5 2 2 + 7 2 2 +

3.3.5 エラーメッセージ <merror>

3.3.5.1 説明

merror 要素はその内容を「エラーメッセージ」として表示します。例えば内容を赤く表示したり点滅させたり背景色を変えたりして表示することが考えられます。内容は任意の式または式列にできます。

merror は単一の引数を受け取ります。その引数は複数の子を持つ推論された mrow であり得ます(参照:3.1.3 必須引数)。

この要素の目的は、他の入力から MathML を「生成する」プログラムが、その入力の構文エラーを報告する標準的な方法を提供することです。手作業で入力しやすい構文を解析して MathML を生成するプリプロセッサが開発されることが想定されているため、入力のある位置で構文エラーが発生したことを示す能力が重要です。詳しくは D.2 エラーの処理 を参照してください。

merror を構文エラー報告に使う推奨方法としては、プリプロセッサが入力の誤った部分を merror 要素で置き換え、その中にエラーの説明を含め、周囲の式は可能な限り通常通り処理する、というやり方があります。こうすることで、エラーメッセージは誤った入力が正しかった場合に表示されるであろう位置に表示され、作者がレンダリングされた出力からどの部分が誤っているかを判別しやすくなります。

ここでは特定のエラーメッセージ形式は示しませんが、どのプログラムのエラーメッセージでもそうであるように、レンダリングされたエラーメッセージを見た人間にとって、何が間違っているのか、どう直せばよいかができるだけ明確になるような形式にすべきです。もし誤った入力に正しくフォーマットされた部分式が含まれているなら、それらを通常通りプリプロセスしてエラーメッセージ内に含める(merror の内容として)ことが有用な場合があります。merror はテキストだけでなく任意の MathML 表現を含められるためです。

3.3.5.2 属性

merror 要素は、3.1.9 表示要素に共通の属性 に列挙された属性を受け取ります。

3.3.5.3

もし MathML 構文チェック用のプリプロセッサが次のような入力を受け取ったとします

<mfraction>
  <mrow> <mn> 1 </mn> <mo> + </mo> <msqrt> <mn> 5 </mn> </msqrt> </mrow>
  <mn> 2 </mn>
</mfraction>

この中には非 MathML 要素 mfraction (おそらく MathML 要素 mfrac の代わりに)が含まれています。プリプロセッサは次のようなエラーメッセージを生成するかもしれません:

<merror>
  <mtext> Unrecognized element: mfraction; arguments were:&#xa0;</mtext>
  <mrow> <mn> 1 </mn> <mo> + </mo> <msqrt> <mn> 5 </mn> </msqrt> </mrow>
  <mtext>&#xa0;and&#xa0;</mtext>
  <mn> 2 </mn>
</merror>
Unrecognized element: mfraction; arguments were:  1 + 5  and  2

この場合、プリプロセッサの入力自体は有効な MathML ではありませんが、出力されたエラーメッセージは有効な MathML になっていることに注意してください。

3.3.6 内容まわりの余白調整 <mpadded>

3.3.6.1 説明

mpadded 要素は子コンテンツと同じようにレンダリングされますが、子のバウンディングボックスの大きさおよびその内容の相対的な位置決め点を mpadded の属性に従って変更します。内容を縮小や拡大で再スケールする(stretch/shrink)ことはしません。要素名は通常 mpadded がコンテンツまわりにパディング(余白)を追加するために使われることを反映しています。しかし mpadded はサイズや位置のより一般的な調整にも用いられ、負のパディングのような組合せは mpadded の内容が隣接コンテンツと重なって表示される原因になることがあります。こうした効果に関するいくつかの落とし穴については [MathML-Notes] を参照してください。

mpadded 要素は単一の引数を受け取ります。その引数は複数の子を持つ推論された mrow であり得ます(参照:3.1.3 必須引数)。

水平空間を表す属性(width および lspace)に基づいて、音声レンダラは時間遅延を追加したり短縮したりすることが推奨されます。

3.3.6.2 属性

mpadded 要素は、3.1.9 表示要素に共通の属性 に列挙された属性に加えて以下の属性を受け取ります。

Name values default
height length 内容と同じ
mpadded 要素の高さを設定または増分指定します。詳細は下記。
depth length 内容と同じ
mpadded 要素の深さを設定または増分指定します。詳細は下記。
width length 内容と同じ
mpadded 要素の幅を設定または増分指定します。詳細は下記。
lspace length 0em
子コンテンツの水平位置を設定します。詳細は下記。
voffset length 0em
子コンテンツの垂直位置を設定します。詳細は下記。
注意: MathML 3 の mpadded の長さ

MathML-Core は上記の属性をサポートしますが、その値として有効な <length-percentage> のみを許可します。MathML 4 は length で記述されるように、さらに namedspace を許可するように構文を拡張しています。

MathML 3 は追加の拡張も許していました:

  • 先頭の "+" または "-" は既定値からの相対的な増分や減分を表していました。これは現在はサポートされませんが、同等の機能は標準の CSS <length-percentage> 構文で利用できます:例 height="calc(100%+10pt)"
  • MathML 3 は疑似単位 height, depth, width を定めていました。MathML 4 ではこれらはサポートされませんが、主要な使用例はパーセンテージ値でカバーされています。例えば height="0.5height"height="50% と同等です。

これらの属性は、子コンテンツの通常レンダリングのバウンディングボックスの大きさに対して、mpadded 要素のバウンディングボックスの大きさをどのように相対的に設定するか、そして子コンテンツの位置をどのように相対的に変更するかを指定します。属性値の形式に応じて、次元は新しい値に設定されるか、子コンテンツの対応する次元に対して相対的に指定されます。値は擬似単位(pseudo-unit)を使って子コンテンツの通常レンダリングの任意の次元の倍数やパーセンテージとして与えることができ、また標準単位を使って直接設定することもできます(参照:2.1.5.2 長さ値属性)。

対応する次元は次のように長さ値に設定されます。これらの属性に対して純粋に負になるような長さを指定することは、属性をゼロに設定するのと同じ効果を持ちます。言い換えれば、mpadded 要素の実効的なバウンディングボックスは常に非負の次元を持ちます。ただし、相対位置指定属性である lspace および voffset には負の値が許されます。

3.3.6.3 サイズおよび位置属性の意味

mpadded 要素の内容は、文字や分数や式などの、自然な位置決め点を持つ一つの組版要素として見なせる数学表記の断片を定義します。

mpadded 要素のバウンディングボックスの大きさは、子のバウンディングボックスの大きさに、mpaddedheightdepthwidth 属性による修正を加えたものとして定義されます。子コンテンツの自然な位置決め点は、mpadded の自然な位置決め点と一致しますが、lspacevoffset によって修正され得ます。つまり、mpadded のサイズ属性はその内容の見かけ上のバウンディングボックスを拡張または縮小するために用いられ、位置属性は子コンテンツをバウンディングボックスに対して移動させる(したがって隣接要素にも影響する)ために使われます。MathML は「インク(描画)」、バウンディングボックス、位置決め点の正確な関係は実装依存であるため定義していません。したがって mpadded 属性の絶対値は実装間で移植可能でない可能性があります。

height 属性は mpadded 要素のベースライン上方の垂直的な範囲を指定します。height を増やすとベースラインと上方のコンテンツの間の空間が増え、子コンテンツの上側にパディングが入ります。height を減らすとベースラインと上方のコンテンツの間の空間が減り、上側のスペースが取り除かれます。高さを減らすと上方のコンテンツが子コンテンツの描画と重なる可能性があるため、一般には避けるべきです。

depth 属性は mpadded 要素のベースライン下方の垂直的な範囲を指定します。depth を増やすとベースラインと下方のコンテンツの間の空間が増え、子コンテンツの下側にパディングが入ります。depth を減らすとベースラインと下方のコンテンツの間の空間が減り、子コンテンツの下側のスペースが取り除かれます。深さを減らすと下方のコンテンツが子コンテンツと重なる可能性があるため、一般には避けるべきです。

width 属性は、mpadded 要素の位置決め点と、後続のコンテンツの位置決め点との間の水平距離を指定します。width を増やすと、要素の位置決め点と後続コンテンツの間の空間が増え、子コンテンツの後にパディングが入ります。width を減らすとその空間が減り、後続コンテンツとの間隔が狭くなります。width をゼロにすると、後続のコンテンツは mpadded の位置決め点に配置されます。幅を減らすことは通常避けるべきで、後続コンテンツの重なりを引き起こす可能性があります。

lspace(先行空間)は(3.1.5.1 数式の全体的な方向性 参照)子コンテンツの位置決め点を mpadded の位置決め点に対して水平にどこに置くかを指定します。デフォルトでは一致しているため、絶対値としての lspace は相対値と同じ効果を持ちます。正の値は前のコンテンツと子コンテンツの間の空間を増やし、子コンテンツの前にパディングを導入します。負の値は前のコンテンツと子コンテンツの間の空間を減らし、前のコンテンツと重なる可能性があるため一般に避けるべきです。lspacewidth に影響しないため、子コンテンツと後続コンテンツの間隔にも影響し、width を適切に調整しないと後続コンテンツと重なることがあります。

voffset 属性は子コンテンツの位置決め点を mpadded の位置決め点に対して垂直方向にどこに置くかを指定します。正の値は子コンテンツの描画をベースラインより上に移動させ、負の値は下に移動させます。いずれの場合も隣接コンテンツとの重なりを引き起こす可能性があり、一般には避けるべきです。voffsetheightdepth に影響しないため、隣接コンテンツとの空間に影響を与え、必要ならばそれらを調整する必要があります。

レンダラは、属性の効果を除けば、同じ内容を持つ mpadded を同じ内容を持つ mrow に置き換えても、周囲の MathML 要素との相対的な間隔が変更されないようにすべきです。これは mpadded 内で改行が発生した場合でも成り立つべきです。MathML は mpadded の非既定属性値が改行アルゴリズムにどのように影響するかを定義していません。

3.3.6.4

サイズおよび位置属性の効果を以下に示します。次の図は子コンテンツの位置を変更するために lspacevoffset を用いる例を示しています。バウンディングボックス自体は変更しません。

illustration of the use of mpadded to shift the position of child content without modifying the bounding box

対応する MathML は次のとおりです:

<mrow>
  <mi>x</mi>
  <mpadded lspace="0.2em" voffset="0.3ex">
    <mi>y</mi>
  </mpadded>
  <mi>z</mi>
</mrow>
x y z

次の図は widthheight、および depth を用いて子コンテンツの相対位置を変更せずに mpadded のバウンディングボックスを変更する例です。

illustration of the use of mpadded to modifying its bounding box without shifting the relative location of its child content

対応する MathML は次のとおりです:

<mrow>
  <mi>x</mi>
  <mpadded width="190%" height="calc(100% +0.3ex)" depth="calc(100% +0.3ex)">
    <mi>y</mi>
  </mpadded>
  <mi>z</mi>
</mrow>

最後の図は、バウンディングボックスと子コンテンツの相対位置の両方を変更するための汎用的な mpadded の使用例です。

illustration of the use of mpadded to modify both the bounding box size and position of child content

対応する MathML は次のとおりです:

<mrow>
  <mi>x</mi>
  <mpadded lspace="0.3em" width="calc(100% +0.6em)">
    <mi>y</mi>
  </mpadded>
  <mi>z</mi>
</mrow>

3.3.7 部分式を不可視にする <mphantom>

3.3.7.1 説明

mphantom 要素は不可視でレンダリングされますが、その内容が通常通りレンダリングされたときと同じサイズや他の次元(ベースライン位置を含む)を持ちます。mphantom は式の一部を不可視に複製して配置を揃えるために使えます。

mphantom 要素は単一の引数を受け取ります。その引数は複数の子を持つ推論された mrow であり得ます(参照:3.1.3 必須引数)。

注意:ある MathML 式に対して mphantommpadded を同時に適用することが可能です。例えば <mphantom><mpadded attribute-settings> ... </mpadded></mphantom> のようにして、サイズを変更しつつ内容を不可視にすることができます。

レンダラは、mphantom の内容と周囲の MathML 要素との相対的な間隔が、同じ内容を持つ mrow に置き換えた場合と変わらないようにすべきです。これは mphantom の内部で改行が発生した場合でも成り立ちます。

上の理由により、mphantom はその内容が空白様でない限り自動的に空白様とは見なされません(参照:3.2.7 空白 <mspace/>)。これは、演算子の推奨レンダリング規則が隣接要素が空白様かどうかによって影響を受けるためです。それでも、空白様要素の合法的なグルーピングに関する警告は mphantom の使用にも適用され得ます。

3.3.7.2 属性

mphantom 要素は、3.1.9 表示要素に共通の属性 に列挙された属性を受け取ります(ただし mathcolor は効果を持ちません)。

3.3.7.3

以下の状況では、前述の mphantom のレンダリング規則が意図した効果を与えないことがあります。mphantommrow の引数の部分列を囲むと、その部分列内の mo 要素の form 属性の既定値の決定が変わることがあります(3.2.5 演算子・フェンス・区切り・アクセントform の既定値の説明を参照)。このような場合は、そのような mo に明示的な form 属性を付ける必要があるかもしれません。以下の例で示します。

この例では、分子と分母の対応する部分の整列を確保するために mphantom が使われています:

<mfrac>
  <mrow>
    <mi> x </mi>
    <mo> + </mo>
    <mi> y </mi>
    <mo> + </mo>
    <mi> z </mi>
  </mrow>
  <mrow>
    <mi> x </mi>
    <mphantom>
      <mo form="infix"> + </mo>
      <mi> y </mi>
    </mphantom>
    <mo> + </mo>
    <mi> z </mi>
  </mrow>
</mfrac>
x + y + z x + y + z

これは次のようにレンダリングされるでしょう:

\frac{x+y+x}{x\phantom{{}+y}+z}

下のようにはならないはずです:

\frac{x+y+z}{x+z}

ここで mphantom 内の mo 要素に明示的に form="infix" を設定することで、mphantom による包みが無かった場合に想定されるのと同じ form 値を設定しています。これがないと、+ は前置演算子と解釈され、若干異なる間隔になる可能性があります。

または、明示的な属性設定をせずに、各引数 <mo>+</mo><mi>y</mi> をそれぞれ個別の mphantom に包むことで、この問題を回避できます。すなわち次のようにします:

<mfrac>
  <mrow>
    <mi> x </mi>
    <mo> + </mo>
    <mi> y </mi>
    <mo> + </mo>
    <mi> z </mi>
  </mrow>
  <mrow>
    <mi> x </mi>
    <mphantom>
      <mo> + </mo>
    </mphantom>
    <mphantom>
      <mi> y </mi>
    </mphantom>
    <mo> + </mo>
    <mi> z </mi>
  </mrow>
</mfrac>
x + y + z x + y + z

3.3.8 括弧対内の式 <mfenced>

3.3.8.1 説明

mfenced 要素は、括弧(波括弧、角括弧、丸括弧)で囲む一般的な構成を簡便に表現するための形式を提供します。必要に応じて区切り(例えばコンマ)も挿入できます。

例えば <mfenced> <mi>x</mi> </mfenced>(x) と表示され、次の表現と等価です。

<mrow> <mo> ( </mo> <mi>x</mi> <mo> ) </mo> </mrow>
( x )

また <mfenced> <mi>x</mi> <mi>y</mi> </mfenced>(x, y) と表示され、次の表現と等価です:

<mrow>
  <mo> ( </mo>
  <mrow> <mi>x</mi> <mo>,</mo> <mi>y</mi> </mrow>
  <mo> ) </mo>
</mrow>
( x , y )

個々のフェンスや区切りは mo 要素で表されます(詳しくは 3.2.5 演算子・フェンス・区切り・アクセント を参照)。したがって、任意の mfenced 要素は後述の展開形と完全に等価です。

この推奨をサポートするレンダラは、これらの形式のいずれを使っても同一の表示を生成することが要求されます。mfenced は作者や作成ツールにとって便利ですが、展開形(mrow を使ったもの)のみが MathML-Core でサポートされていることに注意してください。

一般に、mfenced 要素はゼロ個以上の引数を持ち、それらをフェンスで囲んだ mrow を生成します。引数が複数ある場合は、隣接引数の間に区切りを挿入するために追加の入れ子 mrow を用いて適切なグルーピングを行います(参照:3.3.1 部分式を水平方向にグループ化する <mrow>, <a>)。フェンスと区切りはデフォルトで括弧とコンマですが、以下の表のように属性で変更できます。

3.3.8.2 属性

mfenced 要素は、3.1.9 表示要素に共通の属性 に列挙された属性に加えて以下の属性を受け取ります。区切り文字やデリミタは mathcolor で指定された色で描かれるべきです。

Name values default
open string (
開始デリミタを指定します。これは mo の内容として使われるため、任意の空白は 2.1.7 入力時の空白折畳み の規則に従ってトリム・折畳みされます。
close string )
終了デリミタを指定します。mo の内容として使われるため、任意の空白は折畳まれます(同様に参照)。
separators string ,
空白で区切られたゼロ個以上の区切り文字の列を指定します。各引数の対は対応する区切り文字で区切られ(最後の引数の後には区切りは現れません)、区切りが多すぎれば余分は無視され、少なければ最後の区切りが繰り返されます。separators 内の任意の空白は無視されます。

すべての属性が明示的な汎用的な mfenced は次のようになります:

<mfenced open="opening-fence"
         close="closing-fence"
         separators="sep#1 sep#2 ... sep#(n-1)" >
  arg#1
  ...
  arg#n
</mfenced>

RTL の文脈では、初期テキスト方向が RTL であるため、openclose 属性中の鏡像を持つ文字は鏡像された形でレンダリングされます。特にデフォルト値は LTR と RTL の両方で括弧付き列として正しくレンダリングされます。

上で示した一般的な mfenced 要素は次の展開形と等価です:

<mrow>
  <mo fence="true"> opening-fence </mo>
  <mrow>
    arg#1
    <mo separator="true"> sep#1 </mo>
    ...
    <mo separator="true"> sep#(n-1) </mo>
    arg#n
  </mrow>
  <mo fence="true"> closing-fence </mo>
</mrow>

各引数(最後を除く)の後には区切りが続きます。内部の mrow は適切なグルーピングのために追加されています(参照:3.3.1 部分式を水平方向にグループ化する)。

引数が一つだけの場合、上の形式には区切りが入らず、<mrow> arg#1 </mrow>arg#1 と同値なので、次のような簡略形も等価です:

<mrow>
  <mo fence="true"> opening-fence </mo>
    arg#1
  <mo fence="true"> closing-fence </mo>
</mrow>

区切り文字が多すぎる場合は余分は無視されます。区切り文字が指定されているが不足している場合は最後の区切りが必要に応じて繰り返されます。したがってデフォルト値の separators="," は separators=",,", ";;" のように拡張されても等価です。区切り文字が与えられていないが必要である場合(例:separators=" " または "" で引数が複数ある場合)は、区切り要素は挿入されません。つまり <mo separator="true"> sep#i </mo> はまったく挿入されません。これは空の内容を持つ mo 要素を挿入するのとは異なります。

最後に引数がない場合(例:空の mfenced)、

<mfenced open="opening-fence"
 close="closing-fence"
 separators="anything" >
</mfenced>

等価な展開形はフェンスだけを含む mrow になります:

<mrow>
  <mo fence="true"> opening-fence </mo>
  <mo fence="true"> closing-fence </mo>
</mrow>

注意:すべての「fenced expressions」が mfenced で表現できるわけではありません。例外的な表現には、装飾された区切りやフェンス、mstyle に囲まれたもの、欠落または余分な区切りやフェンス、複数文字の区切りなどが含まれます。これらの場合は、適切に修正した展開形を使って式をエンコードする必要があります。前述の通り、必要かどうかにかかわらず展開形を直接使うことは常に許容されます。特に、MathML プリプロセッサが mfenced を展開形に置き換えることは保証できません。

上で示した等価な展開形には mo 要素に fence や separator といった属性が付いています。最も一般的なフェンスや区切りは既に演算子辞書内にそれらの属性付きで存在するため、展開形を直接使う場合に著者がそれらの属性を明示的に指定する必要は通常ありません。また、form 属性の既定値の規則(参照:3.2.5 演算子・フェンス・区切り・アクセント)により、開きフェンスと閉じフェンスは事実上それぞれ form="prefix"form="postfix" を持ち、区切りは form="infix" を持つように扱われます。

注意:例えば区切りに + を指定して、それを通常の演算子としての + の略記にするのは間違いです。例えば:

<mrow>
  <mi>x</mi> <mo>+</mo> <mi>y</mi> <mo>+</mo> <mi>z</mi>
</mrow>
x + y + z

これは、+ が区切りとして扱われ、通常の中置演算子として扱われないため不適切です。つまり、あたかも <mo separator="true">+</mo> のように扱われ、適切にレンダリングされない可能性があります。

3.3.8.3
<mfenced>
  <mrow>
    <mi> a </mi>
    <mo> + </mo>
    <mi> b </mi>
  </mrow>
</mfenced>

上の mrow は、mfenced がちょうど一つの引数を持つようにするために必要です。これがないと、誤って (a, +, b) とレンダリングされてしまいます。

<mfenced open="[">
  <mn> 0 </mn>
  <mn> 1 </mn>
</mfenced>
<mrow>
  <mi> f </mi>
  <mo> &#x2061;<!--ApplyFunction--> </mo>
  <mfenced>
    <mi> x </mi>
    <mi> y </mi>
  </mfenced>
</mrow>

3.3.9 表記で式を囲む <menclose>

3.3.9.1 説明

menclose 要素は、notation 属性で指定された囲み表記の中にその内容を描画します。menclose は単一の引数を受け取ります。その引数は複数の子を持つ推論された mrow であり得ます(参照:3.1.3 必須引数)。

3.3.9.2 属性

menclose 要素は、3.1.9 表示要素に共通の属性 に列挙された属性に加えて以下の属性を受け取ります。囲み表記は mathcolor で指定された色で描かれるべきです。

notation に許される値は拡張可能です。準拠するレンダラは処理できない値を無視してよいですが、レンダラは可能な限り下に列挙された値を描画することが推奨されます。

Name values default
notation (actuarial | phasorangle | box | roundedbox | circle | left | right | top | bottom | updiagonalstrike | downdiagonalstrike | verticalstrike | horizontalstrike | northeastarrow | madruwb | text ) + 何もしない
子要素を囲むために使う空白区切りの表記リストを指定します。各種表記の説明は下記を参照してください。MathML 4 は longdivradical の使用を非推奨にしました。これらはそれぞれ mlongdivmsqrt が提供する機能と重複するため、そちらを使うべきです。デフォルトは notation が与えられないか空文字列の場合には menclose は何も描かないように変更されています。
比較は ASCII 大文字小文字を区別しない 方式で行われます。

notation には任意個の値を空白で区切って指定でき、レンダラが理解するものはすべて描画されるべきです。各値は他の値が存在しないかのように独立して描画され、互いにネストされるべきではありません。例えば notation="circle box" は、内容の周りに円と四角が描かれることを意味します;円と四角は重なってもよい、ということです。定義済みの表記のうち phasorangle のみが方向性に影響されます(参照:3.1.5.1 数式の全体的な方向性)。

notationactuarial を指定した場合、内容はアクチュアリアル記号で囲まれて描かれます。類似の結果は top right の指定でも得られます。

boxroundedboxcircle はそれぞれ示すように内容を囲みます。ボックスや円と内容の間の距離は MathML により指定されずレンダラに任されます。実際には水平方向に各辺 0.4em、垂直方向に約 0.5ex のパディングがよく使われます。

leftrighttopbottom は内容のそれらの辺に線を描きます。northeastarrowupdiagonalstrikedowndiagonalstrikeverticalstrikehorizontalstrike は内容の上に指定の取り消し線を重ねて描きます。例:updiagonalstrike は左下から右上へ延びる取り消し線を描きます。

northeastarrow は TeX の \cancelto コマンドを実装するために推奨される値です。もしレンダラが menclose のために他の矢印を実装するなら、一貫性と標準化のために以下の完全な名前集合から選ぶことが推奨されます:

  • uparrow

  • rightarrow

  • downarrow

  • leftarrow

  • northwestarrow

  • southwestarrow

  • southeastarrow

  • northeastarrow

  • updownarrow

  • leftrightarrow

  • northwestsoutheastarrow

  • northeastsouthwestarrow

madruwb はアラビア式の階乗表記(مضروب のローマ字転写)を生成する囲みを作るべきです。これは三番目の例に示されています。

menclose 要素の基準線(ベースライン)は、その子(推論された mrow である可能性がある)のベースラインです。

3.3.9.3

複数の属性を使う例:

<menclose notation='circle box'>
  <mi> x </mi><mo> + </mo><mi> y </mi>
</menclose>
[Image of a circle and box around x plus y]

アクチュアリアル表記の例:

<msub>
  <mi>a</mi>
  <mrow>
    <menclose notation='actuarial'>
      <mi>n</mi>
    </menclose>
    <mo>&#x2063;<!--InvisibleComma--></mo>
    <mi>i</mi>
  </mrow>
</msub>
[image of actuarial notation for a angle n at i]

回路解析で使われる phasorangle の例:

<mi>C</mi>
<mrow>
  <menclose notation='phasorangle'>
    <mrow>
      <mo></mo>
      <mfrac>
        <mi>π</mi>
        <mn>2</mn>
      </mfrac>
    </mrow>
  </menclose>
</mrow>
[image of phasorangle notation for the angle negative pi over 2]

madruwb の例:

<menclose notation="madruwb">
  <mn>12</mn>
</menclose>
[Image of 12 factorial in Arabic style]

3.4 スクリプトと極限のスキーマ

本節で説明する要素は、基底の周囲に一つ以上のスクリプトを配置します。記号にさまざまな種類のスクリプトや装飾を付けることは数学表記で非常に一般的な手法です。純粋に視覚的な配置のためには、一般用途の単一要素で任意の伝統的なスクリプト位置にスクリプトや装飾を配置することは可能です。しかし、一般的な表記の抽象的な構造をより正確に表現するために、MathML はいくつかのより専門的なスクリプティング要素を提供します。

下付き/上付き要素に加えて、MathML には基底の上や下にスクリプトを配置する overscript 要素および underscript 要素があります。これらの要素は大きな演算子の上限・下限を置くためや、基底の上や下にアクセントや線を置くために使われます。アクセントを描画する規則は overscript や underscript の規則とは異なり、この差は以下の適切な節で説明されている accent および accentunder 属性で制御できます。

スクリプトのレンダリングは、レンダリングプロセスが継承する環境の一部である scriptlevel および displaystyle 属性によって影響を受けます。これらは 3.1.6 Displaystyle and Scriptlevel に記述されています。

MathML はテンソル添字の取り付け用の要素も提供します。テンソル添字は通常の下付き・上付きと異なり、縦の列で揃える必要があります。また、すべての上付きスクリプトはベースラインで揃えられるべきであり、すべての下付きスクリプトもベースラインで揃えられるべきです。テンソル添字は prescript の位置にも現れることがあります。なお、通常のスクリプトは基底の後に続きます(LTR 文脈では右側、RTL 文脈では左側)が、prescripts は基底の前に置かれます(LTR(RTL)文脈では左(右)側)。

表示要素は式の抽象的な表記構造を記述するために使われるべきであるため、すべての「スクリプティング」要素(つまり最初の引数式)における基底表現は、脚注される式全体であるべきであり、末尾の文字だけであってはなりません。例えば、 ( x + y ) 2 は次のように書くべきです:

<msup>
  <mrow>
    <mo> ( </mo>
    <mrow>
      <mi> x </mi>
      <mo> + </mo>
      <mi> y </mi>
    </mrow>
    <mo> ) </mo>
  </mrow>
  <mn> 2 </mn>
</msup>
( x + y ) 2

3.4.1 下付き <msub>

3.4.1.1 説明

msub 要素は次の構文で基底に下付き文字を付けます

<msub> base subscript </msub>

msubsubscript 内で scriptlevel を 1 増やし、displaystylefalse に設定しますが、base 内では両方の属性を変更しません(参照:3.1.6 Displaystyle and Scriptlevel)。

3.4.1.2 属性

msub 要素は、3.1.9 Attributes common to presentation elements に記載された属性に加えて以下の属性を受け取ります。

Name values default
subscriptshift length 自動
subscript のベースラインを下にシフトする最小量を指定します;既定ではレンダリングエージェントが自らの位置決め規則を使用します。

3.4.2 上付き <msup>

3.4.2.1 説明

msup 要素は次の構文で基底に上付き文字を付けます

<msup> base superscript </msup>

msupsuperscript 内で scriptlevel を 1 増やし、displaystylefalse に設定しますが、base 内では両方の属性を変更しません(参照:3.1.6 Displaystyle and Scriptlevel)。

3.4.2.2 属性

msup 要素は、3.1.9 Attributes common to presentation elements に記載された属性に加えて以下の属性を受け取ります。

Name values default
superscriptshift length 自動
superscript のベースラインを上にシフトする最小量を指定します;既定ではレンダリングエージェントが自らの位置決め規則を使用します。

3.4.3 下付き・上付きペア <msubsup>

3.4.3.1 説明

msubsup 要素は、基底式に対して下付きと上付きの両方を付けるために使われます。

<msubsup> base subscript superscript </msubsup>

msubsupsubscriptsuperscript の内部で scriptlevel を 1 増やし、displaystylefalse に設定しますが、base 内では両方の属性を変更しません(参照:3.1.6 Displaystyle and Scriptlevel)。

両方のスクリプトが基底にきつく位置付けられる点に注意してください。ここに示すように x 1 2 と、ネストされたスクリプトの段差配置(下付きが先にネストされた場合)である x 1 2 を比較してください。後者は msubmsup の内部にネストすることで得られます。

3.4.3.2 属性

msubsup 要素は、3.1.9 Attributes common to presentation elements に記載された属性に加えて以下の属性を受け取ります。

Name values default
subscriptshift length 自動
subscript のベースラインを下にシフトする最小量を指定します;既定ではレンダリングエージェントが自らの位置決め規則を使用します。
superscriptshift length 自動
superscript のベースラインを上にシフトする最小量を指定します;既定ではレンダリングエージェントが自らの位置決め規則を使用します。
3.4.3.3

msubsup は識別子に下付き・上付きのペアを追加するために最も一般的に使われますが、もう一つ重要な用途として、表示スタイルでも通常スクリプト位置に限界を表示する大きな演算子(例えば積分)の限界を置くことがあります。例えば:

\int\nolimits_0^1 \eulere^x \,\diffd x

は次のように表現されます

<mrow>
  <msubsup>
    <mo></mo>
    <mn> 0 </mn>
    <mn> 1 </mn>
  </msubsup>
  <mrow>
    <msup>
      <mi></mi>
      <mi> x </mi>
    </msup>
    <mo> &#x2062;<!--InvisibleTimes--> </mo>
    <mrow>
      <mo></mo>
      <mi> x </mi>
    </mrow>
  </mrow>
</mrow>
0 1 x x

3.4.4 下部スクリプト <munder>

3.4.4.1 説明

munder 要素は、基底の下に置かれるアクセントまたは極限を付けるために次の構文で使われます

<munder> base underscript </munder>

munder は常に underscript 内で displaystylefalse に設定しますが、accentunderfalse の場合に限り scriptlevel を 1 増やします。base 内では常に両方の属性を変更しません(参照:3.1.6 Displaystyle and Scriptlevel)。

もし basemovablelimits=true の演算子である場合(あるいは装飾された演算子で、そのコアの momovablelimits=true を持つ場合)、かつ displaystyle=false のときは、underscript は下付き位置に描画されます。この場合、accentunder 属性は無視されます。これは U+2211(entity sum) のような記号の限界に対してよく使われます。

3.4.4.2 属性

munder 要素は、3.1.9 Attributes common to presentation elements に列挙された属性に加えて以下の属性を受け取ります。

Name values default
accentunder boolean 自動
underscript を「アクセント」として描画するか、極限として描画するかを指定します。アクセントは基底と同じサイズで描かれ(scriptlevel を増やさない)、基底により近く描画されます。
align "left" | "right" | "center" center
スクリプトが基底の下/上で左揃え、中央揃え、または右揃えになるかを指定します。 3.2.5.7.3 Horizontal Stretching Rules に記載されているように、装飾された演算子のコアを伸ばして基底を覆うべき場合でも、揃えは全体の underscript に基づきます。
比較は ASCII 大文字小文字を区別しない 方式で行われます。すべての一致する文字列が値として許可されます。

accentunder の既定値は、underscriptmo 要素または装飾された演算子でない限り false です(参照:3.2.5 Operator, Fence, Separator or Accent <mo>)。もし underscriptmo 要素であれば、その accent 属性の値が accentunder の既定値として使われます。もし underscript が装飾された演算子であれば、そのコアである mo 要素の accent 属性が既定値として使われます。すべての属性と同様に、明示的に与えられた値が既定値を上書きします。

[MathML-Core] は 3.2.5 Operator, Fence, Separator or Accent 上の accent 属性をサポートしていません。MathML Core と互換性を保つために、accentundermunder 上で設定するべきです。

3.4.4.3

accentunder がレンダリングに与える影響を示す例:

<mrow>
  <munder accentunder="true">
    <mrow>
      <mi> x </mi>
      <mo> + </mo>
      <mi> y </mi>
      <mo> + </mo>
      <mi> z </mi>
    </mrow>
    <mo></mo>
  </munder>
  <mtext>&#x00A0;<!--nbsp-->versus&#x00A0;<!--nbsp--></mtext>
  <munder accentunder="false">
    <mrow>
      <mi> x </mi>
      <mo> + </mo>
      <mi> y </mi>
      <mo> + </mo>
      <mi> z </mi>
    </mrow>
    <mo></mo>
  </munder>
</mrow>
x + y + z  versus  x + y + z

3.4.5 上部スクリプト <mover>

3.4.5.1 説明

mover 要素は、基底の上に置かれるアクセントまたは極限を付けるために次の構文で使われます

<mover> base overscript </mover>

mover は常に overscript 内で displaystylefalse に設定しますが、accentfalse の場合に限り scriptlevel を 1 増やします。base 内では常に両方の属性を変更しません(参照:3.1.6 Displaystyle and Scriptlevel)。

もし basemovablelimits=true の演算子である場合(あるいは装飾された演算子で、そのコアの momovablelimits=true を持つ場合)、かつ displaystyle=false のときは、overscript は上付き位置に描画されます。この場合、accent 属性は無視されます。これは U+2211(entity sum) のような記号の限界に対してよく使われます。

3.4.5.2 属性

mover 要素は、3.1.9 Attributes common to presentation elements に列挙された属性に加えて以下の属性を受け取ります。

Name values default
accent boolean 自動
overscript を「アクセント」として描画するか、極限として描画するかを指定します。アクセントは基底と同じサイズで描かれ(scriptlevel を増やさない)、基底により近く描画されます。
align "left" | "right" | "center" center
スクリプトが基底の下/上で左揃え、中央揃え、または右揃えになるかを指定します。 3.2.5.7.3 Horizontal Stretching Rules に記載されているように、装飾された演算子のコアを伸ばして基底を覆うべき場合でも、揃えは全体の overscript に基づきます。
比較は ASCII 大文字小文字を区別しない 方式で行われます。すべての一致する文字列が値として許可されます。

アクセントと極限の違いは に示されています。

accent の既定値は、overscriptmo 要素または装飾された演算子でない限り false です。もし overscriptmo 要素であれば、その accent 属性の値が moveraccent の既定値として使われます。もし overscript が装飾された演算子であれば、そのコアである mo 要素の accent 属性が既定値として使われます。

[MathML-Core] は 3.2.5 Operator, Fence, Separator or Accent 上の accent 属性をサポートしていません。MathML Core と互換性を保つために、accentundermunder 上で設定するべきです。

3.4.5.3

accent がレンダリングに与える影響を示す二つの例:

<mrow>
  <mover accent="true">
    <mi> x </mi>
    <mo> ^ </mo>
  </mover>
  <mtext>&#x00A0;<!--nbsp-->versus&#x00A0;<!--nbsp--></mtext>
  <mover accent="false">
    <mi> x </mi>
    <mo> ^ </mo>
  </mover>
</mrow>
x ^  versus  x ^
<mrow>
  <mover accent="true">
    <mrow>
      <mi> x </mi>
      <mo> + </mo>
      <mi> y </mi>
      <mo> + </mo>
      <mi> z </mi>
    </mrow>
    <mo></mo>
  </mover>
  <mtext>&#x00A0;<!--nbsp-->versus&#x00A0;<!--nbsp--></mtext>
  <mover accent="false">
    <mrow>
      <mi> x </mi>
      <mo> + </mo>
      <mi> y </mi>
      <mo> + </mo>
      <mi> z </mi>
    </mrow>
    <mo></mo>
  </mover>
</mrow>
x + y + z  versus  x + y + z

3.4.6 下部・上部スクリプトペア <munderover>

3.4.6.1 説明

munderover 要素は、基底の上下の両方にアクセントや極限を付けるために次の構文で使われます

<munderover> base underscript overscript </munderover>

この要素は underscriptoverscript の内部で常に displaystylefalse に設定しますが、accentunder または accent がそれぞれ false の場合に限り scriptlevel を 1 増やします。base 内では常に両方の属性を変更しません(参照:3.1.6 Displaystyle and Scriptlevel)。

もし basemovablelimits=true の演算子である場合(あるいは装飾された演算子で、そのコアの momovablelimits=true を持つ場合)、かつ displaystyle=false のときは、underscriptoverscript はそれぞれ下付きと上付き位置に描画されます。この場合、accentunder および accent 属性は無視されます。これは U+2211(entity sum) のような記号の限界に対してよく使われます。

3.4.6.2 属性

munderover 要素は、3.1.9 Attributes common to presentation elements に列挙された属性に加えて以下の属性を受け取ります。

Name values default
accent boolean 自動
overscript をアクセントとして描画するか極限として描画するかを指定します。アクセントは基底と同じサイズで描かれ(scriptlevel を増やさない)、基底により近く描画されます。
accentunder boolean 自動
underscript をアクセントとして描画するか極限として描画するかを指定します。アクセントは基底と同じサイズで描かれ(scriptlevel を増やさない)、基底により近く描画されます。
align "left" | "right" | "center" center
スクリプトが基底の下/上で左揃え、中央揃え、または右揃えになるかを指定します。 3.2.5.7.3 Horizontal Stretching Rules に記載されているように、装飾された演算子に対する underscripts および overscripts のコアは基底を覆うように伸ばされるべきですが、揃えは全体の underscript または overscript に基づきます。
比較は ASCII 大文字小文字を区別しない 方式で行われます。すべての一致する文字列が値として許可されます。

munderover 要素は、別々の mundermover 要素を使う代わりに用いられます。これは underscript と overscript が基底に対して垂直方向に等間隔に配置され、基底の傾きに従うようにするためです( を参照)。

accentaccentunder の既定値は、それぞれ munder および mover と同じ方法で計算されます。

3.4.6.3

この例は、movablelimits=true かつ displaystyle の場合における、mundermover 内にネストする方法と munderover を使う方法の違いを示します(これは msubsup と同様にレンダリングされます)。

<mstyle displaystyle="false">
  <mover>
    <munder>
      <mo></mo>
      <mi>i</mi>
    </munder>
    <mi>n</mi>
  </mover>
  <mo>+</mo>
  <munderover>
    <mo></mo>
    <mi>i</mi>
    <mi>n</mi>
  </munderover>
</mstyle>
i n + i n

3.4.7 前脚およびテンソル添字 <mmultiscripts>, <mprescripts/>

3.4.7.1 説明

前下付きおよびテンソル表記は、単一の要素 mmultiscripts によって次の構文で表現されます:

<mmultiscripts>
 base
 (subscript superscript)*
 [ <mprescripts/> (presubscript presuperscript)* ]
</mmultiscripts>

この要素は、基底式に付随する任意個の縦に整列した下付き・上付きのペアを表現できます。投稿スクリプト(postscripts)と前スクリプト(prescripts)の両方に対応します。欠落するスクリプトは空部分項を示す有効な空要素、例えば <mrow/> で表す必要があります(以前の MathML では <none/> が使われていましたが、これは空の <mrow/> と同等でした)。すべての上付きスクリプトはベースラインで揃えられるべきであり、すべての下付きスクリプトもベースラインで揃えられるべきです。

prescripts は任意であり、存在する場合は postscripts の後に与えられます。この順序は prescripts がテンソル表記に比べて相対的に稀であるために選ばれました。

引数列は、基底の後に投稿スクリプトを表すゼロ個以上の縦に整列した下付き・上付きのペア(その順)を続ける形で構成されます。この一覧は任意で空要素 mprescripts に続き、前スクリプトを表すゼロ個以上のペアが続きます。投稿スクリプトと前スクリプトのペアのリストは、方向文脈(LTR 文脈では左から右の順)と同じ順序で表示されます。ある位置に下付きまたは上付きのどちらもレンダリングしない場合、その位置には空要素 <mrow/> を使用すべきです。 各下付き・上付きのペアについて、ペア内の要素の水平整列は mmultiscripts の基底に向かって行われるべきです。つまり、前スクリプトは右寄せ、後スクリプトは左寄せにすべきです。

基底、下付き、上付き、省略可能な区切り要素 mprescripts、前下付き、および前上付きはすべて mmultiscripts 要素の直接の部分式であり、式ツリーの同じレベルにあります。あるスクリプト引数が下付きか上付きか、あるいは前下付きか前上付きかは、空要素 mprescripts を位置決定から除外して偶数番目か奇数番目かによって決まります。最初の引数である基底は位置 1 にあると見なされます。mprescripts が与えられていない場合、引数の総数は奇数でなければならず、与えられている場合は偶数でなければなりません。

空要素 mprescriptsmmultiscripts の直接の部分式としてのみ許可されます。

3.4.7.2 属性

mmultiscripts の属性は msubsup の属性と同じです。参照:3.4.3.2 Attributes

mmultiscripts は基底を除く各引数内で scriptlevel を 1 増やし、displaystylefalse に設定しますが、base 内では両方の属性を変更しません(参照:3.1.6 Displaystyle and Scriptlevel)。

3.4.7.3

前脚と後脚を使った超幾何関数の例:

<mrow>
  <mmultiscripts>
    <mi> F </mi>
    <mn> 1 </mn>
    <mrow/>
    <mprescripts/>
    <mn> 0 </mn>
    <mrow/>
  </mmultiscripts>
  <mo> &#x2061;<!--ApplyFunction--> </mo>
  <mrow>
    <mo> ( </mo>
    <mrow>
      <mo> ; </mo>
      <mi> a </mi>
      <mo> ; </mo>
      <mi> z </mi>
    </mrow>
    <mo> ) </mo>
  </mrow>
</mrow>
F 1 0 ( ; a ; z )

次の例はテンソルを示します。ここで kl は異なる添字です

<mmultiscripts>
  <mi> R </mi>
  <mi> i </mi>
  <mrow/>
  <mrow/>
  <mi> j </mi>
  <mi> k </mi>
  <mrow/>
  <mi> l </mi>
  <mrow/>
</mmultiscripts>
R i j k l

この例は基底に向かって揃えることを示します:

<mmultiscripts>
  <mi>  X </mi>
  <mn> 123 </mn>
  <mn> 1 </mn>
  <mprescripts/>
  <mn> 123 </mn>
  <mn> 1 </mn>
</mmultiscripts>
X 123 1 123 1

最後の mmultiscripts の例は、二項係数をアラビア式に表示する方法を示します。

<mstyle dir="rtl">
  <mmultiscripts><mo>&#x0644;</mo>
    <mn>12</mn><mrow/>
    <mprescripts/>
    <mrow/><mn>5</mn>
  </mmultiscripts>
</mstyle>
ل 12 5

3.5 表形式の数式

行列、配列およびその他の表に類する数学表記は、mtablemtr および mtd 要素を用いてマークアップされます。これらの要素は HTML の tabletr および td 要素に類似していますが、可換図式やブロック行列などのために必要な細かなレイアウト制御のための専門的な属性を提供します。

加算や乗算のような初等的な数学で使われる二次元レイアウトは表に似ていることがありますが、重要な点で異なります。 レイアウトおよびアクセシビリティ上の理由から、3.6 Elementary Math で説明されている mstack および mlongdiv 要素を初等表記には使用すべきです。

3.5.1 表または行列 <mtable>

3.5.1.1 説明

行列または表は mtable 要素を用いて指定します。mtable の内部には mtr 要素のみが現れることができます。

同じ表の他の行より列数が少ない表の行(その行より前にあるか後にあるかは問わない)は、実質的に右側(RTL 文脈では左側)に空の mtd 要素で埋められ、各行の列数が表の任意の行の最大列数と等しくなるように扱われます。rowspancolumnspan 属性に非既定値を用いる mtd の使用は、与えられた列数をカバーするために後続の mtr 要素で何個の mtd 要素を与えるべきかに影響する場合があることに注意してください。

MathML は表のレイアウトアルゴリズムを規定していません。特に、表全体の幅に対する制約(例えば columnwidth 属性の明示的な値やセル内容の最小サイズ)と width 属性の間の競合を解決するのは MathML レンダラの責任です。表のレイアウトアルゴリズムについては Cascading Style Sheets, level 2 を参照してください。

3.5.1.2 属性

mtable 要素は、3.1.9 表示要素に共通の属性 に記載された属性に加えて以下の属性を受け取ります。mtable の一部として描画される罫線は、mathcolor で指定された色で描画されるべきです。

名称 既定
align ("top" | "bottom" | "center" | "baseline" | "axis"), rownumber? axis
表の縦方向の揃え方を環境に対して指定します。axis は表の垂直中心を環境の axis に合わせることを意味します。(式の axis は組版者が使う揃え線で、通常マイナス記号が乗る線です。)centerbaseline はいずれも表の中心を環境のベースライン上に揃えることを意味します。topbottom は表の上端または下端を環境のベースラインに揃えます。 もし align 属性値が rownumber で終わる場合、上から数えて 1 をトップ行とするその指定行(表全体ではなく)が上記の方法で揃えられます(以下の例外に注意)。rownumber が負であるときは下から数えます。rownumber の値が範囲外または整数でない場合は無視されます。行番号が指定され、かつ揃え値が baseline または axis の場合、その行の baseline または axis が揃えに使用されます。これは rowalign の値が baseline または axis のときのみ明確に定義されます。MathML は他の rowalign の値に対して baselineaxis 揃えがどのように行われるかを規定していません。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
rowalign ("top" | "bottom" | "center" | "baseline" | "axis") + baseline
同じ行内のセル同士の縦方向の揃え方を指定します: top は行内の各エントリの上端を揃えます; bottom はセルの下端を揃えます; center はセルを中央揃えにします; baseline はセルのベースラインを揃えます; axis は各セルの axis を揃えます。 (複数値に関する注記は下を参照。)
比較は ASCII 大文字小文字を区別しない 方式で行われます。
columnalign ("left" | "center" | "right") + center
同じ列内のセル同士の水平方向の揃え方を指定します: left はセルの左側を揃えます; center は各セルを中央揃えにします; right は右側を揃えます。 (複数値に関する注記は下を参照。)
比較は ASCII 大文字小文字を区別しない 方式で行われます。
alignmentscope (boolean) + true
[この属性は整列要素 maligngroup および malignmark とともに 3.5.4 Alignment Markers に記述されています。]
columnwidth ("auto" | length | "fit") + auto
列の幅の決め方を指定します: auto は列が必要に応じた幅を取ることを意味します; 明示的な長さはその列を正確にその幅にし、レンダラが折り返しやクリップで内容を合わせます; fit は、auto または固定幅の列を差し引いた後に残るページ幅を、複数の fit 列で等分することを意味します。
もし fit 列の内容を収める十分な余地が残らない場合、レンダラはそれらの列の内容を折り返すかクリップしてもよいです。columnwidth がパーセンテージで指定されるとき、その値は表全体の幅に対する割合であることに注意してください。つまり、レンダラは列の幅を調整して表全体幅の指定した割合を覆うように試みるべきです。 (複数値に関する注記は下を参照。)
比較は ASCII 大文字小文字を区別しない 方式で行われます。
width "auto" | length auto
表全体の望ましい幅を指定し、視覚的ユーザーエージェント向けの意図を持ちます。値がパーセンテージの場合、その値は MathML レンダラが利用可能な水平方向の空間(改行で使用される現在のターゲット幅)に対する割合です(参照:3.1.7 式の改行)。これにより例えば表を表示幅いっぱいにするなどが可能です。値が auto の ASCII 一致である場合、レンダラは任意のレイアウトアルゴリズムを用いて内容から表幅を計算すべきです。 注:MathML 3 では単位なしの数値が許されパーセンテージと同様に扱われましたが、MathML 4 では単位なし数値は非推奨です。
rowspacing (length) + 1.0ex
行間に追加する空間の量を指定します。(複数値に関する注記は下を参照。)
columnspacing (length) + 0.8em
列間に追加する空間の量を指定します。(複数値に関する注記は下を参照。)
rowlines ("none" | "solid" | "dashed") + none
各行間にどのような線を追加するかを指定します: none は線なし; solid は実線; dashed は破線(ダッシュの間隔は実装依存)を意味します。 (複数値に関する注記は下を参照。)
比較は ASCII 大文字小文字を区別しない 方式で行われます。
columnlines ("none" | "solid" | "dashed") + none
各列間にどのような線を追加するかを指定します: none は線なし; solid は実線; dashed は破線(ダッシュの間隔は実装依存)を意味します。 (複数値に関する注記は下を参照。)
比較は ASCII 大文字小文字を区別しない 方式で行われます。
frame "none" | "solid" | "dashed" none
表の周りにどのような線を描画するかを指定します。 none は線なし; solid は実線; dashed は破線(ダッシュの間隔は実装依存)を意味します。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
framespacing length, length 0.4em 0.5ex
framenone でない場合に、表と枠の間に追加される間隔を指定します。最初の値は右左の間隔、二番目の値は上下の間隔を指定します。
equalrows boolean false
すべての行の総高さを同じに強制するかどうかを指定します。
equalcolumns boolean false
すべての列の総幅を同じに強制するかどうかを指定します。
displaystyle boolean false
各セル内での displaystyle の値を指定します(scriptlevel は変更されません);参照:3.1.6 Displaystyle and Scriptlevel

上の、行(それぞれ列、または行間・列間のギャップ)に影響する属性の仕様において、表記 (...)+ は属性に複数の値を空白区切りで与えられることを意味します(参照:2.1.5 MathML 属性値)。この文脈では単一の値はすべての行(それぞれ列やギャップ)に対して使う値を指定します。値の列は上から順に対応する行(それぞれ左または右の最初の列、方向性に依存)に適用されます。もし行(それぞれ列やギャップ)が与えられた値より多い場合、最後の値が必要に応じて繰り返されます。値が多すぎる場合は余分は無視されます。

なお、罫線領域(framerowlinescolumnlines が占める領域)や間隔(framespacingrowspacingcolumnspacing)は行や列として数えられないことに注意してください。

displaystyle 属性は継承値を設定するために mtable 要素に付けることができます。もし属性が存在しない場合、mtable は表要素の内部で displaystylefalse に設定します(参照:3.1.6 Displaystyle and Scriptlevel)。

3.5.1.3

3×3 の単位行列は次のように表現できます:

<mrow>
  <mo> ( </mo>
  <mtable>
    <mtr>
      <mtd> <mn>1</mn> </mtd>
      <mtd> <mn>0</mn> </mtd>
      <mtd> <mn>0</mn> </mtd>
    </mtr>
    <mtr>
      <mtd> <mn>0</mn> </mtd>
      <mtd> <mn>1</mn> </mtd>
      <mtd> <mn>0</mn> </mtd>
    </mtr>
    <mtr>
      <mtd> <mn>0</mn> </mtd>
      <mtd> <mn>0</mn> </mtd>
      <mtd> <mn>1</mn> </mtd>
    </mtr>
  </mtable>
  <mo> ) </mo>
</mrow>
( 1 0 0 0 1 0 0 0 1 )

括弧は mtable 要素の描画の一部ではないため、括弧は明示的に表現する必要があることに注意してください。これにより角括弧など他の囲いを使ったり、まったく囲わないことも可能になります。

3.5.2 表または行列の行 <mtr>

3.5.2.1 説明

mtr 要素は表または行列の一行を表します。mtr 要素は mtable 要素の直接の部分式としてのみ許可され、その内容が表の一行を構成することを指定します。mtr の各引数は表の異なる列に配置され、LTR 文脈では最左列から、RTL 文脈では最右列から始まります。

3.5.1 Table or Matrix で説明されているように、mtr 要素は表内で他の行より短い場合に実質的に mtd 要素で埋められます。

3.5.2.2 属性

mtr 要素は、3.1.9 Attributes common to presentation elements に記載された属性に加えて以下の属性を受け取ります。

名称 既定
rowalign "top" | "bottom" | "center" | "baseline" | "axis" 継承
この行について、rowalignmtable に指定された縦方向の揃えを上書きします。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
columnalign ("left" | "center" | "right") + 継承
この行について、columnalignmtable に指定された水平方向の揃えを上書きします。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
3.5.2.3 式番号付け

以前の MathML では番号付き方程式用に mlabeledtr 要素が定められていました。mlabeledtr では最初の mtd が式番号を表し、行内の残りの要素が番号付けされる式を表します。mtableside および minlabelspacing 属性が式番号の配置を決定します。 この要素は広く実装されておらず現在のバージョンでは仕様に含まれていませんが、Legacy Schema では依然として有効です。

多数の番号付き式を含む大きな文書では自動番号付けが重要になります。自動式番号付けや式番号への参照の自動解決は MathML の範囲外ですが、スタイルシート等を用いることで対処できます。CSS の文脈では、空の mtdmtr の最初の子として使い、CSS カウンタと生成コンテンツを用いて式番号を埋めることができます。例えば次のような CSS を使えます:

body {counter-reset: eqnum;}
mtd.eqnum {counter-increment: eqnum;}
mtd.eqnum:before {content: "(" counter(eqnum) ")"}

3.5.3 表または行列のエントリ(セル) <mtd>

3.5.3.1 説明

mtd 要素は表または行列の一つのエントリ(セル)を表します。mtd 要素は mtr 要素の直接の部分式としてのみ許可されます。

mtd 要素は単一の引数を受け取り、その引数は複数の子を持つ推論された mrow であり得ます;詳しくは 3.1.3 必須引数 を参照してください。

3.5.3.2 属性

mtd 要素は、3.1.9 Attributes common to presentation elements に記載された属性に加えて以下の属性を受け取ります。

名称 既定
rowspan positive-integer 1
セルが指定された行数を占めるかのように扱われます。対応する次の rowspan-1 行の mtd は省略されなければなりません。解釈は HTML 表の同様の属性と対応します。
columnspan positive-integer 1
セルが指定された列数を占めるかのように扱われます。続く rowspan-1 個の mtd は省略されなければなりません。解釈は HTML 表の同様の属性と対応します。
rowalign "top" | "bottom" | "center" | "baseline" | "axis" 継承
このセルの縦方向揃えを指定し、包含する mrowmtable 上で指定された値を上書きします。rowalign を参照してください。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
columnalign "left" | "center" | "right" 継承
このセルの水平方向揃えを指定し、包含する mrowmtable 上で指定された値を上書きします。columnalign を参照してください。
比較は ASCII 大文字小文字を区別しない 方式で行われます。

3.5.4 整列マーカー <maligngroup/>, <malignmark/>

注意: malignmark と maligngroup は MathML-Core に含まれていません

malignmark および maligngroup は [MathML-Core] ではサポートされていません。多くの目的では mtable の列を直接使って整列を実装することが推奨されます。次節で述べるように、これらの要素は将来のバージョンでさらに簡略化または削除される可能性があります。

既存の MathML で malignmark を使用している場合のために、Javascript polyfill が提供されています。

3.5.4.1 削除に関する通知

重大な例外を一つ除いて、<maligngroup/><malignmark/> はほとんど採用や実装がありませんでした。 その唯一の例外は整列の基礎のみを使用しています。 そのため、MathML の整列は現在の使用に合わせて大幅に簡略化され、将来の実装を簡単にする目的で簡素化されました。具体的には次の簡略化が行われています:

  • <maligngroup/><malignmark/> のための属性は削除されました。
  • mtablemtr、および mlabeledtr に以前許されていた groupalign 属性は削除されました。
  • <malignmark/> は以前は任意の場所(トークン要素内部を含む)で許可されていましたが、現在は <maligngroup/> が許可される場所にのみ許可されます(下記参照)。
3.5.4.2 説明

整列マーカーは空白様の要素です(参照:3.2.7 空白 <mspace/>)。これらは列内の MathML 式の特定の点を垂直に揃えるために、必要な量の水平空間を自動挿入することで利用できます。

以下の議論では、係数や各項の変数を垂直に揃えて表示すべき連立方程式の例を使います。挿入される空間は次に示すような配置になります:

8.44x + 55.7y = -0
3.14x 50.7y = −1.1

上の式を列に並べただけで揃えなかった場合は次のように見えるでしょう:

8.44x + 55.7y = 0
3.1x 50.7y = −1.1

揃えられるべき部分を持つ式(上の例では各方程式)は、mtable の一列の表要素(つまり mtd 要素)として与えられなければなりません。混乱を避けるために、この節の残りでは「表セル」という用語を使用します。

整列要素間の相互作用は、それらが生じる mtable 列に限定されます。すなわち、mtable で指定された表の各列は、それ自身が含む内容から生じるすべての整列効果を内包する「整列スコープ」として機能します。また、その列内の整列要素とネストされた他の整列スコープ内の整列要素との間の相互作用は除外されます。

整列点が一つしかない場合、代替として mo 要素上の改行やインデント属性を使うこともできます(参照:3.1.7 式の改行)。

mtable に属性 alignmentscope=false を与えると、その列が整列スコープとして動作しないようにできます。これについてはこの節の最後でさらに議論します。ここではこの属性が既定値の true を持つと仮定して議論を行います。

3.5.4.3 整列グループの指定

揃える各部分は maligngroup に入れるべきです。整列点は通常 maligngroup 要素に続く要素の左端(RTL の場合は右端)ですが、もしその間に malignmark 要素があれば、その malignmark に続く要素の左端(RTL の場合は右端)がそのグループの整列点になります。

maligngroup または malignmarkmtable の外に現れると、それらは幅ゼロで描画されます。

上の例では、各方程式は左辺の各係数、変数、演算子の前に一つずつ maligngroup 要素を持ち、= 記号の前と右辺の定数の前にも一つずつ maligngroup 要素を持ちます。これらが揃えられる部分だからです。

一般に、ある表セルが n 個の maligngroup を含むとき、そのセルは n 個の整列グループを持ち、i 番目のグループは i 番目の maligngroup の直後から (i+1) 番目の前までの要素で構成されます。表セルの内容の中で最初の maligngroup の前に完全に現れる要素は存在してはなりません。

整列グループの区分は、必ずしもそれを含む MathML 式の入れ子構造に一致するわけではないことに注意してください。つまり、ある整列グループが一つの mrow の終わり、別の mrow 全体、および三番目の先頭部分で構成されることが許されます。これはこの節末の例の MathML マークアップで見ることができます。

整列グループはレイアウトスキーマの入れ子構造と一致する必要はありませんが、表セル内で maligngroupmalignmark が許される場所には制限があります。これらの要素は、その表セル内に含まれる(直接または間接的に)以下の種類の要素内にのみ含めることができます:

  • mrow 要素(複数子をもつ mtd によって形成される推論された mrow を含む)が許されますが、dir 属性による方向の変更を含む mrow は除きます;

  • mstyle 要素 (ただし dir 属性で方向を変更するものは除く);

  • mphantom 要素;

  • mfenced 要素;

  • maction 要素(ただしその選択された部分式のみが検査される);

  • semantics 要素.

これらの制限は、オーバースクリプト、根号、分数線などの複雑さを避けつつ、整列を一意に指定できるようにすることを意図しています。また、望ましい整列を達成するために単純なアルゴリズムで十分であることも保証します。

整列グループに分割された表セルについては、その内容のすべての要素が、上で挙げた要素の中で maligngroup を含む要素および maligngroup 自身を除き、ちょうど一つの整列グループの一部でなければなりません。これは、整列グループを含む任意の表セルでは最初の完全な要素が maligngroup でなければならないことを意味します(ただしこれは他の要素の開始タグが先行することは妨げません)。この要件は、最初の maligngroup より前にある要素の揃え方についての混乱を取り除き、その列の整列処理から完全に除外される表セルを識別しやすくします。

同じ列で整列グループに分割された表セルが各々同じ数のグループを含む必要はありません。異なる場合、他の表セルよりグループ数が少ない各セルの右側(RTL 文脈では左側)に幅ゼロの整列グループが実質的に追加されます。

注意

すべての行が同じ数の maligngroup 要素を持つように厳密化するべきでしょうか?

3.5.4.4 整列グループに分割されていない表セル
注意

この節に記載されているように maligngroup を持たない行を許すべきかどうか?

列内で整列グループを持たない式は maligngroup 要素を含んではいけません。整列グループを持たない式は、その列全体に適用される columnalign 属性のみを用いて揃えられます。もしそのような式が、整列グループを含む表セルに必要な列幅より広い場合、整列グループを含むすべての表セルはその列内で一まとまりとして columnalign に従ってシフトされます。例えば、上の二つの方程式の列に内部揃えを持たない列見出しを追加することができ、その見出しに mtext 要素を用い、表全体にデフォルトの columnalign="center" を使うと次のようになります:

equations with aligned variables
      8.44x + 55.7y = -0      
3.14x 50.7y = −1.1

または、短い見出しを用いると、

some equations
8.44x + 55.7y = -0
3.14x 50.7y = −1.1
3.5.4.5 <malignmark/> を使った整列点の指定

malignmark 要素は、整列グループ内の任意の場所(ただし完全にその内側に含まれる別の整列スコープ内は除く)に置かれた場合、maligngroup 要素の開始での揃えを上書きします。

malignmark 要素は、その後に続く要素の左端(RTL 文脈では右端)を整列点とすることを示します。

注意

malignmark 要素はトークンの内部に現れてもよいか?

malignmark 要素が整列グループ内に提供される場合、それは maligngroup に許される要素にのみ含まれるべきです(参照:3.5.4.3 整列グループの指定)。もし整列グループ内に複数の malignmark 要素があれば、最初のもの以外は無視されます。MathML アプリケーションはこの状況に警告を出すモードを用意してもよいですが、これはエラーではなく、既定では警告を出さないでよいです。その理由は、自動生成されたデータからすべての不要な malignmark 要素を取り除くのは煩雑であるためです。

3.5.4.6 整列例の MathML 表現

上で示した規則は、この節の冒頭付近に示した例 の MathML 表現を説明するのに十分です。

その表現の一例は次のようになります:

<mtable groupalign="{decimalpoint left left decimalpoint left left decimalpoint}">
  <mtr>
    <mtd>
      <mrow>
        <mrow>
          <mrow>
            <maligngroup/>
            <mn> 8.44 </mn>
            <mo> &#x2062;<!--InvisibleTimes--> </mo>
            <maligngroup/>
            <mi> x </mi>
          </mrow>
          <maligngroup/>
          <mo> + </mo>
          <mrow>
            <maligngroup/>
            <mn> 55 </mn>
            <mo> &#x2062;<!--InvisibleTimes--> </mo>
            <maligngroup/>
            <mi> y </mi>
          </mrow>
        </mrow>
        <maligngroup/>
        <mo> = </mo>
        <maligngroup/>
        <mn> 0 </mn>
      </mrow>
    </mtd>
    </mtr>
    <mtr>
      <mtd>
        <mrow>
          <mrow>
            <mrow>
              <maligngroup/>
              <mn> 3.1 </mn>
              <mo> &#x2062;<!--InvisibleTimes--> </mo>
              <maligngroup/>
              <mi> x </mi>
            </mrow>
            <maligngroup/>
            <mo> - </mo>
            <mrow>
              <maligngroup/>
              <mn> 0.7 </mn>
              <mo> &#x2062;<!--InvisibleTimes--> </mo>
              <maligngroup/>
              <mi> y </mi>
            </mrow>
          </mrow>
          <maligngroup/>
          <mo> = </mo>
          <maligngroup/>
          <mrow>
            <mo> - </mo>
            <mn> 1.1 </mn>
          </mrow>
        </mrow>
      </mtd>
    </mtr>
  </mtable>
alignat example
3.5.4.7 単純な整列アルゴリズム

ここでは MathML レンダラがこの節で指定された整列を実行するための単純なアルゴリズムを示します。整列の仕様は(文字の左右端定義を除いて)決定的であるため、正しい MathML 整列アルゴリズムはこのアルゴリズムと同じ振る舞いになります。各 mtable 列(整列スコープ)は独立に扱うことができ、以下のアルゴリズムは一つの mtable 列に適用され、そこに含まれる整列要素と columnalign 属性を考慮します(参照:3.5.1 Table or Matrix)。RTL 文脈ではアルゴリズム内の左右を入れ替えてください。

注意

このアルゴリズムは実装で検証されるべきです。

  1. 列内の各表セルの内容についてレンダリングを計算し、すべての maligngroup および malignmark 要素に対して幅ゼロを使います。最終レンダリングは各整列グループや表セルに適用される水平シフトを除いて同一になります。
  2. 各整列グループについて、左端、整列点(malignmark で指定されていればそれ、そうでなければ左端)、および右端の水平位置を記録し、整列点の左右それぞれの側の幅を決定します。これら二つの「側幅」の和、すなわち整列点の左右の幅の和は整列グループの幅に等しくなります。
  3. 整列グループの各列を走査します。i 番目の走査は各表セル内の i 番目の整列グループを扱います。整列グループを持たないセルや i 番目より少ないグループしか持たないセルは無視されます。各走査では走査対象の整列グループについて二つの最大値を計算します:整列点の左側の最大幅と右側の最大幅です。
  4. 上で計算されたすべての最大幅の和(整列グループ列ごとに二つずつ)が一つの合計幅となり、これが整列グループを含む各表セルの幅になります。あるセル内の最大の整列グループ数を n と呼ぶと、各そのようなセルは 2n 個の横に並ぶ区画に分割され、i=1..n に対して L(i) と R(i) と呼ばれる区画が作られます。各 i について、すべての L(i) の幅は任意のセルの i 番目の整列グループが整列点の左に持つ幅の最大値であり、すべての R(i) の幅は右に持つ幅の最大値です。
  5. 各整列グループはブロックとして水平にシフトされ、L(i) と R(i) の区画の境界にその整列点が来るように配置されます。これにより各 i 番目グループの整列点が同一の水平位置になるように調整されます。

整列グループを含まない表セルの幅は初期レンダリングの一部として計算され、各セルごとに異なり得ますし、整列グループを含むセルで用いられる単一幅とも異なり得ます。両種類のセルに対するすべてのセル幅の最大値が列全体の幅を与えます。

列内の各セルの位置は、最も内側で明示的な値を持つ columnalign 属性を持つ周囲の mtablemtr、または mtd 要素の属性値に従って決定されます。これは整列グループを含むセルが列内でシフトされることを意味するかもしれませんが、各セルは同じ幅を持つため列内で同じ量だけシフトされ、対応する整列グループの整列点の垂直揃えは維持されます。

3.6 初等数学

2 次元の加算、乗算、筆算のような低学年で使われる数学は、表形式であることが多いです。 ただし、使用される具体的な表記は高等数学に比べて国ごとに大きく異なります。 さらに、初等数学ではしばしば途中の状態を示す例が提示され、MathML はこれらの中間的または意図的に欠落した部分的な形を表現できなければなりません。実際、これらの構成は「数学」を表すと同時に、記憶補助や手順のガイドを表しています。

初等数学での基本的な整列に使用される要素は次の通りです:

mstack

桁と演算子の行を整列させる

msgroup

同様の位置合わせを持つ行をグループ化する

msrow

桁と演算子を 1 行にまとめる

msline

スタックの行間に線を引く

mscarries

次の行に対する繰り上がり/繰り下がりや取り消し線を注釈する

mscarry

単一桁に対する繰り上がり/繰り下がりおよび/または取り消し線

mlongdiv

筆算(割り算)について、除数と商および中間計算のスタックを指定する

mstackmlongdiv はすべての初等数学レイアウトの親要素です。 mstackmlongdiv、および msgroup の子要素で、msrowmsgroupmscarries および msline 以外の要素は、 暗黙的に msrow に囲まれているかのように扱われます (行についての詳細は 3.6.4 Rows in Elementary Math <msrow> を参照してください)。

これらのスタッキング構造の主な用途は桁で整列された数の行を積み重ねることであり、 数字は常に左から右へ書かれるため、 mstack の列は常に左から右に処理されます; 実際に有効な全体の方向性(つまり dir 属性)は、 列や行内の繰り上がりの表示順序には影響せず、特に行内の演算子の順序にも影響しません (参照:3.1.5 Directionality)。

これらの要素は本節で説明され、その使用例が続きます。 2 次元の加算、減算、乗算、筆算に加えて、これらの要素は循環小数の表記のいくつかを表すためにも使えます。

以下に非常に簡単な 2 次元加算の例を示します:

<mstack>
  <mn>424</mn>
  <msrow> <mo>+</mo> <mn>33</mn> </msrow>
  <msline/>
</mstack>
\begin{array}{r}   424 \\   +33 \\   \hline \end{array}

さらに多くの例は 3.6.8 初等数学の例 に示されています。

3.6.1 文字の積み重ね <mstack>

3.6.1.1 説明

mstack は各桁で揃えられた数の行を配置するために使われます。 これは 2 次元の加減乗算のような多くの初等数学表記で一般的です。

mstack の子要素は、それぞれ前の行の下に積まれる行または行のグループを表し、任意の数の行を含めることができます。 msrow は 1 行を表し、 msgroup は複数行をグループ化して水平整列を一緒に調整できるようにし、 mscarries は次の行に適用される一連の繰り上がりを表し、 msline は行を分ける線を表します。 他の要素は暗黙的に msrow に囲まれているかのように扱われます。

各行は「桁」を含み、それらは列に配置されます。 (詳細は 3.6.4 Rows in Elementary Math <msrow> を参照してください)。 stackalign 属性と、msgroupmscarries、および msrowpositionshift 属性が、 どの桁に文字が属するかを決定します。

列の幅はその列の各「桁」の幅の最大値です — 繰り上がりは幅の計算に参加しません;幅ゼロとして扱われます。 要素が列に収まらないほど幅が大きい場合、charalign 属性で定義された通りに隣接列へオーバーフローします。 列に文字がない場合、その幅は現在の言語での 0 の幅と見なされます(多くのフォントではすべての数字が同じ幅です)。

mstack のレイアウト手順は次の通りです:

  1. 行の「桁」を決定する。

  2. 行内のすべての桁を最初に stackalign の値に従って整列する。

  3. 各行はその行を制御する position 属性(存在する場合)に基づいてその整列に対して位置決めされる。

  4. 各列の桁の最大幅を決定し、その列の短い・広いエントリは charalign 属性に従って揃えられる。

  5. mstack 要素の幅と高さは行と列に基づいて計算される。列からのオーバーフローはその計算の一部として用いられない。

  6. mstack 要素のベースラインは align 属性によって決定される。

3.6.1.2 属性

mstack 要素は、3.1.9 表示要素に共通の属性 に記載された属性に加えて以下の属性を受け取ります。

Name values default
align ("top" | "bottom" | "center" | "baseline" | "axis"), rownumber? baseline
mstack の縦方向の揃えを環境に対して指定します。 許される値とその意味は mtablealign 属性と同じです。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
stackalign "left" | "center" | "right" | "decimalpoint" decimalpoint
行を水平に整列するために使う列を指定します。 left の場合、行は左詰めに整列します; right の場合は右詰め; center の場合は中央の列(列数が偶数なら中央の右側)を使います。 position が非ゼロの行や shift の影響を受ける行は、適切な側に必要な数の空の列が追加されたかのように扱われます; 詳細は 3.6.3 Group Rows with Similar Positions <msgroup>3.6.4 Rows in Elementary Math <msrow> を参照してください。 decimalpoint の場合、使用される列は各行で mstyledecimalcharacter 属性(既定は ".")で指定された小数点文字を含む最も左側の列です。 行に小数点文字がない場合、行内の最初の数の右側に暗黙の小数点があると仮定されます。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
charalign "left" | "center" | "right" right
列内の桁の水平方向揃えを指定します。 コンテンツが列幅より大きい場合、揃えとは反対側へオーバーフローします。 例えば right の場合、コンテンツは左側へオーバーフローします;中央の場合は両側へオーバーフローします。 この余分は列幅計算や mstack の全体幅計算には参加しません。 このような場合、著者は列のオーバーフロー同士が衝突しないよう注意する必要があります。
比較は ASCII 大文字小文字を区別しない 方式で行われます。
charspacing length | "loose" | "medium" | "tight" medium
各列の間に置く空間の量を指定します。 繰り上がりが上に置かれない場合や特に幅がある場合は大きめの間隔が有用です。 キーワード loosemediumtight は繰り上がりや列内の他のエントリが幅広い場合に間隔を自動調整します。 これら 3 つの値は、具体的な値を考えずにレイアウトの見た目に柔軟性を持たせます。 いずれの場合も列間の間隔は固定量であり、列ごとに変化しません。
比較は ASCII 大文字小文字を区別しない 方式で行われます。

3.6.2 筆算(長除法) <mlongdiv>

3.6.2.1 説明

筆算の表記は世界中でかなり異なりますが、表記の核心は類似していることが多いです。 mlongdivmstack に似ており、長除法のレイアウトに使われます。 mlongdiv の最初の 2 つの子は、その順で除数と割り算の結果(商)です。 残りの子要素は mstack の子であるかのように扱われます。 筆算の表示に使われる線や区切りの配置は longdivstyle 属性で制御されます。

結果や除数は初等数学要素であってもよく、空の <mrow/> でもかまいません(MathML 3 で使われた特定の空要素 <none/> は本仕様では使われません)。 特に、msgroup が使われる場合、そのグループ内の要素は mstack を自ら形成するか、被除数の mstack の一部になるかは longdivstyle の値によります。 例えば米国式の除法では、商は被除数の mstack の一部として扱われますが、除数はそうではありません。 MathML は結果と除数が自分自身の mstack を形成するべきかどうかや、結果や除数に msline や他の初等数学要素が使われ、それらが被除数の mstack レイアウトに参加しない場合に何が起こるべきかは規定しません。

この節の残りでは、mstack について述べられることは、特に断らない限り mlongdiv にも適用されます。

3.6.2.2 属性

mlongdiv 要素は mstack 要素が受け取るすべての属性(3.1.9 表示要素に共通の属性 を含む)を受け取りますが、以下に示す属性も受け取ります。

longdivstyle に許される値はオープンエンドです。 準拠実装は扱えない値を無視してもよいですが、可能な限り多くの列挙値を描画することが推奨されます。 除算レイアウトの一部として描画される罫線は mathcolor で指定された色を使って描画されるべきです。

Name values default
longdivstyle "lefttop" | "stackedrightright" | "mediumstackedrightright" | "shortstackedrightright" | "righttop" | "left/\right" | "left)(right" | ":right=right" | "stackedleftleft" | "stackedleftlinetop" lefttop
長除法レイアウトのスタイルを制御します。名前は除数と商の被除数に対する位置を大まかに記憶しやすく表しています。
比較は ASCII case-insensitive 方式で行われます。

これらの表記が世界のさまざまな国で使われる長除法表記の例であることについては、3.6.8.3 Long Division の例を参照してください。上に挙げた値は次のような地域で一般的に使われます:

lefttop

米国、英国、その他で一般的に使われる表記

stackedrightright

フランスなどで一般的に使われる表記

mediumrightright

ロシアなどで一般的に使われる表記

shortstackedrightright

ブラジルなどで一般的に使われる表記

righttop

中国、スウェーデンなどで一般的に使われる表記

left/\right

オランダで一般的に使われる表記

left)(right

インドで一般的に使われる表記

:right=right

ドイツで一般的に使われる表記

stackedleftleft

アラビア諸国で一般的に使われる表記

stackedleftlinetop

アラビア諸国で一般的に使われる表記

3.6.3 同様の位置を持つ行のグループ化 <msgroup>

3.6.3.1 説明

msgroupmstack および mlongdiv 内で、 スタックの整列に対して類似した位置を持つ行をグループ化するために使われます。 明示的に与えられない場合、mstackmlongdiv の子要素は 暗黙的に msgroup に囲まれているかのように扱われます。

3.6.3.2 属性

msgroup 要素は、3.1.9 表示要素に共通の属性 に記載された属性に加えて以下の属性を受け取ります。

Name values default
position integer 0
このグループ内の行の水平位置を、包含する msgroup によって決定される位置(その position および shift 属性に従う)に対して相対的に指定します。 項目の結果として得られる位置値は包含する mstack または mlongdivstackalign で指定された列に相対的です。 正の値は各行を十の位側へ移動させ(10 の冪を掛けたように)、右側に空の列をパディングする効果を持ちます; 負の値は一の位側へ移動させ、左側にパディングします。 小数点は列として数えられ、負の値の場合は考慮する必要があります。
shift integer 0
このグループ内の連続する子(行またはグループ)に対する位置の増分シフトを指定します。値の解釈は position と同様ですが、各子(最初の子を除く)の位置を前の子に対して指定します。

3.6.4 初等数学の行 <msrow>

3.6.4.1 説明

msrowmstack の行を表します。 多くの場合、文脈から暗黙的に存在しますが、演算子 "+" や "-" を数と並べて 1 行に入れるような場合には明示的に使うと便利です。

mn 要素が msrow の子である場合(暗黙であっても)、その数は桁に分割され、桁は連続する列に配置されます。 その他の要素は mstyle を除き、次の列を占める単一の桁として扱われます。 mstyle はその子が直接 msrow の子であるかのように扱われますが、その子のスタイルは mstyle の属性によって影響されます。 空要素 <mrow/> は空の列を作るために使えます。

行は主として数であるかのように扱われ、数は常に左から右に表示されるため、列の表示順序は常に左から右です; トークン要素内(mn 以外)のテキストの双方向性は引き続き適用されますし、msrow の子の中の全体的な方向性も適用されます(これらは単一の桁として扱われます); 参照:3.1.5 Directionality

3.6.4.2 属性

msrow 要素は、3.1.9 表示要素に共通の属性 に記載された属性に加えて以下の属性を受け取ります。

Name values default
position integer 0
このグループ内の行の水平位置を、包含する msgroup によって決定される位置(その position および shift 属性に従う)に対して相対的に指定します。 結果の位置値は包含する mstack または mlongdivstackalign で指定された列に相対的です。 正の値は行を十の位側へ移動させ、右側に空列をパディングする効果を持ち、負の値は一の位側へ移動させ、左側にパディングします。小数点は列として数えられ、負の値の場合に考慮する必要があります。

3.6.5 繰り上がり・繰り下がり・取り消し線 <mscarries>

3.6.5.1 説明

mscarries 要素は、初等数学で現れる繰り上がり、繰り下がり、取り消し線などのさまざまな注釈に使われます。 子要素は mstack の行の要素に関連付けられます。 mscarriesmstackmlongdiv の最後の要素であることはエラーです。mscarries の各子は次の行の同じ列に適用されます。 これらの注釈は数として扱われるものを飾るために使用されるので、繰り上がりの列への割り当ては左から右へ進みます; 全体の方向性は繰り上がりの順序には適用されませんが、各繰り上がりの内容には適用される場合があります; 参照:3.1.5 Directionality

mscarries の子で mscarry または <mrow/> 以外のものは、暗黙的に mscarry に囲まれているかのように扱われます; ある列に繰り上がりが不要な場合は空要素 <mrow/> を使用します。 以前の MathML リリースでは <none/> が使われていましたが、これは空の <mrow/> と同等でした。 mscarries 要素は displaystylefalse に設定し、scriptlevel を 1 増やすので、子要素は通常より小さいフォントで表示されます(参照:3.1.6 Displaystyle and Scriptlevel)。 また scriptsizemultiplier のデフォルト値を変更します。 その効果は、継承される scriptsizemultiplier の値が依然としてデフォルトを上書きするべきである一方、mscarries の内部ではデフォルト値が 0.6 であるべき、ということです。 scriptsizemultipliermscarries 要素上で設定でき、その値は通常通り継承値を上書きします。

もし繰り上がりの行が隣接しているとき、最初の行の繰り上がりは第二(次の)行を、第二行が location=n を持つかのように注釈します。 これは第二行が描画しない場合でも、視覚的に(本仕様では未定義の)ある量の空間を表示時に使うことを意味します。

3.6.5.2 属性

mscarries 要素は、3.1.9 表示要素に共通の属性 に記載された属性に加えて以下の属性を受け取ります。

Name values default
position integer 0
このグループ内の行の水平位置を、包含する msgroup によって決定される位置(その position および shift 属性に従う)に対して相対的に指定します。 得られる位置値は包含する mstack または mlongdivstackalign で指定された列に相対的です。 この属性の解釈は msgroupmsrowposition と同じですが、下の列に対する各繰り上がりの関連付けを変えます。 例えば position=1 は最も右の繰り上がりを右から 2 番目の桁列に関連付けます。
location "w" | "nw" | "n" | "ne" | "e" | "se" | "s" | "sw" n
対応する列の下の文字に対する繰り上がりや借りの位置を指定します。 方位(コンパス方向)が値として使われ、デフォルトは文字の上に繰り上がりを置きます。
比較は ASCII case-insensitive 方式で行われます。
crossout ("none" | "updiagonalstrike" | "downdiagonalstrike" | "verticalstrike" | "horizontalstrike")* none
各繰り上がりの下にある列内容をどのように「取り消す」かを指定します; 1 つ以上の値を与えられ、すべての値が描画されます。 もし none が他の値と共に与えられた場合、それは無視されます。 異なる値の例については 3.6.8 初等数学の例 を参照してください。 取り消し線は対応する mscarry を持つ列にのみ適用されます。 取り消し線は mathcolor で指定された色で描画されるべきです。
比較は ASCII case-insensitive 方式で行われます。
scriptsizemultiplier number 継承 (0.6)
フォントサイズを変更する係数を指定します。 この属性が scriptsize 属性とどのように作用するかは 3.1.6 Displaystyle and Scriptlevel を参照してください。

3.6.6 単一の繰り上がり <mscarry>

3.6.6.1 説明

mscarrymscarries の内部で個々の列の繰り上がりを表すために使われます。 繰り上がりは幅がゼロであるかのように扱われ、その列の幅の計算には参加しません;したがって列境界を超えて描画されてもかまいません。 通常は暗黙ですが、この要素を明示的に使って包含する mscarrieslocationcrossout 属性を上書きすることができます。 また、内容に空の <mrow/> を使うことで実際の繰り上がりを表示せずに囲む mscarries による取り消し線を有効にする用途でも便利です。

3.6.6.2 属性

The mscarry element accepts the attributes listed below in addition to those specified in 3.1.9 Attributes common to presentation elements.

Name values default
location "w" | "nw" | "n" | "ne" | "e" | "se" | "s" | "sw" 継承
対応する列の下の文字に対する繰り上がりや借りの位置を指定します。 方位(コンパス方向)が値として使われます。
比較は ASCII case-insensitive 方式で行われます。
crossout ("none" | "updiagonalstrike" | "downdiagonalstrike" | "verticalstrike" | "horizontalstrike")* 継承
繰り上がりに関連する列内容がどのように取り消されるかを指定します; 1 つ以上の値を与えられ、すべて描画されます。もし none が他の値と共に与えられた場合、それは実質的に無視されます。 取り消し線は mathcolor で指定された色で描画されるべきです。
比較は ASCII case-insensitive 方式で行われます。

3.6.7 水平線 <msline/>

3.6.7.1 説明

mslinemstack 要素内に水平線を描きます。 線の位置、長さ、太さは属性で指定されます。 長さが指定されている場合、線は与えられた桁数を持つ数として位置決めされ描画されます。

3.6.7.2 属性

msline 要素は、3.1.9 表示要素に共通の属性 に記載された属性に加えて以下の属性を受け取ります。 線は mathcolor で指定された色で描画されるべきです。

Name values default
position integer 0
このグループ内の行の水平位置を、包含する msgroup によって決定される位置(その position および shift 属性に従う)に対して相対的に指定します。 得られる位置値は包含する mstack または mlongdivstackalign で指定された列に相対的です。 正の値は十の位側へ移動し、負の値は一の位側へ移動します。 小数点は列として数えられ、負の値の場合は考慮する必要があります。 既定の線長は mstack 全体にまたがるため、length が非ゼロに指定されない限り position は影響しません。
length unsigned-integer 0
線がまたがるべき列数を指定します。 '0'(既定)の値はその行の すべての 列をまたがることを意味します(この場合 position および stackalign は効果を持ちません)。
leftoverhang length 0
線が左端の列の左側にどれだけはみ出すかの追加量を指定します。
rightoverhang length 0
線が右端の列の右側にどれだけはみ出すかの追加量を指定します。
mslinethickness length | "thin" | "medium" | "thick" medium
線の太さを指定します。 線は高さ=0、深さ=mslinethickness を持つべきで、これにより msline の上端が周囲の文脈(存在する場合)のベースライン上に来るようになります。 (太さキーワード mediumthin、および thick の議論は 3.3.2 Fractions を参照してください。)
比較は ASCII case-insensitive 方式で行われます。

3.6.8 初等数学の例

3.6.8.1 加算と減算

2 次元の加算、減算、および乗算は通常、数、繰り上がり/繰り下がり、線、演算の符号を含みます。

以下は節の冒頭に示した例です: mn 要素内の桁は各列を占め、「+」も同様です。 列の下に空を入れるために <mrow/> が使われ、「4」の下を埋めて "+" がすべての被演算子の左に現れるようにしています。 msline に属性が与えられていないため、それがすべての列をまたいでいることに注意してください。

<mstack>
  <mn>424</mn>
  <msrow> <mo>+</mo> <mrow/> <mn>33</mn> </msrow>
  <msline/>
</mstack>
\begin{array}{@{}r@{}}    424 \\   +\phantom0 33 \\   \hline \end{array}

次の例は演算子を右に置く方法を示しています。演算子を右に置くのはオランダなどの国で標準的です。 この例では合計で 4 列ありますが、既定の整列が数の右側の暗黙の小数点であるため、どの行もパディングやシフトをする必要はありません。

<mstack>
  <mn>123</mn>
  <msrow> <mn>456</mn> <mo>+</mo> </msrow>
  <msline/>
  <mn>579</mn>
</mstack>
\begin{array}{l}   123 \\   456+ \\   \hline   579 \end{array}

次の二つの例は mscarriesmscarry<mrow/> を用いて列を埋める例を示します。 これらの例はまた借りの表示の 2 つの異なる方法も示しています。

<mstack>
  <mscarries crossout='updiagonalstrike'>
    <mn>2</mn>  <mn>12</mn>  <mscarry crossout='none'> <mrow/> </mscarry>
  </mscarries>
  <mn>2,327</mn>
  <msrow> <mo>-</mo> <mn> 1,156</mn> </msrow>
  <msline/>
  <mn>1,171</mn>
</mstack>
<mstack>
  <mscarries location='nw'>
    <mrow/>
    <mscarry crossout='updiagonalstrike' location='n'> <mn>2</mn> </mscarry>
    <mn>1</mn>
    <mrow/>
  </mscarries>
  <mn>2,327</mn>
  <msrow> <mo>-</mo> <mn> 1,156</mn> </msrow>
  <msline/>
  <mn>1,171</mn>
</mstack>

2 番目の例の MathML は取り消し線が単一の列にのみ起こるべきなので mscarry を使っています:

次の減算の例は下線付きの借りを示しています(例は スウェーデンの資料 に由来します)。 注目すべき点が二つあります: 繰り上がりには menclose が使われ、空の要素には <mrow/> が使われているので mscarry を使って取り消し線を作成できる点です。

<mstack>
  <mscarries>
    <mscarry crossout='updiagonalstrike'><mrow/></mscarry>
    <menclose notation='bottom'> <mn>10</mn> </menclose>
  </mscarries>
  <mn>52</mn>
  <msrow> <mo>-</mo> <mn> 7</mn> </msrow>
  <msline/>
  <mn>45</mn>
</mstack>
\begin{array}{r} \underbar{\scriptsize 10}\!\\ 5\llap{$/$}2\\ {}-{}7\\ \hline 45 \end{array}
3.6.8.2 乗算

以下は msgroupshift 属性の使用を示す単純な乗算の例です。最初の msgroup は暗黙でレイアウトを変更しません。 2 番目の msgroup は削除することもできますが、その場合最後の 2 つの子には msrow が必要になります。 それらの msrowposition または shift を設定するか、右側の桁を埋めるために <mrow/> を追加する必要があります。

<mstack>
  <msgroup>
    <mn>123</mn>
    <msrow><mo>×</mo><mn>321</mn></msrow>
  </msgroup>
  <msline/>
  <msgroup shift="1">
    <mn>123</mn>
    <mn>246</mn>
    <mn>369</mn>
  </msgroup>
  <msline/>
</mstack>

次は複数行の繰り上がりを持つより複雑な乗算の例です。カンマ(",")を桁区切りとして含めています。エンコーディングはこれらの区切りをスペーシング属性値に、非 ASCII 値と共に含めています。

<mstack>
  <mscarries><mn>1</mn><mn>1</mn><mrow/></mscarries>
  <mscarries><mn>1</mn><mn>1</mn><mrow/></mscarries>
  <mn>1,234</mn>
  <msrow><mo>×</mo><mn>4,321</mn></msrow>
  <msline/>

  <mscarries position='2'>
    <mn>1</mn>
    <mrow/>
    <mn>1</mn>
    <mn>1</mn>
    <mn>1</mn>
    <mrow/>
    <mn>1</mn>
  </mscarries>
  <msgroup shift="1">
    <mn>1,234</mn>
    <mn>24,68</mn>
    <mn>370,2</mn>
    <msrow position="1"> <mn>4,936</mn> </msrow>
  </msgroup>
  <msline/>

  <mn>5,332,114</mn>
</mstack>
\begin{array}{r}  {}_1 {\hspace{0.05em}}_1\phantom{0} \\  {}_1 {\hspace{0.05em}}_1\phantom{0} \\   1,234 \\   \times 4,321 \\   \hline  {}_1 \phantom{,} {\hspace{0.05em \,}}_1 {\hspace{0.05em}}_1  {\hspace{0.05em}}_1 \phantom{,} {\hspace{0.05em \,}}_1 \phantom{00} \\   1,234 \\   24,68\phantom{0} \\   370,2\phantom{00} \\   4,936\phantom{,000} \\   \hline   5,332,114 \end{array}
3.6.8.3 筆算(長除法)

長除法で使われる表記は国によって大きく異なります。ほとんどの表記は中間結果を揃え、引かれる被演算子のための線を引くという共通の特徴を持ちます。中間計算にマイナス記号を表示する場合としない場合があり、描画される線の長さも表記によって異なります。 最も明白な差は除数の位置や商、剰余、中間項の位置が異なることです。

使用されるレイアウトは longdivstyle 属性で制御されます。 以下は 3.6.2.2 属性 に列挙された値の例です。

lefttop stackedrightright mediumstackedrightright shortstackedrightright righttop
left/\right left)(right :right=right stackedleftleft stackedleftlinetop

最初の例の MathML は下に示します。ネストされた msgroup の使用と、その場合の position の計算方法を示しています。

<mlongdiv longdivstyle="lefttop">
  <mn> 3 </mn>
  <mn> 435.3</mn>

  <mn> 1306</mn>

  <msgroup position="2" shift="-1">
    <msgroup>
      <mn> 12</mn>
      <msline length="2"/>
    </msgroup>
    <msgroup>
      <mn> 10</mn>
      <mn> 9</mn>
      <msline length="2"/>
    </msgroup>
    <msgroup>
      <mn> 16</mn>
      <mn> 15</mn>
      <msline length="2"/>
      <mn> 1.0</mn>           <!-- aligns on '.', not the right edge ('0') -->
    </msgroup>
    <msgroup position='-1'>   <!-- extra shift to move to the right of the "." -->
      <mn> 9</mn>
      <msline length="3"/>
      <mn> 1</mn>
    </msgroup>
  </msgroup>
</mlongdiv>

最後の例を除き、他の例のエンコーディングはほとんど同じで、longdivstyle の値が異なることと、小数点に "." の代わりに "," が使われている点のみが異なります。 最後の例では他の例と異なる点は、longdivstyle の値が異なることに加え、ラテン数字の代わりにアラビア数字が使われていることだけです。

<mstyle decimalpoint="٫">
  <mlongdiv longdivstyle="stackedleftlinetop">
    <mn> ٣ </mn>
    <mn> ٤٣٥٫٣</mn>

    <mn> ١٣٠٦</mn>
    <msgroup position="2" shift="-1">
      <msgroup>
        <mn> ١٢</mn>
        <msline length="2"/>
      </msgroup>
      <msgroup>
        <mn> ١٠</mn>
        <mn> ٩</mn>
        <msline length="2"/>
      </msgroup>
      <msgroup>
        <mn> ١٦</mn>
        <mn> ١٥</mn>
        <msline length="2"/>
        <mn> ١٫٠</mn>
      </msgroup>
      <msgroup position='-1'>
        <mn> ٩</mn>
        <msline length="3"/>
        <mn> ١</mn>
      </msgroup>
    </msgroup>
  </mlongdiv>
</mstyle>
3.6.8.4 循環小数

1/3(0.3333...)のように桁が無限に繰り返す小数は、いくつかの表記で表されます。一般的な表記の一つは繰り返す桁の上に水平線を置く方法です(ポルトガルでは下線が使われます)。 もう一つの表記は繰り返す桁の上に点を置く方法です。 これらの MathML は mstackmsrow、および msline を使って直接的に表せます。 以下にこれらの表記を示します:

<mstack stackalign="right">
  <msline length="1"/>
  <mn> 0.3333 </mn>
</mstack>
0.33333 \overline{3}
<mstack stackalign="right">
  <msline length="6"/>
  <mn> 0.142857 </mn>
</mstack>
0.\overline{142857}
<mstack stackalign="right">
  <mn> 0.142857 </mn>
  <msline length="6"/>
</mstack>
0.\underline{142857}
<mstack stackalign="right">
  <msrow> <mo>.</mo> <mrow/><mrow/><mrow/><mrow/> <mo>.</mo> </msrow>
  <mn> 0.142857 </mn>
</mstack>
0.\dot{1}4285\dot{7}

3.7 式を活性化する

3.7.1 部分式にアクションをバインドする

maction 要素は式にアクションを結び付けるための仕組みを提供します。 この要素は任意個の部分式を引数として受け取り、どのようなアクションが行われるかは actiontype 属性で制御されます。 MathML 3 では 4 種類のアクション(togglestatuslinestatusline、および input)が定義されていました。 しかし、どのアクションを実装できるかはプラットフォームに強く依存するため、MathML 4 ではこれらのアクションが具体的に何を行うかをあらかじめ定義していません。 さらに、Web 環境では JavaScript に結び付けられたイベントでアクションを実行する方が強力な解決策であり、maction はそのようなイベントを付加するための便利なラッパー要素を提供します。

ローカルに(math 要素内で)あるいは任意の URL へのリンク付けは maction では扱われません。 代わりに、MathML 要素上に直接リンクを追加する方法で処理されます(詳細は 7.4.4 Linking を参照)。

3.7.1.1 属性

maction 要素は、3.1.9 Attributes common to presentation elements に記載された属性に加えて以下の属性を受け取ります。

指定された actiontype を認識しない MathML アプリケーション、あるいは actiontype 属性自体が存在しない場合、既定では選択された部分式を以下に定義する方法でレンダリングすべきです。もし選択された部分式が存在しない場合は MathML のエラーとなり、そのときの適切なレンダリングは D.2 Handling of Errors に記載された通りです。

Name values default
actiontype string
この要素に対して何が起こるべきかを指定します。 許される値はオープンエンドです。準拠するレンダラは処理できない値を無視してよいです。
selection positive-integer 1
表示に使う子要素を指定します。その値は 1 から要素の子要素数の範囲であるべきです。 指定された子は maction 要素の「選択された部分式」と呼ばれます。指定された値が範囲外であればエラーです。selection 属性が指定されない場合(意味がないアクションタイプへの使用を含む)は既定値は 1 であり、したがって選択された部分式は最初の部分式になります。

MathML アプリケーションが MathML の部分式を環境の「クリップボード」へコピーするユーザー操作に応答する場合(詳しくは 7.3 Transferring MathML を参照)、コピーされる内容に含まれる maction 要素は、コピー時の MathML 表示におけるそれらの選択状態に対応する selection 値を持つべきです。

ある MathML アプリケーションがマウスイベントを受け取り、そのイベントが 2 つ以上のネストした maction 要素で処理され得る場合、各アクションタイプごとに最も内側の maction 要素がイベントに応答するべきです。

actiontype の値はオープンエンドです。別の値が与えられ、それが追加の属性を必要とする場合、それらの属性は "data-" で始めるか、XML では別の名前空間に置かれるべきです。

<maction actiontype="highlight" data-color="red" data-background="yellow"> expression </maction>

この例では、非標準の data 属性がレンダラに追加情報を渡すために使われています。 data-color 属性は表示中の文字の色を変更し、 data-background 属性は文字の背景色を変更するかもしれません。

3.8 意味論と表現

MathML は semantics 要素を用いて、プレゼンテーション MathML 要素に意味的な注釈を指定できるようにします;これらはコンテンツ MathML や他の表記であり得ます。そのため、semantics はプレゼンテーション MathML とコンテンツ MathML の両方の一部と見なされるべきです。すべての MathML プロセッサは、たとえ一方のサブセットしか処理しない場合でも semantics 要素を処理するべきです。

意味的注釈において、プレゼンテーション MathML 式は通常 semantics 要素の最初の子として置かれます。しかし、それは semantics 要素内の annotation-xml 要素の中に与えられることもあります。もし annotation-xml 要素の一部であるならば、encoding=application/mathml-presentation+xml または encoding=MathML-Presentation が使われ得て、プレゼンテーション MathML プロセッサはこの値をプレゼンテーションに使うべきです。

semantics および annotation-xml 要素の詳細については、6. Annotating MathML: semantics を参照してください。

4. コンテンツ マークアップ

4.1 導入

4.1.1 コンテンツ マークアップの目的

コンテンツ マークアップの目的は、式の特定の表記ではなく、式の根底にある数学的意味を明示的に符号化することです。数学表記は時に曖昧で文脈依存であり、コミュニティごとに異なります。多くの場合、根底にある形式的な数学的対象を直接扱う方が望ましいです。コンテンツ マークアップはこの目的のために、厳密で拡張可能な意味論的フレームワークとマークアップ言語を提供します。

提示方法に関係なく根底の数学的構造を明示的に符号化することで、数学的対象を意味的に処理するシステム間で情報をより正確に交換することが可能になります。重要な適用分野には、計算機代数システム、自動推論システム、産業および科学アプリケーション、多言語翻訳システム、数学検索、オンライン評価の自動採点、対話型教科書などがあります。

本章では、コンテンツ マークアップを定義するために用いられる基本概念の概要を提示し、Strict Content Markup を構成するコア要素のコレクションを説明し、一般的な数学的慣用表現をサポートするための完全な要素集合を定義します。Strict Content Markup は意味的に厳密な方法で一般的な式木を符号化し、コンテンツ MathML の完全な要素セットは以前のバージョンのコンテンツ マークアップとの後方互換性を提供します。完全なコンテンツ マークアップと Strict Content Markup 間の対応は、任意のコンテンツ マークアップを Strict Content Markup に翻訳するためのアルゴリズムを詳述する F. The Strict Content MathML Transformation に定義されています。

4.1.2 コンテンツ式

コンテンツ MathML は数学的対象を式の木(expression trees)として表現します。一般に、式の木は演算子を一連の部分式に適用することによって構成されます。例えば和 x+y は加算演算子を二つの引数 xy に適用した結果として構成できますし、式 cos(π) はコサイン関数を数 π に適用したものとして構成できます。

式木の終端ノードは数、変数、算術演算子などの基本的な数学的対象を表します。木の内部ノードは関数適用や複合対象を構築するその他の数学的構成を表します。

MathML は比較的少数の一般的な数学的構成を定義しており、広範な用途で十分となるよう選ばれています。加えて、それが定義する集合の外の概念を参照する仕組みを提供しており、それらも表現できるようにしています。

定義されているコンテンツ要素の集合は、米国の幼稚園から大学初年度二年程度(ヨーロッパの A レベルやバカロレア程度)までで通常使われる式の簡単な符号化に十分であるように設計されています。

コンテンツ MathML 要素セットの主な役割は、式の数学的構造をそれを提示するために使われる表記から独立に符号化することです。ただし、レンダリングの問題を無視することはできません。コンテンツ MathML 式をレンダリングする方法はいくつかあり、MathML 要素のネイティブ実装から、宣言的な表記定義、XSLT スタイルシートまで多様です。コンテンツ MathML のレンダリング要件は広範にわたるため、MathML は規範的なレンダリング仕様を提供しません。代わりに、提示マークアップを用いた例によって典型的なレンダリングが示唆されます。

4.1.3 式の概念

コンテンツ MathML 式の基本構成要素は、識別子、および 記号 です。これらの構成要素は関数適用や束縛演算子を用いて結合されます。

x + 2 において、数値 2 は固定された値を持つを表します。コンテンツ MathML は数値量を表すために cn 要素を使用します。識別子 x は数学的変数、すなわちあらかじめ値が定まっていない量を表します。コンテンツ MathML は変数識別子を表すために ci 要素を使用します。

プラス記号は加算関数、すなわち外部で定義された固定の対象を表す識別子です。このような識別子は変数と区別するために記号と呼ばれます。一般的な初等関数や演算子はこの意味で記号です。コンテンツ MathML は記号を表すために csymbol 要素を使用します。

数、変数、記号を結合する基本的な方法は関数適用です。コンテンツ MathML は関数自体(例えば正弦関数のような記号、f のような変数、あるいは他の式であり得る)と、その関数を引数に適用した結果とを区別します。apply 要素は関数とその引数を構文的にまとめ、関数を引数に適用した結果の式を表します。

4.1.4 変数の束縛

式の中で、変数は束縛された(bound)変数または自由(free)変数として記述されることがあります。束縛変数は束縛式のスコープ内で特別な役割を持ち、そのスコープ内で一貫して名前を変更しても式の意味は変わりません。自由変数は式内で束縛されていないものです。コンテンツ MathML は自由変数への関数適用(例:f(x))と、変数をスコープ内で束縛する演算とを区別します。bind 要素は束縛変数のスコープを区切り、束縛演算子とその束縛変数をまとめるために用いられます。束縛変数は bvar 要素を使って供給されます。

Strict Content マークアップでは、変数束縛を行う唯一の方法は bind 要素を使うことです。非 Strict Content マークアップでは、和や積分のようなよく知られた慣用表記により近い他のマークアップ要素が提供されます。これらの構成は積分変数や総和の添字変数のように暗黙に変数を束縛する場合があります。MathML はこれらの構成に必要な補助データを表す要素を 修飾子要素(qualifier element) と呼びます。

修飾子を含む式は少数の慣用パターンのいずれかに従います。各パターンは同様の束縛演算子のクラスに適用されます。例えば総和と積は同じクラスに属し、同じパターンの添字変数を使います。Content MathML の演算子クラスは 4.3.4 Operator Classes に詳述されています。

4.1.5 厳格なコンテンツMathML

MathML 3 以降、Strict Content MathML は数学式の意味を一様な構造で表現するのに十分な最小のコンテンツ MathML の部分集合として定義されています。完全なコンテンツ MathML 要素集合は MathML 2 との後方互換性を保持し、冗長性と形式性の間で実用的なバランスをとっています。

コンテンツ MathML はあらかじめ定義された多くの関数を空要素として符号化します(例:sinlog 等)および複合対象を形成するための様々な構成(例:setinterval 等)を提供します。これに対し Strict Content MathML は既知の全関数を単一の要素(csymbol)で表し、その属性で拡張可能なコンテンツ辞書中の定義を指し示し、複合式を構築するのに applybind のみを使用します。cnci のようなトークン要素は Strict Content MathML の一部と見なされますが、属性のセットがより制限され、内容はテキストに限定されます。

コンテンツ MathML 式の形式意味論は、等価な Strict Content MathML 式を指定することによって与えられます。これらはすべてコンテンツ辞書に基づいて形式的意味論が定義されます。各非 Strict コンテンツ MathML 構造とその Strict 等価物との正確な対応は、F. The Strict Content MathML Transformation に示された変換アルゴリズムの一部として使われる書き換え規則の形で記述されています。

F. The Strict Content MathML Transformation に記載されたアルゴリズムは、任意のコンテンツ MathML 式に対して特定の意味を Strict Content MathML 式の形で与えるという意味で完全です。場合によっては、MathML 2 では十分に指定されていなかった式に対して具体的な厳密解釈を与えることがあります。このアルゴリズムの目標は自然な数学的直感に忠実であることですが、いくつかの境界ケースではアルゴリズムが与える特定の解釈が以前の期待と一致しない場合が残り得ます。

準拠する MathML プロセッサはこのアルゴリズムを実装する必要はありません。これらの変換規則が存在することは、システムが等価な式を同一に扱わなければならないことを意味しません。特に、変換規則が数学的に等価であることを示唆する式に対して、システムが異なる提示レンダリングを与えることはあり得ます。一般に、コンテンツ MathML はそれが符号化する式の計算上の振る舞いに関する期待(特定の式の等価性を含むがそれに限定されない)を定義しません。

Strict Content MathML は、形式的な数学的対象と意味論を表現する標準である OpenMath と互換性を持つよう設計されています。Strict Content MathML は OpenMath オブジェクトの XML エンコーディングとして [OpenMath] の意味で位置づけられます。以下の表は Strict Content MathML 要素と OpenMath の等価物との対応を示します。

Strict Content MathML OpenMath
cn OMI, OMF
csymbol OMS
ci OMV
cs OMSTR
apply OMA
bind OMBIND
bvar OMBVAR
share OMR
semantics OMATTR
annotation, annotation-xml OMATP, OMFOREIGN
cerror OME
cbytes OMB

4.1.6 コンテンツ辞書

数学式の意味を形式化するためのどんな方法も拡張可能でなければなりません。すなわち、議論の領域を拡張するために新しい関数や記号を定義する能力を提供しなければなりません。コンテンツ MathML は新しい記号を表すのに csymbol 要素を使い、これらの数学的意味を記述するためにコンテンツ辞書(Content Dictionaries)を使用します。記号とその意味記述との関連付けは、csymbol 要素の属性を用いてコンテンツ辞書中の記号の定義を指すことで行われます。

Content MathML の演算子要素とコンテンツ辞書中の記号定義との対応は E.3 The Content MathML Operators に示されています。これらの事前定義された MathML 演算子記号の定義は OpenMath Society によって作成されたコンテンツ辞書を参照しており、W3C Math Working Group と連携しています。この情報は参考情報であり規範的ではないことに注意してください。一般に、事前定義された記号の正確な数学的意味は MathML 推奨仕様によって完全には指定されておらず、記号意味論に関する規範的な記述は本章の本文にあるものだけです。OpenMath コンテンツ辞書によって提供される意味定義はほとんどの用途に十分であり、本推奨仕様の類似する構成に対して指定された意味論と概ね互換性があります。しかし、高度に正確な意味論が要求される文脈(例:計算機代数システム間の通信、定理証明系のような形式系内など)では、実務上の関係コミュニティが OpenMath コンテンツ辞書の定義を検証、拡張、または置換する責任があることに注意してください。

4.2 Content MathML 要素 — 式構造のエンコーディング

この節では、Content MathML 式の構造をエンコードするための要素を示します。これらの要素は Strict Content MathML エンコーディングでのみ使用される要素です。具体的には、以下を含みます。

Full Content MathML はさらに 4.3 特定構造のための Content MathML に示された要素を許容し、本節で示すより豊富なコンテンツモデルを許可します。Strict と非 Strict の使用の差異は、以下で各 Strict 要素を議論する節で強調されています。

4.2.1 数値 <cn>

スキーマ断片(Strict) スキーマ断片(Full)
クラス Cn Cn
属性 CommonAtt, type CommonAtt, DefEncAtt, type?, base?
type 属性値 integer | real | double | hexdouble     integer | real | double | hexdouble | e-notation | rational | complex-cartesian | complex-polar | constant | text デフォルトは real
base 属性値 integer デフォルトは 10
内容 テキスト (text | mglyph | sep | PresentationExpression)*

cn 要素は数値を表すために使用される Content MathML の要素です。Strict Content MathML は整数、実数、および倍精度浮動小数点数をサポートします。これらの種類の数値において、cn の内容はテキストです。さらに、cnsep 要素を用いて区切られた有理数や複素数をサポートします。sep を用いる構成は、以下に示すように Strict Content MathML では apply を用いる構成へ書き換え可能です。

type 属性は cn 要素で表される数の種類を指定します。デフォルト値は real です。それぞれの type は内容が特定の形式であることを意味します。以下に詳細を示します。

4.2.1.1 <cn>、<sep/> で表現された数値のレンダリング

cn のテキスト内容のデフォルトのレンダリングは Presentation 要素 mn のそれと同じです。ただし、属性や sep を使用する場合には変種の提示が推奨されます。以下に列挙します。

4.2.1.2 Strict における <cn> の使用

Strict Content MathML では type 属性は必須であり、取り得る値は integerrealhexdouble、または double のみです:

integer

整数は、任意の符号の後に 1 つ以上の 10 進の桁の列が続くことで表現されます。

real

実数は基数表記(radix notation)で表されます。基数表記は、任意の符号(+ または -)に続き、整数部分と小数部分が小数点で区切られた桁列から成ります。例として 0.3、1、-31.56 等があります。

double

この型は IEEE 754 規格で表せる倍精度浮動小数点数をマークアップするために使用されます[IEEE754]。これには実数の一部、負のゼロ、正負の無限大、ならびに NaN の集合が含まれます。cn のテキスト内容を IEEE double として解釈する字句規則は XML Schema Part 2: Datatypes の該当節で定められています。例:-1E4, 1267.43233E12, 12.78e-2, 12, -0, 0, INF などはこの形式で有効な double です。

hexdouble

この型は IEEE 754 倍精度浮動小数点数の 64 ビットを直接 16 桁の 16 進数として表現します。すなわち、最下位バイト順で仮数、指数、符号を表す 16 桁の 0-9, A-F の列です。以下の例は NaN を表します。注意:例のような特定の IEEE double は double の字句形式では表せない場合があります。

<cn type="hexdouble">7F800000</cn>

サンプル表示

<mn>0x7F800000</mn>
0x7F800000
4.2.1.3 非 Strict における <cn> の使用

base 属性は内容の解析方法を指定するために用いられます。属性値は 10 進で表された正の整数であり、cn のテキスト内容が解釈される基数を示します。baseinteger または real 型の要素でのみ使用すべきであり、それ以外の型での使用は非推奨です。base のデフォルト値は 10 です。

type 属性には、実数の e-表記、 有理数、複素数、または選択された重要な定数をサポートするための追加値があります。これらの各 type もまた内容が特定の形式であることを要求します。type 属性が省略された場合、デフォルトは real です。

integer

整数は基数 10 以外に関しても表現できます:base が存在する場合、(10 進で表された)その属性値が桁のエンコーディングに使用される基数を指定します。したがって base='16' は 16 進を意味します。base > 10 の場合、ラテン文字 (A-Z, a-z) が桁としてアルファベット順に使用されます。文字の大文字小文字は桁としては区別されません。以下の例は 10 進数 32736 をエンコードしています。

<cn base="16">7FE0</cn>

サンプル表示

<msub><mn>7FE0</mn><mn>16</mn></msub>
7FE0 16

base > 36 の場合、一部の整数は文字と数字だけでは表現できなくなります。例えば、

<cn base="1000">10F</cn>

は 10 進で 1,000,015 を表していると解釈できるかもしれませんが、10 進で 1,000,037 を表すものは base=1000 のとき文字と数字だけで表せないことがあります。したがって、base > 36 の場合に使用可能な追加文字のサポート(もしあれば)はアプリケーション固有になります。

real

実数は 10 以外の基数に関しても表現可能です。base 属性が存在する場合、桁はその基数に相対した桁として解釈されます(integer 型の場合と同様)。

e-notation

実数はこの型を使って指数表記で表せます。この場合、数は 2 部分(有効数字と指数)からなり、<sep/> 要素で区切られます。最初の部分は実数、第二の部分は基数の冪を示す整数指数です。

例えば <cn type="e-notation">12.3<sep/>5</cn> 12.3 × 10 5 を表します。デフォルトの表示は 12.3e5 です。この型は主に MathML 2 との互換性のために有用であり、ほとんどの場合、表現したい数が IEEE double の範囲にあるなら double を使う方が好ましいです:

rational

有理数は分子と分母の 2 つの整数として与えられます。分子と分母は <sep/> によって区切られます。

<cn type="rational">22<sep/>7</cn>

サンプル表示

<mrow><mn>22</mn><mo>/</mo><mn>7</mn></mrow>
22 / 7
complex-cartesian

複素数(直交形式)は実部と虚部の 2 つの数で与えられます。実部と虚部は <sep/> 要素で区切られ、各部分は上で述べた実数の形式を満たします。

<cn type="complex-cartesian"> 12.3 <sep/> 5 </cn>

サンプル表示

<mrow>
  <mn>12.3</mn><mo>+</mo><mn>5</mn><mo>&#x2062;<!--InvisibleTimes--></mo><mi>i</mi>
</mrow>
12.3 + 5 i
complex-polar

複素数(極形式)は大きさと角度の 2 つの数で与えられます。大きさと角度は <sep/> 要素で区切られ、各部分は上で述べた実数形式を満たします。

<cn type="complex-polar"> 2 <sep/> 3.1415 </cn>

サンプル表示

<mrow>
  <mn>2</mn>
  <mo>&#x2062;<!--InvisibleTimes--></mo>
  <msup>
    <mi>e</mi>
    <mrow><mi>i</mi><mo>&#x2062;<!--InvisibleTimes--></mo><mn>3.1415</mn></mrow>
  </msup>
</mrow>
2 e i 3.1415
<mrow>
  <mi>Polar</mi>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mrow><mo>(</mo><mn>2</mn><mo>,</mo><mn>3.1415</mn><mo>)</mo></mrow>
</mrow>
Polar ( 2 , 3.1415 )
constant

もし typeconstant であれば、内容はよく知られた定数の Unicode 表現であるべきです。重要な定数とその一般的な Unicode 表現のいくつかは下に一覧されています。

この cn 型は主に MathML 1.0 との下位互換のためのものです。MathML 2.0 は多くの空要素(例えば定数を表す <pi/>)を導入したため、これらの表現や Strict な csymbol 表現を使うことが推奨されます。

type 属性の追加値に加えて、cn 要素の内容は(Strict Content MathML でも許される sep に加えて)Unicode に存在しない文字を参照するための mglyph 要素や、レンダリングのために用いられる一般的なプレゼンテーション構成(3.1.8 プレゼンテーション要素の概要)を含めることができます(詳細は 4.1.2 Content Expressions を参照)。

もし base 属性が存在する場合、それは整数の桁エンコーディングに用いられる基数を指定します。rational 型に対して base を用いることは非推奨です。

4.2.2 Content 識別子 <ci>

スキーマ断片(Strict) スキーマ断片(Full)
クラス Ci Ci
属性 CommonAtt, type? CommonAtt, DefEncAtt, type?
type 属性値 integer| rational| real| complex| complex-polar| complex-cartesian| constant| function| vector| list| set| matrix 文字列
修飾子 BvarQ, DomainQ, degree, momentabout, logbase
内容 テキスト テキスト | mglyph | PresentationExpression

Content MathML は ci 要素("content identifier" の記憶術)を使って変数を構成します。Content 識別子は「数学的変数」を表し、特性は持つが固定値を持ちません。例えば式 x+y における xy は変数であり、変数 x は次のように表されます:

<ci>x</ci>

MathML では、変数は外部定義を持つ記号(記号には固定の外部定義がある)と区別され、記号は csymbol 要素で表されます。

空白の正規化の後、ci 要素の内容はそれを識別する名前として解釈されます。同じスコープ内で名前が同一である場合に限り、二つの変数は等しいと見なされます(スコープについては 4.2.6 束縛と束縛変数 <bind><bvar> を参照)。

4.2.2.1 Strict における <ci> の使用

ci 要素はその表すオブジェクトの基本型を指定するために type 属性を使用します。Strict Content MathML では許容される値は integer, rational, real, complex, complex-polar, complex-cartesian, constant, function, vector, list, set および matrix です。これらの値は OpenMath の Content Dictionary における対応するシンボルに対応します:以下の二つの式は同等であると見なされます。

<ci type="integer">n</ci>
<semantics>
  <ci>n</ci>
  <annotation-xml cd="mathmltypes" name="type" encoding="MathML-Content">
    <csymbol cd="mathmltypes">integer_type</csymbol>
  </annotation-xml>
</semantics>

注意:complexcomplex-cartesian の別名と見なすべきであり、同じ OpenMath シンボルに書き換えられます。リテラルを cn でエンコードする際に直交形式と極形式の区別が影響するだけなので、complexci に対して自然な型名であるかもしれません。

4.2.2.2 非 Strict における <ci> の使用

ci 要素は type 属性に任意の文字列値を許容します。特に MathML のコンテナ要素名やその型名のいずれも指定可能です。

より高度な型の取り扱いには type 属性は不適切です。高度な型はそれ自体でかなりの内部構造を必要とします(例えば vector(complex) のような型)ため、数学的オブジェクトとして構成し、semantics 要素を通して MathML 式に関連付けるのが適切です。詳細は [MathML-Types] を参照してください。

4.2.2.3 Content 識別子のレンダリング

もし ci の内容が Presentation MathML によるタグ付けを含む場合、そのプレゼンテーションが使用されます。そうしたタグ付けがない場合、テキスト内容は mi 要素の内容であるかのようにレンダリングされます。アプリケーションが双方向テキスト表示をサポートする場合、レンダリングは Unicode の双方向レンダリングに従います。

type 属性はレンダリング情報を提供するために解釈される場合があります。例えば、

<ci type="vector">V</ci>

という例では、レンダラはベクトルを示すために太字の V を表示することができます。

4.2.3 Content 記号 <csymbol>

スキーマ断片(Strict) スキーマ断片(Full)
クラス Csymbol Csymbol
属性 CommonAtt, cd CommonAtt, DefEncAtt, type?, cd?
内容 SymbolName テキスト | mglyph | PresentationExpression
修飾子 BvarQ, DomainQ, degree, momentabout, logbase

csymbol は外部定義を持つ特定の数学概念を参照するために使用されます。式 x+y におけるプラス記号は加算関数という特定の外部定義を持つため記号であり、MathML ではこのような識別子を 記号 と呼びます。基本的な関数や一般的な数学演算子は記号の例です。ここでの「記号」は抽象的な意味で用いられており、画面や紙での特定の表現とは関係がありません。

4.2.3.1 Strict における <csymbol> の使用

csymbol は属性を通じてその表す具体的な数学概念を参照します。概念的には外部定義への参照は URI に過ぎませんが、ユーザエージェント間で有用にするためには外部定義が共有されている必要があります。

このため、体系的で公開された数学定義のリポジトリを開発する長年の努力が行われてきました。最も重要なのは OpenMath 社が維持する Content Dictionary(CD)のリポジトリであり、MathML 3 では OpenMath CD が外部定義の好ましいソースです。特に、MathML 3 の事前定義された演算子や関数の定義は OpenMath CD で与えられます。

MathML 3 は外部定義や Content Dictionary を参照するために二つのメカニズムを提供します。第一は cd 属性を使う方法で、これは OpenMath が CD を参照するために確立した慣習に従います。これは Strict Content MathML で要求される形式です。第二は definitionURL 属性を使用する方法で、MathML 2 との後方互換性を保ち、CD や他の任意の定義ソースを URI で参照するのに使えます。次節で詳述します。

OpenMath CD を参照する際の推奨方法は cd 属性を用いることです。抽象的には、OpenMath シンボル定義はシンボル名、CD 名、CD base(同名の CD を区別する URI)という三つ組で識別されます。csymbol にそのような三つ組を関連付けるために、csymbol の内容にシンボル名を、cd 属性に Content Dictionary の名前を指定します。CD base は csymbol を含む math 要素を埋め込む文書から決定されるか、システムのデフォルト、または囲む math 要素に指定される cdgroup 属性から決定されます。具体的な情報がない場合、http://www.openmath.org/cdcsymbol 要素や annotationannotation-xml に対する CD base として仮定されます。これは OpenMath 社が管理する標準 CD コレクションの CD base です。

cdgroup は OpenMath CD Group ファイルへの URL を指定します。CD Group ファイルの形式の詳細は [OpenMath] 中の節を参照してください。概念的には CD group ファイルは CD 名と対応する CD base の対のリストです。csymbolcd 属性で CD 名を参照すると、その名前は CD Group ファイルでルックアップされ、対応する CD base がその csymbol に使われます。CD Group ファイルが指定されていて参照された CD 名がグループファイルに存在しない、またはグループファイルの取得にエラーがある場合、参照している csymbol は定義されません。ただし、その場合のエラー処理は定義されておらずユーザエージェントの責任です。

外部定義は URI として表現されますが、CD ファイルが URI を URL として解釈した位置で取得可能であることが強く推奨されます。特に、シンボルの他のプロパティ(定義、例、その他の形式的プロパティ)が Content Dictionary を精査することで利用可能になる場合があります。なお、OpenMath Content Dictionary のエンコーディングは複数あり、取得時に正しいエンコーディングを判断するのはユーザエージェントの責任です。

4.2.3.2 非 Strict における <csymbol> の使用

上記の形式に加えて、csymbol 要素は Unicode に存在しない文字を参照するための mglyph 要素や、レンダリングに使用される一般的なプレゼンテーション構成(3.1.8 プレゼンテーション要素の概要)を含むことができます。この場合、Strict Content MathML に書き出す際は csymbol を ci 要素として扱い、Rewrite: ci presentation mathml を用いて書き換えるべきです。

外部定義(OpenMath CD 等)は definitionURL 属性を用いて csymbol に直接指定することもできます。OpenMath シンボル定義に用いる場合、(シンボル名, CD 名, CD base)の三つ組は次のように完全修飾 URI にマップされます:

URI = cdbase + '/' + cd-name + '#' + symbol-name

例えば、

(plus, arith1, http://www.openmath.org/cd)

は次にマップされます:

http://www.openmath.org/cd/arith1#plus

得られた URI は definitionURL 属性の値として指定されます。

この参照形式は MathML2 との後方互換性や、RDF や OMDoc のような URI ベースのフレームワーク内で Content MathML を利用しやすくするために便利です。また、CD 内のシンボル名が csymbol 要素の内容と一致する必要がないという利点もあります。しかし一般に、この方法は MathML インスタンスを大幅に長くする傾向があります。さらに、CD が開発中であるような状況では CD Group ファイルの使用により CD の配置を変更してもマークアップ自体を変更する必要がないという利点があります。definitionURL の欠点は、cd 属性と異なり OpenMath Content Dictionary に限定されない任意のソースを参照できるため、ユーザエージェントが文脈やコミュニティの慣習に関する追加情報なしに自動的に正しい解釈を決定することは一般に不可能である点です。

cddefinitionURL の両方の機構は同一の MathML インスタンス内で併用できます。ただし、単一の csymbolcddefinitionURL の両方が指定された場合、cd が優先されます。

4.2.3.3 記号のレンダリング

もし csymbol の内容がプレゼンテーションタグで付けられていれば、そのプレゼンテーションが使用されます。そうしたタグ付けが無い場合、テキスト内容は mi の内容であるかのようにレンダリングされます。特に、アプリケーションが双方向テキスト表示をサポートしている場合、レンダリングは Unicode の双方向レンダリングに従います。

4.2.4 文字列リテラル <cs>

スキーマ断片(Strict) スキーマ断片(Full)
クラス Cs Cs
属性 CommonAtt CommonAtt, DefEncAtt
内容 テキスト テキスト

cs 要素は Content MathML 式で使用できる「文字列リテラル」をエンコードします。

cs の内容はテキストです。非 Strict マークアップのときでもプレゼンテーション MathML 構成は許されません。具体的には、csmglyph 要素を含めることはできず、内容は空白正規化を受けません。

Content MathML

<set>
  <cs>A</cs><cs>B</cs><cs>  </cs>
</set>

サンプル表示

<mrow>
  <mo>{</mo>
  <ms>A</ms>
  <mo>,</mo>
  <ms>B</ms>
  <mo>,</mo>
  <ms>&#xa0;&#xa0;</ms>
  <mo>}</mo>
</mrow>
{ A , B ,    }

4.2.5 関数適用 <apply>

スキーマ断片(Strict) スキーマ断片(Full)
クラス Apply Apply
属性 CommonAtt CommonAtt, DefEncAtt
内容 ContExp+ ContExp+ | (ContExp, BvarQ, Qualifier?, ContExp*)

数学における複合オブジェクトを作る最も基本的な方法は、関数や演算子を引数に適用することです。

4.2.5.1 厳格なコンテンツMathML

MathML では apply 要素を使って関数や演算子をその引数に適用することを表す式木を構築します。結果の木は完全な数学式に対応します。おおまかに言えば、これは意味を変えずに括弧で囲むことができるような数学の一片です。

例えば (x + y) は次のようにエンコードできます:

<apply><csymbol cd="arith1">plus</csymbol><ci>x</ci><ci>y</ci></apply>

apply の開始タグと終了タグは、演算子や関数の適用のスコープを正確に指定します。apply の最も典型的な使い方は単純かつ再帰的です。記号的には内容モデルは次のように説明できます:

<apply> op [ a b ...] </apply>

ここで被演算子 a, b, ... は MathML 式木自身であり、op は演算子や関数を表す MathML 式木です。apply 構成は任意の深さにネストできます。

apply は原理的に任意個のオペランドを持てます。例えば (x + y + z) は次のようにエンコードできます:

<apply><csymbol cd="arith1">plus</csymbol>
  <ci>x</ci>
  <ci>y</ci>
  <ci>z</ci>
</apply>

注意:MathML はオペランドなしの適用も許可します。例:random() や current-date() のような関数を表すためです。

操作が混在する数学式は apply の入れ子で表されます。例えば a x + b は次のようにエンコードされます:

<apply><csymbol cd="arith1">plus</csymbol>
  <apply><csymbol cd="arith1">times</csymbol>
    <ci>a</ci>
    <ci>x</ci>
  </apply>
  <ci>b</ci>
</apply>

式を正しく解析するために括弧や演算子優先順位を導入する必要はありません。apply タグが再利用される表現の適切なグルーピングを提供します。apply で囲まれた任意の式は定義が明確で、その解釈は周囲の文脈に依存しません。これは表示マークアップとは対照的で、表示では同じ見た目が文脈によって非常に異なる意味を持ち得ます。例えば表示的に (F+G)(x) と見えるものは乗算を意味することもあれば、関数 F+G の x に対する適用を意味することもあります。これらは apply の構成によって区別されます。

上の例は、apply 構成では関数も引数も単純な識別子であり得るし、より複雑な式であり得ることを示しています。

apply 要素は関数/演算子とそれの使用事例を区別するために概念的に必要です。関数を 0 個以上の引数に適用してできる式は常にその関数の値域の元です。適切な使用は適用される演算子に依存します。例えば plus は 0 個以上の引数を持てる一方、minus は正しく形成されるために 1 個または 2 個の引数を必要とします。

4.2.5.2 適用のレンダリング

Strict Content MathML の適用は数学的な関数適用としてレンダリングされます。もし <mi>F</mi><ci>f</ci> のレンダリングを示し、 <mi>Ai</mi><ci>ai</ci> のレンダリングを示すとすると、単純な適用のサンプルレンダリングは次のようになります:

Content MathML

<apply><ci>f</ci>
  <ci>a1</ci>
  <ci>a2</ci>
  <ci>...</ci>
  <ci>an</ci>
</apply>

サンプル表示

<mrow>
  <mi>F</mi>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mrow>
    <mo fence="true">(</mo>
    <mi>A1</mi>
    <mo separator="true">,</mo>
    <mi>...</mi>
    <mo separator="true">,</mo>
    <mi>A2</mi>
    <mo separator="true">,</mo>
    <mi>An</mi>
    <mo fence="true">)</mo>
  </mrow>
</mrow>
F ( A1 , ... , A2 , An )

非 Strict MathML の適用は修飾子(qualifiers)とともに使用されることがあります。既知の演算子に対するより具体的なレンダリング規則がない場合、レンダリングは以下のサンプル表示に従うべきです(例は sum に動機づけられています)。<mi>Op</mi><ci>op</ci> のレンダリング、<mi>X</mi><ci>x</ci> のレンダリングとすると、次のようになります:

Content MathML

<apply><ci>op</ci>
  <bvar><ci>x</ci></bvar>
  <domainofapplication><ci>d</ci></domainofapplication>
  <ci>expression-in-x</ci>
</apply>

サンプル表示

<mrow>
  <munder>
    <mi>Op</mi>
    <mrow><mi>X</mi><mo></mo><mi>D</mi></mrow>
  </munder>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mrow>
    <mo fence="true">(</mo>
    <mi>Expression-in-X</mi>
    <mo fence="true">)</mo>
  </mrow>
</mrow>
Op X D ( Expression-in-X )

4.2.6 束縛と束縛変数 <bind><bvar>

多くの複雑な数学式は束縛変数の使用によって構成され、束縛変数は論理や形式言語の重要な概念です。変数は量化子の範囲内で束縛されます。非形式的には、積分、和、積、論理量化子(全称、存在)などの式における「ダミー変数」と考えられます。束縛変数は、その変数名を(式中にまだ出現しない名前に)一貫して置換しても式の意味が変わらないという性質で特徴づけられます。

4.2.6.1 束縛(Bindings)
スキーマ断片(Strict) スキーマ断片(Full)
クラス Bind Bind
属性 CommonAtt CommonAtt, DefEncAtt
内容 ContExp, BvarQ*, ContExp ContExp, BvarQ*, Qualifier*, ContExp+

束縛式は bind 要素を用いて MathML 式木として表されます。最初の子は束縛演算子(例えば積分演算子)を表す MathML 式であり、その後に 1 個以上の bvar 要素(束縛変数を示す)が続き、最後に本体(binding の body)となる一般的な Content MathML 式が続きます。

4.2.6.2 束縛変数(Bound Variables)
スキーマ断片(Strict) スキーマ断片(Full)
クラス BVar BVar
属性 CommonAtt CommonAtt, DefEncAtt
内容 ci | semantics-ci (ci | semantics-ci), degree? | degree?, (ci | semantics-ci)

bvar 要素は和、積、量化子、ユーザ定義関数などの束縛式の束縛変数を示すために使用されます。

bvar の内容は「注釈付き変数」(annotated variable)であり、これは ci 要素で表される content identifier か、最初の子が注釈付き変数である semantics 要素のいずれかです。二番目の種類の注釈付き変数の名前はその最初の子の名前です。束縛変数の名前は bvar 要素内の注釈付き変数の名前です。

束縛変数はその名前を比較することで識別されます。識別を明示的に行うために、bvar 内の ciid を付け、他の出現箇所で xref 属性を用いて参照することができます。次の例はこの方法を示します:

<bind><csymbol cd="quant1">forall</csymbol>
  <bvar><ci id="var-x">x</ci></bvar>
  <apply><csymbol cd="relation1">lt</csymbol>
    <ci xref="var-x">x</ci>
    <cn>1</cn>
  </apply>
</bind>

この id ベースの方法は、束縛変数を含む構成がネストしている場合に特に有用です。

束縛変数に追加情報(詳細な数学型、代替表現、エンコーディング、適用領域など)を関連付ける必要があることがあります。そのような関連付けは、ci 要素(bvar 内にあっても)を置き換えて、その中に ci と追加情報を含む semantics 要素を入れることで行います。束縛変数の認識は依然として実際の ci 要素に基づいて行われ、semantics 要素やそれが含むものには基づきません。上で述べた id に基づくアプローチは引き続き利用できます。

次の例は x . x + y = y + x をエンコードしています。

<bind><csymbol cd="quant1">forall</csymbol>
  <bvar><ci>x</ci></bvar>
  <apply><csymbol cd="relation1">eq</csymbol>
    <apply><csymbol cd="arith1">plus</csymbol><ci>x</ci><ci>y</ci></apply>
    <apply><csymbol cd="arith1">plus</csymbol><ci>y</ci><ci>x</ci></apply>
  </apply>
</bind>

非 Strict Content マークアップでは bvar 要素はいくつかの慣用構成で用いられます。これらは 4.3.3 修飾子(Qualifiers) および 4.3 特定構造のための Content MathML で説明されています。

4.2.6.3 束縛変数の名前変更(α-変換)

束縛変数は親の bind 要素の範囲内で一貫して名前を変更できるという性質を持ちます。この操作はしばしば α-変換 と呼ばれ、式の意味を保存します。

束縛変数 x は、たとえば y に名前を変更できますが、その条件は y が束縛本体の自由変数や、束縛変数の注釈、後続の束縛変数のいずれにも現れていないことです。

ある束縛変数が名前変更される場合、その bvar 要素内の注釈中の自由出現、後続の bvar 子、及び bind の本体中の全ての自由出現は変更されるべきです。

前節の例では、x を z に名前変更すると等価な式 z . z + y = y + z , 一方で x y に名前変更することはできません。なぜなら y は束縛の本体に自由変数として現れており、捕獲され、次の式 y . y + y = y + y を生じ、元の式とは同値ではないからです。

4.2.6.4 束縛構成のレンダリング

もし <ci>b</ci><ci>s</ci> がそれぞれ <mi>B</mi><mi>S</mi> としてレンダリングされる Content MathML 式であるならば、束縛要素のサンプルレンダリングは次のようになります:

Content MathML

<bind><ci>b</ci>
  <bvar><ci>x1</ci></bvar>
  <bvar><ci>...</ci></bvar>
  <bvar><ci>xn</ci></bvar>
  <ci>s</ci>
</bind>

サンプル表示

<mrow>
  <mi>B</mi>
  <mrow>
    <mi>x1</mi>
    <mo separator="true">,</mo>
    <mi>...</mi>
    <mo separator="true">,</mo>
    <mi>xn</mi>
  </mrow>
  <mo separator="true">.</mo>
  <mi>S</mi>
</mrow>
B x1 , ... , xn . S

4.2.7 構造共有 <share>

XML エンコーディングの空間を節約するために、MathML 式木は構造共有を利用できます。

4.2.7.1 <share> 要素
スキーマ断片
クラス Share
属性 CommonAtt, src
src 属性値 URI
内容

share 要素は src 属性を持ち、MathML 式木を参照します。src の値は式木の根ノードの id 属性を指定する URI です。式木を構築する際、share 要素は参照された式木のコピーと同等です。このコピーは構造的に等しいが同一ではないことに注意してください。share の値は相対 URI 参照であることが多く、その場合は share を含む文書の base URI を用いて解決されます。

例えば数学的オブジェクト f(f(f(a,a),f(a,a)),f(f(a,a),f(a,a))) は以下のいずれかの表現でエンコードできます(中間形もあります)。

<apply><ci>f</ci>
  <apply><ci>f</ci>
    <apply><ci>f</ci>
      <ci>a</ci>
      <ci>a</ci>
    </apply>
    <apply><ci>f</ci>
      <ci>a</ci>
      <ci>a</ci>
    </apply>
  </apply>
  <apply><ci>f</ci>
    <apply><ci>f</ci>
      <ci>a</ci>
      <ci>a</ci>
    </apply>
    <apply><ci>f</ci>
      <ci>a</ci>
      <ci>a</ci>
    </apply>
  </apply>
</apply>
<apply><ci>f</ci>
  <apply id="t1"><ci>f</ci>
    <apply id="t11"><ci>f</ci>
      <ci>a</ci>
      <ci>a</ci>
    </apply>
    <share src="#t11"/>



  </apply>
  <share src="#t1"/>









</apply>
4.2.7.2 非巡回性制約(Acyclicity Constraint)

ある要素がその子とそれらが支配するすべての要素を「支配する」と定義しましょう。また share 要素はそのターゲット(id 属性を持つ要素)も支配するとします。例えば右側の表現では、apply 要素 id="t1" と第二の share(src="#t11")の両方が id="t11" を持つ apply 要素を支配します。

share の出現は次のグローバルな非巡回性制約に従わなければなりません:要素は自分自身を支配してはならない。例えば以下の表現はこの制約に違反します:

<apply id="badid1"><csymbol cd="arith1">divide</csymbol>
  <cn>1</cn>
  <apply><csymbol cd="arith1">plus</csymbol>
    <cn>1</cn>
    <share src="#badid1"/>
  </apply>
</apply>

ここで、id="badid1" の apply は第三子を支配し、それが share を支配し、そのターゲットは id="badid1" の要素です。したがって推移的に、その要素は自分自身を支配しています。非巡回性制約によりこの例は有効な MathML 式木ではありません。このような式は連分数のように解釈できるかもしれませんが、share を置換して式木を構築する手続きは終了しないため、Content MathML では許されません。

非巡回性制約は単純な場合に限定されません。以下の例も示す通りです:

<apply id="bar">                        <apply id="baz">
  <csymbol cd="arith1">plus</csymbol>     <csymbol cd="arith1">plus</csymbol>
  <cn>1</cn>                              <cn>1</cn>
  <share src="#baz"/>                    <share src="#bar"/>
</apply>                                </apply>

ここでは id="bar" の apply が第三子(src="#baz")を支配し、そのターゲットである id="baz" の要素がさらに src="#bar" の share を支配し、最終的に元の id="bar" を支配することになり、非巡回性制約に違反します。

4.2.7.3 構造共有と束縛

share 要素は構文的な参照機構です:share 要素は指し示す正確な要素の代わりになります。特に参照は束縛と直感的に相互作用しないため、変数の捕獲(variable capture)が生じ得ます。次の例を考えてください:

<bind id="outer"><csymbol cd="fns1">lambda</csymbol>
  <bvar><ci>x</ci></bvar>
  <apply><ci>f</ci>
    <bind id="inner"><csymbol cd="fns1">lambda</csymbol>
      <bvar><ci>x</ci></bvar>
      <share id="copy" src="#orig"/>
    </bind>
    <apply id="orig"><ci>g</ci><ci>x</ci></apply>
  </apply>
</bind>

これは項 λx.f(λx.g(x),g(x)) を表します。明示的に表現された項の一方では変数 x は外側の bind によって束縛されていますが、コピーされた方ではその変数 x は内側の bind によって束縛されます。これを変数捕獲と言います。

このように変数を捕獲する参照を使うと表現上のエラーにつながりやすく、推奨されません。例えば内側の x を y に α-変換で名前変更すると等価な式が得られますが、その形では g(x) を共有することができなくなります。内側の bvar の x を y に置き換えても share 要素を置き換えないと意味が変わってしまいます。

4.2.7.4 構造共有を伴う式のレンダリング

share 要素のレンダリングにはいくつかの許容される方法があります。参照要素へのハイパーテキストリンクとしてレンダリングすることや、src 属性が指す要素のレンダリングを使用することが含まれます。

4.2.8 属性付与 via semantics

Content 要素は semantics 要素を介して追加情報で注釈することができます。MathML は注釈された要素と注釈自体を表す annotation-xml および annotation 要素をラップするために semantics を使用します。semantics, annotation, annotation-xml の使用法は 6. 注釈付き MathML: semantics に詳細に記述されています。

semantics 要素はプレゼンテーション MathML と Content MathML の両方の一部とみなされます。MathML はその最初の子が(strict な)Content MathML である場合に限り、その semantics 要素を(strict)Content MathML と見なします。

4.2.9 エラーマークアップ <cerror>

スキーマ断片(Strict) スキーマ断片(Full)
クラス Error Error
属性 CommonAtt CommonAtt, DefEncAtt
内容 csymbol, ContExp* csymbol, ContExp*

content error 式は最初に csymbol が続き、ゼロ個以上の MathML 式が続く構成です。最初の子はエラーの種類を示す csymbol でなければなりません。続く子が存在する場合、それらはエラーが発生した文脈を示します。

cerror 要素自体に直接的な数学的意味はありません。エラーは式木に対して何らかの操作が行われた結果として生じるものであり、通信の際に実際に関心が持たれることが多いです。エラーは他のオブジェクトや他のエラーの内部に現れることもあります。

例として、0 による除算エラーをエンコードするために仮想的な aritherror Content Dictionary に含まれる DivisionByZero シンボルを用いることができます。例えば:

<cerror>
  <csymbol cd="aritherror">DivisionByZero</csymbol>
  <apply><csymbol cd="arith1">divide</csymbol><ci>x</ci><cn>0</cn></apply>
</cerror>

エラーのマークアップは一般に最小の誤った部分式だけを囲むべきです。したがって cerror はしばしばより大きな式の部分式となります。例:

<apply><csymbol cd="relation1">eq</csymbol>
  <cerror>
    <csymbol cd="aritherror">DivisionByZero</csymbol>
    <apply><csymbol cd="arith1">divide</csymbol><ci>x</ci><cn>0</cn></apply>
  </cerror>
  <cn>0</cn>
</apply>

cerror 要素のデフォルト表示は merror 式であり、その第一子はエラーシンボルのプレゼンテーションで、続く子は cerror の残りの子のデフォルトプレゼンテーションです。特に、残りの子のうちの一つが既にプレゼンテーション MathML 式であれば、それは対応する merror 内で文字通り使用されます。

<cerror>
  <csymbol cd="aritherror">DivisionByZero</csymbol>
  <apply><csymbol cd="arith1">divide</csymbol><ci>x</ci><cn>0</cn></apply>
</cerror>

サンプル表示

<merror>
  <mtext>DivisionByZero:&#160;</mtext>
  <mfrac><mi>x</mi><mn>0</mn></mfrac>
</merror>
DivisionByZero:  x 0

文脈があまりに無意味でデフォルトの表示が有用でない場合、アプリケーションはエラー文脈の代替表現を提供することができます。例えば:

<cerror>
  <csymbol cd="error">Illegal bound variable</csymbol>
  <cs> &lt;bvar&gt;&lt;plus/&gt;&lt;/bvar&gt; </cs>
</cerror>

4.2.10 エンコードされたバイト列 <cbytes>

スキーマ断片(Strict) スキーマ断片(Full)
クラス Cbytes Cbytes
属性 CommonAtt CommonAtt, DefEncAtt
内容 base64 base64

cbytes の内容は、Base64 エンコーディングによる文字列の列としてバイトのストリームを表します。つまり、[XMLSchemaDatatypes] で定義された base64Binary データ型に一致します。すべての空白は無視されます。

cbytes 要素は主に OpenMath との互換性のために使用されますが、OpenMath と同様に、システムの内部状態に関するバイナリデータや画像データなど、MathML でエンコードするのが難しいシステムの出力をカプセル化するために使用される場合があります。

cbytes のレンダリングは内容を表現することが期待されておらず、提案されるレンダリングは空の mrow としてのものです。通常 cbytesannotation-xml の中で使用されるか、あるいはそれ自体が Presentation MathML によって注釈されるため、このデフォルトのレンダリングが用いられることはまれです。

4.3 特定構造のための Content MathML

前節で説明した Strict Content MathML の要素は、論理的な主張や式の構造をエンコードするのに十分であり、数学の基礎を支える標準的な数学論理の構成を密にモデル化する方法でそれを行います。その結果、Strict マークアップは数学の全体を表現するために用いることができ、すべての Content MathML 式に対して一貫した数学的意味論を提供するのに理想的です。

同時に、数学の多くの記法的慣用は Strict Content マークアップで直接表現するのが簡単ではありません。例えば、総和、積分、集合、区分的関数(piecewise functions)やその他多くの一般的な構成の標準的記法は、Strict マークアップで厳密にエンコードするためにラムダ関数の導入など非自明な技術的手段を必要とすることがあります。したがって、Content MathML をより使いやすくするために、そのような慣用的構成をより直接にエンコードするための追加要素群が提供されています。本節ではそのような慣用構成をエンコードするための一般的なアプローチと、それらの Strict Content に対応する同等表現について論じます。個々の構成は 4.3 特定構造のための Content MathML で詳述されています。

Content マークアップが扱う慣用構成のほとんどは約十二のクラスに分類されます。これらのうちいくつかのクラス、例えば コンテナ要素 のようなものは独自の構文を持ちます。同様に、ごく少数の非 Strict 構成は、partialdiff のように例外的な構文を持つ単一要素を伴います。これらの例外要素は 4.3 特定構造のための Content MathML で個別に議論されます。しかし、大部分の構成は、特定の使用法を共有する演算子要素のクラスから成り、それらは 修飾子(qualifiers) を共通して利用します。これらの演算子クラスは 4.3.4 演算子クラス で説明されています。

いずれの場合も、非 Strict の式はすべて Strict マークアップだけを用いて書き換えることができます。ほとんどの場合、その変換は完全にアルゴリズム的で自動化可能です。非 Strict 構成のクラスに対する書き換え規則は本節後半で導入・議論され、単一の演算子を含む例外的構成に対する書き換え規則は 4.3 特定構造のための Content MathML に示されます。任意の Content MathML を Strict Content マークアップに書き換えるための完全なアルゴリズムは章末の F. The Strict Content MathML Transformation に要約されています。

4.3.1 コンテナマークアップ

多くの数学的構造は部分やパラメータから構成されます。例えば集合は要素の集合を含む数学的対象であるため、集合のマークアップがその構成要素のマークアップを含むのは自然です。集合のマークアップは要素を列挙して明示的に集合を定義するか、修飾子要素を用いる規則で暗黙的に定義することができます。いずれの場合でも、要素のマークアップが集合のマークアップの内部に含まれるこの表現様式は MathML では コンテナマークアップ と呼ばれます。これに対して Strict マークアップは、集合のインスタンスを引数に対する関数または コンストラクタ記号 の適用結果として表現します。この様式では、集合構築のマークアップは囲む apply 要素内で集合要素のマークアップの兄弟となります。

MathML は次の数学的構成に対してコンテナマークアップを提供します:集合、リスト、区間、ベクトル、行列(2 要素)、区分関数(3 要素)およびラムダ関数。これらに対応する Strict マークアップのコンストラクタ記号が存在しますが、ラムダ関数については例外で、それは Strict マークアップでは束縛記号に対応します。

コンテナマークアップから同等の Strict Content マークアップを得るための書き換え規則は、該当する演算子の 演算子クラス に依存します。特定のコンテナ要素についての詳細は、その要素の構文表および説明(E. The Content MathML Operators)を参照して演算子クラス(および該当する特別事例)を確認し、F. The Strict Content MathML Transformation に記載されたその特定の演算子クラスの書き換え規則を適用してください。

4.3.1.1 コンストラクタ記号のためのコンテナマークアップ

コンストラクタに対応するコンテナ要素への引数は、子要素の列として明示的に与えられるか、修飾子を用いた規則によって暗黙的に与えられます。例外は intervalpiecewisepiece、および otherwise 要素であり、これらの要素の引数は明示的に指定されなければなりません。

明示的に指定された引数を持つコンテナマークアップの例を示します:

<set><ci>a</ci><ci>b</ci><ci>c</ci></set>

これは以下の Strict Content MathML 式と同等です:

<apply><csymbol cd="set1">set</csymbol><ci>a</ci><ci>b</ci><ci>c</ci></apply>

引数の一覧が束縛変数を持つ式として間接的に与えられるコンテナマークアップの別の例。偶数整数の集合のコンテナマークアップは次のようになります:

<set>
  <bvar><ci>x</ci></bvar>
  <domainofapplication><integers/></domainofapplication>
  <apply><times/><cn>2</cn><ci>x</ci></apply>
</set>

これは Strict Content MathML では次のように書けます:

<apply><csymbol cd="set1">map</csymbol>
  <bind><csymbol cd="fns1">lambda</csymbol>
    <bvar><ci>x</ci></bvar>
    <apply><csymbol cd="arith1">times</csymbol>
      <cn>2</cn>
      <ci>x</ci>
    </apply>
  </bind>
  <csymbol cd="setname1">Z</csymbol>
</apply>
4.3.1.2 束縛コンストラクタのためのコンテナマークアップ

lambda 要素は、fns1 Content Dictionary の lambda 記号に対応するコンテナ要素です。しかし、前節の他のコンテナ要素が単に引数から数学的対象を構築するのに対して、lambda 要素は変数束縛も行います。したがって、lambda の子要素は区別された役割を持ちます。特に、lambda 要素は少なくとも 1 個の bvar 子を持たなければならず、続いて任意の 修飾子要素 が続き、その後に Content MathML 要素が続きます。この lambda コンテナと他のコンストラクタコンテナとの基本的な違いは、それらに対応する OpenMath 記号にも反映されています。コンストラクタ記号は OpenMath 上で application の役割を持ちますが、lambda 記号は bind の役割を持ちます。

この例は lambda コンテナ要素の使用と、Strict Content MathML における等価な bind の使用を示します

<lambda><bvar><ci>x</ci></bvar><ci>x</ci></lambda>
<bind><csymbol cd="fns1">lambda</csymbol>
  <bvar><ci>x</ci></bvar><ci>x</ci>
</bind>

4.3.2 <apply> を使った束縛

MathML では、非 Strict 構成において変数束縛を行うのに bind 要素の代わりに apply 要素を使うことが許されています。この使用法は MathML 2 との後方互換性を保ちます。また、後述の修飾子を持つ束縛変数を含むいくつかの構成のエンコードを簡素化します。

apply 要素を束縛に使うことは二つの状況で許されます。第一は、適用される演算子自体が束縛演算子である場合で、この場合 apply 要素は単に bind 要素の代わりになります。論理量化子の <forall/><exists/> やコンテナ要素 lambda が主要な例です。

第二の状況は、適用される演算子が修飾子付きの束縛変数の使用を許す場合に生じます。この最も一般的な例は総和や積分です。これらの多くの場合、変数束縛は記法上暗黙的であり、等価な Strict 表現は形式的な正しさのためにラムダ式の導入などの補助構成を必要とします。

修飾子を持つ束縛変数を含む式は慣用的であり、必ずしも真の変数束縛を伴わないことがあるため、apply を使って「束縛された」変数を系統的に名前変更(α-変換)しても常に意味が保たれるとは限りません。例として diff 要素があり、そこでは bvar 項は技術的には真に束縛されていないことがあります。

次の例は束縛演算子とともに apply を使用する場合を示します。この場合、対応する Strict 等価は単に applybind に置き換えるだけです:

<apply><forall/>
  <bvar><ci>x</ci></bvar>
  <apply><geq/><ci>x</ci><ci>x</ci></apply>
</apply>

等価な Strict 式は次の通りです:

<bind><csymbol cd="logic1">forall</csymbol>
  <bvar><ci>x</ci></bvar>
  <apply><csymbol cd="relation1">geq</csymbol><ci>x</ci><ci>x</ci></apply>
</bind>

この例では sum 演算子自身は束縛演算子ではありませんが、修飾子付きの束縛変数が標準記法で暗黙的に含まれており、非 Strict マークアップに反映されています。等価な Strict 表現では、被和関数(summand)をラムダ式に変換し、修飾子を引数式として書き換える必要があります:

<apply><sum/>
  <bvar><ci>i</ci></bvar>
  <lowlimit><cn>0</cn></lowlimit>
  <uplimit><cn>100</cn></uplimit>
  <apply><power/><ci>x</ci><ci>i</ci></apply>
</apply>

等価な Strict 式は:

<apply><csymbol cd="arith1">sum</csymbol>
  <apply><csymbol cd="interval1">integer_interval</csymbol>
    <cn>0</cn>
    <cn>100</cn>
  </apply>
  <bind><csymbol cd="fns1">lambda</csymbol>
    <bvar><ci>i</ci></bvar>
    <apply><csymbol cd="arith1">power</csymbol>
      <ci>x</ci>
      <ci>i</ci>
    </apply>
  </bind>
</apply>

4.3.3 修飾子(Qualifiers)

多くの一般的な数学構成は、演算子といくつかの追加データを伴います。追加データは、束縛変数のように従来の記法で暗黙的であったり、定積分の限界のように演算子の一部と見なされます。MathML 3 はそのような場合に追加データを表すために 修飾子(qualifier) 要素を使用します。

修飾子要素は常に演算子またはコンテナ要素と結び付けて使用されます。その意味は慣用的で使用される文脈に依存します。演算子とともに使われるとき、修飾子は常に演算子の直後に置かれ、存在する引数より前に出ます。いずれの場合でも、複数の修飾子がある場合は次の順序で現れます:bvar, lowlimit, uplimit, interval, condition, domainofapplication, degree, momentabout, logbase

修飾子要素の正確な機能は、それらが修飾する演算子やコンテナによって決まります。使用例の大部分は以下で述べる幾つかのカテゴリのいずれかに該当し、特定の演算子と修飾子の使用上の注意は 4.3 特定構造のための Content MathML に示されています。

4.3.3.1 <domainofapplication><interval><condition><lowlimit> および <uplimit> の使用
Class qualifier
Attributes CommonAtt
Content ContExp

interval の構文については 4.3.10.3 Interval <interval> を参照してください。)

domainofapplicationintervaluplimitlowlimit および condition の主な用途は、束縛変数の値を制限することです。最も一般的な修飾子は domainofapplication で、演算が行われる集合(順序や距離などの追加構造を持つ場合もある)を指定するのに用いられます。interval 修飾子および lowlimituplimit の組は、集合が区間である特殊な場合に束縛変数を集合に制限します。注意:intervalbvar に直後に続く場合にのみ修飾子として解釈されます。condition 修飾子は domainofapplication と同様に一般的であり、束縛変数を任意の集合に制限するために使えます。しかし他の修飾子と異なり、Boolean 値を返す束縛変数の関数を指定することで束縛変数を制限する点で異なります。したがって condition 修飾子は常に束縛変数の出現を含み、したがって先行する bvar を必要としますが、他の修飾子はそうではありません。他の修飾子は変数が束縛されていない場合でも(例えば関数の定義域の限定を示すために)使用できます。

ほとんどの場合、関心のある領域を表現できる修飾子はいずれも互換的に使用できます。最も一般的な修飾子は domainofapplication であり、特別な慣用的理由(例えば積分の限界を示すなど)がない限りこれが優先されます。MathML 3 では他の形式は domainofapplication の略記と見なされ、すべて同等な domainofapplication 構成に書き換えられます。以下にその書き換え規則を示します。他の修飾子要素は慣用的な記法に対応し、表示へのマッピングが容易であるため、自然に使われる状況では domainofapplication より便利で直接的です。

これらの考え方を例で示すために、定積分の代替表現を考えます。区間 C を 0 から 1 とし、f(x)=x^2 を被積分関数とします。すると関数 f を C 上で積分することは domainofapplication を使って次のように表現できます:

<apply><int/>
  <domainofapplication>
    <ci type="set">C</ci>
  </domainofapplication>
  <ci type="function">f</ci>
</apply>

このエンコードでは明示的な束縛変数は識別されておらず、被積分関数は関数です。あるいは明示的な束縛変数を使って interval 修飾子を用いることもできます:

<apply><int/>
  <bvar><ci>x</ci></bvar>
  <interval><cn>0</cn><cn>1</cn></interval>
  <apply><power/><ci>x</ci><cn>2</cn></apply>
</apply>

また、lowlimituplimit の組を使うこともできます。これはおそらくこの積分の最も「標準的な」表現です:

<apply><int/>
  <bvar><ci>x</ci></bvar>
  <lowlimit><cn>0</cn></lowlimit>
  <uplimit><cn>1</cn></uplimit>
  <apply><power/><ci>x</ci><cn>2</cn></apply>
</apply>

最後に、同じ積分を束縛変数に対する condition を使って表す例を示します:

<apply><int/>
  <bvar><ci>x</ci></bvar>
  <condition>
    <apply><and/>
      <apply><leq/><cn>0</cn><ci>x</ci></apply>
      <apply><leq/><ci>x</ci><cn>1</cn></apply>
    </apply>
  </condition>
  <apply><power/><ci>x</ci><cn>2</cn></apply>
</apply>

condition 項内での明示的な束縛変数の使用に注意してください。また、束縛変数が使われるとき、被積分関数は束縛変数に関する式であり、関数ではない点にも注意してください。

condition 要素と domainofapplication を組み合わせて用いる一般的な手法は非常に強力です。例えば前の例を多変数領域に拡張するには、追加の束縛変数とデカルト積に対応する適用領域を使うことができます:

<apply><int/>
  <bvar><ci>x</ci></bvar>
  <bvar><ci>y</ci></bvar>
  <domainofapplication>
    <set>
      <bvar><ci>t</ci></bvar>
      <bvar><ci>u</ci></bvar>
      <condition>
        <apply><and/>
          <apply><leq/><cn>0</cn><ci>t</ci></apply>
          <apply><leq/><ci>t</ci><cn>1</cn></apply>
          <apply><leq/><cn>0</cn><ci>u</ci></apply>
          <apply><leq/><ci>u</ci><cn>1</cn></apply>
        </apply>
      </condition>
      <list><ci>t</ci><ci>u</ci></list>
    </set>
  </domainofapplication>
  <apply><times/>
    <apply><power/><ci>x</ci><cn>2</cn></apply>
    <apply><power/><ci>y</ci><cn>3</cn></apply>
  </apply>
</apply>

内側と外側の束縛変数の順序が重要であることに注意してください。

4.3.3.2 <degree> の使用
Class qualifier
Attributes CommonAtt
Content ContExp

degree 要素は、操作の「次数」や「階数」を指定するための修飾子です。MathML は degree 要素を三つの文脈で使用します:根(root)の次数、モーメント(moment)の次数、および様々な微分における階数です。これらの各族に対して個別の特別要素を導入する代わりに、MathML は三者ともに単一の一般構成である degree 要素を提供します。

degree 修飾子は、上で議論した意味で束縛変数を制限するためには使われない点に注意してください。実際、根やモーメントの場合は明示的にも暗黙的にも束縛変数は関与しません。微分の場合、degree 要素は bvar と併用されますが、これらのケースでも変数が真に束縛されていないことがあります。

root および moment 演算子での degree の使用法については下の演算子の説明を参照してください。微分での degree の使用はより複雑です。一般に degree 要素はその変数に関する導関数の階数を示します。degree 要素は微分が取られる変数を識別する bvar 要素の第二子として許されます。以下は二階導関数の例です:

<apply><diff/>
  <bvar>
    <ci>x</ci>
    <degree><cn>2</cn></degree>
  </bvar>
  <apply><power/><ci>x</ci><cn>4</cn></apply>
</apply>

詳細は 4.3.8.2 微分 <diff/> および 4.3.8.3 偏微分 <partialdiff/> を参照してください。

4.3.3.3 <momentabout><logbase> の使用

修飾子 momentaboutlogbase はそれぞれ moment および log 演算子とともに用いるための特殊化された要素です。これらの使用法については該当する演算子の説明を参照してください。

4.3.4 演算子クラス

以下の節で詳述される Content MathML 要素は大まかにクラスに分類できます。各要素のクラスは E.3 The Content MathML Operators に示された演算子構文表に記載されています。クラスは要素の一般的な数学的用途を示すとともに、スキーマによって決定される使用法を規定します。要素を紹介する各節には、その要素の演算子構文とスキーマクラスへのリンクが付されています。

演算子クラスは Strict Content MathML への写像に適用される書き換え規則も決定します。これらの書き換え規則は F. The Strict Content MathML Transformation で詳述されています。特定の演算子クラスに適用されるユースケース、個々の要素に対する特別な書き換え規則、およびほとんどの演算子クラスの演算子が使用する一般的な書き換え規則 F.8 Rewrite operators が含まれます。

以下の節では、基本的な数学演算子、関数、定数を表す要素を提示します。ほとんどは空要素で、微積分までの標準的な数学教育課程の主題を網羅しています。残りの要素は集合、区間、ベクトル等のための container 要素です。簡潔のために、本節で定義されるすべての要素をまとめて演算子要素と呼ぶことがあります。

4.3.5 N 進演算子(N-ary Operators)

多くの MathML 演算子は任意の数の引数で使用できます。これらのクラスに属する要素の対応する OpenMath 記号も任意個の引数を取ります。 これらの全ての場合において、引数は applybind 要素の子として明示的に与えられるか、修飾子要素を用いて暗黙的に指定されることがあります。

4.3.5.1 N 進算術演算子: <plus/>, <times/>, <gcd/>, <lcm/>

Operator Syntax, Schema Class

plustimes 要素はそれぞれ加法と乗法演算子を表します。引数は通常、囲んでいる apply 要素内で明示的に指定されます。これらは n 進可換演算子であるため、修飾子を用いて引数を指定することもできますが、これは推奨されません。そのような表現には代わりに sumproduct 演算子を使うべきです。

4.3.5.1.1

Content MathML

<apply><plus/><ci>x</ci><ci>y</ci><ci>z</ci></apply>

サンプル表示

<mrow><mi>x</mi><mo>+</mo><mi>y</mi><mo>+</mo><mi>z</mi></mrow>
x + y + z

gcdlcm 要素は、それぞれ引数の最大公約数および最小公倍数を返す n 進演算子を表します。引数は囲んでいる apply 要素で明示的に指定するか、量化子(qualifiers)で指定できます。

これらのデフォルトのレンダリングは英語ロケールに依存します:他のロケールでは異なるデフォルト表示になる場合があります。

4.3.5.1.2

Content MathML

<apply><gcd/><ci>a</ci><ci>b</ci><ci>c</ci></apply>

サンプル表示

<mrow>
  <mi>gcd</mi>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mrow><mo>(</mo><mi>a</mi><mo>,</mo><mi>b</mi><mo>,</mo><mi>c</mi><mo>)</mo></mrow>
</mrow>
gcd ( a , b , c )
4.3.5.2 N 進和(N-ary Sum) <sum/>

Operator Syntax, Schema Class

sum 要素は n 進加法演算子を表します。和の項は通常、修飾子を用いた規則によって指定されます。明示的な引数リストで使用することも可能ですが、これは強く非推奨であり、そのような場合は代わりに plus 演算子を使うべきです。

sum 演算子は明示的な束縛変数の有無のいずれでも使用できます。束縛変数が使われる場合、sum 要素の後に一つ以上の bvar 要素が続き、索引変数のためのドメインを与える修飾子が続きます。囲んでいる apply の最後の子は束縛変数に関する式であり、和の項はその式を索引変数のドメインの各点に評価することで得られます。ドメインの構造によっては、和のドメインはしばしば uplimitlowlimit を用いて上限・下限を示すことで与えられます。

明示的な束縛変数が与えられない場合、囲んでいる apply の最後の子は関数でなければならず、和の項は修飾子で指定されたドメインの各点でその関数を評価することで得られます。

4.3.5.2.1

Content MathML

<apply><sum/>
  <bvar><ci>x</ci></bvar>
  <lowlimit><ci>a</ci></lowlimit>
  <uplimit><ci>b</ci></uplimit>
  <apply><ci>f</ci><ci>x</ci></apply>
</apply>
<apply><sum/>
  <bvar><ci>x</ci></bvar>
  <condition>
    <apply><in/><ci>x</ci><ci type="set">B</ci></apply>
  </condition>
  <apply><ci type="function">f</ci><ci>x</ci></apply>
</apply>
<apply><sum/>
  <domainofapplication>
    <ci type="set">B</ci>
  </domainofapplication>
  <ci type="function">f</ci>
</apply>

サンプル表示

<mrow>
  <munderover>
    <mo></mo>
    <mrow><mi>x</mi><mo>=</mo><mi>a</mi></mrow>
    <mi>b</mi>
  </munderover>
  <mrow><mi>f</mi><mo>&#x2061;<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow>
</mrow>
x = a b f ( x )
<mrow>
  <munder>
    <mo></mo>
    <mrow><mi>x</mi><mo></mo><mi>B</mi></mrow>
  </munder>
  <mrow><mi>f</mi><mo>&#x2061;<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow>
</mrow>
x B f ( x )
<mrow><munder><mo></mo><mi>B</mi></munder><mi>f</mi></mrow>
B f
4.3.5.3 N 進積(N-ary Product) <product/>

Operator Syntax, Schema Class

product 要素は n 進乗法演算子を表します。積の項は通常、修飾子を用いた規則によって指定されます。明示的な引数リストで使用することも可能ですが、これは強く非推奨であり、そのような場合は代わりに times 演算子を使うべきです。

product 演算子は明示的な束縛変数の有無のいずれでも使用できます。束縛変数が使われる場合、product 要素の後に一つ以上の bvar 要素が続き、索引変数のためのドメインを与える修飾子が続きます。囲んでいる apply の最後の子は束縛変数に関する式であり、積の項はその式をドメインの各点に評価することで得られます。ドメインの構造によっては、これはしばしば uplimitlowlimit 修飾子を用いて与えられます。

明示的な束縛変数が与えられない場合、囲んでいる apply の最後の子は関数でなければならず、積の項は修飾子で指定されたドメインの各点でその関数を評価することで得られます。

4.3.5.3.1

Content MathML

<apply><product/>
  <bvar><ci>x</ci></bvar>
  <lowlimit><ci>a</ci></lowlimit>
  <uplimit><ci>b</ci></uplimit>
  <apply><ci type="function">f</ci>
    <ci>x</ci>
  </apply>
</apply>
<apply><product/>
  <bvar><ci>x</ci></bvar>
  <condition>
    <apply><in/>
      <ci>x</ci>
      <ci type="set">B</ci>
    </apply>
  </condition>
  <apply><ci>f</ci><ci>x</ci></apply>
</apply>

サンプル表示

<mrow>
  <munderover>
    <mo></mo>
    <mrow><mi>x</mi><mo>=</mo><mi>a</mi></mrow>
    <mi>b</mi>
  </munderover>
  <mrow><mi>f</mi><mo>&#x2061;<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow>
</mrow>
x = a b f ( x )
<mrow>
  <munder>
    <mo></mo>
    <mrow><mi>x</mi><mo></mo><mi>B</mi></mrow>
  </munder>
  <mrow><mi>f</mi><mo>&#x2061;<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow>
</mrow>
x B f ( x )
4.3.5.4 N 進関数操作(N-ary Functional Operators): <compose/>

Operator Syntax, Schema Class

compose 要素は関数合成演算子を表します。MathML は合成される関数の定義域や値域について仮定を置きません:合成の結果の定義域は空集合になり得ます。

compose 要素は可換な n 進演算子です。したがって、修飾子要素を使って(場合によっては無限集合で)添字付けされた引数の集合に定義される誘導演算子に持ち上げることができます。詳細は 4.3.5.4 N-ary Functional Operators: <compose/> を参照してください。

4.3.5.4.1

Content MathML

<apply><compose/><ci>f</ci><ci>g</ci><ci>h</ci></apply>
<apply><eq/>
  <apply>
    <apply><compose/><ci>f</ci><ci>g</ci></apply>
    <ci>x</ci>
  </apply>
  <apply><ci>f</ci><apply><ci>g</ci><ci>x</ci></apply></apply>
</apply>

サンプル表示

<mrow>
  <mi>f</mi><mo></mo><mi>g</mi><mo></mo><mi>h</mi>
</mrow>
f g h
<mrow>
  <mrow>
    <mrow><mo>(</mo><mi>f</mi><mo></mo><mi>g</mi><mo>)</mo></mrow>
    <mo>&#x2061;<!--ApplyFunction--></mo>
    <mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
  </mrow>
  <mo>=</mo>
  <mrow>
    <mi>f</mi>
    <mo>&#x2061;<!--ApplyFunction--></mo>
    <mrow>
     <mo>(</mo>
      <mrow>
        <mi>g</mi>
        <mo>&#x2061;<!--ApplyFunction--></mo>
        <mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
      </mrow>
      <mo>)</mo>
    </mrow>
  </mrow>
</mrow>
( f g ) ( x ) = f ( g ( x ) )
4.3.5.5 N 進論理演算子: <and/>, <or/>, <xor/>

Operator Syntax, Schema Class

これらの要素はブーリアン引数を取りブーリアン値を返す n 進関数を表します。引数は囲んでいる apply 要素で明示的に指定するか、修飾子要素で指定できます。

and はすべての引数が真のとき真となり、その他は偽です。
or は引数のいずれかが真のとき真となり、その他は偽です。
xor は排他的論理和であり、真の引数が奇数個あるとき真、それ以外は偽となります。

4.3.5.5.1

Content MathML

<apply><and/><ci>a</ci><ci>b</ci></apply>
<apply><and/>
  <bvar><ci>i</ci></bvar>
  <lowlimit><cn>0</cn></lowlimit>
  <uplimit><ci>n</ci></uplimit>
  <apply><gt/><apply><selector/><ci>a</ci><ci>i</ci></apply><cn>0</cn></apply>
</apply>

Strict Content MathML

<apply><csymbol cd="logic1">and</csymbol><ci>a</ci><ci>b</ci></apply>
<apply><csymbol cd="fns2">apply_to_list</csymbol>
  <csymbol cd="logic1">and</csymbol>
  <apply><csymbol cd="list1">map</csymbol>
    <bind><csymbol cd="fns1">lambda</csymbol>
      <bvar><ci>i</ci></bvar>
      <apply><csymbol cd="relation1">gt</csymbol>
        <apply><csymbol cd="linalg1">vector_selector</csymbol>
          <ci>i</ci>
          <ci>a</ci>
        </apply>
        <cn>0</cn>
      </apply>
    </bind>
    <apply><csymbol cd="interval1">integer_interval</csymbol>
      <cn type="integer">0</cn>
      <ci>n</ci>
    </apply>
  </apply>
</apply>

サンプル表示

<mrow><mi>a</mi><mo></mo><mi>b</mi></mrow>
a b
<mrow>
  <munderover>
    <mo></mo>
    <mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow>
    <mi>n</mi>
  </munderover>
  <mrow>
    <mo>(</mo>
    <msub><mi>a</mi><mi>i</mi></msub>
    <mo>&gt;</mo>
    <mn>0</mn>
    <mo>)</mo>
  </mrow>
</mrow>
i = 0 n ( a i > 0 )
4.3.5.6 N 進線形代数演算子: <selector/>

Operator Syntax, Schema Class

selector 要素はベクトル、行列、リストのインデックス選択を行う演算子です。1 個以上の引数を受け取ります。最初の引数は選択対象となるベクトル・行列・リストを指し、2 番目以降の引数(存在する場合)は選択の種類を示します。

selector が単一引数で使われる場合、それは与えられたリスト・ベクトル・行列中のすべての要素の列を与えるものと解釈されるべきです。行列の場合の要素の順序は列優先、次に行、すなわち行列の要素が列ごとに列挙された順序になります。例えば行列 ( a i , j ) に対して、順序は a 1 , 1 , a 1 , 2 , …, a 2 , 1 , a 2 , 2 , … といった具合です。

引数が二つ与えられ、最初の引数がベクトルまたはリストである場合、二つ目の引数はリストやベクトル中の要素の添字を指定します。最初の引数が行列である場合、二つ目の引数は行の添字を指定します。

引数が三つ与えられた場合、リストやベクトルについては最後の引数は無視され、行列の場合は二番目と三番目の引数が選択される要素の行・列の添字を指定します。

4.3.5.6.1

Content MathML

<apply><selector/><ci type="vector">V</ci><cn>1</cn></apply>
<apply><eq/>
  <apply><selector/>
    <matrix>
      <matrixrow><cn>1</cn><cn>2</cn></matrixrow>
      <matrixrow><cn>3</cn><cn>4</cn></matrixrow>
    </matrix>
    <cn>1</cn>
  </apply>
  <matrix>
    <matrixrow><cn>1</cn><cn>2</cn></matrixrow>
  </matrix>
</apply>

サンプル表示

<msub><mi>V</mi><mn>1</mn></msub>
V 1
<mrow>
  <msub>
    <mrow>
      <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>
    </mrow>
    <mn>1</mn>
  </msub>
  <mo>=</mo>
  <mrow>
    <mo>(</mo>
    <mtable><mtr><mtd><mn>1</mn></mtd><mtd><mn>2</mn></mtd></mtr></mtable>
    <mo>)</mo>
  </mrow>
</mrow>
( 1 2 3 4 ) 1 = ( 1 2 )
4.3.5.7 N 進集合演算子: <union/>, <intersect/>, <cartesianproduct/>

Operator Syntax, Schema Class

union 要素は集合の n 進和(和集合)を表すために用いられます。集合を引数として受け、いずれかの集合に現れる全ての要素を含む集合を表します。

intersect 要素は集合の n 進交叉を表すために用いられます。集合を引数として受け、すべての集合に共通する要素を含む集合を表します。

cartesianproduct 要素はデカルト積演算子を表します。

引数は囲んでいる apply 要素で明示的に指定するか、または修飾子要素を用いて指定することができます(詳しくは 4.3.5 N-ary Operators を参照)。

4.3.5.7.1

Content MathML

<apply><union/><ci>A</ci><ci>B</ci></apply>
<apply><intersect/><ci>A</ci><ci>B</ci><ci>C</ci></apply>
<apply><cartesianproduct/><ci>A</ci><ci>B</ci></apply>

サンプル表示

<mrow><mi>A</mi><mo></mo><mi>B</mi></mrow>
A B
<mrow><mi>A</mi><mo></mo><mi>B</mi><mo></mo><mi>C</mi></mrow>
A B C
<mrow><mi>A</mi><mo>×</mo><mi>B</mi></mrow>
A × B
4.3.5.7.2 例(修飾子使用)

Content MathML

<apply><union/>
  <bvar><ci type="set">S</ci></bvar>
  <domainofapplication>
    <ci type="list">L</ci>
  </domainofapplication>
  <ci type="set"> S</ci>
</apply>
<apply><intersect/>
  <bvar><ci type="set">S</ci></bvar>
  <domainofapplication>
    <ci type="list">L</ci>
  </domainofapplication>
  <ci type="set"> S</ci>
</apply>

サンプル表示

<mrow><munder><mo></mo><mi>L</mi></munder><mi>S</mi></mrow>
L S
<mrow><munder><mo></mo><mi>L</mi></munder><mi>S</mi></mrow>
L S
4.3.5.8 N 進行列コンストラクタ: <vector/>, <matrix/>, <matrixrow/>

Operator Syntax, Schema Class

ベクトルは n 次元ベクトル空間の要素を表す順序付けられた n 組です。

行列や行列積と相互作用する際には、ベクトルは単一列からなる行列と同等と見なされ、その転置は単一行からなる行列と見なされます。

vector の成分は子要素として明示的に与えられるか、または 4.3.1.1 Container Markup for Constructor Symbols に記述された規則によって指定できます。

4.3.5.8.1

Content MathML

<vector>
  <apply><plus/><ci>x</ci><ci>y</ci></apply>
  <cn>3</cn>
  <cn>7</cn>
</vector>

サンプル表示

<mrow>
  <mo>(</mo>
  <mtable>
    <mtr><mtd><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow></mtd></mtr>
    <mtr><mtd><mn>3</mn></mtd></mtr>
    <mtr><mtd><mn>7</mn></mtd></mtr>
  </mtable>
  <mo>)</mo>
</mrow>
( x + y 3 7 )
<mrow>
  <mo>(</mo>
  <mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow>
  <mo>,</mo>
  <mn>3</mn>
  <mo>,</mo>
  <mn>7</mn>
  <mo>)</mo>
</mrow>
( x + y , 3 , 7 )

行列は行の集合から構成されると見なされ、各行は特別な種類のベクトルと考えられます。

matrixmatrixrow 要素の振る舞いは、表示用要素である mtablemtr と実質的に異なることに注意してください。

matrix 要素は コンストラクタ 要素であるため、エントリは子要素として明示的に与えるか、あるいは 4.3.1.1 Container Markup for Constructor Symbols に記述された規則に従って関数と二次元の domainofapplication を与えることで指定できます。後者の場合、行列のエントリはドメインの点に関数を評価して得られる値に対応します。

matrixrow は行列の文脈外では直接レンダリングされません。

4.3.5.8.2

Content MathML

<matrix>
  <bvar><ci type="integer">i</ci></bvar>
  <bvar><ci type="integer">j</ci></bvar>
  <condition>
    <apply><and/>
      <apply><in/>
        <ci>i</ci>
        <interval><ci>1</ci><ci>5</ci></interval>
      </apply>
      <apply><in/>
        <ci>j</ci>
        <interval><ci>5</ci><ci>9</ci></interval>
      </apply>
    </apply>
  </condition>
  <apply><power/><ci>i</ci><ci>j</ci></apply>
</matrix>

サンプル表示

<mrow>
  <mo>[</mo>
  <msub><mi>m</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub>
  <mo>|</mo>
  <mrow>
    <msub><mi>m</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub>
    <mo>=</mo>
    <msup><mi>i</mi><mi>j</mi></msup>
  </mrow>
  <mo>;</mo>
  <mrow>
    <mrow>
      <mi>i</mi>
      <mo></mo>
      <mrow><mo>[</mo><mi>1</mi><mo>,</mo><mi>5</mi><mo>]</mo></mrow>
    </mrow>
    <mo></mo>
    <mrow>
      <mi>j</mi>
      <mo></mo>
      <mrow><mo>[</mo><mi>5</mi><mo>,</mo><mi>9</mi><mo>]</mo></mrow>
    </mrow>
  </mrow>
  <mo>]</mo>
</mrow>
[ m i , j | m i , j = i j ; i [ 1 , 5 ] j [ 5 , 9 ] ]
4.3.5.9 N 進集合論的コンストラクタ: <set>, <list>

Operator Syntax, Schema Class

set 要素は、引数から数学的集合を構築する n 進関数を表します。set 要素は属性 type を取り、その値は set または multiset のいずれかです。集合のメンバーはコンストラクタの子要素として明示的に与えられるか、または 4.3.1.1 Container Markup for Constructor Symbols に記述された規則によって指定できます。集合の要素に順序は暗黙的に存在しません。

list 要素は引数からリストを構築する n 進関数を表します。リストは集合と異なり要素に明示的な順序があります。list 要素は属性 order を取り、その値は numeric または lexicographic のいずれかです。リストの要素と順序は明示的に与えられるか、または 4.3.1.1 Container Markup for Constructor Symbols に記述された規則で指定できます。

4.3.5.9.1 例(明示要素)

Content MathML

<set>
  <ci>a</ci><ci>b</ci><ci>c</ci>
</set>
<list>
  <ci>a</ci><ci>b</ci><ci>c</ci>
</list>

サンプル表示

<mrow>
  <mo>{</mo><mi>a</mi><mo>,</mo><mi>b</mi><mo>,</mo><mi>c</mi><mo>}</mo>
</mrow>
{ a , b , c }
<mrow>
  <mo>(</mo><mi>a</mi><mo>,</mo><mi>b</mi><mo>,</mo><mi>c</mi><mo>)</mo>
</mrow>
( a , b , c )

一般に、集合やリストは関数と domain of application を与えることで構築できます。要素はドメインの点で関数を評価した値に対応します。リストの場合、要素の順序が明確でないことがあるため、順序の種類は属性 order によって指定できます。サポートされる順序は lexicographic と numeric の二つです。

4.3.5.9.2 例(条件で指定された要素)

Content MathML

<set>
  <bvar><ci>x</ci></bvar>
  <condition>
    <apply><lt/><ci>x</ci><cn>5<lt;/cn></apply>
  </condition>
  <ci>x</ci>
</set>
<list order="numeric">
  <bvar><ci>x</ci></bvar>
  <condition>
    <apply><lt/><ci>x</ci><cn>5</cn></apply>
  </condition>
</list>
<set>
  <bvar><ci type="set">S</ci></bvar>
  <condition>
    <apply><in/><ci>S</ci><ci type="list">T</ci></apply>
  </condition>
  <ci>S</ci>
</set>
<set>
  <bvar><ci> x </ci></bvar>
  <condition>
    <apply><and/>
      <apply><lt/><ci>x</ci><cn>5</cn></apply>
      <apply><in/><ci>x</ci><naturalnumbers/></apply>
    </apply>
  </condition>
  <ci>x</ci>
</set>

サンプル表示

<mrow>
  <mo>{</mo>
  <mi>x</mi>
  <mo>|</mo>
  <mrow><mi>x</mi><mo>&lt;</mo><mn>5</mn></mrow>
  <mo>}</mo>
</mrow>
{ x | x < 5 }
<mrow>
  <mo>(</mo>
  <mi>x</mi>
  <mo>|</mo>
  <mrow><mi>x</mi><mo>&lt;</mo><mn>5</mn></mrow>
  <mo>)</mo>
</mrow>
( x | x < 5 )
<mrow>
  <mo>{</mo>
  <mi>S</mi>
  <mo>|</mo>
  <mrow><mi>S</mi><mo></mo><mi>T</mi></mrow>
  <mo>}</mo>
</mrow>
{ S | S T }
<mrow>
  <mo>{</mo>
  <mi>x</mi>
  <mo>|</mo>
  <mrow>
    <mrow>
      <mo>(</mo><mi>x</mi><mo>&lt;</mo><mn>5</mn><mo>)</mo>
    </mrow>
    <mo></mo>
    <mrow>
      <mi>x</mi><mo></mo><mi mathvariant="double-struck">N</mi>
    </mrow>
  </mrow>
  <mo>}</mo>
</mrow>
{ x | ( x < 5 ) x N }
4.3.5.10 N 進算術関係: <eq/>, <gt/>, <lt/>, <geq/>, <leq/>

Operator Syntax, Schema Class

MathML は推移的関係を複数引数で使うことを許し、a < b < c < d のような関係のチェーンを自然に表現できます。しかし、算術演算子の場合とは異なり、Strict Content MathML で用いられる基礎的な記号は二項と分類されるため、前節のように apply_to_list を使うことはできません。その代わりに類似の関数 predicate_on_list が使われ、そのセマンティクスは基本的に述語を二つずつ適用して全ての対の共軛(conjunction)を取ることに相当します。

要素 eq, gt, lt, geq, leq はそれぞれ 等しいより大きいより小さい以上 および 以下 の関係を表し、第一引数と第二引数の関係に応じて真または偽を返します。

4.3.5.10.1

Content MathML

<apply><eq/>
   <ci>x</ci>
   <cn type="rational">2<sep/>4</cn>
   <cn type="rational">1<sep/>2</cn>
 </apply>
<apply><gt/><ci>x</ci><ci>y</ci></apply>
<apply><lt/><ci>y</ci><ci>x</ci></apply>
<apply><geq/><cn>4</cn><cn>3</cn><cn>3</cn></apply>
<apply><leq/><cn>3</cn><cn>3</cn><cn>4</cn></apply>

サンプル表示

<mrow>
  <mi>x</mi>
  <mo>=</mo>
  <mrow><mn>2</mn><mo>/</mo><mn>4</mn></mrow>
  <mo>=</mo>
  <mrow><mn>1</mn><mo>/</mo><mn>2</mn></mrow>
</mrow>
x = 2 / 4 = 1 / 2
<mrow><mi>x</mi><mo>&gt;</mo><mi>y</mi></mrow>
x > y
<mrow><mi>y</mi><mo>&lt;</mo><mi>x</mi></mrow>
y < x
<mrow><mn>4</mn><mo></mo><mn>3</mn><mo></mo><mn>3</mn></mrow>
4 3 3
<mrow><mn>3</mn><mo></mo><mn>3</mn><mo></mo><mn>4</mn></mrow>
3 3 4
4.3.5.11 N 進集合論的関係: <subset/>, <prsubset/>

Operator Syntax, Schema Class

MathML は推移的関係を複数引数で使用することを許し、a ⊂ b ⊂ c のようなチェーンを自然に表現できます。しかし算術演算子の場合と同様に、Strict Content MathML で用いられる基礎記号は二項と分類されるため、前節で用いた apply_to_list は使えず、代わりに predicate_on_list のような関数が使用されます。これにより述語を二項ずつ適用して結び付ける(共軛を取る)セマンティクスが実現されます。

subsetprsubset 要素はそれぞれ部分集合と真部分集合の関係を表します。第一引数が第二引数の部分集合(あるいは真部分集合)であることを示します。上記のように n 進演算子として用いると、各引数が直前の引数の部分集合(真部分集合)であることを表すチェーンを記述できます。

4.3.5.11.1

Content MathML

<apply><subset/>
  <ci type="set">A</ci>
  <ci type="set">B</ci>
</apply>
<apply><prsubset/>
  <ci type="set">A</ci>
  <ci type="set">B</ci>
  <ci type="set">C</ci>
</apply>

サンプル表示

<mrow><mi>A</mi><mo></mo><mi>B</mi></mrow>
A B
<mrow><mi>A</mi><mo></mo><mi>B</mi><mo></mo><mi>C</mi></mrow>
A B C
4.3.5.12 N 進/単項算術演算子: <min/>, <max/>

Operator Syntax, Schema Class

MathML の要素 maxmin や統計要素の一部(例:mean)は上で述べたクラスのように n 進関数として使えますが、単一引数が与えられた場合に特別な解釈が与えられます。単一引数が与えられると、その引数が表す要素に対して関数が適用されます。

これらの要素が Strict Content MathML で用いる基礎記号は Unary であり、したがって MathML が 0 個または 1 個を超える引数で使用される場合には、関数は明示的に与えられた引数から構築された集合に対して適用されます(以下の規則に従います)。

min 要素は最小値関数を表し、適用される引数のうち最小のものを返します。引数は囲んでいる apply 要素で明示的に指定するか、修飾子要素を用いて指定できます(詳しくは 4.3.5.12 N-ary/Unary Arithmetic Operators: <min/>, <max/>)。無限集合に適用した場合、最小元が存在しないことがあります。

max 要素は最大値関数を表し、適用される引数のうち最大のものを返します。引数は囲んでいる apply 要素で明示的に指定するか、修飾子要素を用いて指定できます。無限集合に適用した場合、最大元が存在しないことがあります。

4.3.5.12.1

Content MathML

<apply><min/><ci>a</ci><ci>b</ci></apply>
<apply><max/><cn>2</cn><cn>3</cn><cn>5</cn></apply>
<apply><min/>
  <bvar><ci>x</ci></bvar>
  <condition>
    <apply><notin/><ci>x</ci><ci type="set">B</ci></apply>
  </condition>
  <apply><power/><ci>x</ci><cn>2</cn></apply>
</apply>
<apply><max/>
  <bvar><ci>y</ci></bvar>
  <condition>
    <apply><in/>
      <ci>y</ci>
      <interval><cn>0</cn><cn>1</cn></interval>
    </apply>
  </condition>
  <apply><power/><ci>y</ci><cn>3</cn></apply>
</apply>

サンプル表示

<mrow>
  <mi>min</mi>
  <mrow><mo>{</mo><mi>a</mi><mo>,</mo><mi>b</mi><mo>}</mo></mrow>
</mrow>
min { a , b }
<mrow>
  <mi>max</mi>
  <mrow>
    <mo>{</mo><mn>2</mn><mo>,</mo><mn>3</mn><mo>,</mo><mn>5</mn><mo>}</mo>
  </mrow>
</mrow>
max { 2 , 3 , 5 }
<mrow>
  <mi>min</mi>
  <mrow><mo>{</mo><msup><mi>x</mi><mn>2</mn></msup><mo>|</mo>
    <mrow><mi>x</mi><mo></mo><mi>B</mi></mrow>
    <mo>}</mo>
  </mrow>
</mrow>
min { x 2 | x B }
<mrow>
  <mi>max</mi>
  <mrow>
    <mo>{</mo><mi>y</mi><mo>|</mo>
    <mrow>
      <msup><mi>y</mi><mn>3</mn></msup>
      <mo></mo>
      <mrow><mo>[</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>]</mo></mrow>
    </mrow>
    <mo>}</mo>
  </mrow>
</mrow>
max { y | y 3 [ 0 , 1 ] }
4.3.5.13 N 進/単項統計演算子: <mean/>, <median/>, <mode/>, <sdev/>, <variance/>

Operator Syntax, Schema Class

一部の統計的 MathML 要素、例えば mean は上記のクラス同様に n 進関数として使用できますが、単一引数が与えられた場合には特別な解釈が与えられます。単一引数が与えられた場合、その引数が表す要素集合に関数が適用されます。

これらの要素が Strict Content MathML で用いる基礎記号は Unary であり、したがって MathML が 0 個または 1 個を超える引数で使用される場合、関数は明示的に与えられた引数から構築された集合に対して適用されます(以下の規則に従います)。

mean 要素はデータ集合や確率変数の算術平均(平均値)を返す関数を表します。

median 要素は引数の中央値を返す演算子を表します。中央値はサンプル値の下位半分と上位半分を分ける値です。

mode 要素は引数の最頻値(もっとも頻繁に現れる値)を表します。

sdev 要素はデータ集合や確率変数の標準偏差を表します。標準偏差は分散の平方根として与えられる散布度の統計量です。

variance 要素はデータ集合や確率変数の分散を表します。分散は散布度を表す統計量で、可能な値の平均からの偏差の二乗を平均したものです。

4.3.5.13.1

Content MathML

<apply><mean/>
  <cn>3</cn><cn>4</cn><cn>3</cn><cn>7</cn><cn>4</cn>
</apply>
<apply><mean/><ci>X</ci></apply>
<apply><sdev/>
  <cn>3</cn><cn>4</cn><cn>2</cn><cn>2</cn>
</apply>
<apply><sdev/>
  <ci type="discrete_random_variable">X</ci>
</apply>
<apply><variance/>
  <cn>3</cn><cn>4</cn><cn>2</cn><cn>2</cn>
</apply>
<apply><variance/>
  <ci type="discrete_random_variable">X</ci>
</apply>

サンプル表示

<mrow>
  <mo></mo>
  <mn>3</mn><mo>,</mo><mn>4</mn><mo>,</mo><mn>3</mn>
  <mo>,</mo><mn>7</mn><mo>,</mo><mn>4</mn>
  <mo></mo>
</mrow>
3 , 4 , 3 , 7 , 4
<mrow>
  <mo></mo><mi>X</mi><mo></mo>
</mrow>
<mtext>&nbsp;or&nbsp;</mtext>
<mover><mi>X</mi><mo>¯</mo></mover>
X  or  X ¯
<mrow>
  <mo>σ</mo>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mrow>
    <mo>(</mo>
    <mn>3</mn><mo>,</mo><mn>4</mn><mo>,</mo><mn>2</mn><mo>,</mo><mn>2</mn>
    <mo>)</mo>
  </mrow>
</mrow>
σ ( 3 , 4 , 2 , 2 )
<mrow>
  <mo>σ</mo>
  <mo>&#x2061;<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>X</mi><mo>)</mo></mrow>
</mrow>
σ ( X )
<mrow>
  <msup>
    <mo>σ</mo>
    <mn>2</mn>
  </msup>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mrow>
    <mo>(</mo>
    <mn>3</mn><mo>,</mo><mn>4</mn><mo>,</mo><mn>2</mn><mo>,</mo><mn>2</mn>
    <mo>)</mo>
  </mrow>
</mrow>
σ 2 ( 3 , 4 , 2 , 2 )
<mrow>
  <msup><mo>σ</mo><mn>2</mn></msup>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mrow><mo>(</mo><mi>X</mi><mo>)</mo></mrow>
</mrow>
σ 2 ( X )

4.3.6 二項演算子

二項演算子は2つの引数を取り、特別な書き換え規則を必要とせずにRewrite: elementを介して単にOpenMath記号に対応します。二項コンストラクタであるintervalは類似していますが、引数が要素の子として与えられるコンストラクタ構文を使用し、使用される記号は4.3.10.3 Interval <interval>に記載されているようにtype要素に依存します。

4.3.6.1 二項算術演算子: <quotient/>, <divide/>, <minus/>, <power/>, <rem/>, <root/>

演算子構文, スキーマクラス

quotient要素は整数除算演算子を表します。演算子が整数引数abに適用されると、結果は「aをbで割った商」です。つまり、整数abの商とは、|r|が|b|より小さく、かつa = b * q + rを満たすような整数qであり、慣例的にはqを商、rを剰余と呼びます。

divide要素は数域における除算演算子を表します。

minus要素は単項算術演算子(例:−xを表すため)として、また二項算術演算子(例:xyを表すため)として使用できます。追加の例は4.3.7.2 単項算術演算子: <factorial/>, <abs/>, <conjugate/>, <arg/>, <real/>, <imaginary/>, <floor/>, <ceiling/>, <exp/>, <minus/>, <root/>に示されています。

power要素は冪乗演算子を表します。第一引数が第二引数の冪に上げられます。

rem要素は剰余演算子を表し、第一引数を第二引数で割ったときの剰余を返します。すなわち、整数引数abに適用された場合、|r|が|b|より小さく、かつa = b * q + rを満たす唯一の整数rを返します。

root要素は根号(ルート)を抽出するために使われます。取るべき根の種類はdegree要素で指定され、これはroot要素を囲むapply要素の第二子として与えられるべきです。したがって、degreeに値2が含まれる場合は平方根、3なら立方根、というようになります。degreeが存在しない場合はデフォルトで2が使用されます。

4.3.6.1.1

Content MathML

<apply><quotient/><ci>a</ci><ci>b</ci></apply>
<apply><divide/>
  <ci>a</ci>
  <ci>b</ci>
</apply>
<apply><minus/><ci>x</ci><ci>y</ci></apply>
<apply><power/><ci>x</ci><cn>3</cn></apply>
<apply><rem/><ci> a </ci><ci> b </ci></apply>
<apply><root/>
  <degree><ci type="integer">n</ci></degree>
  <ci>a</ci>
</apply>

表示例

<mrow><mo></mo><mi>a</mi><mo>/</mo><mi>b</mi><mo></mo></mrow>
a / b
<mrow><mi>a</mi><mo>/</mo><mi>b</mi></mrow>
a / b
<mrow><mi>x</mi><mo></mo><mi>y</mi></mrow>
x y
<msup><mi>x</mi><mn>3</mn></msup>
x 3
<mrow><mi>a</mi><mo>mod</mo><mi>b</mi></mrow>
a mod b
<mroot><mi>a</mi><mi>n</mi></mroot>
a n
4.3.6.2 二項論理演算子: <implies/>, <equivalent/>

演算子構文, スキーマクラス

implies要素は2つのブール式を引数とする論理含意関数を表します。第一引数が真で第二引数が偽の場合に偽となり、それ以外の場合は真になります。

equivalent要素は2つのブール式が論理的に等価である、すなわち任意の入力に対して同じブール値を持つことを主張する関係を表します。

4.3.6.2.1

Content MathML

<apply><implies/><ci>A</ci><ci>B</ci></apply>
<apply><equivalent/>
  <ci>a</ci>
  <apply><not/><apply><not/><ci>a</ci></apply></apply>
</apply>

表示例

<mrow><mi>A</mi><mo></mo><mi>B</mi></mrow>
A B
<mrow>
  <mi>a</mi>
  <mo></mo>
  <mrow><mo>¬</mo><mrow><mo>¬</mo><mi>a</mi></mrow></mrow>
</mrow>
a ¬ ¬ a
4.3.6.3 二項関係: <neq/>, <approx/>, <factorof/>, <tendsto/>

演算子構文, スキーマクラス

neq要素は二項不等関係、すなわち「等しくない」関係を表し、2つの引数が等しくない限り真を返します。

approx要素はその引数が近似的に等しいことを主張する関係を表します。

factorof要素は第一引数が第二引数の約数であることを示すために使用されます。この関係は、かつのみb mod a = 0 のとき真です。

4.3.6.3.1

Content MathML

<apply><neq/><cn>3</cn><cn>4</cn></apply>
<apply><approx/>
  <pi/>
  <cn type="rational">22<sep/>7</cn>
</apply>
<apply><factorof/><ci>a</ci><ci>b</ci></apply>

表示例

<mrow><mn>3</mn><mo></mo><mn>4</mn></mrow>
3 4
<mrow>
  <mi>π</mi>
  <mo></mo>
  <mrow><mn>22</mn><mo>/</mo><mn>7</mn></mrow>
</mrow>
π 22 / 7
<mrow><mi>a</mi><mo>|</mo><mi>b</mi></mrow>
a | b

tendsto要素はある量が特定の値に近づくという関係を表すために使用されます。これは主に数学的極限の記述の一部として使われますが、「xがyに近づくとき」のような文を表現したり、より一般的な種類の極限を構成するための構成要素を提供するために単独で存在します。

tendsto要素は接近する方向を設定するための属性typeを取ります。任意の値を取り得ますが、一般的な値には above および below が含まれます。

4.3.6.3.2

Content MathML

<apply><tendsto type="above"/>
  <apply><power/><ci>x</ci><cn>2</cn></apply>
  <apply><power/><ci>a</ci><cn>2</cn></apply>
</apply>
<apply><tendsto/>
  <vector><ci>x</ci><ci>y</ci></vector>
  <vector>
    <apply><ci type="function">f</ci><ci>x</ci><ci>y</ci></apply>
    <apply><ci type="function">g</ci><ci>x</ci><ci>y</ci></apply>
  </vector>
</apply>

表示例

<mrow>
  <msup><mi>x</mi><mn>2</mn></msup>
  <mo></mo>
  <msup><msup><mi>a</mi><mn>2</mn></msup><mo>+</mo></msup>
</mrow>
x 2 a 2 +
<mrow><mo>(</mo><mtable>
  <mtr><mtd><mi>x</mi></mtd></mtr>
  <mtr><mtd><mi>y</mi></mtd></mtr>
</mtable><mo>)</mo></mrow>
<mo></mo>
<mrow><mo>(</mo><mtable>
  <mtr><mtd>
    <mi>f</mi><mo>&#x2061;<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow>
  </mtd></mtr>
  <mtr><mtd>
    <mi>g</mi><mo>&#x2061;<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow>
  </mtd></mtr>
</mtable><mo>)</mo></mrow>
( x y ) ( f ( x , y ) g ( x , y ) )
4.3.6.4 二項線形代数演算子: <vectorproduct/>, <scalarproduct/>, <outerproduct/>

演算子構文, スキーマクラス

vectorproduct要素はベクトル積を表します。3次元ベクトルの引数を2つ取り、値として3次元ベクトルを表します。

scalarproduct要素はスカラー積(内積)を表します。2つのベクトル引数を取り、スカラー値を返します。

outerproduct要素は外積を表します。2つのベクトル引数を取り、値として行列を返します。

4.3.6.4.1

Content MathML

<apply><eq/>
  <apply><vectorproduct/>
    <ci type="vector"> A </ci>
    <ci type="vector"> B </ci>
  </apply>
  <apply><times/>
    <ci>a</ci>
    <ci>b</ci>
    <apply><sin/><ci>θ</ci></apply>
    <ci type="vector"> N </ci>
  </apply>
</apply>
<apply><eq/>
  <apply><scalarproduct/>
    <ci type="vector">A</ci>
    <ci type="vector">B</ci>
  </apply>
  <apply><times/>
    <ci>a</ci>
    <ci>b</ci>
    <apply><cos/><ci>θ</ci></apply>
  </apply>
</apply>
<apply><outerproduct/>
  <ci type="vector">A</ci>
  <ci type="vector">B</ci>
</apply>

表示例

<mrow>
  <mrow><mi>A</mi><mo>×</mo><mi>B</mi></mrow>
  <mo>=</mo>
  <mrow>
    <mi>a</mi>
    <mo>&#x2062;<!--InvisibleTimes--></mo>
    <mi>b</mi>
    <mo>&#x2062;<!--InvisibleTimes--></mo>
    <mrow><mi>sin</mi><mo>&#x2061;<!--ApplyFunction--></mo><mi>θ</mi></mrow>
    <mo>&#x2062;<!--InvisibleTimes--></mo>
    <mi>N</mi>
  </mrow>
</mrow>
A × B = a b sin θ N
<mrow>
  <mrow><mi>A</mi><mo>.</mo><mi>B</mi></mrow>
  <mo>=</mo>
  <mrow>
    <mi>a</mi>
    <mo>&#x2062;<!--InvisibleTimes--></mo>
    <mi>b</mi>
    <mo>&#x2062;<!--InvisibleTimes--></mo>
    <mrow><mi>cos</mi><mo>&#x2061;<!--ApplyFunction--></mo><mi>θ</mi></mrow>
  </mrow>
</mrow>
A . B = a b cos θ
<mrow><mi>A</mi><mo></mo><mi>B</mi></mrow>
A B
4.3.6.5 二項集合演算子: <in/>, <notin/>, <notsubset/>, <notprsubset/>, <setdiff/>

演算子構文, スキーマクラス

in要素は集合包含関係を表します。引数は要素と集合の2つで、要素が与えられた集合に属することを示すために使われます。

notin要素は集合包含の否定関係を表します。引数は要素と集合の2つで、要素が与えられた集合に属さないことを示すために使われます。

notsubset要素は部分集合でないことを表す関係です。第一引数が第二引数の部分集合ではないことを示すために使われます。

notprsubset要素は真部分集合でないことを表す関係です。第一引数が第二引数の真部分集合ではないことを示すために使われます。

setdiff要素は集合差演算子を表します。2つの集合を引数に取り、第一集合に含まれるが第二集合には含まれないすべての要素を含む集合を表します。

4.3.6.5.1

Content MathML

<apply><in/><ci>a</ci><ci type="set">A</ci></apply>
<apply><notin/><ci>a</ci><ci type="set">A</ci></apply>
<apply><notsubset/>
  <ci type="set">A</ci>
  <ci type="set">B</ci>
</apply>
<apply><notprsubset/>
  <ci type="set">A</ci>
  <ci type="set">B</ci>
</apply>
<apply><setdiff/>
  <ci type="set">A</ci>
  <ci type="set">B</ci>
</apply>

表示例

<mrow><mi>a</mi><mo></mo><mi>A</mi></mrow>
a A
<mrow><mi>a</mi><mo></mo><mi>A</mi></mrow>
a A
<mrow><mi>A</mi><mo></mo><mi>B</mi></mrow>
A B
<mrow><mi>A</mi><mo></mo><mi>B</mi></mrow>
A B
<mrow><mi>A</mi><mo></mo><mi>B</mi></mrow>
A B

4.3.7 単項演算子

単項演算子は一つの引数を取り、特別な書き換え規則を必要とせずに Rewrite: 要素を通して OpenMath シンボルに対応します。

4.3.7.1 単項論理演算子: <not/>

演算子構文, スキーマクラス

要素 not は論理否定関数を表し、1つのブーリアン引数を取り、その真偽値を反転して返します。

4.3.7.1.1

Content MathML

<apply><not/><ci>a</ci></apply>

表示例

<mrow><mo>¬</mo><mi>a</mi></mrow>
¬ a
4.3.7.2 単項算術演算子: <factorial/>, <abs/>, <conjugate/>, <arg/>, <real/>, <imaginary/>, <floor/>, <ceiling/>, <exp/>, <minus/>, <root/>

演算子構文, スキーマクラス

要素 factorial は非負整数に対する単項階乗演算子を表します。 整数 n の階乗は n! = n×(n-1)×⋯×1 で与えられます。

要素 abs は絶対値関数を表します。引数は数値であるべきです。 引数が複素数の場合、絶対値はしばしばモジュラス(modulus)と呼ばれます。

要素 conjugate は複素数に対して定義され、その引数の複素共役を返す関数を表します。

要素 arg は複素数の偏角(複素数から原点へ引いた直線が実軸となす角、反時計回りに測る)を返す単項関数を表します。

要素 real は複素数の「実部」を表す式を構成するための単項演算子を表します。すなわち x + i y における x 成分です。

要素 imaginary は複素数の「虚部」を表す式を構成するための単項演算子を表します。すなわち x + i y における y 成分です。

要素 floor は切り捨て(負の無限大方向へ丸め)して最も近い整数にする操作を表します。 この関数は1つの実数を引数として取り、整数を返します。

要素 ceiling は切り上げ(正の無限大方向へ丸め)して最も近い整数にする操作を表します。 この関数は1つの実数を引数として取り、整数を返します。

要素 exp は自然対数 ln の逆関数に対応する指数関数を表します。引数は1つです。

要素 minus は単項算術演算子として(例えば −x を表す)使うことも、 二項算術演算子として(例えば xy を表す)使うこともできます。さらなる例は 4.3.6.1 二項算術演算子: <quotient/>, <divide/>, <minus/>, <power/>, <rem/>, <root/> を参照してください。

MathML における要素 root は degree 修飾子を任意に持つ単項要素として扱われますが、 実際には n 乗根を取る二項演算を表し、4.3.6.1 二項算術演算子: <quotient/>, <divide/>, <minus/>, <power/>, <rem/>, <root/> に記述されています。

4.3.7.2.1

Content MathML

<apply><factorial/><ci>n</ci></apply>
<apply><abs/><ci>x</ci></apply>
<apply><conjugate/>
  <apply><plus/>
    <ci>x</ci>
    <apply><times/><cn></cn><ci>y</ci></apply>
  </apply>
</apply>
<apply><arg/>
  <apply><plus/>
    <ci> x </ci>
    <apply><times/><imaginaryi/><ci>y</ci></apply>
  </apply>
</apply>
<apply><real/>
  <apply><plus/>
    <ci>x</ci>
    <apply><times/><imaginaryi/><ci>y</ci></apply>
  </apply>
</apply>
<apply><imaginary/>
  <apply><plus/>
    <ci>x</ci>
    <apply><times/><imaginaryi/><ci>y</ci></apply>
  </apply>
</apply>
<apply><floor/><ci>a</ci></apply>
<apply><ceiling/><ci>a</ci></apply>
<apply><exp/><ci>x</ci></apply>
<apply><minus/><cn>3</cn></apply>

表示例

<mrow><mi>n</mi><mo intent="factorial">!</mo></mrow>
n !
<mrow intent="absolute-value($x)"><mo>|</mo><mi arg="x">x</mi><mo>|</mo></mrow>
| x |
<mover intent="complex-conjugate($z)">
  <mrow arg="z">
    <mi>x</mi>
    <mo>+</mo>
    <mrow><mn></mn><mo>&#x2062;<!--InvisibleTimes--></mo><mi>y</mi></mrow>
  </mrow>
  <mo>¯</mo>
</mover>
x + y ¯
<mrow>
  <mi>arg</mi>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mrow>
   <mo>(</mo>
    <mrow>
      <mi>x</mi>
      <mo>+</mo>
      <mrow><mi>i</mi><mo>&#x2062;<!--InvisibleTimes--></mo><mi>y</mi></mrow>
    </mrow>
    <mo>)</mo>
  </mrow>
</mrow>
arg ( x + i y )
<mrow>
  <mo intent="real-part"></mo>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mrow>
   <mo>(</mo>
    <mrow>
      <mi>x</mi>
      <mo>+</mo>
      <mrow><mi>i</mi><mo>&#x2062;<!--InvisibleTimes--></mo><mi>y</mi></mrow>
    </mrow>
    <mo>)</mo>
  </mrow>
</mrow>
( x + i y )
<mrow>
  <mo intent="imaginary-part"></mo>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mrow>
   <mo>(</mo>
    <mrow>
      <mi>x</mi>
      <mo>+</mo>
      <mrow><mi>i</mi><mo>&#x2062;<!--InvisibleTimes--></mo><mi>y</mi></mrow>
    </mrow>
    <mo>)</mo>
  </mrow>
</mrow>
( x + i y )
<mrow intent="floor($x)"><mo></mo><mi arg="x">a</mi><mo></mo></mrow>
a
<mrow intent="ceiling($x)"><mo></mo><mi arg="x">a</mi><mo></mo></mrow>
a
<msup><mi>e</mi><mi>x</mi></msup>
e x
<mrow><mo></mo><mn>3</mn></mrow>
3
4.3.7.3 単項線形代数演算子: <determinant/>, <transpose/>

演算子構文, スキーマクラス

要素 determinant は、その引数(正方行列であるべき)の行列式を返す単項関数を表します。

要素 transpose は与えられた行列またはベクトルの転置を表す単項関数を表します。

4.3.7.3.1

Content MathML

<apply><determinant/>
  <ci type="matrix">A</ci>
</apply>
<apply><transpose/>
  <ci type="matrix">A</ci>
</apply>

表示例

<mrow><mi>det</mi><mo>&#x2061;<!--ApplyFunction--></mo><mi>A</mi></mrow>
det A
<msup><mi>A</mi><mi>T</mi></msup>
A T
4.3.7.4 単項関数演算子: <inverse/>, <ident/>, <domain/>, <codomain/>, <image/>, <ln/>,

演算子構文, スキーマクラス

要素 inverse は、関数に適用され、その関数の一般的な逆関数を表す式を構成します。

要素 ident は恒等関数を表します。MathML は表現される恒等関数の定義域や余域について仮定をしません。これらは使用される文脈に依存します。

要素 domain は適用される関数の定義域を表します。定義域は関数が定義される値の集合です。

要素 codomain は適用される関数の余域(レンジ)を表します。余域は必ずしも像(image)と等しいとは限らず、像を含む集合であることが要求されます。

要素 image は適用される関数の像(値域)を表します。関数の像は関数によって取られる値の集合であり、像の各点は定義域のある点に関数を適用することで生成されます。

要素 ln は自然対数関数を表します。

これらの要素は引数に適用されることも、単独で現れて他の関数に作用する抽象演算子を表すこともあります。

4.3.7.4.1

Content MathML

<apply><inverse/><ci>f</ci></apply>
<apply>
  <apply><inverse/><ci type="matrix">A</ci></apply>
  <ci>a</ci>
</apply>
<apply><eq/>
  <apply><compose/>
    <ci type="function">f</ci>
    <apply><inverse/>
      <ci type="function">f</ci>
    </apply>
  </apply>
  <ident/>
</apply>
<apply><eq/>
  <apply><domain/><ci>f</ci></apply>
  <reals/>
</apply>
<apply><eq/>
  <apply><codomain/><ci>f</ci></apply>
  <rationals/>
</apply>
<apply><eq/>
  <apply><image/><sin/></apply>
  <interval><cn>-1</cn><cn> 1</cn></interval>
</apply>
<apply><ln/><ci>a</ci></apply>

表示例

<msup><mi>f</mi><mrow><mo>(</mo><mn>-1</mn><mo>)</mo></mrow></msup>
f ( -1 )
<mrow>
  <msup><mi>A</mi><mrow><mo>(</mo><mn>-1</mn><mo>)</mo></mrow></msup>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mrow><mo>(</mo><mi>a</mi><mo>)</mo></mrow>
</mrow>
A ( -1 ) ( a )
<mrow>
  <mrow>
    <mi>f</mi>
    <mo></mo>
    <msup><mi>f</mi><mrow><mo>(</mo><mn>-1</mn><mo>)</mo></mrow></msup>
  </mrow>
  <mo>=</mo>
  <mi>id</mi>
</mrow>
f f ( -1 ) = id
<mrow>
  <mrow>
    <mi>domain</mi>
    <mo>&#x2061;<!--ApplyFunction--></mo>
    <mrow><mo>(</mo><mi>f</mi><mo>)</mo></mrow>
  </mrow>
  <mo>=</mo>
  <mi mathvariant="double-struck">R</mi>
</mrow>
domain ( f ) = R
<mrow>
  <mrow>
    <mi>codomain</mi>
    <mo>&#x2061;<!--ApplyFunction--></mo>
    <mrow><mo>(</mo><mi>f</mi><mo>)</mo></mrow>
  </mrow>
  <mo>=</mo>
  <mi mathvariant="double-struck">Q</mi>
</mrow>
codomain ( f ) = Q
<mrow>
  <mrow>
    <mi>image</mi>
    <mo>&#x2061;<!--ApplyFunction--></mo>
    <mrow><mo>(</mo><mi>sin</mi><mo>)</mo></mrow>
  </mrow>
  <mo>=</mo>
  <mrow><mo>[</mo><mn>-1</mn><mo>,</mo><mn>1</mn><mo>]</mo></mrow>
</mrow>
image ( sin ) = [ -1 , 1 ]
<mrow><mi>ln</mi><mo>&#x2061;<!--ApplyFunction--></mo><mi>a</mi></mrow>
ln a
4.3.7.5 単項集合演算子: <card/>

演算子構文, スキーマクラス

要素 card は濃度関数(集合の要素数)を表します。集合を引数として取り、その濃度を返します。 集合の濃度は非負整数、あるいは無限基数であり得ます。

4.3.7.5.1

Content MathML

<apply><eq/>
  <apply><card/><ci>A</ci></apply>
  <cn>5</cn>
</apply>

表示例

<mrow>
  <mrow intent="cardinality($x)"><mo>|</mo><mi arg="x">A</mi><mo>|</mo></mrow>
  <mo>=</mo>
  <mn>5</mn>
</mrow>
| A | = 5
4.3.7.6 単項初等演算子: <sin/>, <cos/>, <tan/>, <sec/>, <csc/>, <cot/>, <sinh/>, <cosh/>, <tanh/>, <sech/>, <csch/>, <coth/>, <arcsin/>, <arccos/>, <arctan/>, <arccosh/>, <arccot/>, <arccoth/>, <arccsc/>, <arccsch/>, <arcsec/>, <arcsech/>, <arcsinh/>, <arctanh/>

演算子構文, スキーマクラス

これらの演算子要素は標準的な三角関数・双曲線関数およびその逆関数を表します。それらの標準的な解釈は広く知られているため,一括して議論されます。

逆関数については定義が異なる場合があるため,相互運用性を最大化するために,こうした式を評価するアプリケーションは [DLMF] の定義に従うべきです, Chapter 4: Elementary Functions を参照してください。

4.3.7.6.1

Content MathML

<apply><sin/><ci>x</ci></apply>
<apply><sin/>
  <apply><plus/>
    <apply><cos/><ci>x</ci></apply>
    <apply><power/><ci>x</ci><cn>3</cn></apply>
  </apply>
</apply>
<apply><arcsin/><ci>x</ci></apply>
<apply><sinh/><ci>x</ci></apply>
<apply><arcsinh/><ci>x</ci></apply>

表示例

<mrow><mi>sin</mi><mo>&#x2061;<!--ApplyFunction--></mo><mi>x</mi></mrow>
sin x
<mrow>
  <mi>sin</mi>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mrow>
    <mo>(</mo>
    <mrow><mi>cos</mi><mo>&#x2061;<!--ApplyFunction--></mo><mi>x</mi></mrow>
    <mo>+</mo>
    <msup><mi>x</mi><mn>3</mn></msup>
    <mo>)</mo>
  </mrow>
</mrow>
sin ( cos x + x 3 )
<mrow>
  <mi>arcsin</mi>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mi>x</mi>
</mrow>
<mtext>&nbsp;&nbsp;または&nbsp;&nbsp;</mtext>
<mrow>
  <msup><mi>sin</mi><mrow><mo>-</mo><mn>1</mn></mrow></msup>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mi>x</mi>
</mrow>
arcsin x   または   sin - 1 x
<mrow><mi>sinh</mi><mo>&#x2061;<!--ApplyFunction--></mo><mi>x</mi></mrow>
sinh x
<mrow>
  <mi>arcsinh</mi>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mi>x</mi>
</mrow>
<mtext>&nbsp;&nbsp;または&nbsp;&nbsp;</mtext>
<mrow>
  <msup><mi>sinh</mi><mrow><mo>-</mo><mn>1</mn></mrow></msup>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mi>x</mi>
</mrow>
arcsinh x   または   sinh - 1 x
4.3.7.7 単項ベクトル解析演算子: <divergence/>, <grad/>, <curl/>, <laplacian/>

演算子構文, スキーマクラス

要素 divergence は発散(div)演算子を表します。引数として、スカラー値関数のベクトル(ベクトル値関数を表す意図のもの)を取り、その発散を与えるスカラー値関数を返します。

要素 grad は勾配(grad)演算子を表します。引数としてスカラー値関数を取り、関数の勾配を表す関数のベクトルを返します。

要素 curl は旋度(curl)を表します。引数としてスカラー値関数のベクトル(ベクトル値関数を表す意図のもの)を取り、関数のベクトルを返します。

要素 laplacian はラプラシアン演算子を表します。ラプラシアンはベクトル値関数を表すスカラー値関数のベクトルを引数に取り、関数のベクトルを返します。

4.3.7.7.1

Content MathML

<apply><divergence/><ci>a</ci></apply>
<apply><divergence/>
  <ci type="vector">E</ci>
</apply>
<apply><grad/><ci type="function">f</ci></apply>
<apply><curl/><ci>a</ci></apply>
<apply><laplacian/><ci type="vector">E</ci></apply>

表示例

<mrow>
 <mi>div</mi><mo>&#x2061;<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>a</mi><mo>)</mo></mrow>
</mrow>
div ( a )
<mrow>
 <mi>div</mi><mo>&#x2061;<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>E</mi><mo>)</mo></mrow>
</mrow>
<mtext> or </mtext>
<mrow><mo></mo><mo></mo><mi>E</mi></mrow>
div ( E )  または  E
<mrow>
  <mi>grad</mi><mo>&#x2061;<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>f</mi><mo>)</mo></mrow>
</mrow>
<mtext> or </mtext>
<mrow>
  <mo></mo><mo>&#x2061;<!--ApplyFunction--></mo>
  <mrow><mo>(</mo><mi>f</mi><mo>)</mo></mrow>
</mrow>
grad ( f )  または  ( f )
<mrow>
 <mi>curl</mi><mo>&#x2061;<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>a</mi><mo>)</mo></mrow>
</mrow>
<mtext> または </mtext>
<mrow><mo></mo><mo>×</mo><mi>a</mi></mrow>
curl ( a )  または  × a
<mrow>
  <msup><mo></mo><mn>2</mn></msup>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mrow><mo>(</mo><mi>E</mi><mo>)</mo></mrow>
</mrow>
2 ( E )

座標を定義する関数は座標名で表された式として暗黙的に定義される場合があり、その場合は座標名を束縛変数として提供する必要があります。

4.3.7.7.2

Content MathML

<apply><divergence/>
  <bvar><ci>x</ci></bvar>
  <bvar><ci>y</ci></bvar>
  <bvar><ci>z</ci></bvar>
  <vector>
    <apply><plus/><ci>x</ci><ci>y</ci></apply>
    <apply><plus/><ci>x</ci><ci>z</ci></apply>
    <apply><plus/><ci>z</ci><ci>y</ci></apply>
  </vector>
</apply>
<apply><grad/>
  <bvar><ci>x</ci></bvar>
  <bvar><ci>y</ci></bvar>
  <bvar><ci>z</ci></bvar>
  <apply><times/><ci>x</ci><ci>y</ci><ci>z</ci></apply>
</apply>
<apply><laplacian/>
  <bvar><ci>x</ci></bvar>
  <bvar><ci>y</ci></bvar>
  <bvar><ci>z</ci></bvar>
  <apply><ci>f</ci><ci>x</ci><ci>y</ci></apply>
</apply>

表示例

<mrow>
  <mi>div</mi>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mo>(</mo>
  <mtable>
    <mtr><mtd>
      <mi>x</mi>
      <mo></mo>
      <mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow>
    </mtd></mtr>
    <mtr><mtd>
      <mi>y</mi>
      <mo></mo>
      <mrow><mi>x</mi><mo>+</mo><mi>z</mi></mrow>
    </mtd></mtr>
    <mtr><mtd>
      <mi>z</mi>
      <mo></mo>
      <mrow><mi>z</mi><mo>+</mo><mi>y</mi></mrow>
    </mtd></mtr>
  </mtable>
  <mo>)</mo>
</mrow>
div ( x x + y y x + z z z + y )
<mrow>
  <mi>grad</mi>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mrow>
    <mo>(</mo>
    <mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>,</mo><mi>z</mi><mo>)</mo></mrow>
    <mo></mo>
    <mrow>
      <mi>x</mi>
      <mo>&#x2062;<!--InvisibleTimes--></mo>
      <mi>y</mi>
      <mo>&#x2062;<!--InvisibleTimes--></mo>
      <mi>z</mi>
    </mrow>
    <mo>)</mo>
  </mrow>
</mrow>
grad ( ( x , y , z ) x y z )
<mrow>
  <msup><mo></mo><mn>2</mn></msup>
  <mo>&#x2061;<!--ApplyFunction--></mo>
  <mrow>
    <mo>(</mo>
    <mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>,</mo><mi>z</mi><mo>)</mo></mrow>
    <mo></mo>
    <mrow>
      <mi>f</mi>
      <mo>&#x2061;<!--ApplyFunction--></mo>
      <mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow>
    </mrow>
    <mo>)</mo>
  </mrow>
</mrow>
2 ( ( x , y , z ) f ( x , y ) )
4.3.7.8 モーメント <moment/>, <momentabout>

演算子構文, スキーマクラス

要素 moment はデータ集合または確率変数の第i次モーメントを表します。 moment 関数は degree および momentabout の修飾子を受け取ります。もし degree があれば、それはモーメントの次数を示します。無ければ第一次モーメントとみなされます。moment と共に使われる場合、degree スキーマは単一の子を含むことが期待されます。もし momentabout があれば、それはモーメントが取られる点を示します。無ければ原点についてのモーメントとみなされます。

4.3.7.8.1

Content MathML

<apply><moment/>
  <degree><cn>3</cn></degree>
  <momentabout><mean/></momentabout>
  <cn>6</cn><cn>4</cn><cn>2</cn><cn>2</cn><cn>5</cn>
</apply>
<apply><moment/>
  <degree><cn>3</cn></degree>
  <momentabout><ci>p</ci></momentabout>
  <ci>X</ci>
</apply>

表示例

<msub>
  <mrow>
    <mo></mo>
    <msup>
      <mrow>
        <mo>(</mo>
        <mn>6</mn><mo>,</mo>
        <mn>4</mn><mo>,</mo>
        <mn>2</mn><mo>,</mo>
        <mn>2</mn><mo>,</mo>
        <mn>5</mn>
        <mo>)</mo>
      </mrow>
      <mn>3</mn>
    </msup>
    <mo></mo>
  </mrow>
  <mi>mean</mi>
</msub>
( 6 , 4 , 2 , 2 , 5 ) 3 mean
<msub>
  <mrow>
    <mo></mo>
    <msup><mi>X</mi><mn>3</mn></msup>
    <mo></mo>
  </mrow>
  <mi>p</mi>
</msub>
X 3 p
4.3.7.9 対数 <log/> , <logbase>

演算子構文, スキーマクラス

要素 log は与えられた底に対する対数関数を表します。もし logbase 修飾子が存在すれば底を指定します。無ければ底は 10 と見なされます。

4.3.7.9.1

Content MathML

<apply><log/>
  <logbase><cn>3</cn></logbase>
  <ci>x</ci>
</apply>
<apply><log/><ci>x</ci></apply>

表示例

<mrow><msub><mi>log</mi><mn>3</mn></msub><mo>&#x2061;<!--ApplyFunction--></mo><mi>x</mi></mrow>
log 3 x
<mrow><mi>log</mi><mo>&#x2061;<!--ApplyFunction--></mo><mi>x</mi></mrow>
log x

4.3.8 単項限定微積分演算子

4.3.8.1 積分 <int/>

演算子構文, スキーマクラス

The int 要素は、関数に対する定積分または不定積分、または束縛変数を持つ式に対する定積分の演算子要素です。

4.3.8.1.1

Content MathML

<apply><eq/>
  <apply><int/><sin/></apply>
  <cos/>
</apply>
<apply><int/>
  <interval><ci>a</ci><ci>b</ci></interval>
  <cos/>
</apply>

表示例

<mrow><mrow><mi></mi><mi>sin</mi></mrow><mo>=</mo><mi>cos</mi></mrow>
sin = cos
<mrow>
  <msubsup><mi></mi><mi>a</mi><mi>b</mi></msubsup><mi>cos</mi>
</mrow>
a b cos

The int 要素は、積分変数として機能する束縛変数とともに使用することもできます。

定積分は、積分領域を指定する修飾要素を与えることで示されます。lowlimit/uplimit の組は、おそらく定積分の最も「標準的な」表現です。

4.3.8.1.2

Content MathML

<apply><int/>
  <bvar><ci>x</ci></bvar>
  <lowlimit><cn>0</cn></lowlimit>
  <uplimit><cn>1</cn></uplimit>
  <apply><power/><ci>x</ci><cn>2</cn></apply>
</apply>

表示例

<mrow>
  <msubsup><mi></mi><mn>0</mn><mn>1</mn></msubsup>
  <msup><mi>x</mi><mn>2</mn></msup>
  <mi>d</mi>
  <mi>x</mi>
</mrow>
0 1 x 2 d x
4.3.8.2 微分 <diff/>

演算子構文, スキーマクラス

The diff 要素は、一変数の関数または式に対する微分演算子要素です。これは実際の関数に直接適用して元の関数の導関数である関数を示すことも、単一変数を含む式に適用することもできます。

4.3.8.2.1

Content MathML

<apply><diff/><ci>f</ci></apply>
<apply><eq/>
  <apply><diff/>
    <bvar><ci>x</ci></bvar>
    <apply><sin/><ci>x</ci></apply>
  </apply>
  <apply><cos/><ci>x</ci></apply>
</apply>

表示例

<msup><mi>f</mi><mo></mo></msup>
f
<mrow>
  <mfrac>
    <mrow>
      <mi>d</mi><mrow><mi>sin</mi><mo>&#x2061;<!--ApplyFunction--></mo><mi>x</mi></mrow>
    </mrow>
    <mrow>
      <mi>d</mi><mi>x</mi>
    </mrow>
  </mfrac>
  <mo>=</mo>
  <mrow><mi>cos</mi><mo>&#x2061;<!--ApplyFunction--></mo><mi>x</mi></mrow>
</mrow>
d sin x d x = cos x

bvar 要素は、取るべき導数の階数を指定する degree 要素を含むこともできます。

4.3.8.2.2

Content MathML

<apply><diff/>
  <bvar><ci>x</ci><degree><cn>2</cn></degree></bvar>
  <apply><power/><ci>x</ci><cn>4</cn></apply>
</apply>

表示例

<mfrac>
  <mrow>
    <msup><mi>d</mi><mn>2</mn></msup>
    <msup><mi>x</mi><mn>4</mn></msup>
  </mrow>
  <mrow><mi>d</mi><msup><mi>x</mi><mn>2</mn></msup></mrow>
</mfrac>
d 2 x 4 d x 2
4.3.8.3 偏微分 <partialdiff/>

演算子構文, スキーマクラス

The partialdiff 要素は、多変数の関数または式に対する偏微分演算子要素です。

関数の偏微分の場合、包含する partialdiff は2つの引数を取ります。まず第一に、位置によってどの関数引数が偏導関数の構成に関与するかを示すインデックスのリスト、次に偏微分される実際の関数です。インデックスは繰り返されることがあります。

4.3.8.3.1

Content MathML

<apply><partialdiff/>
  <list><cn>1</cn><cn>1</cn><cn>3</cn></list>
  <ci type="function">f</ci>
</apply>
<apply><partialdiff/>
  <list><cn>1</cn><cn>1</cn><cn>3</cn></list>
  <lambda>
    <bvar><ci>x</ci></bvar>
    <bvar><ci>y</ci></bvar>
    <bvar><ci>z</ci></bvar>
    <apply><ci>f</ci><ci>x</ci><ci>y</ci><ci>z</ci></apply>
  </lambda>
</apply>

表示例

<mrow>
  <msub>
    <mi>D</mi>
    <mrow><mn>1</mn><mo>,</mo><mn>1</mn><mo>,</mo><mn>3</mn></mrow>
  </msub>
  <mi>f</mi>
</mrow>
D 1 , 1 , 3 f
<mfrac>
  <mrow>
    <msup><mo></mo><mn>3</mn></msup>
    <mrow>
      <mi>f</mi>
      <mo>&#x2061;<!--ApplyFunction--></mo>
      <mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>,</mo><mi>z</mi><mo>)</mo></mrow>
    </mrow>
  </mrow>
  <mrow>
    <mrow><mo></mo><msup><mi>x</mi><mn>2</mn></msup></mrow>
    <mrow><mo></mo><mi>z</mi></mrow>
  </mrow>
</mfrac>
3 f ( x , y , z ) x 2 z

代数式の場合、束縛変数は包含する apply 要素の子である bvar 要素によって与えられます。bvar 要素は、その変数に対して取る偏導数の階数を指定する degree 要素を含むこともできます。

全体の微分階数を指定する必要がある場合、それは包含する apply 要素の子として、すなわち関連付けられた bvar を持たないトップレベルの degree 要素の使用によって示されます。

4.3.8.3.2

Content MathML

<apply><partialdiff/>
  <bvar><ci>x</ci></bvar>
  <bvar><ci>y</ci></bvar>
  <apply><ci type="function">f</ci><ci>x</ci><ci>y</ci></apply>
</apply>
<apply><partialdiff/>
  <bvar><ci>x</ci><degree><ci>m</ci></degree></bvar>
  <bvar><ci>y</ci><degree><ci>n</ci></degree></bvar>
  <degree><ci>k</ci></degree>
  <apply><ci type="function">f</ci>
    <ci>x</ci>
    <ci>y</ci>
  </apply>
</apply>

表示例

<mfrac>
  <mrow>
    <msup><mo></mo><mn>2</mn></msup>
    <mrow>
      <mi>f</mi>
      <mo>&#x2061;<!--ApplyFunction--></mo>
      <mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow>
    </mrow>
  </mrow>
  <mrow>
    <mrow><mo></mo><mi>x</mi></mrow>
    <mrow><mo></mo><mi>y</mi></mrow>
  </mrow>
</mfrac>
2 f ( x , y ) x y
<mfrac>
  <mrow>
    <msup><mo></mo><mi>k</mi></msup>
    <mrow>
      <mi>f</mi>
      <mo>&#x2061;<!--ApplyFunction--></mo>
      <mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow>
    </mrow>
  </mrow>
  <mrow>
    <mrow><mo></mo><msup><mi>x</mi><mi>m</mi></msup>
    </mrow>
    <mrow>
    <mo></mo><msup><mi>y</mi><mi>n</mi></msup></mrow>
  </mrow>
</mfrac>
k f ( x , y ) x m y n

4.3.9 定数

定数記号は e や true のような数学的定数や、実数や整数のような集合の名前に対応します。 Strict Content MathML では、これらは対応する記号に単純に書き換えられます(算術定数 および 集合論定数 の構文表を参照してください)。

4.3.9.1 算術定数: <exponentiale/>, <imaginaryi/>, <notanumber/>, <true/>, <false/>, <pi/>, <eulergamma/>, <infinity/>

演算子構文, スキーマクラス

要素 <exponentiale/>, <imaginaryi/>, <notanumber/>, <true/>, <false/>, <pi/>, <eulergamma/>, <infinity/> はそれぞれ次を表します:
自然対数の底(約 2.718);
-1 の平方根(通常iと書かれる);
非数(NaN)、すなわち定義されない浮動小数点演算の結果([IEEE754]参照);
ブール値 true;
ブール値 false;
π(π、約 3.142) — 円周の直径に対する比;
ガンマ定数(γ、約 0.5772);
無限大(∞)。

4.3.9.1.1

Content MathML

<apply><eq/><apply><ln/><exponentiale/></apply><cn>1</cn></apply>
<apply><eq/><apply><power/><imaginaryi/><cn>2</cn></apply><cn>-1</cn></apply>
<apply><eq/><apply><divide/><cn>0</cn><cn>0</cn></apply><notanumber/></apply>
<apply><eq/><apply><or/><true/><ci type="boolean">P</ci></apply><true/></apply>
<apply><eq/><apply><and/><false/><ci type="boolean">P</ci></apply><false/></apply>
<apply><approx/><pi/><cn type="rational">22<sep/>7</cn></apply>
<apply><approx/><eulergamma/><cn>0.5772156649</cn></apply>
<infinity/>

表示例

<mrow>
  <mrow><mi>ln</mi><mo>&#x2061;<!--ApplyFunction--></mo><mi>e</mi></mrow>
  <mo>=</mo>
  <mn>1</mn>
</mrow>
ln e = 1
<mrow><msup><mi>i</mi><mn>2</mn></msup><mo>=</mo><mn>-1</mn></mrow>
i 2 = -1
<mrow>
  <mrow><mn>0</mn><mo>/</mo><mn>0</mn></mrow>
  <mo>=</mo>
  <mi>NaN</mi>
</mrow>
0 / 0 = NaN
<mrow>
  <mrow><mi>true</mi><mo></mo><mi>P</mi></mrow>
  <mo>=</mo>
  <mi>true</mi>
</mrow>
true P = true
<mrow>
  <mrow><mi>false</mi><mo></mo><mi>P</mi></mrow>
  <mo>=</mo>
  <mi>false</mi>
</mrow>
false P = false
<mrow>
  <mi>π</mi>
  <mo></mo>
  <mrow><mn>22</mn><mo>/</mo><mn>7</mn></mrow>
</mrow>
π 22 / 7
<mrow>
  <mi>γ</mi><mo></mo><mn>0.5772156649</mn>
</mrow>
γ 0.5772156649
<mi></mi>
4.3.9.2 集合論定数: <integers/>, <reals/>, <rationals/>, <naturalnumbers/>, <complexes/>, <primes/>, <emptyset/>

演算子構文, スキーマクラス

これらの要素は標準的な数の集合、整数、実数、有理数、自然数(0 を含む)、複素数、素数、および空集合を表します。

4.3.9.2.1

Content MathML

<apply><in/><cn type="integer">42</cn><integers/></apply>
<apply><in/><cn type="real">44.997</cn><reals/></apply>
<apply><in/><cn type="rational">22<sep/>7</cn><rationals/></apply>
<apply><in/><cn type="integer">1729</cn><naturalnumbers/></apply>
<apply><in/><cn type="complex-cartesian">17<sep/>29</cn><complexes/></apply>
<apply><in/><cn type="integer">17</cn><primes/></apply>
<apply><neq/><integers/><emptyset/></apply>

表示例

<mrow>
  <mn>42</mn><mo></mo><mi mathvariant="double-struck">Z</mi>
</mrow>
42 Z
<mrow>
  <mn>44.997</mn><mo></mo><mi mathvariant="double-struck">R</mi>
</mrow>
44.997 R
<mrow>
  <mrow><mn>22</mn><mo>/</mo><mn>7</mn></mrow>
  <mo></mo>
  <mi mathvariant="double-struck">Q</mi>
</mrow>
22 / 7 Q
<mrow>
  <mn>1729</mn><mo></mo><mi mathvariant="double-struck">N</mi>
</mrow>
1729 N
<mrow>
  <mrow>
    <mn>17</mn><mo>+</mo><mn>29</mn><mo>&#x2062;<!--InvisibleTimes--></mo><mi>i</mi>
  </mrow>
  <mo></mo>
  <mi mathvariant="double-struck">C</mi>
</mrow>
17 + 29 i C
<mrow>
  <mn>17</mn><mo></mo><mi mathvariant="double-struck">P</mi>
</mrow>
17 P
<mrow>
  <mi mathvariant="double-struck">Z</mi><mo></mo><mi></mi>
</mrow>
Z

4.3.10 特殊要素の形式

4.3.10.1 量化子: <forall/>, <exists/>

演算子構文, スキーマクラス

The forall and <exists/> 要素は、全称(for all)および存在(there exists)量化子を表します。これらは1つ以上の束縛変数と、量化される主張を指定する引数を取ります。さらに、condition やその他の修飾子を用いて束縛変数の定義域を制限することができます。

4.3.10.1.1

Content MathML

<bind><forall/>
  <bvar><ci>x</ci></bvar>
  <apply><eq/>
    <apply><minus/><ci>x</ci><ci>x</ci></apply>
    <cn>0</cn>
  </apply>
</bind>

表示例

<mrow>
  <mo></mo>
  <mi>x</mi>
  <mo>.</mo>
  <mrow>
   <mo>(</mo>
    <mrow>
      <mrow><mi>x</mi><mo></mo><mi>x</mi></mrow>
      <mo>=</mo>
      <mn>0</mn>
    </mrow>
    <mo>)</mo>
  </mrow>
</mrow>
x . ( x x = 0 )

Content MathML

<bind><exists/>
  <bvar><ci>x</ci></bvar>
  <apply><eq/>
    <apply><ci>f</ci><ci>x</ci></apply>
    <cn>0</cn>
  </apply>
</bind>

表示例

<mrow>
  <mo></mo>
  <mi>x</mi>
  <mo>.</mo>
  <mrow>
   <mo>(</mo>
    <mrow>
      <mrow>
       <mi>f</mi>
       <mo>&#x2061;<!--ApplyFunction--></mo>
       <mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
      </mrow>
      <mo>=</mo>
      <mn>0</mn>
    </mrow>
    <mo>)</mo>
  </mrow>
</mrow>
x . ( f ( x ) = 0 )

Content MathML

<apply><exists/>
  <bvar><ci>x</ci></bvar>
  <domainofapplication>
    <integers/>
  </domainofapplication>
  <apply><eq/>
    <apply><ci>f</ci><ci>x</ci></apply>
    <cn>0</cn>
  </apply>
</apply>

Strict MathML の同等表現:

<bind><csymbol cd="quant1">exists</csymbol>
  <bvar><ci>x</ci></bvar>
  <apply><csymbol cd="logic1">and</csymbol>
    <apply><csymbol cd="set1">in</csymbol>
      <ci>x</ci>
      <csymbol cd="setname1">Z</csymbol>
    </apply>
    <apply><csymbol cd="relation1">eq</csymbol>
      <apply><ci>f</ci><ci>x</ci></apply>
      <cn>0</cn>
    </apply>
  </apply>
</bind>

表示例

<mrow>
  <mo></mo>
  <mi>x</mi>
  <mo>.</mo>
  <mrow>
   <mo>(</mo>
    <mrow>
     <mi>x</mi><mo></mo><mi mathvariant="double-struck">Z</mi>
    </mrow>
    <mo></mo>
    <mrow>
      <mrow>
       <mi>f</mi>
       <mo>&#x2061;<!--ApplyFunction--></mo>
       <mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
      </mrow>
      <mo>=</mo>
      <mn>0</mn>
    </mrow>
    <mo>)</mo>
  </mrow>
</mrow>
x . ( x Z f ( x ) = 0 )
4.3.10.2 ラムダ <lambda>

演算子構文, スキーマクラス

The lambda 要素は、式、束縛変数、および修飾子からユーザー定義の関数を構築するために使用されます。n(場合によっては0)の束縛変数を持つラムダ構成では、最初の n 個の子要素がプレースホルダとして最後の子要素内で実引数と置き換えられる変数を識別する bvar 要素です。束縛変数はオプションの domainofapplication 修飾子やその省略記法のいずれかで制限することができます。lambda 構成の意味は、束縛変数がそれぞれの引数と置き換えられたときに最後の子要素の式を返す n-項関数です。

domainofapplication 子要素は、構築される関数の引数に取り得る値を制限します。例えば、次の lambda 構成は整数上の関数を表します。

<lambda>
  <bvar><ci> x </ci></bvar>
  <domainofapplication><integers/></domainofapplication>
  <apply><sin/><ci> x </ci></apply>
</lambda>

もし lambda 構成に束縛変数が含まれない場合、その lambda 構成は冗長であり、domainofapplication 構成を含まない限り削除できます。その場合、最後の子要素が関数であれば、domainofapplication は既存の関数引数を制限します。次の例は上の関数と同等の別表現です。

<lambda>
  <domainofapplication><integers/></domainofapplication>
  <sin/>
</lambda>

一方で、もし lambda の最後の子要素が数のような関数でないものであれば、その lambda 構成は関数ではなく同じ数となり、任意の domainofapplication は無視されます。

4.3.10.2.1

Content MathML

<lambda>
  <bvar><ci>x</ci></bvar>
  <apply><sin/>
    <apply><plus/><ci>x</ci><cn>1</cn></apply>
  </apply>
</lambda>

表示例

<mrow>
  <mi>λ</mi>
  <mi>x</mi>
  <mo>.</mo>
  <mrow>
   <mo>(</mo>
    <mrow>
      <mi>sin</mi>
      <mo>&#x2061;<!--ApplyFunction--></mo>
      <mrow><mo>(</mo><mi>x</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow>
    </mrow>
    <mo>)</mo>
  </mrow>
</mrow>
<mtext>&nbsp;or&nbsp;</mtext>
<mrow>
  <mi>x</mi>
  <mo></mo>
  <mrow>
    <mi>sin</mi>
    <mo>&#x2061;<!--ApplyFunction--></mo>
    <mrow><mo>(</mo><mi>x</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow>
  </mrow>
</mrow>
λ x . ( sin ( x + 1 ) )  or  x sin ( x + 1 )
4.3.10.3 区間 <interval>

演算子構文, スキーマクラス

The interval 要素は、実数直線上の単純な数学的区間を表現するためのコンテナ要素です。オプション属性 closure を取り、その値は openclosedopen-closed、または closed-open のいずれかを取ることができ、デフォルトは closed です。

4.3.3.1 <domainofapplication>、<interval>、<condition>、<lowlimit>、および <uplimit> の使用法で説明されているように)、intervalbvar の直後に続く場合、修飾子として解釈されます。

4.3.10.3.1

Content MathML

<interval closure="open"><ci>x</ci><cn>1</cn></interval>
<interval closure="closed"><cn>0</cn><cn>1</cn></interval>
<interval closure="open-closed"><cn>0</cn><cn>1</cn></interval>
<interval closure="closed-open"><cn>0</cn><cn>1</cn></interval>

表示例

<mrow><mo>(</mo><mi>x</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow>
( x , 1 )
<mrow><mo>[</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>]</mo></mrow>
[ 0 , 1 ]
<mrow><mo>(</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>]</mo></mrow>
( 0 , 1 ]
<mrow><mo>[</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>)</mo></mrow>
[ 0 , 1 )
4.3.10.4 極限 <limit/>

演算子構文, スキーマクラス

The limit 要素は、数列の極限を取る操作を表します。極限点は lowlimitbvar を指定するか、または一つ以上の束縛変数に対する condition を指定することで表現されます。

極限値に近づく方向は、Strict Content MathML の引数 limit によって与えられます。これにより、この目的のために方向指定子シンボル both_sidesabove、および below が提供されます。これらは tendsto 要素の type 属性の値 allabove、および below に対応します。null シンボルは、type 属性が存在しない場合に対応します。

4.3.10.4.1

Content MathML

<apply><limit/>
  <bvar><ci>x</ci></bvar>
  <lowlimit><cn>0</cn></lowlimit>
  <apply><sin/><ci>x</ci></apply>
</apply>
<apply><limit/>
  <bvar><ci>x</ci></bvar>
  <condition>
    <apply><tendsto/><ci>x</ci><cn>0</cn></apply>
  </condition>
  <apply><sin/><ci>x</ci></apply>
</apply>
<apply><limit/>
  <bvar><ci>x</ci></bvar>
  <condition>
    <apply><tendsto type="above"/><ci>x</ci><ci>a</ci></apply>
  </condition>
  <apply><sin/><ci>x</ci></apply>
</apply>

表示例

<mrow>
  <munder>
    <mi>lim</mi>
    <mrow><mi>x</mi><mo></mo><mn>0</mn></mrow>
  </munder>
  <mrow><mi>sin</mi><mo>&#x2061;<!--ApplyFunction--></mo><mi>x</mi></mrow>
</mrow>
lim x 0 sin x
<mrow>
  <munder>
    <mi>lim</mi>
    <mrow><mi>x</mi><mo></mo><mn>0</mn></mrow>
  </munder>
  <mrow><mi>sin</mi><mo>&#x2061;<!--ApplyFunction--></mo><mi>x</mi></mrow>
</mrow>
lim x 0 sin x
<mrow>
  <munder>
    <mi>lim</mi>
    <mrow><mi>x</mi><mo></mo><msup><mi>a</mi><mo>+</mo></msup></mrow>
  </munder>
  <mrow><mi>sin</mi><mo>&#x2061;<!--ApplyFunction--></mo><mi>x</mi></mrow>
</mrow>
lim x a + sin x
4.3.10.5 区分関数の定義 <piecewise>, <piece>, <otherwise>

演算子構文, スキーマクラス

The piecewise, piece, and otherwise 要素は、例えば H(x) = 0 if x less than 0, H(x) = 1 otherwise のような「区分的」関数定義を表現するために使用されます。

宣言は piecewise 要素を使って構成されます。これは零個以上の piece 要素と、オプションで一つの otherwise 要素を含みます。各 piece 要素は正確に二つの子要素を含みます。第一子要素は、その piece に関連する第二子要素で指定された条件が真のときに piecewise 式が取る値を定義します。piece 要素も otherwise 要素も存在しない縮退ケースは、定義域のすべての値について未定義として扱われます。

otherwise 要素は、どの条件(piece 要素の第二子要素)も真でない場合に piecewise 関数が取る値、すなわちデフォルト値を指定することを可能にします。

注意すべきは、piecewise 内の piece 子要素の順序が実行順序を意味するわけではないという点です。piece の第二子要素で定義される関数域の部分集合が互いに互換であること、あるいは重複する場合には対応する第一子要素の値が一致することを著者が保証する責任があります。そうでない場合、式の意味は未定義になります。

4.3.10.5.1

Content MathML

<piecewise>
  <piece>
    <apply><minus/><ci>x</ci></apply>
    <apply><lt/><ci>x</ci><cn>0</cn></apply>
  </piece>
  <piece>
    <cn>0</cn>
    <apply><eq/><ci>x</ci><cn>0</cn></apply>
  </piece>
  <piece>
    <ci>x</ci>
    <apply><gt/><ci>x</ci><cn>0</cn></apply>
  </piece>
</piecewise>

表示例

<mrow>
  <mo>{</mo>
  <mtable>
    <mtr>
      <mtd><mrow><mo></mo><mi>x</mi></mrow></mtd>
      <mtd columnalign="left"><mtext>&#xa0; if &#xa0;</mtext></mtd>
      <mtd><mrow><mi>x</mi><mo>&lt;</mo><mn>0</mn></mrow></mtd>
    </mtr>
    <mtr>
      <mtd><mn>0</mn></mtd>
      <mtd columnalign="left"><mtext>&#xa0; if &#xa0;</mtext></mtd>
      <mtd><mrow><mi>x</mi><mo>=</mo><mn>0</mn></mrow></mtd>
    </mtr>
    <mtr>
      <mtd><mi>x</mi></mtd>
      <mtd columnalign="left"><mtext>&#xa0; if &#xa0;</mtext></mtd>
      <mtd><mrow><mi>x</mi><mo>&gt;</mo><mn>0</mn></mrow></mtd>
    </mtr>
  </mtable>
</mrow>
{ x   if   x < 0 0   if   x = 0 x   if   x > 0

5. MathMLへの注釈付け:intent

MathMLは支援技術(AT)によって広く採用されています。 しかし、数学記法は曖昧さが生じる場合があり、このため一部のケースでATが発音する内容を推測することがあります。 MathML 4では、著者が意図を表現できる軽量な方法としてintent属性が追加されています。 この属性はaria-label属性に似ていますが、 重要な違いがいくつかあります。 アクセシビリティに関して、主な違いはintent が点字生成に影響しないことです。 多くの言語には数式用の独自の点字コードがあるため、音声用の単語が点字生成の内容に影響を与えるべきではありません。 英語など一部の言語では複数の数式用点字コードがあり、どれが読者に望まれるか著者が知ることはできません。 このため、著者が(数式用)点字を知っていたとしてもaria-braillelabelaria-labelを上書きすることはできません。

2.1.6 すべてのMathML要素で共有される属性に記載されているように、 MathML要素はintentおよびarg属性を持つことができ、 用語のintentを指定可能です。この 注釈は用語の完全な数学的定義を提供することを意図したものではありません。 主にATが音声や点字のレンダリングを生成する支援を目的としています。詳細はC. MathMLアクセシビリティを参照してください。 それでも、Content MathMLや計算システムへの変換の補助にも役立つ可能性があります。

intent属性は、 発話内容の意図を表す簡単な関数構文を符号化します。 形式的な文法が下記に示されていますが、典型的な例として intent="power($base,$exponent)"のような使い方があります:

<msup intent="power($base,$exp)">
  <mi arg="base">x</mi>
  <mi arg="exp">n</mi>
</msup>
x n

intent値のpower($base,$exp)によって、 著者はこの式が上付き文字の他の多くの意味ではなく、 累乗(べき乗)を表している意図であることを明確にしています。 ATがpowerという概念をサポートしている場合、 文脈や引数、その他の詳細に応じて異なる発話を選択することができます。 例えば上記の式は「xのn乗」と読み上げられるかもしれませんが、 "n"の代わりに"2"が与えられた場合には「xの二乗」となる場合があります。

5.1 intentの文法

intent属性の値は、次の文法に一致させる必要があります。

intent             := self-property-list | expression
self-property-list := property+ S    
expression         := S ( term property* ) S 
term               := concept-or-literal | number | reference | application
concept-or-literal := NCName
number             := '-'? \d+ ( '.' \d+ )?
reference          := '$' NCName
application        := expression '(' arguments? S ')'
arguments          := expression ( ',' expression )*
property           := S ':' NCName
S                  := [ \t\n\r]*

ここで、NCName は[xml-names]で定義される通りであり、 digitは0–9の範囲の文字です。

各部分は以下の通りです:

concept-or-literal
名前はNCNameの生成規則に一致している必要があります。 concept-or-literalconceptまたはliteralとして解釈されます。
  • conceptは数学的または アプリケーション固有の関数や概念に対応します。 多くの概念については、発話に用いる単語と、 概念参照時に使う名前は非常に似ています。

  • literal_ (U+00F5)で始まる名前です。 これらはIntent Concept Dictionaryに含まれることはありません。 literalの読み上げは名前に含まれる -, _, .を空白に置換し、 結果の語句を読み上げて生成します。

number
明示的なnumber(例えば2.5など)はそれ自身を表します。
reference
引数のreference(例えば$name)は、arg="name"属性を持つ 子孫要素を参照します。id属性とは異なりargは ドキュメント内で一意である必要はありません。一致する要素を探索する際は、 子孫のみを対象とし、探索を早期終了する基準として intentまたはarg属性がセットされている要素で それ以上深く探索しないようにします。 等価なliteralを挿入する代わりにreferenceを適切に利用することで、 数学構造を辿りながらintentを活用できるようになります。
application
applicationは キャプション(関数)を引数にプレフィックス記法で適用したものを表します。 関数の先頭と引数リストの間には、下記に示すpropertyリストを入れることができ、 生成される読み上げのスタイルに影響を与えるほか、 intentの消費者に対し追加情報を提供できます。
property
propertyはintentに追加の プロパティを付加し、 システム側で生成される音声や点字を システム固有方法で調整するために利用できます。プロパティは 音声形式に直接関係するもの(例::infix)や、 :unit:chemistryのように間接的に音声スタイルに影響するものなどがあります。

システムがサポートすべきプロパティのリストはオープンですが、 以下に示すコアプロパティは含めるべきです。

self-property-list
トップレベルでは、intentは 空でないプロパティリストのみからなる場合があります。これらは 5.4 Intentの概念とプロパティの使用で 解説されている通り、現在の要素へ適用されます。
expression
上述の用語を用いた簡単な関数構文です。

5.2 インテント概念辞書

intentをサポートする全てのATシステムは、 少なくとも暗黙的に認識できる概念のリストを保持しています。 概念名のマッチングや使用に関する詳細は5.4 インテント概念とプロパティの使用方法に記載されています。 このようなATは下記で解説するコアリスト内の概念を認識すべきです。 また、下記で述べるオープンリストにある概念や、 独自の概念も認識してもよいです。

インテント概念辞書 は、概念名をその概念に対応する音声・テキスト・点字へ対応付けする抽象的なマッピングです。 これは、MathMLレンダラーが既定値セットとして認識すべき情報を提供するB. 演算子辞書にやや類似しています。 propertyは演算子辞書におけるformの利用とも類似性があり、 マッチングには結合性プロパティ(prefixinfixなど)が使われます。

インテント概念名は2つのリストにまとめられ、 w3c/mathml-docs GitHubリポジトリで管理されています。 これらの概念辞書はyamlデータを基にHTMLテーブルで公開されていますが、 概念から音声ヒントへのマッピングの実装方法は制限されません。 固定リストやハッシュテーブルのみならず、XPathマッチング、正規表現、AIなど 任意の適切な手法が使えます。 唯一要求されるのは、コア概念辞書に掲載されたケースを受け入れ、 適切な音声ヒントを生成できることです。

将来の"core"概念リストでは、利用状況に応じて"open"リストから名前が取り込まれる可能性があります。

MathMLで使われる可能性があるUnicode文字は数千種類存在します。 実装者の参考用に、同じリポジトリに 音声テンプレートの非規範リストがあり、 多くの文字の推奨発話例を掲載しています。

5.3 インテントプロパティ

インテントプロパティは、 intent属性で通常生成される音声や点字の発話内容を修飾する役目を持ちます。 多くのプロパティは、applicationの先頭や<mtable>など 特定のコンテキストのみに効果が定義されています。 他の文脈でもプロパティを使うことはエラーではありませんが、 既定では無視されるか、システム次第の振る舞いとなります。

概念リストと同様、Working Groupはプロパティリスト(実装推奨プロパティ値一覧)を管理しています。

ここでは、音声生成に影響する主要なプロパティ分類について説明します。

:prefix, :infix, :postfix, :function, :silent

これらのプロパティを関数applicationで使うことで、 名前の読上げを省略したり、語順を入れ替えたりできます。 :prefix:infix:postfixは 名前や引数の発話時の語順に関係し、 必ずしも数式表記の表示順とは一致しません

  • サポートされる概念の場合、 このプロパティはATが採用する代替表現に利用してもよいです。例えば unionはコアリストに登録されており、発話パターン「$1 union $2」や「union of $1 and $2」があります。 union :prefix ($a,$b)であれば、後者のスタイルを優先してほしい意図になります。
  • literal未サポート概念の場合は、 関数名から生成されるテキスト表現をプロパティで指定された通り読み上げるべきです。
    • f :prefix ($x) : f x
    • f :infix ($x,y) : x f y
    • f :postix ($x) : x f
    • f :function ($x, $y): f of x and y
    • f :silent ($x,$y) : x y
    上記の単語は一例であり、ATは他の適切な発音表現を自由に選択できます。 例えばf:function($x, $y)f of x comma yなどにもなり得ます。 どのプロパティも使われない場合、既定値はfunctionとなります(但しliteralが silent(例えば_)の場合は既定値は:silent)。 5.7 literalpropertyに関する注意の例もご参照ください。
:literal, :common, :legacy

これらのプロパティは生成される音声全体のスタイルを制御します。 詳細は別ドキュメントで解説されています。

:literalはATに対し意味解釈を行わず、 リーフ内容も含めて全てをリテラル解釈で読み上げるよう要求します(例:|ならvertical bar)。 :commonは指定された一連のヒューリスティックを使って一般的記法の意図を解釈させます。 :legacyはシステム独自挙動を要求します。

:matrix, :system-of-equations, :lines, :continued-row, :equation-label

これらのプロパティはmtableや、 referenceを介したmtablemtrmtdなどに利用できます。 アラインメント各部の読み上げ方に影響します。

発話の具体的な文言はシステム依存です。

  • :matrixでは、行番号などを発話するなど行列向けのスタイルになります。
  • :system-of-equationsは、表示数式(および不等式)向けスタイルになり、通常は行番号を発話しません。 各表の行は通常「方程式」として読み上げられますが、 continued-rowプロパティがmtrに指定された場合は 前の行から折り返された方程式の続きとみなします。
  • :equation-labelmtdに指定した場合、 そのセルが方程式ラベルであることを示します。
:pause-short, :pause-medium, :pause-long, :pause-xlong
要素の通常処理前に発話を一時停止させるセルフプロパティとして使用します。
:use-argname
arg属性を持つ要素にセルフプロパティとして使うことで、 ATがその子へ移動した際にarg属性値(翻訳されることもある)を発話するよう指定します。

5.4 インテント概念とプロパティの利用

特定のノードに対応するintent属性に 概念コンポーネントが含まれる場合、ATのインテント概念辞書を参照する必要があります。 概念名は正規化され(_(U+00F5)と.(U+002E)を-(U+002D)に変換)、 ASCII 大文字・小文字区別しない一致で比較します。intent で引数が明示されていれば、その数が既定個数となり、 結合性は明示されたプロパティ、 または概念辞書からデフォルト取得されます。それ以外の場合、既定個数は0とされます。

概念は、正規化名・結合性プロパティ・個数 がATの概念辞書のエントリと一致するときサポート概念(AT)と見なされます。 追加概念や多様な個数・結合性・別名に対応する実装も、適切にマッピングされていれば除外されません。 一致するエントリの音声ヒントは、 適切な音声・代替テキスト・点字レンダリング作成の指針として利用できます。 また、引数の順序も明確化できます。 ただし、一般記法は発音方法が多岐に渡るため、ATがヒント内容に従う義務はありません。例えばATは、<mfrac> でマークアップされた分数をthree quartersthree over xと発話する場合があり、 <mo>/</mo>でインライン分数をマークアップするとthree divided by xとなる場合もあります。 選択は内容や intent="divide($num,$denom)" の要素などに依存します。 結合性以外のプロパティも発話のバリエーションに関与します。

一方、概念名・結合性・個数が一致しない場合は 未サポート概念(AT) とみなされ、 literalと同様に扱われます。 すなわち、名前は-, _, .をすべて単語間スペースへ正規化した後そのまま読み上げます。 未サポート概念でも、結合性プロパティと引数が指定されていれば、 引数の発話は可能な限り、指定された結合性プロパティに合うよう組み立てます。

将来のAT更新でインテント概念辞書への概念追加や削除があるため、 サポート概念はアップデートごとに変更され得ます。

インテントに明示的もしくは推論可能な概念が含まれない場合は、 ATは通常MathMLをリテラルまたは構造的に読み上げるべきです( :literalプロパティと同様)。 ただし、指定されたプロパティが可能であれば尊重され、 明示的な概念名を発話せずに 数学的オブジェクト種別の指示に活用されます。 これは表などの大きな構造では有用なテクニックで、 applicationのように子要素をintentで個別指定する必要がなくなります。 例えば<mtable intent=":array">...は値の配列として、 <mtable intent=":system-of-equations">...は方程式リストとして、より適切なスタイルで表を読み上げます。 どちらのケースでも、ATシステムは未注釈の表同様、元の表構造のナビゲーションを提供できます。

一般に、利用者によってATは発話内容を明瞭化するため語句や音を補うことがあります。 例えば視覚障害者向けに、ATはfraction x over three end fractionなどと言って、分数部分を明示的に案内します。 見える人には余計な語句になる場合もあります。ATは常に対象コミュニティに最適な発話を生成すべきです。

5.5 インテント式の解釈

インテント式が生成する音声や点字への影響はシステム毎に異なります。 ただし、システムは本節で記載した解釈と一致する挙動を取るべきです。

5.5.1 複数プロパティ

self-property-listtermに複数のプロパティが現れる場合は、 左から右に評価されます。原則すべてのプロパティが効果を持ちますが、 多くのケースでは複数プロパティが同じ内部パラメータをセットするため 相互に排他となり、最後に指定したものが有効となります。

例:f:prefix:suffixf:suffixとして振る舞い、両プロパティが結合性パラメータをセットします。同様に :literal:common:commonとして処理され、両方ともデフォルト解釈パラメータをセットします。 一方f:pause-medium:prefixf:prefix:pause-mediumと同様に 両方の効果が現れます。

5.5.2 arg参照の展開

インテント式の解釈時、 referenceが含まれていた場合、 参照要素の有効なインテントで置き換えても構いません。すなわち、参照先要素がintent属性付きで インテントを持つ場合、その式で置換できます。 また、参照直後にプロパティが付いていれば 組み合わせた式の末尾で優先的に適用され、参照元要素のプロパティより優先されます。 参照先要素がintentを持たない場合、あるいは intentself-property-listであれば、 その要素の有効インテントとproperty listのプロパティも参照内容として置き換えます。 インテント式を持たない要素の有効インテントはシステム依存ですが、 現在の既定のインテント推論ルール(通常commonまたはliteral)と 互換性があるべきです。値は推論インテント式または その要素で生成される発話表現に相当するliteralです。

5.5.3 selfプロパティの解釈

self-property-list (例:コロン:で始まるintent値)のプロパティは selfプロパティと呼ばれます。各プロパティの効果は 要素(及びその子孫のみ)に限定され、具体的効果は定義内容によります。例:

  • <mrow intent=":pause-medium"><mi>x</mi>...</mrow>mrowの処理直前に発話をポーズすべきことを示します。 (すべての子孫要素直前にポーズするわけではありません)
  • <mrow intent=":literal"><mi>x</mi>...</mrow> はデフォルトインテント推論ルールに関するパラメータliteralにセットします。 このmrow及びその子孫全体は、明示intentや他の selfプロパティ (例:common)で上書きされない限りliteralルールで intent推論されます。

5.5.4

本節では上記の解釈を用いてインテント式を展開する例を示します。

階乗
<mrow intent="$xf:prefix">
 <mrow arg="xf" intent="$f:function($x)">
  <mi arg="x">x</mi><mo arg="f" intent="factorial:suffix">!</mo>
 </mrow>
</mrow>

参照をすべて展開すると次のようになります

<mrow intent="factorial:suffix:function:prefix(_x)">
 <mrow arg="xf" intent="factorial:suffix:function(_x)">
  <mi arg="x">x</mi><mo arg="f" intent="factorial:suffix">!</mo>
 </mrow>
</mrow>
</mrow>

全体の式は最初のmrowのintent(factorial:prefix(_x))で読み上げられ、階乗 xとなります。

common/literal
<mrow intent=":common">
 <msup><mi>x</mi><mn>2</mn></msup>
 <mo>+</mo>
 <mrow intent=":literal">
  <msup><mi>x</mi><mn>2</mn></msup>
 </mrow>
 <mo>+</mo>
 <msup><mi>x</mi><mn>2</mn></msup>
</mrow>
</mrow>

最初のmrowはcommon規則をcurrent要素のスコープに設定し、意図のない最初のmsupはpowerと解釈され、x squaredと読み上げます

2つ目のmrowはliteral規則をスコープに設定し、2つ目のmsupはx superscript 2と読み上げます

最後のmsupは再びcommonスコープなのでx squaredと読み上げます

:commonや:literalプロパティは意図のない要素の既定規則を設定する効果であり、 プロパティごとに分類は不要です。 両者が同じ内部既定ルールパラメータをセットするため相互に排他となる理由でもあります。 同様に:prefixや:suffixなど結合性プロパティも同じfixityパラメータをセットし、 一項目のみ効果を持ちます。

方程式系/行列
<mtable intent=":system-of-equations">
  <mtr>
   <mtd>
    <mo>(</mo>
    <mtable intent=":matrix"><mtr><mtd><mn>1</mn></mtd><mtd><mn>2</mn></mtd></mtr></mtable>
    <mo>)</mo>
   </mtd>
   <mtd>
    <mo>+</mo>
   </mtd>
   <mtd>
    <mo>(</mo>
    <mtable intent=":matrix"><mtr><mtd><mn>2</mn></mtd><mtd><mn>3</mn></mtd></mtr></mtable>
    <mo>)</mo>
   </mtd>
   <mtd>
    <mo>=</mo>
   </mtd>
   <mtd>
    <mo>(</mo>
    <mtable intent=":matrix"><mtr><mtd><mn>3</mn></mtd><mtd><mn>5</mn></mtd></mtr></mtable>
    <mo>)</mo>
   </mtd>
  </mtr>
 </mtable>

最初のmtableはsystem-of-equationsスタイルで読み上げられます(ここではラベルなし方程式1個:one equation:...)。 :system-of-equationsプロパティは現在のmtableのみに影響します。 ネストしたmtableは外側の:system-of-equationプロパティの影響を受けず、 :matrixプロパティで読み上げるので最終的な内容は次のとおりです

1 行
the 1×2 行列 1 2
プラス
the 1×2 行列 2 3
等しい
the 1×2 行列 3 5
関数ヘッド
<mrow intent="$op:infix($x,$y)">
  <mi arg="x">x</mi>
  <msup arg="op" intent="converse:postfix(L)">
    <mi>R</mi>
    <mi>T</mi>
  </msup>
  <mi arg="y">y</mi>
</mrow>

これは次のものと等価です

<mrow intent="converse:postfix(L):infix(_x,_y)">
  <mi arg="x">x</mi>
  <msup arg="op" intent="converse:postfix(L)">
    <mi>R</mi>
    <mi>T</mi>
  </msup>
  <mi arg="y">y</mi>
</mrow>

したがってx L converse y(:infixはL converseに適用)と読み上げます。最初のintentを削除して子要素を順番に読み上げる場合と同じ発話になります。

ポーズ
<mrow>
  <mrow>
    <mi>a</mi><mi>b</mi>
  </mrow>
  <mrow intent=":pause-long">
    <mi>c</mi><mi>d</mi>
  </mrow>
</mrow>

これはa b ポーズ c dと読み上げます

selfプロパティ:pause-longは一回作用し、その適用要素の子孫には影響しません。

commonへの参照
 <mrow intent="wibble($a,$b,$c)">
 <msup arg="a" intent=":common"><mi>x</mi><mn>2</mn></msup>
 <mo>+</mo>
  <msup arg="b" intent=":literal"><mi>x</mi><mn>2</mn></msup>
 <mo>+</mo>
 <msup arg="c"><mi>x</mi><mn>2</mn></msup>
</mrow>

参照先要素はintentがないか、selfプロパティのみのintentなので、それぞれ有効インテントは system依存の発話表現となりますが、最初は"common"規則、2つ目は"literal"規則、3つ目は"legacy"規則により 生成されます(ここではlegacy読み上げがcommonと同じと仮定)

<mrow intent="wibble(_x_squared,x_superscript_2,_x_squared)">
 <msup arg="a" intent=":common"><mi>x</mi><mn>2</mn></msup>
 <mo>+</mo>
  <msup arg="b" intent=":literal"><mi>x</mi><mn>2</mn></msup>
 <mo>+</mo>
 <msup arg="c"><mi>x</mi><mn>2</mn></msup>
</mrow>

読み上げ例:

wibble of x squared comma supercript two comma x squared

合成単位
<mrow intent=":unit">
  <mi>W</mi>
  <mo>/</mo>
  <msup>
    <mi>m</mi>
    <mn>2</mn>
  </msup>
</mrow>

:unitプロパティによりmrowスコープ内は「単位スタイル」で読み上げられます。 実際の単語はsystem依存ですが、例えば<mi>W</mi>はWatts、 <mo>/</mo>はperとなる例が典型です。

Watts per square metre

5.6 インテント・エラー処理

インテントプロセッサは、インテント式のエラーを 実装がサポートするいかなる適切な方法で通知してもよいです。生成テキストとしてメッセージを返したり、 例外(エラー)をスローしたりします。ただし、ウェブプラットフォーム環境では、読者がソースを修正できない場合が多いため、 インテントプロセッサは下記のようにエラーから回復できるモードを提供すべきです。

5.6.1 インテント・エラー回復

  1. intent 属性が5.1 intentの文法に一致しない場合、 プロセッサはその属性が無いものとして動作すべきです。 通常、この場合はMathML要素およびその子孫から 適切なフォールバック・テキストが生成されます。エラー属性のみ無視され、 数式内の他のintent属性はそのまま利用される必要があります。
  2. $xなどのreferenceが、 子孫要素に値xarg属性と一致しない場合、 プロセッサはその参照をリテラル_dollar_xで置き換えたものとして 動作すべきです。

5.7 literalとpropertyに関する注意

literalproperty機能は、 数学概念の範囲を事前定義辞書の外側まで広げ、発話方法を制御できます。 例:$x$y<mi arg="x">x</mi><mi arg="y">y</mi>を参照する場合

これらの機能を使えば、生成される発話をほぼ完全に制御できます。 例として:

しかし、literalは辞書に無いため、 これらの表現の意味がより不透明になりやすく、過度な利用はATの利用者適応能力や 翻訳・ロケール固有の発話自動化を制限します。 よって、後者2例の利用は推奨されません。

逆に、意味ある概念に対応しないが 特定の発話が必要な場合は、 literal名(先頭_)を使う方が 未サポート概念 を使うより望ましいです。こうすれば将来の辞書アップデートでの衝突を回避できます。 よって、最後の例は特に避けるべきです。

5.8 インテント例

intentの主な利用法は、 同一構文が異なる意味を持つ場合の曖昧性を解消し、 それぞれ異なる読み上げになるケースです。

上付き記号msupは、累乗、転置、微分、装飾記号等、様々な意味があり、 以下のようにintentの有無で可能な読み上げ例を示します。

<msup intent="power($base,$exp)">
  <mi arg="base">x</mi>
  <mi arg="exp">n</mi>
</msup>
xのn乗
x上付きn終わり
x n

intentなしのデフォルト解釈では、 msupを常に累乗とみなす場合もあり、上記2つ目もxのn乗となる。 この場合、下記2例も(誤って)「n乗」と発話されがちです。

<msup intent="$op($a)">
  <mi arg="a">A</mi>
  <mi arg="op" intent="transpose">T</mi>
</msup>
Aの転置
A上付きT終わり
A T

プロパティ指定時、読み上げは変化します。

<msup intent="$op :postfix ($a)">
  <mi arg="a">A</mi>
  <mi arg="op" intent="transpose">T</mi>
</msup>
A転置
A T
<msup intent="derivative($a)">
  <mi arg="a">f</mi>
  <mi></mi>
</msup>
fの微分
f上付きプライム終わり
f
<msup intent="x-prime">
  <mi>x</mi>
  <mo></mo>
</msup>
xプライム
x上付きプライム終わり
x

作者が希望する変数名や演算名などアクセシブルな説明も、アンダースコア関数で合成的に注釈付けできます。

上記記法は、「x-new」など独自名も表せます。単一literalのintent="_x-new"や 複合的な2引数ナレーション形式も使えます:

<msup intent="_($base,$script)">
  <mi arg="base">x</mi>
  <mo arg="script" intent="_new"></mo>
</msup>
xニュー
x上付きプライム終わり
x

アンダースコア関数は、合成名の各断片がローカライズされている場合も有効です。例:キリル(ブルガリア語)

<msup intent="_($base,$script)">
  <mi arg="base" intent="_хикс">x</mi>
  <mo arg="script" intent="_прим"></mo>
</msup>
хикス プリム
x上付きプライム終わり
x

また、個々断片のナレーション委託はATに委ねつつグループ化は指定できます:

<msup intent="_($base,$script)">
  <mi arg="base">x</mi>
  <mo arg="script"></mo>
</msup>
x プライム
x上付きプライム終わり
x

オーバーバーは複素共役や平均(mean)、intentの有無で読み分け可能:

<mover intent="conjugate($v)">
  <mi arg="v">z</mi>
  <mo>&#xaf;</mo>
</mover>
<mtext>&#x00A0;<!--nbsp-->&#x00A0;<!--nbsp-->ではない</mtext>
<mover intent="mean($var)">
  <mi arg="var">X</mi>
  <mo>&#xaf;</mo>
</mover>
zの共役は平均Xではない
z上バーはX上バーではない
z ¯  は ではない X ¯

intent機構は、未サポート概念名で拡張可能。 例:Bell数が辞書にない場合

<msub intent="bell-number($index)">
  <mi>B</mi>
  <mn arg="index">2</mn>
</msub>

期待どおりの読み上げになる:

2のBell数
B 2

5.8.1 CSSとスタイル

MathMLのCSSカスタマイズは通常ATには提供されず、 アクセシブル読み上げでも無視されます。 意味ある強調表現やスタイライズ構造を持つ場合、intent属性による注釈が適切です。 例:教育資料ではサブ式の色分けは有効なことが多い:

<mn>1</mn><mo>+</mo>
<mrow style="padding:0.1em;background-color:lightyellow;"
      intent="highlighted-step($step)">
  <mfrac arg="step"><mn>6</mn><mn>2</mn></mfrac>
</mrow>
<mi>x</mi>
<mo>=</mo>
<mn>1</mn><mo>+</mo>
<mn style="padding:0.1em;background-color:lightgreen;"
    intent="highlighted-result(3)">3</mn>
<mi>x</mi>
1 プラス 強調ステップ6分の2 終わり強調ステップx イコール 1 プラス 強調結果3 終わり強調結果x
1 + 6 2 x = 1 + 3 x

5.8.2

<mtable>要素は 行列や方程式系、証明ステップなど様々な用途で利用される。 さらに、強制改行や整列にも使われる場合があり、 特に一部システムが 3.1.7 式の改行に未対応の場合やLaTeX等からの変換時、 整列構造が同様に使われることがある。

表構造に関連プロパティがある場合は、 通常プロパティのみ利用し、ATに発話・ナビゲーションを推論させるのがよい。 この方法ならlist化された式などに合った音声生成を容易に誘導できる。

コアプロパティだけでは複雑な表レイアウトを表現しきれない場合、 intent概念名や適宜openリストのプロパティも用いて 発話・ナビゲーションを表現すべき。 複雑なレイアウトが多いため、ATで確認し、著者意図通り聴こえるかテストも推奨。

行列

<mrow intent='$m'>
  <mo>(</mo>
  <mtable arg='m' intent=':matrix'>
    <mtr>
      <mtd><mn>1</mn></mtd>
      <mtd><mn>0</mn></mtd>
    </mtr>
    <mtr>
      <mtd><mn>0</mn></mtd>
      <mtd><mn>1</mn></mtd>
    </mtr>
  </mtable>
  <mo>)</mo>
</mrow>
2行2列の行列;
1列目; 1;
2列目; 0;
1列目; 0;
2列目; 1;
終わり行列
( 1 0 0 1 )

揃った方程式

<mtable intent=':equations'>
  <mtr>
    <mtd columnalign="right">
      <mn>2</mn>
      <mo>&#x2062;<!--InvisibleTimes--></mo>
      <mi>x</mi>
    </mtd>
    <mtd columnalign="center">
      <mo>=</mo>
    </mtd>
    <mtd columnalign="left">
      <mn>1</mn>
    </mtd>
  </mtr>
  <mtr>
    <mtd columnalign="right">
      <mi>y</mi>
    </mtd>
    <mtd columnalign="center">
      <mo>></mo>
    </mtd>
    <mtd columnalign="left">
      <mi>x</mi>
      <mo>-</mo>
      <mn>3</mn>
    </mtd>
  </mtr>
</mtable>
2つの方程式
方程式1: 2x イコール 1
方程式2: y より大きい x引く3
2 x = 1 y > x - 3

折り返し表現を含む揃った方程式

<mtable intent=':equations'>
  <mtr>
    <mtd columnalign="right">
      <mi>a</mi>
    </mtd>
    <mtd columnalign="center">
      <mo>=</mo>
    </mtd>
    <mtd columnalign="left">
      <mi>b</mi>
      <mo>+</mo>
      <mi>c</mi>
      <mo>-</mo>
      <mi>d</mi>
    </mtd>
  </mtr>
  <mtr intent=':continued-row'>
    <mtd columnalign="right"></mtd>
    <mtd columnalign="center"></mtd>
    <mtd columnalign="left">
      <mo form="infix">+</mo>
      <mi>e</mi>
      <mo>-</mo>
      <mi>f</mi>
    </mtd>
  </mtr>
</mtable>
1つの方程式: a イコール bプラスc引くd; プラスe引くf;
a = b + c - d + e - f

6. MathMLへの注釈付け:semantics

上記で説明したintent属性に加えて、 MathMLはより一般的な注釈付けフレームワークを提供します。MathML式は、 注釈の種類を示す記号(注釈キー)と 付属するデータ(注釈値)で構成されるペアの並びで 装飾することができます。

semanticsannotationannotation-xml要素を組み合わせて MathMLの注釈を表現します。semantics要素は 式とその注釈のコンテナです。 annotation要素はテキスト注釈のコンテナ、 annotation-xml要素は構造化注釈に使われます。 semantics要素は注釈対象の式を最初の子として持ち、 続いて0個以上のannotation及びannotation-xml要素を並べます。

semantics要素は 表示要素・内容要素の両方とみなされ、どちらの文脈でも使えます。 全てのMathMLプロセッサはsemantics要素を処理すべきです。 たとえ2つのサブセットのうち一つのみ、または [MathML-Core]しか処理しない場合でもです。

6.1 注釈キー

注釈キーは、式と注釈の関係を指定します。 多様な関係が設定可能です。 例:代替表現、意味の指定や補足、型情報、表示ヒント、特定プロセッサ向けのプライベートデータなど。 注釈キーはプロセッサがその注釈を処理するかどうか判断する主たる指標です。

式と注釈の論理的関係は、 式の正しい処理に大きな影響を与え得ます。例えば、 semantic attributionsと呼ばれる注釈形式は、 一部の処理環境では無視すると意味が変わる場合があります。一方、 代替表現は式の意味を変更しませんが、 表示にヒントを与えることが多く、表示の仕方が変わる場合があります。 プライベートデータやメタデータを持つ注釈も、意味や表示には影響しませんが、特定文脈で有用です。

注釈キーはContent Dictionary内の記号として定義可能で、 annotationannotation-xml要素の cdname属性で指定します。 もしくは、definitionURL属性で cdnameの代わりに参照することもできます。

MathMLは最も一般的な注釈用に2つの定義済み注釈キーを用意しています: alternate-representationcontentequivです。 これらはmathmlkeysコンテント辞書で定義されています。 alternate-representation は注釈値が他のマークアップ言語による表現の代替を与えることを示し、 contentequivは 注釈値が本質的に意味的に等価な表現であることを示します。

注釈キーが annotationannotation-xml要素に明示されていない場合の デフォルトの注釈キーは alternate-representationです。

通常、注釈キーは式と注釈との論理的な関係のみを指定します。 注釈自体のデータ形式はencoding属性で指示します。 MathML 2ではencoding属性が プロセッサの解釈可能性判断における主要な情報でした。互換性維持のため プロセッサは注釈キーとencoding属性両方を参照することが望まれます。 特にMathML 2では MathML, MathML-Content, MathML-Presentation の定義済みエンコーディング値を指定しています。 MathMLエンコーディング値は annotation-xml要素がMathML式を含むことを示します。 他の値の使い方は下記で詳述します。

6.2 代替表現

代替表現注釈は、多くの場合式のレンダリングや、 他のマークアップ言語による等価表現の提供に使われます。 一般に、代替表現注釈は元の式の意味を変更しませんが、 表示方法が変わり得ます。

特に重要なのは、内容MathML式の好ましい表示として 表示MathML式を使うケースです。この場合は encoding属性の値として application/mathml-presentation+xmlを ラベル付けします。MathML 2.0との互換性のため、同等の MathML-Presentation値でも表現可能です。 semantics要素内に表示MathML注釈がある場合、 デフォルト表示として最初の子の代わりに注釈を使うこともあります。

下記例ではsemantics要素に 内容MathML式の様々な代替表現がまとめられています。 表示MathML注釈はデフォルトの表示に利用できます。他の注釈は 他のマークアップ言語での表現です。明示的なアトリビューションキーが無いので デフォルト注釈キー alternate-representation が各注釈に適用されます。

<semantics>
  <apply>
    <plus/>
    <apply><sin/><ci>x</ci></apply>
    <cn>5</cn>
  </apply>
  <annotation-xml encoding="MathML-Presentation">
    <mrow>
      <mrow>
        <mi>sin</mi>
        <mo>&#x2061;<!--ApplyFunction--></mo>
        <mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
      </mrow>
      <mo>+</mo>
      <mn>5</mn>
    </mrow>
  </annotation-xml>
  <annotation encoding="application/x-maple">sin(x) + 5</annotation>
  <annotation encoding="application/vnd.wolfram.mathematica">Sin[x] + 5</annotation>
  <annotation encoding="application/x-tex">\sin x + 5</annotation>
  <annotation-xml encoding="application/openmath+xml">
    <OMA xmlns="http://www.openmath.org/OpenMath">
      <OMA>
        <OMS cd="arith1" name="plus"/>
        <OMA><OMS cd="transc1" name="sin"/><OMV name="x"/></OMA>
        <OMI>5</OMI>
      </OMA>
    </OMA>
  </annotation-xml>
</semantics>

この例では MathMLのXML構文のみで利用可能な名前空間拡張性を使っています。 HTMLドキュメントにこの例を含めた場合は不正であり、 OpenMath要素はMathML名前空間内の要素としてパースされます。 詳細は6.7.3 annotation-xmlを HTML文書で使う方法を参照してください。

6.3 内容等価

内容等価注釈は、式に対する追加の計算情報を提供します。 contentequivキー付きの注釈は 無視すると式の振る舞いが変わる可能性があります。

重要なケースとして、 表示MathML式の意味の曖昧性を 内容MathML注釈で明示的に補足する場合があります。 この時、encoding属性に application/mathml-content+xml値を使います。 MathML 2では等価なMathML-Content値で表現していたので、 プロセッサは互換のためこの用法もサポートすべきです。 contentequiv注釈キーは、 注釈が式の決定的な内容マークアップ等価表現であることを明示的に主張するために使われます。

次の例は、曖昧な表示MathML式に MathML-Content注釈を与えることで その意味の厳密な内容を明確化します。

<semantics>
  <mrow>
    <mrow>
      <mi>a</mi>
      <mrow>
        <mo>(</mo>
        <mrow><mi>x</mi><mo>+</mo><mn>5</mn></mrow>
        <mo>)</mo>
      </mrow>
    </mrow>
  </mrow>
  <annotation-xml cd="mathmlkeys" name="contentequiv" encoding="MathML-Content">
    <apply>
      <ci>a</ci>
      <apply><plus/><ci>x</ci><cn>5</cn></apply>
    </apply>
  </annotation-xml>
</semantics>

6.4 注釈参照

一般的な場合、各注釈要素はannotationの場合は文字データ、 annotation-xmlの場合はXMLマークアップデータとして 注釈値を持ちます。 semantics要素内に現れる注釈の種類には制限はありません。 例えば、TeXエンコーディング、コンピュータ代数システム向けリニア入力、画像、詳細な数学型情報などを提供できます。

場合によっては、semantics要素の代替子要素が 注釈表現の挙動に本質的に関係せず、特殊な処理系向けに役立つ場合があります。 より効率的に複数注釈形式を提供するため、 semantics要素は空のannotation及び annotation-xml要素を含むことができ、 encodingsrc属性で 注釈値の外部位置を指定できます。 この種の注釈は注釈参照と呼ばれます。

<semantics>
  <mfrac><mi>a</mi><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mfrac>
  <annotation encoding="image/png" src="333/formula56.png"/>
  <annotation encoding="application/x-maple" src="333/formula56.ms"/>
</semantics>

エクスポートされたマークアップの消費先が、 こうした注釈により参照される外部エンティティの取得ができない場合を想定し、 処理エージェントは指定された場所で外部エンティティの内容を取得し、 注釈を展開済みの形式へ置換すべきです。

注釈参照は他の注釈同様、 注釈対象と注釈値との関係を指定する注釈キーの判定規則に従います。

6.5 <semantics>要素

6.5.1 説明

semantics要素は MathML式に注釈を関連付けるコンテナ要素です。 semantics要素の最初の子は注釈対象の式です。 どんなMathML式でも、この最初の子にできます。 それ以降のannotationannotation-xml子要素で注釈を囲みます。 XML形式の注釈はannotation-xmlで囲み、 文字データ形式の注釈はannotationで囲みます。

上述の通り、semantics要素は 表示要素・内容要素の両方であり、内容次第でどちらにもできます。 したがって、全てのMathMLプロセッサは表示マークアップのみ、あるいは内容マークアップのみを処理する場合でも semantics要素を処理すべきです。

semantics要素のデフォルト表示は 最初の子要素のデフォルト表示です。 レンダラーは注釈内情報を使い、注釈対象要素の表示をカスタマイズできます。

<semantics>
  <mrow>
    <mrow>
      <mi>sin</mi>
      <mo>&#x2061;<!--ApplyFunction--></mo>
      <mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
    </mrow>
    <mo>+</mo>
    <mn>5</mn>
  </mrow>
  <annotation-xml cd="mathmlkeys" name="contentequiv" encoding="MathML-Content">
    <apply>
      <plus/>
      <apply><sin/><ci>x</ci></apply>
      <cn>5</cn>
    </apply>
  </annotation-xml>
  <annotation encoding="application/x-tex">\sin x + 5</annotation>
</semantics>
sin ( x ) + 5 x 5 \sin x + 5

6.6 <annotation>要素

6.6.1 説明

annotation要素は、 セマンティック注釈のコンテナ要素で、 非XML形式でパースされる文字データによる表現情報を保持します。 annotation要素には注釈の文字データのみを含め、 XMLマークアップ要素は含めるべきではありません。 注釈内にXML予約文字&<が含まれる場合は、 エンティティ参照やXML構文ではCDATAセクションでエンコードする必要があります。

6.6.2 属性

名前 デフォルト
definitionURL URI なし
注釈キー記号の場所
encoding string なし
注釈の意味情報のエンコーディング
cd string mathmlkeys
注釈キー記号を含むコンテント辞書
name string alternate-representation
注釈キー記号の名前
src URI なし
意味情報の外部ソースの場所

cdname属性を合わせることで、 注釈キー記号を指定します。これが、注釈対象要素と注釈間の関係を識別します。 (6.5 <semantics>要素参照)。 definitionURL属性は 注釈キー記号への参照を単独属性として提供します。 これら属性がなければ、注釈キー記号は alternate-representationmathmlkeysコンテント辞書)となります。

encoding属性は 注釈内容のコンテンツタイプを表します。 encoding属性値にはメディアタイプが入り、 データ形式を識別します。関連メディアタイプが無い場合は、自己記述型文字列を使えます。

src属性は MathML式に外部エンティティを注釈として添付する仕組みを提供します。

<annotation encoding="image/png" src="333/formula56.png"/>

annotation要素は セマンティック対応付け要素であり、 semantics要素の子としてのみ使用できます。 annotation要素自体のデフォルト表示はありませんが、 レンダラーは注釈情報で対象要素の表示をカスタマイズできます。

6.7 <annotation-xml>要素

6.7.1 説明

annotation-xml要素は、構造化マークアップによる セマンティック注釈のコンテナ要素です。annotation-xml要素には、注釈のマークアップ要素・属性・文字データを含めます。

6.7.2 属性

名前 デフォルト
definitionURL URI なし
注釈キー記号の場所
encoding string なし
注釈の意味情報のエンコーディング
cd string mathmlkeys
注釈キー記号を含むコンテント辞書
name string alternate-representation
注釈キー記号の名前
src URI なし
意味情報の外部ソースの場所

cdname属性を合わせることで、 注釈キー記号を指定します。これは、注釈対象要素と注釈間の関係を識別します。 (6.5 <semantics>要素で説明)。 definitionURL属性は 単一属性として注釈キー記号への参照手段を提供します。これらの属性がなければ、 注釈キー記号は alternate-representation (mathmlkeysコンテント辞書)です。

encoding属性は 注釈内容のコンテンツタイプを表します。値には エンコーディングデータのデータ形式を識別するメディアタイプを指定できます。 関連するメディアタイプがない場合は、自己記述型文字列を使えます。 上述や7.2.4 MathMLエンコーディング名で説明のように MathMLではMathMLMathML-PresentationMathML-Content を定義済み値としています。src属性は 外部XMLエンティティをMathML式の注釈として付与する仕組みです。

<annotation-xml cd="mathmlkeys" name="contentequiv" encoding="MathML-Content">
  <apply>
    <plus/>
    <apply><sin/><ci>x</ci></apply>
    <cn>5</cn>
  </apply>
</annotation-xml>

<annotation-xml encoding="application/openmath+xml">
  <OMA xmlns="http://www.openmath.org/OpenMath">
    <OMS cd="arith1" name="plus"/>
    <OMA><OMS cd="transc1" name="sin"/><OMV name="x"/></OMA>
    <OMI>5</OMI>
  </OMA>
</annotation-xml>

MathMLがXMLとしてパースされていて、 注釈値がMathML以外のXML方言の場合は、注釈値のXMLマークアップの名前空間を namespace属性やnamespaceプレフィックスで特定します。例:

<annotation-xml encoding="application/xhtml+xml">
  <html xmlns="http://www.w3.org/1999/xhtml">
    <head><title>E</title></head>
    <body>
      <p>自然対数の底であり、約2.71828。</p>
    </body>
  </html>
</annotation-xml>

annotation-xml要素はセマンティック対応付け要素で、 semantics要素の子としてのみ使えます。 annotation-xml要素自体のデフォルト表示はありませんが、 レンダラーは注釈情報を使って対象要素の表示をカスタマイズできます。

6.7.3 annotation-xmlをHTML文書で使う

上記の例で用いた名前空間拡張性は、 MathMLがXML文書として扱われない場合は利用できないことがあります。 特にHTMLパーサはxmlns属性を通常属性として扱うため、 OpenMath例はHTMLバリデータで不正とみなされます。OpenMath要素は annotation-xml要素の子としてパースされますが、 MathML名前空間に配置されます。上記例は本仕様のHTML版では表示されません( 有効なHTML5文書を保証するため)。

HTMLパーサによるannotation-xmlの詳細は [HTML] および 7.4.3 MathMLとHTMLの混在で 定義されていますが、HTMLパーサのMathML注釈に対する主な違いは xmlns属性や名前における:が特別扱いされず、 HTML, SVG, MathMLの「既知」3名前空間のみが パース規則により利用される点です。

  • annotation-xmlencoding属性が(大文字小文字無視で)text/htmlまたはannotation/xhtml+xmlであれば、 内容はHTMLとしてパースされ、HTML名前空間に配置されます。

  • それ以外の場合は外部コンテンツとみなされ、 よりXML風(MathML自体のようにHTMLでパースされる)で、/>は空要素。 内容はMathML名前空間に配置されます。

    HTML要素がこの外部コンテンツ注釈に現れた場合、 HTMLパーサはmath式を終了させ、全要素を閉じ、 そのHTML部分はmath文脈でないものとして扱われます。 後続MathML要素はmath文脈外でパースされるため正常にレンダリングされません。

このため、下記の例はXML/HTMLパーサどちらにも有効です:

<math>
  <semantics>
    <mi>a</mi>
    <annotation-xml encoding="text/html">
      <span>xxx</span>
    </annotation-xml>
  </semantics>
  <mo>+</mo>
  <mi>b</mi>
</math>

ただしencoding属性が省略された場合、 式はXMLとしてのみ有効です:

<math>
  <semantics>
    <mi>a</mi>
    <annotation-xml>
      <span>xxx</span>
    </annotation-xml>
  </semantics>
  <mo>+</mo>
  <mi>b</mi>
</math>

上記をHTMLパーサで処理すると、span要素によって MathML要素が全て早期に閉じられ、以下のMathML要素は mathの子孫でなくなるため不明なHTML要素として扱われ、 正常に表示されなくなります。

<math xmlns="http://www.w3.org/1998/Math/MathML">
  <semantics>
    <mi>a</mi>
    <annotation-xml>
    </annotation-xml>
  </semantics>
</math>
<span xmlns="http://www.w3.org/1999/xhtml">xxx</span>
<mo xmlns="http://www.w3.org/1999/xhtml">+</mo>
<mi xmlns="http://www.w3.org/1999/xhtml">b</mi>

上記で、HTMLのspan要素が 全てのMathML要素を早期に閉じ、残りのMathML要素が mathの子孫でなくなり、不明なHTML要素として処理されます。 詳細は7.4.3 MathMLとHTMLの混在参照。

MathML以外の語彙(例えばOpenMath等)の利用はHTMLでは不正です。 厳密な妥当性が必要なければ利用可能ですが、 これら要素はMathML名前空間でパースされます。 文書はnamespaceプレフィックスや:を含む要素名は使うべきではないです。 HTMLパーサが生成するノードはローカル名にコロンが入り、namespace-aware XMLパーサでは これが構築できません。こうした外部注釈を使うよりも、 HTMLパーサ利用時は既存語彙で注釈を符号化する方が良いです。 例えば4. 内容マークアップでのStrict Content MathMLとして OpenMathを符号化したり、RDFアノテーションはRDFaをtext/html注釈やN3記法を annotationで使うなど、 RDF/XMLエンコーディングをannotation-xmlに使うよりも適切です。

6.8 表示・内容マークアップの結合

表示マークアップは式の記法構造を符号化します。 内容マークアップは式の関数構造を符号化します。 ある用途では両者の組み合わせが必要になります。 本節では表示マークアップを内容マークアップに埋め込む際および逆の際の制約を説明します。

6.8.1 内容マークアップ中の表示マークアップ

結果式が一意の関数適用構造を保持する限り、内容マークアップ内部に 表示マークアップを埋め込めます。具体的には、表示マークアップは 内容マークアップ中で以下3つの方法のみ出現できます:

  1. cicnトークン要素内

  2. csymbol要素内

  3. semantics要素内

それ以外の表示マークアップが内容マークアップで現れればMathMLエラーです。 以下でこの3ケースの詳細議論:

トークン要素内の表示マークアップ

トークン要素cicnは、 任意のMathML文字(8. 文字・実体・フォントで定義)や 表示要素を含めてよいです。 cicn要素内の 連続したMathML文字のブロックは適切に mimnでラップされたものとして扱われ、 結果の表示要素群は暗黙のmrowでラップされたものとしてレンダリングされます。

csymbol要素内の表示マークアップ

トークン要素ci, cn同様の レンダリング規則をcsymbol要素にも用います。

semantics要素内の表示マークアップ

semantics要素の主な目的の1つは、 任意のMathML式を内容マークアップに意味的に意味ある形で取り込むための仕組み提供です。 特に有効な表示式はsemanticsの最初の子に置くことで 内容式に埋め込めます。その意味はsemantics内の 1つ以上の注釈要素で示すべきです。

6.8.2 表示マークアップ中の内容マークアップ

表示マークアップ中に内容マークアップを埋め込む際は、 結果式のレンダリングが一意になる必要があります。 すなわち、原則として埋め込まれた内容マークアップごとに 表示マークアップ断片を作り、 各内容断片の置換によってよく形成された表示式になることが求められます。 表示エンジンは内容マークアップ成分参照せずに 表示部分のみ処理できるべきです。

この制約により、埋め込む内容式は内容式としてもwell-formedで、 contentコンテナ外でも自立可能でなければなりません。 以下の内容要素群は表示要素の直下に現れてはいけません: annotationannotation-xmlbvarconditiondegreelogbaselowlimituplimit

また、表示マークアップ中では内容マークアップは 表示トークン要素内に現れてはいけません。

6.9 パラレルマークアップ

一部アプリケーションは表示・内容情報両方利用できます。 パラレルマークアップは同一数学式に対する複数のマークアップ木を 結合する手段です。パラレルマークアップはsemantics要素で行います。 パラレルマークアップは単独でも、より大きい内容や表示木中でも使えます。

6.9.1 トップレベル・パラレルマークアップ

多くの場合、数式全体へ表示・内容両方のマークアップを与えるのが目的です。 1つのsemantics要素で 2つのマークアップ木をペアにでき、片方の子で表示マークアップ、 もう片方の子で内容マークアップを表現します。

下記例では、ブール代数式 ( a + b ) ( c + d ) をこのように符号化しています。

<semantics>
  <mrow>
    <mrow><mo>(</mo><mi>a</mi> <mo>+</mo> <mi>b</mi><mo>)</mo></mrow>
    <mo>&#x2062;<!--InvisibleTimes--></mo>
    <mrow><mo>(</mo><mi>c</mi> <mo>+</mo> <mi>d</mi><mo>)</mo></mrow>
  </mrow>
  <annotation-xml encoding="MathML-Content">
    <apply><and/>
      <apply><xor/><ci>a</ci> <ci>b</ci></apply>
      <apply><xor/><ci>c</ci> <ci>d</ci></apply>
    </apply>
  </annotation-xml>
</semantics>
( a + b ) ( c + d ) a b c d

上記マークアップは表示マークアップを最初の子要素、内容マークアップを annotation-xml要素の一部として注釈付けしています。逆に、 内容マークアップを最初の子要素、表示をannotation-xmlで 注釈する等価形式も可能です。

6.9.2 クロスリファレンスによるパラレルマークアップ

大きなオブジェクトの部分式処理も考慮し、 MathMLではsemantics要素のブランチ間に 対応する部分構造のクロスリファレンスを持たせられます。 クロスリファレンスは、semantics内の id属性およびxref属性の利用で確立します。 semantics内でのid/xref属性適用は、 各代替ブランチの部分式を任意選択したい場合のベストプラクティスです。 idxrefは どのMathML要素にも指定できます。

下記例は、ブール代数式 ( a + b ) ( c + d ) のクロスリファレンス例です。

<semantics>
  <mrow id="E">
    <mrow id="E.1">
      <mo id="E.1.1">(</mo>
      <mi id="E.1.2">a</mi>
      <mo id="E.1.3">+</mo>
      <mi id="E.1.4">b</mi>
      <mo id="E.1.5">)</mo>
    </mrow>
    <mo id="E.2">&#x2062;<!--InvisibleTimes--></mo>
    <mrow id="E.3">
      <mo id="E.3.1">(</mo>
      <mi id="E.3.2">c</mi>
      <mo id="E.3.3">+</mo>
      <mi id="E.3.4">d</mi>
      <mo id="E.3.5">)</mo>
    </mrow>
  </mrow>

  <annotation-xml encoding="MathML-Content">
    <apply xref="E">
      <and xref="E.2"/>
      <apply xref="E.1">
        <xor xref="E.1.3"/><ci xref="E.1.2">a</ci><ci xref="E.1.4">b</ci>
      </apply>
      <apply xref="E.3">
        <xor xref="E.3.3"/><ci xref="E.3.2">c</ci><ci xref="E.3.4">d</ci>
      </apply>
    </apply>
  </annotation-xml>
</semantics>
( a + b ) ( c + d ) a b c d

同じsemantics要素内のidと それに紐づくxref属性が 対応する部分式間でクロスリファレンスを確立します。

パラレルマークアップでは、 xref属性で参照される全idが 1つの囲みsemantics要素内の同じ枝にあるべきです。 これは意図しないループを防ぎます。これは他枝へのid属性付与は排除しませんが、 同じsemantics要素内から他枝への参照は排除されます。

どの枝に宛先id属性を置くかは自由であり、 どの枝を使うかはアプリケーションが選択します。

一般に、パラレル枝のノード間に一対一対応はありません。 例えば、表示木に括弧など内容木に対応しない要素が入ることがあるためです。 この場合、より細分化された枝(例えば表示枝)へid属性を付けて、 他枝はそのid属性への部分集合でxref属性を付けるのが有用です。

他に基準がなければ、semantics要素の最初の枝にid属性を 配置するのが合理的です。注釈の追加や削除時も属性再割当が不要です。

id/xref属性利用により、部分式間対応情報は元の大きさの定数倍以下で 完全な対応関係を与えられます。xref参照方向が 部分式選択が一方の枝でだけ許容されることを含意するものと 受け取ってはなりません。どちらの枝でも部分木選択と 対応部分木の再取得が可能です。

クロスリファレンス付のパラレルマークアップは annotation-xml内でも利用でき、 表示MathMLとOpenMath注釈間の対応などにも使えます。

上述のように、MathML・SVG・HTML以外の名前空間要素を annotation-xml内で使うのはHTML構文では不正です。 コロンやnamespaceプレフィックス付き要素名は HTMLパーサがローカル名(例: om:OMA)にしてしまい、namespace-aware XMLパーサでは 対応ノードを構築できません。したがってHTMLではこうした記法は避けて下さい。

7. ホスト環境との相互作用

7.1 導入

有効に機能するためには、MathML は多様なレンダラー、プロセッサ、トランスレータ、エディタと良く連携する必要があります。本章では MathML の生成およびレンダリングに関わるインターフェース上の問題のいくつかを取り上げます。MathML は主にウェブ文書内で数学を符号化するために存在するので、おそらく最も重要なインターフェースの問題は、MathML を [HTML]、および将来登場する新しい HTML と [XHTML] に埋め込むことに関連する問題です

他の XML 文書に MathML を埋め込む際に生じるインターフェース上の問題は2種類あります。第一に、MathML マークアップは埋め込み可能な有効な XML コンテンツとして認識されなければならず、エラーとして扱われてはなりません。この問題は主に XML の名前空間管理に関する問題として見ることができます [Namespaces]。

第二に、MathML を生成・処理するツール間で確実に通信できる必要があります。MathML ツールにはエディタ、トランスレータ、コンピュータ代数システム、その他の科学ソフトウェアが含まれます。しかし、MathML 式は長くなりがちで手入力時にエラーが起きやすいため、使いやすい変換・作成ツールで容易に MathML を生成できるようにし、これらのツールが依存性やプラットフォーム、ベンダに依らず確実に協調動作するよう特別な配慮を行う必要があります。

本章はコンテンツおよびプレゼンテーション両方のマークアップに適用され、semanticsannotation、および annotation-xml 要素に対する特定の処理モデルを記述します。これらは6. Annotating MathML: semanticsで説明されています。

7.2 MathML プロセッサの呼び出し

7.2.1 XML 内での MathML の認識

名前空間をサポートする XML 文書内では [XML], [Namespaces]、MathML マークアップを認識する推奨の方法は MathML 名前空間の MathML 要素 math を、MathML 名前空間 URI http://www.w3.org/1998/Math/MathML によって識別することです。

MathML 名前空間 URI は [XHTML] 文書内に MathML を埋め込むための推奨手段です。ただし、一部のユーザーエージェントは MathML マークアップを処理するための特定の拡張を呼び出すために補助情報を必要とする場合があります。

MathML を埋め込みたいマークアップ言語の仕様は、本推奨とは独立した条件を必要とする場合があり得ます。そのような条件は本推奨で述べたものと類似しているべきであり、MathML 要素のローカル名は本推奨で定義されたものと同じであるべきです。

7.2.2 HTML 内での MathML の認識

HTML は任意の名前空間を許可しませんが、MathML 名前空間に関する組込みの知識を持っています。 HTML パーサによって math 要素およびその子孫は http://www.w3.org/1998/Math/MathML 名前空間に配置され、アプリケーションからは名前空間が宣言された XHTML の入力であるかのように見えます。詳細な HTML パーサによる MathML の取り扱い規則は 7.4.3 Mixing MathML and HTML を参照してください。

7.2.3 MathML 文書のリソース種別

MathML 式のレンダリングは多くの場合ウェブブラウザ内で行われますが、他の MathML 処理機能は別のアプリケーション内でより自然に行われます。特に一般的なのは、方程式エディタやコンピュータ代数システムで MathML 式を開くことです。したがって、MathML フラグメントを識別するためのエンコーディング名を指定することが重要です。

XML 名前空間が認識されない環境では、メディアタイプ [RFC2045], [RFC2046] を可能な限り使用して MathML プロセッサの呼び出しを確実にすべきです。メディアタイプが適切でない環境(例えば一部プラットフォームのクリップボード形式)においては、次節で説明するエンコーディング名を使用するべきです。

7.2.4 MathML エンコーディング名

MathML には二つの異なる語彙があります:表示を符号化する語彙(3. Presentation Markupで定義)と計算構造を符号化する語彙(4. Content Markupで定義)です。ある MathML アプリケーションはこれらのうち一方のみを入出力する場合もあれば、別個に入出力する場合や両方を区別せずに処理する場合もあります。必要に応じてコンテンツとプレゼンテーションの MathML マークアップを区別するために、次のエンコーディング名が使用できます。

  • MathML-Presentation: インスタンスは表示 MathML マークアップのみを含みます。

    • メディアタイプ: application/mathml-presentation+xml

    • Windows クリップボード フレーバ: MathML Presentation

    • ユニバーサルタイプ識別子: public.mathml.presentation

  • MathML-Content: インスタンスは内容 MathML マークアップのみを含みます。

    • メディアタイプ: application/mathml-content+xml

    • Windows クリップボード フレーバ: MathML Content

    • ユニバーサルタイプ識別子: public.mathml.content

  • MathML(汎用): インスタンスは表示 MathML、内容 MathML、またはその混合を含む可能性があります。

    • ファイル名拡張子: .mml

    • メディアタイプ: application/mathml+xml

    • Windows クリップボード フレーバ: MathML

    • ユニバーサルタイプ識別子: public.mathml

各エンコーディング名の詳細については [MathML-Media-Types] を参照してください。

MathML 2 は MathMLMathML-Content、および MathML-Presentationencoding 属性の既定値として規定していました。これらの値は後方互換のためメディアタイプの代替として使用できます。詳細は 6.2 Alternate representations および 6.3 Content equivalents を参照してください。さらに、MathML 1.0 はメディアタイプ text/mathml を提案しましたが、これは [RFC7303] により置き換えられています。

7.3 MathML の転送

MathML 式はアプリケーション間でコピー&ペーストやドラッグ&ドロップのパラダイムを用いて交換されることが多く、ファイルに格納されたり HTTP 経由で交換されたりします。本節ではこれらの転送中に MathML を処理するための推奨方法を提供します。

本節で説明する MathML フラグメントの転送は、複数のフレーバ(しばしば メディアタイプクリップボード形式、または データフレーバ と呼ばれる)でデータを利用可能にすることによって、二つのアプリケーションのコンテキスト間で行われます。これらのフレーバは通常、生成アプリケーションによって優先順位順に並べられ、消費アプリケーションは優先順で調べます。コピー&ペーストのパラダイムでは、アプリケーションは中心の クリップボード にコンテンツを 配置 し、各 クリップボード形式 ごとに一つのデータストリームを置きます。消費アプリケーションは好む形式のデータを読み取ることで交渉します。ドラッグ&ドロップのパラダイムでは、アプリケーションは利用可能な形式を宣言してコンテンツを 提供 します。受け手は利用可能な形式の一覧に基づいてドロップを受け入れるか拒否し、ドロップ時に受け取りアプリケーションは示された形式のうちの一つでデータ提供を要求します。HTTP GET 転送ではクライアントが受け入れ可能なメディアタイプのリストを送信し、サーバはその中のいずれかのメディアタイプでデータを返します。HTTP POST 転送ではクライアントがサーバが受け入れ可能なメディアタイプでラベル付けされたデータを送信できます。

現在のデスクトッププラットフォームはコピー&ペーストやドラッグ&ドロップの転送を類似したアーキテクチャで提供していますが、プラットフォームごとに命名体系が異なります。HTTP 転送はすべてメディアタイプに基づきます。本節では、アプリケーションが提供すべき転送タイプ、それらの命名方法、ならびに semanticsannotation、および annotation-xml 要素の取り扱い方法を規定します。

これら三つの交渉メカニズムを要約するため、以下の段落では転送の フレーバ(各フレーバは 名前(文字列)と 内容(バイナリデータのストリーム)を持ち、提供受け入れ、および/または エクスポート される)について述べます。

7.3.1 基本的な転送フレーバ名と内容

7.2.4 Names of MathML Encodings に示された名前は、MathML エンコーディングに対応する転送フレーバを識別するために使用される正確な文字列です。そうしたフレーバ名をサポートする場合、可能な OS 上ではアプリケーションはこれらのフレーバ名のサポートを登録するべきです(例: Windows では RegisterClipboardFormat の呼び出し、Macintosh ではアプリケーション記述子にユニバーサルタイプ識別子を宣言する等)。

MathML を転送する際、アプリケーションは転送データの内容が MathML 文書型の well-formed な XML インスタンスであることを MUST 確保しなければなりません。具体的には次の要件を満たす必要があります:

  1. インスタンスは XML 宣言で始まってもよい(例: <?xml version="1.0">)

  2. インスタンスは正確に一つのルート math 要素を含まなければならない MUST

  3. インスタンスはルートの math 要素上で MathML 名前空間を宣言しなければならない MUST

  4. インスタンスは schemaLocation 属性を math 要素上で使用して、インスタンスが準拠する MathML スキーマの場所を示してもよい MAY。ただしその属性があっても、MathML インスタンスの消費者が参照されたスキーマを取得または使用することを要求するものではありません。

  5. 相互運用性を高めるため、実体名(例: &alpha;)ではなく数値文字参照(例: &#x03b1;)を使うことが望ましい SHOULD

  6. UTF-8 以外のエンコーディングを使用する場合、インスタンスは文字エンコーディングを XML 宣言で指定するか、UTF-16 の場合はバイトオーダーマーク (BOM) を用いて指定しなければならない MUST

7.3.3 考察

MathML インスタンスが純粋な内容マークアップか純粋な表示マークアップかを判定するために、mathsemanticsannotation、および annotation-xml 要素は、表示および内容の両方の語彙に属するものとして見なされるべきです。ルート要素が math であることはあらゆる MathML 転送で要求されるため、math 要素はこのように扱われます。semantics 要素とその子注釈要素は MathML 内の任意の注釈機構を構成し、表示・内容のいずれにも固有のものではありません。したがって、MathML を消費するアプリケーションは二つの語彙のうち一つしか実装していない場合でも、これら四つの要素は常に処理するべきです。

上記の推奨は、例えばクリップボード用に画像やアプリケーション固有フォーマットなどのバイナリデータをプロデューサが提供できることを許容します。その唯一の方法は注釈の src 属性でバイナリデータを参照することであり、XML 文字データは任意のバイトストリームデータ転送を許さないことに注意してください。

上記の推奨はこれらの転送パラダイムを使う MathML 対応アプリケーション間の相互運用性を改善することを意図していますが、相互運用性を保証するものではありません。例えば MathML データ内の外部リソース(スタイルシート等)への参照は、データの消費者がそれらを見つけられない場合(HTML の切り取り貼り付け等で発生しうる)に相互運用性問題を引き起こす可能性があります。外部リソースへの参照を利用するアプリケーションは、ユーザーに潜在的な問題を知らせ、参照リソースを取得する別の方法を提供することが推奨されます。一般に、解決できない、または理解できない参照を含む MathML データの消費者は、外部参照を無視すべきです。

7.3.4

例 1

ある e ラーニングアプリケーションは複数のソースから来る MathML を含むクイズ問題のデータベースを持ちます。アプリケーションは表示のためにデータを渡すだけで、洗練された MathML 解析能力は持ちません。したがって、与えられた MathML インスタンスが純粋に表示マークアップか純粋に内容マークアップかを判別できないことがあり、特定バージョンの MathML スキーマに対して妥当かどうかも分かりません。そこでクリップボードに次のデータ形式を配置します:

フレーバ名 フレーバ内容
MathML
<math xmlns="http://www.w3.org/1998/Math/MathML">...</math>
Unicode Text
<math xmlns="http://www.w3.org/1998/Math/MathML">...</math>
例 2

Windows プラットフォーム上の方程式エディタが純粋な表示マークアップを生成でき、それが MathML 3 に対して妥当であるとします。したがって、次のようなフレーバをエクスポートします:

フレーバ名 フレーバ内容
MathML Presentation
<math xmlns="http://www.w3.org/1998/Math/MathML">...</math>
Tiff (レンダリングのサンプル)
Unicode Text
<math xmlns="http://www.w3.org/1998/Math/MathML">...</math>
例 3

Mac OS X プラットフォーム上のスキーマベースのコンテンツ管理システムが、著者からの混合マークアップ、記号計算系と連携するための純粋な内容マークアップ、印刷出版用の純粋な表示マークアップなど複数の MathML 表現を含むコレクションを持っているとします。システムはスキーマ使用のため名前空間プレフィックスを使用してマークアップを格納します。したがって以下のデータを転送できます:

フレーバ名 フレーバ内容
public.mathml.presentation
<math
  xmlns="http://www.w3.org/1998/Math/MathML"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation=
    "http://www.w3.org/Math/XMLSchema/mathml4/mathml4.xsd">
  <mrow>
  ...
  </mrow>
</math>
public.mathml.content
<math
  xmlns="http://www.w3.org/1998/Math/MathML"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation=
    "http://www.w3.org/Math/XMLSchema/mathml4/mathml4.xsd">
  <apply>
    ...
  </apply>
</math>
public.mathml
<math
  xmlns="http://www.w3.org/1998/Math/MathML"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation=
    "http://www.w3.org/Math/XMLSchema/mathml4/mathml4.xsd">
  <mrow>
    <apply>
      ... content markup within presentation markup ...
    </apply>
    ...
  </mrow>
</math>
public.plain-text.tex
{x \over x-1}
public.plain-text
<math xmlns="http://www.w3.org/1998/Math/MathML"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation=
    "http://www.w3.org/Math/XMLSchema/mathml4/mathml4.xsd">
  <mrow>
   ...
  </mrow>
</math>
例 4

同様のコンテンツ管理システムがウェブベースで、数学式の MathML 表現(MathML-Presentation、MathML-Content、TeX、および TIFF 形式の画像)を生成できるとします。ブラウズされているウェブページでは、次のような MathML フラグメントを生成できます:

<math xmlns="http://www.w3.org/1998/Math/MathML">
  <semantics>
    <mrow>...</mrow>
    <annotation-xml encoding="MathML-Content">...</annotation-xml>
    <annotation encoding="TeX">{1 \over x}</annotation>
    <annotation encoding="image/tiff" src="formula3848.tiff"/>
  </semantics>
</math>

Windows プラットフォーム上のウェブブラウザがそのようなフラグメントを受け取り、ドラッグ&ドロップ操作の一部としてエクスポートしようとすると、以下のようなフレーバを提供できます:

フレーバ名 フレーバ内容
MathML Presentation
<math xmlns="http://www.w3.org/1998/Math/MathML"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation=
    "http://www.w3.org/Math/XMLSchema/mathml4/mathml4.xsd">
  <mrow>
    ...
  </mrow>
</math>
MathML Content
<math
  xmlns="http://www.w3.org/1998/Math/MathML"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation=
    "http://www.w3.org/Math/XMLSchema/mathml4/mathml4.xsd">
  <apply>
    ...
  </apply>
</math>
MathML
<math
  xmlns="http://www.w3.org/1998/Math/MathML"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation=
    "http://www.w3.org/Math/XMLSchema/mathml4/mathml4.xsd">
  <mrow>
    <apply>
      ... content markup within presentation markup ...
    </apply>
    ...
  </mrow>
</math>
TeX
{x \over x-1}
CF_TIFF (画像ファイル formula3848.tiff から要求される画像データの内容)
CF_UNICODETEXT
<math
  xmlns="http://www.w3.org/1998/Math/MathML"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation=
    "http://www.w3.org/Math/XMLSchema/mathml4/mathml4.xsd">
  <mrow>
    ...
  </mrow>
</math>

7.4 MathML と他形式の結合

MathML は通常、他のマークアップ言語と組み合わせて使用されます。最も典型的なのは文書レベルのマークアップ言語(例: HTML や DocBook)内での MathML の使用でしょう。また、複合文書フォーマット内で他のオブジェクトレベルのマークアップ言語が含まれる場合も普通にあります(例: HTML5 内の MathML と SVG)。その他の一般的なユースケースとしては、著者ツールが MathML マークアップ内にカーソル位置やその他の状態情報を表す要素を挿入し、著者が編集を中断した位置から再開できるようにするようなケースがあります(そのために it was broken といった断片が残ることがあります)。

ほとんどの文書マークアップ言語にはインライン方程式(またはグラフィック、オブジェクト等)の概念があるので、MathML インスタンスをコンテンツモデルに取り込む自然な方法が通常存在します。しかし逆方向、つまり MathML 内へ他マークアップを埋め込むことは必ずしも明確ではありません。多くの MathML 要素では子要素の役割が位置によって定義されるためです。例えば apply の第1子は演算子でなければならず、mfrac の第2子は分母です。そのような文脈に外部マークアップが現れたときの適切な挙動は問題があります。特定の文脈でそのような振る舞いが定義可能であっても、汎用の MathML プロセッサにとっては実装上の課題となります。

この理由により、標準スキーマは MathML インスタンス内に外来のマークアップ要素を含めることを許可していません。

標準スキーマでは他名前空間からの要素は許されませんが、他名前空間からの属性は許可されます。未知の XML マークアップに遭遇した MathML プロセッサは次のように振る舞うべきです:

  1. 非 MathML 名前空間からの属性は黙って無視するべきです。

  2. 非 MathML 名前空間からの要素はエラーとして扱うべきです。ただし annotation-xml 要素内は例外です。要素がプレゼンテーション要素の子であれば、3.3.5 Error Message <merror> で説明される方式で処理するべきです。要素がコンテンツ要素の子であれば、4.2.9 Error Markup <cerror> で説明される方式で処理するべきです。

例えば mfrac 要素の第2子が未知の要素であれば、その分数はエラーを示す分母でレンダリングされるべきです。

複合文書フォーマットを設計する際に、MathML をより大きな文書型に含める設計者は MathML のコンテンツモデルを拡張して追加の要素を許可することができます。例えば一般的な拡張は MathML スキーマを拡張して非 MathML 名前空間の要素をトークン要素内で許可するが、その他の要素では許可しないようにすることです。未知のマークアップに遭遇した MathML プロセッサは次のように振る舞うべきです:

  1. 未認識の XML 属性は黙って無視するべきです。

  2. MathML のトークン要素内にある未認識の要素は黙って無視するべきです。

  3. 非 MathML 名前空間の要素はエラーとして扱うべきです。ただし annotation-xml 要素内は例外です。プレゼンテーション要素の子であれば 3.3.5 Error Message <merror> に従い処理し、コンテンツ要素の子であれば 4.2.9 Error Markup <cerror> に従い処理するべきです。

このようなスキーマ拡張は、A. Parsing MathML で述べる Relax NG スキーマを使えば容易に実現できます。例えば mtext の内容モデルをオーバーライドして MathML 名前空間にない任意の well-formed XML を子に許可するようにすることが可能です。

default namespace m = "http://www.w3.org/1998/Math/MathML"

include "mathml4.rnc" {
mtext = element mtext {mtext.attributes, (token.content|anyElement)*}
}

ここで示した定義は mtext の子として MathML 名前空間外の任意の well formed XML を許可します。実際にはこれだと緩すぎるかもしれません。例えば XHTML+MathML スキーマは mtext の追加子としてインライン XHTML 要素のみを許可したいかもしれません。これは anyElement をホスト文書型の適切な生成に置き換えることで実現できます。詳細は 7.4.1 Mixing MathML and XHTML を参照してください。

複合文書でマークアップ語彙を混在させる考慮事項は、複合文書型を最初に設計する際に生じます。しかし文書型が確定した後で特定のソフトウェアがさらにコンテンツモデルを変更して都合よくすることは一般には実用的ではありません。それでも、そのようなツールが MathML インスタンス内に追加情報を 保存 する必要が生じることは頻繁にあります。特に著者ツールが内部状態に関する情報を MathML 式とともに 保持 して、前回の編集状態から再開できるようにするケースは一般的かつ重要です。例えばプレースホルダは式の未完部分を示すのに用いられたり、挿入点を 保存 する必要があったりします。

MathML 式内にプライベートデータを永続化する必要があるアプリケーションは、一般に基礎となるコンテンツモデルを変更せずに行うことを試みるべきです。特定の複合文書型のコンテンツモデルで可能であっても同様です。この要求をサポートするために、MathML はプライベートデータの 保存 を次の戦略で許可します:

  1. XML 名前空間の使用を許す形式では、少量のデータについては全ての MathML 要素上で他名前空間からの属性を許可します。

  2. 大きなデータのために、アプリケーションは semantics 要素を使用できます(詳細は 6. Annotating MathML: semantics を参照)。

  3. 著者ツールやその他のアプリケーションが表示 MathML の部分木と特定のアクションを関連付ける必要がある場合(例: 未完成の式を著者が埋めるためにマークする等)、maction 要素を使用できます(詳細は 3.7.1 Bind Action to Sub-Expression を参照)。

7.4.1 MathML と XHTML の混在

MathML を XHTML に完全に統合するには、XHTML 内に MathML を埋め込むだけでなく、MathML 内に XHTML を埋め込むことが可能であるべきです。W3C HTML5 バリデータ用のスキーマは mtext を拡張して、すべてのインライン(phrasing)HTML 要素(svg を含む)を mtext の内容内で使用できるようにしています。3.2.2.1 Embedding HTML in MathML の例を参照してください。上述のとおり、mtext 内に XHTML 要素を使った MathML フラグメントは、その文書から抽出して孤立して使用すると有効な MathML にはならない点に注意してください。編集ツールは mtext 内の HTML マークアップを削除してテキスト代替に置換するサポートを提供するかもしれません。

ほとんどの場合、見出し、段落、リストなどの XHTML 要素は数学的文脈では適用されないか、または MathML が数学コンテンツ用に特化した同等またはより適切な機能(表、数学用のスタイル変更など)を既に提供しています。

現在のブラウザや他の MathML 対応ツールの互換性および実装に関する提案は、W3C Math Working Group のホームページを参照してください。

7.4.2 MathML と非 XML コンテキストの混在

数学式のマークアップを必要とする非 XML の語彙が存在する場合があり、本仕様を参照することが理にかなうことがあります。HTML は次節で議論する重要な例ですが、他にも例があります。TeX 風の構文(例: \frac{a}{b})を用いて <mfrac><mi> を明示的に使用せずに表現することも可能です。あるシステムが指定された構文を解析し、MathML スキーマに対して検証できる木を生成できるなら、そのシステムは MathML アプリケーションと見なすことができます。ただしそのようなシステムを用いる文書は厳密には有効な MathML ではない点に注意してください。そのような構文の実装は可能であればあらゆる数学式をここで定義する XML 構文の MathML として出力する機能を提供すべきです。そのようなアプリケーションは D.1 MathML Conformance に記述される MathML 出力準拠プロセッサと見なされます。

7.4.3 MathML と HTML の混在

非 XML ベースのシステムの重要な例は [HTML] で定義されています。HTML 内の MathML を考慮する際には二つの別個の問題があります。第一にスキーマが mtext 内の HTML を許すように拡張されること(前述の XHTML の文脈で説明)。第二に XML パーサの代わりに HTML パーサが使用されることです。HTML パーサによる MathML の解析は [HTML] で規範的に定義されています。そこではパーサの状態遷移として各文字を解析する観点で記述されています。本節の非規範的説明はより高レベルの記述と例を提供することを目的としています。

XML の解析は完全に正則であり、任意の XML 文書は使用される語彙に依らず解析できます。HTML 解析は HTML 語彙向けのカスタムパーサであり、各要素に特化した規則を持ちます。とはいえ XML と同様に、HTML パーサも解析と検証を区別します。レンダリングは正しく行われても、ある入力が 解析エラー と分類され(バリデータで報告される可能性がありますが、通常レンダリングシステムは報告しません)、その点が異なります。

MathML 利用に影響を与える主な差異は次の通りです:

  • 多くの場合、属性値は引用符で囲む必要がありません: <mfenced open=( close=)> は正しく解析されます。

  • 終了タグは多くの場合省略可能です。

  • HTML は HTML、MathML、SVG の三つの組込み名前空間以外をサポートせず、名前空間プレフィックスをサポートしません。したがって <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML"> のようなプレフィックス形式は使用できません。<math xmlns="http://www.w3.org/1998/Math/MathML"> のように名前空間宣言を付けても、その宣言は本質的に無視され、入力は <math> として扱われます。いずれの場合でも math 要素とその子孫は MathML 名前空間に配置されます。6. Annotating MathML: semantics で述べたように、名前空間サポートの欠如は HTML 内で他の語彙による MathML の注釈の可能性を制限します。

  • XML パーサとは異なり、HTML パーサは任意の入力文字列を受け入れて定義された結果を生成することが規定されています(非準拠と分類される場合もあります)。極端な例として <math></<><z =5> のような入力はバリデータでは解析エラーとフラグされるでしょうが、実際には math 要素の中にコメント的な < と属性名が =5 で値が空文字列の要素 z を含むような木を返す可能性があります。

  • <mtext><mo><mn><mi><ms>、または <annotation-xml> のうち encoding 属性が text/html または annotation/xhtml+xml の場合を除き、HTML 要素が出現するとその HTML 要素は MathML 式を終了させ、すべての開いている MathML 要素を閉じて外側の HTML 文脈として解釈されます。続く MathML 要素は <math> の子孫ではなくなり、無効な HTML 要素としてパースされ MathML としてレンダリングされなくなります。例については 6.7.3 Using annotation-xml in HTML documents を参照してください。

既存の MathML アプリケーションとの互換性のため、著者や編集システムは HTML に埋め込む場合でも well-formed な XML である MathML フラグメントを使用することが 推奨 されます。また、HTML 文書内で MathML を受け付けるアプリケーションは、これらの HTML パーサ機能を利用する MathML を受け入れなければなりませんが、ポータブルな XML 構文で MathML をエクスポートする方法を提供するべきです。

MathML 3 では、要素がリンクとして指定されるのは href 属性の存在によります。MathML には HTML/XHTML のアンカー要素 a に対応する要素はありません。

MathML はすべての要素で href 属性を許可します。しかし、多くのユーザーエージェントは入れ子のリンクや視覚的表示を持たない要素へのリンクを実装する手段を持たないため、そのようなリンクは効果を持たない場合があります。

視覚的なレンダリングを通常持たないためリンク要素として使うべきでないプレゼンテーションマークアップ要素の一覧は以下の表に示されています。

複合文書フォーマットがリンク機構をサポートする場合、MathML 式内へのリンク位置を指定するには id 属性を使用するべきです。id 属性はすべての MathML 要素で許可され、その値は文書内で一意でなければならないため、この目的に最適です。

MathML 2 ではリンクの直接的なサポートはなく、複合文書文脈でリンクを定義するために "XML Linking Language"(XLink)[XLink] を参照していました。前述のとおり MathML 3 はリンクのために href 属性を追加したため、xlink:href はもはや必要ではありません。しかし、MathML は非 MathML 名前空間の属性を許可するため xlink:href は依然として許可されています。新しい複合文書フォーマットでは MathML 3 の href 属性を使用することが推奨されます。ユーザーエージェントが hrefxlink:href の両方を持つ要素に遭遇した場合、href 属性が優先されるべきです。後方互換性をサポートするため、XML Linking を実装するユーザーエージェントは xlink:href の使用も引き続きサポートすべきです。

7.4.5 MathML とグラフィカルマークアップ

新しい字形の導入を除けば、画像を用いる場面の多くはラベル付き図の表示に相当します。たとえば結び目図、ベン図、ダイキン図、ファインマン図、可換図などがこれに含まれます。したがって、それらの内容は構造化されたグラフィックスと MathML マークアップの組み合わせで符号化する方が適切です。しかし執筆時点では、W3C の数学アクティビティの範囲を超えて広い意味の「ラベル付き図」を符号化するための一般的なマークアップ言語を定義することはできていません(最新の活動については http://www.w3.org/Math を参照し、グラフィックス活動については http://www.w3.org/Graphics を参照してください)。

追加のグラフィカルコンテンツを埋め込む一つの機構は semantics 要素を介することです。例は次の通りです:

<semantics>
  <apply>
    <intersect/>
    <ci>A</ci>
    <ci>B</ci>
  </apply>
  <annotation-xml encoding="image/svg+xml">
    <svg xmlns="http://www.w3.org/2000/svg"  viewBox="0 0 290 180">
      <clipPath id="a">
        <circle cy="90" cx="100" r="60"/>
      </clipPath>
      <circle fill="#AAAAAA" cy="90" cx="190" r="60" style="clip-path:url(#a)"/>
      <circle stroke="black" fill="none" cy="90" cx="100" r="60"/>
      <circle stroke="black" fill="none" cy="90" cx="190" r="60"/>
    </svg>
  </annotation-xml>
  <annotation-xml encoding="application/xhtml+xml">
    <img xmlns="http://www.w3.org/1999/xhtml" src="intersect.png" alt="A intersect B"/>
  </annotation-xml>
</semantics>

ここでは annotation-xml 要素が二集合の交差を表す MathML-Content 表現の代替表現を示すために使われています。最初のものは Scalable Vector Graphics 形式(SVG)であり、二番目のものは XHTML 断片として埋め込まれた XHTML の img 要素を使っています。この状況では、MathML プロセッサは表示のためにこれらのどれかの表現を使うことができ、例えば下のようなグラフィカルな形式を生成するかもしれません。

\includegraphics{image/intersect}

この例の semantics 表現は MathML-Content マークアップで与えられ、semantics 要素の最初の子になっています。この点で、それは XHTML の img 要素の alt 属性に最も類似する表現であり、非視覚的レンダリングに最適な選択となるでしょう。

7.5 MathML での CSS の使用

CSS [CSS21] をサポートする環境で MathML がレンダリングされる場合、CSS スタイルシートで数学のスタイルプロパティを制御することは望ましいですが、最初に思われるほど簡単ではありません。なぜなら数学レイアウトのスキーマのフォーマットモデルは CSS の視覚的フォーマットモデルと大きく異なり、数学レイアウトに影響する多くのスタイルパラメータには直接対応するテキスト的な類似物がないためです。類似するプロパティがあっても、妥当な値が対応しないことがあります。この違いのため、MathML をネイティブにサポートするアプリケーションは、レイアウトに影響を与えないプロパティに適用を制限することを選ぶ場合があります。

一般的に、数学スタイル属性と CSS の相互作用のモデルは次のようになります。CSS スタイルシートは例えば次のようなスタイルルールを提供するかもしれません:

math *.[mathsize="small"] {
font-size: 80%
}

このルールは、math 要素の子で mathsize 属性が small に設定されているすべての子に対する CSS の font-size プロパティを設定します。MathML レンダラーはスタイルエンジンに CSS 環境を問い合わせ、その戻り値を自らのレイアウトアルゴリズムへの入力として使用します。MathML はスタイル情報が環境からどのように継承されるかのメカニズムを規定しません。しかしながら、環境のスタイルプロパティと MathML 固有のレンダリング規則との相互作用に関する提案されたレンダリング規則はいくつか 3.2.2 Mathematics style attributes common to token elements およびより一般的には 3. Presentation Markup に記載されています。

ただし、MathML 用の CSS スタイルシートを書く際には注意が必要です。数学記号の組版プロパティを変更すると式の意味が変わることがあるため、文書全体のタイポグラフィスタイルの変更が埋め込まれた MathML 式に影響を与えないようにスタイルシートを書くべきです。

避けるべきもう一つの落とし穴は、式の適切な理解に必要な組版スタイル情報を CSS によって提供することです。意味のために CSS に依存する式は、コンピュータ代数システムのような非 CSS 環境に移植できません。MathML 3.0 の新しい数学スタイル属性の論理値を CSS ルールのセレクタとして使うことで、式の意味に必要なスタイル情報を MathML 内に直接符号化できることが保証されます。

MathML 3.0 はユーザーエージェントがスタイル情報をどのように処理すべきかを規定しません。なぜなら MathML をサポートする環境には非 CSS のものが多く存在し、ユーザーエージェントやレンダラーごとに CSS 情報へのアクセスの程度が大きく異なるためです。

7.5.1 属性とスタイルシートの処理順序

CSS や類似のスタイルシートは選択された MathML 要素のレンダリングプロパティを変更できます。レンダリングプロパティは要素上の属性によっても変更され得るし、レンダラーによって自動的に変更され得るため、さまざまなソースによって要求された変更がどの順序で適用されるかを指定する必要があります。順序は [CSS21] のカスケード規則により定義され、非 CSS の提示ヒントの優先度も考慮します。

8. 文字、実体およびフォント

Issue 247: 仕様はアクセント/ラインに使う文字を指定すべき 仕様更新が必要

TeX には MathML の mover/munder のアクセントに対応する多数のコマンドがあります。仕様はそれらのアクセントにどの文字を使うべきかを示していません。場合によっては ASCII 文字を使える場合がありますが、類似する非 ASCII 文字もあります。これらの多くは mover/munder と共に使われる際に伸縮可能(stretchy)であるべきです。

少なくとも、レンダラや MathML を生成するツール間で使用文字について一致させるために、(伸縮可能な) アクセントとして次のいずれ(あるいはすべて)を使うべきか仕様に明示するべきです(以下は候補の一部):

注: MathPlayer の経験に基づくと、これらの代替は実際の文書でよく見られるため、Core でこれらを明示すること(MathML 3 においても)が重要です。現状だと人々はどの文字を使うべきか推測せざるを得ない状況になっています。

8.1 導入

本章では MathML 内で使用する文字に関する議論、使用に関する推奨、および Unicode [Unicode] に符号化された UCS(Universal Multiple-Octet Coded Character Set、ISO-10646)で示される該当コードポイントの正しい形に関する警告を含みます。

8.2 数学用英数字記号

追加の数学用英数字記号は Unicode 3.1 で導入されました。 3.2.2 トークン要素に共通の数学スタイル属性で述べたように、MathML は数学的英数字文字を指定する代替機構を提供します。すなわち、mathvariant 属性を mi のようなトークン要素に付け、トークン内の文字データが数学用英数字記号を選択することを示します。

平面 1 の数学用英数字記号の重要な用途は、フラクトゥール(Fraktur)やギリシャボールド、スクリプトなどの特殊な数学フォントで通常表示される識別子です。例えば、Mathematical Fraktur アルファベットは U+1D504 ("A") から U+1D537 ("z") まで走ります。したがって、フラクトゥール文字を使う変数の識別子は次のようにマークアップできます。

<mi>&#x1D504;<!--BLACK-LETTER CAPITAL A--></mi>
𝔄 この例の別の同等のマークアップは、通常の大文字 A を使い mathvariant 属性で指定することです:
<mi mathvariant="fraktur">A</mi>
A

MathML プロセッサは、数学用英数字文字が現れた場合、それを未装飾の対応文字と mathvariant 属性の組合せと同一視して扱わなければなりません。

レンダラは少なくとも Unicode に対応するコードポイントを持つ組合せを区別し、十分なフォントサポートがない場合はそうした組合せを無視してよいことを想定しています。

8.3 非標識文字(Non-Marking Characters)

印刷や代替レンダリングの品質に重要であっても、それ自体に対応するグリフの印が直接対応しない文字があります。ここではそれらを非標識文字と呼びます。これらの役割は 3. Presentation Markup および 4. Content Markup で論じられています。

MathML では、改行位置などのページ組版の制御は momspace 要素の適切な属性の使用によって行われます。

以下の文字は単純な空白文字ではありません。これらは UCS に新たに追加された重要なもので、印刷レンダリングの品質を向上させ、正しい音声レンダリングを可能にし、視覚的に曖昧なテキストから数学的意味を一意に復元できる手掛かりを提供します。

Unicode code point Unicode 名称 説明
U+2061 FUNCTION APPLICATION プレゼンテーションのタグ付けにおける関数適用を示す文字(3.2.5 演算子、フェンス、区切り、またはアクセント <mo>
U+2062 INVISIBLE TIMES 記号なしに乗算が理解される場合に乗算を示す(3.2.5 演算子、フェンス、 区切り、またはアクセント <mo>
U+2063 INVISIBLE SEPARATOR 添字などで区切りとして使用される(3.2.5 演算子、フェンス、区切り、またはアクセント <mo>
U+2064 INVISIBLE PLUS 特に 1½ のような構成において加算を示す(3.2.5 演算子、フェンス、 区切り、またはアクセント <mo>

8.4 異常(紛らわしい)な数学文字

数学文献でかなり頻繁に出現し、特別な意味を持ついくつかの文字は、UCS 内の類似文字としばしば混同されます。ある場合では、一般的なキーボード文字がより適切な数学文字の代替として定着しています。別のケースでは、文字は式と本文の両方で正当な用途があるが、レンダリングやフォントの慣習が衝突します。これらすべてをここでは「異常文字」と呼びます。

8.4.1 キーボード文字

典型的な Latin-1 ベースのキーボードには、重要な数学文字と視覚的に類似する複数の文字が含まれています。その結果、これらの文字がしばしば、意図的であれ意図せずであれ、より正確な数学的対応文字の代わりに代用されます。

マイナス

通常のテキストで最も一般的に使われ、数学でも特別な用途を持つ文字は U+002D [HYPHEN-MINUS] です。Unicode 名が示す通り、散文文脈ではハイフンとして、式ではマイナスや負符号として使われます。 テキスト用途には U+2010 [HYPHEN] という散文用のコードポイントがあり、ハイフンまたは短いダッシュとして表示されるべきです。 数学用途には U+2212 [MINUS SIGN] という数学式向けのコードポイントがあり、より長いマイナス符号として表示されるべきです。 MathML レンダラは数式文脈(例えば mo)では U+002D [HYPHEN-MINUS] を U+2212 [MINUS SIGN] と同等に扱い、mtext のようなテキスト文脈では U+2010 [HYPHEN] と同等に扱うべきです。

アポストロフィ、引用符およびプライム

典型的な欧州キーボードにはアポストロフィまたは単一引用符(直立あるいは右引用符)として用いられるキーがあります。そのため一つのキーは散文入力において U+0027 [APOSTROPHE] と U+2019 [RIGHT SINGLE QUOTATION MARK] の両方を生成する役割を果たします。数学文脈ではこれがプライムに使われることもあり、プライムは本来 U+2032 [PRIME] であるべきです。Unicode はこの重用を認め、分やフィートの単位としても用いられると注記しています。散文の非構造化印刷テキストではこれらの文字は並置されます。U+0027 と U+2019 は小さく上付きになったグリフを持ち、対応フォントは適切な位置に上付きグリフを提供します。数学の U+2032 [PRIME] も同様にフル機能の Unicode フォントで扱われます。

MathML レンダラは、適切な数式文脈では U+0027 [APOSTROPHE] を U+2032 [PRIME] として扱うことが奨励されます。

最後に注意すべき点として、プライムはキリル文字 U+044C [CYRILLIC SMALL LETTER SOFT SIGN] の音訳で使われることがあり、この用途は数学式とは別の用途です。

その他のキーボード代替

マイナスやプライムが最も一般的で重要なキーボード文字ですが、他にもキーボード文字の代替が時折使われます。例えば次のように想定することがあります

<mo>''</mo>
''

が U+2033 [DOUBLE PRIME] として扱われるべきであり、同様に U+2034 [TRIPLE PRIME] や U+2057 [QUADRUPLE PRIME] に対する類推的な代替もあり得ます。同様に U+007C [VERTICAL LINE] が U+2223 [DIVIDES] の代わりに使われることがあります。MathML はこれらをアプリケーション固有の作成慣行と見なし、互換性のために著者ツールはより正確な数学文字を用いるマークアップを生成することを推奨します。

8.4.2 擬似スクリプト(Pseudo-scripts)

UCS には伝統的に自然な「スクリプト」的性質を持つとみなされてきた文字がいくつかあります。これらの視覚的表現はスクリプトに似ており、ベースラインより上に上がり、基準のフォントサイズより小さく表示されます。度記号やプライム文字がその例です。テキスト内でこれらの文字はそれに続く識別子と連続して現れ、通常同じフォントでレンダリングされます。ここではこれらを擬似スクリプトと呼びます。

ほとんどすべての数学的文脈では、擬似スクリプト文字は MathML の明示的なスクリプトマークアップで基底式に関連付けられるべきです。例えば「x prime」の推奨エンコーディングは次のとおりです

<msup><mi>x</mi><mo>&#x2032;<!--PRIME--></mo></msup>
x

であり、次のようにしてはなりません

<mi>x'</mi>
x'

または明示的なスクリプト構成を使わない他の変種でもありません。ただし、mtext のようなテキスト文脈内では擬似スクリプトが他の文字データと連続して使われることはあり得ます。

数学文脈で明示的マークアップが好ましい理由は二つあります。第一に、擬似スクリプトを下付き識別子と一緒に使うと組版で問題が起きることがあります。伝統的に x' の下付きはプライムの下に積まれてレンダリングされます。これはスクリプトマークアップを使えば容易に達成できます。例えば:

<mrow><msubsup><mi>x</mi><mn>0</mn><mo>&#x2032;<!--PRIME--></mo></msubsup></mrow>
x 0

対照的に、

<mrow><msub><mi>x'</mi><mn>0</mn></msub></mrow>
x' 0

はスクリプトがずれて表示されます。

これは多くのフォントで擬似スクリプトのグリフが既に縮小され上付きになっているため、レンダラは擬似スクリプトを上付き位置にある他の文字コードと異なるように扱う必要があることを意味します。

第二の理由は、明示的なスクリプトマークアップは意図された数学構造をより正確に反映することが多いからです。例えば、

<msup>
  <mrow><mo>(</mo><mrow><mi>f</mi><mo>+</mo><mi>g</mi></mrow><mo>)</mo></mrow>
  <mo>&#x2032;<!--PRIME--></mo>
</msup>
( f + g )

はプライムが全体の式に作用していることを正確に反映し、最後の右括弧に対して作用していることを示唆しません。

ただし、すべての MathML トークン要素のデータモデルは Unicode テキストであるため、次のような構成を含む有効な MathML マークアップの可能性を完全には排除できません:

<mrow><mi>x'</mi></mrow>
x'

<mrow><mi>x</mi><mo>'</mo></mrow>
x '

最初の形式は稀な状況では x' という複数文字の識別子を示すために正当に使われることがありますが、そのような形式は一般に避けるべきです。著作および検証ツールは推奨されるスクリプトマークアップを生成することが推奨されます:

<mrow><msup><mi>x</mi><mo>&#x2032;<!--PRIME--></mo></msup></mrow>
x

U+2032 [PRIME] はおそらく最も一般的な擬似スクリプトですが、以下のように多くの他の文字もあります:

擬似スクリプト文字
U+0022 QUOTATION MARK
U+0027 APOSTROPHE
U+002A ASTERISK
U+0060 GRAVE ACCENT
U+00AA FEMININE ORDINAL INDICATOR
U+00B0 DEGREE SIGN
U+00B2 SUPERSCRIPT TWO
U+00B3 SUPERSCRIPT THREE
U+00B4 ACUTE ACCENT
U+00B9 SUPERSCRIPT ONE
U+00BA MASCULINE ORDINAL INDICATOR
U+2018 LEFT SINGLE QUOTATION MARK
U+2019 RIGHT SINGLE QUOTATION MARK
U+201A SINGLE LOW-9 QUOTATION MARK
U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK
U+201C LEFT DOUBLE QUOTATION MARK
U+201D RIGHT DOUBLE QUOTATION MARK
U+201E DOUBLE LOW-9 QUOTATION MARK
U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
U+2032 PRIME
U+2033 DOUBLE PRIME
U+2034 TRIPLE PRIME
U+2035 REVERSED PRIME
U+2036 REVERSED DOUBLE PRIME
U+2037 REVERSED TRIPLE PRIME
U+2057 QUADRUPLE PRIME

さらに、Unicode の上付きおよび下付きブロック(U+2070 から始まる)の文字も、数式で現れると擬似スクリプトとして扱われるべきです。

これらの文字の中にはキーボードで一般的に入力されるものがいくつかあり、U+002A [ASTERISK]、U+00B0 [DEGREE SIGN]、U+2033 [DOUBLE PRIME]、および U+2035 [REVERSED PRIME](バックプライムとしても知られる)などが含まれます。

8.4.3 結合文字(Combining Characters)

UCS には多数の結合文字があり、様々な自然言語のアクセントに使われることを意図しています。その中には数学的アクセントに必要なマークアップを提供するように見えるものもありますが、それらは数学マークアップには使用すべきではありません。上で議論したように、上付き/下付き/下部/上部スクリプト構成には専用の構成を使うべきです。もちろん、結合文字は必要に応じて複数文字識別子やテキスト文脈で使用できます。

結合文字が数学マークアップに自然に現れる別のケースがあります。例えば関係演算子の否定形(U+226F [NOT GREATER-THAN] は U+003E [GREATER-THAN SIGN] の否定)などです。U+226F のグリフは通常 U+003E に斜線を加えたものであり、これは結合スラッシュ U+0338 [COMBINING LONG SOLIDUS OVERLAY] を使って U+003E-0338 と表現することもできます。これに該当する文字は他に 25 個ほどあり、十分に一般的な数学用途のために独自の Unicode コードポイントが割り当てられています。逆方向には U+0338 を使って表現される 31 の文字実体名が [Entities] に列挙されています。

同様に、縦棒のオーバーレイ U+20D2 [COMBINING LONG VERTICAL LINE OVERLAY] によって否定が与えられる数学文字もあります。いくつかは事前合成された形式で利用可能であり、いくつかの名前付き文字実体は組合せとして明示されています。また U+0333 [COMBINING DOUBLE LOW LINE] や U+20E5 [COMBINING REVERSE SOLIDUS OVERLAY] を使用する例や、U+FE00 [VARIATION SELECTOR-1] によって指定されるバリアントの例もあります。これらの事例の詳細は [Entities] の一覧を参照してください。

一般則として、基底文字に結合文字列が続く場合、それが合成された事前合成文字に相当するなら、その合成文字と同等に扱うべきです。

A. MathML の解析

課題 178: MathML の属性を ASCII 大文字小文字を区別しないようにする MathML 4css / html5仕様更新が必要

課題 178

A.1 MathML の検証

Relax NG スキーマは MathML の XML シリアル化を検査するために使用でき、HTML シリアル化など他の MathML シリアル化を検証するための基盤となります。

XML シリアル化を使用する場合でも、このスキーマを適用する前に入力の正規化が必要になることがあります。特に、HTML に従い、[MathML-Core] は onclick のような属性が任意の大文字小文字で指定されることを許容します(例: OnClick="...")。ここで属性名を大文字小文字を区別しないと指定することは実用上困難なため、小文字の名前のみが許可されています。同様に、接頭辞が data- で始まる任意の属性は有効と見なすべきです。ここに示したスキーマは固定された属性 data-other のみを許可しているため、検証の前に data 属性を削除するように入力を正規化するか、特定のアプリケーションで使用される属性をサポートするようスキーマを拡張する必要があります。

A.2 MathML に対する Relax NG スキーマの使用

MathML 文書は、MathML 用の Relax NG スキーマを使用して検証するべきです。XML エンコーディング(http://www.w3.org/Math/RelaxNG/mathml4/mathml4.rng) またはコンパクト表記(https://www.w3.org/Math/RelaxNG/mathml4/mathml4.rnc) を使用できます。後者は以下にも示されています。

DTD と対照的に、文書内で Relax NG スキーマを文書に関連付ける方法はありません。

A.2.1 MathML Core

MathML Core は MathML Core に規定されていますが、スキーマは MathML 4 のスキーマと並行して開発されここに示されています。スキーマは https://www.w3.org/Math/RelaxNG/mathml4/mathml4-core.rnc でも入手できます。

# MathML 4 (Core Level 1)
# #######################

#     Copyright 1998-2024 W3C (MIT, ERCIM, Keio, Beihang)
# 
#     Use and distribution of this code are permitted under the terms
#     W3C Software Notice and License
#     http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231

default namespace m = "http://www.w3.org/1998/Math/MathML"
namespace h = "http://www.w3.org/1999/xhtml"

start |= math

math = element math {math.attributes,ImpliedMrow}

MathMLoneventAttributes =
  attribute onabort {text}?,
  attribute onauxclick {text}?,
  attribute onblur {text}?,
  attribute oncancel {text}?,
  attribute oncanplay {text}?,
  attribute oncanplaythrough {text}?,
  attribute onchange {text}?,
  attribute onclick {text}?,
  attribute onclose {text}?,
  attribute oncontextlost {text}?,
  attribute oncontextmenu {text}?,
  attribute oncontextrestored {text}?,
  attribute oncuechange {text}?,
  attribute ondblclick {text}?,
  attribute ondrag {text}?,
  attribute ondragend {text}?,
  attribute ondragenter {text}?,
  attribute ondragleave {text}?,
  attribute ondragover {text}?,
  attribute ondragstart {text}?,
  attribute ondrop {text}?,
  attribute ondurationchange {text}?,
  attribute onemptied {text}?,
  attribute onended {text}?,
  attribute onerror {text}?,
  attribute onfocus {text}?,
  attribute onformdata {text}?,
  attribute oninput {text}?,
  attribute oninvalid {text}?,
  attribute onkeydown {text}?,
  attribute onkeypress {text}?,
  attribute onkeyup {text}?,
  attribute onload {text}?,
  attribute onloadeddata {text}?,
  attribute onloadedmetadata {text}?,
  attribute onloadstart {text}?,
  attribute onmousedown {text}?,
  attribute onmouseenter {text}?,
  attribute onmouseleave {text}?,
  attribute onmousemove {text}?,
  attribute onmouseout {text}?,
  attribute onmouseover {text}?,
  attribute onmouseup {text}?,
  attribute onpause {text}?,
  attribute onplay {text}?,
  attribute onplaying {text}?,
  attribute onprogress {text}?,
  attribute onratechange {text}?,
  attribute onreset {text}?,
  attribute onresize {text}?,
  attribute onscroll {text}?,
  attribute onsecuritypolicyviolation {text}?,
  attribute onseeked {text}?,
  attribute onseeking {text}?,
  attribute onselect {text}?,
  attribute onslotchange {text}?,
  attribute onstalled {text}?,
  attribute onsubmit {text}?,
  attribute onsuspend {text}?,
  attribute ontimeupdate {text}?,
  attribute ontoggle {text}?,
  attribute onvolumechange {text}?,
  attribute onwaiting {text}?,
  attribute onwebkitanimationend {text}?,
  attribute onwebkitanimationiteration {text}?,
  attribute onwebkitanimationstart {text}?,
  attribute onwebkittransitionend {text}?,
  attribute onwheel {text}?,
  attribute onafterprint {text}?,
  attribute onbeforeprint {text}?,
  attribute onbeforeunload {text}?,
  attribute onhashchange {text}?,
  attribute onlanguagechange {text}?,
  attribute onmessage {text}?,
  attribute onmessageerror {text}?,
  attribute onoffline {text}?,
  attribute ononline {text}?,
  attribute onpagehide {text}?,
  attribute onpageshow {text}?,
  attribute onpopstate {text}?,
  attribute onrejectionhandled {text}?,
  attribute onstorage {text}?,
  attribute onunhandledrejection {text}?,
  attribute onunload {text}?,
  attribute oncopy {text}?,
  attribute oncut {text}?,
  attribute onpaste {text}?

# Sample set. May need preprocessing 
# or schema extension to allow more see MathML Core (and HTML) spec
MathMLDataAttributes =
  attribute data-other {text}?


# sample set, like data- may need preprocessing to allow more
MathMLARIAattributes =
  attribute aria-label {text}?,
  attribute aria-describedby {text}?,
  attribute aria-description {text}?,
  attribute aria-details {text}?

MathMLintentAttributes =
  attribute intent {text}?,
  attribute arg {xsd:NCName}?

MathMLPGlobalAttributes = attribute id {xsd:ID}?,
                   attribute class {xsd:NCName}?,
                   attribute style {xsd:string}?,
                   attribute dir {"ltr" | "rtl"}?,
                   attribute mathbackground {color}?,
                   attribute mathcolor {color}?,
                   attribute mathsize {length-percentage}?,
                   attribute mathvariant {xsd:string{pattern="\s*([Nn][Oo][Rr][Mm][Aa][Ll]|[Bb][Oo][Ll][Dd]|[Ii][Tt][Aa][Ll][Ii][Cc]|[Bb][Oo][Ll][Dd]-[Ii][Tt][Aa][Ll][Ii][Cc]|[Dd][Oo][Uu][Bb][Ll][Ee]-[Ss][Tt][Rr][Uu][Cc][Kk]|[Bb][Oo][Ll][Dd]-[Ff][Rr][Aa][Kk][Tt][Uu][Rr]|[Ss][Cc][Rr][Ii][Pp][Tt]|[Bb][Oo][Ll][Dd]-[Ss][Cc][Rr][Ii][Pp][Tt]|[Ff][Rr][Aa][Kk][Tt][Uu][Rr]|[Ss][Aa][Nn][Ss]-[Ss][Ee][Rr][Ii][Ff]|[Bb][Oo][Ll][Dd]-[Ss][Aa][Nn][Ss]-[Ss][Ee][Rr][Ii][Ff]|[Ss][Aa][Nn][Ss]-[Ss][Ee][Rr][Ii][Ff]-[Ii][Tt][Aa][Ll][Ii][Cc]|[Ss][Aa][Nn][Ss]-[Ss][Ee][Rr][Ii][Ff]-[Bb][Oo][Ll][Dd]-[Ii][Tt][Aa][Ll][Ii][Cc]|[Mm][Oo][Nn][Oo][Ss][Pp][Aa][Cc][Ee]|[Ii][Nn][Ii][Tt][Ii][Aa][Ll]|[Tt][Aa][Ii][Ll][Ee][Dd]|[Ll][Oo][Oo][Pp][Ee][Dd]|[Ss][Tt][Rr][Ee][Tt][Cc][Hh][Ee][Dd])\s*"}}?,
                   attribute displaystyle {mathml-boolean}?,
                   attribute scriptlevel {xsd:integer}?,
                   attribute autofocus {mathml-boolean}?,
                   attribute tabindex {xsd:integer}?,
                   attribute nonce {text}?,
		   MathMLoneventAttributes,
                   # Extension attributes, no defined behavior
                   MathMLDataAttributes,
                   # No specified behavior in Core, see MathML4
		   MathMLintentAttributes,
                   # No specified behavior in Core, see WAI-ARIA
		   MathMLARIAattributes
                       


math.attributes = MathMLPGlobalAttributes,
                  attribute display {"block" | "inline"}?,
                  # No specified behavior in Core, see MathML4
                  attribute alttext {text}?


annotation = element annotation {MathMLPGlobalAttributes,encoding?,text}

anyElement =  element (*) {(attribute * {text}|text| anyElement)*}

annotation-xml = element annotation-xml {annotation-xml.attributes,
                                         (MathExpression*|anyElement*)}

annotation-xml.attributes = MathMLPGlobalAttributes, encoding?

encoding=attribute encoding {xsd:string}?


semantics = element semantics {semantics.attributes,
                               MathExpression, 
                              (annotation|annotation-xml)*}

semantics.attributes = MathMLPGlobalAttributes

mathml-boolean = xsd:string {
    pattern = '\s*([Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])\s*'
}
			    
length-percentage = xsd:string {
  pattern = '\s*((-?[0-9]*([0-9]\.?|\.[0-9])[0-9]*(r?em|ex|in|cm|mm|p[xtc]|Q|v[hw]|vmin|vmax|%))|0)\s*'
}

MathExpression = TokenExpression|
                     mrow|mfrac|msqrt|mroot|mstyle|merror|mpadded|mphantom|
                     msub|msup|msubsup|munder|mover|munderover|
                     mmultiscripts|mtable|maction|
		     semantics

MathMalignExpression = MathExpression
			   
ImpliedMrow = MathMalignExpression*

TableRowExpression = mtr

MultiScriptExpression = (MathExpression|none),(MathExpression|none)


color =  xsd:string {
  pattern = '\s*((#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?)|[a-zA-Z]+|[a-zA-Z]+\s*\([0-9, %.]+\))\s*'}

TokenExpression = mi|mn|mo|mtext|mspace|ms


textorHTML = text | element (h:*)  {attribute * {text}*,textorHTML*}
			    
token.content = textorHTML
		    
mi = element mi {mi.attributes, token.content}
mi.attributes = 
  MathMLPGlobalAttributes

mn = element mn {mn.attributes, token.content}
mn.attributes = 
  MathMLPGlobalAttributes

mo = element mo {mo.attributes, token.content}
mo.attributes = 
  MathMLPGlobalAttributes,
  attribute form {"prefix" | "infix" | "postfix"}?,
  attribute lspace {length-percentage}?,
  attribute rspace {length-percentage}?,
  attribute stretchy {mathml-boolean}?,
  attribute symmetric {mathml-boolean}?,
  attribute maxsize {length-percentage}?,
  attribute minsize {length-percentage}?,
  attribute largeop {mathml-boolean}?,
  attribute movablelimits {mathml-boolean}?


mtext = element mtext {mtext.attributes, token.content}
mtext.attributes = 
  MathMLPGlobalAttributes

mspace = element mspace {mspace.attributes, empty}
mspace.attributes = 
  MathMLPGlobalAttributes,
  attribute width {length-percentage}?,
  attribute height {length-percentage}?,
  attribute depth {length-percentage}?

ms = element ms {ms.attributes, token.content}
ms.attributes = 
  MathMLPGlobalAttributes


none = element none {none.attributes,empty}
none.attributes = 
  MathMLPGlobalAttributes

mprescripts = element mprescripts {mprescripts.attributes,empty}
mprescripts.attributes = 
  MathMLPGlobalAttributes

mrow = element mrow {mrow.attributes, ImpliedMrow}
mrow.attributes = 
  MathMLPGlobalAttributes

mfrac = element mfrac {mfrac.attributes, MathExpression, MathExpression}
mfrac.attributes = 
  MathMLPGlobalAttributes,
  attribute linethickness {length-percentage}?

msqrt = element msqrt {msqrt.attributes, ImpliedMrow}
msqrt.attributes = 
  MathMLPGlobalAttributes

mroot = element mroot {mroot.attributes, MathExpression, MathExpression}
mroot.attributes = 
  MathMLPGlobalAttributes

mstyle = element mstyle {mstyle.attributes, ImpliedMrow}
mstyle.attributes = 
  MathMLPGlobalAttributes

merror = element merror {merror.attributes, ImpliedMrow}
merror.attributes = 
  MathMLPGlobalAttributes

mpadded = element mpadded {mpadded.attributes, ImpliedMrow}
mpadded.attributes = 
  MathMLPGlobalAttributes,
  attribute height {mpadded-length-percentage}?,
  attribute depth {mpadded-length-percentage}?,
  attribute width {mpadded-length-percentage}?,
  attribute lspace {mpadded-length-percentage}?,
  attribute rspace {mpadded-length-percentage}?,
  attribute voffset {mpadded-length-percentage}?

mpadded-length-percentage=length-percentage

mphantom = element mphantom {mphantom.attributes, ImpliedMrow}
mphantom.attributes = 
  MathMLPGlobalAttributes

      
msub = element msub {msub.attributes, MathExpression, MathExpression}
msub.attributes = 
  MathMLPGlobalAttributes

msup = element msup {msup.attributes, MathExpression, MathExpression}
msup.attributes = 
  MathMLPGlobalAttributes

msubsup = element msubsup {msubsup.attributes, MathExpression, MathExpression, MathExpression}
msubsup.attributes = 
  MathMLPGlobalAttributes

munder = element munder {munder.attributes, MathExpression, MathExpression}
munder.attributes = 
  MathMLPGlobalAttributes,
  attribute accentunder {mathml-boolean}?

mover = element mover {mover.attributes, MathExpression, MathExpression}
mover.attributes = 
  MathMLPGlobalAttributes,
  attribute accent {mathml-boolean}?

munderover = element munderover {munderover.attributes, MathExpression, MathExpression, MathExpression}
munderover.attributes = 
  MathMLPGlobalAttributes,
  attribute accent {mathml-boolean}?,
  attribute accentunder {mathml-boolean}?

mmultiscripts = element mmultiscripts {mmultiscripts.attributes,
                                       MathExpression,
                                       MultiScriptExpression*,
                                       (mprescripts,MultiScriptExpression*)?}
mmultiscripts.attributes = 
  msubsup.attributes

mtable = element mtable {mtable.attributes, TableRowExpression*}
mtable.attributes = 
  MathMLPGlobalAttributes


mtr = element mtr {mtr.attributes, mtd*}
mtr.attributes = 
  MathMLPGlobalAttributes

mtd = element mtd {mtd.attributes, ImpliedMrow}
mtd.attributes = 
  MathMLPGlobalAttributes,
  attribute rowspan {xsd:positiveInteger}?,
  attribute columnspan {xsd:positiveInteger}?


maction = element maction {maction.attributes, ImpliedMrow}
maction.attributes = 
  MathMLPGlobalAttributes,
  attribute actiontype {text}?,
  attribute selection {xsd:positiveInteger}?

A.2.2 Presentation MathML

Presentation MathML 4 の文法は MathML Core の文法に基づいて構築されており、次で入手できます: https://www.w3.org/Math/RelaxNG/mathml4/mathml4-presentation.rnc

# MathML 4 (Presentation)
# #######################

#     Copyright 1998-2024 W3C (MIT, ERCIM, Keio, Beihang)
# 
#     Use and distribution of this code are permitted under the terms
#     W3C Software Notice and License
#     http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231

default namespace m = "http://www.w3.org/1998/Math/MathML"
namespace local = ""

		      
# MathML Core
include "mathml4-core.rnc" {

# named lengths
length-percentage = xsd:string {
  pattern = '\s*((-?[0-9]*([0-9]\.?|\.[0-9])[0-9]*(r?em|ex|in|cm|mm|p[xtc]|Q|v[hw]|vmin|vmax|%))|0|(negative)?((very){0,2}thi(n|ck)|medium)mathspace)\s*'
}

mpadded-length-percentage = xsd:string {
  pattern = '\s*([\+\-]?[0-9]*([0-9]\.?|\.[0-9])[0-9]*\s*((%?\s*(height|depth|width)?)|r?em|ex|in|cm|mm|p[xtc]|Q|v[hw]|vmin|vmax|%|((negative)?((very){0,2}thi(n|ck)|medium)mathspace))?)\s*' 
}


}

NonMathMLAtt = attribute (* - (local:* | m:*)) {xsd:string}
					     
MathMLPGlobalAttributes &=
		   NonMathMLAtt*,
		   attribute xref {text}?,
                   attribute href {xsd:anyURI}?

MathMalignExpression |= MalignExpression
			    
MathExpression |= PresentationExpression

MstackExpression = MathMalignExpression|mscarries|msline|msrow|msgroup

MsrowExpression = MathMalignExpression|none


linestyle = "none" | "solid" | "dashed"

verticalalign =
      "top" |
      "bottom" |
      "center" |
      "baseline" |
      "axis"

columnalignstyle = "left" | "center" | "right"

notationstyle =
     "longdiv" |
     "actuarial" |
     "radical" |
     "box" |
     "roundedbox" |
     "circle" |
     "left" |
     "right" |
     "top" |
     "bottom" |
     "updiagonalstrike" |
     "downdiagonalstrike" |
     "verticalstrike" |
     "horizontalstrike" |
     "madruwb"

idref = text
unsigned-integer = xsd:unsignedLong
integer = xsd:integer
number = xsd:decimal

character = xsd:string {
  pattern = '\s*\S\s*'}


positive-integer = xsd:positiveInteger


token.content |= mglyph|text



mo.attributes &= 
  attribute linebreak {"auto" | "newline" | "nobreak" | "goodbreak" | "badbreak"}?,
  attribute lineleading {length-percentage}?,
  attribute linebreakstyle {"before" | "after" | "duplicate" | "infixlinebreakstyle"}?,
  attribute linebreakmultchar {text}?,
  attribute indentalign {"left" | "center" | "right" | "auto" | "id"}?,
  attribute indentshift {length-percentage}?,
  attribute indenttarget {idref}?,
  attribute indentalignfirst {"left" | "center" | "right" | "auto" | "id" | "indentalign"}?,
  attribute indentshiftfirst {length-percentage | "indentshift"}?,
  attribute indentalignlast {"left" | "center" | "right" | "auto" | "id" | "indentalign"}?,
  attribute indentshiftlast {length-percentage | "indentshift"}?,
  attribute accent {mathml-boolean}?,
  attribute maxsize {"infinity"}?
 

mspace.attributes &= 
  attribute linebreak {"auto" | "newline" | "nobreak" | "goodbreak" | "badbreak" | "indentingnewline"}?,
  attribute indentalign {"left" | "center" | "right" | "auto" | "id"}?,
  attribute indentshift {length-percentage}?,
  attribute indenttarget {idref}?,
  attribute indentalignfirst {"left" | "center" | "right" | "auto" | "id" | "indentalign"}?,
  attribute indentshiftfirst {length-percentage | "indentshift"}?,
  attribute indentalignlast {"left" | "center" | "right" | "auto" | "id" | "indentalign"}?,
  attribute indentshiftlast {length-percentage | "indentshift"}?


ms.attributes &= 
  attribute lquote {text}?,
  attribute rquote {text}?


mglyph = element mglyph {mglyph.attributes,empty}
mglyph.attributes = 
  MathMLPGlobalAttributes,
  attribute src {xsd:anyURI}?,
  attribute width {length-percentage}?,
  attribute height {length-percentage}?,
  attribute valign {length-percentage}?,
  attribute alt {text}?

msline = element msline {msline.attributes,empty}
msline.attributes = 
  MathMLPGlobalAttributes,
  attribute position {integer}?,
  attribute length {unsigned-integer}?,
  attribute leftoverhang {length-percentage}?,
  attribute rightoverhang {length-percentage}?,
  attribute mslinethickness {length-percentage | "thin" | "medium" | "thick"}?

MalignExpression = maligngroup|malignmark

malignmark = element malignmark {malignmark.attributes, empty}
malignmark.attributes =  MathMLPGlobalAttributes


maligngroup = element maligngroup {maligngroup.attributes, empty}
maligngroup.attributes = MathMLPGlobalAttributes
  

PresentationExpression = TokenExpression|
                         mrow|mfrac|msqrt|mroot|mstyle|merror|mpadded|mphantom|
                         mfenced|menclose|msub|msup|msubsup|munder|mover|munderover|
                         mmultiscripts|mtable|mstack|mlongdiv|maction





mfrac.attributes &= 
  attribute numalign {"left" | "center" | "right"}?,
  attribute denomalign {"left" | "center" | "right"}?,
  attribute bevelled {mathml-boolean}?



mstyle.attributes &= 
  mstyle.specificattributes,
  mstyle.generalattributes

mstyle.specificattributes =
  attribute scriptsizemultiplier {number}?,
  attribute scriptminsize {length-percentage}?,
  attribute infixlinebreakstyle {"before" | "after" | "duplicate"}?,
  attribute decimalpoint {character}?

mstyle.generalattributes =
  attribute accent {mathml-boolean}?,
  attribute accentunder {mathml-boolean}?,
  attribute align {"left" | "right" | "center"}?,
  attribute alignmentscope {list {("true" | "false") +}}?,
  attribute bevelled {mathml-boolean}?,
  attribute charalign {"left" | "center" | "right"}?,
  attribute charspacing {length-percentage | "loose" | "medium" | "tight"}?,
  attribute close {text}?,
  attribute columnalign {list {columnalignstyle+} }?,
  attribute columnlines {list {linestyle +}}?,
  attribute columnspacing {list {(length-percentage) +}}?,
  attribute columnspan {positive-integer}?,
  attribute columnwidth {list {("auto" | length-percentage | "fit") +}}?,
  attribute crossout {list {("none" | "updiagonalstrike" | "downdiagonalstrike" | "verticalstrike" | "horizontalstrike")*}}?,
  attribute denomalign {"left" | "center" | "right"}?,
  attribute depth {length-percentage}?,
  attribute dir {"ltr" | "rtl"}?,
  attribute equalcolumns {mathml-boolean}?,
  attribute equalrows {mathml-boolean}?,
  attribute form {"prefix" | "infix" | "postfix"}?,
  attribute frame {linestyle}?,
  attribute framespacing {list {length-percentage, length-percentage}}?,
  attribute height {length-percentage}?,
  attribute indentalign {"left" | "center" | "right" | "auto" | "id"}?,
  attribute indentalignfirst {"left" | "center" | "right" | "auto" | "id" | "indentalign"}?,
  attribute indentalignlast {"left" | "center" | "right" | "auto" | "id" | "indentalign"}?,
  attribute indentshift {length-percentage}?,
  attribute indentshiftfirst {length-percentage | "indentshift"}?,
  attribute indentshiftlast {length-percentage | "indentshift"}?,
  attribute indenttarget {idref}?,
  attribute largeop {mathml-boolean}?,
  attribute leftoverhang {length-percentage}?,
  attribute length {unsigned-integer}?,
  attribute linebreak {"auto" | "newline" | "nobreak" | "goodbreak" | "badbreak"}?,
  attribute linebreakmultchar {text}?,
  attribute linebreakstyle {"before" | "after" | "duplicate" | "infixlinebreakstyle"}?,
  attribute lineleading {length-percentage}?,
  attribute linethickness {length-percentage | "thin" | "medium" | "thick"}?,
  attribute location {"w" | "nw" | "n" | "ne" | "e" | "se" | "s" | "sw"}?,
  attribute longdivstyle {"lefttop" | "stackedrightright" | "mediumstackedrightright" | "shortstackedrightright" | "righttop" | "left/\right" | "left)(right" | ":right=right" | "stackedleftleft" | "stackedleftlinetop"}?,
  attribute lquote {text}?,
  attribute lspace {length-percentage}?,
  attribute mathsize {"small" | "normal" | "big" | length-percentage}?,
  attribute 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" | "initial" | "tailed" | "looped" | "stretched"}?,
  attribute minlabelspacing {length-percentage}?,
  attribute minsize {length-percentage}?,
  attribute movablelimits {mathml-boolean}?,
  attribute mslinethickness {length-percentage | "thin" | "medium" | "thick"}?,
  attribute notation {text}?,
  attribute numalign {"left" | "center" | "right"}?,
  attribute open {text}?,
  attribute position {integer}?,
  attribute rightoverhang {length-percentage}?,
  attribute rowalign {list {verticalalign+} }?,
  attribute rowlines {list {linestyle +}}?,
  attribute rowspacing {list {(length-percentage) +}}?,
  attribute rowspan {positive-integer}?,
  attribute rquote {text}?,
  attribute rspace {length-percentage}?,
  attribute selection {positive-integer}?,
  attribute separators {text}?,
  attribute shift {integer}?,
  attribute side {"left" | "right" | "leftoverlap" | "rightoverlap"}?,
  attribute stackalign {"left" | "center" | "right" | "decimalpoint"}?,
  attribute stretchy {mathml-boolean}?,
  attribute subscriptshift {length-percentage}?,
  attribute superscriptshift {length-percentage}?,
  attribute symmetric {mathml-boolean}?,
  attribute valign {length-percentage}?,
  attribute width {length-percentage}?


math.attributes &= mstyle.specificattributes
math.attributes &= mstyle.generalattributes
math.attributes &= attribute overflow {"linebreak" | "scroll" | "elide" | "truncate" | "scale"}?

mfenced = element mfenced {mfenced.attributes, ImpliedMrow}
mfenced.attributes = 
  MathMLPGlobalAttributes,
  attribute open {text}?,
  attribute close {text}?,
  attribute separators {text}?


menclose = element menclose {menclose.attributes, ImpliedMrow}
menclose.attributes = 
  MathMLPGlobalAttributes,
  attribute notation {text}?


munder.attributes &= 
  attribute align {"left" | "right" | "center"}?

mover.attributes &= 
  attribute align {"left" | "right" | "center"}?

munderover.attributes &= 
  attribute align {"left" | "right" | "center"}?

msub.attributes &=
  attribute subscriptshift {length-percentage}?

msup.attributes &=
  attribute superscriptshift {length-percentage}?

msubsup.attributes &=
  attribute subscriptshift {length-percentage}?,
  attribute superscriptshift {length-percentage}?


mtable.attributes &= 
  attribute align {xsd:string {
    pattern ='\s*(top|bottom|center|baseline|axis)(\s+-?[0-9]+)?\s*'}}?,
  attribute rowalign {list {verticalalign+} }?,
  attribute columnalign {list {columnalignstyle+} }?,
  attribute columnwidth {list {("auto" | length-percentage | "fit") +}}?,
  attribute width {"auto" | length-percentage}?,
  attribute rowspacing {list {(length-percentage) +}}?,
  attribute columnspacing {list {(length-percentage) +}}?,
  attribute rowlines {list {linestyle +}}?,
  attribute columnlines {list {linestyle +}}?,
  attribute frame {linestyle}?,
  attribute framespacing {list {length-percentage, length-percentage}}?,
  attribute equalrows {mathml-boolean}?,
  attribute equalcolumns {mathml-boolean}?,
  attribute displaystyle {mathml-boolean}?


mtr.attributes &= 
  attribute rowalign {"top" | "bottom" | "center" | "baseline" | "axis"}?,
  attribute columnalign {list {columnalignstyle+} }?


mtd.attributes &= 
  attribute rowalign {"top" | "bottom" | "center" | "baseline" | "axis"}?,
  attribute columnalign {columnalignstyle}?


mstack = element mstack {mstack.attributes, MstackExpression*}
mstack.attributes = 
  MathMLPGlobalAttributes,
  attribute align {xsd:string {
    pattern ='\s*(top|bottom|center|baseline|axis)(\s+-?[0-9]+)?\s*'}}?,
  attribute stackalign {"left" | "center" | "right" | "decimalpoint"}?,
  attribute charalign {"left" | "center" | "right"}?,
  attribute charspacing {length-percentage | "loose" | "medium" | "tight"}?


mlongdiv = element mlongdiv {mlongdiv.attributes, MstackExpression,MstackExpression,MstackExpression+}
mlongdiv.attributes = 
  msgroup.attributes,
  attribute longdivstyle {"lefttop" | "stackedrightright" | "mediumstackedrightright" | "shortstackedrightright" | "righttop" | "left/\right" | "left)(right" | ":right=right" | "stackedleftleft" | "stackedleftlinetop"}?


msgroup = element msgroup {msgroup.attributes, MstackExpression*}
msgroup.attributes = 
  MathMLPGlobalAttributes,
  attribute position {integer}?,
  attribute shift {integer}?


msrow = element msrow {msrow.attributes, MsrowExpression*}
msrow.attributes = 
  MathMLPGlobalAttributes,
  attribute position {integer}?


mscarries = element mscarries {mscarries.attributes, (MsrowExpression|mscarry)*}
mscarries.attributes = 
  MathMLPGlobalAttributes,
  attribute position {integer}?,
  attribute location {"w" | "nw" | "n" | "ne" | "e" | "se" | "s" | "sw"}?,
  attribute crossout {list {("none" | "updiagonalstrike" | "downdiagonalstrike" | "verticalstrike" | "horizontalstrike")*}}?,
  attribute scriptsizemultiplier {number}?


mscarry = element mscarry {mscarry.attributes, MsrowExpression*}
mscarry.attributes = 
  MathMLPGlobalAttributes,
  attribute location {"w" | "nw" | "n" | "ne" | "e" | "se" | "s" | "sw"}?,
  attribute crossout {list {("none" | "updiagonalstrike" | "downdiagonalstrike" | "verticalstrike" | "horizontalstrike")*}}?

A.2.3 Strict Content MathML

Strict Content MathML 4 の文法は次で入手できます: https://www.w3.org/Math/RelaxNG/mathml4/mathml4-strict-content.rnc

# MathML 4 (Strict Content)
# #########################

#     Copyright 1998-2024 W3C (MIT, ERCIM, Keio, Beihang)
# 
#     Use and distribution of this code are permitted under the terms
#     W3C Software Notice and License
#     http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231


default namespace m = "http://www.w3.org/1998/Math/MathML"

start |= math.strict

CommonAtt =
    attribute id {xsd:ID}?,
    attribute xref {text}?

math.strict = element math {math.attributes,ContExp*}

math.attributes &= CommonAtt

ContExp = semantics-contexp | cn | ci | csymbol | apply | bind | share | cerror | cbytes | cs

cn = element cn {cn.attributes,cn.content}
cn.content = text
cn.attributes = CommonAtt, attribute type {"integer" | "real" | "double" | "hexdouble"}

semantics-ci = element semantics {CommonAtt,(ci|semantics-ci), 
  (annotation|annotation-xml)*}

semantics-contexp = element semantics {CommonAtt,MathExpression, 
  (annotation|annotation-xml)*}

annotation |= element annotation {CommonAtt,text}

anyElement |=  element (* - m:*) {(attribute * {text}|text| anyElement)*}

annotation-xml |= element annotation-xml {annotation-xml.attributes,
                                         (MathExpression*|anyElement*)}

annotation-xml.attributes &= CommonAtt, cd?, encoding?

encoding &= attribute encoding {xsd:string}




ci = element ci {ci.attributes, ci.content}
ci.attributes = CommonAtt, ci.type?
ci.type = attribute type {"integer" | "rational" | "real" | "complex" | "complex-polar" | "complex-cartesian" | "constant" | "function" | "vector" | "list" | "set" | "matrix"}
ci.content = text


csymbol = element csymbol {csymbol.attributes,csymbol.content}

SymbolName = xsd:NCName
csymbol.attributes = CommonAtt, cd
csymbol.content = SymbolName
cd = attribute cd {xsd:NCName}
name = attribute name {xsd:NCName}
src = attribute src {xsd:anyURI}?

BvarQ = bvar*
bvar = element bvar {CommonAtt, (ci | semantics-ci)}

apply = element apply {CommonAtt,apply.content}
apply.content = ContExp+


bind = element bind {CommonAtt,bind.content}
bind.content = ContExp,bvar*,ContExp

share = element share {CommonAtt, src, empty}

cerror = element cerror {cerror.attributes, csymbol, ContExp*}
cerror.attributes = CommonAtt

cbytes = element cbytes {cbytes.attributes, base64}
cbytes.attributes = CommonAtt
base64 = xsd:base64Binary

cs = element cs {cs.attributes, text}
cs.attributes = CommonAtt

MathExpression |= ContExp

A.2.4 Content MathML

Content MathML 4 の文法は Strict Content MathML のサブセットの文法に基づいて構築されており、次で入手できます: https://www.w3.org/Math/RelaxNG/mathml4/mathml4-content.rnc

# MathML 4 (Content)
# ##################

#     Copyright 1998-2024 W3C (MIT, ERCIM, Keio, Beihang)
# 
#     Use and distribution of this code are permitted under the terms
#     W3C Software Notice and License
#     http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231

default namespace m = "http://www.w3.org/1998/Math/MathML"
namespace local = ""
						
include "mathml4-strict-content.rnc"{
  cn.content = (text | sep | PresentationExpression)* 
  cn.attributes = CommonAtt, DefEncAtt, attribute type {text}?, base?

  ci.attributes = CommonAtt, DefEncAtt, ci.type?
  ci.type = attribute type {text}
  ci.content = (text | PresentationExpression)* 

  csymbol.attributes = CommonAtt, DefEncAtt, attribute type {text}?,cd?
  csymbol.content = (text | PresentationExpression)* 

  annotation-xml.attributes |= CommonAtt, cd?, name?, encoding?

  bvar = element bvar {CommonAtt, ((ci | semantics-ci) & degree?)}

  cbytes.attributes = CommonAtt, DefEncAtt

  cs.attributes = CommonAtt, DefEncAtt

  apply.content = ContExp+ | (ContExp, BvarQ, Qualifier*, ContExp*)

  bind.content = apply.content
}

NonMathMLAtt |= attribute (* - (local:*|m:*)) {xsd:string}

math.attributes &=
    attribute alttext {text}?

MathMLDataAttributes &=
  attribute data-other {text}?

CommonAtt &=
		   NonMathMLAtt*,
                   MathMLDataAttributes,
                   attribute class {xsd:NCName}?,
                   attribute style {xsd:string}?,
                   attribute href {xsd:anyURI}?,
                   attribute intent {text}?,
                   attribute arg {xsd:NCName}?

base = attribute base {text}


sep = element sep {empty}
PresentationExpression |= notAllowed
DefEncAtt = attribute encoding {xsd:string}?,
            attribute definitionURL {xsd:anyURI}?


DomainQ = (domainofapplication|condition|interval|(lowlimit,uplimit?))*
domainofapplication = element domainofapplication {ContExp}
condition = element condition {ContExp}
uplimit = element uplimit {ContExp}
lowlimit = element lowlimit {ContExp}

Qualifier = DomainQ|degree|momentabout|logbase
degree = element degree {ContExp}
momentabout = element momentabout {ContExp}
logbase = element logbase {ContExp}

type = attribute type {text}
order = attribute order {"numeric" | "lexicographic"}
closure = attribute closure {text}


ContExp |= piecewise


piecewise = element piecewise {CommonAtt, DefEncAtt,(piece* & otherwise?)}

piece = element piece {CommonAtt, DefEncAtt, ContExp, ContExp}

otherwise = element otherwise {CommonAtt, DefEncAtt, ContExp}


interval.class = interval
ContExp |= interval.class


interval = element interval { CommonAtt, DefEncAtt,closure?, ContExp,ContExp}

unary-functional.class = inverse | ident | domain | codomain | image | ln | log | moment
ContExp |= unary-functional.class


inverse = element inverse { CommonAtt, DefEncAtt, empty}
ident = element ident { CommonAtt, DefEncAtt, empty}
domain = element domain { CommonAtt, DefEncAtt, empty}
codomain = element codomain { CommonAtt, DefEncAtt, empty}
image = element image { CommonAtt, DefEncAtt, empty}
ln = element ln { CommonAtt, DefEncAtt, empty}
log = element log { CommonAtt, DefEncAtt, empty}
moment = element moment { CommonAtt, DefEncAtt, empty}

lambda.class = lambda
ContExp |= lambda.class


lambda = element lambda { CommonAtt, DefEncAtt, BvarQ, DomainQ, ContExp}

nary-functional.class = compose
ContExp |= nary-functional.class


compose = element compose { CommonAtt, DefEncAtt, empty}

binary-arith.class = quotient | divide | minus | power | rem | root
ContExp |= binary-arith.class


quotient = element quotient { CommonAtt, DefEncAtt, empty}
divide = element divide { CommonAtt, DefEncAtt, empty}
minus = element minus { CommonAtt, DefEncAtt, empty}
power = element power { CommonAtt, DefEncAtt, empty}
rem = element rem { CommonAtt, DefEncAtt, empty}
root = element root { CommonAtt, DefEncAtt, empty}

unary-arith.class = factorial | minus | root | abs | conjugate | arg | real | imaginary | floor | ceiling | exp
ContExp |= unary-arith.class


factorial = element factorial { CommonAtt, DefEncAtt, empty}
abs = element abs { CommonAtt, DefEncAtt, empty}
conjugate = element conjugate { CommonAtt, DefEncAtt, empty}
arg = element arg { CommonAtt, DefEncAtt, empty}
real = element real { CommonAtt, DefEncAtt, empty}
imaginary = element imaginary { CommonAtt, DefEncAtt, empty}
floor = element floor { CommonAtt, DefEncAtt, empty}
ceiling = element ceiling { CommonAtt, DefEncAtt, empty}
exp = element exp { CommonAtt, DefEncAtt, empty}

nary-minmax.class = max | min
ContExp |= nary-minmax.class


max = element max { CommonAtt, DefEncAtt, empty}
min = element min { CommonAtt, DefEncAtt, empty}

nary-arith.class = plus | times | gcd | lcm
ContExp |= nary-arith.class


plus = element plus { CommonAtt, DefEncAtt, empty}
times = element times { CommonAtt, DefEncAtt, empty}
gcd = element gcd { CommonAtt, DefEncAtt, empty}
lcm = element lcm { CommonAtt, DefEncAtt, empty}

nary-logical.class = and | or | xor
ContExp |= nary-logical.class


and = element and { CommonAtt, DefEncAtt, empty}
or = element or { CommonAtt, DefEncAtt, empty}
xor = element xor { CommonAtt, DefEncAtt, empty}

unary-logical.class = not
ContExp |= unary-logical.class


not = element not { CommonAtt, DefEncAtt, empty}

binary-logical.class = implies | equivalent
ContExp |= binary-logical.class


implies = element implies { CommonAtt, DefEncAtt, empty}
equivalent = element equivalent { CommonAtt, DefEncAtt, empty}

quantifier.class = forall | exists
ContExp |= quantifier.class


forall = element forall { CommonAtt, DefEncAtt, empty}
exists = element exists { CommonAtt, DefEncAtt, empty}

nary-reln.class = eq | gt | lt | geq | leq
ContExp |= nary-reln.class


eq = element eq { CommonAtt, DefEncAtt, empty}
gt = element gt { CommonAtt, DefEncAtt, empty}
lt = element lt { CommonAtt, DefEncAtt, empty}
geq = element geq { CommonAtt, DefEncAtt, empty}
leq = element leq { CommonAtt, DefEncAtt, empty}

binary-reln.class = neq | approx | factorof | tendsto
ContExp |= binary-reln.class


neq = element neq { CommonAtt, DefEncAtt, empty}
approx = element approx { CommonAtt, DefEncAtt, empty}
factorof = element factorof { CommonAtt, DefEncAtt, empty}
tendsto = element tendsto { CommonAtt, DefEncAtt, type?, empty}

int.class = int
ContExp |= int.class


int = element int { CommonAtt, DefEncAtt, empty}

Differential-Operator.class = diff
ContExp |= Differential-Operator.class


diff = element diff { CommonAtt, DefEncAtt, empty}

partialdiff.class = partialdiff
ContExp |= partialdiff.class


partialdiff = element partialdiff { CommonAtt, DefEncAtt, empty}

unary-veccalc.class = divergence | grad | curl | laplacian
ContExp |= unary-veccalc.class


divergence = element divergence { CommonAtt, DefEncAtt, empty}
grad = element grad { CommonAtt, DefEncAtt, empty}
curl = element curl { CommonAtt, DefEncAtt, empty}
laplacian = element laplacian { CommonAtt, DefEncAtt, empty}

nary-setlist-constructor.class = set | \list
ContExp |= nary-setlist-constructor.class


set = element set { CommonAtt, DefEncAtt, type?, BvarQ*, DomainQ*, ContExp*}
\list = element \list { CommonAtt, DefEncAtt, order?, BvarQ*, DomainQ*, ContExp*}

nary-set.class = union | intersect | cartesianproduct
ContExp |= nary-set.class


union = element union { CommonAtt, DefEncAtt, empty}
intersect = element intersect { CommonAtt, DefEncAtt, empty}
cartesianproduct = element cartesianproduct { CommonAtt, DefEncAtt, empty}

binary-set.class = in | notin | notsubset | notprsubset | setdiff
ContExp |= binary-set.class


in = element in { CommonAtt, DefEncAtt, empty}
notin = element notin { CommonAtt, DefEncAtt, empty}
notsubset = element notsubset { CommonAtt, DefEncAtt, empty}
notprsubset = element notprsubset { CommonAtt, DefEncAtt, empty}
setdiff = element setdiff { CommonAtt, DefEncAtt, empty}

nary-set-reln.class = subset | prsubset
ContExp |= nary-set-reln.class


subset = element subset { CommonAtt, DefEncAtt, empty}
prsubset = element prsubset { CommonAtt, DefEncAtt, empty}

unary-set.class = card
ContExp |= unary-set.class


card = element card { CommonAtt, DefEncAtt, empty}

sum.class = sum
ContExp |= sum.class


sum = element sum { CommonAtt, DefEncAtt, empty}

product.class = product
ContExp |= product.class


product = element product { CommonAtt, DefEncAtt, empty}

limit.class = limit
ContExp |= limit.class


limit = element limit { CommonAtt, DefEncAtt, empty}

unary-elementary.class = sin | cos | tan | sec | csc | cot | sinh | cosh | tanh | sec h | csch | coth | arcsin | arccos | arctan | arccosh | arccot | arccoth | arccsc | arccsch | arcsec | arcsech | arcsinh | arctanh
ContExp |= unary-elementary.class


sin = element sin { CommonAtt, DefEncAtt, empty}
cos = element cos { CommonAtt, DefEncAtt, empty}
tan = element tan { CommonAtt, DefEncAtt, empty}
sec = element sec { CommonAtt, DefEncAtt, empty}
csc = element csc { CommonAtt, DefEncAtt, empty}
cot = element cot { CommonAtt, DefEncAtt, empty}
sinh = element sinh { CommonAtt, DefEncAtt, empty}
cosh = element cosh { CommonAtt, DefEncAtt, empty}
tanh = element tanh { CommonAtt, DefEncAtt, empty}
sech = element sech { CommonAtt, DefEncAtt, empty}
csch = element csch { CommonAtt, DefEncAtt, empty}
coth = element coth { CommonAtt, DefEncAtt, empty}
arcsin = element arcsin { CommonAtt, DefEncAtt, empty}
arccos = element arccos { CommonAtt, DefEncAtt, empty}
arctan = element arctan { CommonAtt, DefEncAtt, empty}
arccosh = element arccosh { CommonAtt, DefEncAtt, empty}
arccot = element arccot { CommonAtt, DefEncAtt, empty}
arccoth = element arccoth { CommonAtt, DefEncAtt, empty}
arccsc = element arccsc { CommonAtt, DefEncAtt, empty}
arccsch = element arccsch { CommonAtt, DefEncAtt, empty}
arcsec = element arcsec { CommonAtt, DefEncAtt, empty}
arcsech = element arcsech { CommonAtt, DefEncAtt, empty}
arcsinh = element arcsinh { CommonAtt, DefEncAtt, empty}
arctanh = element arctanh { CommonAtt, DefEncAtt, empty}

nary-stats.class = mean | median | mode | sdev | variance
ContExp |= nary-stats.class


mean = element mean { CommonAtt, DefEncAtt, empty}
median = element median { CommonAtt, DefEncAtt, empty}
mode = element mode { CommonAtt, DefEncAtt, empty}
sdev = element sdev { CommonAtt, DefEncAtt, empty}
variance = element variance { CommonAtt, DefEncAtt, empty}

nary-constructor.class = vector | matrix | matrixrow
ContExp |= nary-constructor.class


vector = element vector { CommonAtt, DefEncAtt, BvarQ, DomainQ, ContExp*}
matrix = element matrix { CommonAtt, DefEncAtt, BvarQ, DomainQ, ContExp*}
matrixrow = element matrixrow { CommonAtt, DefEncAtt, BvarQ, DomainQ, ContExp*}

unary-linalg.class = determinant | transpose
ContExp |= unary-linalg.class


determinant = element determinant { CommonAtt, DefEncAtt, empty}
transpose = element transpose { CommonAtt, DefEncAtt, empty}

nary-linalg.class = selector
ContExp |= nary-linalg.class


selector = element selector { CommonAtt, DefEncAtt, empty}

binary-linalg.class = vectorproduct | scalarproduct | outerproduct
ContExp |= binary-linalg.class


vectorproduct = element vectorproduct { CommonAtt, DefEncAtt, empty}
scalarproduct = element scalarproduct { CommonAtt, DefEncAtt, empty}
outerproduct = element outerproduct { CommonAtt, DefEncAtt, empty}

constant-set.class = integers | reals | rationals | naturalnumbers | complexes | primes | emptyset
ContExp |= constant-set.class


integers = element integers { CommonAtt, DefEncAtt, empty}
reals = element reals { CommonAtt, DefEncAtt, empty}
rationals = element rationals { CommonAtt, DefEncAtt, empty}
naturalnumbers = element naturalnumbers { CommonAtt, DefEncAtt, empty}
complexes = element complexes { CommonAtt, DefEncAtt, empty}
primes = element primes { CommonAtt, DefEncAtt, empty}
emptyset = element emptyset { CommonAtt, DefEncAtt, empty}

constant-arith.class = exponentiale | imaginaryi | notanumber | true | false | pi | eulergamma | infinity
ContExp |= constant-arith.class


exponentiale = element exponentiale { CommonAtt, DefEncAtt, empty}
imaginaryi = element imaginaryi { CommonAtt, DefEncAtt, empty}
notanumber = element notanumber { CommonAtt, DefEncAtt, empty}
true = element true { CommonAtt, DefEncAtt, empty}
false = element false { CommonAtt, DefEncAtt, empty}
pi = element pi { CommonAtt, DefEncAtt, empty}
eulergamma = element eulergamma { CommonAtt, DefEncAtt, empty}
infinity = element infinity { CommonAtt, DefEncAtt, empty}

A.2.5 Full MathML

Full MathML 4 の文法は上記の文法を単純に統合したもので、次で入手できます: https://www.w3.org/Math/RelaxNG/mathml4/mathml4.rnc

# MathML 4 (full)
# ##############

#     Copyright 1998-2024 W3C (MIT, ERCIM, Keio)
# 
#     Use and distribution of this code are permitted under the terms
#     W3C Software Notice and License
#     http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231

default namespace m = "http://www.w3.org/1998/Math/MathML"

# Presentation MathML 
include "mathml4-presentation.rnc"  {
anyElement =  element (* - m:*) {(attribute * {text}|text| anyElement)*}
}
		

# Content  MathML
include "mathml4-content.rnc"

A.2.6 Legacy MathML

MathML 3 で非推奨となったいくつかの要素や属性は MathML 4 から削除されています。このスキーマは full MathML 4 スキーマを拡張してこれらの構成を戻し、既存の MathML 文書の検証を可能にします。スキーマは次で入手できます: https://www.w3.org/Math/RelaxNG/mathml4/mathml4-legacy.rnc

# MathML 4 (legacy)
# ################

#     Copyright 1998-2024 W3C (MIT, ERCIM, Keio)
# 
#     Use and distribution of this code are permitted under the terms
#     W3C Software Notice and License
#     http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231

default namespace m = "http://www.w3.org/1998/Math/MathML"

# MathML 4
include "mathml4.rnc" {

# unitless lengths
length-percentage = xsd:string {
  pattern = '\s*((-?[0-9]*([0-9]\.?|\.[0-9])[0-9]*(e[mx]|in|cm|mm|p[xtc]|%)?)|(negative)?((very){0,2}thi(n|ck)|medium)mathspace)\s*' 
}
}

# Removed MathML 1/2/3 elements

ContExp |= reln | fn | declare

reln = element reln {ContExp*}
fn = element fn {ContExp}
declare = element declare {attribute type {xsd:string}?,
                           attribute scope {xsd:string}?,
                           attribute nargs {xsd:nonNegativeInteger}?,
                           attribute occurrence {"prefix"|"infix"|"function-model"}?,
                           DefEncAtt, 
                           ContExp+}



# legacy attributes

CommonAtt &= attribute other {text}?
MathMLPGlobalAttributes &= attribute other {text}?


mglyph.deprecatedattributes =
  attribute fontfamily {text}?,
  attribute index {integer}?,
  attribute 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" | "initial" | "tailed" | "looped" | "stretched"}?,
  attribute mathsize {"small" | "normal" | "big" | length-percentage}?

mglyph.attributes &= mglyph.deprecatedattributes

mstyle.deprecatedattributes =
  attribute veryverythinmathspace {length-percentage}?,
  attribute verythinmathspace {length-percentage}?,
  attribute thinmathspace {length-percentage}?,
  attribute mediummathspace {length-percentage}?,
  attribute thickmathspace {length-percentage}?,
  attribute verythickmathspace {length-percentage}?,
  attribute veryverythickmathspace {length-percentage}?

mstyle.attributes &= mstyle.deprecatedattributes


math.deprecatedattributes = attribute mode {xsd:string}?,
                            attribute macros {xsd:string}?

math.attributes &= math.deprecatedattributes


DeprecatedTokenAtt = 
  attribute fontfamily {text}?,
  attribute fontweight {"normal" | "bold"}?,
  attribute fontstyle {"normal" | "italic"}?,
  attribute fontsize {length-percentage}?,
  attribute color {color}?,
  attribute background {color}?,
  attribute mathsize {"small" | "normal" | "big" }?

DeprecatedMoAtt =
  attribute fence {mathml-boolean}?,
  attribute separator {mathml-boolean}?

mstyle.attributes &= DeprecatedTokenAtt
mstyle.attributes &= DeprecatedMoAtt
mglyph.attributes &= DeprecatedTokenAtt
mn.attributes &= DeprecatedTokenAtt
mi.attributes &= DeprecatedTokenAtt
mo.attributes &= DeprecatedTokenAtt
mo.attributes &= DeprecatedMoAtt
mtext.attributes &= DeprecatedTokenAtt
mspace.attributes &= DeprecatedTokenAtt
ms.attributes &= DeprecatedTokenAtt

semantics.attributes &= DefEncAtt


# malignmark in tokens
token.content |= malignmark
# malignmark in mfrac etc
MathExpression |= MalignExpression

maligngroup.attributes &=
  attribute groupalign {"left" | "center" | "right" | "decimalpoint"}?

malignmark.attributes &=
  attribute edge {"left" | "right"}?

mstyle.generalattributes &=
  attribute edge {"left" | "right"}?

# groupalign
group-alignment = "left" | "center" | "right" | "decimalpoint"
group-alignment-list = list {group-alignment+}
group-alignment-list-list = xsd:string {
  pattern = '(\s*\{\s*(left|center|right|decimalpoint)(\s+(left|center|right|decimalpoint))*\})*\s*' }

mstyle.generalattributes &=
  attribute groupalign {group-alignment-list-list}?

mtable.attributes &=
  attribute groupalign {group-alignment-list-list}?,
  attribute alignmentscope {list {("true" | "false") +}}?,
  attribute side {"left" | "right" | "leftoverlap" | "rightoverlap"}?,
  attribute minlabelspacing {length-percentage}?

mtr.attributes &=
  attribute groupalign {group-alignment-list-list}?
		       
mtd.attributes &=
  attribute groupalign {group-alignment-list}?

mlabeledtr = element mlabeledtr {mlabeledtr.attributes, mtd+}
mlabeledtr.attributes = 
  mtr.attributes

TableRowExpression |= mlabeledtr

A.3 MathML DTD の使用

MathML DTD は名前空間接頭辞を MathML 要素に使用できるようにするために [Modularization] に示された戦略を使用します。ただし、互換性のために XML シリアル化に名前空間接頭辞を使用しないことが推奨されます(HTML シリアル化との互換性のため)。

XML シリアル化を使用する場合は、HTML シリアル化と異なり、DTD を指定しない限り &int; のような文字実体参照を使用できない点に注意してください。DTD としてここに示す完全な MathML DTD を指定するか、[Entities] に規定された HTML/MathML の実体宣言セットのいずれかを指定する必要があります。文字は常に文字データを直接使用するか、数値文字参照を使用して指定できるため、&#x222B; を使用し、&int; の代わりにすることができます。

A.4 MathML XML スキーマの使用

MathML フラグメントは MathML 用の XML スキーマを使用して検証できます。スキーマは次にあります: http://www.w3.org/Math/XMLSchema/mathml4/mathml4.xsd。 提供されたスキーマは Relax NG スキーマから機械的に生成されており、XSD 構文で強制できないいくつかの制約を省略しています。

B. 演算子辞書

以下の表は、MathML における演算子、フェンス、区切り文字、およびアクセントのレンダリング特性の提案辞書を示したものです。これらはすべて mo 要素で表されます。簡潔にするため、本付録ではそのような要素を単に operators と呼びます。なお、[MathML-Core] の実装は、これらの値を既定の演算子間隔の規範的定義として使用します。

B.1 演算子辞書の索引付け

辞書は要素の内容だけでなく、要素の内容と form 属性値の組合せによって索引付けされています。複数の形式を持つ演算子は複数のエントリを持ちます。form 属性が与えられない場合にどの形式を使用するかは MathML 仕様で指定されています。詳しくは 3.2.5.6.2 form 属性の既定値 を参照してください。

データはすべて機械可読形式の unicode.xml に含まれており、HTML/MathML のエンティティ定義のソースでもあり、[Entities] に同梱されています。以下では、より人間に読みやすい二つの形式で提示しています。データの代替的な提示については [MathML-Core] も参照してください。

最初の表示では、演算子はまず form と spacing 属性で並べられ、次に priority によって順序付けされます。次に文字がリストされ、その文字に対する残りの演算子辞書のエントリに関する追加データは title 属性を介して与えられ、適切なブラウザではツールチップとして表示されます。

データの第二の表示では、表の最上行の見出しをクリックすることで、適切なブラウザではその列で表を並べ替えることができます。

B.2 lspace および rspace 属性に関する注

ここで示す lspace および rspace の値は 0 から 7 の範囲で、1/18 em の倍数を表し、namedspace に用いられる値と一致します。

内容が InvisibleTimes または ApplyFunction の不可視演算子については、MathML のレンダラーが文脈依存で間隔を選択することが推奨されます(これは以下の表で与えられる静的な値に対する例外です)。<mo>&ApplyFunction;</mo> の場合、右側の被演算子がフェンスで始まらないような式(例えば sin x のような)では、合計の間隔(lspace+rspace)は 0 より大きくするべきです。<mo>&InvisibleTimes;</mo> の場合、両方の被演算子(またはベースライン上の最も近いトークン)が非傾斜フォントで表示される識別子であるとき(すなわち提案される規則の下で両被演算子が複数文字識別子であるとき)には、合計の間隔は 0 より大きくするべきです。

いくつかのレンダラーは、TeX の場合のように、スクリプト中に現れる多くの演算子(すなわち scriptlevel が 0 より大きいとき; 参照: 3.3.4 スタイル変更 <mstyle>)についてほとんど間隔を使わないことを望むかもしれません。

B.3 演算子辞書のエントリ

B.3.1 圧縮表示

form:infix lspace:0 rspace:0
優先度: 160
invisible separator
優先度: 620
invisible times
優先度: 660
\
優先度: 720
優先度: 880
function application
優先度: 920
invisible plus
優先度: 940
_
form:infix lspace:0 rspace:3
優先度: 140
;
優先度: 160
,
優先度: 180
:
form:infix lspace:3 rspace:3
優先度: 560
@
優先度: 620
*, ., ·, ×, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ⨿,
優先度: 640
%
優先度: 680
, ,
優先度: 700
,
優先度: 740
⫝̸,
優先度: 760
**
優先度: 800
<>, ^
優先度: 840
?
優先度: 900
, , ,
form:infix lspace:4 rspace:4
優先度: 360
, , , , , , , , , , ,
優先度: 380
, , , , , , , , , , , , , , , , ,
優先度: 400
+, -, ±, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
優先度: 420
優先度: 600
&&, , , , , , , , , , , , ,
優先度: 680
/, ÷, , , , , , , , , , , , ,
form:infix lspace:5 rspace:5
優先度: 140
優先度: 180
優先度: 220
->, , , ,
優先度: 240
//
優先度: 260
, , , , , , , , , , , , , , , , , , , , , , , ,
優先度: 300
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ⪿, , , , , , , , , , , , , , , , , , , , , , , , , ,
優先度: 320
!=, *=, +=, -=, /=, :=, <, <=, =, ==, >, >=, |, ||, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ⩿, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
優先度: 340
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ⤿, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ⥿, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ⬿, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
form:postfix lspace:0 rspace:0
優先度: 100
,
優先度: 120
), ], |, ||, }, , , , , , , , , , , , , , , , , , , , , , , , , ,
優先度: 820
!, !!, %,
優先度: 920
", &, ', ++, --, ^, _, `, ~, ¨, ¯, °, ², ³, ´, ¸, ¹, ˆ, ˇ, ˉ, ˊ, ˋ, ˍ, ˘, ˙, ˚, ˜, ˝, ˷, ̂, ̑, , , , , , , , , , , , , , , , , , , , , , , , , 𞻰, 𞻱
form:prefix lspace:0 rspace:0
優先度: 100
,
優先度: 120
(, [, {, |, ||, , , , , , , , , , , , , , , , , , , , , , , , , ,
優先度: 200
,
優先度: 280
!, ¬, , , , , , , ,
優先度: 580
, , , , , , , , , , , , , , , , , , , , , , , , , , ,
優先度: 720
+, -, ±, , , , ,
優先度: 780
form:prefix lspace:3 rspace:0
優先度: 780
, ,
優先度: 860
, ,
form:prefix lspace:3 rspace:3
優先度: 440
, , , ,
優先度: 460
優先度: 480
, , , , , , , , , , , , , , , , , , , , , , , , ,
優先度: 500
, ,
優先度: 520
, , , , , , , , , , , ⫿
優先度: 540
,

B.3.2 ソート可能な表ビュー

文字 字形 名称 形式 優先度 左間隔 右間隔 プロパティ
&#x2018; left single quotation mark prefix 100 0 0
&#x2019; right single quotation mark postfix 100 0 0
&#x201C; left double quotation mark prefix 100 0 0
&#x201D; right double quotation mark postfix 100 0 0
( ( left parenthesis prefix 120 0 0 stretchy, symmetric
) ) right parenthesis postfix 120 0 0 stretchy, symmetric
[ [ left square bracket prefix 120 0 0 stretchy, symmetric
] ] right square bracket postfix 120 0 0 stretchy, symmetric
{ { left curly bracket prefix 120 0 0 stretchy, symmetric
| | vertical line prefix 120 0 0 stretchy, symmetric
| | vertical line postfix 120 0 0 stretchy, symmetric
|| || multiple character operator: || prefix 120 0 0
|| || multiple character operator: || postfix 120 0 0
} } right curly bracket postfix 120 0 0 stretchy, symmetric
&#x2016; double vertical line prefix 120 0 0 stretchy, symmetric
&#x2016; double vertical line postfix 120 0 0 stretchy, symmetric
&#x2308; left ceiling prefix 120 0 0 stretchy, symmetric
&#x2309; right ceiling postfix 120 0 0 stretchy, symmetric
&#x230A; left floor prefix 120 0 0 stretchy, symmetric
&#x230B; right floor postfix 120 0 0 stretchy, symmetric
&#x2329; left-pointing angle bracket prefix 120 0 0 stretchy, symmetric
&#x232A; right-pointing angle bracket postfix 120 0 0 stretchy, symmetric
&#x2772; light left tortoise shell bracket ornament prefix 120 0 0 stretchy, symmetric
&#x2773; light right tortoise shell bracket ornament postfix 120 0 0 stretchy, symmetric
&#x27E6; mathematical left white square bracket prefix 120 0 0 stretchy, symmetric
&#x27E7; mathematical right white square bracket postfix 120 0 0 stretchy, symmetric
&#x27E8; mathematical left angle bracket prefix 120 0 0 stretchy, symmetric
&#x27E9; mathematical right angle bracket postfix 120 0 0 stretchy, symmetric
&#x27EA; mathematical left double angle bracket prefix 120 0 0 stretchy, symmetric
&#x27EB; mathematical right double angle bracket postfix 120 0 0 stretchy, symmetric
&#x27EC; mathematical left white tortoise shell bracket prefix 120 0 0 stretchy, symmetric
&#x27ED; mathematical right white tortoise shell bracket postfix 120 0 0 stretchy, symmetric
&#x27EE; mathematical left flattened parenthesis prefix 120 0 0 stretchy, symmetric
&#x27EF; mathematical right flattened parenthesis postfix 120 0 0 stretchy, symmetric
&#x2980; triple vertical bar delimiter prefix 120 0 0 stretchy, symmetric
&#x2980; triple vertical bar delimiter postfix 120 0 0 stretchy, symmetric
&#x2983; left white curly bracket prefix 120 0 0 stretchy, symmetric
&#x2984; right white curly bracket postfix 120 0 0 stretchy, symmetric
&#x2985; left white parenthesis prefix 120 0 0 stretchy, symmetric
&#x2986; right white parenthesis postfix 120 0 0 stretchy, symmetric
&#x2987; z notation left image bracket prefix 120 0 0 stretchy, symmetric
&#x2988; z notation right image bracket postfix 120 0 0 stretchy, symmetric
&#x2989; z notation left binding bracket prefix 120 0 0 stretchy, symmetric
&#x298A; z notation right binding bracket postfix 120 0 0 stretchy, symmetric
&#x298B; left square bracket with underbar prefix 120 0 0 stretchy, symmetric
&#x298C; right square bracket with underbar postfix 120 0 0 stretchy, symmetric
&#x298D; left square bracket with tick in top corner prefix 120 0 0 stretchy, symmetric
&#x298E; right square bracket with tick in bottom corner postfix 120 0 0 stretchy, symmetric
&#x298F; left square bracket with tick in bottom corner prefix 120 0 0 stretchy, symmetric
&#x2990; right square bracket with tick in top corner postfix 120 0 0 stretchy, symmetric
&#x2991; left angle bracket with dot prefix 120 0 0 stretchy, symmetric
&#x2992; right angle bracket with dot postfix 120 0 0 stretchy, symmetric
&#x2993; left arc less-than bracket prefix 120 0 0 stretchy, symmetric
&#x2994; right arc greater-than bracket postfix 120 0 0 stretchy, symmetric
&#x2995; double left arc greater-than bracket prefix 120 0 0 stretchy, symmetric
&#x2996; double right arc less-than bracket postfix 120 0 0 stretchy, symmetric
&#x2997; left black tortoise shell bracket prefix 120 0 0 stretchy, symmetric
&#x2998; right black tortoise shell bracket postfix 120 0 0 stretchy, symmetric
&#x2999; dotted fence prefix 120 0 0 stretchy, symmetric
&#x2999; dotted fence postfix 120 0 0 stretchy, symmetric
&#x29D8; left wiggly fence prefix 120 0 0 stretchy, symmetric
&#x29D9; right wiggly fence postfix 120 0 0 stretchy, symmetric
&#x29DA; left double wiggly fence prefix 120 0 0 stretchy, symmetric
&#x29DB; right double wiggly fence postfix 120 0 0 stretchy, symmetric
&#x29FC; left-pointing curved angle bracket prefix 120 0 0 stretchy, symmetric
&#x29FD; right-pointing curved angle bracket postfix 120 0 0 stretchy, symmetric
; ; semicolon infix 140 0 3 linebreakstyle=after
&#x2981; z notation spot infix 140 5 5
, , comma infix 160 0 3 linebreakstyle=after
&#x2063; invisible separator infix 160 0 0 linebreakstyle=after
: : colon infix 180 0 3
&#x2982; z notation type colon infix 180 5 5
&#x2234; therefore prefix 200 0 0
&#x2235; because prefix 200 0 0
-> -> multiple character operator: -> infix 220 5 5
&#x22B6; original of infix 220 5 5
&#x22B7; image of infix 220 5 5
&#x22B8; multimap infix 220 5 5
&#x29F4; rule-delayed infix 220 5 5
// // multiple character operator: // infix 240 5 5
&#x22A2; right tack infix 260 5 5
&#x22A3; left tack infix 260 5 5
&#x22A7; models infix 260 5 5
&#x22A8; true infix 260 5 5
&#x22A9; forces infix 260 5 5
&#x22AA; triple vertical bar right turnstile infix 260 5 5
&#x22AB; double vertical bar double right turnstile infix 260 5 5
&#x22AC; does not prove infix 260 5 5
&#x22AD; not true infix 260 5 5
&#x22AE; does not force infix 260 5 5
&#x22AF; negated double vertical bar double right turnstile infix 260 5 5
&#x2ADE; short left tack infix 260 5 5
&#x2ADF; short down tack infix 260 5 5
&#x2AE0; short up tack infix 260 5 5
&#x2AE1; perpendicular with s infix 260 5 5
&#x2AE2; vertical bar triple right turnstile infix 260 5 5
&#x2AE3; double vertical bar left turnstile infix 260 5 5
&#x2AE4; vertical bar double left turnstile infix 260 5 5
&#x2AE5; double vertical bar double left turnstile infix 260 5 5
&#x2AE6; long dash from left member of double vertical infix 260 5 5
&#x2AE7; short down tack with overbar infix 260 5 5
&#x2AE8; short up tack with underbar infix 260 5 5
&#x2AE9; short up tack above short down tack infix 260 5 5
&#x2AEA; double down tack infix 260 5 5
&#x2AEB; double up tack infix 260 5 5
! ! exclamation mark prefix 280 0 0
&#xAC; ¬ not sign prefix 280 0 0
&#x2200; for all prefix 280 0 0
&#x2203; there exists prefix 280 0 0
&#x2204; there does not exist prefix 280 0 0
&#x223C; tilde operator prefix 280 0 0
&#x2310; reversed not sign prefix 280 0 0
&#x2319; turned not sign prefix 280 0 0
&#x2AEC; double stroke not sign prefix 280 0 0
&#x2AED; reversed double stroke not sign prefix 280 0 0
&#x2208; element of infix 300 5 5
&#x2209; not an element of infix 300 5 5
&#x220A; small element of infix 300 5 5
&#x220B; contains as member infix 300 5 5
&#x220C; does not contain as member infix 300 5 5
&#x220D; small contains as member infix 300 5 5
&#x2282; subset of infix 300 5 5
&#x2283; superset of infix 300 5 5
&#x2284; not a subset of infix 300 5 5
&#x2285; not a superset of infix 300 5 5
&#x2286; subset of or equal to infix 300 5 5
&#x2287; superset of or equal to infix 300 5 5
&#x2288; neither a subset of nor equal to infix 300 5 5
&#x2289; neither a superset of nor equal to infix 300 5 5
&#x228A; subset of with not equal to infix 300 5 5
&#x228B; superset of with not equal to infix 300 5 5
&#x228F; square image of infix 300 5 5
&#x2290; square original of infix 300 5 5
&#x2291; square image of or equal to infix 300 5 5
&#x2292; square original of or equal to infix 300 5 5
&#x22B0; precedes under relation infix 300 5 5
&#x22B1; succeeds under relation infix 300 5 5
&#x22B2; normal subgroup of infix 300 5 5
&#x22B3; contains as normal subgroup infix 300 5 5
&#x22D0; double subset infix 300 5 5
&#x22D1; double superset infix 300 5 5
&#x22E2; not square image of or equal to infix 300 5 5
&#x22E3; not square original of or equal to infix 300 5 5
&#x22E4; square image of or not equal to infix 300 5 5
&#x22E5; square original of or not equal to infix 300 5 5
&#x22EA; not normal subgroup of infix 300 5 5
&#x22EB; does not contain as normal subgroup infix 300 5 5
&#x22EC; not normal subgroup of or equal to infix 300 5 5
&#x22ED; does not contain as normal subgroup or equal infix 300 5 5
&#x22F2; element of with long horizontal stroke infix 300 5 5
&#x22F3; element of with vertical bar at end of horizontal stroke infix 300 5 5
&#x22F4; small element of with vertical bar at end of horizontal stroke infix 300 5 5
&#x22F5; element of with dot above infix 300 5 5
&#x22F6; element of with overbar infix 300 5 5
&#x22F7; small element of with overbar infix 300 5 5
&#x22F8; element of with underbar infix 300 5 5
&#x22F9; element of with two horizontal strokes infix 300 5 5
&#x22FA; contains with long horizontal stroke infix 300 5 5
&#x22FB; contains with vertical bar at end of horizontal stroke infix 300 5 5
&#x22FC; small contains with vertical bar at end of horizontal stroke infix 300 5 5
&#x22FD; contains with overbar infix 300 5 5
&#x22FE; small contains with overbar infix 300 5 5
&#x22FF; z notation bag membership infix 300 5 5
&#x2979; subset above rightwards arrow infix 300 5 5
&#x297A; leftwards arrow through subset infix 300 5 5
&#x297B; superset above leftwards arrow infix 300 5 5
&#x2ABD; subset with dot infix 300 5 5
&#x2ABE; superset with dot infix 300 5 5
&#x2ABF; ⪿ subset with plus sign below infix 300 5 5
&#x2AC0; superset with plus sign below infix 300 5 5
&#x2AC1; subset with multiplication sign below infix 300 5 5
&#x2AC2; superset with multiplication sign below infix 300 5 5
&#x2AC3; subset of or equal to with dot above infix 300 5 5
&#x2AC4; superset of or equal to with dot above infix 300 5 5
&#x2AC5; subset of above equals sign infix 300 5 5
&#x2AC6; superset of above equals sign infix 300 5 5
&#x2AC7; subset of above tilde operator infix 300 5 5
&#x2AC8; superset of above tilde operator infix 300 5 5
&#x2AC9; subset of above almost equal to infix 300 5 5
&#x2ACA; superset of above almost equal to infix 300 5 5
&#x2ACB; subset of above not equal to infix 300 5 5
&#x2ACC; superset of above not equal to infix 300 5 5
&#x2ACD; square left open box operator infix 300 5 5
&#x2ACE; square right open box operator infix 300 5 5
&#x2ACF; closed subset infix 300 5 5
&#x2AD0; closed superset infix 300 5 5
&#x2AD1; closed subset or equal to infix 300 5 5
&#x2AD2; closed superset or equal to infix 300 5 5
&#x2AD3; subset above superset infix 300 5 5
&#x2AD4; superset above subset infix 300 5 5
&#x2AD5; subset above subset infix 300 5 5
&#x2AD6; superset above superset infix 300 5 5
&#x2AD7; superset beside subset infix 300 5 5
&#x2AD8; superset beside and joined by dash with subset infix 300 5 5
&#x2AD9; element of opening downwards infix 300 5 5
!= != multiple character operator: != infix 320 5 5
*= *= multiple character operator: *= infix 320 5 5
+= += multiple character operator: += infix 320 5 5
-= -= multiple character operator: -= infix 320 5 5
/= /= multiple character operator: /= infix 320 5 5
:= := multiple character operator: := infix 320 5 5
&lt; < less-than sign infix 320 5 5
&lt;= <= multiple character operator: <= infix 320 5 5
= = equals sign infix 320 5 5
== == multiple character operator: == infix 320 5 5
> > greater-than sign infix 320 5 5
>= >= multiple character operator: >= infix 320 5 5
| | vertical line infix 320 5 5
|| || multiple character operator: || infix 320 5 5
&#x221D; proportional to infix 320 5 5
&#x2223; divides infix 320 5 5
&#x2224; does not divide infix 320 5 5
&#x2225; parallel to infix 320 5 5
&#x2226; not parallel to infix 320 5 5
&#x2237; proportion infix 320 5 5
&#x2239; excess infix 320 5 5
&#x223A; geometric proportion infix 320 5 5
&#x223B; homothetic infix 320 5 5
&#x223C; tilde operator infix 320 5 5
&#x223D; reversed tilde infix 320 5 5
&#x223E; inverted lazy s infix 320 5 5
&#x2241; not tilde infix 320 5 5
&#x2242; minus tilde infix 320 5 5
&#x2243; asymptotically equal to infix 320 5 5
&#x2244; not asymptotically equal to infix 320 5 5
&#x2245; approximately equal to infix 320 5 5
&#x2246; approximately but not actually equal to infix 320 5 5
&#x2247; neither approximately nor actually equal to infix 320 5 5
&#x2248; almost equal to infix 320 5 5
&#x2249; not almost equal to infix 320 5 5
&#x224A; almost equal or equal to infix 320 5 5
&#x224B; triple tilde infix 320 5 5
&#x224C; all equal to infix 320 5 5
&#x224D; equivalent to infix 320 5 5
&#x224E; geometrically equivalent to infix 320 5 5
&#x224F; difference between infix 320 5 5
&#x2250; approaches the limit infix 320 5 5
&#x2251; geometrically equal to infix 320 5 5
&#x2252; approximately equal to or the image of infix 320 5 5
&#x2253; image of or approximately equal to infix 320 5 5
&#x2254; colon equals infix 320 5 5
&#x2255; equals colon infix 320 5 5
&#x2256; ring in equal to infix 320 5 5
&#x2257; ring equal to infix 320 5 5
&#x2258; corresponds to infix 320 5 5
&#x2259; estimates infix 320 5 5
&#x225A; equiangular to infix 320 5 5
&#x225B; star equals infix 320 5 5
&#x225C; delta equal to infix 320 5 5
&#x225D; equal to by definition infix 320 5 5
&#x225E; measured by infix 320 5 5
&#x225F; questioned equal to infix 320 5 5
&#x2260; not equal to infix 320 5 5
&#x2261; identical to infix 320 5 5
&#x2262; not identical to infix 320 5 5
&#x2263; strictly equivalent to infix 320 5 5
&#x2264; less-than or equal to infix 320 5 5
&#x2265; greater-than or equal to infix 320 5 5
&#x2266; less-than over equal to infix 320 5 5
&#x2267; greater-than over equal to infix 320 5 5
&#x2268; less-than but not equal to infix 320 5 5
&#x2269; greater-than but not equal to infix 320 5 5
&#x226A; much less-than infix 320 5 5
&#x226B; much greater-than infix 320 5 5
&#x226C; between infix 320 5 5
&#x226D; not equivalent to infix 320 5 5
&#x226E; not less-than infix 320 5 5
&#x226F; not greater-than infix 320 5 5
&#x2270; neither less-than nor equal to infix 320 5 5
&#x2271; neither greater-than nor equal to infix 320 5 5
&#x2272; less-than or equivalent to infix 320 5 5
&#x2273; greater-than or equivalent to infix 320 5 5
&#x2274; neither less-than nor equivalent to infix 320 5 5
&#x2275; neither greater-than nor equivalent to infix 320 5 5
&#x2276; less-than or greater-than infix 320 5 5
&#x2277; greater-than or less-than infix 320 5 5
&#x2278; neither less-than nor greater-than infix 320 5 5
&#x2279; neither greater-than nor less-than infix 320 5 5
&#x227A; precedes infix 320 5 5
&#x227B; succeeds infix 320 5 5
&#x227C; precedes or equal to infix 320 5 5
&#x227D; succeeds or equal to infix 320 5 5
&#x227E; precedes or equivalent to infix 320 5 5
&#x227F; succeeds or equivalent to infix 320 5 5
&#x2280; does not precede infix 320 5 5
&#x2281; does not succeed infix 320 5 5
&#x229C; circled equals infix 320 5 5
&#x22A6; assertion infix 320 5 5
&#x22B4; normal subgroup of or equal to infix 320 5 5
&#x22B5; contains as normal subgroup or equal to infix 320 5 5
&#x22C8; bowtie infix 320 5 5
&#x22CD; reversed tilde equals infix 320 5 5
&#x22D4; pitchfork infix 320 5 5
&#x22D5; equal and parallel to infix 320 5 5
&#x22D6; less-than with dot infix 320 5 5
&#x22D7; greater-than with dot infix 320 5 5
&#x22D8; very much less-than infix 320 5 5
&#x22D9; very much greater-than infix 320 5 5
&#x22DA; less-than equal to or greater-than infix 320 5 5
&#x22DB; greater-than equal to or less-than infix 320 5 5
&#x22DC; equal to or less-than infix 320 5 5
&#x22DD; equal to or greater-than infix 320 5 5
&#x22DE; equal to or precedes infix 320 5 5
&#x22DF; equal to or succeeds infix 320 5 5
&#x22E0; does not precede or equal infix 320 5 5
&#x22E1; does not succeed or equal infix 320 5 5
&#x22E6; less-than but not equivalent to infix 320 5 5
&#x22E7; greater-than but not equivalent to infix 320 5 5
&#x22E8; precedes but not equivalent to infix 320 5 5
&#x22E9; succeeds but not equivalent to infix 320 5 5
&#x27C2; perpendicular infix 320 5 5
&#x2976; less-than above leftwards arrow infix 320 5 5
&#x2977; leftwards arrow through less-than infix 320 5 5
&#x2978; greater-than above rightwards arrow infix 320 5 5
&#x29B6; circled vertical bar infix 320 5 5
&#x29B7; circled parallel infix 320 5 5
&#x29B9; circled perpendicular infix 320 5 5
&#x29C0; circled less-than infix 320 5 5
&#x29C1; circled greater-than infix 320 5 5
&#x29CE; right triangle above left triangle infix 320 5 5
&#x29CF; left triangle beside vertical bar infix 320 5 5
&#x29D0; vertical bar beside right triangle infix 320 5 5
&#x29D1; bowtie with left half black infix 320 5 5
&#x29D2; bowtie with right half black infix 320 5 5
&#x29D3; black bowtie infix 320 5 5
&#x29E1; increases as infix 320 5 5
&#x29E3; equals sign and slanted parallel infix 320 5 5
&#x29E4; equals sign and slanted parallel with tilde above infix 320 5 5
&#x29E5; identical to and slanted parallel infix 320 5 5
&#x29E6; gleich stark infix 320 5 5
&#x2A66; equals sign with dot below infix 320 5 5
&#x2A67; identical with dot above infix 320 5 5
&#x2A68; triple horizontal bar with double vertical stroke infix 320 5 5
&#x2A69; triple horizontal bar with triple vertical stroke infix 320 5 5
&#x2A6A; tilde operator with dot above infix 320 5 5
&#x2A6B; tilde operator with rising dots infix 320 5 5
&#x2A6C; similar minus similar infix 320 5 5
&#x2A6D; congruent with dot above infix 320 5 5
&#x2A6E; equals with asterisk infix 320 5 5
&#x2A6F; almost equal to with circumflex accent infix 320 5 5
&#x2A70; approximately equal or equal to infix 320 5 5
&#x2A71; equals sign above plus sign infix 320 5 5
&#x2A72; plus sign above equals sign infix 320 5 5
&#x2A73; equals sign above tilde operator infix 320 5 5
&#x2A74; double colon equal infix 320 5 5
&#x2A75; two consecutive equals signs infix 320 5 5
&#x2A76; three consecutive equals signs infix 320 5 5
&#x2A77; equals sign with two dots above and two dots below infix 320 5 5
&#x2A78; equivalent with four dots above infix 320 5 5
&#x2A79; less-than with circle inside infix 320 5 5
&#x2A7A; greater-than with circle inside infix 320 5 5
&#x2A7B; less-than with question mark above infix 320 5 5
&#x2A7C; greater-than with question mark above infix 320 5 5
&#x2A7D; less-than or slanted equal to infix 320 5 5
&#x2A7E; greater-than or slanted equal to infix 320 5 5
&#x2A7F; ⩿ less-than or slanted equal to with dot inside infix 320 5 5
&#x2A80; greater-than or slanted equal to with dot inside infix 320 5 5
&#x2A81; less-than or slanted equal to with dot above infix 320 5 5
&#x2A82; greater-than or slanted equal to with dot above infix 320 5 5
&#x2A83; less-than or slanted equal to with dot above right infix 320 5 5
&#x2A84; greater-than or slanted equal to with dot above left infix 320 5 5
&#x2A85; less-than or approximate infix 320 5 5
&#x2A86; greater-than or approximate infix 320 5 5
&#x2A87; less-than and single-line not equal to infix 320 5 5
&#x2A88; greater-than and single-line not equal to infix 320 5 5
&#x2A89; less-than and not approximate infix 320 5 5
&#x2A8A; greater-than and not approximate infix 320 5 5
&#x2A8B; less-than above double-line equal above greater-than infix 320 5 5
&#x2A8C; greater-than above double-line equal above less-than infix 320 5 5
&#x2A8D; less-than above similar or equal infix 320 5 5
&#x2A8E; greater-than above similar or equal infix 320 5 5
&#x2A8F; less-than above similar above greater-than infix 320 5 5
&#x2A90; greater-than above similar above less-than infix 320 5 5
&#x2A91; less-than above greater-than above double-line equal infix 320 5 5
&#x2A92; greater-than above less-than above double-line equal infix 320 5 5
&#x2A93; less-than above slanted equal above greater-than above slanted equal infix 320 5 5
&#x2A94; greater-than above slanted equal above less-than above slanted equal infix 320 5 5
&#x2A95; slanted equal to or less-than infix 320 5 5
&#x2A96; slanted equal to or greater-than infix 320 5 5
&#x2A97; slanted equal to or less-than with dot inside infix 320 5 5
&#x2A98; slanted equal to or greater-than with dot inside infix 320 5 5
&#x2A99; double-line equal to or less-than infix 320 5 5
&#x2A9A; double-line equal to or greater-than infix 320 5 5
&#x2A9B; double-line slanted equal to or less-than infix 320 5 5
&#x2A9C; double-line slanted equal to or greater-than infix 320 5 5
&#x2A9D; similar or less-than infix 320 5 5
&#x2A9E; similar or greater-than infix 320 5 5
&#x2A9F; similar above less-than above equals sign infix 320 5 5
&#x2AA0; similar above greater-than above equals sign infix 320 5 5
&#x2AA1; double nested less-than infix 320 5 5
&#x2AA2; double nested greater-than infix 320 5 5
&#x2AA3; double nested less-than with underbar infix 320 5 5
&#x2AA4; greater-than overlapping less-than infix 320 5 5
&#x2AA5; greater-than beside less-than infix 320 5 5
&#x2AA6; less-than closed by curve infix 320 5 5
&#x2AA7; greater-than closed by curve infix 320 5 5
&#x2AA8; less-than closed by curve above slanted equal infix 320 5 5
&#x2AA9; greater-than closed by curve above slanted equal infix 320 5 5
&#x2AAA; smaller than infix 320 5 5
&#x2AAB; larger than infix 320 5 5
&#x2AAC; smaller than or equal to infix 320 5 5
&#x2AAD; larger than or equal to infix 320 5 5
&#x2AAE; equals sign with bumpy above infix 320 5 5
&#x2AAF; precedes above single-line equals sign infix 320 5 5
&#x2AB0; succeeds above single-line equals sign infix 320 5 5
&#x2AB1; precedes above single-line not equal to infix 320 5 5
&#x2AB2; succeeds above single-line not equal to infix 320 5 5
&#x2AB3; precedes above equals sign infix 320 5 5
&#x2AB4; succeeds above equals sign infix 320 5 5
&#x2AB5; precedes above not equal to infix 320 5 5
&#x2AB6; succeeds above not equal to infix 320 5 5
&#x2AB7; precedes above almost equal to infix 320 5 5
&#x2AB8; succeeds above almost equal to infix 320 5 5
&#x2AB9; precedes above not almost equal to infix 320 5 5
&#x2ABA; succeeds above not almost equal to infix 320 5 5
&#x2ABB; double precedes infix 320 5 5
&#x2ABC; double succeeds infix 320 5 5
&#x2ADA; pitchfork with tee top infix 320 5 5
&#x2AEE; does not divide with reversed negation slash infix 320 5 5
&#x2AF2; parallel with horizontal stroke infix 320 5 5
&#x2AF3; parallel with tilde operator infix 320 5 5
&#x2AF4; triple vertical bar binary relation infix 320 5 5
&#x2AF5; triple vertical bar with horizontal stroke infix 320 5 5
&#x2AF7; triple nested less-than infix 320 5 5
&#x2AF8; triple nested greater-than infix 320 5 5
&#x2AF9; double-line slanted less-than or equal to infix 320 5 5
&#x2AFA; double-line slanted greater-than or equal to infix 320 5 5
&#x2BD1; uncertainty sign infix 320 5 5
&#x2190; leftwards arrow infix 340 5 5 stretchy
&#x2191; upwards arrow infix 340 5 5 stretchy
&#x2192; rightwards arrow infix 340 5 5 stretchy
&#x2193; downwards arrow infix 340 5 5 stretchy
&#x2194; left right arrow infix 340 5 5 stretchy
&#x2195; up down arrow infix 340 5 5 stretchy
&#x2196; north west arrow infix 340 5 5
&#x2197; north east arrow infix 340 5 5
&#x2198; south east arrow infix 340 5 5
&#x2199; south west arrow infix 340 5 5
&#x219A; leftwards arrow with stroke infix 340 5 5 stretchy
&#x219B; rightwards arrow with stroke infix 340 5 5 stretchy
&#x219C; leftwards wave arrow infix 340 5 5 stretchy
&#x219D; rightwards wave arrow infix 340 5 5 stretchy
&#x219E; leftwards two headed arrow infix 340 5 5 stretchy
&#x219F; upwards two headed arrow infix 340 5 5 stretchy
&#x21A0; rightwards two headed arrow infix 340 5 5 stretchy
&#x21A1; downwards two headed arrow infix 340 5 5 stretchy
&#x21A2; leftwards arrow with tail infix 340 5 5 stretchy
&#x21A3; rightwards arrow with tail infix 340 5 5 stretchy
&#x21A4; leftwards arrow from bar infix 340 5 5 stretchy
&#x21A5; upwards arrow from bar infix 340 5 5 stretchy
&#x21A6; rightwards arrow from bar infix 340 5 5 stretchy
&#x21A7; downwards arrow from bar infix 340 5 5 stretchy
&#x21A8; up down arrow with base infix 340 5 5 stretchy
&#x21A9; leftwards arrow with hook infix 340 5 5 stretchy
&#x21AA; rightwards arrow with hook infix 340 5 5 stretchy
&#x21AB; leftwards arrow with loop infix 340 5 5 stretchy
&#x21AC; rightwards arrow with loop infix 340 5 5 stretchy
&#x21AD; left right wave arrow infix 340 5 5 stretchy
&#x21AE; left right arrow with stroke infix 340 5 5 stretchy
&#x21AF; downwards zigzag arrow infix 340 5 5
&#x21B0; upwards arrow with tip leftwards infix 340 5 5 stretchy
&#x21B1; upwards arrow with tip rightwards infix 340 5 5 stretchy
&#x21B2; downwards arrow with tip leftwards infix 340 5 5 stretchy
&#x21B3; downwards arrow with tip rightwards infix 340 5 5 stretchy
&#x21B4; rightwards arrow with corner downwards infix 340 5 5 stretchy
&#x21B5; downwards arrow with corner leftwards infix 340 5 5 stretchy
&#x21B6; anticlockwise top semicircle arrow infix 340 5 5
&#x21B7; clockwise top semicircle arrow infix 340 5 5
&#x21B8; north west arrow to long bar infix 340 5 5
&#x21B9; leftwards arrow to bar over rightwards arrow to bar infix 340 5 5 stretchy
&#x21BA; anticlockwise open circle arrow infix 340 5 5
&#x21BB; clockwise open circle arrow infix 340 5 5
&#x21BC; leftwards harpoon with barb upwards infix 340 5 5 stretchy
&#x21BD; leftwards harpoon with barb downwards infix 340 5 5 stretchy
&#x21BE; upwards harpoon with barb rightwards infix 340 5 5 stretchy
&#x21BF; upwards harpoon with barb leftwards infix 340 5 5 stretchy
&#x21C0; rightwards harpoon with barb upwards infix 340 5 5 stretchy
&#x21C1; rightwards harpoon with barb downwards infix 340 5 5 stretchy
&#x21C2; downwards harpoon with barb rightwards infix 340 5 5 stretchy
&#x21C3; downwards harpoon with barb leftwards infix 340 5 5 stretchy
&#x21C4; rightwards arrow over leftwards arrow infix 340 5 5 stretchy
&#x21C5; upwards arrow leftwards of downwards arrow infix 340 5 5 stretchy
&#x21C6; leftwards arrow over rightwards arrow infix 340 5 5 stretchy
&#x21C7; leftwards paired arrows infix 340 5 5 stretchy
&#x21C8; upwards paired arrows infix 340 5 5 stretchy
&#x21C9; rightwards paired arrows infix 340 5 5 stretchy
&#x21CA; downwards paired arrows infix 340 5 5 stretchy
&#x21CB; leftwards harpoon over rightwards harpoon infix 340 5 5 stretchy
&#x21CC; rightwards harpoon over leftwards harpoon infix 340 5 5 stretchy
&#x21CD; leftwards double arrow with stroke infix 340 5 5 stretchy
&#x21CE; left right double arrow with stroke infix 340 5 5 stretchy
&#x21CF; rightwards double arrow with stroke infix 340 5 5 stretchy
&#x21D0; leftwards double arrow infix 340 5 5 stretchy
&#x21D1; upwards double arrow infix 340 5 5 stretchy
&#x21D2; rightwards double arrow infix 340 5 5 stretchy
&#x21D3; downwards double arrow infix 340 5 5 stretchy
&#x21D4; left right double arrow infix 340 5 5 stretchy
&#x21D5; up down double arrow infix 340 5 5 stretchy
&#x21D6; north west double arrow infix 340 5 5
&#x21D7; north east double arrow infix 340 5 5
&#x21D8; south east double arrow infix 340 5 5
&#x21D9; south west double arrow infix 340 5 5
&#x21DA; leftwards triple arrow infix 340 5 5 stretchy
&#x21DB; rightwards triple arrow infix 340 5 5 stretchy
&#x21DC; leftwards squiggle arrow infix 340 5 5 stretchy
&#x21DD; rightwards squiggle arrow infix 340 5 5 stretchy
&#x21DE; upwards arrow with double stroke infix 340 5 5 stretchy
&#x21DF; downwards arrow with double stroke infix 340 5 5 stretchy
&#x21E0; leftwards dashed arrow infix 340 5 5 stretchy
&#x21E1; upwards dashed arrow infix 340 5 5 stretchy
&#x21E2; rightwards dashed arrow infix 340 5 5 stretchy
&#x21E3; downwards dashed arrow infix 340 5 5 stretchy
&#x21E4; leftwards arrow to bar infix 340 5 5 stretchy
&#x21E5; rightwards arrow to bar infix 340 5 5 stretchy
&#x21E6; leftwards white arrow infix 340 5 5 stretchy
&#x21E7; upwards white arrow infix 340 5 5 stretchy
&#x21E8; rightwards white arrow infix 340 5 5 stretchy
&#x21E9; downwards white arrow infix 340 5 5 stretchy
&#x21EA; upwards white arrow from bar infix 340 5 5 stretchy
&#x21EB; upwards white arrow on pedestal infix 340 5 5 stretchy
&#x21EC; upwards white arrow on pedestal with horizontal bar infix 340 5 5 stretchy
&#x21ED; upwards white arrow on pedestal with vertical bar infix 340 5 5 stretchy
&#x21EE; upwards white double arrow infix 340 5 5 stretchy
&#x21EF; upwards white double arrow on pedestal infix 340 5 5 stretchy
&#x21F0; rightwards white arrow from wall infix 340 5 5 stretchy
&#x21F1; north west arrow to corner infix 340 5 5
&#x21F2; south east arrow to corner infix 340 5 5
&#x21F3; up down white arrow infix 340 5 5 stretchy
&#x21F4; right arrow with small circle infix 340 5 5 stretchy
&#x21F5; downwards arrow leftwards of upwards arrow infix 340 5 5 stretchy
&#x21F6; three rightwards arrows infix 340 5 5 stretchy
&#x21F7; leftwards arrow with vertical stroke infix 340 5 5 stretchy
&#x21F8; rightwards arrow with vertical stroke infix 340 5 5 stretchy
&#x21F9; left right arrow with vertical stroke infix 340 5 5 stretchy
&#x21FA; leftwards arrow with double vertical stroke infix 340 5 5 stretchy
&#x21FB; rightwards arrow with double vertical stroke infix 340 5 5 stretchy
&#x21FC; left right arrow with double vertical stroke infix 340 5 5 stretchy
&#x21FD; leftwards open-headed arrow infix 340 5 5 stretchy
&#x21FE; rightwards open-headed arrow infix 340 5 5 stretchy
&#x21FF; left right open-headed arrow infix 340 5 5 stretchy
&#x2301; electric arrow infix 340 5 5
&#x237C; right angle with downwards zigzag arrow infix 340 5 5
&#x238B; broken circle with northwest arrow infix 340 5 5
&#x2794; heavy wide-headed rightwards arrow infix 340 5 5 stretchy
&#x2798; heavy south east arrow infix 340 5 5
&#x2799; heavy rightwards arrow infix 340 5 5 stretchy
&#x279A; heavy north east arrow infix 340 5 5
&#x279B; drafting point rightwards arrow infix 340 5 5 stretchy
&#x279C; heavy round-tipped rightwards arrow infix 340 5 5 stretchy
&#x279D; triangle-headed rightwards arrow infix 340 5 5 stretchy
&#x279E; heavy triangle-headed rightwards arrow infix 340 5 5 stretchy
&#x279F; dashed triangle-headed rightwards arrow infix 340 5 5 stretchy
&#x27A0; heavy dashed triangle-headed rightwards arrow infix 340 5 5 stretchy
&#x27A1; black rightwards arrow infix 340 5 5 stretchy
&#x27A5; heavy black curved downwards and rightwards arrow infix 340 5 5 stretchy
&#x27A6; heavy black curved upwards and rightwards arrow infix 340 5 5 stretchy
&#x27A7; squat black rightwards arrow infix 340 5 5
&#x27A8; heavy concave-pointed black rightwards arrow infix 340 5 5 stretchy
&#x27A9; right-shaded white rightwards arrow infix 340 5 5 stretchy
&#x27AA; left-shaded white rightwards arrow infix 340 5 5 stretchy
&#x27AB; back-tilted shadowed white rightwards arrow infix 340 5 5 stretchy
&#x27AC; front-tilted shadowed white rightwards arrow infix 340 5 5 stretchy
&#x27AD; heavy lower right-shadowed white rightwards arrow infix 340 5 5 stretchy
&#x27AE; heavy upper right-shadowed white rightwards arrow infix 340 5 5 stretchy
&#x27AF; notched lower right-shadowed white rightwards arrow infix 340 5 5 stretchy
&#x27B1; notched upper right-shadowed white rightwards arrow infix 340 5 5 stretchy
&#x27B2; circled heavy white rightwards arrow infix 340 5 5
&#x27B3; white-feathered rightwards arrow infix 340 5 5 stretchy
&#x27B4; black-feathered south east arrow infix 340 5 5
&#x27B5; black-feathered rightwards arrow infix 340 5 5 stretchy
&#x27B6; black-feathered north east arrow infix 340 5 5
&#x27B7; heavy black-feathered south east arrow infix 340 5 5
&#x27B8; heavy black-feathered rightwards arrow infix 340 5 5 stretchy
&#x27B9; heavy black-feathered north east arrow infix 340 5 5
&#x27BA; teardrop-barbed rightwards arrow infix 340 5 5 stretchy
&#x27BB; heavy teardrop-shanked rightwards arrow infix 340 5 5 stretchy
&#x27BC; wedge-tailed rightwards arrow infix 340 5 5 stretchy
&#x27BD; heavy wedge-tailed rightwards arrow infix 340 5 5 stretchy
&#x27BE; open-outlined rightwards arrow infix 340 5 5 stretchy
&#x27F0; upwards quadruple arrow infix 340 5 5 stretchy
&#x27F1; downwards quadruple arrow infix 340 5 5 stretchy
&#x27F2; anticlockwise gapped circle arrow infix 340 5 5
&#x27F3; clockwise gapped circle arrow infix 340 5 5
&#x27F4; right arrow with circled plus infix 340 5 5 stretchy
&#x27F5; long leftwards arrow infix 340 5 5 stretchy
&#x27F6; long rightwards arrow infix 340 5 5 stretchy
&#x27F7; long left right arrow infix 340 5 5 stretchy
&#x27F8; long leftwards double arrow infix 340 5 5 stretchy
&#x27F9; long rightwards double arrow infix 340 5 5 stretchy
&#x27FA; long left right double arrow infix 340 5 5 stretchy
&#x27FB; long leftwards arrow from bar infix 340 5 5 stretchy
&#x27FC; long rightwards arrow from bar infix 340 5 5 stretchy
&#x27FD; long leftwards double arrow from bar infix 340 5 5 stretchy
&#x27FE; long rightwards double arrow from bar infix 340 5 5 stretchy
&#x27FF; long rightwards squiggle arrow infix 340 5 5 stretchy
&#x2900; rightwards two-headed arrow with vertical stroke infix 340 5 5 stretchy
&#x2901; rightwards two-headed arrow with double vertical stroke infix 340 5 5 stretchy
&#x2902; leftwards double arrow with vertical stroke infix 340 5 5 stretchy
&#x2903; rightwards double arrow with vertical stroke infix 340 5 5 stretchy
&#x2904; left right double arrow with vertical stroke infix 340 5 5 stretchy
&#x2905; rightwards two-headed arrow from bar infix 340 5 5 stretchy
&#x2906; leftwards double arrow from bar infix 340 5 5 stretchy
&#x2907; rightwards double arrow from bar infix 340 5 5 stretchy
&#x2908; downwards arrow with horizontal stroke infix 340 5 5 stretchy
&#x2909; upwards arrow with horizontal stroke infix 340 5 5 stretchy
&#x290A; upwards triple arrow infix 340 5 5 stretchy
&#x290B; downwards triple arrow infix 340 5 5 stretchy
&#x290C; leftwards double dash arrow infix 340 5 5 stretchy
&#x290D; rightwards double dash arrow infix 340 5 5 stretchy
&#x290E; leftwards triple dash arrow infix 340 5 5 stretchy
&#x290F; rightwards triple dash arrow infix 340 5 5 stretchy
&#x2910; rightwards two-headed triple dash arrow infix 340 5 5 stretchy
&#x2911; rightwards arrow with dotted stem infix 340 5 5 stretchy
&#x2912; upwards arrow to bar infix 340 5 5 stretchy
&#x2913; downwards arrow to bar infix 340 5 5 stretchy
&#x2914; rightwards arrow with tail with vertical stroke infix 340 5 5 stretchy
&#x2915; rightwards arrow with tail with double vertical stroke infix 340 5 5 stretchy
&#x2916; rightwards two-headed arrow with tail infix 340 5 5 stretchy
&#x2917; rightwards two-headed arrow with tail with vertical stroke infix 340 5 5 stretchy
&#x2918; rightwards two-headed arrow with tail with double vertical stroke infix 340 5 5 stretchy
&#x2919; leftwards arrow-tail infix 340 5 5 stretchy
&#x291A; rightwards arrow-tail infix 340 5 5 stretchy
&#x291B; leftwards double arrow-tail infix 340 5 5 stretchy
&#x291C; rightwards double arrow-tail infix 340 5 5 stretchy
&#x291D; leftwards arrow to black diamond infix 340 5 5 stretchy
&#x291E; rightwards arrow to black diamond infix 340 5 5 stretchy
&#x291F; leftwards arrow from bar to black diamond infix 340 5 5 stretchy
&#x2920; rightwards arrow from bar to black diamond infix 340 5 5 stretchy
&#x2921; north west and south east arrow infix 340 5 5
&#x2922; north east and south west arrow infix 340 5 5
&#x2923; north west arrow with hook infix 340 5 5
&#x2924; north east arrow with hook infix 340 5 5
&#x2925; south east arrow with hook infix 340 5 5
&#x2926; south west arrow with hook infix 340 5 5
&#x2927; north west arrow and north east arrow infix 340 5 5
&#x2928; north east arrow and south east arrow infix 340 5 5
&#x2929; south east arrow and south west arrow infix 340 5 5
&#x292A; south west arrow and north west arrow infix 340 5 5
&#x292B; rising diagonal crossing falling diagonal infix 340 5 5
&#x292C; falling diagonal crossing rising diagonal infix 340 5 5
&#x292D; south east arrow crossing north east arrow infix 340 5 5
&#x292E; north east arrow crossing south east arrow infix 340 5 5
&#x292F; falling diagonal crossing north east arrow infix 340 5 5
&#x2930; rising diagonal crossing south east arrow infix 340 5 5
&#x2931; north east arrow crossing north west arrow infix 340 5 5
&#x2932; north west arrow crossing north east arrow infix 340 5 5
&#x2933; wave arrow pointing directly right infix 340 5 5
&#x2934; arrow pointing rightwards then curving upwards infix 340 5 5 stretchy
&#x2935; arrow pointing rightwards then curving downwards infix 340 5 5 stretchy
&#x2936; arrow pointing downwards then curving leftwards infix 340 5 5 stretchy
&#x2937; arrow pointing downwards then curving rightwards infix 340 5 5 stretchy
&#x2938; right-side arc clockwise arrow infix 340 5 5
&#x2939; left-side arc anticlockwise arrow infix 340 5 5
&#x293A; top arc anticlockwise arrow infix 340 5 5
&#x293B; bottom arc anticlockwise arrow infix 340 5 5
&#x293C; top arc clockwise arrow with minus infix 340 5 5
&#x293D; top arc anticlockwise arrow with plus infix 340 5 5
&#x293E; lower right semicircular clockwise arrow infix 340 5 5
&#x293F; ⤿ lower left semicircular anticlockwise arrow infix 340 5 5
&#x2940; anticlockwise closed circle arrow infix 340 5 5
&#x2941; clockwise closed circle arrow infix 340 5 5
&#x2942; rightwards arrow above short leftwards arrow infix 340 5 5 stretchy
&#x2943; leftwards arrow above short rightwards arrow infix 340 5 5 stretchy
&#x2944; short rightwards arrow above leftwards arrow infix 340 5 5 stretchy
&#x2945; rightwards arrow with plus below infix 340 5 5 stretchy
&#x2946; leftwards arrow with plus below infix 340 5 5 stretchy
&#x2947; rightwards arrow through x infix 340 5 5 stretchy
&#x2948; left right arrow through small circle infix 340 5 5 stretchy
&#x2949; upwards two-headed arrow from small circle infix 340 5 5 stretchy
&#x294A; left barb up right barb down harpoon infix 340 5 5 stretchy
&#x294B; left barb down right barb up harpoon infix 340 5 5 stretchy
&#x294C; up barb right down barb left harpoon infix 340 5 5 stretchy
&#x294D; up barb left down barb right harpoon infix 340 5 5 stretchy
&#x294E; left barb up right barb up harpoon infix 340 5 5 stretchy
&#x294F; up barb right down barb right harpoon infix 340 5 5 stretchy
&#x2950; left barb down right barb down harpoon infix 340 5 5 stretchy
&#x2951; up barb left down barb left harpoon infix 340 5 5 stretchy
&#x2952; leftwards harpoon with barb up to bar infix 340 5 5 stretchy
&#x2953; rightwards harpoon with barb up to bar infix 340 5 5 stretchy
&#x2954; upwards harpoon with barb right to bar infix 340 5 5 stretchy
&#x2955; downwards harpoon with barb right to bar infix 340 5 5 stretchy
&#x2956; leftwards harpoon with barb down to bar infix 340 5 5 stretchy
&#x2957; rightwards harpoon with barb down to bar infix 340 5 5 stretchy
&#x2958; upwards harpoon with barb left to bar infix 340 5 5 stretchy
&#x2959; downwards harpoon with barb left to bar infix 340 5 5 stretchy
&#x295A; leftwards harpoon with barb up from bar infix 340 5 5 stretchy
&#x295B; rightwards harpoon with barb up from bar infix 340 5 5 stretchy
&#x295C; upwards harpoon with barb right from bar infix 340 5 5 stretchy
&#x295D; downwards harpoon with barb right from bar infix 340 5 5 stretchy
&#x295E; leftwards harpoon with barb down from bar infix 340 5 5 stretchy
&#x295F; rightwards harpoon with barb down from bar infix 340 5 5 stretchy
&#x2960; upwards harpoon with barb left from bar infix 340 5 5 stretchy
&#x2961; downwards harpoon with barb left from bar infix 340 5 5 stretchy
&#x2962; leftwards harpoon with barb up above leftwards harpoon with barb down infix 340 5 5 stretchy
&#x2963; upwards harpoon with barb left beside upwards harpoon with barb right infix 340 5 5 stretchy
&#x2964; rightwards harpoon with barb up above rightwards harpoon with barb down infix 340 5 5 stretchy
&#x2965; downwards harpoon with barb left beside downwards harpoon with barb right infix 340 5 5 stretchy
&#x2966; leftwards harpoon with barb up above rightwards harpoon with barb up infix 340 5 5 stretchy
&#x2967; leftwards harpoon with barb down above rightwards harpoon with barb down infix 340 5 5 stretchy
&#x2968; rightwards harpoon with barb up above leftwards harpoon with barb up infix 340 5 5 stretchy
&#x2969; rightwards harpoon with barb down above leftwards harpoon with barb down infix 340 5 5 stretchy
&#x296A; leftwards harpoon with barb up above long dash infix 340 5 5 stretchy
&#x296B; leftwards harpoon with barb down below long dash infix 340 5 5 stretchy
&#x296C; rightwards harpoon with barb up above long dash infix 340 5 5 stretchy
&#x296D; rightwards harpoon with barb down below long dash infix 340 5 5 stretchy
&#x296E; upwards harpoon with barb left beside downwards harpoon with barb right infix 340 5 5 stretchy
&#x296F; downwards harpoon with barb left beside upwards harpoon with barb right infix 340 5 5 stretchy
&#x2970; right double arrow with rounded head infix 340 5 5 stretchy
&#x2971; equals sign above rightwards arrow infix 340 5 5 stretchy
&#x2972; tilde operator above rightwards arrow infix 340 5 5 stretchy
&#x2973; leftwards arrow above tilde operator infix 340 5 5 stretchy
&#x2974; rightwards arrow above tilde operator infix 340 5 5 stretchy
&#x2975; rightwards arrow above almost equal to infix 340 5 5 stretchy
&#x297C; left fish tail infix 340 5 5 stretchy
&#x297D; right fish tail infix 340 5 5 stretchy
&#x297E; up fish tail infix 340 5 5 stretchy
&#x297F; ⥿ down fish tail infix 340 5 5 stretchy
&#x29DF; double-ended multimap infix 340 5 5
&#x2B00; north east white arrow infix 340 5 5
&#x2B01; north west white arrow infix 340 5 5
&#x2B02; south east white arrow infix 340 5 5
&#x2B03; south west white arrow infix 340 5 5
&#x2B04; left right white arrow infix 340 5 5 stretchy
&#x2B05; leftwards black arrow infix 340 5 5 stretchy
&#x2B06; upwards black arrow infix 340 5 5 stretchy
&#x2B07; downwards black arrow infix 340 5 5 stretchy
&#x2B08; north east black arrow infix 340 5 5
&#x2B09; north west black arrow infix 340 5 5
&#x2B0A; south east black arrow infix 340 5 5
&#x2B0B; south west black arrow infix 340 5 5
&#x2B0C; left right black arrow infix 340 5 5 stretchy
&#x2B0D; up down black arrow infix 340 5 5 stretchy
&#x2B0E; rightwards arrow with tip downwards infix 340 5 5 stretchy
&#x2B0F; rightwards arrow with tip upwards infix 340 5 5 stretchy
&#x2B10; leftwards arrow with tip downwards infix 340 5 5 stretchy
&#x2B11; leftwards arrow with tip upwards infix 340 5 5 stretchy
&#x2B30; left arrow with small circle infix 340 5 5 stretchy
&#x2B31; three leftwards arrows infix 340 5 5 stretchy
&#x2B32; left arrow with circled plus infix 340 5 5 stretchy
&#x2B33; long leftwards squiggle arrow infix 340 5 5 stretchy
&#x2B34; leftwards two-headed arrow with vertical stroke infix 340 5 5 stretchy
&#x2B35; leftwards two-headed arrow with double vertical stroke infix 340 5 5 stretchy
&#x2B36; leftwards two-headed arrow from bar infix 340 5 5 stretchy
&#x2B37; leftwards two-headed triple dash arrow infix 340 5 5 stretchy
&#x2B38; leftwards arrow with dotted stem infix 340 5 5 stretchy
&#x2B39; leftwards arrow with tail with vertical stroke infix 340 5 5 stretchy
&#x2B3A; leftwards arrow with tail with double vertical stroke infix 340 5 5 stretchy
&#x2B3B; leftwards two-headed arrow with tail infix 340 5 5 stretchy
&#x2B3C; leftwards two-headed arrow with tail with vertical stroke infix 340 5 5 stretchy
&#x2B3D; leftwards two-headed arrow with tail with double vertical stroke infix 340 5 5 stretchy
&#x2B3E; leftwards arrow through x infix 340 5 5 stretchy
&#x2B3F; ⬿ wave arrow pointing directly left infix 340 5 5
&#x2B40; equals sign above leftwards arrow infix 340 5 5 stretchy
&#x2B41; reverse tilde operator above leftwards arrow infix 340 5 5 stretchy
&#x2B42; leftwards arrow above reverse almost equal to infix 340 5 5 stretchy
&#x2B43; rightwards arrow through greater-than infix 340 5 5 stretchy
&#x2B44; rightwards arrow through superset infix 340 5 5 stretchy
&#x2B45; leftwards quadruple arrow infix 340 5 5 stretchy
&#x2B46; rightwards quadruple arrow infix 340 5 5 stretchy
&#x2B47; reverse tilde operator above rightwards arrow infix 340 5 5 stretchy
&#x2B48; rightwards arrow above reverse almost equal to infix 340 5 5 stretchy
&#x2B49; tilde operator above leftwards arrow infix 340 5 5 stretchy
&#x2B4A; leftwards arrow above almost equal to infix 340 5 5 stretchy
&#x2B4B; leftwards arrow above reverse tilde operator infix 340 5 5 stretchy
&#x2B4C; rightwards arrow above reverse tilde operator infix 340 5 5 stretchy
&#x2B4D; downwards triangle-headed zigzag arrow infix 340 5 5
&#x2B4E; short slanted north arrow infix 340 5 5
&#x2B4F; short backslanted south arrow infix 340 5 5
&#x2B5A; slanted north arrow with hooked head infix 340 5 5
&#x2B5B; backslanted south arrow with hooked tail infix 340 5 5
&#x2B5C; slanted north arrow with horizontal tail infix 340 5 5
&#x2B5D; backslanted south arrow with horizontal tail infix 340 5 5
&#x2B5E; bent arrow pointing downwards then north east infix 340 5 5
&#x2B5F; short bent arrow pointing downwards then north east infix 340 5 5
&#x2B60; leftwards triangle-headed arrow infix 340 5 5 stretchy
&#x2B61; upwards triangle-headed arrow infix 340 5 5 stretchy
&#x2B62; rightwards triangle-headed arrow infix 340 5 5 stretchy
&#x2B63; downwards triangle-headed arrow infix 340 5 5 stretchy
&#x2B64; left right triangle-headed arrow infix 340 5 5 stretchy
&#x2B65; up down triangle-headed arrow infix 340 5 5 stretchy
&#x2B66; north west triangle-headed arrow infix 340 5 5
&#x2B67; north east triangle-headed arrow infix 340 5 5
&#x2B68; south east triangle-headed arrow infix 340 5 5
&#x2B69; south west triangle-headed arrow infix 340 5 5
&#x2B6A; leftwards triangle-headed dashed arrow infix 340 5 5 stretchy
&#x2B6B; upwards triangle-headed dashed arrow infix 340 5 5 stretchy
&#x2B6C; rightwards triangle-headed dashed arrow infix 340 5 5 stretchy
&#x2B6D; downwards triangle-headed dashed arrow infix 340 5 5 stretchy
&#x2B6E; clockwise triangle-headed open circle arrow infix 340 5 5
&#x2B6F; anticlockwise triangle-headed open circle arrow infix 340 5 5
&#x2B70; leftwards triangle-headed arrow to bar infix 340 5 5 stretchy
&#x2B71; upwards triangle-headed arrow to bar infix 340 5 5 stretchy
&#x2B72; rightwards triangle-headed arrow to bar infix 340 5 5 stretchy
&#x2B73; downwards triangle-headed arrow to bar infix 340 5 5 stretchy
&#x2B76; north west triangle-headed arrow to bar infix 340 5 5
&#x2B77; north east triangle-headed arrow to bar infix 340 5 5
&#x2B78; south east triangle-headed arrow to bar infix 340 5 5
&#x2B79; south west triangle-headed arrow to bar infix 340 5 5
&#x2B7A; leftwards triangle-headed arrow with double horizontal stroke infix 340 5 5 stretchy
&#x2B7B; upwards triangle-headed arrow with double horizontal stroke infix 340 5 5 stretchy
&#x2B7C; rightwards triangle-headed arrow with double horizontal stroke infix 340 5 5 stretchy
&#x2B7D; downwards triangle-headed arrow with double horizontal stroke infix 340 5 5 stretchy
&#x2B80; leftwards triangle-headed arrow over rightwards triangle-headed arrow infix 340 5 5 stretchy
&#x2B81; upwards triangle-headed arrow leftwards of downwards triangle-headed arrow infix 340 5 5 stretchy
&#x2B82; rightwards triangle-headed arrow over leftwards triangle-headed arrow infix 340 5 5 stretchy
&#x2B83; downwards triangle-headed arrow leftwards of upwards triangle-headed arrow infix 340 5 5 stretchy
&#x2B84; leftwards triangle-headed paired arrows infix 340 5 5 stretchy
&#x2B85; upwards triangle-headed paired arrows infix 340 5 5 stretchy
&#x2B86; rightwards triangle-headed paired arrows infix 340 5 5 stretchy
&#x2B87; downwards triangle-headed paired arrows infix 340 5 5 stretchy
&#x2B88; leftwards black circled white arrow infix 340 5 5
&#x2B89; upwards black circled white arrow infix 340 5 5
&#x2B8A; rightwards black circled white arrow infix 340 5 5
&#x2B8B; downwards black circled white arrow infix 340 5 5
&#x2B8C; anticlockwise triangle-headed right u-shaped arrow infix 340 5 5
&#x2B8D; anticlockwise triangle-headed bottom u-shaped arrow infix 340 5 5
&#x2B8E; anticlockwise triangle-headed left u-shaped arrow infix 340 5 5
&#x2B8F; anticlockwise triangle-headed top u-shaped arrow infix 340 5 5
&#x2B94; four corner arrows circling anticlockwise infix 340 5 5
&#x2B95; rightwards black arrow infix 340 5 5 stretchy
&#x2BA0; downwards triangle-headed arrow with long tip leftwards infix 340 5 5 stretchy
&#x2BA1; downwards triangle-headed arrow with long tip rightwards infix 340 5 5 stretchy
&#x2BA2; upwards triangle-headed arrow with long tip leftwards infix 340 5 5 stretchy
&#x2BA3; upwards triangle-headed arrow with long tip rightwards infix 340 5 5 stretchy
&#x2BA4; leftwards triangle-headed arrow with long tip upwards infix 340 5 5 stretchy
&#x2BA5; rightwards triangle-headed arrow with long tip upwards infix 340 5 5 stretchy
&#x2BA6; leftwards triangle-headed arrow with long tip downwards infix 340 5 5 stretchy
&#x2BA7; rightwards triangle-headed arrow with long tip downwards infix 340 5 5 stretchy
&#x2BA8; black curved downwards and leftwards arrow infix 340 5 5 stretchy
&#x2BA9; black curved downwards and rightwards arrow infix 340 5 5 stretchy
&#x2BAA; black curved upwards and leftwards arrow infix 340 5 5 stretchy
&#x2BAB; black curved upwards and rightwards arrow infix 340 5 5 stretchy
&#x2BAC; black curved leftwards and upwards arrow infix 340 5 5 stretchy
&#x2BAD; black curved rightwards and upwards arrow infix 340 5 5 stretchy
&#x2BAE; black curved leftwards and downwards arrow infix 340 5 5 stretchy
&#x2BAF; black curved rightwards and downwards arrow infix 340 5 5 stretchy
&#x2BB0; ribbon arrow down left infix 340 5 5
&#x2BB1; ribbon arrow down right infix 340 5 5
&#x2BB2; ribbon arrow up left infix 340 5 5
&#x2BB3; ribbon arrow up right infix 340 5 5
&#x2BB4; ribbon arrow left up infix 340 5 5
&#x2BB5; ribbon arrow right up infix 340 5 5
&#x2BB6; ribbon arrow left down infix 340 5 5
&#x2BB7; ribbon arrow right down infix 340 5 5
&#x2BB8; upwards white arrow from bar with horizontal bar infix 340 5 5 stretchy
&#x222A; union infix 360 4 4
&#x228C; multiset infix 360 4 4
&#x228D; multiset multiplication infix 360 4 4
&#x228E; multiset union infix 360 4 4
&#x2294; square cup infix 360 4 4
&#x22D3; double union infix 360 4 4
&#x2A41; union with minus sign infix 360 4 4
&#x2A42; union with overbar infix 360 4 4
&#x2A45; union with logical or infix 360 4 4
&#x2A4A; union beside and joined with union infix 360 4 4
&#x2A4C; closed union with serifs infix 360 4 4
&#x2A4F; double square union infix 360 4 4
&#x2229; intersection infix 380 4 4
&#x2293; square cap infix 380 4 4
&#x22D2; double intersection infix 380 4 4
&#x2A1F; z notation schema composition infix 380 4 4
&#x2A20; z notation schema piping infix 380 4 4
&#x2A21; z notation schema projection infix 380 4 4
&#x2A3E; z notation relational composition infix 380 4 4
&#x2A40; intersection with dot infix 380 4 4
&#x2A43; intersection with overbar infix 380 4 4
&#x2A44; intersection with logical and infix 380 4 4
&#x2A46; union above intersection infix 380 4 4
&#x2A47; intersection above union infix 380 4 4
&#x2A48; union above bar above intersection infix 380 4 4
&#x2A49; intersection above bar above union infix 380 4 4
&#x2A4B; intersection beside and joined with intersection infix 380 4 4
&#x2A4D; closed intersection with serifs infix 380 4 4
&#x2A4E; double square intersection infix 380 4 4
&#x2ADB; transversal intersection infix 380 4 4
+ + plus sign infix 400 4 4
- - hyphen-minus infix 400 4 4
&#xB1; ± plus-minus sign infix 400 4 4
&#x2212; minus sign infix 400 4 4
&#x2213; minus-or-plus sign infix 400 4 4
&#x2214; dot plus infix 400 4 4
&#x2216; set minus infix 400 4 4
&#x2228; logical or infix 400 4 4
&#x2238; dot minus infix 400 4 4
&#x2295; circled plus infix 400 4 4
&#x2296; circled minus infix 400 4 4
&#x229D; circled dash infix 400 4 4
&#x229E; squared plus infix 400 4 4
&#x229F; squared minus infix 400 4 4
&#x22BD; nor infix 400 4 4
&#x22CE; curly logical or infix 400 4 4
&#x2795; heavy plus sign infix 400 4 4
&#x2796; heavy minus sign infix 400 4 4
&#x29B8; circled reverse solidus infix 400 4 4
&#x29C5; squared falling diagonal slash infix 400 4 4
&#x29F5; reverse solidus operator infix 400 4 4
&#x29F7; reverse solidus with horizontal stroke infix 400 4 4
&#x29F9; big reverse solidus infix 400 4 4
&#x29FA; double plus infix 400 4 4
&#x29FB; triple plus infix 400 4 4
&#x2A22; plus sign with small circle above infix 400 4 4
&#x2A23; plus sign with circumflex accent above infix 400 4 4
&#x2A24; plus sign with tilde above infix 400 4 4
&#x2A25; plus sign with dot below infix 400 4 4
&#x2A26; plus sign with tilde below infix 400 4 4
&#x2A27; plus sign with subscript two infix 400 4 4
&#x2A28; plus sign with black triangle infix 400 4 4
&#x2A29; minus sign with comma above infix 400 4 4
&#x2A2A; minus sign with dot below infix 400 4 4
&#x2A2B; minus sign with falling dots infix 400 4 4
&#x2A2C; minus sign with rising dots infix 400 4 4
&#x2A2D; plus sign in left half circle infix 400 4 4
&#x2A2E; plus sign in right half circle infix 400 4 4
&#x2A39; plus sign in triangle infix 400 4 4
&#x2A3A; minus sign in triangle infix 400 4 4
&#x2A52; logical or with dot above infix 400 4 4
&#x2A54; double logical or infix 400 4 4
&#x2A56; two intersecting logical or infix 400 4 4
&#x2A57; sloping large or infix 400 4 4
&#x2A5B; logical or with middle stem infix 400 4 4
&#x2A5D; logical or with horizontal dash infix 400 4 4
&#x2A61; small vee with underbar infix 400 4 4
&#x2A62; logical or with double overbar infix 400 4 4
&#x2A63; logical or with double underbar infix 400 4 4
&#x22BB; xor infix 420 4 4
&#x2211; n-ary summation prefix 440 3 3 largeop, movablelimits, symmetric
&#x2A0A; modulo two sum prefix 440 3 3 largeop, movablelimits, symmetric
&#x2A0B; summation with integral prefix 440 3 3 largeop, symmetric
&#x2A1D; join prefix 440 3 3 largeop, movablelimits, symmetric
&#x2A1E; large left triangle operator prefix 440 3 3 largeop, movablelimits, symmetric
&#x2A01; n-ary circled plus operator prefix 460 3 3 largeop, movablelimits, symmetric
&#x222B; integral prefix 480 3 3 largeop, symmetric
&#x222C; double integral prefix 480 3 3 largeop, symmetric
&#x222D; triple integral prefix 480 3 3 largeop, symmetric
&#x222E; contour integral prefix 480 3 3 largeop, symmetric
&#x222F; surface integral prefix 480 3 3 largeop, symmetric
&#x2230; volume integral prefix 480 3 3 largeop, symmetric
&#x2231; clockwise integral prefix 480 3 3 largeop, symmetric
&#x2232; clockwise contour integral prefix 480 3 3 largeop, symmetric
&#x2233; anticlockwise contour integral prefix 480 3 3 largeop, symmetric
&#x2A0C; quadruple integral operator prefix 480 3 3 largeop, symmetric
&#x2A0D; finite part integral prefix 480 3 3 largeop, symmetric
&#x2A0E; integral with double stroke prefix 480 3 3 largeop, symmetric
&#x2A0F; integral average with slash prefix 480 3 3 largeop, symmetric
&#x2A10; circulation function prefix 480 3 3 largeop, symmetric
&#x2A11; anticlockwise integration prefix 480 3 3 largeop, symmetric
&#x2A12; line integration with rectangular path around pole prefix 480 3 3 largeop, symmetric
&#x2A13; line integration with semicircular path around pole prefix 480 3 3 largeop, symmetric
&#x2A14; line integration not including the pole prefix 480 3 3 largeop, symmetric
&#x2A15; integral around a point operator prefix 480 3 3 largeop, symmetric
&#x2A16; quaternion integral operator prefix 480 3 3 largeop, symmetric
&#x2A17; integral with leftwards arrow with hook prefix 480 3 3 largeop, symmetric
&#x2A18; integral with times sign prefix 480 3 3 largeop, symmetric
&#x2A19; integral with intersection prefix 480 3 3 largeop, symmetric
&#x2A1A; integral with union prefix 480 3 3 largeop, symmetric
&#x2A1B; integral with overbar prefix 480 3 3 largeop, symmetric
&#x2A1C; integral with underbar prefix 480 3 3 largeop, symmetric
&#x22C3; n-ary union prefix 500 3 3 largeop, movablelimits, symmetric
&#x2A03; n-ary union operator with dot prefix 500 3 3 largeop, movablelimits, symmetric
&#x2A04; n-ary union operator with plus prefix 500 3 3 largeop, movablelimits, symmetric
&#x22C0; n-ary logical and prefix 520 3 3 largeop, movablelimits, symmetric
&#x22C1; n-ary logical or prefix 520 3 3 largeop, movablelimits, symmetric
&#x22C2; n-ary intersection prefix 520 3 3 largeop, movablelimits, symmetric
&#x2A00; n-ary circled dot operator prefix 520 3 3 largeop, movablelimits, symmetric
&#x2A02; n-ary circled times operator prefix 520 3 3 largeop, movablelimits, symmetric
&#x2A05; n-ary square intersection operator prefix 520 3 3 largeop, movablelimits, symmetric
&#x2A06; n-ary square union operator prefix 520 3 3 largeop, movablelimits, symmetric
&#x2A07; two logical and operator prefix 520 3 3 largeop, movablelimits, symmetric
&#x2A08; two logical or operator prefix 520 3 3 largeop, movablelimits, symmetric
&#x2A09; n-ary times operator prefix 520 3 3 largeop, movablelimits, symmetric
&#x2AFC; large triple vertical bar operator prefix 520 3 3 largeop, movablelimits, symmetric
&#x2AFF; ⫿ n-ary white vertical bar prefix 520 3 3 largeop, movablelimits, symmetric
&#x220F; n-ary product prefix 540 3 3 largeop, movablelimits, symmetric
&#x2210; n-ary coproduct prefix 540 3 3 largeop, movablelimits, symmetric
@ @ commercial at infix 560 3 3
&#x221F; right angle prefix 580 0 0
&#x2220; angle prefix 580 0 0
&#x2221; measured angle prefix 580 0 0
&#x2222; spherical angle prefix 580 0 0
&#x22BE; right angle with arc prefix 580 0 0
&#x22BF; right triangle prefix 580 0 0
&#x27C0; three dimensional angle prefix 580 0 0
&#x299B; measured angle opening left prefix 580 0 0
&#x299C; right angle variant with square prefix 580 0 0
&#x299D; measured right angle with dot prefix 580 0 0
&#x299E; angle with s inside prefix 580 0 0
&#x299F; acute angle prefix 580 0 0
&#x29A0; spherical angle opening left prefix 580 0 0
&#x29A1; spherical angle opening up prefix 580 0 0
&#x29A2; turned angle prefix 580 0 0
&#x29A3; reversed angle prefix 580 0 0
&#x29A4; angle with underbar prefix 580 0 0
&#x29A5; reversed angle with underbar prefix 580 0 0
&#x29A6; oblique angle opening up prefix 580 0 0
&#x29A7; oblique angle opening down prefix 580 0 0
&#x29A8; measured angle with open arm ending in arrow pointing up and right prefix 580 0 0
&#x29A9; measured angle with open arm ending in arrow pointing up and left prefix 580 0 0
&#x29AA; measured angle with open arm ending in arrow pointing down and right prefix 580 0 0
&#x29AB; measured angle with open arm ending in arrow pointing down and left prefix 580 0 0
&#x29AC; measured angle with open arm ending in arrow pointing right and up prefix 580 0 0
&#x29AD; measured angle with open arm ending in arrow pointing left and up prefix 580 0 0
&#x29AE; measured angle with open arm ending in arrow pointing right and down prefix 580 0 0
&#x29AF; measured angle with open arm ending in arrow pointing left and down prefix 580 0 0
&amp;&amp; && multiple character operator: && infix 600 4 4
&#x2227; logical and infix 600 4 4
&#x22BC; nand infix 600 4 4
&#x22CF; curly logical and infix 600 4 4
&#x2A51; logical and with dot above infix 600 4 4
&#x2A53; double logical and infix 600 4 4
&#x2A55; two intersecting logical and infix 600 4 4
&#x2A58; sloping large and infix 600 4 4
&#x2A59; logical or overlapping logical and infix 600 4 4
&#x2A5A; logical and with middle stem infix 600 4 4
&#x2A5C; logical and with horizontal dash infix 600 4 4
&#x2A5E; logical and with double overbar infix 600 4 4
&#x2A5F; logical and with underbar infix 600 4 4
&#x2A60; logical and with double underbar infix 600 4 4
* * asterisk infix 620 3 3
. . full stop infix 620 3 3
&#xB7; · middle dot infix 620 3 3
&#xD7; × multiplication sign infix 620 3 3
&#x2022; bullet infix 620 3 3
&#x2043; hyphen bullet infix 620 3 3
&#x2062; invisible times infix 620 0 0
&#x2217; asterisk operator infix 620 3 3
&#x2219; bullet operator infix 620 3 3
&#x2240; wreath product infix 620 3 3
&#x2297; circled times infix 620 3 3
&#x2299; circled dot operator infix 620 3 3
&#x229B; circled asterisk operator infix 620 3 3
&#x22A0; squared times infix 620 3 3
&#x22A1; squared dot operator infix 620 3 3
&#x22BA; intercalate infix 620 3 3
&#x22C5; dot operator infix 620 3 3
&#x22C6; star operator infix 620 3 3
&#x22C7; division times infix 620 3 3
&#x22C9; left normal factor semidirect product infix 620 3 3
&#x22CA; right normal factor semidirect product infix 620 3 3
&#x22CB; left semidirect product infix 620 3 3
&#x22CC; right semidirect product infix 620 3 3
&#x2305; projective infix 620 3 3
&#x2306; perspective infix 620 3 3
&#x29C6; squared asterisk infix 620 3 3
&#x29C8; squared square infix 620 3 3
&#x29D4; times with left half black infix 620 3 3
&#x29D5; times with right half black infix 620 3 3
&#x29D6; white hourglass infix 620 3 3
&#x29D7; black hourglass infix 620 3 3
&#x29E2; shuffle product infix 620 3 3
&#x2A1D; join infix 620 3 3
&#x2A1E; large left triangle operator infix 620 3 3
&#x2A2F; vector or cross product infix 620 3 3
&#x2A30; multiplication sign with dot above infix 620 3 3
&#x2A31; multiplication sign with underbar infix 620 3 3
&#x2A32; semidirect product with bottom closed infix 620 3 3
&#x2A33; smash product infix 620 3 3
&#x2A34; multiplication sign in left half circle infix 620 3 3
&#x2A35; multiplication sign in right half circle infix 620 3 3
&#x2A36; circled multiplication sign with circumflex accent infix 620 3 3
&#x2A37; multiplication sign in double circle infix 620 3 3
&#x2A3B; multiplication sign in triangle infix 620 3 3
&#x2A3C; interior product infix 620 3 3
&#x2A3D; righthand interior product infix 620 3 3
&#x2A3F; ⨿ amalgamation or coproduct infix 620 3 3
&#x2A50; closed union with serifs and smash product infix 620 3 3
% % percent sign infix 640 3 3
\ \ reverse solidus infix 660 0 0
/ / solidus infix 680 4 4
&#xF7; ÷ division sign infix 680 4 4
&#x2044; fraction slash infix 680 4 4
&#x2215; division slash infix 680 4 4
&#x2236; ratio infix 680 4 4
&#x2298; circled division slash infix 680 4 4
&#x2797; heavy division sign infix 680 4 4
&#x27CB; mathematical rising diagonal infix 680 3 3
&#x27CD; mathematical falling diagonal infix 680 3 3
&#x29BC; circled anticlockwise-rotated division sign infix 680 4 4
&#x29C4; squared rising diagonal slash infix 680 4 4
&#x29F6; solidus with overbar infix 680 4 4
&#x29F8; big solidus infix 680 4 4
&#x2A38; circled division sign infix 680 4 4
&#x2AF6; triple colon operator infix 680 4 4
&#x2AFB; triple solidus binary relation infix 680 4 4
&#x2AFD; double solidus operator infix 680 4 4
&#x2AFE; white vertical bar infix 680 3 3
&#x2A64; z notation domain antirestriction infix 700 3 3
&#x2A65; z notation range antirestriction infix 700 3 3
+ + plus sign prefix 720 0 0
- - hyphen-minus prefix 720 0 0
&#xB1; ± plus-minus sign prefix 720 0 0
&#x2201; complement prefix 720 0 0
&#x2206; increment infix 720 0 0
&#x2212; minus sign prefix 720 0 0
&#x2213; minus-or-plus sign prefix 720 0 0
&#x2795; heavy plus sign prefix 720 0 0
&#x2796; heavy minus sign prefix 720 0 0
&#x2ADC; ⫝̸ forking infix 740 3 3
&#x2ADD; nonforking infix 740 3 3
** ** multiple character operator: ** infix 760 3 3
&#x2145; double-struck italic capital d prefix 780 3 0
&#x2146; double-struck italic small d prefix 780 3 0
&#x2202; partial differential prefix 780 3 0
&#x2207; nabla prefix 780 0 0
&lt;> <> multiple character operator: <> infix 800 3 3
^ ^ circumflex accent infix 800 3 3
! ! exclamation mark postfix 820 0 0
!! !! multiple character operator: !! postfix 820 0 0
% % percent sign postfix 820 0 0
&#x2032; prime postfix 820 0 0
? ? question mark infix 840 3 3
&#x221A; square root prefix 860 3 0
&#x221B; cube root prefix 860 3 0
&#x221C; fourth root prefix 860 3 0
&#x2061; function application infix 880 0 0
&#x2218; ring operator infix 900 3 3
&#x229A; circled ring operator infix 900 3 3
&#x22C4; diamond operator infix 900 3 3
&#x29C7; squared small circle infix 900 3 3
" " quotation mark postfix 920 0 0
&amp; & ampersand postfix 920 0 0
' ' apostrophe postfix 920 0 0
++ ++ multiple character operator: ++ postfix 920 0 0
-- -- multiple character operator: -- postfix 920 0 0
^ ^ circumflex accent postfix 920 0 0 stretchy
_ _ low line postfix 920 0 0 stretchy
` ` grave accent postfix 920 0 0
~ ~ tilde postfix 920 0 0 stretchy
&#xA8; ¨ diaeresis postfix 920 0 0
&#xAF; ¯ macron postfix 920 0 0 stretchy
&#xB0; ° degree sign postfix 920 0 0
&#xB2; ² superscript two postfix 920 0 0
&#xB3; ³ superscript three postfix 920 0 0
&#xB4; ´ acute accent postfix 920 0 0
&#xB8; ¸ cedilla postfix 920 0 0
&#xB9; ¹ superscript one postfix 920 0 0
&#x2C6; ˆ modifier letter circumflex accent postfix 920 0 0 stretchy
&#x2C7; ˇ caron postfix 920 0 0 stretchy
&#x2C9; ˉ modifier letter macron postfix 920 0 0 stretchy
&#x2CA; ˊ modifier letter acute accent postfix 920 0 0
&#x2CB; ˋ modifier letter grave accent postfix 920 0 0
&#x2CD; ˍ modifier letter low macron postfix 920 0 0 stretchy
&#x2D8; ˘ breve postfix 920 0 0
&#x2D9; ˙ dot above postfix 920 0 0
&#x2DA; ˚ ring above postfix 920 0 0
&#x2DC; ˜ small tilde postfix 920 0 0 stretchy
&#x2DD; ˝ double acute accent postfix 920 0 0
&#x2F7; ˷ modifier letter low tilde postfix 920 0 0 stretchy
&#x302; ̂ combining circumflex accent postfix 920 0 0 stretchy
&#x311; ̑ combining inverted breve postfix 920 0 0
&#x201A; single low-9 quotation mark postfix 920 0 0
&#x201B; single high-reversed-9 quotation mark postfix 920 0 0
&#x201E; double low-9 quotation mark postfix 920 0 0
&#x201F; double high-reversed-9 quotation mark postfix 920 0 0
&#x2033; double prime postfix 920 0 0
&#x2034; triple prime postfix 920 0 0
&#x2035; reversed prime postfix 920 0 0
&#x2036; reversed double prime postfix 920 0 0
&#x2037; reversed triple prime postfix 920 0 0
&#x203E; overline postfix 920 0 0 stretchy
&#x2057; quadruple prime postfix 920 0 0
&#x2064; invisible plus infix 920 0 0
&#x20DB; combining three dots above postfix 920 0 0
&#x20DC; combining four dots above postfix 920 0 0
&#x2322; frown postfix 920 0 0 stretchy
&#x2323; smile postfix 920 0 0 stretchy
&#x23B4; top square bracket postfix 920 0 0 stretchy
&#x23B5; bottom square bracket postfix 920 0 0 stretchy
&#x23CD; square foot postfix 920 0 0
&#x23DC; top parenthesis postfix 920 0 0 stretchy
&#x23DD; bottom parenthesis postfix 920 0 0 stretchy
&#x23DE; top curly bracket postfix 920 0 0 stretchy
&#x23DF; bottom curly bracket postfix 920 0 0 stretchy
&#x23E0; top tortoise shell bracket postfix 920 0 0 stretchy
&#x23E1; bottom tortoise shell bracket postfix 920 0 0 stretchy
&#x1EEF0; 𞻰 arabic mathematical operator meem with hah with tatweel postfix 920 0 0 stretchy
&#x1EEF1; 𞻱 arabic mathematical operator hah with dal postfix 920 0 0 stretchy
_ _ low line infix 940 0 0

C. MathML のアクセシビリティ

C.1 導入

オープン・ウェブ・プラットフォームの重要な要素として、W3C の MathML 規格は、コンテンツ作成者や開発者がウェブ上で数学表現を組み込み、その基礎となる構造的および意味的情報を他の技術に公開するという前例のない可能性を持っています。これらの情報公開を可能にすることはアクセシビリティの基盤であり、デジタル数学コンテンツを機械可読、検索可能、再利用可能にするための道を提供します

ウェブ上でアクセシブルなデジタルコンテンツを作成するための国際的に受け入れられた基準および基本原則は、W3C の Web Content Accessibility Guidelines [WCAG21] に示されています。これらの原則を数学情報を含むデジタルコンテンツに拡張するにあたり、WCAG は MathML を使用する場所におけるアクセシビリティを定義するための有益な枠組みを提供します。

現在の WCAG 指針は、MathML として符号化された数学コンテンツを障害を持つユーザーが利用できるようにする方法について直接的な指示を提供していないため、本仕様は MathML を含むデジタルコンテンツにこれらの指針を適用する方法を定義します。

これらの推奨事項に従う利点の一つは、デジタル数学コンテンツが既に世界中で広く使用されているウェブコンテンツのアクセシビリティ要件を満たすのに役立つことです。さらに、デジタル数学教材がアクセシブルであることを確保することで、障害の有無にかかわらず読者層を拡大することができます。

ベストプラクティスに関する追加の指針は、時間の経過とともに [MathML-Notes] にて作成されます。これらをノートとして配置することで、アクセシビリティの慣行は MathML の仕様とは独立して適応・進化できるようになります。ノートは過去・現在・将来の MathML バージョン、さらに MathML-Core と完全な MathML 規格の両方に関する考慮事項にも使用されることを意図しています。別個の文書というアプローチにより、MathML の進化がアクセシビリティのベストプラクティスを時代に固定してしまわないようにし、コンテンツ作成者が最新のアクセシビリティ慣行を適用できるようにします。

C.2 MathML 使用によるアクセシビリティ上の利点

近代数学の多くの進歩(すなわちルネサンス以降)は、初期の記号表記の発展によって助けられたと言えるでしょう。記号表記は現在も進化を続けています。単純な読み書きのテキストで基礎的な数学概念を表現することはできますが、記号表記は抽象的な数学的構成を簡潔に表現する携帯可能な方法を提供し、人間や機械がより容易に消費・操作・理解できるようにします。数学記法自体は視覚的なレンダリング、検査、操作だけでなく、著者の意図する基礎的な意味を表現することを目的とした言語でもあります。これらの数学記法の特徴は、数学のアクセシビリティに直接関係しています。

アクセシビリティは MathML 規格の最初期から意図的に考慮されており、1998 年の MathML 1.0 仕様でも示唆されています。この理解は、Web Content Accessibility Guidelines(WCAG 1.0、W3C 推奨 1999-05-05)の最初のバージョンにも反映されており、「適切なマークアップ言語が存在する場合は、情報を伝えるために画像の代わりにマークアップを使用する」というチェックポイント 3.1 に準拠するための手法として MathML の使用例が挙げられています。また、WCAG 1.0 のガイドライン 3「マークアップとスタイルシートを適切に使用する」の議論の中で、編集者は「特定のブラウザや支援技術が正しく処理しないという理由で適切なマークアップを犠牲にしてはならない」と警告しています。元の WCAG 推奨の公開から約 20 年を経た現在でも、多くのコンテンツ作成者がこれらの理由により MathML の採用を遅らせているのが現状です。しかし、MathML 4.0 の公開により、アクセシビリティコミュニティはウェブ上で広く数学アクセシビリティが普及する将来に期待を寄せています。

デジタルコンテンツで MathML を使用することは、多様なアクセシビリティのユースケースをサポートする可能性を広げます。以下にそれらを説明します。

音声出力。数学式に対する動的なテキスト読み上げ(TTS)出力を提供する技術は MathML の起源より以前から存在しており、このユースケースは初期から MathML 規格の形成に影響を与えてきました。単に発話するテキスト列を生成するだけでなく、二次元の視覚構造の聴覚アナロジーを提供するために発話ピッチの変化などの音声キューを用いることが有用であることが分かっています。他の音声アプリケーションには、バイノーラル空間化、イヤコン(earcons)、スピアコン(spearcons)などが含まれ、合成音声によってレンダリングされた数学表現の曖昧さを解消するのに役立ちます。MathML は、これらの技術を可能にするために、数学式の構造と構文に関する堅牢な情報レベルを提供します。さらに、MathML 対応の TTS ツールによって使用される自動音声ルールの大規模な集合を作成できることは、数学音声の多言語化(国際化)やさまざまな話し方(ClearSpeak、MathSpeak、SimpleSpeak など)のサポートを事実上無限に可能にします。将来的には、教育評価で出題の公平性を損なわないためにより制限された読み方が必要な場合や、初学者向け教材が教室で使われる話し方を採用する必要がある場合など、より多様な音声ルールが提供される可能性があります。

点字出力。数学式を点字で触知的に表現することは非常に重要なユースケースです。視覚障害者にとって、数学を音声だけで解釈することは最も基本的な式を除いて認知的に負担が大きく、また盲ろう者にとっては音声は完全にアクセス不能です。Nemeth 点字コード、UEB テクニカル、ドイツの点字数学コード、フランスの点字数学コードなど、世界的に一般的に使用されている数学点字コードがいくつかあります。Liblouis のような動的な数学点字翻訳器は、ウェブページ上の MathML コンテンツをリフレッシャブル点字ディスプレイ用に翻訳することをサポートします。したがって、動的な点字数学コンテンツを提供するためには MathML の使用が不可欠です。

その他の視覚的変換。同期ハイライトは、視覚ユーザー向けの TTS に一般的に追加される機能です。MathML は式の基になるツリー構造を解析する能力を提供するため、式の個々の要素を発話に合わせて視覚的にハイライトすることができます。これにより、TTS ユーザーが読みの進行に追従しやすくなり、理解や学習が向上する可能性があります。TTS を使わない視覚的な読みでも、キャレットブラウジングを使ってページ内を移動する際に式内の視覚的ハイライトが役立つ場合があり、MathML はこれをサポートする可能性があります。

聴覚障害や難聴があり点字を使用できない人にとって、MathML でレンダリングされた数学式は視覚的に表示されるテキストに変換される可能性があります。研究によれば、特に学齢期の読字障害を持つ子どもたちの間では、数学表現に現れる記号表記を理解することは文学テキストを読むよりもはるかに難しいことが示されており、この機能を有効にすることは当該ユーザー層に対する有用なアクセステクニックとなり得ます。

MathML が提供し得る別のアクセシビリティ手段として、自動サイン言語アバターへの入力が挙げられます。アメリカ手話(ASL)を生成する自動サイン言語アバター技術は既に初等レベルの数学に適用されています 出典を追加。手話は国(場合によっては地域)ごとに異なり、単純な「単語から手話への」置換ではなく独自の文法を持つため、MathML によって数学式の基となるツリー構造へアクセスできることは、静的に録画された人間の手話映像を使わずに、デジタル文書から動的に式を手話で表現する可能性を提供します。

方程式のグラフ化は、基礎となる数学式の効果や意味を理解するのに役立つ視覚的出力を生成する一般的な手段です。これはすべての人に有益ですが、認知障害や学習障害を持つ人々にとって特に影響が大きい場合があります。一部の動的グラフユーティリティ(例:Desmos や MathTrax)は、この概念を単なる視覚的線描画を超えて拡張し、音の高さが上下することで視覚トレースの音響的構成を提供する聴覚トレースや、視覚グラフの動的に生成されたテキスト記述などを提供しています。デジタルコンテンツで MathML を使用することで、開発者がこのような自動アクセシブルなグラフ作成ユーティリティをウェブサイトに適用する可能性が生まれます。

C.3 アクセシビリティに関するガイダンス

C.3.1 ユーザーエージェント

C.3.1.1 アクセシビリティツリー

ユーザーエージェント(例:ウェブブラウザ)は、MathML 式のツリー構造にある情報を活用してアクセシビリティを最大化すべきです。ブラウザは MathML を DOM ツリーの内部表現として処理し、そこにはマークアップの要素と属性を表すオブジェクトが含まれます。一般に、ユーザーエージェントはプラットフォームのアクセシビリティサービス(例:アクセシビリティ API)を介してアクセシビリティ情報を公開し、それがアクセシビリティツリーを通じて支援技術アプリケーションに渡されます。アクセシビリティツリーはほとんどの MathML 要素に関連するアクセシビリティ情報を含むべきです。ブラウザは DOM ツリーから生成されるアクセシビリティツリーがこの情報を保持することを保証し、アクセシビリティ API が支援技術によって理解できる表現を提供できるようにする必要があります。しかし、W3C の User Agent Accessibility Guidelines Success Criterion 4.1.4 に準拠して、「もしユーザーエージェントのアクセシビリティ API が一つまたは複数のプラットフォームアクセシビリティサービスに十分な情報を提供しない場合、Document Object Models(DOM)を支援技術がプログラム的に利用できるようにしなければならない」[UAAG20]。

ほとんどの MathML 要素が DOM ツリーおよびそれに続くアクセシビリティツリーのノードとなるようにすることで、ユーザーエージェントは式内のキーボードナビゲーション用に数学ノードを公開できます。これにより、矢印キーで移動するときに式の要素を視覚的にハイライトしたり個々の要素を読み上げたりする能力など、重要なユーザーニーズをサポートできます。さらに、リフレッシャブル点字ディスプレイと合成音声を併用する個別の同期ナビゲーションの形態もサポートできます。

アクセシビリティツリーが主に視覚表示目的で使用される多くの DOM ノード要素を無視するのが一般的な慣行である一方、数学式は視覚的なスタイリングのように見えるものを使って情報を伝えることがあり、それが一部の支援技術アプリケーションにとって重要であることがある点を指摘しておくことが重要です。例えば、<mspace> 要素をアクセシビリティツリーから省略すると、点字ディスプレイ上で式の有効な数学点字表現を生成する能力に影響します。さらに、MathML で mathcolormathbackground 属性を使って色を表現している場合、それらが意味を表現するために使用されているならば、それらの要素を含める必要があります。

属性 alttext は標準の音声ルール処理を上書きするために使用できます(例:標準化された評価でしばしば行われるように)。しかし、この方法には多くの制約があります。例えば、式の発話全体をタグ内に記述しなければならないため、著者が気にしている小さな部分だけを指定することが難しいことがあります。さらに、alttext はプレーンテキストに限定されるため、音声エンジンに渡すための一時停止やピッチ変化といった音声キューを含めることはできません。また、alttext 属性は MathML ツリーへの直接の連結を持たないため、式の同期ハイライトを扱う方法がなくなり、ユーザーが式を通じてナビゲートする方法もなくなります。

初期のドラフトの MathML Accessibility API Mappings 1.0 が利用可能です。本仕様は製品内で MathML のアクセシビリティを担当するユーザーエージェント開発者を対象としています。この仕様の目的は、各支援技術が期待するロール、状態、およびプロパティを保持した状態で MathML コンテンツを受け取ることにより、MathML コンテンツのアクセシビリティを最大化することです。ARIA ラベルや aria-labeledby の配置は、点字生成を上書きしてしまうため MathML では適切ではありません。

C.4 コンテンツ作成者

このセクションでは、WCAG を使用してウェブ上のアクセシブルな MathML コンテンツの要件を確立する方法を、知覚可能、操作可能、理解可能、堅牢であるべきという同じ 4 つの高レベルのコンテンツ原則を用いて検討します。したがって、このセクションは、MathML を含むデジタルコンテンツに固有の特性に対処するために WCAG で定義された適合基準を適用する方法を定義します。

C.4.1 全般的な指針

C.4.1.1 常にマークアップを使用する

すべての数学および線形化学方程式コンテンツのマークアップには MathML を使用することが重要です。これは ASCII 文字や式の画像を HTML 内で単に使用すること(たとえ代替テキストが使用されていても)を避けることを意味します。たとえ単一文字の変数であっても、それが数学的式を表す場合は理想的には MathML でマークアップすべきです。こうすることで、変数の音声・点字・視覚的レンダリングがページ全体で一貫するようになります。

C.4.1.2 intent および arg 属性の使用

MathML の intent および arg 属性は、支援技術だけでは信頼して解決できない表記上の曖昧さを軽減するために開発されました。これは空白や単位も含み、Intent 属性で扱われます。

C.4.2 具体的なマークアップのガイダンス

C.4.2.1 不可視オペレータ

数学記法の一般的な使用では、記号が表示されないが表示される演算子が存在するかのように機能する「不可視オペレータ」がいくつか使われます。これらのオペレータは意味を保持し、支援技術利用者の曖昧さを防ぐために MathML でマークアップする必要があります。

スクリーンリーダーは <mphantom> 要素に囲まれた内容を発話しないため、演算子と組み合わせて不可視オペレータを作成するために <mphantom> を使用してはいけません。

暗黙の乗算:伝統的な表記で乗算演算子が黙示的に使用される場合は、暗黙の乗算を示すために「invisible times」オペレータ (&#x2062;) を使用するべきです。

関数適用:関数適用を示すために「apply function」オペレータ (&#x2061;) を使用するべきです。

不可視コンマ:引数や添字をコンマが省略される場合に意味的に区切るために、「invisible comma」または「invisible separator」オペレータ (&#x2063;) を使用するべきです。

暗黙の加算:帯分数では、整数部とその分数の間の演算子として「invisible plus」文字 (&#x2064;) を使用するべきです。

C.4.2.2 部分式の適切なグルーピング

部分式は数学的に解釈される通りにグループ化することが望ましい慣行です。<mrow> を使用して部分式を適切にグループ化することで、間隔に影響を与えて表示を改善し、より賢明な改行やインデントを可能にし、スクリーンリーダーやテキスト読み上げアプリケーションによる表示要素の意味的解釈を単純化できます。

C.4.2.3 スペーシング

一般に、間隔を表す要素 <mspace><mphantom>、および <mpadded> は意味を伝えるために使用すべきではありません。

C.4.2.4 数値

すべての数値は <mn> 要素で囲むべきです。カンマ、ピリオド、スペースなどの桁区切りは数の一部として含めるべきであり、演算子として扱ってはいけません。

C.4.2.5 上付き文字と下付き文字

上付き文字および下付き文字は適切な要素または部分式に適用することが重要です。閉じ括弧や他のグルーピング記号に上付きまたは下付き文字を適用することは正しくありません。ナビゲーションにおいて重要です

C.4.2.6 初等数学の表記

初等的な表記には専用のレイアウト要素があります。割り算や積み重ね式などには、<mlongdiv><mstack> のような適切な要素を使用し、<mtable> を代用しないでください。

C.4.2.7 空欄補充(Fill-in-the-Blanks)

空欄補充形式の問題では、下線付きスペース、空の円、四角、その他の記号で空欄を視覚化することがよくあります。空欄を示すためには、intent および arg 属性を使用してください。

ユーザーが表示ページ上で空欄を埋めるインタラクティブな電子環境では、通常、空欄がクリックされたときにエディタを呼び出すために JavaScript が使用されます。これを容易にするために、編集と最終処理の識別のために要素に id を追加する必要があります。さらに、onclick のようなイベントトリガーを追加するべきです。詳細は望ましいインタラクションの種類と使用する特定の JavaScript によります。

C.4.2.8 表とリスト

MathML は表や式番号付けの組み込みサポートを提供し、HTML のリストや表の機能を補完します。実際には、どの構造要素を使用すべきかが明確でない場合があります。理想的には、整列された行や列間の情報が意味的に関連している場合は表(HTML の <table> または MathML の <mtable>)を使用すべきです。通常の問題番号付けや順序付けられた情報の提示のような場合には、HTML の有序リスト <ol> の方が適切です。

<table><mtable> の選択は、対象となる利用者の使いやすさのニーズや表コンテンツの目的に最適に応えるために慎重に考える必要があります。HTML の構造要素はスクリーンリーダーがより強力な表ナビゲーションを提供するなどの利点がありますが、ユーザーは MathML アイランド内の <mtable> に「入る」または「出る」しかできない場合があります。一方、<mtable> 要素は新しい表セルを作成することなく視覚的な整列を簡単に調整できるため、ユーザーの読みの流れを改善することができます。それでも、行列やその他の表形式の数学レイアウトには <mtable> を使用すべきです。

C.4.2.9 自然言語による数学表現

初学者向けの教材では、数学記号の書き言葉による表現を使うことがあります。例えば、掛け算記号 × は「times」や「multiplied by」と書かれることがあります。これらは通常の単語であるため、音声エンジンは問題なく読み上げます。しかし、場合によってはこれらの用語を MathML に含めるユースケースがあるかもしれません。例えば「x = 2 times a」という表現の中の単語「times」は、<mo>times</mo> のように演算子としてマークアップされることがあります。

C.4.2.10 アクセシブルな説明

特定の数学的構成に対して、読者に追加の補助情報を提供することが有益な場合があります。これは特に教育教材で、新しく導入された構文が繰り返し強化されることで利益を得る場合に当てはまります。そのような情報は、より慣れた読者、あるいは最初の読解後の同じ人にとっては冗長すぎることがよくあります。したがって、一般的な支援技術の振る舞いとして、通常は要求があったときにのみアクセシブル記述(accessible description)を音声化し、デフォルトでは省略することがあります。

このような記述を提供するには、ARIA 1.3 の属性 aria-description を使用することが適切です。これはホスト要素に文字列値で注釈を付与できます。例として、円周の公式の最小限のマークアップを考え、各非自明な構成要素に説明を付けます。

<mrow aria-description="円の周長">
  <mn>2</mn>
  <mi aria-description="数学定数">π</mi>
  <mi aria-description="半径の変数">r</mi>
</mrow>

短くするために aria-description のみを使用することが行われる場合もありますが、適切に intent 注釈と併用することが推奨されます。

同等のアクセスを確保するために、aria-description または intent を使用する場合は、有用な説明はページ上でも表示されるべきです。これを実現する一般的な手段は、説明を含むツールチップをインタラクティブに表示することです。

D. 適合性

非規範とマークされた節に加えて、この仕様の著作ガイドライン、図、例、および注はすべて非規範です。本仕様の他のすべての部分は規範的です。

キーワード MAY, MUST, SHOULD, および SHOULD NOT は、本書の中で完全に大文字で表記される場合に限り、 BCP 14 [RFC2119] [RFC8174] に記載されているとおりに解釈されます。

今日、情報は一般にソフトウェアツールによって生成、処理、レンダリングされます。ウェブの指数関数的な成長は、自動検索、分類、情報の相互接続のための高度なシステムの開発を促進しています。さらに、技術的な資料や活動を提供するいくつかのウェブサービスの数も増えています。したがって、MathML は手書きで記述され人間が読むこともできますが、機械支援であれ多大な集中を要する読みであれ、MathML の将来は主にソフトウェアツールでそれを処理する能力に大きく依存しています。

MathML プロセッサには多くの種類があります。MathML 式を著述するためのエディタ、他のエンコーディングへの変換や変換元となるトランスレータ、MathML 式を検査するバリデータ、MathML 式を評価・操作・比較する計算エンジン、そして数学記法の視覚的・音響的・触知的表現を生成するレンダリングエンジンなどです。MathML をサポートするとは何を意味するかはアプリケーションによって大きく異なります。例えば、バリデーティングパーサーで生じる問題は方程式エディタでの問題とは非常に異なります。

この節では、異なる種類の MathML サポートを記述し、特定のアプリケーションにおける MathML サポートの範囲を明確にするガイドラインを示します。開発者、ユーザー、およびレビューワーは、製品の特性を記述する際にこれらのガイドラインを使用することを推奨します。これらのガイドラインの意図は、その機能を定量的に明示することで MathML アプリケーションの再利用と相互運用性を促進することです。

W3C Math Working Group は MathML Compliance Guidelines を維持しています。適合性に関する活動やリソースの最新情報についてはこの文書を参照してください。

D.1 MathML の適合性

有効な MathML 式は、MathML RelaxNG スキーマと本仕様で与えられる追加要件によって定義される XML 構成です。

ここでは「MathML プロセッサ」という表現を、有効な MathML 式を受け入れたり生成したりできる任意のアプリケーションを指すものとして用います。有効な MathML 式の両方を受け入れ生成する MathML プロセッサは、MathML を「ラウンドトリップ」できる可能性があります。最も単純なラウンドトリップの例は、修正することなく新しいファイルに書き出すエディタかもしれません。

MathML 適合性には次の三つの形式が規定されています:

  1. MathML 入力適合プロセッサは、すべての有効な MathML 式を受け入れなければなりません;それはすべての MathML 式を適切にアプリケーション固有の形式に変換し、ネイティブなアプリケーション操作を行えるようにするべきです。

  2. MathML 出力適合プロセッサは、有効な MathML を生成し、すべてのアプリケーション固有データを適切に表現しなければなりません。

  3. MathML ラウンドトリップ適合プロセッサは、MathML の等価性を保持しなければなりません。二つの MathML 式が「等価」であるとは、かつその時に限り、任意の関連する状況下で任意の MathML プロセッサによって両式が同じ解釈(MathML スキーマと仕様で述べられる通り)を持つ場合を指します。本書の別箇所で要素ごとの等価性が議論されています。

上記の定義を超えて、MathML 規格は個々のプロセッサに対して要求を課していません。開発者を案内するために、MathML 規格は助言的な資料を含んでいます;例えば、3. Presentation Markup 全体に多くの推奨レンダリング規則があります。しかし一般に、開発者は自分の特定のアプリケーションにとってどのような種類の MathML 実装が意味を持つかを解釈するための自由度が与えられています。

適合性と意味ある実装の解釈の違いを明確にするために、いくつか例を考えます:

  1. MathML 入力適合であるためには、バリデーティングパーサーは式を受け入れ、有効な MathML であれば「true」を返すだけで十分です。特に、MathML 式をレンダリングしたり解釈したりする必要はありません。

  2. コンテンツマークアップに基づく MathML の計算代数インターフェースは、すべてのプレゼンテーションマークアップを無視する選択をするかもしれません。インターフェースがプレゼンテーションマークアップを含む有効なすべての MathML 式を受け入れる限り、そのアプリケーションを技術的に MathML 入力適合と特徴づけることは正当です。

  3. ある方程式エディタは、いくつかの式を MathML として容易にエクスポートできる内部データ表現を持ち、他の式はできないかもしれません。エディタが単純な式を有効な MathML としてエクスポートし、変換に失敗した他の式については変換が失敗した旨のエラーメッセージを表示するだけなら、それでも技術的には MathML 出力適合と見なされます。

D.1.1 MathML テストスイートとバリデータ

前述の例が示すように、有用であるためには MathML 適合性の概念はしばしば言語のどの部分が意味ある実装を持っているか、という判断を含みます。これは、特定のアプリケーションが MathML のどの部分を意味的に実装しているかを定量的に示す仕組みを必要とします。その目的のために、W3C Math Working Group は テスト スイート を提供しています。

テストスイートは、多数の MathML 式で構成され、それらはマークアップのカテゴリおよびテスト対象の支配的な MathML 要素によって分類されています。このテストスイートの存在によって、例えば前述の仮想的な計算代数インターフェースが、テストスイートのコンテンツマークアップのセクションに含まれるすべての式を含む MathML コンテンツマークアップを意味的に実装していると述べることで定量的に特徴付けることが可能になります。

MathML の一部を意味ある形で実装しないことを選択する開発者には、テストスイートの特定カテゴリを参照して省略する部分を列挙することを推奨します。

MathML 出力適合プロセッサ向けに、現在利用可能な MathML を検証するツールに関する情報は W3C MathML Validator にて管理されています。 MathML 出力適合プロセッサの開発者は、このバリデータを使って出力を検証することを推奨します。

アプリケーションが実装している MathML 仕様の部分を検証したい MathML アプリケーションの顧客は、意思決定プロセスの一部としてテストスイートを使用することを推奨します。

D.1.2 非推奨となった MathML 1.x および 2.x の機能

MathML 4.0 には以前の MathML の多くの機能が含まれており、それらのいくつかは現在非推奨となっています。次の点は、機能が非推奨であることの意味を定義し、非推奨機能と現在の MathML 適合性との関係を明確にします。

  1. MathML 出力適合であるためには、オーサリングツールは非推奨機能を含む MathML マークアップを生成してはなりません。

  2. MathML 入力適合であるためには、レンダリングおよび読み上げツールは、MathML 1.x または MathML 2.x と適合していると見なされるために非推奨機能をサポートする必要があります。MathML 4.0 に適合していると見なされるために非推奨機能をサポートする必要はありません。しかし、すべてのツールは可能な限り古い形式をサポートすることが奨励されます。

  3. MathML ラウンドトリップ適合であるためには、プロセッサは非推奨機能を含まない式についてのみ MathML 等価性を保持すればよいです。

D.1.3 MathML 拡張機構と適合性

MathML 4.0 は三つの基本的な拡張機構を定義します:mglyph 要素は非 Unicode 文字の字形や既存の Unicode 文字の字形バリアントを表示する方法を提供します;maction 要素は他の名前空間の属性を使用して実装固有のパラメータを取得します;そしてコンテンツマークアップは definitionURL 属性やコンテンツ辞書、および cd 属性を利用して数学的意味の外部定義を指し示します。

これらの拡張機構は重要です。なぜなら、現在明示的に指定されている MathML 4.0 の範囲を超える概念をエンコードする方法を提供し、標準化にまだ適さない新しいアイデアを探求するために MathML を使用できるようにするからです。しかし、新しいアイデアが定着すると将来の標準の一部になる可能性があります。例えば、今日 mglyph 要素で表現しなければならない新興の文字が将来 Unicode コードポイントを割り当てられるかもしれません。その時点では、その文字を直接 Unicode コードポイントで表すことが望ましいでしょう。このような Unicode への移行は、数学で使用される何百もの文字ですでに起こっています。

拡張機構を用いて新しいアイデアの議論を促進することには将来の陳腐化の可能性が内在するため、MathML は拡張機構の使用について適合性要件を合理的に課すことはできません。たとえ代替の標準マークアップが利用可能であってもです。例えば、'x' を表現するために mglyph 要素を使用することは許可されます。しかし、著者と実装者には可能な限り標準マークアップを使用することが強く奨励されます。同様に、MathML 4.0 の拡張機構を使用する文書の管理者は、関連する標準活動(例:Unicode、OpenMath 等)を監視し、より標準化されたマークアップが利用可能になった際に文書を更新することが奨励されます。

D.2 エラーの処理

MathML 入力適合のアプリケーションが、不正な属性の数や型、または子スキーマを持つ一つ以上の要素を含む入力を受け取った場合でも、可能な限り理解可能な方法で入力全体をレンダリングするよう試みるべきです。すなわち、有効であった入力部分は通常通りレンダリングし、不正な式の代わりにエラーメッセージを(merror 要素で囲まれているかのようにレンダリングして表示するべきです。

エディタやトランスレータのような MathML 出力適合アプリケーションは、入力のエラーを示すために merror 式を生成することを選択できます。これは、技術的には有効だが誤りを含む可能性のある MathML を生成するよりも通常好ましいです。

D.3 未指定データのための属性

MathML 仕様で説明される属性は、適切な表示とコンテンツマークアップを可能にすることを意図しています。しかし、すべてのユーザーのマークアップニーズを網羅することは決して可能ではありません。理想的には、MathML 属性は拡張可能なリストであるべきで、ユーザーがレンダラ固有のために特定の属性を追加できるようにするべきです。しかし、これは単一の XML DTD やスキーマの範囲内では実現できません。標準 DTD の拡張を用いれば可能ですが、一部の著者はレンダラ固有の能力を利用するために非標準の属性を使用したいと考えるでしょうが、それでも標準 DTD に厳密に準拠していたいと考えます。

このため、MathML 1.0 仕様 Mathematical Markup Language (MathML) 1.0 Specification では、すべての要素に対してレンダラ固有情報を渡すためのフックとして使用するために other 属性を許可していました。特にこれは音声レンダラ、計算代数システムへの情報伝達や将来のマクロ/拡張機構におけるパターンマッチングのためのフックとして意図されていました。このアプローチの動機は歴史的なもので、例えば PostScript ではコメントが PostScript の一部でない情報を渡すために広く使われていることに由来します。

MathML の次の進化の期間において、一般的な XML 名前空間機構の発展により other 属性の使用は時代遅れとなったように見えました。MathML 2.0 では、非 MathML 属性を識別するために名前空間プレフィックスを使用することを推奨して other 属性は非推奨となりました。other 属性は MathML 4.0 では削除されていますが、mathml4-legacy スキーマでは依然として有効(定義された動作なし)です。

例えば、MathML 1.0 では、maction 要素(3.7.1 部分式にアクションを結び付ける) のレンダラ固有実装で追加情報を使用する場合、その情報は other 属性を使って渡すべきだと推奨されていました:

<maction actiontype="highlight" other="color='#ff0000'"> expression </maction>

MathML 4.0 以降では、data-* 属性を使用できることに注意してください:

<body>
  ...
  <maction actiontype="highlight" data-color="#ff0000"> expression </maction>
  ...
</body>

非標準属性を許可する意図は、ソフトウェア開発者がこれを MathML マークアップの中核的慣習を回避する抜け穴として乱用することを促すものではありません。著者およびアプリケーションは非標準属性を慎重に使用すべきです。

D.4 プライバシーに関する考慮事項

ウェブプラットフォームにおける MathML の実装は [MathML-Core] を実装すべきであり、 したがってそこで指定されている プライバシーに関する考慮事項 が適用されます。

D.5 セキュリティに関する考慮事項

ウェブプラットフォームにおける MathML の実装は [MathML-Core] を実装すべきであり、 したがってそこで指定されている セキュリティに関する考慮事項 が適用されます。

場合によっては、MathML 式が XML として解析されることがあります。その場合には XML 解析のセキュリティに関する考慮事項が適用されます。これは [RFC7303] に説明されています。

E. Content MathML の演算子

以下の表は、Content MathML の演算子要素に関する主要な構文情報の要約を示します。

E.1 Content MathML のコンストラクタ

以下の表はコンストラクタ記号に対応するコンテナ要素の子要素構文を示します。詳細および例は 4.3.1 Container Markup を参照してください。

要素の 名前 は最初の列にあり、コンストラクタを説明する節へのリンクを提供します。

Content 列はコンストラクタ内に含めることができる子要素を示します。

名前 内容
set ContExp*
list ContExp*
vector ContExp*
matrix ContExp*
matrixrow ContExp*
lambda ContExp
interval ContExp,ContExp
piecewise piece*, otherwise?
piece ContExp,ContExp
otherwise ContExp

E.2 Content MathML の属性

以下の表は特定の演算子要素に指定できる属性を一覧にしたものです。さらに、すべての演算子要素は CommonAtt および DefEncAtt 属性を許可します。

要素の 名前 は最初の列にあり、演算子を説明する節へのリンクを提供します。

属性 列は演算子要素に指定できる属性名を示します。

列は演算子要素に特有の属性に指定できる値を示します。

名前 属性
tendsto type? string
interval closure? open | closed | open-closed | closed-open
set type? set | multiset | text
list order numeric | lexicographic

E.3 Content MathML の演算子

要素の 名前 は最初の列にあり、演算子を説明する節へのリンクを提供します。

シンボル 列は、演算子をエンコードするために使用できる csymbol の一覧を示し、Strict Content MathML Transformation Algorithm で使用される OpenMath シンボルへのリンクを提供します。

クラス 列は演算子クラスを指定します。これは演算子が期待する引数の数を示し、場合によっては 4.3.4 Operator Classes に記述されているように Strict Content MathML へのマッピングを決定することがあります。

修飾子 列は、演算子が受け入れる修飾要素を、コンテナ要素の場合は子要素として、空の演算子要素の場合は直後の兄弟要素として列挙します。

名前 シンボル クラス 修飾子
plus plus nary-arith BvarQ,DomainQ
times times nary-arith BvarQ,DomainQ
gcd gcd nary-arith BvarQ,DomainQ
lcm lcm nary-arith BvarQ,DomainQ
compose left_compose nary-functional BvarQ,DomainQ
and and nary-logical BvarQ,DomainQ
or or nary-logical BvarQ,DomainQ
xor xor nary-logical BvarQ,DomainQ
selector vector_selector, matrix_selector nary-linalg
union union nary-set BvarQ,DomainQ
intersect intersect nary-set BvarQ,DomainQ
cartesianproduct cartesian_product nary-set BvarQ,DomainQ
vector vector nary-constructor BvarQ,DomainQ
matrix matrix nary-constructor BvarQ,DomainQ
matrixrow matrixrow nary-constructor BvarQ,DomainQ
eq eq nary-reln BvarQ,DomainQ
gt gt nary-reln BvarQ,DomainQ
lt lt nary-reln BvarQ,DomainQ
geq geq nary-reln BvarQ,DomainQ
leq leq nary-reln BvarQ,DomainQ
subset subset nary-set-reln
prsubset prsubset nary-set-reln
max max nary-minmax BvarQ,DomainQ
min min nary-minmax BvarQ,DomainQ
mean mean, mean nary-stats BvarQ,DomainQ
median median nary-stats BvarQ,DomainQ
mode mode nary-stats BvarQ,DomainQ
sdev sdev, sdev nary-stats BvarQ,DomainQ
variance variance, variance nary-stats BvarQ,DomainQ
quotient quotient binary-arith
divide divide binary-arith
minus minus unary_minus, minus unary-arith, binary-arith
power power binary-arith
rem remainder binary-arith
root root root unary-arith, binary-arith degree
implies implies binary-logical
equivalent equivalent binary-logical BvarQ,DomainQ
neq neq binary-reln
approx approx binary-reln
factorof factorof binary-reln
tendsto limit binary-reln
vectorproduct vectorproduct binary-linalg
scalarproduct scalarproduct binary-linalg
outerproduct outerproduct binary-linalg
in in binary-set
notin notin binary-set
notsubset notsubset binary-set
notprsubset notprsubset binary-set
setdiff setdiff, setdiff binary-set
not not unary-logical
factorial factorial unary-arith
minus minus unary_minus, minus unary-arith, binary-arith
root root root unary-arith, binary-arith degree
abs abs unary-arith
conjugate conjugate unary-arith
arg argument unary-arith
real real unary-arith
imaginary imaginary unary-arith
floor floor unary-arith
ceiling ceiling unary-arith
exp exp unary-arith
determinant determinant unary-linalg
transpose transpose unary-linalg
inverse inverse unary-functional
ident identity unary-functional
domain domain unary-functional
codomain range unary-functional
image image unary-functional
ln ln unary-functional
card size, size unary-set
sin sin unary-elementary
cos cos unary-elementary
tan tan unary-elementary
sec sec unary-elementary
csc csc unary-elementary
cot cot unary-elementary
arcsin arcsin unary-elementary
arccos arccos unary-elementary
arctan arctan unary-elementary
arcsec arcsec unary-elementary
arccsc arccsc unary-elementary
arccot arccot unary-elementary
sinh sinh unary-elementary
cosh cosh unary-elementary
tanh tanh unary-elementary
sech sech unary-elementary
csch csch unary-elementary
coth coth unary-elementary
arcsinh arcsinh unary-elementary
arccosh arccosh unary-elementary
arctanh arctanh unary-elementary
arcsech arcsech unary-elementary
arccsch arccsch unary-elementary
arccoth arccoth unary-elementary
divergence divergence unary-veccalc
grad grad unary-veccalc
curl curl unary-veccalc
laplacian Laplacian unary-veccalc
moment moment, moment unary-functional degree, momentabout
log log unary-functional logbase
exponentiale e constant-arith
imaginaryi i constant-arith
notanumber NaN constant-arith
true true constant-arith
false false constant-arith
pi pi constant-arith
eulergamma gamma constant-arith
infinity infinity constant-arith
integers Z constant-set
reals R constant-set
rationals Q constant-set
naturalnumbers N constant-set
complexes C constant-set
primes P constant-set
emptyset emptyset, emptyset constant-set
forall forall, implies quantifier BvarQ,DomainQ
exists exists, and quantifier BvarQ,DomainQ
lambda lambda lambda BvarQ,DomainQ
interval interval_cc, interval_oc, interval_co, interval_oo interval
int int defint int
diff diff Differential-Operator
partialdiff partialdiff partialdiffdegree partialdiff
sum sum sum BvarQ,DomainQ
product product product BvarQ,DomainQ
limit limit, both_sides, above, below, null limit lowlimit, condition
piecewise piecewise Constructor
piece piece Constructor
otherwise otherwise Constructor
set set, multiset nary-setlist-constructor BvarQ,DomainQ
list interval_cc, list nary-setlist-constructor BvarQ,DomainQ

F. Strict Content MathML 変換

MathML はコンテンツマークアップに意味を割り当てるために Strict Content MathML へのマッピングを定義します。Strict MathML は OpenMath と一対一の対応関係にあり、この方法で Content MathML 式から得られる OpenMath 式の部分集合は、標準の OpenMath Content Dictionary 集合を通じて明確に定義された意味を持ちます。したがって、任意の Content MathML 式を同等の Strict Content MathML に写すことが、Content MathML の意味を支える上で重要な役割を果たします。

任意の Content MathML を Strict Content MathML に写すマッピングはアルゴリズム的に定義されています。アルゴリズムは以下に、特定の非 Strict 構成に適用される一連の書き換え規則として記述します。個々の書き換え変換は次の節で説明します。本節の目的は、完全なアルゴリズムを一箇所に概説することです。

アルゴリズムは一連の9段階の手順です。各ステップは、それ以上適用できなくなるまで繰り返し入力を書き換えるために適用されます。XSLT のような多くのプログラミング言語では、自然な実装は下に示す複数パスの実装ではなく再帰的なアルゴリズムとなることに注意してください。XSL への変換は簡単で、最終的に同じ Strict Content MathML を生成します。しかし、全体構造が複数パスのアルゴリズムの方が明快であるため、ここではその定式化を示します。

任意の Content MathML 式を Strict Content MathML に変換するには、以下の規則を順に入力式に適用し、対象となる構成要素がすべて除去されるまで繰り返します:

  1. 非 Strict な bind を書き換え、非推奨要素を除去する: 結合式の外側の bind タグは、修飾子があるか複数の子を持つ場合に apply に変更します。これにより、後続の規則を場合分けなしに非 Strict な結合式に適用できるようにしてアルゴリズムを簡素化します。なお、このステップで導入された apply 要素は、後の規則で再び bind 要素に変更されることに注意してください。

  2. 修飾子の慣用的使用に対する特別ケース規則を適用する

    1. 変数の束縛状態を明確にするために、微分を規則 Rewrite: diffRewrite: nthdiff、 および Rewrite: partialdiffdegree に従って書き換えます。

    2. 積分については、束縛変数と自由変数の状態、ならびに積分範囲が lowlimit/uplimit の対で与えられている場合の方向を曖昧さなくするために、規則 Rewrite: int, Rewrite: defint および Rewrite: defint limits を適用して書き換えます。

    3. 極限は Rewrite: tendsto および Rewrite: limits condition に従って書き換えます。

    4. 総和と総積は 4.3.5.2 N-ary Sum <sum/> および 4.3.5.3 N-ary Product <product/> に記述された通りに書き換えます。

    5. 根(ルート)は F.2.5 Roots に記述されている通りに書き換えます。

    6. 対数は F.2.6 Logarithms に記述されている通りに書き換えます。

    7. モーメントは F.2.7 Moments に記述されている通りに書き換えます。

  3. 修飾子を domainofapplication に書き換える: これらの規則は、bvar および修飾子を用いるすべての apply 構成を、一般的な domainofapplication 修飾子のみを用いる形に書き換えます。

    1. 区間interval および lowlimit/uplimit として与えられた修飾子は、Rewrite: interval qualifier に従って整数の区間へ書き換えます。

    2. 複数の condition:複数の condition 修飾子はそれらの論理積を取ることで単一のものへ書き換えます。得られた複合的な condition は規則 Rewrite: condition に従って domainofapplication に書き換えられます。

    3. 複数の domainofapplication:複数の domainofapplication 修飾子は、指定されたドメインの交差を取ることで単一のものに書き換えます。

  4. コンテナマークアップを正規化する

    1. 集合およびリストは規則 Rewrite: n-ary setlist domainofapplication に従って書き換えます。

    2. 区間、ベクトル、行列、および行列行は F.3.1 Intervals、および 4.3.5.8 N-ary Matrix Constructors: <vector/>, <matrix/>, <matrixrow/> に記述されている通りに書き換えます。なお、修飾子は既に domainofapplication に書き換えられており、ステップ6 でさらに書き換えられることに注意してください。

    3. ラムダ式は規則 Rewrite: lambda および Rewrite: lambda domainofapplication に従って書き換えます。

    4. 分岐関数(piecewise)は 4.3.10.5 Piecewise declaration <piecewise>, <piece>, <otherwise> に記述されている通りに書き換えます。

  5. domainofapplication 修飾子を用いる演算子に対する特別ケース規則を適用する: このステップでは、4.3 Content MathML for Specific Structures で導入された演算子に関する特別ケースを扱います。考慮すべき特別ケースにはいくつかのクラスがあります:

    1. 規則 Rewrite: n-ary unary setRewrite: n-ary unary domainofapplication、および Rewrite: n-ary unary single に従って、minmaxmean 等の n-ary/ unary 演算子を書き換えます。

    2. forall および exists のような量化子が domainofapplication とともに使用されている場合は、規則 Rewrite: quantifier に従って含意と論理積を用いる式へ書き換えます。

    3. domainofapplication 要素(bvar の有無を問わず)を用いる積分は、規則 Rewrite: int および Rewrite: defint に従って書き換えます。

    4. domainofapplication 要素(bvar の有無を問わず)を用いる総和および総積は、4.3.5.2 N-ary Sum <sum/> および 4.3.5.3 N-ary Product <product/> に記述されている通りに書き換えます。

  6. domainofapplication を除去する:この段階では、任意の apply は高々一つの domainofapplication 子を持ち、特別ケースは扱われています。domainofapplication は Strict Content MathML ではないため、書き換えられます

    1. もし applybvar 子を含まない場合は、規則 Rewrite: restriction によって制限関数の適用へ書き換えます。

    2. 関係に用いられる場合は、規則 Rewrite: n-ary relations および Rewrite: n-ary relations bvar に従って、predicate_on_list シンボルの適用へ書き換えます。

    3. 一般の n-ary 演算子については、一般規則 Rewrite: n-ary domainofapplication に従って、apply_to_list シンボルを用いる構成へ書き換えます。

    4. 束縛変数を持つ apply に対しては、規則 Rewrite: apply bvar domainofapplication に従って、suchthat シンボル(set1 コンテント辞書)を用いる構成へ書き換えます。

  7. 非 Strict なトークン要素を書き換える

    1. type 属性が e-notationrationalcomplex-cartesiancomplex-polar、または constant のいずれかである cn 要素として表された数値を、規則 Rewrite: cn sepRewrite: cn based_integer、 および Rewrite: cn constant に従って厳密な cn に書き換えます。

    2. cicsymbol、またはプレゼンテーション MathML を含む cn を、規則 Rewrite: cn presentation mathml および Rewrite: ci presentation mathml(および csymbol に対する同様の規則)に従って semantics 要素に書き換えます。

  8. 演算子を写す:残っている 4.3 Content MathML for Specific Structures に定義される任意の演算子は、規則 Rewrite: element に従って、構文表で特定されたシンボルを参照する csymbol に書き換えられます。各演算子要素の説明で述べられているように、適切なシンボルの選択を決定するために特別なケース規則が必要なものがあります。注目すべきいくつかのケースは次のとおりです:

    1. selector 演算子については、引数の順序を変更する必要があり、シンボルは引数の型に依存します。

    2. minus 演算子のシンボル選択は引数の数に依存します(minus または minus)。

    3. いくつかの集合演算子のシンボル選択は、引数の type の値に依存します。

    4. いくつかの統計演算子のシンボル選択は、引数の型の値に依存します。

  9. 非 Strict な属性を書き換える

    1. type 属性を書き換えるこの時点で、type を受け入れるすべての要素は、cicsymbol を除いて、属性を持たない Strict Content マークアップの同等物へ書き換えられているはずです。ここでは型情報が演算子シンボルの選択に反映されています。 現在残っている ci および csymbol 要素の type 属性は、規則 Rewrite: ci type annotation および Rewrite: csymbol type annotation に従って semantics を用いる厳密な式へ書き換えます。

    2. definitionURL および encoding 属性を書き換えるcsymbol 要素の definitionURLencoding 属性がコンテント辞書への参照として解釈できる場合(詳細は 4.2.3.2 Non-Strict uses of <csymbol> を参照)、これらを cd 属性でコンテント辞書を参照する形に書き換えます。

    3. 属性を書き換える:Strict マークアップで許されない属性を持つ要素は、規則 Rewrite: attributes に従って、最初の子にその属性を除いた要素を持ち、残りの属性を annotation 要素として持つ semantics 構成へ書き換えます。

F.1 非 Strict な bind を書き換える

4.2.6 結合と束縛変数 <bind> および <bvar> に記述されているように、bind 要素の厳密な形式は修飾子を許容せず、非 bvar の子要素をひとつだけ許可します。

修飾子を持つか複数の非 bvar 子要素を持つ各結合式において、bind タグを apply に置き換えてください。

このステップは、後続の規則が apply を用いて非厳密な結合式を修正する際に、bind を使った非厳密な結合式に対して別途場合分けを行わずに適用できるようにします。

後の規則は、これらの apply を用いた非厳密な結合式を再び厳密な bind 要素に戻します。

F.2 慣用的な修飾子を書き換える

修飾子の慣用的な使用に対する特別ケース規則を適用してください。

F.2.1 微分

変数の束縛状態を明示するために、規則 Rewrite: diffRewrite: nthdiff、 および Rewrite: partialdiffdegree を用いて微分を 書き換えてください。

微分演算子に関して重要なのは、式の場合、その変数は実際には微分演算子によって束縛されていないという点を認識することです。

Rewrite: diff

次の式を変換します

<apply><diff/>
  <bvar><ci>x</ci></bvar>
  <ci>expression-in-x</ci>
</apply>

ここで <ci>expression-in-x</ci> は変数 x に依存する式です

<apply>
  <apply><csymbol cd="calculus1">diff</csymbol>
    <bind><csymbol cd="fns1">lambda</csymbol>
      <bvar><ci>x</ci></bvar>
      <ci>E</ci>
    </bind>
  </apply>
  <ci>x</ci>
</apply>

微分された関数が変数 x に適用されることで、その変数が厳密なマークアップでは自由変数であることが明示されます。したがって、次の式の厳密等価は

<apply><diff/>
  <bvar><ci>x</ci></bvar>
  <apply><sin/><ci>x</ci></apply>
</apply>

は次のとおりです

<apply>
  <apply><csymbol cd="calculus1">diff</csymbol>
    <bind><csymbol cd="fns1">lambda</csymbol>
      <bvar><ci>x</ci></bvar>
      <apply><csymbol cd="transc1">sin</csymbol><ci>x</ci></apply>
    </bind>
  </apply>
  <ci>x</ci>
</apply>

もし bvar 要素が degree 要素を含む場合は、nthdiff シンボルを使用してください。

Rewrite: nthdiff
<apply><diff/>
  <bvar><ci>x</ci><degree><ci>n</ci></degree></bvar>
  <ci>expression-in-x</ci>
</apply>

ここで <ci>expression-in-x</ci> は変数 x に依存する式であり、次の式に翻訳されます

<apply>
  <apply><csymbol cd="calculus1">nthdiff</csymbol>
    <ci>n</ci>
    <bind><csymbol cd="fns1">lambda</csymbol>
      <bvar><ci>x</ci></bvar>
      <ci>expression-in-x</ci>
    </bind>
  </apply>
  <ci>x</ci>
</apply>

例えば

<apply><diff/>
  <bvar><degree><cn>2</cn></degree><ci>x</ci></bvar>
  <apply><sin/><ci>x</ci></apply>
</apply>

の厳密等価は

<apply>
  <apply><csymbol cd="calculus1">nthdiff</csymbol>
    <cn>2</cn>
    <bind><csymbol cd="fns1">lambda</csymbol>
      <bvar><ci>x</ci></bvar>
      <apply><csymbol cd="transc1">sin</csymbol><ci>x</ci></apply>
    </bind>
  </apply>
  <ci>x</ci>
</apply>

関数に対して適用されるとき、partialdiff 要素は partialdiff シンボルに対応します。二つの引数は直接対応しますので特別な規則は不要です。

Rewrite: partialdiffdegree

partialdiff が式と bvar 修飾子と共に使われる場合は、partialdiffdegree シンボルを用いて厳密な Content MathML に書き換えます。

<apply><partialdiff/>
  <bvar><ci>x1</ci><degree><ci>n1</ci></degree></bvar>
  <bvar><ci>xk</ci><degree><ci>nk</ci></degree></bvar>
  <degree><ci>total-n1-nk</ci></degree>
  <ci>expression-in-x1-xk</ci>
</apply>

ここで <ci>expression-in-x1-xk</ci> は束縛変数を含む任意の式です。

<apply>
  <apply><csymbol cd="calculus1">partialdiffdegree</csymbol>
    <apply><csymbol cd="list1">list</csymbol>
      <ci>n1</ci> <ci>nk</ci>
    </apply>
    <ci>total-n1-nk</ci>
    <bind><csymbol cd="fns1">lambda</csymbol>
      <bvar><ci>x1</ci></bvar>
      <bvar><ci>xk</ci></bvar>
      <ci>expression-in-x1-xk</ci>
    </bind>
  </apply>
  <ci>x1</ci>
  <ci>xk</ci>
</apply>

もし束縛変数のいずれかが degree 修飾子を使っていなければ、代わりに <cn>1</cn> を degree の位置に使ってください。元の式が total degree 修飾子を使っていなければ、partialdiffdegree の第二引数は各 degree の和にしてください。例えば

<apply><csymbol cd="arith1">plus</csymbol>
  <ci>n1</ci> <ci>nk</ci>
</apply>

この規則により、次の式

<apply><partialdiff/>
  <bvar><ci>x</ci><degree><ci>n</ci></degree></bvar>
  <bvar><ci>y</ci><degree><ci>m</ci></degree></bvar>
  <apply><sin/>
    <apply><times/><ci>x</ci><ci>y</ci></apply>
  </apply>
</apply>

は次のように翻訳されます

<apply>
  <apply><csymbol cd="calculus1">partialdiffdegree</csymbol>
    <apply><csymbol cd="list1">list</csymbol>
      <ci>n</ci><ci>m</ci>
    </apply>
    <apply><csymbol cd="arith1">plus</csymbol>
      <ci>n</ci><ci>m</ci>
    </apply>
    <bind><csymbol cd="fns1">lambda</csymbol>
      <bvar><ci>x</ci></bvar>
      <bvar><ci>y</ci></bvar>
      <apply><csymbol cd="transc1">sin</csymbol>
        <apply><csymbol cd="arith1">times</csymbol>
          <ci>x</ci><ci>y</ci>
        </apply>
      </apply>
    </bind>
    <ci>x</ci>
    <ci>y</ci>
  </apply>
</apply>

F.2.2 積分

束縛変数や積分範囲が lowlimit/uplimit の対で与えられている場合の方向性などの曖昧さを解消するため、規則 Rewrite: int, Rewrite: defint および Rewrite: defint limits を用いて積分を 書き換えてください。

関数に適用される不定積分としての int 要素は、calculus1int シンボルに対応します。定積分として関数に適用される場合は defint シンボルに対応します。

束縛変数が存在しない場合、不定積分の厳密マークアップへの翻訳は単純です。束縛変数がある場合は次の規則を使用してください。

Rewrite: int

不定積分を変換します。ここで <ci>expression-in-x</ci> は束縛変数 <ci>x</ci> を含む任意の式です

<apply><int/>
  <bvar><ci>x</ci></bvar>
  <ci>expression-in-x</ci>
</apply>

は次の式に変換されます

<apply>
  <apply><csymbol cd="calculus1">int</csymbol>
    <bind><csymbol cd="fns1">lambda</csymbol>
      <bvar><ci>x</ci></bvar>
      <ci>expression-in-x</ci>
    </bind>
  </apply>
  <ci>x</ci>
</apply>

注意: 元の不定積分では x が束縛されていないため、統合された関数が変数 x に適用され、厳密な Content マークアップ式では明示的な自由変数として表現されます。これは、引数として int に渡される部分項では束縛されていても同様です。

例えば次の式

<apply><int/>
  <bvar><ci>x</ci></bvar>
  <apply><cos/><ci>x</ci></apply>
</apply>

の厳密等価は

<apply>
  <apply><csymbol cd="calculus1">int</csymbol>
    <bind><csymbol cd="fns1">lambda</csymbol>
      <bvar><ci>x</ci></bvar>
      <apply><cos/><ci>x</ci></apply>
    </bind>
  </apply>
  <ci>x</ci>
</apply>

束縛変数がない定積分の場合も翻訳は単純です。

例えば、微分形式 f を任意の領域 C 上で積分する式が次のように表されるとき

<apply><int/>
  <domainofapplication><ci>C</ci></domainofapplication>
  <ci>f</ci>
</apply>

は厳密 Content MathML では次のように等価です:

<apply><csymbol cd="calculus1">defint</csymbol><ci>C</ci><ci>f</ci></apply>

ただし、定積分のために積分領域を指定するために使用され得る他の種類の修飾子の翻訳に関しては、後続の規則に追加の注記がありますので参照してください。

束縛変数が存在する場合、一般には状況はより複雑であり、以下の規則が使用されます。

Rewrite: defint

定積分を変換します。ここで <ci>expression-in-x</ci> は束縛変数 <ci>x</ci> を含む任意の式です

<apply><int/>
  <bvar><ci>x</ci></bvar>
  <domainofapplication><ci>D</ci></domainofapplication>
  <ci>expression-in-x</ci>
</apply>

は次の式に変換されます

<apply><csymbol cd="calculus1">defint</csymbol>
  <ci>D</ci>
  <bind><csymbol cd="fns1">lambda</csymbol>
    <bvar><ci>x</ci></bvar>
    <ci>expression-in-x</ci>
  </bind>
</apply>

ただし、lowlimit/uplimit の対を持つ定積分は、積分範囲に向き(オリエンテーション)があるという直観を強く伴い、下端と上端を入れ替えると結果の符号が変わることに注意してください。これに対処するため、次の特別な翻訳規則を使用してください:

Rewrite: defint limits
<apply><int/>
  <bvar><ci>x</ci></bvar>
  <lowlimit><ci>a</ci></lowlimit>
  <uplimit><ci>b</ci></uplimit>
  <ci>expression-in-x</ci>
</apply>

ここで <ci>expression-in-x</ci> は変数 x に依存する式を意味し、次の式に翻訳されます:

<apply><csymbol cd="calculus1">defint</csymbol>
  <apply><csymbol cd="interval1">oriented_interval</csymbol>
    <ci>a</ci> <ci>b</ci>
  </apply>
  <bind><csymbol cd="fns1">lambda</csymbol>
    <bvar><ci>x</ci></bvar>
    <ci>expression-in-x</ci>
  </bind>
</apply>

oriented_interval シンボルは、積分の領域を指定するために interval 修飾子が使われる場合の翻訳にも用いられます。積分は左端から右端へ進むと仮定されます。

複数の被積分関数の場合も同様に扱われます。

condition 修飾子の使用も特別な扱いが必要です。特に、これは追加の束縛変数と直積を対応させることで多変数領域へ拡張されます。例えば次のように:

<bind><int/>
  <bvar><ci>x</ci></bvar>
  <bvar><ci>y</ci></bvar>
  <condition>
    <apply><and/>
      <apply><leq/><cn>0</cn><ci>x</ci></apply>
      <apply><leq/><ci>x</ci><cn>1</cn></apply>
      <apply><leq/><ci>y</ci><cn>0</cn></apply>
      <apply><leq/><ci>y</ci><cn>1</cn></apply>
    </apply>
  </condition>
  <apply><times/>
    <apply><power/><ci>x</ci><cn>2</cn></apply>
    <apply><power/><ci>y</ci><cn>3</cn></apply>
  </apply>
</bind>

の厳密等価は次のとおりです

<apply><csymbol cd="calculus1">defint</csymbol>
  <apply><csymbol cd="set1">suchthat</csymbol>
    <apply><csymbol cd="set1">cartesianproduct</csymbol>
      <csymbol cd="setname1">R</csymbol>
      <csymbol cd="setname1">R</csymbol>
    </apply>
    <apply><csymbol cd="logic1">and</csymbol>
      <apply><csymbol cd="arith1">leq</csymbol><cn>0</cn><ci>x</ci></apply>
      <apply><csymbol cd="arith1">leq</csymbol><ci>x</ci><cn>1</cn></apply>
      <apply><csymbol cd="arith1">leq</csymbol><cn>0</cn><ci>y</ci></apply>
      <apply><csymbol cd="arith1">leq</csymbol><ci>y</ci><cn>1</cn></apply>
    </apply>
    <bind><csymbol cd="fns11">lambda</csymbol>
      <bvar><ci>x</ci></bvar>
      <bvar><ci>y</ci></bvar>
      <apply><csymbol cd="arith1">times</csymbol>
        <apply><csymbol cd="arith1">power</csymbol><ci>x</ci><cn>2</cn></apply>
        <apply><csymbol cd="arith1">power</csymbol><ci>y</ci><cn>3</cn></apply>
      </apply>
    </apply>
  </apply>
</apply>

F.2.3 極限

規則 Rewrite: tendstoRewrite: limits condition を用いて極限を 書き換えてください。

tendsto を用いて極限を修飾する用法は、規則 Rewrite: limits condition に従って式を厳密な Content MathML に書き表すことで形式的に定義されます。本仕様では他のより慣用的な tendsto の用法は形式的に定義されていません。これらのケースを厳密な Content MathML に書き換える際には、tendsto を下記のように注釈付き識別子として書き換えるべきです。

Rewrite: tendsto
<tendsto/>

の厳密等価は

<semantics>
  <ci>tendsto</ci>
  <annotation-xml encoding="MathML-Content">
    <tendsto/>
  </annotation-xml>
</semantics>
Rewrite: limits condition
<apply><limit/>
  <bvar><ci>x</ci></bvar>
  <condition>
    <apply><tendsto/><ci>x</ci><cn>0</cn></apply>
  </condition>
  <ci>expression-in-x</ci>
</apply>

の厳密等価は

<apply><csymbol cd="limit1">limit</csymbol>
  <cn>0</cn>
  <csymbol cd="limit1">null</csymbol>
  <bind><csymbol cd="fns1">lambda</csymbol>
    <bvar><ci>x</ci></bvar>
    <ci>expression-in-x</ci>
  </bind>
</apply>

ここで <ci>expression-in-x</ci> は束縛変数を含む任意の式であり、選択するシンボル nulltendsto 要素の type 属性に依存することに注意してください(詳細は 4.3.10.4 Limits <limit/> を参照)。

F.2.4 総和と総積

総和と総積は 4.3.5.2 N-ary Sum <sum/> および 4.3.5.3 N-ary Product <product/> に記述された通りに書き換えてください。

明示的な束縛変数が使用されていない場合、修飾子を使用した式の書き換えに関する一般的な規則以上の特別な規則は不要です。しかし、束縛変数が使用される場合は、束縛変数の式を関数として書き換えるために lambda 構成を導入する必要があります。

Content MathML

<apply><sum/>
  <bvar><ci>i</ci></bvar>
  <lowlimit><cn>0</cn></lowlimit>
  <uplimit><cn>100</cn></uplimit>
  <apply><power/><ci>x</ci><ci>i</ci></apply>
</apply>

厳密な Content MathML 等価は次のとおりです

<apply><csymbol cd="arith1">sum</csymbol>
  <apply><csymbol cd="interval1">integer_interval</csymbol>
    <cn>0</cn>
    <cn>100</cn>
  </apply>
  <bind><csymbol cd="fns1">lambda</csymbol>
    <bvar><ci>i</ci></bvar>
    <apply><csymbol cd="arith1">power</csymbol><ci>x</ci><ci>i</ci></apply>
  </bind>
</apply>

明示的な束縛変数が使われていない場合、総積についても修飾子を使った式の一般的な書き換え規則以上の特別な規則は不要です。ただし、束縛変数が用いられる場合は、式を関数として書き換えるために lambda 構成を導入する必要があります。

Content MathML

<apply><product/>
  <bvar><ci>i</ci></bvar>
  <lowlimit><cn>0</cn></lowlimit>
  <uplimit><cn>100</cn></uplimit>
  <apply><power/><ci>x</ci><ci>i</ci></apply>
</apply>

厳密な Content MathML 等価は

<apply><csymbol cd="arith1">product</csymbol>
  <apply><csymbol cd="interval1">integer_interval</csymbol>
    <cn>0</cn>
    <cn>100</cn>
  </apply>
  <bind><csymbol cd="fns1">lambda</csymbol>
    <bvar><ci>i</ci></bvar>
    <apply><csymbol cd="arith1">power</csymbol><ci>x</ci><ci>i</ci></apply>
  </bind>
</apply>

F.2.5 根(ルート)

F.2.5 Roots に記述されている通りに根を書き換えてください。

厳密な Content マークアップでは、root シンボルは常に二つの引数を持ち、第二引数は取り出す根の次数を示します。

Content MathML

<apply><root/><ci>x</ci></apply>

厳密等価は

<apply><csymbol cd="arith1">root</csymbol>
  <ci>x</ci>
  <cn type="integer">2</cn>
</apply>

Content MathML

<apply><root/>
  <degree><ci type="integer">n</ci></degree>
  <ci>a</ci>
</apply>

厳密等価は

<apply><csymbol cd="arith1">root</csymbol>
  <ci>a</ci>
  <cn type="integer">n</cn>
</apply>

F.2.6 対数

4.3.7.9 Logarithm <log/> , <logbase> に記述されている通りに対数を 書き換えてください。

log を厳密な Content にマッピングするときは、第一引数で基数を指定し、第二引数に対してその基数での対数を返す関数を表す log シンボルを使用します。logbase が存在する場合はそれが基数を決定します。存在しない場合は、デフォルトの底 10 を厳密マークアップ中に明示的に与える必要があります。以下の例を参照してください。

<apply><plus/>
  <apply>
    <log/>
    <logbase><cn>2</cn></logbase>
    <ci>x</ci>
  </apply>
  <apply>
    <log/>
    <ci>y</ci>
  </apply>
</apply>

厳密等価:

<apply>
  <csymbol cd="arith1">plus</csymbol>
  <apply>
    <csymbol cd="transc1">log</csymbol>
    <cn>2</cn>
    <ci>x</ci>
  </apply>
  <apply>
    <csymbol cd="transc1">log</csymbol>
    <cn>10</cn>
    <ci>y</ci>
  </apply>
</apply>

F.2.7 モーメント

4.3.7.8 Moment <moment/>, <momentabout> に記述されている通りにモーメントを 書き換えてください。

厳密なマークアップに書き換えるとき、moment シンボル(s_data1 コンテント辞書由来)は、moment 要素が明示的な引数リストに適用される場合に使われます。分布に適用される場合は s_dist1moment シンボルを使用すべきです。どちらの演算子も最初の引数に次数、第二引数に点、続いてデータ集合または確率変数を取ります。

<apply><moment/>
  <degree><cn>3</cn></degree>
  <momentabout><ci>p</ci></momentabout>
  <ci>X</ci>
</apply>

厳密等価は

<apply><csymbol cd="s_dist1">moment</csymbol>
  <cn>3</cn>
  <ci>p</ci>
  <ci>X</ci>
</apply>

F.3 domainofapplicationに書き換える domainofapplication

修飾子をdomainofapplicationに書き換える。 これらの規則は、bvarや修飾子を用いるすべてのapply構成を、 一般的なdomainofapplication修飾子のみを用いる形に書き換える。

F.3.1 区間

修飾子がintervalおよび lowlimit/uplimit として与えられている場合、それらをinterval修飾子の書き換え規則に従って整数の区間に書き換える。

書き換え: interval 修飾子
<apply><ci>H</ci>
  <bvar><ci>x</ci></bvar>
  <lowlimit><ci>a</ci></lowlimit>
  <uplimit><ci>b</ci></uplimit>
  <ci>C</ci>
</apply>
<apply><ci>H</ci>
  <bvar><ci>x</ci></bvar>
  <domainofapplication>
    <apply><csymbol cd="interval1">interval</csymbol>
      <ci>a</ci>
      <ci>b</ci>
    </apply>
  </domainofapplication>
  <ci>C</ci>
</apply>

この変換で使われる記号は、ここで<ci>H</ci>で示される適用のヘッドに依存する。デフォルトでは interval が使用されるべきだが、ヘッド項の意味論が判明してより特定の区間記号を示す場合はそちらを用いるべきである。特に、いくつかの事前定義された Content MathML 要素はより具体的な区間記号と共に使われるべきである。ヘッドが int の場合は oriented_interval が使われる。ヘッド項が sum または product の場合は integer_interval を使うべきである。

上記のlowlimitおよびuplimit修飾子をdomainofapplication要素に置き換える技法は、interval修飾子を置き換える場合にも用いられることに注意する。intervalbvarに直後に続く場合にのみ修飾子として解釈される。他の文脈ではintervalは構築子として解釈され、F.4.2 Intervals, vectors, matricesを参照。

F.3.2 複数の condition

複数のcondition修飾子は、それらの論理積を取って単一の修飾子に書き換える。得られた複合的なconditionは、規則 書き換え: conditionに従ってdomainofapplicationに書き換えられる。

condition修飾子は、束縛変数をより大きなドメイン上の真偽値を返す式で制限し、与えられた値がその制限されたドメインに属するかどうかを指定する。condition要素は真理条件を表す単一の子要素を含む。複合条件は条件内でandのようなブール演算子を適用することによって形成される。

書き換え: condition

condition修飾子を用いる式をdomainofapplicationを用いる式に書き換えるには、

<bvar><ci>x1</ci></bvar>
<bvar><ci>xn</ci></bvar>
<condition><ci>P</ci></condition>

は次のように書き換えられる

<bvar><ci>x1</ci></bvar>
<bvar><ci>xn</ci></bvar>
<domainofapplication>
  <apply><csymbol cd="set1">suchthat</csymbol>
    <ci>R</ci>
    <bind><csymbol cd="fns1">lambda</csymbol>
      <bvar><ci>x1</ci></bvar>
      <bvar><ci>xn</ci></bvar>
      <ci>P</ci>
    </bind>
  </apply>
</domainofapplication>

もしapplyが(元々intervalまたはuplimit/lowlimitの対として表されていた)domainofapplicationを持つ場合、それが<ci>R</ci>として使われる。そうでない場合、<ci>R</ci>は束縛変数のtype属性によって決定される集合となる(4.2.2.2 Non-Strict uses of <ci>参照)。もしタイプが未指定であれば、翻訳は内容識別子<ci>R</ci>を用いて未指定のドメインを導入する。

F.3.3 複数の domainofapplication

複数のdomainofapplication修飾子は、指定されたドメインの共通部分(intersection)を取って単一の修飾子に書き換える。

F.4 コンテナのマークアップを正規化

F.4.1 集合とリスト

集合とリストは規則 書き換え: n-ary setlist domainofapplicationに従って書き換える。

setlist の使用法は他の n-ary コンストラクタと同じ形式に従いますが、Strict Content MathML に書き換える際には通常の規則の変種が用いられます。これは map 記号が必要な集合やリストを暗黙的に構成するため、この場合 apply_to_list は不要だからです。

これらのn項演算子を表す要素はスキーマパターンnary-setlist-constructor.classで指定される。

引数リストが明示的に与えられている場合は、規則書き換え: elementが適用される。

修飾子を使って引数のリストが指定されている場合、以下の規則が用いられる。

書き換え: n-ary setlist domainofapplication

次の形式の式。ここで <set/> は要素 set または list のいずれかであり、<ci>expression-in-x</ci> は束縛変数を含む任意の式である。

<set>
  <bvar><ci>x</ci></bvar>
  <domainofapplication><ci>D</ci></domainofapplication>
  <ci>expression-in-x</ci>
</set>

は次のように書き換えられる

<apply><csymbol cd="set1">map</csymbol>
  <bind><csymbol cd="fns1">lambda</csymbol>
    <bvar><ci>x</ci></bvar>
    <ci>expression-in-x</ci>
  </bind>
  <ci>D</ci>
</apply>

注意:もし <ci>D</ci> が既に適切な型の集合またはリストであり、<ci>expression-in-x</ci> から生成されるラムダ関数が恒等関数である場合、コンテナ要素全体は直接 <ci>D</ci> に書き換えられるべきである。

set の場合、使用する Content Dictionary と記号の選択は引数の type 属性の値に依存する。デフォルトでは set 記号が用いられるが、引数のいずれかに type 属性の値として multiset がある場合は multiset 記号が用いられる。もし type 属性が set または multiset 以外の値を持つ場合は set 記号を使用し、引数には規則 Rewrite: attributes に従ってその type 属性を書き換えることで型注釈を行うべきである。

F.4.2 区間、ベクトル、行列

区間、ベクトル、行列、および行列行は F.3.1 Intervals4.3.5.8 N-ary Matrix Constructors: <vector/>, <matrix/>, <matrixrow/> に記載されている方法で書き換えられる。任意の修飾子は既に domainofapplication に書き換えられており、後のステップでさらに書き換えられることに注意する。

Strict マークアップでは、interval 要素は interval1 コンテントディクショナリの4つの記号のいずれかに対応する。もし closureopen の値を持つなら intervalinterval_oo に対応する。値が closed の場合は interval_cc に対応し、値が open-closed の場合は interval_occlosed-open の場合は interval_co に対応する。

F.4.3 ラムダ式

ラムダ式は規則 書き換え: lambda および 書き換え: lambda domainofapplication に従って書き換える。

書き換え: lambda

もし lambda 要素が修飾子を含まない場合、ラムダ式は直接 bind 表現に翻訳される。

<lambda>
  <bvar><ci>x1</ci></bvar><bvar><ci>xn</ci></bvar>
  <ci>expression-in-x1-xn</ci>
</lambda>

は Strict Content MathML に次のように書き換えられる

<bind><csymbol cd="fns1">lambda</csymbol>
  <bvar><ci>x1</ci></bvar><bvar><ci>xn</ci></bvar>
  <ci>expression-in-x1-xn</ci>
</bind>
書き換え: lambda domainofapplication

もし lambda 要素が修飾子を含む場合、修飾子はdomainofapplicationに書き換えられ、それからラムダ式は lambda によって構成された関数項に翻訳され、指定されたドメインに対して restriction によって制限される。

<lambda>
  <bvar><ci>x1</ci></bvar><bvar><ci>xn</ci></bvar>
  <domainofapplication><ci>D</ci></domainofapplication>
  <ci>expression-in-x1-xn</ci>
</lambda>

は Strict Content MathML に次のように書き換えられる

<apply><csymbol cd="fns1">restriction</csymbol>
  <bind><csymbol cd="fns1">lambda</csymbol>
    <bvar><ci>x1</ci></bvar><bvar><ci>xn</ci></bvar>
    <ci>expression-in-x1-xn</ci>
  </bind>
  <ci>D</ci>
</apply>

F.4.4 区分定義関数

区分定義関数の書き換えは 4.3.10.5 Piecewise declaration <piecewise>, <piece>, <otherwise> に記載されているとおりである。

Strict Content MathML では、コンテナ要素である piecewisepiece、および otherwise は、同名のコンストラクタ記号を持つ piece1 CD の適用にマップされる。これら3つの要素(および対応する記号)は一緒に使われる点を除けば、Strict マークアップへのマッピングは直接的である。

Content MathML

<piecewise>
  <piece>
    <cn>0</cn>
    <apply><lt/><ci>x</ci><cn>0</cn></apply>
  </piece>
  <piece>
    <cn>1</cn>
    <apply><gt/><ci>x</ci><cn>1</cn></apply>
  </piece>
  <otherwise>
    <ci>x</ci>
  </otherwise>
</piecewise>

Strict Content MathML 相当

<apply><csymbol cd="piece1">piecewise</csymbol>
  <apply><csymbol cd="piece1">piece</csymbol>
    <cn>0</cn>
    <apply><csymbol cd="relation1">lt</csymbol><ci>x</ci><cn>0</cn></apply>
  </apply>
  <apply><csymbol cd="piece1">piece</csymbol>
    <cn>1</cn>
    <apply><csymbol cd="relation1">gt</csymbol><ci>x</ci><cn>1</cn></apply>
  </apply>
  <apply><csymbol cd="piece1">otherwise</csymbol>
    <ci>x</ci>
  </apply>
</apply>

F.5 domainofapplication修飾子を書き換える

domainofapplication修飾子を用いる演算子に対する特殊ケース規則を適用する。 このステップでは、4.3 Content MathML for Specific Structures で導入された演算子の特殊ケースを扱う。考慮すべき特殊ケースにはいくつかの分類がある。

F.5.1 n項/単項 演算子

minmaxmean などの n項/単項 演算子は、規則 書き換え: n-ary unary set書き換え: n-ary unary domainofapplication および 書き換え: n-ary unary single に従って書き換える。

書き換え: n-ary unary set

要素 <max/> が明示的な 0 個または 2 個以上の引数リスト <ci>a1</ci><ci>a2</ci><ci>an</ci> に適用されている場合、

<apply><max/><ci>a1</ci><ci>a2</ci><ci>an</ci></apply>

それは、要素の構文表に指定された記号を単項として集合(<csymbol cd="set1" name="set"/>を用いて構成)に適用する単項適用へ翻訳される。

<apply><csymbol cd="minmax1">max</csymbol>
  <apply><csymbol cd="set1">set</csymbol>
    <ci>a1</ci><ci>a2</ci><ci>an</ci>
  </apply>
</apply>

すべての MathML n項演算子と同様に、引数のリストは修飾子要素を使って暗黙的に指定される場合がある。これは Strict Content MathML では次の規則で表現される。これは 書き換え: n-ary domainofapplication に類似しているが、記号が構築された引数集合に直接適用され得る点と、apply_to_list を使う必要がない点で異なる。

書き換え: n-ary unary domainofapplication

次の形式の式。ここで <max/> は関連するクラスの任意の要素を表し、 <ci>expression-in-x</ci> は束縛変数を含む任意の式である。

<apply><max/>
  <bvar><ci>x</ci></bvar>
  <domainofapplication><ci>D</ci></domainofapplication>
  <ci>expression-in-x</ci>
</apply>

は次のように書き換えられる

<apply><csymbol cd="minmax1">max</csymbol>
  <apply><csymbol cd="set1">map</csymbol>
    <bind><csymbol cd="fns1">lambda</csymbol>
      <bvar><ci>x</ci></bvar>
      <ci>expression-in-x</ci>
    </bind>
    <ci>D</ci>
  </apply>
</apply>

注意:もし <ci>D</ci> が既に集合であり、<ci>expression-in-x</ci> から作られるラムダ関数が恒等関数である場合、domainofapplication項は直接 <ci>D</ci> として書き換えられるべきである。

要素が単一の引数に適用されている場合、set 記号は使われず、記号は引数に直接適用される。

書き換え: n-ary unary single

要素 <max/> が単一の引数に適用されている場合、

<apply><max/><ci>a</ci></apply>

それは要素の構文表に指定された記号の単項適用に翻訳される。

<apply><csymbol cd="minmax1">max</csymbol> <ci>a</ci> </apply>

注意:以前のバージョンの MathML はこのクラスの要素の解釈について明確でなく、例えば max(X) が単位集合への自明な適用か、集合 X の値の最大を意味するかが未定義であった。規則 書き換え: n-ary unary single を適用できない場合、引数がスカラーであることを検出した応用は誤り回復として規則 書き換え: n-ary unary set を用いることがある。さらに、統計関数の場合、使用する Content Dictionary は引数を明示的なデータ集合として解釈するか、分布を表す確率変数として解釈するかによって異なる。

F.5.2 量化子

forall および exists の量化子が domainofapplication と共に用いられる場合、それらを含意や論理積を用いる式に書き換える規則 書き換え: quantifier に従って書き換える。

もし bind と共に修飾子がなく使われるなら、Strict Content MathML における解釈は単純である。一般に、apply や修飾子と共に使われる場合の解釈は次の規則によって与えられる。

書き換え: quantifier

次の形式の式で、<exists/> はクラス quantifier の要素を表し、<ci>expression-in-x</ci> は束縛変数を含む任意の式であるとする。

<apply><exists/>
  <bvar><ci>x</ci></bvar>
  <domainofapplication><ci>D</ci></domainofapplication>
  <ci>expression-in-x</ci>
</apply>

は次の式に書き換えられる

<bind><csymbol cd="quant1">exists</csymbol>
  <bvar><ci>x</ci></bvar>
  <apply><csymbol cd="logic1">and</csymbol>
    <apply><csymbol cd="set1">in</csymbol><ci>x</ci><ci>D</ci></apply>
    <ci>expression-in-x</ci>
  </apply>
</bind>

ここで記号 <csymbol cd="quant1">exists</csymbol><csymbol cd="logic1">and</csymbol> は要素の構文表に指定されている通りである。(exists の場合の追加の記号は andforall の場合は implies である。)もし domainofapplication が存在しない場合、論理積は不要であり翻訳は直接的である。

forall 要素が condition 修飾子と共に使われる場合、strict 等価は含意を用いて構築される。これは規則 書き換え: quantifier に従う。したがって

<bind><forall/>
  <bvar><ci>p</ci></bvar>
  <bvar><ci>q</ci></bvar>
  <condition>
    <apply><and/>
      <apply><in/><ci>p</ci><rationals/></apply>
      <apply><in/><ci>q</ci><rationals/></apply>
      <apply><lt/><ci>p</ci><ci>q</ci></apply>
    </apply>
  </condition>
  <apply><lt/>
    <ci>p</ci>
    <apply><power/><ci>q</ci><cn>2</cn></apply>
  </apply>
</bind>

は次のように翻訳される

<bind><csymbol cd="quant1">forall</csymbol>
  <bvar><ci>p</ci></bvar>
  <bvar><ci>q</ci></bvar>
  <apply><csymbol cd="logic1">implies</csymbol>
    <apply><csymbol cd="logic1">and</csymbol>
      <apply><csymbol cd="set1">in</csymbol>
        <ci>p</ci>
        <csymbol cd="setname1">Q</csymbol>
      </apply>
      <apply><csymbol cd="set1">in</csymbol>
        <ci>q</ci>
        <csymbol cd="setname1">Q</csymbol>
      </apply>
      <apply><csymbol cd="relation1">lt</csymbol><ci>p</ci><ci>q</ci></apply>
    </apply>
    <apply><csymbol cd="relation1">lt</csymbol>
      <ci>p</ci>
      <apply><csymbol cd="arith1">power</csymbol>
        <ci>q</ci>
        <cn>2</cn>
      </apply>
    </apply>
  </apply>
</bind>

F.5.3 積分

domainofapplication 要素(bvarの有無を問わず)と共に用いられる積分は、規則 書き換え: int および 書き換え: defint に従って書き換えられる。F.2.2 Integrals を参照。

F.5.4 総和と積

domainofapplication 要素(bvarの有無を問わず)と共に用いられる総和および積は、 4.3.5.2 N-ary Sum <sum/> および 4.3.5.3 N-ary Product <product/> に記載された方法で書き換えられる。 F.2.4 Sums and Products を参照。

F.6 domainofapplicationを除去

この段階では、任意の apply は高々一つの domainofapplication 子を持ち、特殊ケースは対処済みである。domainofapplication は Strict Content MathML ではないため、次のいずれかの形に書き換えられる。

上記の規則を適用することにより、intervalconditionuplimit および lowlimit を用いる表現はすべて domainofapplication のみを使う形に書き換えられる。domainofapplication が得られたら、Strict マークアップへの最終的な対応付けは次の規則を用いて行われる。

F.6.1 制限関数

applybvar 子を含まない場合は、規則 書き換え: restriction に従って制限関数の適用に変換される。

書き換え: restriction

domainofapplication 修飾子(束縛変数を含まない apply 要素で表現された)で修飾された関数の適用は、 restriction 記号で構成される関数項の適用に変換される。

<apply><ci>F</ci>
  <domainofapplication>
    <ci>C</ci>
  </domainofapplication>
  <ci>a1</ci>
  <ci>an</ci>
</apply>

は次のように書ける:

<apply>
  <apply><csymbol cd="fns1">restriction</csymbol>
    <ci>F</ci>
    <ci>C</ci>
  </apply>
  <ci>a1</ci>
  <ci>an</ci>
</apply>

F.6.2 リスト上の述語

関係と共に用いられる場合は、規則 書き換え: n-ary relations および 書き換え: n-ary relations bvar に従って predicate_on_list 記号の適用に変換される。

書き換え: n-ary relations

次の形の式は

<apply><lt/>
  <ci>a</ci><ci>b</ci><ci>c</ci><ci>d</ci>
</apply>

Strict Content MathML に書き換えると

<apply><csymbol cd="fns2">predicate_on_list</csymbol>
  <csymbol cd="reln1">lt</csymbol>
  <apply><csymbol cd="list1">list</csymbol>
    <ci>a</ci><ci>b</ci><ci>c</ci><ci>d</ci>
  </apply>
</apply>
書き換え: n-ary relations bvar

次の形の式は

<apply><lt/>
  <bvar><ci>x</ci></bvar>
  <domainofapplication><ci>R</ci></domainofapplication>
  <ci>expression-in-x</ci>
</apply>

ここで <ci>expression-in-x</ci> は束縛変数を含む任意の式であり、次のように Strict Content MathML に書き換えられる。

<apply><csymbol cd="fns2">predicate_on_list</csymbol>
  <csymbol cd="reln1">lt</csymbol>
  <apply><csymbol cd="list1">map</csymbol>
    <ci>R</ci>
    <bind><csymbol cd="fns1">lambda</csymbol>
      <bvar><ci>x</ci></bvar>
      <ci>expression-in-x</ci>
    </bind>
  </apply>
</apply>

上記の規則は nary-reln.class および nary-set-reln.class に属するすべての記号に適用される。後者の場合、使用する Content Dictionary の選択は記号上の type 属性に依存し、デフォルトは set1 だが、type=multiset の場合は multiset1 を使用すべきである。

F.6.3 リストへの適用

一般的な n 項演算子についての一般規則 書き換え: n-ary domainofapplication に従って、apply_to_list 記号を用いる構成に書き換えられる。

引数リストが明示的に与えられている場合は、規則 書き換え: element が適用される。

修飾子要素の使用は、Strict Content MathML では明示的に関数を引数のリストに適用する形で apply_to_list 記号を用いて表現される。以下の規則は domainofapplication 修飾子のみを考慮する(他の修飾子は前述のように domainofapplication に書き換えられる可能性があるため)。

書き換え: n-ary domainofapplication

次の形の式(ここで <union/> は関連するクラスの任意の要素を表し、<ci>expression-in-x</ci> は束縛変数を含む任意の式である)

<apply><union/>
  <bvar><ci>x</ci></bvar>
  <domainofapplication><ci>D</ci></domainofapplication>
  <ci>expression-in-x</ci>
</apply>

は次のように書き換えられる

<apply><csymbol cd="fns2">apply_to_list</csymbol>
  <csymbol cd="set1">union</csymbol>
  <apply><csymbol cd="list1">map</csymbol>
    <bind><csymbol cd="fns1">lambda</csymbol>
      <bvar><ci>x</ci></bvar>
      <ci>expression-in-x</ci>
    </bind>
    <ci>D</ci>
  </apply>
</apply>

上記の規則は列挙されたクラスのすべての記号に適用される。nary-set.class の場合、使用する Content Dictionary の選択は引数の type 属性に依存し、デフォルトは set1 だが、type=multiset の場合は multiset1 を使用すべきである。

vector のような nary-constructor.class のメンバーは、引数や修飾子が要素の子として与えられる constructor 構文を使う点に注意。これらのケースでは、上述の規則が対応する構文上の修正を伴って適用される。

F.6.4 such that(~であるような)

suchthat 記号を用いる構成へは、束縛変数を持つ apply に対して規則 書き換え: apply bvar domainofapplication に従って変換される。

一般に、束縛変数および(場合によっては)domainofapplication を含む適用は次の規則を用いて書き換えられる。この規則はドメインを適用の第一位置引数にし、ラムダ記号を用いて変数束縛を符号化する。特定のクラスの演算子には下記のような代替規則がある。

書き換え: apply bvar domainofapplication

束縛変数と domainofapplication を含む Content MathML 式の例

        <apply><ci>H</ci>
          <bvar><ci>v1</ci></bvar>
...
          <bvar><ci>vn</ci></bvar>
          <domainofapplication><ci>D</ci></domainofapplication>
          <ci>A1</ci>
...
          <ci>Am</ci>
        </apply>

は次のように書き換えられる

        <apply><ci>H</ci>
          <ci>D</ci>
          <bind><csymbol cd="fns1">lambda</csymbol>
            <bvar><ci>v1</ci></bvar>
...
            <bvar><ci>vn</ci></bvar>
            <ci>A1</ci>
          </bind>
...
          <bind><csymbol cd="fns1">lambda</csymbol>
            <bvar><ci>v1</ci></bvar>
...
            <bvar><ci>vn</ci></bvar>
            <ci>Am</ci>
          </bind>
        </apply>

domainofapplication 修飾子が存在しない場合は、<ci>D</ci> 子は省略される。

F.7 トークン要素の書き換え

非 Strict なトークン要素を次のように書き換える

F.7.1 数値

cn 要素で表され、type 属性が e-notationrationalcomplex-cartesiancomplex-polarconstant のいずれかである数値は、規則 書き換え: cn sep書き換え: cn based_integer および 書き換え: cn constant に従って Strict な cn に書き換えられる。

書き換え: cn sep

cnsep 子がある場合、間のテキストは cn 要素として書き換えられることがある。もし sep を持つ cnbase 属性がある場合、これは結果の各 cn 引数にコピーされる(下例参照)。

<cn type="rational" base="b">n<sep/>d</cn>

は次のように書き換えられる

<apply><csymbol cd="nums1">rational</csymbol>
  <cn type="integer" base="b">n</cn>
  <cn type="integer" base="b">d</cn>
</apply>

結果で使われる記号は type 属性に応じて次の表のようになる:

type 属性 OpenMath 記号
e-notation bigfloat
rational rational
complex-cartesian complex_cartesian
complex-polar complex_polar

注意:bigfloat の場合、記号は 3 つの引数を取り、指数の基数を示すために <cn type="integer">10</cn> を第二引数として挿入すべきである。

もし type 属性が異なる値であるか、または <sep/> 要素が複数ある場合、間の式は上と同様に変換されるが、アプリケーションのヘッドに対してはシステム依存の記号選択を用いる必要がある。

もし base 属性が使われている場合、結果の式は Strict Content MathML ではなくなり、各引数は再帰的に処理される必要がある。

書き換え: cn based_integer

base 属性が 10 以外の cn 要素は次のように書き換えられる。(base 属性が 10 の場合は単に削除される。)

<cn type="integer" base="16">FF60</cn>
<apply><csymbol cd="nums1">based_integer</csymbol>
  <cn type="integer">16</cn>
  <cs>FF60</cs>
</apply>

元の要素が integer を指定しているか、あるいは type 属性がないが要素の内容が英数字 [a-zA-Z0-9] と空白のみで構成される場合、結果のアプリケーションのヘッドに使うべき記号は based_integer である(上例参照)。そうでなければ based_float を使うべきである。

書き換え: cn constant

Strict Content MathML では、定数は csymbol 要素を用いて表現されるべきである。多くの重要な定数は nums1 コンテンツディクショナリに定義されている。次の形の式は

<cn type="constant">c</cn>

Strict Content MathML では次のように等価である:

<csymbol cd="nums1">c2</csymbol>

ここで c2 は以下の表に従って c に対応する。

内容 説明 OpenMath 記号
U+03C0 (&pi;) 三角法で通常用いられる π:およそ 3.141592653... pi
U+2147 (&ExponentialE; or &ee;) 自然対数の底:およそ 2.718281828... e
U+2148 (&ImaginaryI; or &ii;) -1 の平方根 i
U+03B3 (&gamma;) オイラーの定数:およそ 0.5772156649... gamma
U+221E (&infin; or &infty;) 無限大。適切な解釈は文脈による infinity

F.7.2 トークンの表現(プレゼンテーション)

cicsymbol、またはプレゼンテーション MathML を含む cn を、規則 書き換え: cn presentation mathml書き換え: ci presentation mathml および csymbol に対する類似の規則を用いて semantics 要素に書き換える。

書き換え: cn presentation mathml

もし cn が Presentation MathML マークアップを含む場合、それは上記規則の変形を用いて、コンストラクタの引数が与えられた Presentation MathML を注釈として持つ ci 要素となる形で Strict MathML に書き換えられることがある。

非テキスト内容を持つ cn 式の例:

<cn type="rational"><mi>P</mi><sep/><mi>Q</mi></cn>

は次のように Strict Content MathML に変換される:

<apply><csymbol cd="nums1">rational</csymbol>
  <semantics>
    <ci>p</ci>
    <annotation-xml encoding="MathML-Presentation">
      <mi>P</mi>
    </annotation-xml>
  </semantics>
  <semantics>
    <ci>q</ci>
    <annotation-xml encoding="MathML-Presentation">
      <mi>Q</mi>
    </annotation-xml>
  </semantics>
</apply>

識別子名 p と q(テキスト文字列でなければならない)は、Presentation MathML の内容からシステム定義の方法で決定されるべきである。例えば上の例のように要素の文字データを取り、要素マークアップを無視する方法などが考えられる。こうした書き換えを行うシステムは、同じ Presentation MathML 内容を使う構成が同一の ci を持つ semantics 要素へ書き換えられること、逆に異なる MathML を使う構成は異なる識別子名へ書き換えられること(Presentation MathML が同じ文字データであっても)を保証すべきである。

cn が Strict Content MathML で許されない文字データ(例えば非数字のアルファベット文字など)を含む場合、関連する特別ケースとして、これは概念的に Presentation マークアップを含む cn と同様に扱われる。しかし得られる注釈に追加のレンダリング情報が含まれないため、そのような場合は semantics 構成ではなく直接 ci 要素へ書き換えるべきである。

ci 要素は Unicode にまだ存在しない文字を参照するために mglyph 要素を含めることができるか、レンダリングに使われる一般的なプレゼンテーション構成(3.1.8 Summary of Presentation Elements を参照)を含むことができる(参照:4.1.2 Content Expressions)。

書き換え: ci presentation mathml

非テキスト内容を持つ ci 式の例:

<ci><mi>P</mi></ci>

は次のように Strict Content MathML に変換される:

<semantics>
  <ci>p</ci>
  <annotation-xml encoding="MathML-Presentation">
    <mi>P</mi>
  </annotation-xml>
</semantics>

識別子名 p(テキスト文字列である必要がある)は Presentation MathML 内容からシステム定義のやり方で決定されるべきであり、前述と同様に同一の Presentation MathML を持つ構成は同一の ci に書き換えられるようにする必要がある。

次の例は視覚的には C 2 と表示され、内容的には単一の記号として扱われる原子的な記号を符号化している。

<ci>
  <msup><mi>C</mi><mn>2</mn></msup>
</ci>

Strict Content MathML の等価は次のとおりである:

<semantics>
  <ci>C2</ci>
  <annotation-xml encoding="MathML-Presentation">
    <msup><mi>C</mi><mn>2</mn></msup>
  </annotation-xml>
</semantics>

F.8 演算子を書き換える

残るすべての、4.3 特定構造のための Content MathML で定義された演算子を、規則 書き換え: element によって構文表で特定された記号を参照する csymbol に書き換える。

書き換え: element

例えば、

<plus/>

は Strict 形式に相当する

<csymbol cd="arith1">plus</csymbol>

各演算子要素の説明で述べたように、適切な記号の選択を決めるために特殊な規則を要する演算子がある。特に注目すべき場合は次の通りである:

  1. selector 演算子については引数の順序を書き換える必要があり、記号は引数の型に依存する。

  2. minus 演算子の記号の選択は引数の数に依存する(minus または minus)。

  3. いくつかの集合演算子の記号の選択は、引数の type の値に依存する。

  4. いくつかの統計演算子の記号の選択は、引数の型の値に依存する。

  5. emptyset 要素の記号の選択は文脈に依存する。

F.8.1 minus 演算子の書き換え

minus 要素は 単項算術演算子(例: - x を表す)として、または 二項算術演算子(例: x- y を表す)として使用できる。

引数が1つで使われる場合、minusunary_minus 記号に対応する。

引数が2つで使われる場合、minusminus 記号に対応する。

どちらの場合も、Strict Content マークアップへの翻訳は 書き換え: element に記載されているように直接的であり、実際の使用法を反映する記号を選ぶだけでよい。

F.8.2 集合演算子の書き換え

Strict Content マークアップに翻訳する際、もし typemultiset の値を持つなら、代わりに multiset1in 記号を使用すべきである。

Strict Content マークアップに翻訳する際、もし typemultiset の値を持つなら、代わりに multiset1notin 記号を使用すべきである。

Strict Content マークアップに翻訳する際、もし typemultiset の値を持つなら、代わりに multiset1subset 記号を使用すべきである。

Strict Content マークアップに翻訳する際、もし typemultiset の値を持つなら、代わりに multiset1prsubset 記号を使用すべきである。

Strict Content マークアップに翻訳する際、もし typemultiset の値を持つなら、代わりに multiset1notsubset 記号を使用すべきである。

Strict Content マークアップに翻訳する際、もし typemultiset の値を持つなら、代わりに multiset1notprsubset 記号を使用すべきである。

Strict Content マークアップに翻訳する際、もし typemultiset の値を持つなら、代わりに multiset1setdiff 記号を使用すべきである。

Strict Content マークアップに翻訳する際、もし typemultiset の値を持つなら、代わりに multiset1size 記号を使用すべきである。

F.8.3 統計演算子の書き換え

mean 要素が明示的な引数リストに適用される場合、Strict Content マークアップへの翻訳は直接的であり、s_data1 コンテンツディクショナリの mean 記号を使用する(書き換え: element参照)。分布に適用される場合は、s_dist1mean 記号を使用すべきである。修飾子付きの場合は同様の注意事項とともに 書き換え: n-ary domainofapplication を用いる。

sdev 要素が明示的な引数リストに適用される場合、Strict Content マークアップへの翻訳は直接的であり、s_data1sdev 記号を使用する(書き換え: element参照)。分布に適用される場合は、s_dist1sdev 記号を使用すべきである。修飾子付きの場合は同様に 書き換え: n-ary domainofapplication を用いる。

variance 要素が明示的な引数リストに適用される場合、Strict Content マークアップへの翻訳は直接的であり、s_data1variance 記号を使用する(書き換え: element参照)。分布に適用される場合は、s_dist1variance 記号を使用すべきである。修飾子付きの場合は同様に 書き換え: n-ary domainofapplication を用いる。

median 要素が明示的な引数リストに適用される場合、Strict Content マークアップへの翻訳は直接的であり、s_data1median 記号を使用する(書き換え: element参照)。

mode 要素が明示的な引数リストに適用される場合、Strict Content マークアップへの翻訳は直接的であり、s_data1mode 記号を使用する(書き換え: element参照)。

F.8.4 emptyset 演算子の書き換え

場合によっては文脈から emptysetmultiset1 コンテンツディクショナリの emptyset 記号に対応することが明らかなことがある。しかし、著者が明示的にそれを示す方法は注釈以外にないため、常に set1emptyset 記号へ翻訳することも許容される。

F.9 属性を書き換える

F.9.1 type 属性の書き換え

この時点で、type を受け入れるすべての要素(cicsymbol を除く)は、type 属性を持たない Strict Content マークアップの等価表現に書き換えられているはずであり、 型情報は演算子記号の選択に反映されている。残っている ci および csymbol 要素で type 属性を持つものは、規則 書き換え: ci type annotation および 書き換え: csymbol type annotation に従って semantics を用いた厳密な式に書き換える。

書き換え: ci type annotation

Strict Content では type 属性はセマンティック帰属(semantic attribution)によって表される。次の形の式

<ci type="T">n</ci>

は次のように書き換えられる

<semantics>
  <ci>n</ci>
  <annotation-xml cd="mathmltypes" name="type" encoding="MathML-Content">
    <ci>T</ci>
  </annotation-xml>
</semantics>

非 Strict の使用では csymboltype 属性の使用を許す。

書き換え: csymbol type annotation

Strict Content では type 属性はセマンティック帰属によって表される。次の形の式

<csymbol type="T">symbolname</csymbol>

は次のように書き換えられる

<semantics>
  <csymbol>symbolname</csymbol>
  <annotation-xml cd="mathmltypes" name="type" encoding="MathML-Content">
    <ci>T</ci>
  </annotation-xml>
</semantics>

F.9.2 definitionURL および encoding 属性の書き換え

もし definitionURL および encoding 属性が csymbol 要素上でコンテンツディクショナリへの参照として解釈できる場合(詳細は 4.2.3.2 <csymbol> の非 Strict 用法 を参照)、それらを書き換えて代わりに cd 属性でコンテンツディクショナリを参照するようにする。

F.9.3 属性の書き換え

Strict マークアップで許されない属性を持つ要素は、規則 書き換え: attributes に従って、これらの属性を持たない要素を第一子とし、属性を annotation 要素として持つ semantics 構成に書き換える。

cninterval のような多くの Content MathML 要素は、表す対象の意味を特殊化する属性を許す。これらの場合、個別に与えられた特別な書き換え規則が 4.3 特定構造のための Content MathML に記載されている。しかし、Content MathML 要素は すべての MathML 要素で共有される属性 を受け入れ、文脈によっては他の XML 名前空間からの属性を含むこともある。そのような属性は Strict Content マークアップでは別の形に書き換えられねばならない。

書き換え: attributes

例えば、

<ci class="foo" xmlns:other="http://example.com" other:att="bla">x</ci>

は次のように書き換えられる

 <semantics>
   <ci>x</ci>
   <annotation cd="mathmlattr"
name="class" encoding="text/plain">foo</annotation>
     <annotation-xml cd="mathmlattr" name="foreign" encoding="MathML-Content">
       <apply><csymbol cd="mathmlattr">foreign_attribute</csymbol>
         <cs>http://example.com</cs>
         <cs>other</cs>
         <cs>att</cs>
         <cs>bla</cs>
       </apply>
     </annotation-xml>
   </semantics>

Strict Content MathML で許されない MathML 属性については、属性用の記号を提供する内容ディクショナリ mathmlattr が参照される。

G. MathML 索引

G.1 要素の索引

a
2.1.6 すべての MathML 要素で共有される属性 3.1.8.2 一般的なレイアウト・スキーマ 3.3.1.1 説明 7.4.4 リンク
abs
4.3.7.2 単項算術演算子: <factorial/>, <abs/>, <conjugate/>, <arg/>, <real/>, <imaginary/>, <floor/>, <ceiling/>, <exp/>, <minus/>, <root/>
and
4.3.5.5 N項論理演算子: <and/>, <or/>, <xor/> F.3.2 複数の条件
annotation
2.1.7 入力における空白の折りたたみ 2.2.1 属性 4.1.5 厳密な Content MathML 4.2.3.1 <csymbol> の厳密な使用法 4.2.8 semantics による帰属 6. 注釈付き MathML: semantics 6.1 注釈キー 6.4 注釈参照 6.5.1 説明 6.6.1 説明 6.6.2 属性 6.7.3 HTML 文書での annotation-xml の使用 6.8.2 表示マークアップ内のコンテンツ・マークアップ 7.1 はじめに 7.3 MathML の転送 7.3.2 転送時の推奨動作 7.3.3 解説 F. 厳密な Content MathML 変換 F.9.3 属性の書き換え
annotation-xml
2.2.1 属性 3.8 Semantics と表示 4.1.5 厳密な Content MathML 4.2.3.1 <csymbol> の厳密な使用法 4.2.8 semantics による帰属 4.2.10 エンコードされたバイト <cbytes> 6. 注釈付き MathML: semantics 6.1 注釈キー 6.2 代替表現 6.4 注釈参照 6.5.1 説明 6.7.1 説明 6.7.2 属性 6.7.3 HTML 文書での annotation-xml の使用 6.8.2 表示マークアップ内のコンテンツ・マークアップ 6.9.1 トップレベルの並列マークアップ 6.9.2 参照による並列マークアップ 7.1 はじめに 7.2.4 MathML エンコーディング名 7.3 MathML の転送 7.3.2 転送時の推奨動作 7.3.3 解説 7.4 他の形式との組み合わせ 7.4.3 MathML と HTML の混在 7.4.5 MathML とグラフィック
apply
4.1.3 式の概念 4.1.5 厳密な Content MathML 4.2.1 数値 <cn> 4.2.5.1 厳密な Content MathML 4.2.7.2 非巡回性の制約 4.3.1 コンテナ・マークアップ 4.3.2 <apply> による束縛 4.3.5 N項演算子 4.3.5.1 N項算術演算子: <plus/>, <times/>, <gcd/>, <lcm/> 4.3.5.2 N項和 <sum/> 4.3.5.3 N項積 <product/> 4.3.5.5 N項論理演算子: <and/>, <or/>, <xor/> 4.3.5.7 N項集合演算子: <union/>, <intersect/>, <cartesianproduct/> 4.3.5.12 N項/単項算術演算子: <min/>, <max/> 4.3.8.3 偏微分 <partialdiff/> 7.4 他の形式との組み合わせ F. 厳密な Content MathML 変換 F.1 非厳密な bind の書き換え F.3 domainofapplication への書き換え F.3.2 複数の条件 F.5.2 量化子 F.6 domainofapplication の除去 F.6.1 制限関数 F.6.3 リストへの適用 F.6.4 such that(~であるような)
approx
4.3.6.3 二項関係: <neq/>, <approx/>, <factorof/>, <tendsto/>
arg
4.3.7.2 単項算術演算子: <factorial/>, <abs/>, <conjugate/>, <arg/>, <real/>, <imaginary/>, <floor/>, <ceiling/>, <exp/>, <minus/>, <root/>
bind
4.1.4 変数束縛 4.1.5 厳密な Content MathML 4.2.6.1 束縛 4.2.6.3 束縛変数の改名 4.2.7.3 構造共有と束縛 4.3.1.2 束縛コンストラクタのためのコンテナ・マークアップ 4.3.2 <apply> による束縛 4.3.5 N項 演算子 F. 厳密な Content MathML 変換 F.1 非厳密な bind の書き換え F.4.3 ラムダ式 F.5.2 量化子
bvar
4.1.4 変数束縛 4.1.5 厳密な Content MathML 4.2.6.1 束縛 4.2.6.2 束縛変数 4.2.6.3 束縛変数の改名 4.2.7.3 構造共有と束縛 4.3.1.2 束縛コンストラクタのためのコンテナ・マークアップ 4.3.2 <apply> による束縛 4.3.3 修飾子 4.3.3.1 <domainofapplication>、<interval>、<condition>、<lowlimit>、<uplimit> の使用 4.3.3.2 <degree> の使用 4.3.5.2 N項和 <sum/> 4.3.5.3 N項積 <product/> 4.3.8.2 微分 <diff/> 4.3.8.3 偏微分 <partialdiff/> 4.3.10.2 ラムダ <lambda> 4.3.10.3 区間 <interval> 4.3.10.4 極限 <limit/> 6.8.2 表示マークアップ内のコンテンツ・マークアップ F. 厳密な Content MathML 変換 F.1 非厳密な bind の書き換え F.2.1 導関数 F.3 domainofapplication への書き換え F.3.1 区間 F.5.3 積分 F.5.4 総和と積 F.6.1 制限関数
card
4.3.7.5 単項集合演算子: <card/>
cartesianproduct
4.3.5.7 N項集合演算子: <union/>, <intersect/>, <cartesianproduct/>
cbytes
4.1.5 厳密な Content MathML 4.2.10 エンコードされたバイト <cbytes>
ceiling
4.3.7.2 単項算術演算子: <factorial/>, <abs/>, <conjugate/>, <arg/>, <real/>, <imaginary/>, <floor/>, <ceiling/>, <exp/>, <minus/>, <root/>
cerror
4.1.5 厳密な Content MathML 4.2.9 エラー・マークアップ <cerror>
ci
2.1.7 入力における空白の折りたたみ 3.2.3.1 説明 4.1.3 式の概念 4.1.5 厳密な Content MathML 4.2.2 内容識別子 <ci> 4.2.2.1 <ci> の厳密な使用法 4.2.2.2 <ci> の非厳密な使用法 4.2.2.3 内容識別子のレンダリング 4.2.3.2 <csymbol> の非厳密な使用法 4.2.6.2 束縛変数 6.8.1 表示マークアップ内のコンテンツ・マークアップ F. 厳密な Content MathML 変換 F.7.2 トークンの表現 F.9.1 type 属性の書き換え
cn
2.1.7 入力における空白の折りたたみ 3.2.4.1 説明 4.1.3 式の概念 4.1.5 厳密な Content MathML 4.2.1 数値 <cn> 4.2.1.1 <cn> と <sep/> 表現の数値のレンダリング 4.2.1.2 <cn> の厳密な使用法 4.2.1.3 <cn> の非厳密な使用法 4.2.2.1 <ci> の厳密な使用法 6.8.1 表示マークアップ内のコンテンツ・マークアップ F. 厳密な Content MathML 変換 F.7.1 数値 F.7.2 トークンの表現 F.9.3 属性の書き換え
codomain
4.3.7.4 単項関数演算子: <inverse/>, <ident/>, <domain/>, <codomain/>, <image/>, <ln/>,
compose
4.3.5.4 N項関数演算子: <compose/>
condition
4.3.3 修飾子 4.3.3.1 <domainofapplication>、<interval>、<condition>、<lowlimit>、<uplimit> の使用 4.3.10.1 量化子: <forall/>, <exists/> 4.3.10.4 極限 <limit/> 6.8.2 表示マークアップ内のコンテンツ・マークアップ F. 厳密な Content MathML 変換 F.2.2 積分 F.3.2 複数の条件 F.5.2 量化子 F.6 domainofapplication の除去
conjugate
4.3.7.2 単項算術演算子: <factorial/>, <abs/>, <conjugate/>, <arg/>, <real/>, <imaginary/>, <floor/>, <ceiling/>, <exp/>, <minus/>, <root/>
cs
2.1.7 入力における空白の折りたたみ 4.1.5 厳密な Content MathML 4.2.4 文字列リテラル <cs>
csymbol
2.1.7 入力における空白の折りたたみ 2.2.1 属性 4.1.3 式の概念 4.1.5 厳密な Content MathML 4.1.6 コンテンツ辞書 4.2.3 コンテンツ記号 <csymbol> 4.2.3.1 <csymbol> の厳密な使用法 4.2.3.2 <csymbol> の非厳密な使用法 4.2.3.3 記号のレンダリング 4.2.9 エラー・マークアップ <cerror> 6.8.1 表示マークアップ内のコンテンツ・マークアップ E.3 Content MathML 演算子 F. 厳密な Content MathML 変換 F.7.1 数値 F.7.2 トークンの表現 F.8 演算子の書き換え F.9.1 type 属性の書き換え F.9.2 definitionURL と encoding 属性の書き換え
curl
4.3.7.7 単項ベクトル解析演算子: <divergence/>, <grad/>, <curl/>, <laplacian/>
declare
4. Content Markup の変更
degree
4.3.3 修飾子 4.3.3.2 <degree> の使用 4.3.7.2 単項算術演算子: <factorial/>, <abs/>, <conjugate/>, <arg/>, <real/>, <imaginary/>, <floor/>, <ceiling/>, <exp/>, <minus/>, <root/> 4.3.7.8 モーメント <moment/>, <momentabout> 4.3.8.2 微分 <diff/> 4.3.8.3 偏微分 <partialdiff/> 6.8.2 表示マークアップ内のコンテンツ・マークアップ F.2.1 導関数
determinant
4.3.7.3 単項線形代数演算子: <determinant/>, <transpose/>
diff
4.3.2 <apply> による束縛 4.3.8.2 微分 <diff/>
divergence
4.3.7.7 単項ベクトル解析演算子: <divergence/>, <grad/>, <curl/>, <laplacian/>
divide
4.3.6.1 二項算術演算子: <quotient/>, <divide/>, <minus/>, <power/>, <rem/>, <root/>
domain
4.3.7.4 単項関数演算子: <inverse/>, <ident/>, <domain/>, <codomain/>, <image/>, <ln/>,
domainofapplication
4.3.3 修飾子 4.3.3.1 <domainofapplication>、<interval>、<condition>、<lowlimit>、<uplimit> の使用 4.3.10.2 ラムダ <lambda> F. 厳密な Content MathML 変換 F.3 domainofapplication への書き換え F.3.1 区間 F.3.2 複数の条件 F.3.3 複数の domainofapplication F.4.2 区間、ベクトル、行列 F.4.3 ラムダ式 F.5 domainofapplication 修飾子の書き換え F.5.1 N項/単項演算子 F.5.2 量化子 F.5.3 積分 F.5.4 総和と積 F.6 domainofapplication の除去 F.6.1 制限関数 F.6.3 リストへの適用 F.6.4 such that(~であるような)
emptyset
F.8 演算子の書き換え F.8.4 emptyset 演算子の書き換え
eq
4.3.5.10 N項算術関係: <eq/>, <gt/>, <lt/>, <geq/>, <leq/>
equivalent
4.3.6.2 二項論理演算子: <implies/>, <equivalent/>
exists
F. 厳密な Content MathML 変換 F.5.2 量化子
exp
4.3.7.2 単項算術演算子: <factorial/>, <abs/>, <conjugate/>, <arg/>, <real/>, <imaginary/>, <floor/>, <ceiling/>, <exp/>, <minus/>, <root/>
factorial
4.3.7.2 単項算術演算子: <factorial/>, <abs/>, <conjugate/>, <arg/>, <real/>, <imaginary/>, <floor/>, <ceiling/>, <exp/>, <minus/>, <root/>
factorof
4.3.6.3 二項関係: <neq/>, <approx/>, <factorof/>, <tendsto/>
floor
4.3.7.2 単項算術演算子: <factorial/>, <abs/>, <conjugate/>, <arg/>, <real/>, <imaginary/>, <floor/>, <ceiling/>, <exp/>, <minus/>, <root/>
fn
4. Content Markup の変更
forall
4.3.10.1 量化子: <forall/>, <exists/> F. 厳密な Content MathML 変換 F.5.2 量化子
gcd
4.3.5.1 N項算術演算子: <plus/>, <times/>, <gcd/>, <lcm/>
geq
4.3.5.10 N項算術関係: <eq/>, <gt/>, <lt/>, <geq/>, <leq/>
grad
4.3.7.7 単項ベクトル解析演算子: <divergence/>, <grad/>, <curl/>, <laplacian/>
gt
4.3.5.10 N項算術関係: <eq/>, <gt/>, <lt/>, <geq/>, <leq/>
ident
4.3.7.4 単項関数演算子: <inverse/>, <ident/>, <domain/>, <codomain/>, <image/>, <ln/>,
image
4.3.7.4 単項関数演算子: <inverse/>, <ident/>, <domain/>, <codomain/>, <image/>, <ln/>,
imaginary
4.3.7.2 単項算術演算子: <factorial/>, <abs/>, <conjugate/>, <arg/>, <real/>, <imaginary/>, <floor/>, <ceiling/>, <exp/>, <minus/>, <root/>
img
3.2.1.1 画像を用いて記号を表す: <mglyph/> の使用 7.4.5 MathML とグラフィックの統合
implies
4.3.6.2 二項論理演算子: <implies/>, <equivalent/>
in
4.3.6.5 二項集合演算子: <in/>, <notin/>, <notsubset/>, <notprsubset/>, <setdiff/>
int
4.3.8.1 積分 <int/> F.2.2 積分 F.3.1 区間
intersect
4.3.5.7 N項集合演算子: <union/>, <intersect/>, <cartesianproduct/>
interval
4.1.5 厳密な Content MathML 4.3.1.1 コンストラクタ記号のためのコンテナ・マークアップ 4.3.3 修飾子 4.3.3.1 <domainofapplication>、<interval>、<condition>、<lowlimit>、<uplimit> の使用 4.3.6 二項演算子 4.3.10.3 区間 <interval> F. 厳密な Content MathML 変換 F.2.2 積分 F.3.1 区間 F.3.2 複数の条件 F.4.2 区間、ベクトル、行列 F.6 domainofapplication の除去 F.9.3 属性の書き換え
inverse
4.3.7.4 単項関数演算子: <inverse/>, <ident/>, <domain/>, <codomain/>, <image/>, <ln/>,
lambda
4.3.1.2 束縛コンストラクタのためのコンテナ・マークアップ 4.3.2 <apply> による束縛 4.3.10.2 ラムダ <lambda> F.2.4 総和と積 F.4.3 ラムダ式
laplacian
4.3.7.7 単項ベクトル解析演算子: <divergence/>, <grad/>, <curl/>, <laplacian/>
lcm
4.3.5.1 N項算術演算子: <plus/>, <times/>, <gcd/>, <lcm/>
leq
4.3.5.10 N項算術関係: <eq/>, <gt/>, <lt/>, <geq/>, <leq/>
limit
4.3.10.4 極限 <limit/>
list
4.2.2.1 <ci> の厳密な使用法 4.3.5.9 N項集合構築子: <set>, <list> F.4.1 集合とリスト
ln
4.3.7.4 単項関数演算子: <inverse/>, <ident/>, <domain/>, <codomain/>, <image/>, <ln/>,
log
4.1.5 厳密な Content MathML 4.3.3.3 <momentabout> と <logbase> の使用 4.3.7.9 対数 <log/> , <logbase> F.2.6 対数
logbase
4.3.3 修飾子 4.3.3.3 <momentabout> と <logbase> の使用 4.3.7.9 対数 <log/> , <logbase> 6.8.2 表示マークアップ内のコンテンツ・マークアップ F.2.6 対数
lowlimit
4.3.3 修飾子 4.3.3.1 <domainofapplication>、<interval>、<condition>、<lowlimit>、<uplimit> の使用 4.3.5.2 N項和 <sum/> 4.3.5.3 N項積 <product/> 4.3.8.1 積分 <int/> 4.3.10.4 極限 <limit/> 6.8.2 表示マークアップ内のコンテンツ・マークアップ F. 厳密な Content MathML 変換 F.2.2 積分 F.3.1 区間 F.3.2 複数の条件 F.6 domainofapplication の除去
lt
4.3.5.10 N項算術関係: <eq/>, <gt/>, <lt/>, <geq/>, <leq/>
maction
3.1.3.2 引数要件の表 3.1.8.6 式の活性化 3.2.5.6.3 装飾された演算子の例外 3.2.7.4 空白様要素の定義 3.3.4.1 説明 3.5.4.3 整列グループの指定 3.7.1 部分式にアクションを結び付ける 3.7.1.1 属性 7.4 他の形式との組み合わせ D.1.3 MathML 拡張機構と適合性 D.3 指定されないデータの属性
maligngroup
3.1.8.4 表と行列 3.2.7.1 説明 3.2.7.4 空白様要素の定義 3.3.4.1 説明 3.5.1.2 属性 3.5.4 整列マーカー <maligngroup/>, <malignmark/> 3.5.4.3 整列グループの指定 3.5.4.4 整列グループに分割されない表セル 3.5.4.5 <malignmark/> を用いた整列点の指定 3.5.4.7 簡単な整列アルゴリズム 7.4.4 リンク
malignmark
3.1.5.2 トークン要素における双方向レイアウト 3.1.8.4 表と行列 3.2 トークン要素 3.2.7.4 空白様要素の定義 3.2.8.1 説明 3.5.1.2 属性 3.5.4 整列マーカー <maligngroup/>, <malignmark/> 3.5.4.3 整列グループの指定 3.5.4.5 <malignmark/> を用いた整列点の指定 3.5.4.7 簡単な整列アルゴリズム 7.4.4 リンク 3. 表示マークアップの変更
math
2.1.2 MathML と名前空間 2.2 トップレベル <math> 要素 2.2.1 属性 3.1.3.1 推論された <mrow> 3.1.3.2 引数要件の表 3.1.5.1 数式全体の方向性 3.1.6 displaystyle と scriptlevel 3.1.7.1 改行の制御 3.2.2 トークン要素に共通の数学スタイル属性 3.2.5.2 属性 3.2.5.2.3 インデント属性 3.7.1 部分式にアクションを結び付ける 4.2.3.1 <csymbol> の厳密な使用法 6.7.3 HTML 文書での annotation-xml の使用 7.2.1 XML における MathML の認識 7.2.2 HTML における MathML の認識 7.3.1 基本的な転送フレーバー名と内容 7.3.2 転送時の推奨動作 7.3.3 解説 7.4.3 MathML と HTML の混在 7.5 MathML に対する CSS の使用 2. 基礎の変更
matrix
4.2.2.1 <ci> の厳密な使用法 4.3.5.8 N項行列コンストラクタ: <vector/>, <matrix/>, <matrixrow/>
matrixrow
4.3.5.8 N項行列コンストラクタ: <vector/>, <matrix/>, <matrixrow/>
max
4.3.5.12 N項/単項算術演算子: <min/>, <max/> F. 厳密な Content MathML 変換 F.5.1 N項/単項演算子
mean
4.3.5.12 N項/単項算術演算子: <min/>, <max/> 4.3.5.13 N項/単項統計演算子: <mean/>, <median/>, <mode/>, <sdev/>, <variance/> F. 厳密な Content MathML 変換 F.5.1 N項/単項演算子 F.8.3 統計演算子の書き換え
median
4.3.5.13 N項/単項統計演算子: <mean/>, <median/>, <mode/>, <sdev/>, <variance/> F.8.3 統計演算子の書き換え
menclose
3.1.3.1 推論された <mrow> 3.1.3.2 引数要件の表 3.1.7.1 改行の制御 3.1.8.2 一般的なレイアウト・スキーマ 3.3.9.1 説明 3.3.9.2 属性 3.3.9.3 例 3.6.8.1 加算と減算
merror
3.1.3.1 推論された <mrow> 3.1.3.2 引数要件の表 3.1.8.2 一般的なレイアウト・スキーマ 3.3.5.1 説明 3.3.5.2 属性 4.2.9 エラー・マークアップ <cerror> D.2 エラーの取り扱い
mfenced
3.1.3.2 引数要件の表 3.1.7.1 改行の制御 3.1.8.2 一般的なレイアウト・スキーマ 3.2.5.4 括弧と区切り記号を用いた例 3.3.1.1 説明 3.3.8.1 説明 3.3.8.2 属性 3.3.8.3 例 3.5.4.3 整列グループの指定
mfrac
2.1.5.2.1 単位に関する追加注記 3.1 序論 3.1.3.2 引数要件の表 3.1.6 displaystyle と scriptlevel 3.1.7.1 改行の制御 3.1.8.2 一般的なレイアウト・スキーマ 3.2.5.6.3 装飾された演算子の例外 3.3.2.1 説明 3.3.2.2 属性 3.3.4.1 説明 3.3.4.2 例 3.3.5.3 例 7.4 他の形式との組み合わせ
mfraction (mathml-error)
3.3.5.3 例
mglyph
3.1.5.2 トークン要素における双方向レイアウト 3.1.8.1 トークン要素の概要 3.2 トークン要素 3.2.1 トークン要素の内容文字, <mglyph/> 3.2.1.1 画像を用いて記号を表す: <mglyph/> 3.2.1.1.1 説明 3.2.1.1.2 属性 3.2.1.1.3 例 3.2.8.1 説明 3.3.4.1 説明 4.2.1.3 <cn> の非厳密な使用法 4.2.3.2 <csymbol> の非厳密な使用法 4.2.4 文字列リテラル <cs> D.1.3 MathML 拡張機構と適合性 F.7.2 トークンの表現 3. 表示マークアップの変更
mi
2.1.7 入力における空白の折りたたみ 3.1.5.2 トークン要素における双方向レイアウト 3.1.7.1 改行の制御 3.1.8.1 トークン要素の概要 3.2 トークン要素 3.2.1.1.1 説明 3.2.2 トークン要素に共通の数学スタイル属性 3.2.3.1 説明 3.2.3.2 属性 3.2.3.3 例 3.2.8.1 説明 4.2.2.3 内容識別子のレンダリング 4.2.3.3 記号のレンダリング 6.8.1 表示マークアップ内のコンテンツ・マークアップ 8.2 数学用英数字記号
min
4.3.5.12 N項/単項算術演算子: <min/>, <max/> F. 厳密な Content MathML 変換 F.5.1 N項/単項演算子
minus
4.2.5.1 厳密な Content MathML 4.3.6.1 二項算術演算子: <quotient/>, <divide/>, <minus/>, <power/>, <rem/>, <root/> 4.3.7.2 単項算術演算子: <factorial/>, <abs/>, <conjugate/>, <arg/>, <real/>, <imaginary/>, <floor/>, <ceiling/>, <exp/>, <minus/>, <root/> F. 厳密な Content MathML 変換 F.8 演算子の書き換え F.8.1 minus 演算子の書き換え
mlabeledtr
3.5.2.3 方程式番号付け 3.5.4.1 削除通知 3. 表示マークアップの変更
mlongdiv
3.1.3.2 引数要件の表 3.1.8.5 基本的な数学レイアウト 3.3.9.2 属性 3.5 表形式の数学 3.6 基本的な数学 3.6.2.1 説明 3.6.2.2 属性 3.6.3.1 説明 3.6.3.2 属性 3.6.4.2 属性 3.6.5.1 説明 3.6.5.2 属性 3.6.7.2 属性 C.4.2.6 基本的な数学記法
mmultiscripts
3.1.3.2 引数要件の表 3.1.8.3 上付き/下付きと極限スキーマ 3.2.5.6.3 装飾された演算子の例外 3.4.7.1 説明 3.4.7.2 属性 3.4.7.3 例
mn
2.1.7 入力における空白の折りたたみ 3.1.5.2 トークン要素における双方向レイアウト 3.1.7.1 改行の制御 3.1.8.1 トークン要素の概要 3.2 トークン要素 3.2.1.1.1 説明 3.2.4.1 説明 3.2.4.2 属性 3.2.4.4 単独の <mn> で表すべきでない数値 3.6.4.1 説明 3.6.8.1 加算と減算 4.2.1.1 <cn> と <sep/> 表現の数値のレンダリング 6.8.1 表示マークアップ内のコンテンツ・マークアップ C.4.2.4 数値
mo
2.1.7 入力における空白の折りたたみ 3.1.4 特別な振る舞いを持つ要素 3.1.5.2 トークン要素における双方向レイアウト 3.1.6 displaystyle と scriptlevel 3.1.7.1 改行の制御 3.1.8.1 トークン要素の概要 3.2 トークン 要素 3.2.1.1.1 説明 3.2.4.1 説明 3.2.5.1 説明 3.2.5.2 属性 3.2.5.2.2 改行属性 3.2.5.2.3 インデント属性 3.2.5.4 括弧と区切り記号を用いた例 3.2.5.5 見えない演算子 3.2.5.6 <mo> 要素の詳細なレンダリング規則 3.2.5.6.1 演算子辞書 3.2.5.6.2 form 属性のデフォルト値 3.2.5.6.3 装飾された演算子の例外 3.2.5.7 演算子・括弧・アクセントの伸張 3.2.5.7.3 水平方向の伸張規則 3.2.7.2 属性 3.2.7.4 空白様要素の定義 3.2.8.1 説明 3.3.1.1 説明 3.3.1.3.1 1引数の <mrow> 3.3.2.2 属性 3.3.4.1 説明 3.3.7.3 例 3.3.8.1 説明 3.3.8.2 属性 3.4.4.1 説明 3.4.4.2 属性 3.4.5.1 説明 3.4.5.2 属性 3.4.6.1 説明 3.5.4.2 説明 8.3 非マーキング文字 Minus B. 演算子辞書 3. 表示マークアップの変更
mode
4.3.5.13 N項/単項統計演算子: <mean/>, <median/>, <mode/>, <sdev/>, <variance/> F.8.3 統計演算子の書き換え
moment
4.3.3.2 <degree> の使用 4.3.3.3 <momentabout> と <logbase> の使用 4.3.7.8 モーメント <moment/>, <momentabout> F.2.7 モーメント
momentabout
4.3.3 修飾子 4.3.3.3 <momentabout> と <logbase> の使用 4.3.7.8 モーメント <moment/>, <momentabout>
mover
3.1.3.2 引数要件の表 3.1.8.3 上付き/下付きと極限のスキーマ 3.2.5.2.1 辞書に基づく属性 3.2.5.6.3 装飾された演算子の例外 3.2.5.7.3 水平方向の伸張規則 3.3.4.1 説明 3.4.5.1 説明 3.4.5.2 属性 3.4.6.2 属性 3.4.6.3 例
mpadded
3.1.3.1 推論された <mrow> 3.1.3.2 引数要件の表 3.1.8.2 一般的なレイアウト・スキーマ 3.2.5.6.3 装飾された演算子の例外 3.2.7.4 空白様要素の定義 3.3.4.1 説明 3.3.6.1 説明 3.3.6.2 属性 3.3.6.3 サイズと位置属性の意味 3.3.6.4 例 3.3.7.1 説明 C.4.2.3 間隔 3. 表示マークアップの変更
mphantom
3.1.3.1 推論された <mrow> 3.1.3.2 引数要件の表 3.1.8.2 一般的なレイアウト・スキーマ 3.2.5.2.3 インデント属性 3.2.5.6.3 装飾された演算子の例外 3.2.7.1 説明 3.2.7.4 空白様要素の定義 3.2.7.5 空白様要素の合法的なグループ化 3.3.7.1 説明 3.3.7.2 属性 3.3.7.3 例 3.5.4.3 整列グループの指定 C.4.2.1 見えない演算子 C.4.2.3 間隔
mprescripts
3.4.7.1 説明 7.4.4 リンク
mroot
3.1.3.2 引数要件の表 3.1.6 displaystyle と scriptlevel 3.1.7.1 改行の制御 3.1.8.2 一般的なレイアウト・スキーマ 3.3.3.1 説明 3.3.3.2 属性
mrow
2.1.3 子要素と引数 2.2 トップレベル <math> 要素 3.1.1 表示 MathML の構造 3.1.3.1 推論された <mrow> 3.1.3.2 引数要件の表 3.1.5.1 数式全体の方向性 3.1.7.1 改行の制御 3.1.8.2 一般的なレイアウト・スキーマ 3.2.2 トークン要素に共通の数学スタイル属性 3.2.5.2.1 辞書に基づく属性 3.2.5.2.3 インデント属性 3.2.5.6.2 form 属性のデフォルト値 3.2.5.6.3 装飾された演算子の例外 3.2.5.6.4 演算子周辺の間隔 3.2.5.7.2 垂直伸張規則 3.2.5.7.4 垂直・水平両方の伸張に共通する規則 3.2.7.4 空白様要素の定義 3.2.7.5 空白様要素の合法的なグループ化 3.3.1.1 説明 3.3.1.2 属性 3.3.1.3 <mrow> による部分式の適切なグループ化 3.3.1.3.1 1引数の <mrow> 3.3.1.3.2 適切なグループ化の厳密な規則 3.3.1.4 例 3.3.2.2 属性 3.3.3.1 説明 3.3.4.1 説明 3.3.5.1 説明 3.3.6.1 説明 3.3.6.3 サイズと位置属性の意味 3.3.7.1 説明 3.3.7.3 例 3.3.8.1 説明 3.3.8.2 属性 3.3.8.3 例 3.3.9.1 説明 3.3.9.2 属性 3.4.7.1 説明 3.5.3.1 説明 3.5.3.2 属性 3.5.4.3 整列グループの指定 3.6.4.1 説明 3.6.5.1 説明 3.6.6.1 説明 3.6.8.1 加算と減算 3.6.8.2 乗算 4.2.10 エンコードされたバイト <cbytes> 6.8.1 表示マークアップ内のコンテンツ・マークアップ C.4.2.2 部分式の適切なグループ化 3. 表示マークアップの変更
ms
2.1.7 入力における空白の折りたたみ 3.1.5.2 トークン要素における双方向レイアウト 3.1.8.1 トークン要素の概要 3.2 トークン 要素 3.2.1.1.1 説明 3.2.8.1 説明 3.2.8.2 属性
mscarries
3.1.3.2 引数要件の表 3.1.8.5 基本的な数学レイアウト 3.6 基本的な数学 3.6.1.1 説明 3.6.5.1 説明 3.6.5.2 属性 3.6.6.1 説明 3.6.8.1 加算と減算
mscarry
3.1.3.1 推論された <mrow> 3.1.3.2 引数要件の表 3.1.8.5 基本的な数学レイアウト 3.6 基本的な数学 3.6.5.1 説明 3.6.5.2 属性 3.6.6.1 説明 3.6.6.2 属性 3.6.8.1 加算と減算
msgroup
3.1.3.2 引数要件の表 3.1.8.5 基本的な数学レイアウト 3.6 基本的な数学 3.6.1.1 説明 3.6.2.1 説明 3.6.3.1 説明 3.6.3.2 属性 3.6.4.2 属性 3.6.5.2 属性 3.6.7.2 属性 3.6.8.2 乗算
msline
3.1.8.5 基本的な数学レイアウト 3.6 基本的な数学 3.6.1.1 説明 3.6.2.1 説明 3.6.7.1 説明 3.6.7.2 属性 3.6.8.1 加算と減算 3.6.8.4 循環小数
mspace
2.1.7 入力における空白の折りたたみ 3.1.7.1 改行の制御 3.1.8.1 トークン要素の概要 3.2 トークン 要素 3.2.1 トークン要素の内容文字, <mglyph/> 3.2.2 トークン要素に共通の数学スタイル属性 3.2.5.2.2 改行属性 3.2.5.2.3 インデント属性 3.2.7.1 説明 3.2.7.2 属性 3.2.7.4 空白様要素の定義 3.3.4.1 説明 8.3 非マーキング文字 C.3.1.1 アクセシビリティツリー C.4.2.3 間隔 3. 表示マークアップの変更
msqrt
3.1.3.1 推論された <mrow> 3.1.3.2 引数要件の表 3.1.7.1 改行の制御 3.1.8.2 一般的なレイアウト・スキーマ 3.3.3.1 説明 3.3.3.2 属性 3.3.9.2 属性
msrow
3.1.3.2 引数要件の表 3.1.8.5 基本的な数学レイアウト 3.6 基本的な数学 3.6.1.1 説明 3.6.4.1 説明 3.6.4.2 属性 3.6.5.2 属性 3.6.8.2 乗算 3.6.8.4 循環小数
mstack
3.1.3.2 引数要件の表 3.1.8.5 基本的な数学レイアウト 3.1.9.2 MathML フル限定属性 3.3.4.1 説明 3.5 表形式の数学 3.6 基本的な数学 3.6.1.1 説明 3.6.1.2 属性 3.6.2.1 説明 3.6.2.2 属性 3.6.3.1 説明 3.6.3.2 属性 3.6.4.1 説明 3.6.4.2 属性 3.6.5.1 説明 3.6.5.2 属性 3.6.7.1 説明 3.6.7.2 属性 3.6.8.4 循環小数 C.4.2.6 基本的な数学記法
mstyle
2.1.5.2.1 単位に関する追加注記 2.1.5.3 属性のデフォルト値 2.2.1 属性 3.1.3.1 推論された <mrow> 3.1.3.2 引数要件の表 3.1.5.1 数式全体の方向性 3.1.7.1 改行の制御 3.1.8.2 一般的なレイアウト・スキーマ 3.1.9 表示要素に共通の属性 3.2.2 トークン要素に共通の数学スタイル属性 3.2.5.2 属性 3.2.5.2.2 改行属性 3.2.5.2.3 インデント属性 3.2.5.6.3 装飾された演算子の例外 3.2.7.4 空白様要素の定義 3.3.4.1 説明 3.3.4.2 例 3.3.8.2 属性 3.5.4.3 整列グループの指定 3.6.1.2 属性 3.6.4.1 説明 3. 表示マークアップの変更
msub
3.1.3.2 引数要件の表 3.1.8.3 上付き/下付きと極限のスキーマ 3.2.3.1 説明 3.2.5.6.3 装飾された演算子の例外 3.4.1.1 説明 3.4.1.2 属性 3.4.3.1 説明
msubsup
3.1.3.2 引数要件の表 3.1.8.3 上付き/下付きと極限のスキーマ 3.2.5.6.3 装飾された演算子の例外 3.4.3.1 説明 3.4.3.2 属性 3.4.3.3 例 3.4.6.3 例 3.4.7.2 属性
msup
3.1.3.2 引数要件の表 3.1.4 特別な振る舞いを持つ要素 3.1.8.3 上付き/下付きと極限のスキーマ 3.2.3.1 説明 3.2.5.6.3 装飾された演算子の例外 3.2.7.5 空白様要素の合法的なグループ化 3.4.2.1 説明 3.4.2.2 属性 3.4.3.1 説明 5.8 意図の例
mtable
3.1.3.2 引数要件の表 3.1.7.1 改行の制御 3.1.8.4 表と行列 3.2.5.7.3 水平方向の伸張規則 3.3.4.1 説明 3.5 表形式の数学 3.5.1.1 説明 3.5.1.2 属性 3.5.1.3 例 3.5.2.1 説明 3.5.2.2 属性 3.5.2.3 方程式番号付け 3.5.3.2 属性 3.5.4 整列マーカー <maligngroup/>, <malignmark/> 3.5.4.1 削除通知 3.5.4.2 説明 3.5.4.3 整列グループの指定 3.5.4.7 簡易整列アルゴリズム 3.6.1.2 属性 4.3.5.8 N項行列コンストラクタ: <vector/>, <matrix/>, <matrixrow/> 5.8.2 表の例 C.4.2.6 基本的な数学記法 C.4.2.8 表とリスト
mtd
3.1.3.1 推論された <mrow> 3.1.3.2 引数要件の表 3.1.8.4 表と行列 3.2.5.7.2 垂直伸張規則 3.2.5.7.3 水平方向の伸張規則 3.3.4.1 説明 3.5 表形式の数学 3.5.1.1 説明 3.5.2.1 説明 3.5.2.3 方程式番号付け 3.5.3.1 説明 3.5.3.2 属性 3.5.4.2 説明 3.5.4.3 整列グループの指定 3.5.4.7 簡易整列アルゴリズム 3. 表示マークアップの変更
mtext
2.1.7 入力における空白の折りたたみ 3.1.5.2 トークン要素における双方向レイアウト 3.1.8.1 トークン要素の概要 3.2 トークン 要素 3.2.1.1.1 説明 3.2.2.1 HTML の埋め込み 3.2.6.1 説明 3.2.6.2 属性 3.2.7.1 説明 3.2.7.4 空白様要素の定義 3.2.8.1 説明 3.5.4.4 整列グループに分割されない表セル 7.4 他の形式との組み合わせ 7.4.1 MathML と XHTML の混在 7.4.3 MathML と HTML の混在 Minus 8.4.2 疑似上付き/下付き F.7.2 トークンの表現
mtr
3.1.3.2 引数要件の表 3.1.8.4 表と行列 3.2.5.7.2 垂直伸張規則 3.3.4.1 説明 3.5 表形式の数学 3.5.1.1 説明 3.5.2.1 説明 3.5.2.2 属性 3.5.2.3 方程式番号付け 3.5.3.1 説明 3.5.4.1 削除通知 3.5.4.7 簡易整列アルゴリズム 4.3.5.8 N項行列コンストラクタ: <vector/>, <matrix/>, <matrixrow/> 3. 表示マークアップの変更
munder
3.1.3.2 引数要件の表 3.1.8.3 上付き/下付きと極限のスキーマ 3.2.5.2.1 辞書に基づく属性 3.2.5.6.3 装飾された演算子の例外 3.2.5.7.3 水平方向の伸張規則 3.3.4.1 説明 3.4.4.1 説明 3.4.4.2 属性 3.4.5.2 属性 3.4.6.2 属性 3.4.6.3 例
munderover
3.1.3.2 引数要件の表 3.1.8.3 上付き/下付きと極限のスキーマ 3.2.5.2.1 辞書に基づく属性 3.2.5.6.3 装飾された演算子の例外 3.2.5.7.3 水平方向の伸張規則 3.3.4.1 説明 3.4.6.1 説明 3.4.6.2 属性 3.4.6.3 例
neq
4.3.6.3 二項関係: <neq/>, <approx/>, <factorof/>, <tendsto/>
none/>
3.6.5.1 説明
none
7.4.4 リンク 3. 表示マークアップの変更
not
4.3.7.1 単項論理演算子: <not/>
notin
4.3.6.5 二項集合演算子: <in/>, <notin/>, <notsubset/>, <notprsubset/>, <setdiff/>
notprsubset
4.3.6.5 二項集合演算子: <in/>, <notin/>, <notsubset/>, <notprsubset/>, <setdiff/>
notsubset
4.3.6.5 二項集合演算子: <in/>, <notin/>, <notsubset/>, <notprsubset/>, <setdiff/>
ol>
C.4.2.8 表とリスト
OMA (openmath)
4.1.5 厳密な Content MathML
OMATP (openmath)
4.1.5 厳密な Content MathML
OMATTR (openmath)
4.1.5 厳密な Content MathML
OMB (openmath)
4.1.5 厳密な Content MathML
OMBIND (openmath)
4.1.5 厳密な Content MathML
OMBVAR (openmath)
4.1.5 厳密な Content MathML
OME (openmath)
4.1.5 厳密な Content MathML
OMF (openmath)
4.1.5 厳密な Content MathML
OMFOREIGN (openmath)
4.1.5 厳密な Content MathML
OMI (openmath)
4.1.5 厳密な Content MathML
OMR (openmath)
4.1.5 厳密な Content MathML
OMS (openmath)
4.1.5 厳密な Content MathML
OMSTR (openmath)
4.1.5 厳密な Content MathML
OMV (openmath)
4.1.5 厳密な Content MathML
or
4.3.5.5 N項論理演算子: <and/>, <or/>, <xor/>
otherwise
4.3.1.1 コンストラクタ記号のためのコンテナ・マークアップ 4.3.10.5 区分定義: <piecewise>, <piece>, <otherwise> F.4.4 区分定義関数
outerproduct
4.3.6.4 二項線形代数演算子: <vectorproduct/>, <scalarproduct/>, <outerproduct/>
partialdiff
4.3 特定構造のための Content MathML 4.3.8.3 偏微分 <partialdiff/> F.2.1 導関数
piece
4.3.1.1 コンストラクタ記号のためのコンテナ・マークアップ 4.3.10.5 区分定義: <piecewise>, <piece>, <otherwise> F.4.4 区分定義関数
piecewise
4.3.1.1 コンストラクタ記号のためのコンテナ・マークアップ 4.3.10.5 区分定義: <piecewise>, <piece>, <otherwise> F.4.4 区分定義関数
plus
4.2.5.1 厳密な Content MathML 4.3.5.1 N項算術演算子: <plus/>, <times/>, <gcd/>, <lcm/> 4.3.5.2 N項和 <sum/>
power
4.3.6.1 二項算術演算子: <quotient/>, <divide/>, <minus/>, <power/>, <rem/>, <root/>
product
4.3.5.1 N項算術演算子: <plus/>, <times/>, <gcd/>, <lcm/> 4.3.5.3 N項積 <product/> F.3.1 区間
prsubset
4.3.5.11 N項集合関係: <subset/>, <prsubset/>
quotient
4.3.6.1 二項算術演算子: <quotient/>, <divide/>, <minus/>, <power/>, <rem/>, <root/>
real
4.3.7.2 単項算術演算子: <factorial/>, <abs/>, <conjugate/>, <arg/>, <real/>, <imaginary/>, <floor/>, <ceiling/>, <exp/>, <minus/>, <root/>
reln
4. Content Markup の変更
rem
4.3.6.1 二項算術演算子: <quotient/>, <divide/>, <minus/>, <power/>, <rem/>, <root/>
root
4.3.3.2 <degree> の使用 4.3.6.1 二項算術演算子: <quotient/>, <divide/>, <minus/>, <power/>, <rem/>, <root/> 4.3.7.2 単項算術演算子: <factorial/>, <abs/>, <conjugate/>, <arg/>, <real/>, <imaginary/>, <floor/>, <ceiling/>, <exp/>, <minus/>, <root/>
scalarproduct
4.3.6.4 二項線形代数演算子: <vectorproduct/>, <scalarproduct/>, <outerproduct/>
sdev
4.3.5.13 N項/単項統計演算子: <mean/>, <median/>, <mode/>, <sdev/>, <variance/> F.8.3 統計演算子の書き換え
selector
4.3.5.6 N項線形代数演算子: <selector/> F. 厳密な Content MathML 変換 F.8 演算子の書き換え
semantics
3.2.5.6.3 装飾された演算子の例外 3.2.7.4 空白様要素の定義 3.5.4.3 整列グループの指定 3.8 Semantics と表示 4.1.5 厳密な Content MathML 4.2.2.2 <ci> の非厳密な使用法 4.2.6.2 束縛変数 4.2.8 semantics による帰属 6. 注釈付き MathML: semantics 6.2 代替表現 6.4 注釈参照 6.5.1 説明 6.6.2 属性 6.7.2 属性 6.8.1 表示マークアップ内のコンテンツ・マークアップ 6.9 並列マークアップ 6.9.1 トップレベルの並列マークアップ 6.9.2 参照による並列マークアップ 7.1 はじめに 7.3 MathML の転送 7.3.2 転送時の推奨動作 7.3.3 解説 7.4 他の形式との組み合わせ 7.4.5 MathML とグラフィックの統合 F. 厳密な Content MathML 変換 F.7.2 トークンの表現 F.9.1 type 属性の書き換え F.9.3 属性の書き換え 6. 注釈付き MathML: semantics の変更
sep
4.2.1 数値 <cn> 4.2.1.1 <cn> と <sep/> 表現の数値のレンダリング 4.2.1.3 <cn> の非厳密な使用法 F.7.1 数値
set
4.1.5 厳密な Content MathML 4.2.2.1 <ci> の厳密な使用法 4.3.5.9 N項集合構築子: <set>, <list> F.4.1 集合とリスト
setdiff
4.3.6.5 二項集合演算子: <in/>, <notin/>, <notsubset/>, <notprsubset/>, <setdiff/>
share
4.1.5 厳密な Content MathML 4.2.7.1 <share> 要素 4.2.7.2 非巡回性の制約 4.2.7.3 構造共有と束縛 4.2.7.4 構造共有を用いた式のレンダリング 4. Content Markup の変更
sin
4.1.5 厳密な Content MathML
span (xhtml)
6.7.3 HTML 文書での annotation-xml の使用
subset
4.3.5.11 N項集合関係: <subset/>, <prsubset/>
sum
4.2.5.2 作用のレンダリング 4.3.5.1 N項算術演算子: <plus/>, <times/>, <gcd/>, <lcm/> 4.3.5.2 N項和 <sum/> F.3.1 区間
svg (svg)
7.4.1 MathML と XHTML の混在
table (xhtml)
3.5 表形式の数学 C.4.2.8 表とリスト
td (xhtml)
3.5 表形式の数学
tendsto
4.3.6.3 二項関係: <neq/>, <approx/>, <factorof/>, <tendsto/> 4.3.10.4 極限 <limit/> F.2.3 極限
times
4.3.5.1 N項算術演算子: <plus/>, <times/>, <gcd/>, <lcm/> 4.3.5.3 N項積 <product/>
tr (xhtml)
3.5 表形式の数学
transpose
4.3.7.3 単項線形代数演算子: <determinant/>, <transpose/>
union
4.3.5.7 N項集合演算子: <union/>, <intersect/>, <cartesianproduct/>
uplimit
4.3.3 修飾子 4.3.3.1 <domainofapplication>、<interval>、<condition>、<lowlimit>、<uplimit> の使用 4.3.5.2 N項和 <sum/> 4.3.5.3 N項積 <product/> 4.3.8.1 積分 <int/> 6.8.2 表示マークアップ内のコンテンツ・マークアップ F. 厳密な Content MathML 変換 F.2.2 積分 F.3.1 区間 F.3.2 複数の条件 F.6 domainofapplication の除去
variance
4.3.5.13 N項/単項統計演算子: <mean/>, <median/>, <mode/>, <sdev/>, <variance/> F.8.3 統計演算子の書き換え
vector
4.2.2.1 <ci> の厳密な使用法 4.3.5.8 N項行列コンストラクタ: <vector/>, <matrix/>, <matrixrow/> F.6.3 リストへの適用
vectorproduct
4.3.6.4 二項線形代数演算子: <vectorproduct/>, <scalarproduct/>, <outerproduct/>
xor
4.3.5.5 N項論理演算子: <and/>, <or/>, <xor/>

H. ワーキンググループのメンバーシップと謝辞

この節は規範的ではありません。

H.1 Math ワーキンググループのメンバーシップ

現在の Math ワーキンググループは2021年4月から2023年5月までの任期で設置され、共同議長は Neil Soiffer と Brian Kardell (Igalia) です。

2019年から2021年の間、W3C MathML-Refresh Community Group は Neil Soiffer が議長を務め、MathML Core の初期提案と MathML 4 の要件を作成しました。

MathML 3(2012–2013)を担当した W3C Math ワーキンググループは、NAG の David Carlisle と AMS の Patrick Ion が共同議長を務めました。Patrick Ion と Design Science の Robert Miner は 2006–2011 年に共同議長を務めました。ワーキンググループへの参加に関しては共同議長にお問い合わせください。現在のメンバーについては W3C Math ホームページ を参照してください。

Math ワーキンググループと MathML の初期からの発展において、そのリーダーシップと貢献が不可欠だった Robert Miner は、2011年12月に若くして悲劇的に亡くなりました。

MathML 3.0 を担当したワーキンググループの参加者は次のとおりです:

Ron Ausbrooks, Laurent Bernardin, Pierre-Yves Bertholet, Bert Bos, Mike Brenner, Olga Caprotti, David Carlisle, Giorgi Chavchanidze, Ananth Coorg, Stéphane Dalmas, Stan Devitt, Sam Dooley, Margaret Hinchcliffe, Patrick Ion, Michael Kohlhase, Azzeddine Lazrek, Dennis Leas, Paul Libbrecht, Manolis Mavrikis, Bruce Miller, Robert Miner, Chris Rowley, Murray Sargent III, Kyle Siegrist, Andrew Smith, Neil Soiffer, Stephen Watt, Mohamed Zergaoui

上記のすべての人物は Math ワーキンググループのメンバーでしたが、すべての期間にわたって在籍していたわけではありません。MathML3 の冒頭に記載されている22名の著者は、仕様本文で実際に使われた再作業や再定式化に寄与した人々です。したがってこの一覧には、MathML2 の主要な著者たちも含まれており、その多くの文言がここで再利用されています。もちろん彼らはワーキンググループ全体の活動と議論、および W3C 内外からの有益なコメントに支えられていました。

2003年から2006年の間、W3C の Math 活動は Math Interest Group で構成され、NAG の David Carlisle と Design Science の Robert Miner が議長を務めていました。

W3C Math ワーキンググループ(2001–2003)は、AMS の Patrick Ion が共同議長を務め、2001年6月から2002年5月までは IBM の Angel Diaz が共同議長を務めました。その後 Patrick Ion は WG の延長チャーター期間の終わりまで議長を続けました。

MathML 2.0(第2版)を担当したワーキンググループの参加者は次のとおりです:

Ron Ausbrooks, Laurent Bernardin, Stephen Buswell, David Carlisle, Stéphane Dalmas, Stan Devitt, Max Froumentin, Patrick Ion, Michael Kohlhase, Robert Miner, Luca Padovani, Ivor Philips, Murray Sargent III, Neil Soiffer, Paul Topping, Stephen Watt

この(2001–2003 年の)W3C Math ワーキンググループの以前の活動的な参加者には次の人々が含まれます:

Angel Diaz, Sam Dooley, Barry MacKichan

W3C Math ワーキンググループは、1998年7月から2000年12月まで AMS の Patrick Ion と IBM の Angel Diaz によって共同議長が務められました。

MathML 2.0 を担当したワーキンググループの参加者は次のとおりです:

Ron Ausbrooks, Laurent Bernardin, Stephen Buswell, David Carlisle, Stéphane Dalmas, Stan Devitt, Angel Diaz, Ben Hinkle, Stephen Hunt, Douglas Lovell, Patrick Ion, Robert Miner, Ivor Philips, Nico Poppelier, Dave Raggett, T.V. Raman, Murray Sargent III, Neil Soiffer, Irene Schena, Paul Topping, Stephen Watt

この第2期の W3C Math ワーキンググループの以前の活動的な参加者には次の人々が含まれます:

Sam Dooley, Robert Sutor, Barry MacKichan

MathML 1.0 [MathML1] 発行時点で、Math ワーキンググループは Patrick Ion と当時の Geometry Center 所属の Robert Miner によって共同議長が務められていました。それ以降、メンバーシップにはいくつかの変更がありました。MathML 1.01 への更新の過程で、元のメンバーに加えて、David Carlisle、Don Gignac、Kostya Serebriany、Ben Hinkle、Sebastian Rahtz、Sam Dooley などによって修正が提供されました。

完成した MathML 1.0 仕様を担当した Math ワーキンググループの参加者は次のとおりです:

Stephen Buswell, Stéphane Dalmas, Stan Devitt, Angel Diaz, Brenda Hunt, Stephen Hunt, Patrick Ion, Robert Miner, Nico Poppelier, Dave Raggett, T.V. Raman, Bruce Smith, Neil Soiffer, Robert Sutor, Paul Topping, Stephen Watt, Ralph Youngen

その他、以前の段階で W3C Math WG のメンバーであった人々は次のとおりです:

Stephen Glim, Arnaud Le Hors, Ron Whitney, Lauren Wood, Ka-Ping Yee

H.2 謝辞

ワーキンググループは MathML 1.0 の仕様策定において多くの方々の助力を受けました。特に文字テーブルの編纂に関して Barbara Beeton、Chris Hamlin、John Jenkins、Ira Polans、Arthur Smith、Robby Villegas、Joe Yurvati の協力と情報提供に感謝します(8. Characters, Entities and Fonts)。また Peter Flynn、Russell S.S. O'Connor、Andreas Strotmann、および www-math メーリングリストの他の貢献者の皆様にも、綿密な校正と建設的な批評に対して感謝します。

Math ワーキンググループは MathML 2.0 に進むにつれて、他の W3C ワーキンググループの多くのメンバーから再び支援を受け、多くの相互作用がありました。W3C 外では、Unicode Technical Committee (UTC) や ISO 10646 を扱う NTSC WG2 とのインターフェースが特に活発でした。そこで STIX プロジェクトは数学表記の文字を Unicode に追加する提案をまとめ、この作業は AMS の Barbara Beeton によって再び主導されました。最終的に問題は三つの提案に分割され、その二つは Microsoft の Murray Sargent(Math WG メンバーかつ UTC メンバー)によって推進されました。数学コミュニティは、提案の洗練に数年を費やして数学に関する支援を行った Sybase の Kenneth Whistler(UTC と WG2 のメンバー)や、UTC と WG2 の審議に関与し、科学表記のニーズに常に献身的で知識のある支援者であった Asmus Freytag に対して感謝すべきです。

I. 変更点

I.1 MathML 3.0(第2版)と MathML 4.0 の変更点

前付属文書の変更

  • 参照の表記を新しい W3C の仕様規則に合わせ、W3C の CSS 書式スタイルを使用するように変更しました。特に目次のスタイルに影響があります。
  • この文書の状態 を更新し、特に https の使用と、現行の W3C 公開の要件に従って GitHub Issues ページへの参照を追加しました。

2. MathML 基礎 の変更

  • MathML の色および長さ値属性の定義を、[MathML-Core] で使用される構文に明示的に基づくように修正しました。これは CSS3 によって提供される定義を用いています。
  • mode および macros 属性を <math> から削除しました。これらは MathML 2 以降非推奨となっていました。macros は定義された振る舞いを持たず、mode は適切な display の使用で置き換え可能です。レガシー用途が必要な場合は mathml4-legacy スキーマがこれらを有効にします。
  • other 属性を削除しました。これは MathML 2 以降非推奨でした。レガシー用途が必要な場合は mathml4-legacy スキーマがこれを有効にします。
  • 例を分離して、3.2.3.3 Examples3.2.4.3 Examples の表示を改善しました。
  • 負の数は明示的な mo 演算子でマークアップするべきであることを明確化しました(3.2.4.4 単独の <mn> で書くべきでない数値 を参照)。
  • 筆算記法の名称を 3.6.2.2 Attributes で修正しました。
  • 3.4.7 Prescripts and Tensor Indices <mmultiscripts>, <mprescripts/> におけるスクリプトの水平位置合わせが基底に向かって行われることを明確化し、新しい例を追加しました。
  • トークン要素上の非推奨の MathML 1 属性 fontfamilyfontweightfontstylefontsizecolorbackground を削除し、代わりに mathvariantmathsizemathcolormathbackground を使用するようにしました。これらの属性は mstyle 上でも無効になりました。古い文書の検証が必要な場合は mathml4-legacy スキーマを使用できます。
  • 非推奨のフォント関連属性はすべて mglyph から削除されました。mglyph は引き続き MathML に画像を含めるために保持されています。
  • mspace に対する値 indentingnewline はもはや有効ではありません(これまで newline と同等でした)。
  • MathML の表の行およびセルは明示的に mtrmtd で示されなければなりません。[MathML1] では、実装が行マークアップを省略時に推論することを要求していましたが、今回は明示が必要です。
  • malignmark の使用を制限・簡素化し、既存実装で実装されている機能に合わせました。表要素上の groupalign 属性はもはやサポートされません。
  • 非推奨の mo 属性である fenceseparator を削除しました(これらは B. Operator Dictionary のプロパティ一覧にも掲載されなくなります)。これらは A.2.6 Legacy MathML スキーマでは依然有効ですが、デフォルトスキーマでは無効です。
  • 非推奨の要素 none は全体を通して空の mrow に置き換えられました([MathML-Core] に合わせるため)。
  • mlabeledtr 要素とそれに関連する属性 sideminlabelspacing はもはや仕様で扱われません。これらはデフォルトスキーマから削除されますが、Legacy Schema では有効です。
  • mpadded の長さ属性に対する特別拡張構文 ( "+" | "-" )? unsigned-number ( ("%" pseudo-unit?) | pseudo-unit | unit | namedspace )? を MathML-Core に合わせるためサポート対象外としました。多くの機能は標準の CSS 長さ構文でまだ利用可能です。詳細は 注: mpadded 長さ を参照してください。

4. Content Markup の変更

  • 章名を Mixing Markup Languages for Mathematical Expressions から改称しました。
  • <semantics> 要素を用いて表示マークアップと内容マークアップを混在させる既存のテキストは第二節に維持されていますが、いくつかの非規範的なテキストと例は [MathML-Notes] に移され、簡略化されています。
  • MathML 3 では encodingdefinitionURL<semantics> 上での使用が非推奨とされました。これらは本仕様では無効です。レガシー用途でこれらの属性を検証する必要がある場合は mathml4-legacy スキーマを使用できます。
  • メディアタイプ登録が本仕様の付録から別文書([MathML-Media-Types])に移されたため、関連テキストの書き換えと参照の調整を行いました。

メディアタイプの変更

  • メディアタイプの登録が本仕様の付録から別文書([MathML-Media-Types)に移されました。
  • スキーマを MathML4 に合わせて更新しました
  • スキーマをリファクタリングし、mathml4-core スキーマを基礎として mathml4-presentation を構築し、既存の文書群([MathML-Core])に一致する既存のコーパスを検証するための新しい mathml4-legacy スキーマを作成しました(これは [MathML3] に一致します)。
  • 要素の間隔値と優先度を見直して調整しました。
  • 従来の表形式に加えて新しい「compact」表示を提供しました。
  • 基礎となるデータファイルを Unicode 14/15/16 に更新しました。
  • この新しい付録はアクセシビリティに関連する要件と問題をまとめたものです。
  • これらの新しい付録は、これまで第4章中に分散していた構文表、OpenMath へのマッピング、および書き換え規則をまとめたものです。

J. 参考文献

J.1 規範的参照

[Bidi]
Unicode 双方向アルゴリズム。Manish Goregaokar मनीष गोरेगांवकर; Robin Leroy。Unicode Consortium。2025年8月13日。Unicode Standard Annex #9。URL: https://www.unicode.org/reports/tr9/tr9-51.html
[CSS-Color-3]
CSS カラーモジュール レベル 3。Tantek Çelik; Chris Lilley; David Baron。W3C。2022年1月18日。W3C 推奨。URL: https://www.w3.org/TR/css-color-3/
[CSS-VALUES-3]
CSS 値と単位モジュール レベル 3。 Tab Atkins Jr.; Elika Etemad。W3C。2024年3月22日。CRD。URL: https://www.w3.org/TR/css-values-3/
[CSS21]
カスケーディングスタイルシート レベル 2 改訂版 1 (CSS 2.1) 仕様。Bert Bos; Tantek Çelik; Ian Hickson; Håkon Wium Lie。W3C。2011年6月7日。W3C 推奨。URL: https://www.w3.org/TR/CSS2/
[DLMF]
NIST 数学関数のデジタルライブラリ、リリース 1.1.5。F. W. J. Olver; A. B. Olde Daalhuis; D. W. Lozier; B. I. Schneider; R. F. Boisvert; C. W. Clark; B. R. Miller; B. V. Saunders; H. S. Cohl; M. A. McClain。2022-03-15。URL: http://dlmf.nist.gov/
[Entities]
文字のための XML エンティティ定義(第3版)。Patrick D F Ion; David Carlisle。W3C。2023年3月7日。W3C 推奨。URL: https://www.w3.org/TR/xml-entity-names/
[HTML]
HTML 標準。Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters。WHATWG。Living Standard。URL: https://html.spec.whatwg.org/multipage/
[IEEE754]
IEEE754
[INFRA]
Infra 標準。Anne van Kesteren; Domenic Denicola。WHATWG。Living Standard。URL: https://infra.spec.whatwg.org/
[IRI]
国際化リソース識別子 (IRI)。M. Duerst; M. Suignard。IETF。2005年1月。Proposed Standard。URL: https://www.rfc-editor.org/rfc/rfc3987
[MathML-AAM]
MathML アクセシビリティ API マッピング 1.0。 W3C。W3C 編集者草案。URL: https://w3c.github.io/mathml-aam/
[MathML-Core]
MathML Core。David Carlisle; Frédéric Wang。W3C。2025年6月24日。W3C 候補勧告。URL: https://www.w3.org/TR/mathml-core/
[MathML-Media-Types]
MathML メディアタイプ宣言。W3C。W3C 編集者草案。URL: https://w3c.github.io/mathml-docs/mathml-media-types/
[Namespaces]
XML における名前空間 1.0(第3版)。 Tim Bray; Dave Hollander; Andrew Layman; Richard Tobin; Henry Thompson ら。W3C。2009年12月8日。 W3C 推奨。URL: https://www.w3.org/TR/xml-names/
[OpenMath]
OpenMath 標準。S. Buswell; O. Caprotti; D. P. Carlisle; M. C. Dewar; M. Gaëtano; M. Kohlhase; J. H. Davenport; P. D. F. Ion; T. Wiesing。The OpenMath Society。2019年7月。URL: https://openmath.org/standard/om20-2019-07-01/omstd20.html
[RELAXNG-SCHEMA]
情報技術 -- 文書スキーマ定義言語 (DSDL) -- 第2部: 正規文法ベースの検証 -- RELAX NG。ISO/IEC。2008年。URL: http://standards.iso.org/ittf/PubliclyAvailableStandards/c052348_ISO_IEC_19757-2_2008(E).zip
[RFC2045]
MIME パート 1: インターネットメッセージ本文の形式。N. Freed; N. Borenstein。IETF。1996年11月。Draft Standard。URL: https://www.rfc-editor.org/rfc/rfc2045
[RFC2046]
MIME パート 2: メディアタイプ。N. Freed; N. Borenstein。IETF。1996年11月。Draft Standard。URL: https://www.rfc-editor.org/rfc/rfc2046
[RFC2119]
RFC で要求レベルを示すためのキーワード。S. Bradner。IETF。1997年3月。Best Current Practice。URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC3986]
統一資源識別子 (URI): 一般的構文。T. Berners-Lee; R. Fielding; L. Masinter。IETF。2005年1月。Internet Standard。URL: https://www.rfc-editor.org/rfc/rfc3986
[RFC7303]
XML メディアタイプ。H. Thompson; C. Lilley。IETF。2014年7月。Proposed Standard。URL: https://www.rfc-editor.org/rfc/rfc7303
[RFC8174]
RFC 2119 のキーワードにおける大文字小文字の曖昧さ。B. Leiba。IETF。2017年5月。Best Current Practice。URL: https://www.rfc-editor.org/rfc/rfc8174
[rfc9110]
HTTP セマンティクス。R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed。IETF。2022年6月。Internet Standard。URL: https://httpwg.org/specs/rfc9110.html
[SVG]
Scalable Vector Graphics (SVG) 1.1(第2版)。Erik Dahlström; Patrick Dengler; Anthony Grasso; Chris Lilley; Cameron McCormack; Doug Schepers; Jonathan Watt; Jon Ferraiolo; Jun Fujisawa; Dean Jackson ら。W3C。2011年8月16日。W3C 推奨。URL: https://www.w3.org/TR/SVG11/
[UAAG20]
ユーザーエージェントアクセシビリティガイドライン (UAAG) 2.0。James Allan; Greg Lowney; Kimberly Patch; Jeanne F Spellman。W3C。2015年12月15日。W3C Working Group Note。URL: https://www.w3.org/TR/UAAG20/
[Unicode]
Unicode 標準。Unicode Consortium。URL: https://www.unicode.org/versions/latest/
[WCAG21]
Web コンテンツアクセシビリティガイドライン (WCAG) 2.1。Michael Cooper; Andrew Kirkpatrick; Joshue O'Connor; Alastair Campbell。W3C。 2025年5月6日。W3C 推奨。URL: https://www.w3.org/TR/WCAG21/
[XML]
拡張可能マークアップ言語 (XML) 1.0(第5版)。Tim Bray; Jean Paoli; Michael Sperberg-McQueen; Eve Maler; François Yergeau ら。W3C。2008年11月26日。W3C 推奨。URL: https://www.w3.org/TR/xml/
[XMLSchemaDatatypes]
XML Schema Part 2: Datatypes(第2版)。Paul V. Biron; Ashok Malhotra。W3C。2004年10月28日。W3C 推奨。URL: https://www.w3.org/TR/xmlschema-2/
[XMLSchemas]
XML Schema Part 1: Structures(第2版)。Henry Thompson; David Beech; Murray Maloney; Noah Mendelsohn ら。W3C。 2004年10月28日。W3C 推奨。URL: https://www.w3.org/TR/xmlschema-1/

J.2 参考情報

[Concept-Lists]
MathML コンセプトリストの維持。W3C。note。URL: https://w3c.github.io/mathml-docs/concept-lists/
[MathML-Notes]
MathML に関するノート。W3C。 note。URL: https://w3c.github.io/mathml-docs/notes-on-mathml/
[MathML-Types]
MathML 2.0 における構造化型。Stan Devitt; Michael Kohlhase; Max Froumentin。W3C。2003年11月10日。W3C Working Group Note。URL: https://www.w3.org/TR/mathml-types/
[MathML1]
Mathematical Markup Language (MathML) 1.0 仕様。Patrick D F Ion; Robert R Miner。W3C。1998年4月7日。 W3C 推奨。URL: https://www.w3.org/TR/1998/REC-MathML-19980407/
[MathML3]
Mathematical Markup Language (MathML) Version 3.0 第2版。David Carlisle; Patrick D F Ion; Robert R Miner。W3C。2014年4月10日。W3C 推奨。URL: https://www.w3.org/TR/MathML3/
[MathMLforCSS]
MathMLforCSS
[Modularization]
XHTML™ モジュール化 1.1。Daniel Austin; Subramanian Peruvemba; Shane McCarron; Masayasu Ishikawa; Mark Birbeck ら。W3C。2008年10月8日。W3C 推奨。URL: https://www.w3.org/TR/2008/REC-xhtml-modularization-20081008/
[OMDoc1.2]
OMDoc1.2
[RDF]
Resource Description Framework (RDF): 概念と抽象構文。Graham Klyne; Jeremy Carroll。W3C。2004年2月10日。W3C 推奨。URL: https://www.w3.org/TR/rdf-concepts/
[XHTML]
XHTML™ 1.0 拡張可能ハイパーテキストマークアップ言語(第2版)。Steven Pemberton。W3C。2018年3月27日。W3C 推奨。URL: https://www.w3.org/TR/xhtml1/
[XHTML-MathML-SVG]
XHTML + MathML + SVG プロファイル。Masayasu Ishikawa。W3C。2002年8月9日。W3C Working Draft。URL: https://www.w3.org/TR/XHTMLplusMathMLplusSVG/
XML Linking Language (XLink) バージョン 1.0。 Steven DeRose; Eve Maler; David Orchard。W3C。2001年6月27日。W3C 推奨。URL: https://www.w3.org/TR/xlink/