Copyright © 1998-2025 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
この仕様は数学マークアップ言語、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プロセス文書 によって管理されています。
この節は規範的ではありません。
数学とその表記法は数世紀あるいは数千年にわたって発展してきました。 経験のある読者にとって、数学表記は多くの情報を迅速かつ簡潔に伝えます。 しかしながら、表記の記号や配置は表現される数学の意味構造や意味論と深い対応関係を持つ一方で、 表記と意味論は同じものではありません。意味的な記号や構造は表記とは微妙に異なります。
したがって、伝統的な表示表記とその意味的内容の両方を表現できるマークアップ言語が必要です。 伝統的なレンダリングは視覚的読者に有用ですが、マークアップ言語はアクセシビリティもサポートしなければなりません。 意味的形式はさまざまな計算目的をサポートする必要があります。 いずれの形式も初等教育から研究レベルまでのすべての教育段階に適したものであるべきです。
MathMLは数学を記述するためのマークアップ言語です。 単独で使われる場合や他のXML内で使われる場合はXML構文を使用し、 HTML文書内で使われる場合はHTML構文を使用します。 概念的には、MathMLは主に二つの系統のマークアップで構成されています: 表示(Presentation)マークアップは数式を表示するために用いられ、 コンテンツ(Content)マークアップは数学的な意味を伝えるために用いられます。 これら二つの系統は、他の外部表現とともに並列マークアップを用いて組み合わせることができます。
本仕様の構成は次のとおりです: 2. MathMLの基本 は表示とコンテンツのマークアップに共通する基本事項を論じ、 3. 表示マークアップ および 4. コンテンツマークアップ はそれぞれ表示とコンテンツのマークアップを扱います; 5. Annotating MathML: intent は特にアクセシビリティのためにマークアップに注釈を付ける方法を論じ、 6. Annotating MathML: semantics は表示、コンテンツ、その他の形式を組み合わせるための注釈方法を論じます; 7. ホスト環境との相互作用 はMathMLがアプリケーションとどのように相互作用するかを扱います; 最後に、特殊記号や文字、エンティティ、フォントに関する問題は 8. 文字、エンティティ、およびフォント に示します。
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 の適合実装と見なされることが意図されています。
これら二つの仕様に加えて、Math WG は非規範的な Notes on MathML を作成しており、 MathMLを使用する際のベストプラクティスを理解するのに役立つ追加の例や情報を含んでいます。
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文法の一般的側面および属性値に使用される構文について説明します。
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/MathML
は math 要素上で使用でき、HTMLパーサによって無視されます。
MathML式がXMLパーサまたはHTMLパーサのどちらかで解析される可能性のある文脈に置かれる場合、
最大の互換性を確保するために次の形式を使用することが推奨されます(SHOULD):
<math xmlns="http://www.w3.org/1998/Math/MathML">
...
</math>
概念的に単一の引数のみを受け取る表示要素が存在しますが、便宜上任意の数の子要素を受け取るように書かれている場合があります;
その場合、当該子要素を含む mrow を推論して、それが該当要素の引数として扱われます。詳しくは 3.1.3.1 推論される <mrow>s を参照してください。
MathML仕様全体で各要素ごとに与えられる要素構文の詳細な議論では、必要な引数の数と順序、ならびに内容に対する他の制約が指定されています。 この情報は、表示要素のための 3.1.3 必須引数 にも表形式でまとめられています。
ウェブプラットフォーム上の [MathML-Core] の実装は、 当該文書で指定されている詳細なレイアウト規則に従うべきです。
本書は表示MathMLの具体的なレンダリング方法を推奨(推奨するが必須ではない)するのみです;これは媒体依存のレンダリングやCSSベースのウェブプラットフォームを用いない実装を許容するためです。
MathML要素は、要素の意味や効果をさらに特化させる値を持つ属性を取ります。属性名は本書全体で 等幅フォント
で示されています。属性の意味と許される値は各要素の仕様内で説明されています。
この節で説明する構文表記は、許可される値を指定する際に使用されます。
属性値の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 | 名前付きの length、namedspace。詳細は 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 は上の表で説明した型のインスタンスを意味します。 結合演算子は優先順位の高い順に示します:
| 表記 | 一致するもの |
|---|---|
| 同じ | |
| のオプションのインスタンス | |
| の0個以上のインスタンス、区切りは空白文字 | |
| の1個以上のインスタンス、区切りは空白文字 | |
| 各形式 を順に1つずつ、区切りの空白なしで | |
| 各形式 を順に1つずつ、区切りは空白文字(ただしコンマは含まない) | |
| 指定された形式 のいずれか一つ |
ここで選んだ表記は、MathMLの基本スキーマに用いられるRelaxNGの構文表記のスタイルに沿ったものです。A. MathMLの解析 を参照してください。
いくつかのアプリケーションでは空白の正規化への扱いが一貫していないため、互換性を最大にするためには値の部分を区切る際に単一の空白文字のみを使用することが望ましいです。 また、属性値の先頭および末尾の空白は避けるべきです。
HTMLとの互換性のため、列挙された文字列値を持つ属性は ASCII 大文字小文字を区別しない 比較を行います。
ほとんどの数値属性については、表現可能な値の部分集合のみが実際に意味を持ちます;この部分集合外の値は、特に指定がない限りエラーではなく、レンダラの裁量で許容される最も近い値へ繰り上げまたは繰り下げされます。許容される値の集合はレンダラによって異なり、MathMLによって指定されるものではありません。
属性値構文の説明でマイナス記号 ('-') を許可している場合(例えば number や integer)、
意味的に負の値が適切でない場合にマイナス記号が与えられていても構文エラーにはなりません。代わりに、その値は前述の段落で説明されたように処理アプリケーションによって扱われるべきです。明示的なプラス記号
('+') は、構文で明示的にリストされている場合(引用された '+' や "+"
のように)を除き数値の一部としては許可されず、その存在は属性値の意味を変えることがあります(許可される場合は各属性の文書で説明されています)。
ほとんどの表示要素には、サイズ、間隔、または類似のプロパティに使用される長さを表す値を受け取る属性があります。
[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 の属性はコンテンツの元の寸法を示す三つの 疑似単位、height、depth、および width
を許容していました(これらは通常のCSS単位の代わりに用いられるものです)。
また、単位なしの数値として長さを指定し、それを参照値の倍数として解釈する非推奨の用法も許容していました。これらの形式は MathML 4 では無効と見なされます。
しかしながら相対単位に関しては二つの追加事項を明確にする必要があります。
第一に、3.4
スクリプトと極限のスキーマ や mfrac のような要素は、
いくつかの引数に対して暗黙に小さなフォントサイズへ切り替えます。
同様に mstyle は現在のフォントサイズを明示的に変更するために使えます。そのような場合、属性値中の
em や ex の有効値は文脈内で外側とは異なります。第二に、属性値で使われる em や
ex の有効値は現在のフォントサイズの変更によって影響を受けることがあります。
したがって、mathsize や scriptlevel
のように現在のフォントサイズに影響を与える属性は、他の長さ値属性を評価する前に処理されなければなりません。
MathML属性のデフォルト値は、一般に各要素の詳細な説明とともに本文中で示されます。属性の表に平体で示されたデフォルト値はリテラルですが、斜体で示された場合はデフォルト値の算出方法の説明です。
inherited として記述されたデフォルト値は、3.3.4 スタイル変更 <mstyle>
に記載されたようにレンダリング環境から取られます。また場合によっては(個別に説明されるケース)、周囲の要素の他の属性値、あるいはそれらの値の一部から取られることがあります。使用される値は、明示的に指定できたであろうもので、同じ要素の内容や属性に依存することはなく、常にその環境からのみ取られます。(ただし、その意味が使われる際にそれらの属性や内容に依存することはあり得ます。)
automatic として記述されたデフォルト値は、MathMLレンダラが高品質のレンダリングを生成する方法で算出すべきです;その方法は通常MathML仕様で指定されません。算出される値は、明示的に指定し得たものであり得ますが、通常は要素の内容やレンダリングされる文脈に依存します。
属性の表に現れる他の斜体によるデフォルト値の説明は、各属性ごとに個別に説明されています。
XML開始タグ内で属性値を囲む単一または二重引用符は、各要素の属性値構文の表では表示されていませんが、本文中の例では属性値が引用符で囲まれているため、示されたコード片が正しいことがわかります。
一般に、inherited または automatic とされる属性を指定しない効果をMathMLでシミュレートするメカニズムはありません。単語として
inherited
や automatic
を明示的に与えても機能せず、通常は許されません。さらに、mstyle 要素(3.3.4 スタイル変更 <mstyle>)は、
子に対する表示属性のデフォルト値を変更するためにも使えます。
また、これらのデフォルトは属性が供給されなかった場合のMathMLアプリケーションの振る舞いを記述するものであり、DTDベースの仕様で時折要求されるようにXMLパーサが値を埋めることを示すものではない点に注意してください。
一般に、MathMLレンダリングのいくつかのプロパティは文書全体、あるいは大きな文書の一部の全体的プロパティと考えられることがあります。例としては mathsize(数学フォントサイズ:3.2.2 トークン要素に共通の数学スタイル属性 を参照)や、積分や和のような演算子の極限の設定(例:movablelimits や displaystyle)や、式の行分割時の振る舞い(例:linebreakstyle)などが挙げられます。これらは何らかの包含スコープから継承されると考えられます。上で述べたように、MathML属性のデフォルト値の設定を
inherited や automatic
として言及しましたが、レンダリングにおける振る舞いのグローバルなデフォルト値の第三の供給源として、MathMLの演算子辞書があります。デフォルトの例は B. 演算子辞書 に示されています。
これはまた 3.2.5.6.1
演算子辞書 で論じられ、例は 3.2.5.2.1
辞書に基づく属性 に示されています。
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>
は次と等価です:
<mtext>Theorem 1:</mtext>
または
<mtext>Theorem 1:</mtext>。
トークンの内容の先頭や末尾、あるいは単一スペース以外の連続として空白文字をエンコードしたい著者は、無視されないように非改行スペース U+00A0(または nbsp)や他の非マーキング文字を使用しなければなりません。
例えば、上の mtext の使用と次を比較してください。
<mtext>
 <!--nbsp-->Theorem  <!--nbsp-->1:
</mtext>
最初の例がレンダリングされるとき、Theorem
の前には何もなく、Theorem
と 1:
の間には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 要素を使用すべきです。
MathMLは単一の最上位またはルートの math 要素を規定しており、
文書内の各MathMLマークアップのインスタンスをカプセル化します。他のすべてのMathMLコンテンツは math
要素内に含まれていなければなりません;言い換えれば、すべての有効なMathML式は外側の <math> タグで囲まれています。math 要素は常にMathML式の最外層要素でなければならず、一つの math 要素が別の
math 要素を含むことはエラーです。これらの考慮事項は、式の切り取り貼り付けなどのアプリケーション間で部分式が渡される場合にも当てはまります;7.3 MathMLの転送 を参照してください。
math 要素は任意の数の子要素を含むことができます。デフォルトではこれらは mrow
要素に含まれているかのようにレンダリングされます。
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 の場合、
displaystyle は true
に初期化されます。
一方 display=inline
の場合、displaystyle
は false に初期化されます;どちらの場合も 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-width と altimg-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" | 式全体がウィンドウに収まるように使用されるフォントが選ばれます。これは式が大きすぎる場合にのみ発生します。ウィンドウが必要以上に大きい場合は、式は通常のサイズでより大きなウィンドウ内に表示されます。 |
本章では、数学表記のレイアウト構造を記述するために用いられる MathML の「表示(presentation)」要素を規定します。
表示マークアップの大部分は [MathML-Core] に含まれています。 精密な表示上の詳細(コアに属する要素や属性をウェブブラウザで表示する際の取り扱い)については、その仕様を参照してください。 ウェブブラウザ以外の環境では、MathML の表示要素は特定のレンダリング方法を提案する(必須としない)にとどまり、媒体依存のレンダリングや個々のスタイルの好みに対応できるようになっています。 ブラウザ非依存のレンダラーは、表示が可読である限り独自のレイアウト規則を使用することが許されています。
表示要素に使われる名前は視覚的なレイアウトを示唆するものです。
しかしながら、数学表記は新しい概念の発展に伴って再利用される長い歴史があります。
そのため、例えば mfrac のような要素が実際には分数でない場合もあり得ます。その場合は音声出力などのために intent 属性を用いて意図を示すべきです。
本章では、MathML の表示要素と属性のすべてを、使用例とともに説明します。
表示要素は、文書における章や節や段落が本文の上位の構造を表すのと同じように、数学表記の構文的構造を表現することを目的としています。このため、識別子や演算子の単一行は単一の mrow ではなく、複数の入れ子になった mrow
要素で表現されることがよくあります。例えば、
は通常次のように表現されます:
<mrow>
<mi> x </mi>
<mo> + </mo>
<mrow>
<mi> a </mi>
<mo> / </mo>
<mi> b </mi>
</mrow>
</mrow>
同様に、上付き・下付きは直前の単一文字ではなく、その基となる式全体に付属します。 この構造により、表示幅などレンダリング環境の詳細が文書作成時に不明であっても高品質なレンダリングが可能になり、表現された数学構造の自動解釈も容易になります。
伝統的な表記で他の記号と同じように表示される、あるいは可視化されない識別子や演算子を示すために特定の文字が用いられます。例えば、U+2146、U+2147、U+2148 はそれぞれ微分の d、指数の e、虚数単位の i を表し、単なる変数として使われる同じ文字とは意味的に区別されます。同様に U+2061、U+2062、U+2063、U+2064 は関数適用、不可視掛け算、不可視カンマ、不可視プラスを表します。これらは通常不可視にレンダリングされますが、空白や改行位置に影響を与え得る重要な情報を表し、音声出力では別個の読み方を持つことがあります。したがって、該当する場合はこれらの文字(または対応するエンティティ)を使用するべきです。
MathML のエンティティの完全な一覧は [Entities] に記載されています。
表示要素は二つのクラスに分けられます。 トークン要素 は個々の記号、名前、数値、ラベルなどを表します。 レイアウトスキーマ は部分式から式を構築し、その内容として要素だけを持つことができます。 これらは 一般的なレイアウト、 スクリプトおよび極限、 表形式の数式、 および 基本的な数式 のスキーマに細分されます。 また、いくつかの空要素が特定のレイアウトスキーマと組み合わせてのみ使われます。
数式内のすべての個々の「記号」は MathML のトークン要素(例: <mn>24</mn>)で表すべきです。主なトークン要素の型は識別子(mi、変数や関数名など)、数値(mn)、演算子(mo、括弧類や区切り記号(コンマ等)を含む)です。さらにテキストや美観上の空白を表す要素や、コンピュータ代数系との互換性のための「文字列リテラル」を表す要素もあります。
レイアウトスキーマは、部分式が分数やスクリプト付きの表現などのより大きな式にどのように組み込まれるかを指定します。レイアウトスキーマは子要素の数や位置に特別な意味を付与します。レイアウトスキーマの子はその要素の 引数 とも呼ばれます。したがって、レイアウトスキーマの内容は、まさにそれが引数となる 0 個以上の要素の列から成ります。
ここで記述される多くの要素は特定の数の引数(常に 1、2、または 3)を必要とします。以下の要素構文の詳細説明では、必要な引数の数はそれぞれの位置に対する引数名を示すことによって暗黙的に示されています。いくつかの要素には引数の数や型に関する追加の要件があり、それらは個々の要素説明で述べられます。例えば、いくつかの要素は 0 個以上の引数の列を受け入れる(すなわち引数が全く無くても許される)場合があります。
レンダリングされる空白をエンコードする要素は、それが現れる要素の引数として 計上される ことに注意してください。3.2.7 空白 <mspace/> を参照して、その適切な使用法を確認してください。
次表に 1* 引数を必要とすると示されている要素(msqrt, mstyle,
merror,
mpadded, mphantom, menclose,
mtd, mscarry,
および math)は概念的には単一の引数を受け取りますが、実際には任意個の子を受け取ります。子が 0 個または 1
個より多い場合、それらの内容をすべて結合して単一の推論された mrow と見なしてその mrow を引数として扱います。
例えば、
<msqrt>
<mo> - </mo>
<mn> 1 </mn>
</msqrt>
は次のように扱われます
<msqrt>
<mrow>
<mo> - </mo>
<mn> 1 </mn>
</mrow>
</msqrt>
この機能により、多くの mrow 要素を明示的に含めなくても済むようになります。
便宜上、各要素の引数数要件と、位置によって区別される場合の各引数の役割を示す表を示します。引数数が 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* |
特定の MathML 表示要素は、特定の文脈で特殊な振る舞いを示します。これらの特殊な振る舞いは以下の各要素の詳細な説明で論じられますが、便宜上、重要な振る舞いのクラスをここに列挙します。
いくつかの要素は空白に類するものと見なされます;これらは 3.2.7
空白 <mspace/> で定義されています。この定義は
mo 要素(3.2.5
演算子、フェンス、区切り記号またはアクセント <mo>)の提案されるレンダリング規則の一部に影響します。
例えば msup のような要素は、その第一引数である演算子を装飾することができます。これらの要素は 3.2.5 演算子、フェンス、区切り記号またはアクセント <mo> に列挙されており、装飾された演算子
の定義や伸縮可能な演算子に対する提案されるレンダリング規則への影響について説明しています。
多くの読者に馴染みのある表記では、全体のレイアウトもテキスト記号も左から右(LTR)に配置されます。しかし前述のように、ヘブライ語やモロッコ、ペルシャのような地域で書かれる数学では、全体のレイアウトはそのままに、埋め込まれた記号(しばしばヘブライ語やアラビア語)は右から左(RTL)に書かれます。さらに、アラブ圏の多くでは表記全体が完全に RTL に配置されます;その場合も上付きは上方に配置されますが、基の右ではなく左に続きます。
したがって MathML 3.0 では二つの異なる方向性を認識します:トークン要素内のテキストおよび記号の方向性と、レイアウトスキーマによって表される全体的な方向性です。これら二つの側面について以下で述べます。
ここに縦書き言語に関する議論(および現状のサポート欠如)を少し追加する必要があるかもしれません
数式の全体的な方向性、すなわちレイアウトスキーマの方向は、包含する math 要素の dir 属性で指定されます(参照: 2.2 最上位の <math> 要素)。
デフォルトは ltr です。dir=rtl
を用いると、レイアウトは従来の欧文レイアウトの鏡映になります。つまり、上下の移動は変わらず、配置の進行方向だけが右から左になります。
例えば、RTL レイアウトでは下付き/上付きは基の左側に現れます;根号のルート記号は右側に現れ、横棒は基の左へ伸びます。方向性に依存する要素のレイアウト詳細はそれぞれの要素の説明で示されます。これらの議論では、どちらの側を使うかが方向性に依存する場合にオブジェクトの側を指定するために leading(前端)と trailing(後端)という用語を用います;すなわち leading は LTR では左、RTL では右を意味します。left と right はそれ以外の場合は通常の左・右を意味すると考えて差し支えありません。
全体的な方向性は通常 math に設定されますが、個々の部分式に対して mrow や mstyle の dir 属性を用いて切り替えることもできます。指定されていない場合、要素は包含する要素の方向性を継承します。
テキストの方向性は、テキストを含む MathML のトークン要素(mtext, mo,
mi, mn と ms)において問題になります。これはそのテキストの Unicode プロパティによって決まります。トークン要素が完全に LTR または
RTL の文字のみを含む場合は、その方向に従って表示されます。RTL のアラビア語と LTR の数字が混在するような場合は、Unicode の双方向アルゴリズム [Bidi]
を適用するべきです。このアルゴリズムは同じ方向の文字列の処理方法と、それらの列の(再)順序付けを規定します。基底、すなわち初期の方向は上で述べた全体的方向性(3.1.5.1
数式全体の方向性)によって与えられ、弱い方向性を持つ文字の扱いや列のネストに影響します。(まれなケースで初期方向を明示するために dir 属性がトークン要素上で許可されています。)mglyph や
malignmark
要素がトークン要素内に現れる場合、それらは実質的に中立(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 で使うべきであり、これらのコードポイントは強い左から右の方向性を持ちます。
いわゆる「表示された」式(行を独立して占めるもの)は、通常インライン式よりも垂直方向の余白を大きく取ります。インライン式は隣接するテキストと馴染むようにし、隣の行に侵入しないようにするべきです。例えば、表示された総和記号では極限が総和記号の上下に置かれますが、インラインでは上付き・下付きの位置に置かれます。同様に、上付き・下付きや入れ子の分数などは通常、式の主要部分より小さいサイズで表示されます。MathML
は各表示ノードに displaystyle と scriptlevel
を暗黙に関連付け、現在の文脈でより広い垂直レイアウトが適用されるか、スクリプトのレベルがどの程度かを反映します。
これらの値は math 要素によって display 属性に従って初期化されます。さまざまな スクリプトおよび極限スキーマ 要素や、mfrac や mroot のような要素は、通常その引数の一部または全部に対して displaystyle を false に設定し scriptlevel
を増加させます(具体的な規則は各要素の説明を参照)。これらの属性はすべての表示要素で明示的に設定することもでき、その場合はその要素に適用され、さらに規則が適用されない限り子要素のデフォルトとなります。なお、scriptlevel に + や -
が付く場合はその値だけ増減し、符号のない整数が与えられた場合はその値に設定されます。それ以外のケースでは親から継承されます。
displaystyle は式の垂直空間の使用量に影響します:true の場合は表示式の広いレイアウトが用いられ、false
の場合はインライン式のよりコンパクトなレイアウトが用いられます。これは主に mo 要素の largeop や movablelimits の解釈に影響しますが、より高度なレンダラはこの属性を用いて任意に表示の密度を変えることができます。
scriptlevel の主な効果はフォントサイズを制御することです。通常は scriptlevel
が高いほどフォントサイズは小さくなります(非視覚的レンダラは媒体に合わせて同様に応答できます)。scriptlevel
が変更されるたびに、現在のフォントサイズは scriptsizemultiplier の値の(変更された)scriptlevel の差分乗により乗算されます。しかし、スクリプトによるフォントサイズの変化は読み取り不能に小さくなるのを防ぐために
scriptminsize を下回らないようにすべきです。デフォルトの scriptsizemultiplier はおよそ √(1/2) で、scriptminsize はデフォルトで 8pt です;これらは任意の表示要素で変更可能です(詳細は MathML Core Attributes を参照)。scriptlevel 属性は任意の値(負値を含む)を許し、負値はフォントサイズを増やす結果になります。
scriptlevel によるフォントサイズの変更はノードの「外側」から課されるものと見なされます。つまり、mfrac のトークン子に対する明示的な mathsize は scriptlevel の効果より後に適用されるため、mathsize
が実質的に scriptlevel の効果を上書きします。ただし、scriptlevel の変更は現在のフォントサイズを変更するため、em 長さの意味(2.1.5.2 長さ値属性 を参照)に影響し、結果として scriptlevel が影響を残す場合があります。なお、mathsize は
scriptminsize によって制約されないため、直接のフォントサイズ変更によって scriptminsize より小さくなる場合があります。
CSS や mathsize(3.2.2 トークン要素に共通する数学スタイル属性 を参照)による現在のフォントサイズの直接的な変更は、scriptlevel の値には影響しないことに注意してください。
TeX の \displaystyle, \textstyle, \scriptstyle, \scriptscriptstyle はそれぞれ displaystyle と scriptlevel に対応し、
true と 0,
false と 0,
false と 1,
false と 2 に対応します。したがって、math の display=block は \displaystyle
に対応し、display=inline は \textstyle
に対応します。
MathML は、過度に長い式を複数行に分割するための自動および手動(強制)改行の両方をサポートします。
すべての改行は mrow(推論された mrow を含む)または mfenced の内部で行われます。
改行は通常 mo 要素で行われ、下位互換性のために mspace
でも行われます。
レンダラは自動改行を他の箇所、例えば隣接する mi 要素の間や非常に長い単一トークン(長い mn など)の内部にも挿入することがあります。MathML
はそのような改行を指定する手段を提供しませんが、レンダラがそのような点で改行を行う場合は、続く行のインデントはその時点で有効な インデント属性 に従って行うべきです。
自動改行は、包含する math 要素が overflow=linebreak
であり、表示エンジンが式全体を表示するのに十分な幅がないと判断したときに発生します。したがって利用可能な幅はレンダラに知られている必要があります。フォント特性と同様に、その幅は MathML
要素が存在する環境から継承されると考えられます。幅が決定できない場合は無限幅を仮定するべきです。mtable
の内部では各列に幅があり、それは属性で指定するか内容によって決定されます。この幅は改行幅として使われ、各セルは必要に応じて折り返されます。
強制改行は mo または mspace 要素に linebreak=newline
を設定することで指定します。自動改行と手動改行は同じ式内で共存できます。
mfrac, msqrt, mroot, menclose
および各種スクリプト要素の部分式の自動改行は必須ではありません。レンダラはこれらの要素内の強制改行を無視する自由があります。
mo や場合によっては mspace
要素上の属性は、改行と続く行のインデントを制御します。制御可能な改行の側面は次のとおりです:
どこで — 属性は特定の演算子や空白での改行の望ましさ、特に改行が必須か抑制されるかを決定します。これらは mo と mspace のみで設定できます。(参照: 3.2.5.2.2
改行属性。)
演算子の表示/位置 —
改行が発生したとき、演算子が行末に現れるか次行先頭に現れるか、あるいは両方に現れるか、また改行後にどれだけ垂直空間を追加するかを決定します。これらの属性は mo 要素上で設定するか、mstyle や math 要素から継承できます。(参照: 3.2.5.2.2
改行属性。)
インデント — 改行後の行のインデントを決定します。例えば次行が前の行のある点に揃うようにインデントすることを含みます。これらの属性は mo 要素上で設定するか、mstyle や math 要素から継承できます。(参照: 3.2.5.2.3
インデント属性。)
math 要素がインライン文脈に現れる場合、文書のテキストレンダリングエンジンが採用する段落フロー規則に従うことがあります。そのような規則は本仕様の範囲外です。あるいは math 要素の overflow 属性の値を使用することもできます。
(参照: 2.2.1
属性。)
次の例は強制改行と強制整列を示します:
<mrow>
<mrow>
<mi>f</mi><mo>⁡<!--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>⁢<!--InvisibleTimes--></mo><msup><mi>x</mi><mn>3</mn></msup>
</mrow>
<mo>+</mo>
<mrow>
<mn>6</mn><mo>⁢<!--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>⁢<!--InvisibleTimes--></mo><mi>x</mi>
</mrow>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mrow>
</mrow>
これの表示は次のようになります
なお、indentalignlast のデフォルトが indentalign であるため、上の例では indentalignlast の代わりに indentalign を使用することも可能でした。また
linebreakstyle='before' はデフォルト値であるため明示する必要はありません。
mi |
識別子 |
mn |
数値 |
mo |
演算子、フェンス、または区切り記号 |
mtext |
テキスト |
mspace |
空白 |
ms |
文字列リテラル |
さらに、mglyph
要素はトークン要素内で使用され、非標準の記号を画像として表現するために用いられます。
mrow
および
a
|
任意個の部分式を水平方向にグループ化 |
mfrac |
二つの部分式から分数を形成 |
msqrt |
平方根(指数のない根)を形成 |
mroot |
指定された指数を持つ根を形成 |
mstyle |
スタイルの変更 |
merror |
前処理器による構文エラーメッセージを囲む |
mpadded
|
コンテンツまわりの空間を調整 |
mphantom
|
コンテンツを不可視にするがそのサイズを保持 |
mfenced
|
一対のフェンスでコンテンツを囲む |
menclose
|
長い除算線などの伸縮する記号でコンテンツを囲む |
msub |
基に下付き文字を付ける |
msup |
基に上付き文字を付ける |
msubsup
|
基に下付き・上付きのペアを付ける |
munder |
基に下書きを付ける |
mover |
基に上書きを付ける |
munderover |
基に下書き・上書きのペアを付ける |
mmultiscripts |
基にプレスクリプトやテンソル添字を付ける |
mtable |
表または行列 |
mtr |
表または行列の行 |
mtd |
表または行列の一つの項目 |
maligngroup
および
malignmark
|
配置マーカー |
mstack |
揃えられた文字の列(列状) |
mlongdiv
|
msgroup に似るが除数と結果が追加される |
msgroup
|
同様にシフトされた複数の行のグループ(mstack 内) |
msrow |
mstack の行 |
mscarries
|
繰り上がりや繰り下がりを表す mstack 内の行 |
mscarry
|
mscarries の一項目 |
msline |
mstack 内の水平線 |
maction
|
部分式にアクションを結びつける |
2.1.6 すべてのMathML要素で共有される属性
に列挙された属性に加え、
すべての MathML 表示要素は次のクラスの属性を受け取ります。MathML 3 ではこれらは mstyle 要素のみに設定可能でしたが、
[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 大文字小文字を区別しない です。 |
||
これらの属性も任意の 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" を用いて整列を指定する際の整列点を決める文字を指定します。デフォルトの "."
は多くの国で浮動小数点数の整数部と小数部を分ける小数区切り文字です。
|
||
もし scriptlevel
がある要素によって増分的に変更され、その要素が他のいくつかの属性も同時に設定する場合、変更の全体的な効果は処理順序に依存することがあります。そのような場合、以下の属性は XML
開始タグの属性リスト内に現れる順序にかかわらず、次の順序で処理されるべきです:
scriptsizemultiplier, scriptminsize,
scriptlevel, mathsize。
MathML 式はしばしば HTML のようなテキストデータ形式に埋め込まれるため、MathML レンダラは埋め込み先の文脈で使われている前景色を継承するべきです。ただし MathML([MathML-Core] と対照的に)は、レンダリング環境からスタイル情報がどのように継承されるかの仕組みを指定していない点に注意してください。詳細は 3.2.2 トークン要素に共通する数学スタイル属性 を参照してください。
なお、提案される MathML の視覚的レンダリング規則は、mathbackground
属性が影響する領域の正確な範囲を定義しません。ただし、内容が負の寸法を持たず、周囲の負の間隔によって描画領域が重なるべきでない場合は、その領域は内容の描画の背後にあり、周囲の式の描画の背後にはならないようにするべきです。負の間隔による描画領域の重なりが
mathbackground 属性の影響範囲に与える効果はここでは定義されていません。
表示マークアップのトークン要素は、意味を持つ数学表記の最小単位を表現することを広く意図しています。トークンはテキスト内の単語に大まかに相当します。しかし、数学表記が厳密かつ記号的であるため、トークン要素のさまざまなカテゴリやプロパティは MathML マークアップで大きな役割を果たします。対照的に、テキストデータでは個々の単語を特別にマークアップしたりスタイル指定したりする必要はほとんどありません。
トークン要素は
識別子(mi)、
数値(mn)、
演算子(mo)、
テキスト(mtext)、
文字列(ms)
および空白(mspace)を表現します。
mglyph 要素は
トークン要素の内部で
標準でない記号を画像で表現するために使われます。
各トークン要素について詳述する前に、
次の2つの小節でトークン要素の許容内容とそれらに共通の属性について説明します。
MathML マークアップ内の文字データは、トークン要素の内容の一部としてのみ現れることが許可されています。要素間の空白は無視されます。
空の mspace 要素を除き、
トークン要素は任意の個数(ゼロ以上)の Unicode 文字、
または mglyph や
malignmark 要素を含むことができます。
mglyph 要素は
標準でない文字や記号を画像で表現するために使われます。
malignmark 要素は表構造内で使うための配置点を設定し、それ以外の場合は不可視です(3.5.4 配置マーカー
<maligngroup/>, <malignmark/>を参照)。
文字 は Unicode 文字データとして直接表現することもでき、数値または文字エンティティ参照を介して間接的に表現することもできます。 Unicode には似たような文字が多数存在します。 どの場面でどの文字を使うべきかについては [MathML-Notes] を参照してください。
(mspace を除く)トークン要素は、その内容があれば内容として(すなわち視覚の場合は、標準的な文字のグリフや mglyph の画像を横に詰めて配置して)レンダリングされるべきです。
mspace 要素はその属性で決まる幅の空白としてレンダリングされます。
レンダリングアルゴリズムは、後述する数学スタイル属性も考慮し、種類ごとの規則や属性によって周囲の間隔も調整されるようにする必要があります。
内容の方向性の特性も必ず尊重されなければなりません(3.1.5.2
トークン要素における双方向レイアウト を参照)。
mglyph は [MathML-Core]
でサポートされていません。
ウェブプラットフォームでは HTML の img
要素の使用が推奨されます。これは MathML を (X)HTML 内に埋め込む場合、トークン要素内で許可されます。
既存の MathML で mglyph を使用している場合、Javascript ポリフィル
がウェブドキュメント向けに提供されており、mglyph を img で実装します。
mglyph 要素は標準でない記号を画像として表示する仕組みを提供します。
既存の Unicode 文字では十分でない場合、
mglyph は
mi、mn、mo、mtext、ms
のトークン要素の内容中で使用できます。
Unicode には数学で用いられる膨大な文字が定義されており、 そして、ほとんどの場合、これらの文字を表現するグリフがさまざまなフォントで広く利用可能です。これらの文字はほとんど全てのニーズを満たすはずですが、MathML は数学が静的なものではなく、必要に応じて新しい記号が追加されていくことを認識しています。十分に普及した記号は最終的に Unicode Consortium や他の標準化機関に取り込まれるでしょうが、それは大抵時間がかかるものです。
グリフの src 属性は mglyph
を一意に識別することに注意してください;
同じ src を持つ 2 つの mglyph は、
2 文字/グリフが同一かどうかを判定する必要があるアプリケーションにおいて同一と見なされるべきです。
mglyph 要素は
3.1.9 表示要素に共通の属性
で挙げられた属性を受け取りますが、
mathcolor には効果がない点に注意してください。
mathbackground で指定された背景色は、画像に透明部分があれば透けて見えるべきです。
mglyph はここに列挙する追加属性も受け取ります。
| 名前 | 値 | デフォルト |
| src | URI | 必須 |
| 画像リソースの場所を指定します; MathML のソースの base-URI からの相対 URI にすることもできます。 | ||
| width | length | 画像から取得 |
グリフの希望幅を指定します。height を参照してください。
|
||
| height | length | 画像から取得 |
グリフの希望高さを指定します。
width と height
のいずれか一方のみが与えられた場合、
画像は縦横比を維持して拡大縮小されるべきです;
両方とも与えられていない場合は画像は本来のサイズで表示されるべきです。
|
||
| valign | length | 0ex |
| 画像のベースライン整列点を現在のベースラインに対して指定します。 正の値は画像の底部を現在のベースラインより上に移動し、負の値は下に移動します。 0(デフォルト)の場合は画像のベースラインが画像の底部に一致します。 | ||
| alt | string | 必須 |
| グリフの代替名を指定します。指定した画像が見つからない場合や表示できない場合、 レンダラは警告メッセージや未知のグリフ記号としてこの名前を使うことがあります。 この名前は音声レンダラや記号処理系でも使われる可能性があり、記述的に選ぶべきです。 | ||
以下の例は、研究者が画像の集合を使って 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>
これは次のようにレンダリングされます:
すべての表示要素に定義された属性に加えて
(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 | 継承 |
トークン内容の表示サイズを指定します。
small と big の値は
現在のフォントサイズより小さくまたは大きくなりますが、正確な比率は未指定です;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を参照してください。
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>
<mi>mi 要素は、識別子としてレンダリングされるべき記号名や任意のテキストを表します。識別子には変数、関数名、記号定数が含まれます。
一般的なグラフィカルレンダラは、mi 要素をその内容として(3.2.1
トークン要素の内容文字、<mglyph/>を参照)、
周囲に余分な空白を加えず(隣接要素にともなう空白を除く)に表示します。
すべての数学的識別子
が mi 要素で表されるわけではありません。例えば、下付きやダッシュ付き変数はそれぞれ msub や
msup を用いて表すべきです。逆に、項
の役割を果たす任意のテキスト(たとえば和の記号列に現れる省略記号など)は
mi 要素で表してかまいません。
mi
は表示要素であり、その内容が識別子としてレンダリングされるべきであることだけを示していることを強調するべきです。ほとんどの場合、mi
の内容は実際には変数や関数名などの数学的識別子を表します。しかし、前段で示したように、識別子としてレンダリングされるべき表記と実際に数学的識別子を意図する表記との対応は完全ではありません。セマンティクスが確定している識別子要素については、4. コンテンツマークアップの ci の記述を参照してください。
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 属性の値を解決すべきです。
<mi>x</mi>
<mi>D</mi>
<mi>sin</mi>
<mi mathvariant='script'>L</mi>
<mi></mi>
内容のない mi 要素も許容されます。
<mi></mi> は、たとえば 数式エディタ
で、従来の数学構文上 項
が必要だがまだ入っていない場所を表現するのに使われる可能性があります。
識別子には sin
のような関数名も含まれます。sin x
のような式は、下記のようにU+2061(エンティティ
af または ApplyFunction)を使って記述すべきです。
また不可視演算子についての議論は 3.2.5
演算子・フェンス・区切り・アクセント
<mo>を参照してください。
<mrow>
<mi> sin </mi>
<mo> ⁡<!--ApplyFunction--> </mo>
<mi> x </mi>
</mrow>
「項」として扱うべき多様なテキストも次のように mi 要素で表せます:
<mrow>
<mn> 1 </mn>
<mo> + </mo>
<mi> … </mi>
<mo> + </mo>
<mi> n </mi>
</mrow>
このような特別な用途で mi を使う際は、明示的に mathvariant 属性を設定すると、一部レンダラの既定動作よりより良い結果になることがあります。
記号定数の名前も mi 要素で表現します:
<mi> π </mi>
<mi> ⅈ </mi>
<mi> ⅇ </mi>
<mn>mn 要素は、数値リテラル
または数値リテラルとしてレンダリングされるべき他のデータを表します。一般的に、数値リテラルとは桁(数字)の並びであり、小数点を含むこともあり、非負整数や実数を表現します。
一般的なグラフィカルレンダラは、mn 要素をその内容として(3.2.1
トークン要素の内容文字、<mglyph/>参照)、それらの周囲に余分な空白を加えずに(mo などの隣接要素による空白を除いて)レンダリングします。
mn 要素は通常、傾斜していないフォントでレンダリングされます。
数
という数学的概念は文脈によって非常に微妙で複雑になり得ます。このため、すべての数学的な数を mn
で表現すべきとは限りません。mn
以外で表現すべき数学的数の例は以下のとおりで、複素数、分数で表された数の比、および数値定数の名称が含まれます。
逆に、mn
は表示要素なので、特定の標準的な数字列でなくとも単に数値リテラルとしてレンダリングされるべき任意のテキストを内容として含める状況が時に存在します。たとえ内容がどの標準的な数値エンコーディングにも明確に解釈できない場合でもです。ただし一般論として、mn
要素は実際に何らかの数的量を表現しようと意図している場合に使用すべきです。特定の種類の数学的数としての意味が保証される要素については、4. コンテンツマークアップ内の cn の記述を参照してください。
mn 要素は 3.2.2 トークン要素に共通する数学スタイル属性で挙げられた属性を受け取ります。
<mn> 2 </mn>
<mn> 0.123 </mn>
<mn> 1,000,000 </mn>
<mn> 2.1e10 </mn>
<mn> 0xFFEF </mn>
<mn> MCMLXIX </mn>
<mn> twenty-one </mn>
多くの数学的な数は、mn だけでなく他の表示要素を使って表現すべきです。これには複素数、負の数、分数として示される数の比、数値定数の名称が含まれます。
<mrow>
<mn> 2 </mn>
<mo> + </mo>
<mrow>
<mn> 3 </mn>
<mo> ⁢<!--InvisibleTimes--> </mo>
<mi> ⅈ </mi>
</mrow>
</mrow>
<mfrac> <mn> 1 </mn> <mn> 2 </mn> </mfrac>
<mrow><mo>-</mo><mn>2</mn></mrow>
<mi> π </mi>
<mi> ⅇ </mi>
<mo>
mo 要素は演算子または演算子として表示すべきものを表します。一般に数学の演算子に関する表記規約はかなり複雑であるため、MathML は
mo 要素のレンダリング動作を指定する比較的洗練された仕組みを提供します。その結果、MathML
における「演算子として表示されるべきもの」の一覧には、通常の意味での数学的演算子ではない表記も多く含まれます。中置・前置・後置の形式を持つ通常の演算子に加え、波括弧や括弧、絶対値記号のようなフェンス文字、コンマやセミコロンのような区切り記号、および記号上のバーやチルダのような数学的アクセントが含まれます。本章ではこの広義の意味で「演算子」という用語を用います。
一般的なグラフィカルレンダラはすべての mo 要素をその内容として表示します(3.2.1
トークン要素の内容文字、 <mglyph/>を参照)、
その周囲の余白は属性によって決まり、下記でさらに説明されます。
MathML 文字セット用の完全なフォントにアクセスできないレンダラは、場合によっては mo
要素を内容と正確に同じ文字としてではなく別の形で表示することを選ぶことがあります。たとえば <mo> ≤ </mo> を端末では
<= として表示することがあり得ます。しかし一般的な規則として、レンダラは mo
要素の内容をできるだけ文字通りにレンダリングするよう努めるべきです。つまり <mo> ≤ </mo> と
<mo> <= </mo> は異なる表示をすべきです。前者は単一の「小なりイコール」記号として表示され、後者は二文字列の列
<= として表示されるべきです。
mo 要素の重要な特徴は、その既定属性値が以下で説明する「演算子辞書」から個々に設定される点です。特に stretch、symmetric、および accent の既定値は通常演算子辞書で見つかるため、各 mo
要素に毎回指定する必要はありません。
また、いくつかの数学的演算子は単に mo 要素だけで表されるのではなく、(たとえば周囲に上付き文字があるなど)装飾された mo 要素として表されることがあります。これは後述します。逆に表示要素として、mo 要素は標準的な演算子としての解釈を持たない任意のテキストを含めることもできます。例は 3.2.6 テキスト <mtext>
の「テキストと数学の混在」の議論を参照してください。特定の数学的演算子のセマンティクスが保証される MathML コンテンツ要素の定義については 4. コンテンツマークアップ を参照してください。
また、3.1.7 式の改行
で論じられるように、改行は通常演算子で行われます(前か後かは慣習に依存します)。したがって mo
要素は特定の演算子での改行の望ましさを符号化する属性や、改行がその演算子で行われた場合の演算子の扱いやインデントを記述する属性を受け取ります。
mo 要素は
3.2.2
トークン要素に共通する数学スタイル属性
とここに列挙する追加の属性を受け取ります。
演算子の表示は数学において極めて重要であるため、mo 要素は多くの属性を受け取ります。これらは次の三つの小節で説明されます。
ほとんどの属性は包摂する mstyle 要素、math 要素、
文書の包含部、
または
3.2.5.6.1 演算子辞書
から既定値を取得します。
要素上で「継承」として示された値が明示的に与えられていない場合、mo、mstyle、math のいずれにも指定がなく、かつ演算子辞書にもその
mo 要素に対する値が見つからない場合、表に示された括弧内の既定値が使用されます。
| 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) |
演算子が下付きや上付きとして用いられる場合にアクセント(ダイアクリティカルマーク)として扱うべきかを指定します;該当する要素は munder、mover、
および munderover です。
注意: MathML Core との互換性のために、この属性の代わりに囲む mover および
munderover に accent=true
を指定して用いることができます。
|
||
以下の属性は改行が発生するか否か、また改行が発生した場合の見た目に影響します。
| 名前 | 値 | 既定 |
| 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
は中置演算子のために指定された値を使用します;この値(before、after、または duplicate のいずれか)はアプリケーションによって指定されるか、または mstyle
により束縛されることがあります(before は最も一般的な改行スタイルに対応します)。
比較は ASCII 大文字小文字を区別しない 方式で行われます。 |
||
| linebreakmultchar | string | 継承 (⁢) |
改行時に ⁢ 演算子を可視化するために使われる文字を指定します。たとえば linebreakmultchar="·" とすれば掛け算を中央ドットで可視化できます。
|
||
隣接する mo および mspace 要素上の linebreak 値は相互作用しません;ある mo 上で
linebreak=nobreak
が指定されていても、それだけで前後の(入れ子の可能性がある)mo や mspace の改行を抑止したり、前後の mo の linebreakstyle と相互作用したりはしません。とはいえ、通常の状況ではその mo の両側での改行を防ぎます。
以下の属性は式を構成する行のインデントに影響します。主にこれらの属性は自動または手動の改行の後に新しい行を配置する方法を制御します。ただし indentalignfirst および indentshiftfirst は改行のない単一行式の配置も制御します。これらの属性が mo または mspace
に現れると、その要素で改行が発生した場合に適用されます。mstyle や math
要素に現れる場合、それらは内部で発生する改行のスタイルの既定値を決定します。大規模に手動改行をマークアップしない限り、これらの多くの属性は 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
が利用不可能になったり整列が不可能な位置にあることがあります。そのような場合、indentalign は auto に戻るべきです。
|
||
| 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 を用いる
|
<mo>+</mo>
<mo><</mo>
<mo>≤</mo>
<mo><=</mo>
<mo>++</mo>
<mo>∑</mo>
<mo>.NOT.</mo>
<mo>and</mo>
<mo>⁢<!--InvisibleTimes--></mo>
以下の例の mo 要素は明示的な stretchy や symmetric 属性を必要としません。これらは後述するように演算子辞書から見つけられるためです。これらの例の一部は 3.3.8 括弧対内の式 <mfenced>
で記述することもできます。
(a+b)
<mrow>
<mo> ( </mo>
<mrow>
<mi> a </mi>
<mo> + </mo>
<mi> b </mi>
</mrow>
<mo> ) </mo>
</mrow>
[0,1)
<mrow>
<mo> [ </mo>
<mrow>
<mn> 0 </mn>
<mo> , </mo>
<mn> 1 </mn>
</mrow>
<mo> ) </mo>
</mrow>
f(x,y)
<mrow>
<mi> f </mi>
<mo> ⁡<!--ApplyFunction--> </mo>
<mrow>
<mo> ( </mo>
<mrow>
<mi> x </mi>
<mo> , </mo>
<mi> y </mi>
</mrow>
<mo> ) </mo>
</mrow>
</mrow>
伝統的な数学表記で「不可視」な演算子として扱われるべきものは、単に何も書かないのではなく、特定の文字(またはエンティティ参照)を mo
要素内で用いて表すべきです。これらの「不可視演算子」に用いる文字は次のとおりです:
| 文字 | エンティティ名 | 短名 |
| U+2061 | ApplyFunction |
af |
| U+2062 | InvisibleTimes |
it |
| U+2063 | InvisibleComma |
ic |
| U+2064 |
上の表の例の MathML による表現は次のとおりです:
<mrow>
<mi> f </mi>
<mo> ⁡<!--ApplyFunction--> </mo>
<mrow>
<mo> ( </mo>
<mi> x </mi>
<mo> ) </mo>
</mrow>
</mrow>
<mrow>
<mi> sin </mi>
<mo> ⁡<!--ApplyFunction--> </mo>
<mi> x </mi>
</mrow>
<mrow>
<mi> x </mi>
<mo> ⁢<!--InvisibleTimes--> </mo>
<mi> y </mi>
</mrow>
<msub>
<mi> m </mi>
<mrow>
<mn> 1 </mn>
<mo> ⁣<!--InvisibleComma--> </mo>
<mn> 2 </mn>
</mrow>
</msub>
<mrow>
<mn> 2 </mn>
<mo> ⁤ </mo>
<mfrac>
<mn> 3 </mn>
<mn> 4 </mn>
</mfrac>
</mrow>
mo 要素の典型的な視覚的レンダリング動作は他のトークン要素より複雑であるため、ここにそれらのルールを別途記述します。
これらの規則はすべての MathML におけるレンダリング規則と同様、推奨(suggestions)であって必須ではないことに注意してください。下記の記述は各種レンダリング属性の意図する効果をできる限り明確にするためのものです。ブラウザ実装向けの演算子に関する詳細なレイアウト規則は MathML Core に示されています。
積分記号やプラス記号、括弧のような多くの数学記号は確立された予測可能な表記用途を持ちます。典型的にはこの用途は特定の内容と特定の form 属性を持つ mo
要素に対するある種の既定属性値に相当します。これらの既定値は記号ごとに異なるため、MathML は各 mo 要素の内容と
form 属性で索引付けされた演算子用の既定属性の「演算子辞書」をレンダラが保持することを想定しています(参照:B. 演算子辞書)。もしある mo 要素が辞書にリストされていなければ、mo
の属性表で括弧内に示された既定値を用いるべきです。これらの値は一般的な演算子に対して典型的に適切です。
いくつかの演算子は「オーバーロード」されており、複数の形式(前置・中置・後置)で現れ得て、それぞれの形式で描画特性が異なることがあります。例えば「+」は前置でも中置でもあり得ます。視覚的レンダラは通常中置演算子の両側にスペースを追加し、前置演算子の場合は前側のみにスペースを追加します。演算子辞書と下記の既定値の例外が問題となる場合にどの形式を使うかを指定するために
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
の属性表にある括弧内の既定値を用いるべきです。
上記の mo の既定 form
を選ぶ規則には一つの例外があります。ネストした下付き・上付き、周囲のテキストや空白、またはスタイル変更によって「装飾された」(embellished) mo 要素は異なる振る舞いをします。装飾された演算子全体(後で正確に定義します)の位置が mrow
内で上記の規則により考慮され、その形式によって周囲のスペーシングが影響を受けますが、周囲のスペーシングに影響を与える属性は核心の mo 要素(またはその辞書エントリ)から取られます。
例えば、次の は
の中では全体として中置演算子と見なされるべきですが、そのレンダリング属性は核心となる mo(この場合は )
から取られるべきです。もしそれらが明示的に指定されていなければ、<mo form="infix"> + </mo>
に対する演算子辞書エントリから取られます。以下に「装飾された演算子(embellished operator)」の正確な定義を示します:
ある mo 要素;
またはその第一引数が装飾された演算子である次の要素のいずれか:
msub,
msup,
msubsup,
munder,
mover,
munderover,
mmultiscripts,
mfrac, または
semantics
(6.5
<semantics> 要素);
または同じ引数を持つ mrow が装飾された演算子となるような mstyle、mphantom、または mpadded のいずれか;
または選択された部分式が装飾された演算子である maction 要素;
または引数が(任意の順序で)一つの装飾された演算子とゼロ個以上の空白状要素から成る mrow 要素。
この定義は、上記以外の囲み要素が挟まらない場合にのみ入れ子の装飾を許すことに注意してください。
演算子形式の選択や装飾された演算子の定義に関する上記の規則は、通常の場合において作者が form
を明示する必要がないように選ばれています。
mrow 内に現れる演算子(または装飾された演算子)の周囲に追加される水平方向の空白量は、直接 lspace および rspace
属性で指定できます。RTL
方向の場合、これらは先行空間および追随空間として解釈されるべきです。慣例として、引数に密接に結びつく演算子は間隔が小さく、結びつきが弱い演算子は間隔が大きく設定されます。この慣例はレンダラに付属する演算子辞書で守られるべきです。
一部のレンダラは TeX のように上付きや下付きの中に現れる多くの演算子の周囲に空白を使わないことを選ぶ場合があります。
非視覚的レンダラは、ここで述べられる間隔属性や他のレンダリング属性をそれぞれの媒体に対応する方法で扱うべきです。例えばより多くの空白は音声レンダリングではより長い間の区切りに相当するかもしれません。
演算子(装飾されている場合も含む)が他の要素の大きさに合わせて伸縮するかどうか、またその方法を支配する属性が四つあります:stretchy、symmetric、maxsize、および minsize。もし演算子に stretchy=true
が設定されていれば、その内容の各文字は下記の伸縮規則に従います。ただしフォントやフォントレンダリングの限界により、実際のレンダラが伸縮できる文字は限られ、離散的なサイズしか生成できないことが一般的です。
MathML には特定の文字や演算子をどの方向(水平あるいは垂直)に伸ばすかを指定する仕組みはありません。代わりに stretchy=true
の場合、その文字は伸縮が可能で妥当な各方向に伸縮されるべきです。どの方向に伸縮するのが妥当かはレンダラが判断すべきです。多くの記号は典型的には最大で一方向にのみ伸縮可能ですが、一部のレンダラは対角線矢印のような記号を両方向に独立して伸縮できるかもしれません。
minsize と maxsize
は伸縮量を制限します。これらの属性は伸縮方向での演算子の通常サイズの乗数として、または単位付きの絶対サイズとして与えられます。例えば文字に 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>
これは伸縮の規則が装飾全体の文脈に基づくべきであり、単に mo 要素自身だけではないことを意味します。
次は括弧の最大サイズを設定して、たとえその既定が 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>
上はデフォルトのレンダリング(括弧が伸縮する場合)ではなく
のように表示されるべきで、デフォルトでは
のようになります。
各括弧は独立にサイズ付けされることに注意してください;もし片方のみが maxsize=100% を持っていれば、それらは異なるサイズで描かれます。
伸縮可能な演算子を支配する一般規則は次のとおりです:
伸縮可能な演算子が直接 mrow の部分式であるか、または表のある行の mtd 要素のただ一つの直接部分式である場合、伸縮はその mrow 要素や表行内の非伸縮の直接部分式の高さと深さ(軸を中心に上下)を覆うように行われるべきです。ただし
minsize や maxsize
によって伸縮が制約される場合はその限りではありません。
装飾された伸縮可能な演算子の場合、前述の規則はその核心にある伸縮可能な演算子に適用されます。
上記の規則は mrow が推論された場合にも適用されます。
対称伸縮の規則は symmetric=true の場合にのみ適用され、かつ伸縮が mrow または mtr(その rowalign 値が baseline または axis の場合)で行われるときに限ります。
垂直に伸縮された文字の高さと深さを決定するアルゴリズムは次のとおりです:
同じ mrow または mtr
内の非伸縮の兄弟要素の最大の高さと深さをそれぞれ maxheight と maxdepth
とします。軸はベースラインから上の数学軸の高さとします。
注:伸縮可能な演算子に minsize や maxsize が設定されていても、それは mrow
の最大高さ・深さの初期計算には使われません。
もし symmetric=true
なら、計算された高さと深さは次のとおりです:
height=max(maxheight-axis, maxdepth+axis) + axis
depth =max(maxheight-axis, maxdepth+axis) - axis
そうでなければ高さと深さは次のようになります:
height= maxheight
depth = maxdepth
合計サイズ = height+depth が minsize より小さいか maxsize より大きい場合、実効サイズが制約を満たすように高さと深さの両方を比例的に増減します。
既定では、多くの垂直方向の矢印や多数の開閉フェンスは演算子辞書によりデフォルトで伸縮するよう定義されています。
表セル内の伸縮可能な演算子(つまり mtd
内)については、上の規則は演算子を含む表行の各セルがちょうど一行を覆うものと仮定しています(同等に表のすべてのセルの rowspan が 1
と仮定)。もしそうでない場合、演算子はその演算子のセルが覆う表行の集合に完全に含まれるセルのみを縦方向に覆うように伸縮されるべきであり、演算子のセルが覆っていない行まで伸びるセルは無視されます。3.5.3.2 属性 を参照して
rowspan 属性の詳細を確認してください。
伸縮可能な演算子、または装飾された伸縮演算子が直接 munder、mover、または 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>
伸縮可能な演算子が伸縮する必要がない場合(上で述べた位置にない、または一致させるべき他の式が存在しない場合)は、フォントと現在の mathsize によって決まる標準の(未伸縮の)サイズを持ちます。
伸縮が要求されるが包含要素内の他のすべての式も伸縮可能である場合、伸縮可能なすべての要素は含むオブジェクト内のすべての要素の未伸縮の通常サイズの最大値まで成長すべきです(それが可能であれば)。もし
minsize または maxsize
がこれを妨げる場合は指定された(最小または最大)サイズが使われます。
例えば、垂直に伸縮可能な演算子だけを含む mrow
がある場合、それらの各演算子は他のすべての未伸縮の通常サイズの最大値まで伸縮するべきです(別の属性がこの挙動を上書きしていない限り)。もちろんフォントやレンダリングの制約により、最終的な伸縮サイズは近似的にしか一致しないことがあります。
<mtext>mtext 要素は、そのまま表示される任意のテキストを表現するために使われます。一般に、mtext 要素は注釈テキストを示すことを意図しています。
記法上の役割が明確なテキストについては、mi または mo を使ってマークアップする方が適切な場合があります。
mtext 要素は
表示可能な空白
、すなわち周囲の要素の位置決めを変更するための不可視文字も含むことができます。非グラフィカルな媒体では、こうした文字はポジティブやネガティブな時間遅延や、音声レンダラでリズムに影響を与えるなど、類似の効果を持つと考えられます。ただし
2.1.7
入力時の空白折り畳み も参照してください。
mtext 要素は 3.2.2 トークン要素に共通する数学スタイル属性で挙げられた属性を受け取ることができます。
空白様要素
の合法的なグルーピングに関する警告は 3.2.7
空白 <mspace/>
を、またこの種の要素を「細工」に使う場合の警告は [MathML-Notes] を参照してください。
<mrow>
<mtext> Theorem 1: </mtext>
<mtext>  <!--ThinSpace--> </mtext>
<mtext>  <!--ThickSpace--> <!--ThickSpace--> </mtext>
<mtext> /* a comment */ </mtext>
</mrow>
<mspace/>mspace
空要素は、属性で設定された任意の大きさの空白を表します。またビジュアルレンダラへの改行提案に用いることもできます。属性の既定値は通常レンダリングに影響を与えないよう選ばれていることに注意してください。したがって
mspace 要素は、たいていの場合何らかの属性値を明示的に指定して使います。
この後述べる 空白様要素
の合法的なグルーピングに関する警告や、[MathML-Notes]
内で述べられている「細工」用の要素利用に関する警告にも注意してください。また、空白としてレンダリングされうる他の要素として mtext, mphantom, maligngroup があります。
下記の属性に加え、
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 での改行指定は非推奨です。
<mspace height="3ex" depth="2ex"/>
多くの MathML 表示要素は「空白様」(space-like)であり、通常は空白としてレンダリングされ、それが現れる数式表現の意味には影響を与えません。そのため、こうした要素はいくつかの他の
MathML 式の中で特別な振る舞いをすることがあります。たとえば空白様要素は 3.2.5 演算子・フェンス・区切り・アクセント
<mo> で示されている推奨レンダリング規則の中で特別扱いされます。
次の MathML 要素は「空白様」と定義されます:
空か、すべての文字が Unicode の空白文字である mtext 要素;
mspace、maligngroup、malignmark のいずれかの要素;
すべての直下の部分式が空白様である mstyle、mphantom、mpadded 要素;
第一引数が存在しかつそれが空白様である semantics 要素;
選択された部分式が空白様である maction 要素;
直下の部分式がすべて空白様である mrow 要素。
内容が空白様でない限り mphantom
は自動的に空白様とは定義されないことに注意してください。これは演算子間のスペーシングが隣接要素が空白様かどうかによって影響を受けるからです。mphantom 要素は主に位置合わせ補助のために使われるため、mphantom
の隣の演算子は空白領域ではなく mphantom の中身と隣り合っているかのように振る舞うべきです。
既存の MathML 式に空白様要素や mphantom
要素を挿入する場合、その要素は特定の数の引数を要求する要素や、引数位置に意味の差異がある要素の中では、引数として数えられることに注意してください。
したがって、このような MathML 要素に空白様要素を挿入する場合、それらを mrow
で隣接する引数とまとめるのがよいでしょう。例えば、基底の右端で垂直整列したい場合、
<msup>
<mi> x </mi>
<malignmark edge="right"/>
<mn> 2 </mn>
</msup>
のように書くのは不正です。msup は引数2つちょうどを要求するためです。正しい表現は次のようになります:
<msup>
<mrow>
<mi> x </mi>
<malignmark edge="right"/>
</mrow>
<mn> 2 </mn>
</msup>
「細工」についての警告は [MathML-Notes] も参照してください。
<ms>ms 要素は、コンピュータ代数システムや他の プログラミング言語
を含むシステムで解釈されるべき式中の
文字列リテラル
を表現するために使われます。デフォルトでは、文字列リテラルは二重引用符で囲んで表示され、その前後に余計な空白は加えられません。3.2.6 テキスト <mtext> で述べられている通り、通常のテキストを数式中に埋め込む場合は
mtext 、場合によっては mo または mi でマークアップすべきであり、ms は使うべきではありません。
ms でエンコードされた文字列リテラルは 文字、mglyph、および malignmark
から構成される点に注意してください。つまり ASCII 文字列
ではありません。たとえば <ms>&</ms>
は1文字(&)からなる文字列リテラルを表し、<ms>&amp;</ms> は先頭1文字が
& である5文字の文字列リテラルを表します。
ms
要素の内容は、少なくとも左右の引用符、およびできればスペース以外の空白も「エスケープ」表示されるべきです。これは読者がその式が文字列リテラルであること、また正確にどの文字が内容なのかが分かるようにするためです。たとえば
<ms>double quote is
"</ms> は「double quote is \""」のように表示されるかもしれません。
他のトークン要素と同様、ms も内容中の空白を 2.1.7 入力時の空白折畳み
のルールに従ってトリム・折畳みします。内容に空白を残したい場合は当該節で述べた方法でエンコードしてください。
ms 要素は 3.2.2 トークン要素に共通する数学スタイル属性で挙げられた属性に加えて、以下の属性も受け取ります。
| 名前 | 値 | 既定 |
| lquote | string | U+0022 (entity quot) |
| 内容を囲む開き引用符を指定します(RTL文脈では必ずしも「左引用符」ではありません)。 | ||
| rquote | string | U+0022 (entity quot) |
| 内容を囲む閉じ引用符を指定します(RTL文脈では必ずしも「右引用符」ではありません)。 | ||
トークンのほかに、いくつかの系統の MathML 表示要素があります。ある系統の要素は下付き・上付きなどの各種の「スクリプト」表記を扱い、別の系統は行列や表を扱います。本節で扱う残りの要素は、分数や根号のような基本的な表記法を記述したり、スタイル属性の設定やエラー処理のような一般的な機能を扱ったりします。
mrow または a
要素は、任意の数の部分式をまとめるために使われます。通常、これらは一つ以上の mo
要素が一つ以上の他の式に対して「演算子」として働き、その「オペランド」を持つような形になります。
いくつかの要素はその引数を自動的に mrow に含まれているかのように扱います。推論された mrow の議論は 3.1.3 必須引数 を参照してください。また、引数をコンマで区切って含む mrow を実質的に形成できる mfenced(3.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 では mrow と a
は同一の振る舞いを持ちますが、互換性のために a が追加されています。MathML Core は a 要素に対して href 属性のみをサポートします。
mrow 要素は、3.1.9
表示要素に共通の属性 に列挙された属性に加えて、以下の属性を受け取ります。
| Name | values | default |
| dir | "ltr" | "rtl" | 継承 |
行の子要素をレイアウトするために使用する全体の方向性 ltr(左から右)または
rtl(右から左)を指定します。詳細は 3.1.5.1
数式の全体的な方向性 を参照してください。
比較は ASCII 大文字小文字を区別しない 方式で行われます。 すべての一致する文字列が値として許可されます。 |
||
部分式は、その数学的解釈におけるグルーピング、すなわち式の基になる「構文木」に従って、文書作成者がグループ化すべきです。具体的には、演算子とその数学的引数は単一の mrow に現れるべきです。複数の演算子が一つの mrow
に直接現れて良いのは、それらが(構文上)中間の引数に対して一緒に作用すると見なせる場合のみです。例えば、一つの括弧つき項とその括弧、関係演算子の連鎖、あるいは + と
- で区切られた項の列などが該当します。以下に厳密な規則を示します。
適切なグループ化にはいくつかの目的があります:表示を改善し(間隔に影響を与える可能性がある)、より賢明な改行やインデントを可能にし、コンピュータ代数システムや音声レンダラによる表示要素の意味的解釈を単純化します。
不適切なグループ化はしばしば表示を最適でなくし、視覚以外の解釈を困難または不可能にすることが多いですが、MathML 構文では任意の mrow によるグループ化が許容されます。つまり、レンダラは適切なグループ化の規則が必ず守られていると仮定すべきではありません。
MathML レンダラは、ちょうど一つの引数を持つ mrow
要素を、その単一の引数が単独で出現する場合とすべての点で等価に扱うことが要求されます。ただし mrow
要素に属性がある場合は等価性の要求は課されません。この等価性条件は、装飾された演算子や空白様要素の定義、そして mo 要素の
form 属性の既定値を決定する規則に直接影響します(参照:3.2.5 演算子・フェンス・区切り・アクセント および 3.2.7 空白 <mspace/>)。また MathML 式の同値性に関する議論は
D.1
MathML 準拠 を参照してください。
式の表示(例えば TeX など他の形式から自動変換して MathML を生成する場合)において、部分式をどのように mrow
で入れ子にするかの厳密な規則が望まれることがあります。特に、元の形式が部分式の入れ子方法を必ずしも明示しない場合に有用です。グループ化のための厳密な規則を使うときは、次の規則を使用してください:
二つの隣接する演算子(装飾されていることがある)、間にオペランド(演算子以外のもの)が挟まれている場合でも、前の演算子が infix または prefix
形式(推論されることもある)を持ち、次の演算子が infix または postfix 形式を持ち、かつ演算子辞書において同じ優先度を持つ場合に限り、それらは同じ mrow に出現すべきです(参照:B.
演算子辞書)。その他の場合は、入れ子になった mrow を用いるべきです。
生成時に二つの連続する演算子のうちの一方のみを含む入れ子 mrow
を作る場合(これは原則としてどちらの演算子も中間のオペランドに作用し得ることを意味します)、どちらの演算子がそれらのオペランドに直接作用するかを決める必要があります。理想的にはこれは元の式から決定されるべきであり、例えば演算子優先度に基づく形式からの変換であれば、優先度の高い演算子が選ばれます。
上記の規則は MathML 式の妥当性に影響を与えるものではなく、他の表示数式形式から MathML を生成する際や手書きの表記から直接 MathML を生成する際の推奨方式に関するものです。
(上の規則で用いられる一部の用語は 3.2.5 演算子・フェンス・区切り・アクセント で定義されています。)
例えば、2x+y-z は次のように書くべきです:
<mrow>
<mrow>
<mn> 2 </mn>
<mo> ⁢<!--InvisibleTimes--> </mo>
<mi> x </mi>
</mrow>
<mo> + </mo>
<mi> y </mi>
<mo> - </mo>
<mi> z </mi>
</mrow>
括弧で囲まれた (x, y) の正しいエンコーディングは、入れ子になった mrow のより明示的な例です:
<mrow>
<mo> ( </mo>
<mrow>
<mi> x </mi>
<mo> , </mo>
<mi> y </mi>
</mrow>
<mo> ) </mo>
</mrow>
この場合、括弧とコンマはフェンスや区切りとしての「演算子」と見なされ、引数に一緒に作用しないため、括弧内に入れ子の 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>
<mfrac>mfrac
要素は分数に用いられます。二項係数やルジャンドル記号など、分数様のオブジェクトのマークアップにも用いることができます。mfrac
の構文は次のとおりです
<mfrac> numerator denominator </mfrac>
mfrac 要素は、分子および分母の内部で displaystyle を
false に設定するか、すでに false であれば scriptlevel を 1 増やします(3.1.6 displaystyle と scriptlevel を参照)。
mfrac 要素は、3.1.9
表示要素に共通の属性 に列挙された属性に加えて以下の属性を受け取ります。分数線がある場合、その線は mathcolor で指定された色で描かれるべきです。
| Name | values | default |
| linethickness | length | "thin" | "medium" | "thick" | medium |
横方向の「分数バー」または「ルール」の太さを指定します。既定値は medium です;thin はより細く(ただし可視)、thick はより太くなります。これらの正確な太さはレンダラに任されます。OpenType Math
フォントが利用可能であれば、レンダラは medium を MATH.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 を用いるなどの代替マークアップを使うべきです。
ここに異なる 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>
次はビーヴェル分数の例です:
<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>
より一般的な例:
<mfrac>
<mrow>
<mn> 1 </mn>
<mo> + </mo>
<msqrt>
<mn> 5 </mn>
</msqrt>
</mrow>
<mn> 2 </mn>
</mfrac>
これらの要素は根号を構成します。msqrt は平方根に用いられ、mroot
は指数を持つ根号(例えば立方根)を描くために用いられます。これらの要素の構文は次のとおりです:
<msqrt> base </msqrt>
<mroot> base index </mroot>
mroot はちょうど2つの引数を必要とします。しかし msqrt
は単一の引数を受け取り、その引数は複数の子を持つ推論された mrow であり得ます(参照:3.1.3 必須引数)。mroot 要素は index 内で scriptlevel を 2 増やし、displaystyle を
false に設定しますが、base 内ではこれらの属性を変更しません。msqrt 要素はその引数内で両方の属性を変更しません(参照:3.1.6 displaystyle と scriptlevel)。
RTL(右から左)の文脈では、ルート記号の始まりは左ではなく右に来ます。mroot の場合は指数も同様に右側に配置されます。
msqrt および mroot 要素は、3.1.9 表示要素に共通の属性
に列挙された属性を受け取ります。サージ(ルートの覆い)や上線は mathcolor で指定された色で描かれるべきです。
平方根と立方根の例
<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>
<mstyle>mstyle 要素は、その内容のレンダリングに影響を与えるスタイルの変更を行うために使われます。表示要素として、3.1.9
表示要素に共通の属性 に記載された属性を受け取ります。さらに、下で述べる属性を除き、他の任意の表示要素が受け取る属性を与えることができます。
mstyle 要素は単一の引数を受け取ります。その引数は複数の子を持つ推論された mrow であり得ます(参照:3.1.3 必須引数)。
大まかに言うと、mstyle
要素の効果は、その中に含まれる要素に対する属性の既定値を変更することです。スタイルの変更は、属性の既定値がどのように指定されているかによっていくつかの方法で働きます。以下のケースがあります:
一部の属性(例:displaystyle や scriptlevel)は、明示的に設定されていない場合に周囲の文脈から継承されます。mstyle
にそのような属性を指定すると、子要素が継承する値が設定されます。子要素がこの継承値を上書きしない限り、その子はさらにその子孫に値を継承していきます。もし子要素が明示的に上書きするか、自動的に上書きする(scriptlevel のように)場合は、上書きされた新しい値がその要素の子孫に継承されます。
他の属性(例:linethickness のように通常継承されない既定値を持つ属性)では、mstyle
要素で値を指定すると、そのスコープ内のすべての要素の既定値が変更される効果があります。つまり、その属性が個別の要素で明示的に上書きされない限り、mstyle による設定がその子孫に伝播します。こうした属性の設定は MathML-Core ではサポートされていないことに注意してください。
別の属性グループ(例:stretchy や form)は演算子辞書情報や包む mrow
内での位置などから計算されます。これらについては、包む mstyle
によって指定された値が通常計算される値を上書きします。これらも MathML-Core
ではサポートされていないことに注意してください。
mstyle
によりいかなる方法で継承された属性値も、その属性が子孫要素によって明示的に与えられている場合にのみその子孫要素に影響します。ある要素上で属性が明示的に設定されている場合、その値が継承値に優先します。例外は、属性値がその要素の文脈やレンダリング環境から継承した値に対する増分変更として文書化されている場合のみです。
また、上で説明した mstyle による継承属性と非継承属性の違いは、mstyle
の内容の中でその属性を設定する別の要素が子孫も同時に設定している場合にのみ問題になります。従って、トークン要素にのみ設定できるような属性(例:mathsize)については通常この差異は問題になりません。
mstyle に height、depth、または width を指定した場合、それらは mspace 要素にのみ適用され、対応する mglyph、mpadded、mtable
の属性には適用されないことが規定されています。同様に、rowalign や columnalign が mstyle に指定された場合、それらは
mtable 要素にのみ適用され、mtr、mtd、および maligngroup には適用されません。lspace が mstyle で設定されると、それは mo 要素にのみ適用され、mpadded
には適用されません。一貫性のために、mpadded の voffset
は mstyle 上で設定できません。align を mstyle で設定すると、それは munder、mover、munderover にのみ適用され、mtable や mstack には適用されません。mglyph の src と alt、および maction の actiontype は mstyle 上で設定できません。
表示要素として mstyle は直接 mathcolor と mathbackground を受け取ります。したがって、mathbackground は mstyle
要素自身のバウンディングボックスを塗りつぶす色を指定します;既定の背景色を指定するものではありません。
連分数では、入れ子になった分数が縮小されてはいけません。代わりに、それらは同じサイズのままであるべきです。これは各 mfrac
の子に対して mstyle を使い、displaystyle と
scriptlevel をリセットすることで実現できます。以下のように示します:
<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>
<merror>merror
要素はその内容を「エラーメッセージ」として表示します。例えば内容を赤く表示したり点滅させたり背景色を変えたりして表示することが考えられます。内容は任意の式または式列にできます。
merror は単一の引数を受け取ります。その引数は複数の子を持つ推論された mrow であり得ます(参照:3.1.3 必須引数)。
この要素の目的は、他の入力から MathML を「生成する」プログラムが、その入力の構文エラーを報告する標準的な方法を提供することです。手作業で入力しやすい構文を解析して MathML を生成するプリプロセッサが開発されることが想定されているため、入力のある位置で構文エラーが発生したことを示す能力が重要です。詳しくは D.2 エラーの処理 を参照してください。
merror を構文エラー報告に使う推奨方法としては、プリプロセッサが入力の誤った部分を merror
要素で置き換え、その中にエラーの説明を含め、周囲の式は可能な限り通常通り処理する、というやり方があります。こうすることで、エラーメッセージは誤った入力が正しかった場合に表示されるであろう位置に表示され、作者がレンダリングされた出力からどの部分が誤っているかを判別しやすくなります。
ここでは特定のエラーメッセージ形式は示しませんが、どのプログラムのエラーメッセージでもそうであるように、レンダリングされたエラーメッセージを見た人間にとって、何が間違っているのか、どう直せばよいかができるだけ明確になるような形式にすべきです。もし誤った入力に正しくフォーマットされた部分式が含まれているなら、それらを通常通りプリプロセスしてエラーメッセージ内に含める(merror の内容として)ことが有用な場合があります。merror
はテキストだけでなく任意の MathML 表現を含められるためです。
merror 要素は、3.1.9 表示要素に共通の属性 に列挙された属性を受け取ります。
もし 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: </mtext>
<mrow> <mn> 1 </mn> <mo> + </mo> <msqrt> <mn> 5 </mn> </msqrt> </mrow>
<mtext> and </mtext>
<mn> 2 </mn>
</merror>
この場合、プリプロセッサの入力自体は有効な MathML ではありませんが、出力されたエラーメッセージは有効な MathML になっていることに注意してください。
<mpadded>
mpadded
要素は子コンテンツと同じようにレンダリングされますが、子のバウンディングボックスの大きさおよびその内容の相対的な位置決め点を mpadded の属性に従って変更します。内容を縮小や拡大で再スケールする(stretch/shrink)ことはしません。要素名は通常
mpadded がコンテンツまわりにパディング(余白)を追加するために使われることを反映しています。しかし mpadded はサイズや位置のより一般的な調整にも用いられ、負のパディングのような組合せは mpadded の内容が隣接コンテンツと重なって表示される原因になることがあります。こうした効果に関するいくつかの落とし穴については
[MathML-Notes] を参照してください。
mpadded 要素は単一の引数を受け取ります。その引数は複数の子を持つ推論された mrow であり得ます(参照:3.1.3 必須引数)。
水平空間を表す属性(width および lspace)に基づいて、音声レンダラは時間遅延を追加したり短縮したりすることが推奨されます。
mpadded 要素は、3.1.9 表示要素に共通の属性 に列挙された属性に加えて以下の属性を受け取ります。
| Name | values | default |
| height | length | 内容と同じ |
mpadded 要素の高さを設定または増分指定します。詳細は下記。
|
||
| depth | length | 内容と同じ |
mpadded 要素の深さを設定または増分指定します。詳細は下記。
|
||
| width | length | 内容と同じ |
mpadded 要素の幅を設定または増分指定します。詳細は下記。
|
||
| lspace | length | 0em |
| 子コンテンツの水平位置を設定します。詳細は下記。 | ||
| voffset | length | 0em |
| 子コンテンツの垂直位置を設定します。詳細は下記。 | ||
MathML-Core は上記の属性をサポートしますが、その値として有効な <length-percentage>
のみを許可します。MathML 4 は length
で記述されるように、さらに namedspace を許可するように構文を拡張しています。
MathML 3 は追加の拡張も許していました:
<length-percentage>
構文で利用できます:例 height="calc(100%+10pt)"。
height, depth, width
を定めていました。MathML 4 ではこれらはサポートされませんが、主要な使用例はパーセンテージ値でカバーされています。例えば
height="0.5height" は height="50% と同等です。
これらの属性は、子コンテンツの通常レンダリングのバウンディングボックスの大きさに対して、mpadded
要素のバウンディングボックスの大きさをどのように相対的に設定するか、そして子コンテンツの位置をどのように相対的に変更するかを指定します。属性値の形式に応じて、次元は新しい値に設定されるか、子コンテンツの対応する次元に対して相対的に指定されます。値は擬似単位(pseudo-unit)を使って子コンテンツの通常レンダリングの任意の次元の倍数やパーセンテージとして与えることができ、また標準単位を使って直接設定することもできます(参照:2.1.5.2 長さ値属性)。
対応する次元は次のように長さ値に設定されます。これらの属性に対して純粋に負になるような長さを指定することは、属性をゼロに設定するのと同じ効果を持ちます。言い換えれば、mpadded 要素の実効的なバウンディングボックスは常に非負の次元を持ちます。ただし、相対位置指定属性である lspace および voffset には負の値が許されます。
mpadded 要素の内容は、文字や分数や式などの、自然な位置決め点を持つ一つの組版要素として見なせる数学表記の断片を定義します。
mpadded 要素のバウンディングボックスの大きさは、子のバウンディングボックスの大きさに、mpadded の height、depth、width
属性による修正を加えたものとして定義されます。子コンテンツの自然な位置決め点は、mpadded
の自然な位置決め点と一致しますが、lspace と voffset
によって修正され得ます。つまり、mpadded
のサイズ属性はその内容の見かけ上のバウンディングボックスを拡張または縮小するために用いられ、位置属性は子コンテンツをバウンディングボックスに対して移動させる(したがって隣接要素にも影響する)ために使われます。MathML
は「インク(描画)」、バウンディングボックス、位置決め点の正確な関係は実装依存であるため定義していません。したがって mpadded 属性の絶対値は実装間で移植可能でない可能性があります。
height 属性は mpadded
要素のベースライン上方の垂直的な範囲を指定します。height
を増やすとベースラインと上方のコンテンツの間の空間が増え、子コンテンツの上側にパディングが入ります。height
を減らすとベースラインと上方のコンテンツの間の空間が減り、上側のスペースが取り除かれます。高さを減らすと上方のコンテンツが子コンテンツの描画と重なる可能性があるため、一般には避けるべきです。
depth 属性は mpadded
要素のベースライン下方の垂直的な範囲を指定します。depth
を増やすとベースラインと下方のコンテンツの間の空間が増え、子コンテンツの下側にパディングが入ります。depth
を減らすとベースラインと下方のコンテンツの間の空間が減り、子コンテンツの下側のスペースが取り除かれます。深さを減らすと下方のコンテンツが子コンテンツと重なる可能性があるため、一般には避けるべきです。
width 属性は、mpadded
要素の位置決め点と、後続のコンテンツの位置決め点との間の水平距離を指定します。width
を増やすと、要素の位置決め点と後続コンテンツの間の空間が増え、子コンテンツの後にパディングが入ります。width
を減らすとその空間が減り、後続コンテンツとの間隔が狭くなります。width をゼロにすると、後続のコンテンツは mpadded の位置決め点に配置されます。幅を減らすことは通常避けるべきで、後続コンテンツの重なりを引き起こす可能性があります。
lspace(先行空間)は(3.1.5.1 数式の全体的な方向性 参照)子コンテンツの位置決め点を mpadded の位置決め点に対して水平にどこに置くかを指定します。デフォルトでは一致しているため、絶対値としての lspace
は相対値と同じ効果を持ちます。正の値は前のコンテンツと子コンテンツの間の空間を増やし、子コンテンツの前にパディングを導入します。負の値は前のコンテンツと子コンテンツの間の空間を減らし、前のコンテンツと重なる可能性があるため一般に避けるべきです。lspace は width
に影響しないため、子コンテンツと後続コンテンツの間隔にも影響し、width
を適切に調整しないと後続コンテンツと重なることがあります。
voffset 属性は子コンテンツの位置決め点を mpadded
の位置決め点に対して垂直方向にどこに置くかを指定します。正の値は子コンテンツの描画をベースラインより上に移動させ、負の値は下に移動させます。いずれの場合も隣接コンテンツとの重なりを引き起こす可能性があり、一般には避けるべきです。voffset は height や depth に影響しないため、隣接コンテンツとの空間に影響を与え、必要ならばそれらを調整する必要があります。
レンダラは、属性の効果を除けば、同じ内容を持つ mpadded を同じ内容を持つ mrow に置き換えても、周囲の MathML 要素との相対的な間隔が変更されないようにすべきです。これは mpadded 内で改行が発生した場合でも成り立つべきです。MathML は mpadded の非既定属性値が改行アルゴリズムにどのように影響するかを定義していません。
サイズおよび位置属性の効果を以下に示します。次の図は子コンテンツの位置を変更するために lspace と voffset を用いる例を示しています。バウンディングボックス自体は変更しません。
対応する MathML は次のとおりです:
<mrow>
<mi>x</mi>
<mpadded lspace="0.2em" voffset="0.3ex">
<mi>y</mi>
</mpadded>
<mi>z</mi>
</mrow>
次の図は width、height、および depth を用いて子コンテンツの相対位置を変更せずに mpadded のバウンディングボックスを変更する例です。
対応する 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 の使用例です。
対応する MathML は次のとおりです:
<mrow>
<mi>x</mi>
<mpadded lspace="0.3em" width="calc(100% +0.6em)">
<mi>y</mi>
</mpadded>
<mi>z</mi>
</mrow>
<mphantom>mphantom
要素は不可視でレンダリングされますが、その内容が通常通りレンダリングされたときと同じサイズや他の次元(ベースライン位置を含む)を持ちます。mphantom は式の一部を不可視に複製して配置を揃えるために使えます。
mphantom 要素は単一の引数を受け取ります。その引数は複数の子を持つ推論された mrow であり得ます(参照:3.1.3 必須引数)。
注意:ある MathML 式に対して mphantom と mpadded
を同時に適用することが可能です。例えば <mphantom><mpadded attribute-settings>
... </mpadded></mphantom> のようにして、サイズを変更しつつ内容を不可視にすることができます。
レンダラは、mphantom の内容と周囲の MathML 要素との相対的な間隔が、同じ内容を持つ mrow に置き換えた場合と変わらないようにすべきです。これは mphantom
の内部で改行が発生した場合でも成り立ちます。
上の理由により、mphantom はその内容が空白様でない限り自動的に空白様とは見なされません(参照:3.2.7 空白 <mspace/>)。これは、演算子の推奨レンダリング規則が隣接要素が空白様かどうかによって影響を受けるためです。それでも、空白様要素の合法的なグルーピングに関する警告は
mphantom の使用にも適用され得ます。
mphantom 要素は、3.1.9 表示要素に共通の属性 に列挙された属性を受け取ります(ただし mathcolor は効果を持ちません)。
以下の状況では、前述の mphantom のレンダリング規則が意図した効果を与えないことがあります。mphantom が mrow の引数の部分列を囲むと、その部分列内の
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>
これは次のようにレンダリングされるでしょう:
下のようにはならないはずです:
ここで 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>
mfenced
要素は、括弧(波括弧、角括弧、丸括弧)で囲む一般的な構成を簡便に表現するための形式を提供します。必要に応じて区切り(例えばコンマ)も挿入できます。
例えば <mfenced> <mi>x</mi> </mfenced> は (x)
と表示され、次の表現と等価です。
<mrow> <mo> ( </mo> <mi>x</mi> <mo> ) </mo> </mrow>
また <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>
個々のフェンスや区切りは mo 要素で表されます(詳しくは 3.2.5 演算子・フェンス・区切り・アクセント を参照)。したがって、任意の mfenced 要素は後述の展開形と完全に等価です。
この推奨をサポートするレンダラは、これらの形式のいずれを使っても同一の表示を生成することが要求されます。mfenced
は作者や作成ツールにとって便利ですが、展開形(mrow を使ったもの)のみが MathML-Core でサポートされていることに注意してください。
一般に、mfenced 要素はゼロ個以上の引数を持ち、それらをフェンスで囲んだ mrow を生成します。引数が複数ある場合は、隣接引数の間に区切りを挿入するために追加の入れ子 mrow を用いて適切なグルーピングを行います(参照:3.3.1
部分式を水平方向にグループ化する <mrow>,
<a>)。フェンスと区切りはデフォルトで括弧とコンマですが、以下の表のように属性で変更できます。
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 であるため、open と close 属性中の鏡像を持つ文字は鏡像された形でレンダリングされます。特にデフォルト値は 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>
これは、+ が区切りとして扱われ、通常の中置演算子として扱われないため不適切です。つまり、あたかも
<mo separator="true">+</mo> のように扱われ、適切にレンダリングされない可能性があります。
<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> ⁡<!--ApplyFunction--> </mo>
<mfenced>
<mi> x </mi>
<mi> y </mi>
</mfenced>
</mrow>
menclose 要素は、notation
属性で指定された囲み表記の中にその内容を描画します。menclose は単一の引数を受け取ります。その引数は複数の子を持つ推論された
mrow であり得ます(参照:3.1.3 必須引数)。
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 は longdiv と radical の使用を非推奨にしました。これらはそれぞれ mlongdiv と msqrt
が提供する機能と重複するため、そちらを使うべきです。デフォルトは notation
が与えられないか空文字列の場合には menclose は何も描かないように変更されています。比較は ASCII 大文字小文字を区別しない 方式で行われます。 |
||
notation
には任意個の値を空白で区切って指定でき、レンダラが理解するものはすべて描画されるべきです。各値は他の値が存在しないかのように独立して描画され、互いにネストされるべきではありません。例えば
notation="circle box"
は、内容の周りに円と四角が描かれることを意味します;円と四角は重なってもよい、ということです。定義済みの表記のうち phasorangle のみが方向性に影響されます(参照:3.1.5.1 数式の全体的な方向性)。
notation に actuarial
を指定した場合、内容はアクチュアリアル記号で囲まれて描かれます。類似の結果は top right の指定でも得られます。
値 box、roundedbox、circle はそれぞれ示すように内容を囲みます。ボックスや円と内容の間の距離は MathML
により指定されずレンダラに任されます。実際には水平方向に各辺 0.4em、垂直方向に約 0.5ex のパディングがよく使われます。
値 left、right、top、bottom
は内容のそれらの辺に線を描きます。northeastarrow、updiagonalstrike、downdiagonalstrike、verticalstrike、horizontalstrike は内容の上に指定の取り消し線を重ねて描きます。例:updiagonalstrike は左下から右上へ延びる取り消し線を描きます。
northeastarrow は TeX の \cancelto コマンドを実装するために推奨される値です。もしレンダラが
menclose のために他の矢印を実装するなら、一貫性と標準化のために以下の完全な名前集合から選ぶことが推奨されます:
uparrow
rightarrow
downarrow
leftarrow
northwestarrow
southwestarrow
southeastarrow
northeastarrow
updownarrow
leftrightarrow
northwestsoutheastarrow
northeastsouthwestarrow
madruwb はアラビア式の階乗表記(مضروب
のローマ字転写)を生成する囲みを作るべきです。これは三番目の例に示されています。
menclose 要素の基準線(ベースライン)は、その子(推論された mrow
である可能性がある)のベースラインです。
複数の属性を使う例:
<menclose notation='circle box'>
<mi> x </mi><mo> + </mo><mi> y </mi>
</menclose>
アクチュアリアル表記の例:
<msub>
<mi>a</mi>
<mrow>
<menclose notation='actuarial'>
<mi>n</mi>
</menclose>
<mo>⁣<!--InvisibleComma--></mo>
<mi>i</mi>
</mrow>
</msub>
回路解析で使われる phasorangle の例:
<mi>C</mi>
<mrow>
<menclose notation='phasorangle'>
<mrow>
<mo>−</mo>
<mfrac>
<mi>π</mi>
<mn>2</mn>
</mfrac>
</mrow>
</menclose>
</mrow>
madruwb の例:
<menclose notation="madruwb">
<mn>12</mn>
</menclose>
本節で説明する要素は、基底の周囲に一つ以上のスクリプトを配置します。記号にさまざまな種類のスクリプトや装飾を付けることは数学表記で非常に一般的な手法です。純粋に視覚的な配置のためには、一般用途の単一要素で任意の伝統的なスクリプト位置にスクリプトや装飾を配置することは可能です。しかし、一般的な表記の抽象的な構造をより正確に表現するために、MathML はいくつかのより専門的なスクリプティング要素を提供します。
下付き/上付き要素に加えて、MathML には基底の上や下にスクリプトを配置する overscript 要素および underscript
要素があります。これらの要素は大きな演算子の上限・下限を置くためや、基底の上や下にアクセントや線を置くために使われます。アクセントを描画する規則は overscript や underscript
の規則とは異なり、この差は以下の適切な節で説明されている accent および accentunder 属性で制御できます。
スクリプトのレンダリングは、レンダリングプロセスが継承する環境の一部である scriptlevel および displaystyle 属性によって影響を受けます。これらは 3.1.6 Displaystyle and Scriptlevel に記述されています。
MathML はテンソル添字の取り付け用の要素も提供します。テンソル添字は通常の下付き・上付きと異なり、縦の列で揃える必要があります。また、すべての上付きスクリプトはベースラインで揃えられるべきであり、すべての下付きスクリプトもベースラインで揃えられるべきです。テンソル添字は prescript の位置にも現れることがあります。なお、通常のスクリプトは基底の後に続きます(LTR 文脈では右側、RTL 文脈では左側)が、prescripts は基底の前に置かれます(LTR(RTL)文脈では左(右)側)。
表示要素は式の抽象的な表記構造を記述するために使われるべきであるため、すべての「スクリプティング」要素(つまり最初の引数式)における基底表現は、脚注される式全体であるべきであり、末尾の文字だけであってはなりません。例えば、 は次のように書くべきです:
<msup>
<mrow>
<mo> ( </mo>
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
</mrow>
<mo> ) </mo>
</mrow>
<mn> 2 </mn>
</msup>
<msub>msub 要素は次の構文で基底に下付き文字を付けます
<msub> base subscript </msub>
msub は subscript 内で scriptlevel を 1 増やし、displaystyle を
false に設定しますが、base 内では両方の属性を変更しません(参照:3.1.6 Displaystyle and
Scriptlevel)。
msub 要素は、3.1.9 Attributes common to presentation elements
に記載された属性に加えて以下の属性を受け取ります。
| Name | values | default |
| subscriptshift | length | 自動 |
| subscript のベースラインを下にシフトする最小量を指定します;既定ではレンダリングエージェントが自らの位置決め規則を使用します。 | ||
<msup>msup 要素は次の構文で基底に上付き文字を付けます
<msup> base superscript </msup>
msup は superscript 内で scriptlevel を 1 増やし、displaystyle を
false に設定しますが、base 内では両方の属性を変更しません(参照:3.1.6
Displaystyle and Scriptlevel)。
msup 要素は、3.1.9 Attributes common to presentation elements
に記載された属性に加えて以下の属性を受け取ります。
| Name | values | default |
| superscriptshift | length | 自動 |
| superscript のベースラインを上にシフトする最小量を指定します;既定ではレンダリングエージェントが自らの位置決め規則を使用します。 | ||
<msubsup>msubsup 要素は、基底式に対して下付きと上付きの両方を付けるために使われます。
<msubsup> base subscript superscript </msubsup>
msubsup は subscript と superscript の内部で scriptlevel を 1 増やし、displaystyle を
false に設定しますが、base 内では両方の属性を変更しません(参照:3.1.6 Displaystyle and
Scriptlevel)。
両方のスクリプトが基底にきつく位置付けられる点に注意してください。ここに示すように
と、ネストされたスクリプトの段差配置(下付きが先にネストされた場合)である
を比較してください。後者は msub を msup
の内部にネストすることで得られます。
msubsup 要素は、3.1.9 Attributes common to presentation elements
に記載された属性に加えて以下の属性を受け取ります。
| Name | values | default |
| subscriptshift | length | 自動 |
| subscript のベースラインを下にシフトする最小量を指定します;既定ではレンダリングエージェントが自らの位置決め規則を使用します。 | ||
| superscriptshift | length | 自動 |
| superscript のベースラインを上にシフトする最小量を指定します;既定ではレンダリングエージェントが自らの位置決め規則を使用します。 | ||
msubsup
は識別子に下付き・上付きのペアを追加するために最も一般的に使われますが、もう一つ重要な用途として、表示スタイルでも通常スクリプト位置に限界を表示する大きな演算子(例えば積分)の限界を置くことがあります。例えば:
は次のように表現されます
<mrow>
<msubsup>
<mo> ∫ </mo>
<mn> 0 </mn>
<mn> 1 </mn>
</msubsup>
<mrow>
<msup>
<mi> ⅇ </mi>
<mi> x </mi>
</msup>
<mo> ⁢<!--InvisibleTimes--> </mo>
<mrow>
<mo> ⅆ </mo>
<mi> x </mi>
</mrow>
</mrow>
</mrow>
<munder>munder 要素は、基底の下に置かれるアクセントまたは極限を付けるために次の構文で使われます
<munder> base underscript </munder>
munder は常に underscript 内で displaystyle を false
に設定しますが、accentunder が false
の場合に限り scriptlevel を 1 増やします。base
内では常に両方の属性を変更しません(参照:3.1.6
Displaystyle and Scriptlevel)。
もし base が movablelimits=true の演算子である場合(あるいは装飾された演算子で、そのコアの mo が movablelimits=true を持つ場合)、かつ displaystyle=false
のときは、underscript は下付き位置に描画されます。この場合、accentunder
属性は無視されます。これは U+2211(entity sum) のような記号の限界に対してよく使われます。
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 の既定値は、underscript が mo 要素または装飾された演算子でない限り false です(参照:3.2.5
Operator, Fence, Separator or Accent
<mo>)。もし underscript が
mo 要素であれば、その accent 属性の値が accentunder の既定値として使われます。もし underscript
が装飾された演算子であれば、そのコアである mo 要素の accent
属性が既定値として使われます。すべての属性と同様に、明示的に与えられた値が既定値を上書きします。
[MathML-Core] は 3.2.5 Operator, Fence, Separator or Accent 上の accent 属性をサポートしていません。MathML Core と互換性を保つために、accentunder は munder 上で設定するべきです。
accentunder がレンダリングに与える影響を示す例:
<mrow>
<munder accentunder="true">
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
<mo> + </mo>
<mi> z </mi>
</mrow>
<mo> ⏟ </mo>
</munder>
<mtext> <!--nbsp-->versus <!--nbsp--></mtext>
<munder accentunder="false">
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
<mo> + </mo>
<mi> z </mi>
</mrow>
<mo> ⏟ </mo>
</munder>
</mrow>
<mover>mover 要素は、基底の上に置かれるアクセントまたは極限を付けるために次の構文で使われます
<mover> base overscript </mover>
mover は常に overscript 内で displaystyle を false
に設定しますが、accent が false の場合に限り
scriptlevel を 1 増やします。base 内では常に両方の属性を変更しません(参照:3.1.6 Displaystyle and
Scriptlevel)。
もし base が movablelimits=true の演算子である場合(あるいは装飾された演算子で、そのコアの mo が movablelimits=true を持つ場合)、かつ displaystyle=false
のときは、overscript は上付き位置に描画されます。この場合、accent 属性は無視されます。これは
U+2211(entity sum) のような記号の限界に対してよく使われます。
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 の既定値は、overscript が mo 要素または装飾された演算子でない限り
false です。もし overscript が mo 要素であれば、その accent 属性の値が mover の accent の既定値として使われます。もし overscript が装飾された演算子であれば、そのコアである
mo 要素の accent 属性が既定値として使われます。
[MathML-Core] は 3.2.5 Operator, Fence, Separator or Accent 上の accent 属性をサポートしていません。MathML Core と互換性を保つために、accentunder は munder 上で設定するべきです。
accent がレンダリングに与える影響を示す二つの例:
<mrow>
<mover accent="true">
<mi> x </mi>
<mo> ^ </mo>
</mover>
<mtext> <!--nbsp-->versus <!--nbsp--></mtext>
<mover accent="false">
<mi> x </mi>
<mo> ^ </mo>
</mover>
</mrow>
<mrow>
<mover accent="true">
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
<mo> + </mo>
<mi> z </mi>
</mrow>
<mo> ⏞ </mo>
</mover>
<mtext> <!--nbsp-->versus <!--nbsp--></mtext>
<mover accent="false">
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
<mo> + </mo>
<mi> z </mi>
</mrow>
<mo> ⏞ </mo>
</mover>
</mrow>
<munderover>
munderover 要素は、基底の上下の両方にアクセントや極限を付けるために次の構文で使われます
<munderover> base underscript overscript </munderover>
この要素は underscript と overscript の内部で常に displaystyle を false
に設定しますが、accentunder または accent
がそれぞれ false の場合に限り scriptlevel を 1 増やします。base 内では常に両方の属性を変更しません(参照:3.1.6 Displaystyle and
Scriptlevel)。
もし base が movablelimits=true の演算子である場合(あるいは装飾された演算子で、そのコアの mo が movablelimits=true を持つ場合)、かつ displaystyle=false
のときは、underscript と overscript はそれぞれ下付きと上付き位置に描画されます。この場合、accentunder および accent 属性は無視されます。これは
U+2211(entity sum) のような記号の限界に対してよく使われます。
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 要素は、別々の munder と mover 要素を使う代わりに用いられます。これは underscript と overscript
が基底に対して垂直方向に等間隔に配置され、基底の傾きに従うようにするためです(例 を参照)。
accent と accentunder の既定値は、それぞれ munder および mover と同じ方法で計算されます。
この例は、movablelimits=true かつ
displaystyle の場合における、munder を
mover 内にネストする方法と 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>
<mmultiscripts>,
<mprescripts/>
前下付きおよびテンソル表記は、単一の要素 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
が与えられていない場合、引数の総数は奇数でなければならず、与えられている場合は偶数でなければなりません。
空要素 mprescripts は mmultiscripts
の直接の部分式としてのみ許可されます。
mmultiscripts の属性は msubsup
の属性と同じです。参照:3.4.3.2
Attributes。
mmultiscripts は基底を除く各引数内で scriptlevel
を 1 増やし、displaystyle を false
に設定しますが、base 内では両方の属性を変更しません(参照:3.1.6 Displaystyle and Scriptlevel)。
前脚と後脚を使った超幾何関数の例:
<mrow>
<mmultiscripts>
<mi> F </mi>
<mn> 1 </mn>
<mrow/>
<mprescripts/>
<mn> 0 </mn>
<mrow/>
</mmultiscripts>
<mo> ⁡<!--ApplyFunction--> </mo>
<mrow>
<mo> ( </mo>
<mrow>
<mo> ; </mo>
<mi> a </mi>
<mo> ; </mo>
<mi> z </mi>
</mrow>
<mo> ) </mo>
</mrow>
</mrow>
次の例はテンソルを示します。ここで k と l は異なる添字です
<mmultiscripts>
<mi> R </mi>
<mi> i </mi>
<mrow/>
<mrow/>
<mi> j </mi>
<mi> k </mi>
<mrow/>
<mi> l </mi>
<mrow/>
</mmultiscripts>
この例は基底に向かって揃えることを示します:
<mmultiscripts>
<mi> X </mi>
<mn> 123 </mn>
<mn> 1 </mn>
<mprescripts/>
<mn> 123 </mn>
<mn> 1 </mn>
</mmultiscripts>
最後の mmultiscripts の例は、二項係数をアラビア式に表示する方法を示します。
<mstyle dir="rtl">
<mmultiscripts><mo>ل</mo>
<mn>12</mn><mrow/>
<mprescripts/>
<mrow/><mn>5</mn>
</mmultiscripts>
</mstyle>
行列、配列およびその他の表に類する数学表記は、mtable、
mtr および
mtd 要素を用いてマークアップされます。これらの要素は HTML の table、tr および td
要素に類似していますが、可換図式やブロック行列などのために必要な細かなレイアウト制御のための専門的な属性を提供します。
加算や乗算のような初等的な数学で使われる二次元レイアウトは表に似ていることがありますが、重要な点で異なります。
レイアウトおよびアクセシビリティ上の理由から、3.6
Elementary Math で説明されている mstack および mlongdiv 要素を初等表記には使用すべきです。
<mtable>
行列または表は mtable 要素を用いて指定します。mtable の内部には
mtr 要素のみが現れることができます。
同じ表の他の行より列数が少ない表の行(その行より前にあるか後にあるかは問わない)は、実質的に右側(RTL 文脈では左側)に空の mtd
要素で埋められ、各行の列数が表の任意の行の最大列数と等しくなるように扱われます。rowspan や columnspan 属性に非既定値を用いる mtd
の使用は、与えられた列数をカバーするために後続の mtr 要素で何個の mtd 要素を与えるべきかに影響する場合があることに注意してください。
MathML は表のレイアウトアルゴリズムを規定していません。特に、表全体の幅に対する制約(例えば columnwidth
属性の明示的な値やセル内容の最小サイズ)と width 属性の間の競合を解決するのは MathML
レンダラの責任です。表のレイアウトアルゴリズムについては Cascading Style Sheets, level
2 を参照してください。
mtable 要素は、3.1.9 表示要素に共通の属性 に記載された属性に加えて以下の属性を受け取ります。mtable の一部として描画される罫線は、mathcolor
で指定された色で描画されるべきです。
| 名称 | 値 | 既定 |
| align | ("top" | "bottom" | "center" | "baseline" | "axis"), rownumber? | axis |
表の縦方向の揃え方を環境に対して指定します。axis は表の垂直中心を環境の axis に合わせることを意味します。(式の axis
は組版者が使う揃え線で、通常マイナス記号が乗る線です。)center と baseline はいずれも表の中心を環境のベースライン上に揃えることを意味します。top や bottom
は表の上端または下端を環境のベースラインに揃えます。
もし align 属性値が rownumber で終わる場合、上から数えて 1
をトップ行とするその指定行(表全体ではなく)が上記の方法で揃えられます(以下の例外に注意)。rownumber
が負であるときは下から数えます。rownumber の値が範囲外または整数でない場合は無視されます。行番号が指定され、かつ揃え値が baseline または axis の場合、その行の baseline または axis が揃えに使用されます。これは
rowalign の値が baseline または axis のときのみ明確に定義されます。MathML は他の rowalign の値に対して baseline や axis 揃えがどのように行われるかを規定していません。比較は 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 |
frame が none
でない場合に、表と枠の間に追加される間隔を指定します。最初の値は右左の間隔、二番目の値は上下の間隔を指定します。
|
||
| equalrows | boolean | false |
| すべての行の総高さを同じに強制するかどうかを指定します。 | ||
| equalcolumns | boolean | false |
| すべての列の総幅を同じに強制するかどうかを指定します。 | ||
| displaystyle | boolean | false |
各セル内での displaystyle の値を指定します(scriptlevel は変更されません);参照:3.1.6
Displaystyle and Scriptlevel。
|
||
上の、行(それぞれ列、または行間・列間のギャップ)に影響する属性の仕様において、表記 (...)+ は属性に複数の値を空白区切りで与えられることを意味します(参照:2.1.5
MathML
属性値)。この文脈では単一の値はすべての行(それぞれ列やギャップ)に対して使う値を指定します。値の列は上から順に対応する行(それぞれ左または右の最初の列、方向性に依存)に適用されます。もし行(それぞれ列やギャップ)が与えられた値より多い場合、最後の値が必要に応じて繰り返されます。値が多すぎる場合は余分は無視されます。
なお、罫線領域(frame、rowlines、columnlines が占める領域)や間隔(framespacing、rowspacing、columnspacing)は行や列として数えられないことに注意してください。
displaystyle 属性は継承値を設定するために mtable
要素に付けることができます。もし属性が存在しない場合、mtable は表要素の内部で displaystyle を false
に設定します(参照:3.1.6
Displaystyle and Scriptlevel)。
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>
括弧は mtable
要素の描画の一部ではないため、括弧は明示的に表現する必要があることに注意してください。これにより角括弧など他の囲いを使ったり、まったく囲わないことも可能になります。
<mtr>mtr 要素は表または行列の一行を表します。mtr 要素は mtable 要素の直接の部分式としてのみ許可され、その内容が表の一行を構成することを指定します。mtr の各引数は表の異なる列に配置され、LTR 文脈では最左列から、RTL 文脈では最右列から始まります。
3.5.1 Table or Matrix
で説明されているように、mtr 要素は表内で他の行より短い場合に実質的に mtd 要素で埋められます。
mtr 要素は、3.1.9 Attributes common to presentation elements
に記載された属性に加えて以下の属性を受け取ります。
| 名称 | 値 | 既定 |
| rowalign | "top" | "bottom" | "center" | "baseline" | "axis" | 継承 |
この行について、rowalign で mtable
に指定された縦方向の揃えを上書きします。
比較は ASCII 大文字小文字を区別しない 方式で行われます。 |
||
| columnalign | ("left" | "center" | "right") + | 継承 |
この行について、columnalign で mtable に指定された水平方向の揃えを上書きします。
比較は ASCII 大文字小文字を区別しない 方式で行われます。 |
||
以前の MathML では番号付き方程式用に mlabeledtr 要素が定められていました。mlabeledtr では最初の mtd
が式番号を表し、行内の残りの要素が番号付けされる式を表します。mtable の side および minlabelspacing
属性が式番号の配置を決定します。
この要素は広く実装されておらず現在のバージョンでは仕様に含まれていませんが、Legacy Schema
では依然として有効です。
多数の番号付き式を含む大きな文書では自動番号付けが重要になります。自動式番号付けや式番号への参照の自動解決は MathML の範囲外ですが、スタイルシート等を用いることで対処できます。CSS
の文脈では、空の mtd を mtr の最初の子として使い、CSS
カウンタと生成コンテンツを用いて式番号を埋めることができます。例えば次のような CSS を使えます:
body {counter-reset: eqnum;}
mtd.eqnum {counter-increment: eqnum;}
mtd.eqnum:before {content: "(" counter(eqnum) ")"}
<mtd>mtd 要素は表または行列の一つのエントリ(セル)を表します。mtd 要素は
mtr 要素の直接の部分式としてのみ許可されます。
mtd 要素は単一の引数を受け取り、その引数は複数の子を持つ推論された mrow であり得ます;詳しくは 3.1.3 必須引数 を参照してください。
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" | 継承 |
このセルの縦方向揃えを指定し、包含する mrow や mtable 上で指定された値を上書きします。rowalign
を参照してください。比較は ASCII 大文字小文字を区別しない 方式で行われます。 |
||
| columnalign | "left" | "center" | "right" | 継承 |
このセルの水平方向揃えを指定し、包含する mrow や mtable 上で指定された値を上書きします。columnalign
を参照してください。比較は ASCII 大文字小文字を区別しない 方式で行われます。 |
||
malignmark および maligngroup は
[MathML-Core] ではサポートされていません。多くの目的では mtable
の列を直接使って整列を実装することが推奨されます。次節で述べるように、これらの要素は将来のバージョンでさらに簡略化または削除される可能性があります。
既存の MathML で malignmark を使用している場合のために、Javascript polyfill が提供されています。
重大な例外を一つ除いて、<maligngroup/> と <malignmark/> はほとんど採用や実装がありませんでした。
その唯一の例外は整列の基礎のみを使用しています。
そのため、MathML の整列は現在の使用に合わせて大幅に簡略化され、将来の実装を簡単にする目的で簡素化されました。具体的には次の簡略化が行われています:
<maligngroup/> と <malignmark/> のための属性は削除されました。mtable、mtr、および mlabeledtr に以前許されていた groupalign
属性は削除されました。<malignmark/> は以前は任意の場所(トークン要素内部を含む)で許可されていましたが、現在は
<maligngroup/> が許可される場所にのみ許可されます(下記参照)。
整列マーカーは空白様の要素です(参照:3.2.7 空白
<mspace/>)。これらは列内の MathML
式の特定の点を垂直に揃えるために、必要な量の水平空間を自動挿入することで利用できます。
以下の議論では、係数や各項の変数を垂直に揃えて表示すべき連立方程式の例を使います。挿入される空間は次に示すような配置になります:
| 8.44x | + | 55y | = | 0 |
| 3.1x | − | 0.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 を持つと仮定して議論を行います。
揃える各部分は maligngroup に入れるべきです。整列点は通常 maligngroup 要素に続く要素の左端(RTL の場合は右端)ですが、もしその間に malignmark 要素があれば、その malignmark
に続く要素の左端(RTL の場合は右端)がそのグループの整列点になります。
maligngroup または malignmark が mtable の外に現れると、それらは幅ゼロで描画されます。
上の例では、各方程式は左辺の各係数、変数、演算子の前に一つずつ maligngroup 要素を持ち、=
記号の前と右辺の定数の前にも一つずつ maligngroup 要素を持ちます。これらが揃えられる部分だからです。
一般に、ある表セルが n 個の maligngroup を含むとき、そのセルは n 個の整列グループを持ち、i 番目のグループは i 番目の maligngroup
の直後から (i+1) 番目の前までの要素で構成されます。表セルの内容の中で最初の maligngroup
の前に完全に現れる要素は存在してはなりません。
整列グループの区分は、必ずしもそれを含む MathML 式の入れ子構造に一致するわけではないことに注意してください。つまり、ある整列グループが一つの mrow の終わり、別の mrow
全体、および三番目の先頭部分で構成されることが許されます。これはこの節末の例の MathML マークアップで見ることができます。
整列グループはレイアウトスキーマの入れ子構造と一致する必要はありませんが、表セル内で maligngroup と malignmark
が許される場所には制限があります。これらの要素は、その表セル内に含まれる(直接または間接的に)以下の種類の要素内にのみ含めることができます:
mrow 要素(複数子をもつ mtd
によって形成される推論された mrow を含む)が許されますが、dir 属性による方向の変更を含む mrow は除きます;
mstyle 要素
(ただし dir 属性で方向を変更するものは除く);
mphantom 要素;
mfenced 要素;
maction 要素(ただしその選択された部分式のみが検査される);
semantics 要素.
これらの制限は、オーバースクリプト、根号、分数線などの複雑さを避けつつ、整列を一意に指定できるようにすることを意図しています。また、望ましい整列を達成するために単純なアルゴリズムで十分であることも保証します。
整列グループに分割された表セルについては、その内容のすべての要素が、上で挙げた要素の中で maligngroup を含む要素および
maligngroup
自身を除き、ちょうど一つの整列グループの一部でなければなりません。これは、整列グループを含む任意の表セルでは最初の完全な要素が maligngroup でなければならないことを意味します(ただしこれは他の要素の開始タグが先行することは妨げません)。この要件は、最初の
maligngroup
より前にある要素の揃え方についての混乱を取り除き、その列の整列処理から完全に除外される表セルを識別しやすくします。
同じ列で整列グループに分割された表セルが各々同じ数のグループを含む必要はありません。異なる場合、他の表セルよりグループ数が少ない各セルの右側(RTL 文脈では左側)に幅ゼロの整列グループが実質的に追加されます。
すべての行が同じ数の maligngroup 要素を持つように厳密化するべきでしょうか?
この節に記載されているように maligngroup を持たない行を許すべきかどうか?
列内で整列グループを持たない式は maligngroup 要素を含んではいけません。整列グループを持たない式は、その列全体に適用される
columnalign
属性のみを用いて揃えられます。もしそのような式が、整列グループを含む表セルに必要な列幅より広い場合、整列グループを含むすべての表セルはその列内で一まとまりとして columnalign
に従ってシフトされます。例えば、上の二つの方程式の列に内部揃えを持たない列見出しを追加することができ、その見出しに mtext
要素を用い、表全体にデフォルトの columnalign="center" を使うと次のようになります:
| equations with aligned variables | ||||||
| 8.44x | + | 55y | = | 0 | ||
| 3.1x | − | 0.7y | = | −1.1 | ||
または、短い見出しを用いると、
| some equations | ||||
| 8.44x | + | 55y | = | 0 |
| 3.1x | − | 0.7y | = | −1.1 |
malignmark
要素は、整列グループ内の任意の場所(ただし完全にその内側に含まれる別の整列スコープ内は除く)に置かれた場合、maligngroup
要素の開始での揃えを上書きします。
malignmark 要素は、その後に続く要素の左端(RTL 文脈では右端)を整列点とすることを示します。
malignmark 要素はトークンの内部に現れてもよいか?
malignmark 要素が整列グループ内に提供される場合、それは maligngroup に許される要素にのみ含まれるべきです(参照:3.5.4.3
整列グループの指定)。もし整列グループ内に複数の malignmark
要素があれば、最初のもの以外は無視されます。MathML
アプリケーションはこの状況に警告を出すモードを用意してもよいですが、これはエラーではなく、既定では警告を出さないでよいです。その理由は、自動生成されたデータからすべての不要な
malignmark 要素を取り除くのは煩雑であるためです。
上で示した規則は、この節の冒頭付近に示した例 の MathML 表現を説明するのに十分です。
その表現の一例は次のようになります:
<mtable groupalign="{decimalpoint left left decimalpoint left left decimalpoint}">
<mtr>
<mtd>
<mrow>
<mrow>
<mrow>
<maligngroup/>
<mn> 8.44 </mn>
<mo> ⁢<!--InvisibleTimes--> </mo>
<maligngroup/>
<mi> x </mi>
</mrow>
<maligngroup/>
<mo> + </mo>
<mrow>
<maligngroup/>
<mn> 55 </mn>
<mo> ⁢<!--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> ⁢<!--InvisibleTimes--> </mo>
<maligngroup/>
<mi> x </mi>
</mrow>
<maligngroup/>
<mo> - </mo>
<mrow>
<maligngroup/>
<mn> 0.7 </mn>
<mo> ⁢<!--InvisibleTimes--> </mo>
<maligngroup/>
<mi> y </mi>
</mrow>
</mrow>
<maligngroup/>
<mo> = </mo>
<maligngroup/>
<mrow>
<mo> - </mo>
<mn> 1.1 </mn>
</mrow>
</mrow>
</mtd>
</mtr>
</mtable>
ここでは MathML レンダラがこの節で指定された整列を実行するための単純なアルゴリズムを示します。整列の仕様は(文字の左右端定義を除いて)決定的であるため、正しい MathML
整列アルゴリズムはこのアルゴリズムと同じ振る舞いになります。各 mtable
列(整列スコープ)は独立に扱うことができ、以下のアルゴリズムは一つの mtable 列に適用され、そこに含まれる整列要素と columnalign 属性を考慮します(参照:3.5.1 Table or Matrix)。RTL
文脈ではアルゴリズム内の左右を入れ替えてください。
このアルゴリズムは実装で検証されるべきです。
maligngroup および malignmark
要素に対して幅ゼロを使います。最終レンダリングは各整列グループや表セルに適用される水平シフトを除いて同一になります。
malignmark
で指定されていればそれ、そうでなければ左端)、および右端の水平位置を記録し、整列点の左右それぞれの側の幅を決定します。これら二つの「側幅」の和、すなわち整列点の左右の幅の和は整列グループの幅に等しくなります。
整列グループを含まない表セルの幅は初期レンダリングの一部として計算され、各セルごとに異なり得ますし、整列グループを含むセルで用いられる単一幅とも異なり得ます。両種類のセルに対するすべてのセル幅の最大値が列全体の幅を与えます。
列内の各セルの位置は、最も内側で明示的な値を持つ columnalign 属性を持つ周囲の mtable、mtr、または mtd
要素の属性値に従って決定されます。これは整列グループを含むセルが列内でシフトされることを意味するかもしれませんが、各セルは同じ幅を持つため列内で同じ量だけシフトされ、対応する整列グループの整列点の垂直揃えは維持されます。
2 次元の加算、乗算、筆算のような低学年で使われる数学は、表形式であることが多いです。 ただし、使用される具体的な表記は高等数学に比べて国ごとに大きく異なります。 さらに、初等数学ではしばしば途中の状態を示す例が提示され、MathML はこれらの中間的または意図的に欠落した部分的な形を表現できなければなりません。実際、これらの構成は「数学」を表すと同時に、記憶補助や手順のガイドを表しています。
初等数学での基本的な整列に使用される要素は次の通りです:
mstack桁と演算子の行を整列させる
msgroup同様の位置合わせを持つ行をグループ化する
msrow桁と演算子を 1 行にまとめる
mslineスタックの行間に線を引く
mscarries次の行に対する繰り上がり/繰り下がりや取り消し線を注釈する
mscarry単一桁に対する繰り上がり/繰り下がりおよび/または取り消し線
mlongdiv筆算(割り算)について、除数と商および中間計算のスタックを指定する
mstack と mlongdiv はすべての初等数学レイアウトの親要素です。
mstack、mlongdiv、および msgroup の子要素で、msrow、msgroup、mscarries および 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>
さらに多くの例は 3.6.8 初等数学の例 に示されています。
mstack は各桁で揃えられた数の行を配置するために使われます。
これは 2 次元の加減乗算のような多くの初等数学表記で一般的です。
mstack の子要素は、それぞれ前の行の下に積まれる行または行のグループを表し、任意の数の行を含めることができます。
msrow は 1 行を表し、
msgroup は複数行をグループ化して水平整列を一緒に調整できるようにし、
mscarries は次の行に適用される一連の繰り上がりを表し、
msline は行を分ける線を表します。
他の要素は暗黙的に msrow に囲まれているかのように扱われます。
各行は「桁」を含み、それらは列に配置されます。
(詳細は 3.6.4 Rows in Elementary
Math <msrow>
を参照してください)。
stackalign 属性と、msgroup、
mscarries、および msrow の position と shift 属性が、
どの桁に文字が属するかを決定します。
列の幅はその列の各「桁」の幅の最大値です — 繰り上がりは幅の計算に参加しません;幅ゼロとして扱われます。
要素が列に収まらないほど幅が大きい場合、charalign 属性で定義された通りに隣接列へオーバーフローします。
列に文字がない場合、その幅は現在の言語での 0 の幅と見なされます(多くのフォントではすべての数字が同じ幅です)。
mstack のレイアウト手順は次の通りです:
行の「桁」を決定する。
行内のすべての桁を最初に stackalign の値に従って整列する。
各行はその行を制御する position 属性(存在する場合)に基づいてその整列に対して位置決めされる。
各列の桁の最大幅を決定し、その列の短い・広いエントリは charalign 属性に従って揃えられる。
mstack 要素の幅と高さは行と列に基づいて計算される。列からのオーバーフローはその計算の一部として用いられない。
mstack 要素のベースラインは align
属性によって決定される。
mstack 要素は、3.1.9 表示要素に共通の属性 に記載された属性に加えて以下の属性を受け取ります。
| Name | values | default |
| align | ("top" | "bottom" | "center" | "baseline" | "axis"), rownumber? | baseline |
mstack の縦方向の揃えを環境に対して指定します。
許される値とその意味は mtable の align
属性と同じです。比較は 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 の場合、使用される列は各行で mstyle の decimalcharacter
属性(既定は ".")で指定された小数点文字を含む最も左側の列です。
行に小数点文字がない場合、行内の最初の数の右側に暗黙の小数点があると仮定されます。
比較は ASCII 大文字小文字を区別しない 方式で行われます。 |
||
| charalign | "left" | "center" | "right" | right |
列内の桁の水平方向揃えを指定します。
コンテンツが列幅より大きい場合、揃えとは反対側へオーバーフローします。
例えば right
の場合、コンテンツは左側へオーバーフローします;中央の場合は両側へオーバーフローします。
この余分は列幅計算や mstack の全体幅計算には参加しません。
このような場合、著者は列のオーバーフロー同士が衝突しないよう注意する必要があります。
比較は ASCII 大文字小文字を区別しない 方式で行われます。 |
||
| charspacing | length | "loose" | "medium" | "tight" | medium |
各列の間に置く空間の量を指定します。
繰り上がりが上に置かれない場合や特に幅がある場合は大きめの間隔が有用です。
キーワード loose、medium、tight
は繰り上がりや列内の他のエントリが幅広い場合に間隔を自動調整します。
これら 3 つの値は、具体的な値を考えずにレイアウトの見た目に柔軟性を持たせます。
いずれの場合も列間の間隔は固定量であり、列ごとに変化しません。
比較は ASCII 大文字小文字を区別しない 方式で行われます。 |
||
筆算の表記は世界中でかなり異なりますが、表記の核心は類似していることが多いです。
mlongdiv は mstack
に似ており、長除法のレイアウトに使われます。
mlongdiv の最初の 2 つの子は、その順で除数と割り算の結果(商)です。
残りの子要素は mstack の子であるかのように扱われます。
筆算の表示に使われる線や区切りの配置は longdivstyle 属性で制御されます。
結果や除数は初等数学要素であってもよく、空の <mrow/> でもかまいません(MathML 3 で使われた特定の空要素
<none/> は本仕様では使われません)。
特に、msgroup が使われる場合、そのグループ内の要素は mstack
を自ら形成するか、被除数の mstack の一部になるかは longdivstyle の値によります。
例えば米国式の除法では、商は被除数の mstack の一部として扱われますが、除数はそうではありません。
MathML は結果と除数が自分自身の mstack を形成するべきかどうかや、結果や除数に msline や他の初等数学要素が使われ、それらが被除数の mstack
レイアウトに参加しない場合に何が起こるべきかは規定しません。
この節の残りでは、mstack について述べられることは、特に断らない限り mlongdiv にも適用されます。
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アラビア諸国で一般的に使われる表記
msgroup は mstack および mlongdiv 内で、
スタックの整列に対して類似した位置を持つ行をグループ化するために使われます。
明示的に与えられない場合、mstack と mlongdiv の子要素は
暗黙的に msgroup に囲まれているかのように扱われます。
msgroup 要素は、3.1.9 表示要素に共通の属性 に記載された属性に加えて以下の属性を受け取ります。
| Name | values | default |
| position | integer | 0 |
このグループ内の行の水平位置を、包含する msgroup によって決定される位置(その position および shift
属性に従う)に対して相対的に指定します。
項目の結果として得られる位置値は包含する mstack または mlongdiv の stackalign
で指定された列に相対的です。
正の値は各行を十の位側へ移動させ(10 の冪を掛けたように)、右側に空の列をパディングする効果を持ちます;
負の値は一の位側へ移動させ、左側にパディングします。
小数点は列として数えられ、負の値の場合は考慮する必要があります。
|
||
| shift | integer | 0 |
このグループ内の連続する子(行またはグループ)に対する位置の増分シフトを指定します。値の解釈は position と同様ですが、各子(最初の子を除く)の位置を前の子に対して指定します。
|
||
msrow は mstack の行を表します。
多くの場合、文脈から暗黙的に存在しますが、演算子 "+" や "-" を数と並べて 1 行に入れるような場合には明示的に使うと便利です。
mn 要素が msrow
の子である場合(暗黙であっても)、その数は桁に分割され、桁は連続する列に配置されます。
その他の要素は mstyle を除き、次の列を占める単一の桁として扱われます。
mstyle はその子が直接 msrow
の子であるかのように扱われますが、その子のスタイルは mstyle の属性によって影響されます。
空要素 <mrow/> は空の列を作るために使えます。
行は主として数であるかのように扱われ、数は常に左から右に表示されるため、列の表示順序は常に左から右です;
トークン要素内(mn 以外)のテキストの双方向性は引き続き適用されますし、msrow の子の中の全体的な方向性も適用されます(これらは単一の桁として扱われます);
参照:3.1.5 Directionality。
msrow 要素は、3.1.9 表示要素に共通の属性 に記載された属性に加えて以下の属性を受け取ります。
| Name | values | default |
| position | integer | 0 |
このグループ内の行の水平位置を、包含する msgroup によって決定される位置(その position および shift
属性に従う)に対して相対的に指定します。
結果の位置値は包含する mstack または mlongdiv の stackalign
で指定された列に相対的です。
正の値は行を十の位側へ移動させ、右側に空列をパディングする効果を持ち、負の値は一の位側へ移動させ、左側にパディングします。小数点は列として数えられ、負の値の場合に考慮する必要があります。
|
||
mscarries 要素は、初等数学で現れる繰り上がり、繰り下がり、取り消し線などのさまざまな注釈に使われます。
子要素は mstack の 次 の行の要素に関連付けられます。
mscarries が mstack や mlongdiv の最後の要素であることはエラーです。mscarries
の各子は次の行の同じ列に適用されます。
これらの注釈は数として扱われるものを飾るために使用されるので、繰り上がりの列への割り当ては左から右へ進みます;
全体の方向性は繰り上がりの順序には適用されませんが、各繰り上がりの内容には適用される場合があります;
参照:3.1.5 Directionality。
mscarries の子で mscarry または <mrow/> 以外のものは、暗黙的に mscarry に囲まれているかのように扱われます;
ある列に繰り上がりが不要な場合は空要素 <mrow/> を使用します。
以前の MathML リリースでは <none/> が使われていましたが、これは空の <mrow/> と同等でした。
mscarries 要素は displaystyle を false に設定し、scriptlevel を 1
増やすので、子要素は通常より小さいフォントで表示されます(参照:3.1.6 Displaystyle and Scriptlevel)。
また scriptsizemultiplier のデフォルト値を変更します。
その効果は、継承される scriptsizemultiplier の値が依然としてデフォルトを上書きするべきである一方、mscarries の内部ではデフォルト値が 0.6
であるべき、ということです。
scriptsizemultiplier は mscarries
要素上で設定でき、その値は通常通り継承値を上書きします。
もし繰り上がりの行が隣接しているとき、最初の行の繰り上がりは第二(次の)行を、第二行が location=n を持つかのように注釈します。
これは第二行が描画しない場合でも、視覚的に(本仕様では未定義の)ある量の空間を表示時に使うことを意味します。
mscarries 要素は、3.1.9 表示要素に共通の属性 に記載された属性に加えて以下の属性を受け取ります。
| Name | values | default |
| position | integer | 0 |
このグループ内の行の水平位置を、包含する msgroup によって決定される位置(その position および shift
属性に従う)に対して相対的に指定します。
得られる位置値は包含する mstack または mlongdiv の stackalign
で指定された列に相対的です。
この属性の解釈は msgroup や msrow の
position と同じですが、下の列に対する各繰り上がりの関連付けを変えます。
例えば 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 を参照してください。
|
||
mscarry は mscarries
の内部で個々の列の繰り上がりを表すために使われます。
繰り上がりは幅がゼロであるかのように扱われ、その列の幅の計算には参加しません;したがって列境界を超えて描画されてもかまいません。
通常は暗黙ですが、この要素を明示的に使って包含する mscarries の location や crossout 属性を上書きすることができます。
また、内容に空の <mrow/> を使うことで実際の繰り上がりを表示せずに囲む mscarries による取り消し線を有効にする用途でも便利です。
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 方式で行われます。 |
||
msline は mstack 要素内に水平線を描きます。
線の位置、長さ、太さは属性で指定されます。
長さが指定されている場合、線は与えられた桁数を持つ数として位置決めされ描画されます。
msline 要素は、3.1.9 表示要素に共通の属性 に記載された属性に加えて以下の属性を受け取ります。
線は mathcolor で指定された色で描画されるべきです。
| Name | values | default |
| position | integer | 0 |
このグループ内の行の水平位置を、包含する msgroup によって決定される位置(その position および shift
属性に従う)に対して相対的に指定します。
得られる位置値は包含する mstack または mlongdiv の stackalign
で指定された列に相対的です。
正の値は十の位側へ移動し、負の値は一の位側へ移動します。
小数点は列として数えられ、負の値の場合は考慮する必要があります。
既定の線長は 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
の上端が周囲の文脈(存在する場合)のベースライン上に来るようになります。
(太さキーワード medium、thin、および thick
の議論は 3.3.2
Fractions を参照してください。)
比較は ASCII case-insensitive 方式で行われます。 |
||
2 次元の加算、減算、および乗算は通常、数、繰り上がり/繰り下がり、線、演算の符号を含みます。
以下は節の冒頭に示した例です:
mn 要素内の桁は各列を占め、「+」も同様です。
列の下に空を入れるために <mrow/> が使われ、「4」の下を埋めて "+"
がすべての被演算子の左に現れるようにしています。
msline に属性が与えられていないため、それがすべての列をまたいでいることに注意してください。
<mstack>
<mn>424</mn>
<msrow> <mo>+</mo> <mrow/> <mn>33</mn> </msrow>
<msline/>
</mstack>
次の例は演算子を右に置く方法を示しています。演算子を右に置くのはオランダなどの国で標準的です。 この例では合計で 4 列ありますが、既定の整列が数の右側の暗黙の小数点であるため、どの行もパディングやシフトをする必要はありません。
<mstack>
<mn>123</mn>
<msrow> <mn>456</mn> <mo>+</mo> </msrow>
<msline/>
<mn>579</mn>
</mstack>
次の二つの例は mscarries、mscarry と <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>
以下は msgroup と shift
属性の使用を示す単純な乗算の例です。最初の msgroup は暗黙でレイアウトを変更しません。
2 番目の msgroup は削除することもできますが、その場合最後の 2 つの子には msrow が必要になります。
それらの msrow は position または 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>
長除法で使われる表記は国によって大きく異なります。ほとんどの表記は中間結果を揃え、引かれる被演算子のための線を引くという共通の特徴を持ちます。中間計算にマイナス記号を表示する場合としない場合があり、描画される線の長さも表記によって異なります。 最も明白な差は除数の位置や商、剰余、中間項の位置が異なることです。
使用されるレイアウトは 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>
1/3(0.3333...)のように桁が無限に繰り返す小数は、いくつかの表記で表されます。一般的な表記の一つは繰り返す桁の上に水平線を置く方法です(ポルトガルでは下線が使われます)。
もう一つの表記は繰り返す桁の上に点を置く方法です。
これらの MathML は mstack、msrow、および
msline を使って直接的に表せます。
以下にこれらの表記を示します:
<mstack stackalign="right">
<msline length="1"/>
<mn> 0.3333 </mn>
</mstack>
<mstack stackalign="right">
<msline length="6"/>
<mn> 0.142857 </mn>
</mstack>
<mstack stackalign="right">
<mn> 0.142857 </mn>
<msline length="6"/>
</mstack>
<mstack stackalign="right">
<msrow> <mo>.</mo> <mrow/><mrow/><mrow/><mrow/> <mo>.</mo> </msrow>
<mn> 0.142857 </mn>
</mstack>
maction 要素は式にアクションを結び付けるための仕組みを提供します。
この要素は任意個の部分式を引数として受け取り、どのようなアクションが行われるかは actiontype 属性で制御されます。
MathML 3 では 4 種類のアクション(toggle、statusline、statusline、および
input)が定義されていました。
しかし、どのアクションを実装できるかはプラットフォームに強く依存するため、MathML 4 ではこれらのアクションが具体的に何を行うかをあらかじめ定義していません。
さらに、Web 環境では JavaScript に結び付けられたイベントでアクションを実行する方が強力な解決策であり、maction
はそのようなイベントを付加するための便利なラッパー要素を提供します。
ローカルに(math 要素内で)あるいは任意の URL へのリンク付けは maction では扱われません。
代わりに、MathML 要素上に直接リンクを追加する方法で処理されます(詳細は 7.4.4 Linking を参照)。
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 では別の名前空間に置かれるべきです。
この例では、非標準の data 属性がレンダラに追加情報を渡すために使われています。
data-color 属性は表示中の文字の色を変更し、
data-background 属性は文字の背景色を変更するかもしれません。
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
を参照してください。
コンテンツ マークアップの目的は、式の特定の表記ではなく、式の根底にある数学的意味を明示的に符号化することです。数学表記は時に曖昧で文脈依存であり、コミュニティごとに異なります。多くの場合、根底にある形式的な数学的対象を直接扱う方が望ましいです。コンテンツ マークアップはこの目的のために、厳密で拡張可能な意味論的フレームワークとマークアップ言語を提供します。
提示方法に関係なく根底の数学的構造を明示的に符号化することで、数学的対象を意味的に処理するシステム間で情報をより正確に交換することが可能になります。重要な適用分野には、計算機代数システム、自動推論システム、産業および科学アプリケーション、多言語翻訳システム、数学検索、オンライン評価の自動採点、対話型教科書などがあります。
本章では、コンテンツ マークアップを定義するために用いられる基本概念の概要を提示し、Strict Content Markup を構成するコア要素のコレクションを説明し、一般的な数学的慣用表現をサポートするための完全な要素集合を定義します。Strict Content Markup は意味的に厳密な方法で一般的な式木を符号化し、コンテンツ MathML の完全な要素セットは以前のバージョンのコンテンツ マークアップとの後方互換性を提供します。完全なコンテンツ マークアップと Strict Content Markup 間の対応は、任意のコンテンツ マークアップを Strict Content Markup に翻訳するためのアルゴリズムを詳述する F. The Strict Content MathML Transformation に定義されています。
コンテンツ MathML は数学的対象を式の木(expression trees)として表現します。一般に、式の木は演算子を一連の部分式に適用することによって構成されます。例えば和
x+y
は加算演算子を二つの引数 x と y に適用した結果として構成できますし、式 cos(π)
はコサイン関数を数 π に適用したものとして構成できます。
式木の終端ノードは数、変数、算術演算子などの基本的な数学的対象を表します。木の内部ノードは関数適用や複合対象を構築するその他の数学的構成を表します。
MathML は比較的少数の一般的な数学的構成を定義しており、広範な用途で十分となるよう選ばれています。加えて、それが定義する集合の外の概念を参照する仕組みを提供しており、それらも表現できるようにしています。
定義されているコンテンツ要素の集合は、米国の幼稚園から大学初年度二年程度(ヨーロッパの A レベルやバカロレア程度)までで通常使われる式の簡単な符号化に十分であるように設計されています。
コンテンツ MathML 要素セットの主な役割は、式の数学的構造をそれを提示するために使われる表記から独立に符号化することです。ただし、レンダリングの問題を無視することはできません。コンテンツ MathML 式をレンダリングする方法はいくつかあり、MathML 要素のネイティブ実装から、宣言的な表記定義、XSLT スタイルシートまで多様です。コンテンツ MathML のレンダリング要件は広範にわたるため、MathML は規範的なレンダリング仕様を提供しません。代わりに、提示マークアップを用いた例によって典型的なレンダリングが示唆されます。
コンテンツ MathML 式の基本構成要素は、数、識別子、および 記号 です。これらの構成要素は関数適用や束縛演算子を用いて結合されます。
式
において、数値
は固定された値を持つ数を表します。コンテンツ MathML は数値量を表すために cn 要素を使用します。識別子 の
は数学的変数、すなわちあらかじめ値が定まっていない量を表します。コンテンツ MathML は変数識別子を表すために ci 要素を使用します。
プラス記号は加算関数、すなわち外部で定義された固定の対象を表す識別子です。このような識別子は変数と区別するために記号と呼ばれます。一般的な初等関数や演算子はこの意味で記号です。コンテンツ
MathML は記号を表すために csymbol 要素を使用します。
数、変数、記号を結合する基本的な方法は関数適用です。コンテンツ MathML は関数自体(例えば正弦関数のような記号、f
のような変数、あるいは他の式であり得る)と、その関数を引数に適用した結果とを区別します。apply
要素は関数とその引数を構文的にまとめ、関数を引数に適用した結果の式を表します。
式の中で、変数は束縛された(bound)変数または自由(free)変数として記述されることがあります。束縛変数は束縛式のスコープ内で特別な役割を持ち、そのスコープ内で一貫して名前を変更しても式の意味は変わりません。自由変数は式内で束縛されていないものです。コンテンツ
MathML は自由変数への関数適用(例:f(x))と、変数をスコープ内で束縛する演算とを区別します。bind 要素は束縛変数のスコープを区切り、束縛演算子とその束縛変数をまとめるために用いられます。束縛変数は bvar 要素を使って供給されます。
Strict Content マークアップでは、変数束縛を行う唯一の方法は bind 要素を使うことです。非 Strict Content
マークアップでは、和や積分のようなよく知られた慣用表記により近い他のマークアップ要素が提供されます。これらの構成は積分変数や総和の添字変数のように暗黙に変数を束縛する場合があります。MathML
はこれらの構成に必要な補助データを表す要素を 修飾子要素(qualifier element) と呼びます。
修飾子を含む式は少数の慣用パターンのいずれかに従います。各パターンは同様の束縛演算子のクラスに適用されます。例えば総和と積は同じクラスに属し、同じパターンの添字変数を使います。Content MathML の演算子クラスは 4.3.4 Operator Classes に詳述されています。
MathML 3 以降、Strict Content MathML は数学式の意味を一様な構造で表現するのに十分な最小のコンテンツ MathML の部分集合として定義されています。完全なコンテンツ MathML 要素集合は MathML 2 との後方互換性を保持し、冗長性と形式性の間で実用的なバランスをとっています。
コンテンツ MathML はあらかじめ定義された多くの関数を空要素として符号化します(例:sin、log 等)および複合対象を形成するための様々な構成(例:set、interval 等)を提供します。これに対し Strict Content MathML は既知の全関数を単一の要素(csymbol)で表し、その属性で拡張可能なコンテンツ辞書中の定義を指し示し、複合式を構築するのに apply と bind のみを使用します。cn や ci のようなトークン要素は 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 |
数学式の意味を形式化するためのどんな方法も拡張可能でなければなりません。すなわち、議論の領域を拡張するために新しい関数や記号を定義する能力を提供しなければなりません。コンテンツ MathML
は新しい記号を表すのに csymbol 要素を使い、これらの数学的意味を記述するためにコンテンツ辞書(Content
Dictionaries)を使用します。記号とその意味記述との関連付けは、csymbol
要素の属性を用いてコンテンツ辞書中の記号の定義を指すことで行われます。
Content MathML の演算子要素とコンテンツ辞書中の記号定義との対応は E.3 The Content MathML Operators に示されています。これらの事前定義された MathML 演算子記号の定義は OpenMath Society によって作成されたコンテンツ辞書を参照しており、W3C Math Working Group と連携しています。この情報は参考情報であり規範的ではないことに注意してください。一般に、事前定義された記号の正確な数学的意味は MathML 推奨仕様によって完全には指定されておらず、記号意味論に関する規範的な記述は本章の本文にあるものだけです。OpenMath コンテンツ辞書によって提供される意味定義はほとんどの用途に十分であり、本推奨仕様の類似する構成に対して指定された意味論と概ね互換性があります。しかし、高度に正確な意味論が要求される文脈(例:計算機代数システム間の通信、定理証明系のような形式系内など)では、実務上の関係コミュニティが OpenMath コンテンツ辞書の定義を検証、拡張、または置換する責任があることに注意してください。
この節では、Content MathML 式の構造をエンコードするための要素を示します。これらの要素は Strict Content MathML エンコーディングでのみ使用される要素です。具体的には、以下を含みます。
Full Content MathML はさらに 4.3 特定構造のための Content MathML に示された要素を許容し、本節で示すより豊富なコンテンツモデルを許可します。Strict と非 Strict の使用の差異は、以下で各 Strict 要素を議論する節で強調されています。
| スキーマ断片(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 の内容はテキストです。さらに、cn は sep 要素を用いて区切られた有理数や複素数をサポートします。sep を用いる構成は、以下に示すように Strict Content MathML では apply を用いる構成へ書き換え可能です。
type 属性は cn 要素で表される数の種類を指定します。デフォルト値は
real です。それぞれの type は内容が特定の形式であることを意味します。以下に詳細を示します。
cn のテキスト内容のデフォルトのレンダリングは Presentation 要素 mn のそれと同じです。ただし、属性や sep
を使用する場合には変種の提示が推奨されます。以下に列挙します。
Strict Content MathML では type 属性は必須であり、取り得る値は integer、real、hexdouble、または double のみです:
整数は、任意の符号の後に 1 つ以上の 10 進の桁の列が続くことで表現されます。
実数は基数表記(radix notation)で表されます。基数表記は、任意の符号(+ または -)に続き、整数部分と小数部分が小数点で区切られた桁列から成ります。例として 0.3、1、-31.56 等があります。
この型は IEEE 754 規格で表せる倍精度浮動小数点数をマークアップするために使用されます[IEEE754]。これには実数の一部、負のゼロ、正負の無限大、ならびに NaN
の集合が含まれます。cn のテキスト内容を IEEE double として解釈する字句規則は XML Schema
Part 2: Datatypes の該当節で定められています。例:-1E4, 1267.43233E12, 12.78e-2, 12, -0, 0, INF
などはこの形式で有効な double です。
この型は IEEE 754 倍精度浮動小数点数の 64 ビットを直接 16 桁の 16 進数として表現します。すなわち、最下位バイト順で仮数、指数、符号を表す 16 桁の
0-9, A-F の列です。以下の例は NaN を表します。注意:例のような特定の IEEE double は double の字句形式では表せない場合があります。
<cn type="hexdouble">7F800000</cn>
サンプル表示
<mn>0x7F800000</mn>
base 属性は内容の解析方法を指定するために用いられます。属性値は 10 進で表された正の整数であり、cn のテキスト内容が解釈される基数を示します。base は integer または real
型の要素でのみ使用すべきであり、それ以外の型での使用は非推奨です。base のデフォルト値は 10 です。
type 属性には、実数の e-表記、 有理数、複素数、または選択された重要な定数をサポートするための追加値があります。これらの各
type もまた内容が特定の形式であることを要求します。type 属性が省略された場合、デフォルトは real です。
整数は基数 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>
base > 36 の場合、一部の整数は文字と数字だけでは表現できなくなります。例えば、
<cn base="1000">10F</cn>
は 10 進で 1,000,015 を表していると解釈できるかもしれませんが、10 進で 1,000,037 を表すものは base=1000
のとき文字と数字だけで表せないことがあります。したがって、base > 36
の場合に使用可能な追加文字のサポート(もしあれば)はアプリケーション固有になります。
実数は 10 以外の基数に関しても表現可能です。base
属性が存在する場合、桁はその基数に相対した桁として解釈されます(integer 型の場合と同様)。
実数はこの型を使って指数表記で表せます。この場合、数は 2 部分(有効数字と指数)からなり、<sep/>
要素で区切られます。最初の部分は実数、第二の部分は基数の冪を示す整数指数です。
例えば <cn type="e-notation">12.3<sep/>5</cn> は を表します。デフォルトの表示は 12.3e5 です。この型は主に MathML 2 との互換性のために有用であり、ほとんどの場合、表現したい数が IEEE
double の範囲にあるなら double を使う方が好ましいです:
有理数は分子と分母の 2 つの整数として与えられます。分子と分母は <sep/> によって区切られます。
<cn type="rational">22<sep/>7</cn>
サンプル表示
<mrow><mn>22</mn><mo>/</mo><mn>7</mn></mrow>
複素数(直交形式)は実部と虚部の 2 つの数で与えられます。実部と虚部は <sep/>
要素で区切られ、各部分は上で述べた実数の形式を満たします。
<cn type="complex-cartesian"> 12.3 <sep/> 5 </cn>
サンプル表示
<mrow>
<mn>12.3</mn><mo>+</mo><mn>5</mn><mo>⁢<!--InvisibleTimes--></mo><mi>i</mi>
</mrow>
複素数(極形式)は大きさと角度の 2 つの数で与えられます。大きさと角度は <sep/>
要素で区切られ、各部分は上で述べた実数形式を満たします。
<cn type="complex-polar"> 2 <sep/> 3.1415 </cn>
サンプル表示
<mrow>
<mn>2</mn>
<mo>⁢<!--InvisibleTimes--></mo>
<msup>
<mi>e</mi>
<mrow><mi>i</mi><mo>⁢<!--InvisibleTimes--></mo><mn>3.1415</mn></mrow>
</msup>
</mrow>
<mrow>
<mi>Polar</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mn>2</mn><mo>,</mo><mn>3.1415</mn><mo>)</mo></mrow>
</mrow>
もし type が constant
であれば、内容はよく知られた定数の 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 を用いることは非推奨です。
| スキーマ断片(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 における x と y は変数であり、変数 x は次のように表されます:
<ci>x</ci>
MathML では、変数は外部定義を持つ記号(記号には固定の外部定義がある)と区別され、記号は csymbol 要素で表されます。
空白の正規化の後、ci
要素の内容はそれを識別する名前として解釈されます。同じスコープ内で名前が同一である場合に限り、二つの変数は等しいと見なされます(スコープについては 4.2.6 束縛と束縛変数 <bind> と <bvar> を参照)。
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>
注意:complex は complex-cartesian の別名と見なすべきであり、同じ OpenMath
シンボルに書き換えられます。リテラルを cn でエンコードする際に直交形式と極形式の区別が影響するだけなので、complex は ci
に対して自然な型名であるかもしれません。
ci 要素は type 属性に任意の文字列値を許容します。特に
MathML のコンテナ要素名やその型名のいずれも指定可能です。
より高度な型の取り扱いには type 属性は不適切です。高度な型はそれ自体でかなりの内部構造を必要とします(例えば vector(complex) のような型)ため、数学的オブジェクトとして構成し、semantics 要素を通して MathML 式に関連付けるのが適切です。詳細は [MathML-Types] を参照してください。
もし ci の内容が Presentation MathML
によるタグ付けを含む場合、そのプレゼンテーションが使用されます。そうしたタグ付けがない場合、テキスト内容は mi
要素の内容であるかのようにレンダリングされます。アプリケーションが双方向テキスト表示をサポートする場合、レンダリングは Unicode の双方向レンダリングに従います。
type 属性はレンダリング情報を提供するために解釈される場合があります。例えば、
<ci type="vector">V</ci>
という例では、レンダラはベクトルを示すために太字の V を表示することができます。
| スキーマ断片(Strict) | スキーマ断片(Full) | |
|---|---|---|
| クラス | Csymbol | Csymbol |
| 属性 | CommonAtt, cd |
CommonAtt, DefEncAtt,
type?, cd?
|
| 内容 | SymbolName |
テキスト | mglyph | PresentationExpression |
| 修飾子 | BvarQ, DomainQ, degree, momentabout,
logbase
|
csymbol は外部定義を持つ特定の数学概念を参照するために使用されます。式 x+y
におけるプラス記号は加算関数という特定の外部定義を持つため記号であり、MathML ではこのような識別子を 記号
と呼びます。基本的な関数や一般的な数学演算子は記号の例です。ここでの「記号」は抽象的な意味で用いられており、画面や紙での特定の表現とは関係がありません。
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/cd が csymbol 要素や annotation、annotation-xml に対する CD base として仮定されます。これは OpenMath 社が管理する標準 CD
コレクションの CD base です。
cdgroup は OpenMath CD Group ファイルへの URL を指定します。CD Group ファイルの形式の詳細は
[OpenMath] 中の節を参照してください。概念的には CD group ファイルは CD
名と対応する CD base の対のリストです。csymbol が cd
属性で CD 名を参照すると、その名前は CD Group ファイルでルックアップされ、対応する CD base がその csymbol に使われます。CD Group ファイルが指定されていて参照された CD
名がグループファイルに存在しない、またはグループファイルの取得にエラーがある場合、参照している csymbol
は定義されません。ただし、その場合のエラー処理は定義されておらずユーザエージェントの責任です。
外部定義は URI として表現されますが、CD ファイルが URI を URL として解釈した位置で取得可能であることが強く推奨されます。特に、シンボルの他のプロパティ(定義、例、その他の形式的プロパティ)が Content Dictionary を精査することで利用可能になる場合があります。なお、OpenMath Content Dictionary のエンコーディングは複数あり、取得時に正しいエンコーディングを判断するのはユーザエージェントの責任です。
上記の形式に加えて、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
に限定されない任意のソースを参照できるため、ユーザエージェントが文脈やコミュニティの慣習に関する追加情報なしに自動的に正しい解釈を決定することは一般に不可能である点です。
cd と definitionURL の両方の機構は同一の
MathML インスタンス内で併用できます。ただし、単一の csymbol に cd と definitionURL の両方が指定された場合、cd が優先されます。
もし csymbol
の内容がプレゼンテーションタグで付けられていれば、そのプレゼンテーションが使用されます。そうしたタグ付けが無い場合、テキスト内容は mi の内容であるかのようにレンダリングされます。特に、アプリケーションが双方向テキスト表示をサポートしている場合、レンダリングは
Unicode の双方向レンダリングに従います。
| スキーマ断片(Strict) | スキーマ断片(Full) | |
|---|---|---|
| クラス | Cs | Cs |
| 属性 | CommonAtt |
CommonAtt, DefEncAtt
|
| 内容 | テキスト | テキスト |
cs 要素は Content MathML 式で使用できる「文字列リテラル」をエンコードします。
cs の内容はテキストです。非 Strict マークアップのときでもプレゼンテーション MathML 構成は許されません。具体的には、cs は mglyph 要素を含めることはできず、内容は空白正規化を受けません。
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>  </ms>
<mo>}</mo>
</mrow>
| スキーマ断片(Strict) | スキーマ断片(Full) | |
|---|---|---|
| クラス | Apply | Apply |
| 属性 | CommonAtt |
CommonAtt, DefEncAtt
|
| 内容 | ContExp+ |
ContExp+
|
(ContExp,
BvarQ,
Qualifier?,
ContExp*)
|
数学における複合オブジェクトを作る最も基本的な方法は、関数や演算子を引数に適用することです。
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 個の引数を必要とします。
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>⁡<!--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>
非 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>⁡<!--ApplyFunction--></mo>
<mrow>
<mo fence="true">(</mo>
<mi>Expression-in-X</mi>
<mo fence="true">)</mo>
</mrow>
</mrow>
多くの複雑な数学式は束縛変数の使用によって構成され、束縛変数は論理や形式言語の重要な概念です。変数は量化子の範囲内で束縛されます。非形式的には、積分、和、積、論理量化子(全称、存在)などの式における「ダミー変数」と考えられます。束縛変数は、その変数名を(式中にまだ出現しない名前に)一貫して置換しても式の意味が変わらないという性質で特徴づけられます。
| スキーマ断片(Strict) | スキーマ断片(Full) | |
|---|---|---|
| クラス | Bind | Bind |
| 属性 | CommonAtt |
CommonAtt, DefEncAtt |
| 内容 |
ContExp,
BvarQ*,
ContExp
|
ContExp,
BvarQ*,
Qualifier*,
ContExp+
|
束縛式は bind 要素を用いて MathML 式木として表されます。最初の子は束縛演算子(例えば積分演算子)を表す MathML
式であり、その後に 1 個以上の bvar 要素(束縛変数を示す)が続き、最後に本体(binding の body)となる一般的な
Content MathML 式が続きます。
| スキーマ断片(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 内の ci に id を付け、他の出現箇所で 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
に基づくアプローチは引き続き利用できます。
次の例は をエンコードしています。
<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 で説明されています。
束縛変数は親の bind 要素の範囲内で一貫して名前を変更できるという性質を持ちます。この操作はしばしば α-変換
と呼ばれ、式の意味を保存します。
束縛変数 は、たとえば に名前を変更できますが、その条件は が束縛本体の自由変数や、束縛変数の注釈、後続の束縛変数のいずれにも現れていないことです。
ある束縛変数が名前変更される場合、その bvar 要素内の注釈中の自由出現、後続の bvar 子、及び bind の本体中の全ての自由出現は変更されるべきです。
前節の例では、x を z に名前変更すると等価な式 , 一方で を に名前変更することはできません。なぜなら は束縛の本体に自由変数として現れており、捕獲され、次の式 を生じ、元の式とは同値ではないからです。
もし
<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>
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 と見なします。
| スキーマ断片(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: </mtext>
<mfrac><mi>x</mi><mn>0</mn></mfrac>
</merror>
文脈があまりに無意味でデフォルトの表示が有用でない場合、アプリケーションはエラー文脈の代替表現を提供することができます。例えば:
<cerror>
<csymbol cd="error">Illegal bound variable</csymbol>
<cs> <bvar><plus/></bvar> </cs>
</cerror>
| スキーマ断片(Strict) | スキーマ断片(Full) | |
|---|---|---|
| クラス | Cbytes | Cbytes |
| 属性 | CommonAtt |
CommonAtt, DefEncAtt
|
| 内容 | base64 |
base64 |
cbytes の内容は、Base64 エンコーディングによる文字列の列としてバイトのストリームを表します。つまり、[XMLSchemaDatatypes] で定義された
base64Binary データ型に一致します。すべての空白は無視されます。
cbytes 要素は主に OpenMath との互換性のために使用されますが、OpenMath
と同様に、システムの内部状態に関するバイナリデータや画像データなど、MathML でエンコードするのが難しいシステムの出力をカプセル化するために使用される場合があります。
cbytes のレンダリングは内容を表現することが期待されておらず、提案されるレンダリングは空の mrow としてのものです。通常 cbytes は annotation-xml の中で使用されるか、あるいはそれ自体が Presentation 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 に要約されています。
多くの数学的構造は部分やパラメータから構成されます。例えば集合は要素の集合を含む数学的対象であるため、集合のマークアップがその構成要素のマークアップを含むのは自然です。集合のマークアップは要素を列挙して明示的に集合を定義するか、修飾子要素を用いる規則で暗黙的に定義することができます。いずれの場合でも、要素のマークアップが集合のマークアップの内部に含まれるこの表現様式は
MathML では コンテナマークアップ と呼ばれます。これに対して Strict マークアップは、集合のインスタンスを引数に対する関数または コンストラクタ記号
の適用結果として表現します。この様式では、集合構築のマークアップは囲む apply 要素内で集合要素のマークアップの兄弟となります。
MathML は次の数学的構成に対してコンテナマークアップを提供します:集合、リスト、区間、ベクトル、行列(2 要素)、区分関数(3 要素)およびラムダ関数。これらに対応する Strict マークアップのコンストラクタ記号が存在しますが、ラムダ関数については例外で、それは Strict マークアップでは束縛記号に対応します。
コンテナマークアップから同等の Strict Content マークアップを得るための書き換え規則は、該当する演算子の 演算子クラス に依存します。特定のコンテナ要素についての詳細は、その要素の構文表および説明(E. The Content MathML Operators)を参照して演算子クラス(および該当する特別事例)を確認し、F. The Strict Content MathML Transformation に記載されたその特定の演算子クラスの書き換え規則を適用してください。
コンストラクタに対応するコンテナ要素への引数は、子要素の列として明示的に与えられるか、修飾子を用いた規則によって暗黙的に与えられます。例外は interval、piecewise、piece、および 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>
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>
MathML では、非 Strict 構成において変数束縛を行うのに bind 要素の代わりに apply 要素を使うことが許されています。この使用法は MathML 2
との後方互換性を保ちます。また、後述の修飾子を持つ束縛変数を含むいくつかの構成のエンコードを簡素化します。
apply 要素を束縛に使うことは二つの状況で許されます。第一は、適用される演算子自体が束縛演算子である場合で、この場合 apply 要素は単に bind 要素の代わりになります。論理量化子の <forall/>、<exists/> やコンテナ要素
lambda が主要な例です。
第二の状況は、適用される演算子が修飾子付きの束縛変数の使用を許す場合に生じます。この最も一般的な例は総和や積分です。これらの多くの場合、変数束縛は記法上暗黙的であり、等価な Strict 表現は形式的な正しさのためにラムダ式の導入などの補助構成を必要とします。
修飾子を持つ束縛変数を含む式は慣用的であり、必ずしも真の変数束縛を伴わないことがあるため、apply
を使って「束縛された」変数を系統的に名前変更(α-変換)しても常に意味が保たれるとは限りません。例として diff 要素があり、そこでは
bvar 項は技術的には真に束縛されていないことがあります。
次の例は束縛演算子とともに apply を使用する場合を示します。この場合、対応する Strict 等価は単に apply を bind に置き換えるだけです:
<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>
多くの一般的な数学構成は、演算子といくつかの追加データを伴います。追加データは、束縛変数のように従来の記法で暗黙的であったり、定積分の限界のように演算子の一部と見なされます。MathML 3 はそのような場合に追加データを表すために 修飾子(qualifier) 要素を使用します。
修飾子要素は常に演算子またはコンテナ要素と結び付けて使用されます。その意味は慣用的で使用される文脈に依存します。演算子とともに使われるとき、修飾子は常に演算子の直後に置かれ、存在する引数より前に出ます。いずれの場合でも、複数の修飾子がある場合は次の順序で現れます:bvar, lowlimit, uplimit, interval, condition, domainofapplication, degree, momentabout, logbase。
修飾子要素の正確な機能は、それらが修飾する演算子やコンテナによって決まります。使用例の大部分は以下で述べる幾つかのカテゴリのいずれかに該当し、特定の演算子と修飾子の使用上の注意は 4.3 特定構造のための Content MathML に示されています。
| Class | qualifier |
|---|---|
| Attributes | CommonAtt |
| Content | ContExp |
(interval の構文については 4.3.10.3 Interval <interval> を参照してください。)
domainofapplication、interval、
uplimit、lowlimit および condition の主な用途は、束縛変数の値を制限することです。最も一般的な修飾子は domainofapplication
で、演算が行われる集合(順序や距離などの追加構造を持つ場合もある)を指定するのに用いられます。interval 修飾子および
lowlimit と uplimit
の組は、集合が区間である特殊な場合に束縛変数を集合に制限します。注意:interval は bvar に直後に続く場合にのみ修飾子として解釈されます。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>
また、lowlimit と uplimit
の組を使うこともできます。これはおそらくこの積分の最も「標準的な」表現です:
<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>
内側と外側の束縛変数の順序が重要であることに注意してください。
| 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/> を参照してください。
修飾子 momentabout と logbase はそれぞれ moment および log
演算子とともに用いるための特殊化された要素です。これらの使用法については該当する演算子の説明を参照してください。
以下の節で詳述される Content MathML 要素は大まかにクラスに分類できます。各要素のクラスは E.3 The Content MathML Operators に示された演算子構文表に記載されています。クラスは要素の一般的な数学的用途を示すとともに、スキーマによって決定される使用法を規定します。要素を紹介する各節には、その要素の演算子構文とスキーマクラスへのリンクが付されています。
演算子クラスは Strict Content MathML への写像に適用される書き換え規則も決定します。これらの書き換え規則は F. The Strict Content MathML Transformation で詳述されています。特定の演算子クラスに適用されるユースケース、個々の要素に対する特別な書き換え規則、およびほとんどの演算子クラスの演算子が使用する一般的な書き換え規則 F.8 Rewrite operators が含まれます。
以下の節では、基本的な数学演算子、関数、定数を表す要素を提示します。ほとんどは空要素で、微積分までの標準的な数学教育課程の主題を網羅しています。残りの要素は集合、区間、ベクトル等のための container 要素です。簡潔のために、本節で定義されるすべての要素をまとめて演算子要素と呼ぶことがあります。
多くの MathML 演算子は任意の数の引数で使用できます。これらのクラスに属する要素の対応する OpenMath 記号も任意個の引数を取ります。
これらの全ての場合において、引数は apply や bind
要素の子として明示的に与えられるか、修飾子要素を用いて暗黙的に指定されることがあります。
plus と times
要素はそれぞれ加法と乗法演算子を表します。引数は通常、囲んでいる apply 要素内で明示的に指定されます。これらは n
進可換演算子であるため、修飾子を用いて引数を指定することもできますが、これは推奨されません。そのような表現には代わりに sum や
product 演算子を使うべきです。
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>
gcd と lcm 要素は、それぞれ引数の最大公約数および最小公倍数を返す n
進演算子を表します。引数は囲んでいる apply 要素で明示的に指定するか、量化子(qualifiers)で指定できます。
これらのデフォルトのレンダリングは英語ロケールに依存します:他のロケールでは異なるデフォルト表示になる場合があります。
Content MathML
<apply><gcd/><ci>a</ci><ci>b</ci><ci>c</ci></apply>
サンプル表示
<mrow>
<mi>gcd</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>a</mi><mo>,</mo><mi>b</mi><mo>,</mo><mi>c</mi><mo>)</mo></mrow>
</mrow>
sum 要素は n
進加法演算子を表します。和の項は通常、修飾子を用いた規則によって指定されます。明示的な引数リストで使用することも可能ですが、これは強く非推奨であり、そのような場合は代わりに plus 演算子を使うべきです。
sum 演算子は明示的な束縛変数の有無のいずれでも使用できます。束縛変数が使われる場合、sum 要素の後に一つ以上の bvar
要素が続き、索引変数のためのドメインを与える修飾子が続きます。囲んでいる apply
の最後の子は束縛変数に関する式であり、和の項はその式を索引変数のドメインの各点に評価することで得られます。ドメインの構造によっては、和のドメインはしばしば uplimit と lowlimit
を用いて上限・下限を示すことで与えられます。
明示的な束縛変数が与えられない場合、囲んでいる apply
の最後の子は関数でなければならず、和の項は修飾子で指定されたドメインの各点でその関数を評価することで得られます。
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>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow>
</mrow>
<mrow>
<munder>
<mo>∑</mo>
<mrow><mi>x</mi><mo>∈</mo><mi>B</mi></mrow>
</munder>
<mrow><mi>f</mi><mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow>
</mrow>
<mrow><munder><mo>∑</mo><mi>B</mi></munder><mi>f</mi></mrow>
product 要素は n
進乗法演算子を表します。積の項は通常、修飾子を用いた規則によって指定されます。明示的な引数リストで使用することも可能ですが、これは強く非推奨であり、そのような場合は代わりに times 演算子を使うべきです。
product 演算子は明示的な束縛変数の有無のいずれでも使用できます。束縛変数が使われる場合、product 要素の後に一つ以上の bvar
要素が続き、索引変数のためのドメインを与える修飾子が続きます。囲んでいる apply
の最後の子は束縛変数に関する式であり、積の項はその式をドメインの各点に評価することで得られます。ドメインの構造によっては、これはしばしば uplimit と lowlimit 修飾子を用いて与えられます。
明示的な束縛変数が与えられない場合、囲んでいる apply
の最後の子は関数でなければならず、積の項は修飾子で指定されたドメインの各点でその関数を評価することで得られます。
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>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow>
</mrow>
<mrow>
<munder>
<mo>∏</mo>
<mrow><mi>x</mi><mo>∈</mo><mi>B</mi></mrow>
</munder>
<mrow><mi>f</mi><mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow>
</mrow>
compose 要素は関数合成演算子を表します。MathML
は合成される関数の定義域や値域について仮定を置きません:合成の結果の定義域は空集合になり得ます。
compose 要素は可換な n
進演算子です。したがって、修飾子要素を使って(場合によっては無限集合で)添字付けされた引数の集合に定義される誘導演算子に持ち上げることができます。詳細は 4.3.5.4 N-ary
Functional Operators:
<compose/> を参照してください。
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>
<mrow>
<mrow>
<mrow><mo>(</mo><mi>f</mi><mo>∘</mo><mi>g</mi><mo>)</mo></mrow>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
</mrow>
<mo>=</mo>
<mrow>
<mi>f</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow>
<mo>(</mo>
<mrow>
<mi>g</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
</mrow>
これらの要素はブーリアン引数を取りブーリアン値を返す n 進関数を表します。引数は囲んでいる apply
要素で明示的に指定するか、修飾子要素で指定できます。
and はすべての引数が真のとき真となり、その他は偽です。
or は引数のいずれかが真のとき真となり、その他は偽です。
xor は排他的論理和であり、真の引数が奇数個あるとき真、それ以外は偽となります。
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>
<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>></mo>
<mn>0</mn>
<mo>)</mo>
</mrow>
</mrow>
selector 要素はベクトル、行列、リストのインデックス選択を行う演算子です。1
個以上の引数を受け取ります。最初の引数は選択対象となるベクトル・行列・リストを指し、2 番目以降の引数(存在する場合)は選択の種類を示します。
selector
が単一引数で使われる場合、それは与えられたリスト・ベクトル・行列中のすべての要素の列を与えるものと解釈されるべきです。行列の場合の要素の順序は列優先、次に行、すなわち行列の要素が列ごとに列挙された順序になります。例えば行列
に対して、順序は
,
, …,
,
, … といった具合です。
引数が二つ与えられ、最初の引数がベクトルまたはリストである場合、二つ目の引数はリストやベクトル中の要素の添字を指定します。最初の引数が行列である場合、二つ目の引数は行の添字を指定します。
引数が三つ与えられた場合、リストやベクトルについては最後の引数は無視され、行列の場合は二番目と三番目の引数が選択される要素の行・列の添字を指定します。
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>
<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>
union 要素は集合の n
進和(和集合)を表すために用いられます。集合を引数として受け、いずれかの集合に現れる全ての要素を含む集合を表します。
intersect 要素は集合の n
進交叉を表すために用いられます。集合を引数として受け、すべての集合に共通する要素を含む集合を表します。
cartesianproduct 要素はデカルト積演算子を表します。
引数は囲んでいる apply 要素で明示的に指定するか、または修飾子要素を用いて指定することができます(詳しくは 4.3.5 N-ary Operators を参照)。
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>
<mrow><mi>A</mi><mo>∩</mo><mi>B</mi><mo>∩</mo><mi>C</mi></mrow>
<mrow><mi>A</mi><mo>×</mo><mi>B</mi></mrow>
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>
<mrow><munder><mo>⋂</mo><mi>L</mi></munder><mi>S</mi></mrow>
ベクトルは n 次元ベクトル空間の要素を表す順序付けられた n 組です。
行列や行列積と相互作用する際には、ベクトルは単一列からなる行列と同等と見なされ、その転置は単一行からなる行列と見なされます。
vector の成分は子要素として明示的に与えられるか、または 4.3.1.1
Container Markup for Constructor
Symbols に記述された規則によって指定できます。
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>
<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>
行列は行の集合から構成されると見なされ、各行は特別な種類のベクトルと考えられます。
matrix と matrixrow 要素の振る舞いは、表示用要素である
mtable や mtr と実質的に異なることに注意してください。
matrix 要素は コンストラクタ 要素であるため、エントリは子要素として明示的に与えるか、あるいは 4.3.1.1
Container Markup for Constructor Symbols に記述された規則に従って関数と二次元の domainofapplication
を与えることで指定できます。後者の場合、行列のエントリはドメインの点に関数を評価して得られる値に対応します。
matrixrow は行列の文脈外では直接レンダリングされません。
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>
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 に記述された規則で指定できます。
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>
<mrow>
<mo>(</mo><mi>a</mi><mo>,</mo><mi>b</mi><mo>,</mo><mi>c</mi><mo>)</mo>
</mrow>
一般に、集合やリストは関数と domain of application
を与えることで構築できます。要素はドメインの点で関数を評価した値に対応します。リストの場合、要素の順序が明確でないことがあるため、順序の種類は属性 order によって指定できます。サポートされる順序は lexicographic と numeric の二つです。
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><</mo><mn>5</mn></mrow>
<mo>}</mo>
</mrow>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>|</mo>
<mrow><mi>x</mi><mo><</mo><mn>5</mn></mrow>
<mo>)</mo>
</mrow>
<mrow>
<mo>{</mo>
<mi>S</mi>
<mo>|</mo>
<mrow><mi>S</mi><mo>∈</mo><mi>T</mi></mrow>
<mo>}</mo>
</mrow>
<mrow>
<mo>{</mo>
<mi>x</mi>
<mo>|</mo>
<mrow>
<mrow>
<mo>(</mo><mi>x</mi><mo><</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>
MathML は推移的関係を複数引数で使うことを許し、a < b < c < d のような関係のチェーンを自然に表現できます。しかし、算術演算子の場合とは異なり、Strict Content MathML で用いられる基礎的な記号は二項と分類されるため、前節のように apply_to_list を使うことはできません。その代わりに類似の関数 predicate_on_list が使われ、そのセマンティクスは基本的に述語を二つずつ適用して全ての対の共軛(conjunction)を取ることに相当します。
要素
eq,
gt,
lt,
geq,
leq
はそれぞれ
等しい
、
より大きい
、
より小さい
、
以上
および
以下
の関係を表し、第一引数と第二引数の関係に応じて真または偽を返します。
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>
<mrow><mi>x</mi><mo>></mo><mi>y</mi></mrow>
<mrow><mi>y</mi><mo><</mo><mi>x</mi></mrow>
<mrow><mn>4</mn><mo>≥</mo><mn>3</mn><mo>≥</mo><mn>3</mn></mrow>
<mrow><mn>3</mn><mo>≤</mo><mn>3</mn><mo>≤</mo><mn>4</mn></mrow>
MathML は推移的関係を複数引数で使用することを許し、a ⊂ b ⊂ c のようなチェーンを自然に表現できます。しかし算術演算子の場合と同様に、Strict Content MathML で用いられる基礎記号は二項と分類されるため、前節で用いた apply_to_list は使えず、代わりに predicate_on_list のような関数が使用されます。これにより述語を二項ずつ適用して結び付ける(共軛を取る)セマンティクスが実現されます。
subset と prsubset
要素はそれぞれ部分集合と真部分集合の関係を表します。第一引数が第二引数の部分集合(あるいは真部分集合)であることを示します。上記のように n
進演算子として用いると、各引数が直前の引数の部分集合(真部分集合)であることを表すチェーンを記述できます。
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>
<mrow><mi>A</mi><mo>⊂</mo><mi>B</mi><mo>⊂</mo><mi>C</mi></mrow>
MathML の要素 max、min や統計要素の一部(例:mean)は上で述べたクラスのように n
進関数として使えますが、単一引数が与えられた場合に特別な解釈が与えられます。単一引数が与えられると、その引数が表す要素に対して関数が適用されます。
これらの要素が Strict Content MathML で用いる基礎記号は Unary であり、したがって MathML が 0 個または 1 個を超える引数で使用される場合には、関数は明示的に与えられた引数から構築された集合に対して適用されます(以下の規則に従います)。
min 要素は最小値関数を表し、適用される引数のうち最小のものを返します。引数は囲んでいる apply 要素で明示的に指定するか、修飾子要素を用いて指定できます(詳しくは 4.3.5.12
N-ary/Unary Arithmetic Operators:
<min/>,
<max/>)。無限集合に適用した場合、最小元が存在しないことがあります。
max 要素は最大値関数を表し、適用される引数のうち最大のものを返します。引数は囲んでいる apply 要素で明示的に指定するか、修飾子要素を用いて指定できます。無限集合に適用した場合、最大元が存在しないことがあります。
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>
<mrow>
<mi>max</mi>
<mrow>
<mo>{</mo><mn>2</mn><mo>,</mo><mn>3</mn><mo>,</mo><mn>5</mn><mo>}</mo>
</mrow>
</mrow>
<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>
<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>
一部の統計的 MathML 要素、例えば mean は上記のクラス同様に n
進関数として使用できますが、単一引数が与えられた場合には特別な解釈が与えられます。単一引数が与えられた場合、その引数が表す要素集合に関数が適用されます。
これらの要素が Strict Content MathML で用いる基礎記号は Unary であり、したがって MathML が 0 個または 1 個を超える引数で使用される場合、関数は明示的に与えられた引数から構築された集合に対して適用されます(以下の規則に従います)。
mean 要素はデータ集合や確率変数の算術平均(平均値)を返す関数を表します。
median 要素は引数の中央値を返す演算子を表します。中央値はサンプル値の下位半分と上位半分を分ける値です。
mode 要素は引数の最頻値(もっとも頻繁に現れる値)を表します。
sdev 要素はデータ集合や確率変数の標準偏差を表します。標準偏差は分散の平方根として与えられる散布度の統計量です。
variance
要素はデータ集合や確率変数の分散を表します。分散は散布度を表す統計量で、可能な値の平均からの偏差の二乗を平均したものです。
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>
<mrow>
<mo>⟨</mo><mi>X</mi><mo>⟩</mo>
</mrow>
<mtext> or </mtext>
<mover><mi>X</mi><mo>¯</mo></mover>
<mrow>
<mo>σ</mo>
<mo>⁡<!--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>
<mrow>
<mo>σ</mo>
<mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>X</mi><mo>)</mo></mrow>
</mrow>
<mrow>
<msup>
<mo>σ</mo>
<mn>2</mn>
</msup>
<mo>⁡<!--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>
<mrow>
<msup><mo>σ</mo><mn>2</mn></msup>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>X</mi><mo>)</mo></mrow>
</mrow>
二項演算子は2つの引数を取り、特別な書き換え規則を必要とせずにRewrite:
elementを介して単にOpenMath記号に対応します。二項コンストラクタであるintervalは類似していますが、引数が要素の子として与えられるコンストラクタ構文を使用し、使用される記号は4.3.10.3 Interval
<interval>に記載されているようにtype要素に依存します。
quotient要素は整数除算演算子を表します。演算子が整数引数aとbに適用されると、結果は「aをbで割った商」です。つまり、整数aとbの商とは、|r|が|b|より小さく、かつa = b * q + rを満たすような整数qであり、慣例的にはqを商、rを剰余と呼びます。
divide要素は数域における除算演算子を表します。
minus要素は単項算術演算子(例:−xを表すため)として、また二項算術演算子(例:x − yを表すため)として使用できます。追加の例は4.3.7.2 単項算術演算子:
<factorial/>,
<abs/>,
<conjugate/>,
<arg/>,
<real/>,
<imaginary/>,
<floor/>,
<ceiling/>,
<exp/>,
<minus/>,
<root/>に示されています。
power要素は冪乗演算子を表します。第一引数が第二引数の冪に上げられます。
rem要素は剰余演算子を表し、第一引数を第二引数で割ったときの剰余を返します。すなわち、整数引数aとbに適用された場合、|r|が|b|より小さく、かつa = b * q
+ rを満たす唯一の整数rを返します。
root要素は根号(ルート)を抽出するために使われます。取るべき根の種類はdegree
要素で指定され、これはroot要素を囲むapply要素の第二子として与えられるべきです。したがって、degreeに値2が含まれる場合は平方根、3なら立方根、というようになります。degreeが存在しない場合はデフォルトで2が使用されます。
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>
<mrow><mi>a</mi><mo>/</mo><mi>b</mi></mrow>
<mrow><mi>x</mi><mo>−</mo><mi>y</mi></mrow>
<msup><mi>x</mi><mn>3</mn></msup>
<mrow><mi>a</mi><mo>mod</mo><mi>b</mi></mrow>
<mroot><mi>a</mi><mi>n</mi></mroot>
implies要素は2つのブール式を引数とする論理含意関数を表します。第一引数が真で第二引数が偽の場合に偽となり、それ以外の場合は真になります。
equivalent要素は2つのブール式が論理的に等価である、すなわち任意の入力に対して同じブール値を持つことを主張する関係を表します。
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>
<mrow>
<mi>a</mi>
<mo>≡</mo>
<mrow><mo>¬</mo><mrow><mo>¬</mo><mi>a</mi></mrow></mrow>
</mrow>
neq要素は二項不等関係、すなわち「等しくない」関係を表し、2つの引数が等しくない限り真を返します。
approx要素はその引数が近似的に等しいことを主張する関係を表します。
factorof要素は第一引数が第二引数の約数であることを示すために使用されます。この関係は、かつのみb mod
a = 0 のとき真です。
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>
<mrow>
<mi>π</mi>
<mo>≃</mo>
<mrow><mn>22</mn><mo>/</mo><mn>7</mn></mrow>
</mrow>
<mrow><mi>a</mi><mo>|</mo><mi>b</mi></mrow>
tendsto要素はある量が特定の値に近づくという関係を表すために使用されます。これは主に数学的極限の記述の一部として使われますが、「xがyに近づくとき」のような文を表現したり、より一般的な種類の極限を構成するための構成要素を提供するために単独で存在します。
tendsto要素は接近する方向を設定するための属性typeを取ります。任意の値を取り得ますが、一般的な値には above および below が含まれます。
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>
<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>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow>
</mtd></mtr>
<mtr><mtd>
<mi>g</mi><mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow>
</mtd></mtr>
</mtable><mo>)</mo></mrow>
vectorproduct要素はベクトル積を表します。3次元ベクトルの引数を2つ取り、値として3次元ベクトルを表します。
scalarproduct要素はスカラー積(内積)を表します。2つのベクトル引数を取り、スカラー値を返します。
outerproduct要素は外積を表します。2つのベクトル引数を取り、値として行列を返します。
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>⁢<!--InvisibleTimes--></mo>
<mi>b</mi>
<mo>⁢<!--InvisibleTimes--></mo>
<mrow><mi>sin</mi><mo>⁡<!--ApplyFunction--></mo><mi>θ</mi></mrow>
<mo>⁢<!--InvisibleTimes--></mo>
<mi>N</mi>
</mrow>
</mrow>
<mrow>
<mrow><mi>A</mi><mo>.</mo><mi>B</mi></mrow>
<mo>=</mo>
<mrow>
<mi>a</mi>
<mo>⁢<!--InvisibleTimes--></mo>
<mi>b</mi>
<mo>⁢<!--InvisibleTimes--></mo>
<mrow><mi>cos</mi><mo>⁡<!--ApplyFunction--></mo><mi>θ</mi></mrow>
</mrow>
</mrow>
<mrow><mi>A</mi><mo>⊗</mo><mi>B</mi></mrow>
in要素は集合包含関係を表します。引数は要素と集合の2つで、要素が与えられた集合に属することを示すために使われます。
notin要素は集合包含の否定関係を表します。引数は要素と集合の2つで、要素が与えられた集合に属さないことを示すために使われます。
notsubset要素は部分集合でないことを表す関係です。第一引数が第二引数の部分集合ではないことを示すために使われます。
notprsubset要素は真部分集合でないことを表す関係です。第一引数が第二引数の真部分集合ではないことを示すために使われます。
setdiff要素は集合差演算子を表します。2つの集合を引数に取り、第一集合に含まれるが第二集合には含まれないすべての要素を含む集合を表します。
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>
<mrow><mi>a</mi><mo>∉</mo><mi>A</mi></mrow>
<mrow><mi>A</mi><mo>⊈</mo><mi>B</mi></mrow>
<mrow><mi>A</mi><mo>⊄</mo><mi>B</mi></mrow>
<mrow><mi>A</mi><mo>∖</mo><mi>B</mi></mrow>
単項演算子は一つの引数を取り、特別な書き換え規則を必要とせずに Rewrite: 要素を通して OpenMath シンボルに対応します。
要素 not は論理否定関数を表し、1つのブーリアン引数を取り、その真偽値を反転して返します。
Content MathML
<apply><not/><ci>a</ci></apply>
表示例
<mrow><mo>¬</mo><mi>a</mi></mrow>
<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 を表す)使うことも、
二項算術演算子として(例えば x − y を表す)使うこともできます。さらなる例は 4.3.6.1 二項算術演算子:
<quotient/>,
<divide/>,
<minus/>,
<power/>,
<rem/>,
<root/> を参照してください。
MathML における要素 root は degree 修飾子を任意に持つ単項要素として扱われますが、
実際には n 乗根を取る二項演算を表し、4.3.6.1
二項算術演算子:
<quotient/>,
<divide/>,
<minus/>,
<power/>,
<rem/>,
<root/> に記述されています。
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>
<mrow intent="absolute-value($x)"><mo>|</mo><mi arg="x">x</mi><mo>|</mo></mrow>
<mover intent="complex-conjugate($z)">
<mrow arg="z">
<mi>x</mi>
<mo>+</mo>
<mrow><mn>ⅈ</mn><mo>⁢<!--InvisibleTimes--></mo><mi>y</mi></mrow>
</mrow>
<mo>¯</mo>
</mover>
<mrow>
<mi>arg</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow>
<mo>(</mo>
<mrow>
<mi>x</mi>
<mo>+</mo>
<mrow><mi>i</mi><mo>⁢<!--InvisibleTimes--></mo><mi>y</mi></mrow>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
<mrow>
<mo intent="real-part">ℛ</mo>
<mo>⁡<!--ApplyFunction--></mo>
<mrow>
<mo>(</mo>
<mrow>
<mi>x</mi>
<mo>+</mo>
<mrow><mi>i</mi><mo>⁢<!--InvisibleTimes--></mo><mi>y</mi></mrow>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
<mrow>
<mo intent="imaginary-part">ℑ</mo>
<mo>⁡<!--ApplyFunction--></mo>
<mrow>
<mo>(</mo>
<mrow>
<mi>x</mi>
<mo>+</mo>
<mrow><mi>i</mi><mo>⁢<!--InvisibleTimes--></mo><mi>y</mi></mrow>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
<mrow intent="floor($x)"><mo>⌊</mo><mi arg="x">a</mi><mo>⌋</mo></mrow>
<mrow intent="ceiling($x)"><mo>⌈</mo><mi arg="x">a</mi><mo>⌉</mo></mrow>
<msup><mi>e</mi><mi>x</mi></msup>
<mrow><mo>−</mo><mn>3</mn></mrow>
要素 determinant は、その引数(正方行列であるべき)の行列式を返す単項関数を表します。
要素 transpose は与えられた行列またはベクトルの転置を表す単項関数を表します。
Content MathML
<apply><determinant/>
<ci type="matrix">A</ci>
</apply>
<apply><transpose/>
<ci type="matrix">A</ci>
</apply>
表示例
<mrow><mi>det</mi><mo>⁡<!--ApplyFunction--></mo><mi>A</mi></mrow>
<msup><mi>A</mi><mi>T</mi></msup>
要素 inverse は、関数に適用され、その関数の一般的な逆関数を表す式を構成します。
要素 ident は恒等関数を表します。MathML
は表現される恒等関数の定義域や余域について仮定をしません。これらは使用される文脈に依存します。
要素 domain は適用される関数の定義域を表します。定義域は関数が定義される値の集合です。
要素 codomain
は適用される関数の余域(レンジ)を表します。余域は必ずしも像(image)と等しいとは限らず、像を含む集合であることが要求されます。
要素 image
は適用される関数の像(値域)を表します。関数の像は関数によって取られる値の集合であり、像の各点は定義域のある点に関数を適用することで生成されます。
要素 ln は自然対数関数を表します。
これらの要素は引数に適用されることも、単独で現れて他の関数に作用する抽象演算子を表すこともあります。
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>
<mrow>
<msup><mi>A</mi><mrow><mo>(</mo><mn>-1</mn><mo>)</mo></mrow></msup>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>a</mi><mo>)</mo></mrow>
</mrow>
<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>
<mrow>
<mrow>
<mi>domain</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>f</mi><mo>)</mo></mrow>
</mrow>
<mo>=</mo>
<mi mathvariant="double-struck">R</mi>
</mrow>
<mrow>
<mrow>
<mi>codomain</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>f</mi><mo>)</mo></mrow>
</mrow>
<mo>=</mo>
<mi mathvariant="double-struck">Q</mi>
</mrow>
<mrow>
<mrow>
<mi>image</mi>
<mo>⁡<!--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>
<mrow><mi>ln</mi><mo>⁡<!--ApplyFunction--></mo><mi>a</mi></mrow>
要素 card は濃度関数(集合の要素数)を表します。集合を引数として取り、その濃度を返します。
集合の濃度は非負整数、あるいは無限基数であり得ます。
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>
<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 を参照してください。
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>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
<mrow>
<mi>sin</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow>
<mo>(</mo>
<mrow><mi>cos</mi><mo>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
<mo>+</mo>
<msup><mi>x</mi><mn>3</mn></msup>
<mo>)</mo>
</mrow>
</mrow>
<mrow>
<mi>arcsin</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mi>x</mi>
</mrow>
<mtext> または </mtext>
<mrow>
<msup><mi>sin</mi><mrow><mo>-</mo><mn>1</mn></mrow></msup>
<mo>⁡<!--ApplyFunction--></mo>
<mi>x</mi>
</mrow>
<mrow><mi>sinh</mi><mo>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
<mrow>
<mi>arcsinh</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mi>x</mi>
</mrow>
<mtext> または </mtext>
<mrow>
<msup><mi>sinh</mi><mrow><mo>-</mo><mn>1</mn></mrow></msup>
<mo>⁡<!--ApplyFunction--></mo>
<mi>x</mi>
</mrow>
要素 divergence
は発散(div)演算子を表します。引数として、スカラー値関数のベクトル(ベクトル値関数を表す意図のもの)を取り、その発散を与えるスカラー値関数を返します。
要素 grad は勾配(grad)演算子を表します。引数としてスカラー値関数を取り、関数の勾配を表す関数のベクトルを返します。
要素 curl
は旋度(curl)を表します。引数としてスカラー値関数のベクトル(ベクトル値関数を表す意図のもの)を取り、関数のベクトルを返します。
要素 laplacian
はラプラシアン演算子を表します。ラプラシアンはベクトル値関数を表すスカラー値関数のベクトルを引数に取り、関数のベクトルを返します。
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>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>a</mi><mo>)</mo></mrow>
</mrow>
<mrow>
<mi>div</mi><mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>E</mi><mo>)</mo></mrow>
</mrow>
<mtext> or </mtext>
<mrow><mo>∇</mo><mo>⋅</mo><mi>E</mi></mrow>
<mrow>
<mi>grad</mi><mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>f</mi><mo>)</mo></mrow>
</mrow>
<mtext> or </mtext>
<mrow>
<mo>∇</mo><mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>f</mi><mo>)</mo></mrow>
</mrow>
<mrow>
<mi>curl</mi><mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>a</mi><mo>)</mo></mrow>
</mrow>
<mtext> または </mtext>
<mrow><mo>∇</mo><mo>×</mo><mi>a</mi></mrow>
<mrow>
<msup><mo>∇</mo><mn>2</mn></msup>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>E</mi><mo>)</mo></mrow>
</mrow>
座標を定義する関数は座標名で表された式として暗黙的に定義される場合があり、その場合は座標名を束縛変数として提供する必要があります。
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>⁡<!--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>
<mrow>
<mi>grad</mi>
<mo>⁡<!--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>⁢<!--InvisibleTimes--></mo>
<mi>y</mi>
<mo>⁢<!--InvisibleTimes--></mo>
<mi>z</mi>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
<mrow>
<msup><mo>∇</mo><mn>2</mn></msup>
<mo>⁡<!--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>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
要素 moment はデータ集合または確率変数の第i次モーメントを表します。
moment 関数は degree および
momentabout の修飾子を受け取ります。もし degree
があれば、それはモーメントの次数を示します。無ければ第一次モーメントとみなされます。moment と共に使われる場合、degree スキーマは単一の子を含むことが期待されます。もし momentabout があれば、それはモーメントが取られる点を示します。無ければ原点についてのモーメントとみなされます。
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>
<msub>
<mrow>
<mo>⟨</mo>
<msup><mi>X</mi><mn>3</mn></msup>
<mo>⟩</mo>
</mrow>
<mi>p</mi>
</msub>
要素 log は与えられた底に対する対数関数を表します。もし logbase
修飾子が存在すれば底を指定します。無ければ底は 10 と見なされます。
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>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
<mrow><mi>log</mi><mo>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
The int 要素は、関数に対する定積分または不定積分、または束縛変数を持つ式に対する定積分の演算子要素です。
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>
<mrow>
<msubsup><mi>∫</mi><mi>a</mi><mi>b</mi></msubsup><mi>cos</mi>
</mrow>
The int 要素は、積分変数として機能する束縛変数とともに使用することもできます。
定積分は、積分領域を指定する修飾要素を与えることで示されます。lowlimit/uplimit の組は、おそらく定積分の最も「標準的な」表現です。
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>
The diff
要素は、一変数の関数または式に対する微分演算子要素です。これは実際の関数に直接適用して元の関数の導関数である関数を示すことも、単一変数を含む式に適用することもできます。
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>
<mrow>
<mfrac>
<mrow>
<mi>d</mi><mrow><mi>sin</mi><mo>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
</mrow>
<mrow>
<mi>d</mi><mi>x</mi>
</mrow>
</mfrac>
<mo>=</mo>
<mrow><mi>cos</mi><mo>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
</mrow>
bvar 要素は、取るべき導数の階数を指定する degree
要素を含むこともできます。
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>
The partialdiff 要素は、多変数の関数または式に対する偏微分演算子要素です。
関数の偏微分の場合、包含する partialdiff
は2つの引数を取ります。まず第一に、位置によってどの関数引数が偏導関数の構成に関与するかを示すインデックスのリスト、次に偏微分される実際の関数です。インデックスは繰り返されることがあります。
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>
<mfrac>
<mrow>
<msup><mo>∂</mo><mn>3</mn></msup>
<mrow>
<mi>f</mi>
<mo>⁡<!--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>
代数式の場合、束縛変数は包含する apply 要素の子である bvar
要素によって与えられます。bvar 要素は、その変数に対して取る偏導数の階数を指定する degree 要素を含むこともできます。
全体の微分階数を指定する必要がある場合、それは包含する apply 要素の子として、すなわち関連付けられた bvar を持たないトップレベルの degree 要素の使用によって示されます。
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>⁡<!--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>
<mfrac>
<mrow>
<msup><mo>∂</mo><mi>k</mi></msup>
<mrow>
<mi>f</mi>
<mo>⁡<!--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>
定数記号は e や true のような数学的定数や、実数や整数のような集合の名前に対応します。 Strict Content MathML では、これらは対応する記号に単純に書き換えられます(算術定数 および 集合論定数 の構文表を参照してください)。
<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);
無限大(∞)。
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>⁡<!--ApplyFunction--></mo><mi>e</mi></mrow>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow><msup><mi>i</mi><mn>2</mn></msup><mo>=</mo><mn>-1</mn></mrow>
<mrow>
<mrow><mn>0</mn><mo>/</mo><mn>0</mn></mrow>
<mo>=</mo>
<mi>NaN</mi>
</mrow>
<mrow>
<mrow><mi>true</mi><mo>∨</mo><mi>P</mi></mrow>
<mo>=</mo>
<mi>true</mi>
</mrow>
<mrow>
<mrow><mi>false</mi><mo>∧</mo><mi>P</mi></mrow>
<mo>=</mo>
<mi>false</mi>
</mrow>
<mrow>
<mi>π</mi>
<mo>≃</mo>
<mrow><mn>22</mn><mo>/</mo><mn>7</mn></mrow>
</mrow>
<mrow>
<mi>γ</mi><mo>≃</mo><mn>0.5772156649</mn>
</mrow>
<mi>∞</mi>
<integers/>,
<reals/>,
<rationals/>,
<naturalnumbers/>,
<complexes/>,
<primes/>,
<emptyset/>
これらの要素は標準的な数の集合、整数、実数、有理数、自然数(0 を含む)、複素数、素数、および空集合を表します。
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>
<mrow>
<mn>44.997</mn><mo>∈</mo><mi mathvariant="double-struck">R</mi>
</mrow>
<mrow>
<mrow><mn>22</mn><mo>/</mo><mn>7</mn></mrow>
<mo>∈</mo>
<mi mathvariant="double-struck">Q</mi>
</mrow>
<mrow>
<mn>1729</mn><mo>∈</mo><mi mathvariant="double-struck">N</mi>
</mrow>
<mrow>
<mrow>
<mn>17</mn><mo>+</mo><mn>29</mn><mo>⁢<!--InvisibleTimes--></mo><mi>i</mi>
</mrow>
<mo>∈</mo>
<mi mathvariant="double-struck">C</mi>
</mrow>
<mrow>
<mn>17</mn><mo>∈</mo><mi mathvariant="double-struck">P</mi>
</mrow>
<mrow>
<mi mathvariant="double-struck">Z</mi><mo>≠</mo><mi>∅</mi>
</mrow>
The forall and <exists/>
要素は、全称(for all
)および存在(there
exists
)量化子を表します。これらは1つ以上の束縛変数と、量化される主張を指定する引数を取ります。さらに、condition やその他の修飾子を用いて束縛変数の定義域を制限することができます。
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>
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>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
</mrow>
<mo>=</mo>
<mn>0</mn>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
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>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
</mrow>
<mo>=</mo>
<mn>0</mn>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
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 は無視されます。
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>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
<mtext> or </mtext>
<mrow>
<mi>x</mi>
<mo>↦</mo>
<mrow>
<mi>sin</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow>
</mrow>
</mrow>
The interval 要素は、実数直線上の単純な数学的区間を表現するためのコンテナ要素です。オプション属性 closure を取り、その値は open、closed、open-closed、または
closed-open のいずれかを取ることができ、デフォルトは closed です。
(4.3.3.1
<domainofapplication>、<interval>、<condition>、<lowlimit>、および
<uplimit> の使用法で説明されているように)、interval は bvar の直後に続く場合、修飾子として解釈されます。
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>
<mrow><mo>[</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>]</mo></mrow>
<mrow><mo>(</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>]</mo></mrow>
<mrow><mo>[</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>)</mo></mrow>
The limit 要素は、数列の極限を取る操作を表します。極限点は lowlimit と bvar を指定するか、または一つ以上の束縛変数に対する
condition を指定することで表現されます。
極限値に近づく方向は、Strict Content MathML の引数 limit によって与えられます。これにより、この目的のために方向指定子シンボル both_sides、above、および below が提供されます。これらは tendsto 要素の type 属性の値 all、above、および below に対応します。null シンボルは、type 属性が存在しない場合に対応します。
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>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
</mrow>
<mrow>
<munder>
<mi>lim</mi>
<mrow><mi>x</mi><mo>→</mo><mn>0</mn></mrow>
</munder>
<mrow><mi>sin</mi><mo>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
</mrow>
<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>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
</mrow>
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
の第二子要素で定義される関数域の部分集合が互いに互換であること、あるいは重複する場合には対応する第一子要素の値が一致することを著者が保証する責任があります。そうでない場合、式の意味は未定義になります。
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>  if  </mtext></mtd>
<mtd><mrow><mi>x</mi><mo><</mo><mn>0</mn></mrow></mtd>
</mtr>
<mtr>
<mtd><mn>0</mn></mtd>
<mtd columnalign="left"><mtext>  if  </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>  if  </mtext></mtd>
<mtd><mrow><mi>x</mi><mo>></mo><mn>0</mn></mrow></mtd>
</mtr>
</mtable>
</mrow>
MathMLは支援技術(AT)によって広く採用されています。
しかし、数学記法は曖昧さが生じる場合があり、このため一部のケースでATが発音する内容を推測することがあります。
MathML 4では、著者が意図を表現できる軽量な方法としてintent属性が追加されています。
この属性はaria-label属性に似ていますが、
重要な違いがいくつかあります。
アクセシビリティに関して、主な違いはintent
が点字生成に影響しないことです。
多くの言語には数式用の独自の点字コードがあるため、音声用の単語が点字生成の内容に影響を与えるべきではありません。
英語など一部の言語では複数の数式用点字コードがあり、どれが読者に望まれるか著者が知ることはできません。
このため、著者が(数式用)点字を知っていたとしてもaria-braillelabelでaria-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>
intent値のpower($base,$exp)によって、
著者はこの式が上付き文字の他の多くの意味ではなく、
累乗(べき乗)を表している意図であることを明確にしています。
ATがpowerという概念をサポートしている場合、
文脈や引数、その他の詳細に応じて異なる発話を選択することができます。
例えば上記の式は「xのn乗」と読み上げられるかもしれませんが、
"n"の代わりに"2"が与えられた場合には「xの二乗」となる場合があります。
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の範囲の文字です。
各部分は以下の通りです:
NCNameの生成規則に一致している必要があります。
concept-or-literalはconceptまたはliteralとして解釈されます。
conceptは数学的または アプリケーション固有の関数や概念に対応します。 多くの概念については、発話に用いる単語と、 概念参照時に使う名前は非常に似ています。
literalは
(U+00F5)で始まる名前です。
これらはIntent Concept
Dictionaryに含まれることはありません。
literalの読み上げは名前に含まれる
_-, _, .を空白に置換し、
結果の語句を読み上げて生成します。
2.5など)はそれ自身を表します。
$name)は、arg="name"属性を持つ
子孫要素を参照します。id属性とは異なりargは
ドキュメント内で一意である必要はありません。一致する要素を探索する際は、
子孫のみを対象とし、探索を早期終了する基準として
intentまたはarg属性がセットされている要素で
それ以上深く探索しないようにします。
等価なliteralを挿入する代わりにreferenceを適切に利用することで、
数学構造を辿りながらintentを活用できるようになります。
:infix)や、
:unit、:chemistryのように間接的に音声スタイルに影響するものなどがあります。
システムがサポートすべきプロパティのリストはオープンですが、 以下に示すコアプロパティは含めるべきです。
intentをサポートする全てのATシステムは、
少なくとも暗黙的に認識できる概念のリストを保持しています。
概念名のマッチングや使用に関する詳細は5.4
インテント概念とプロパティの使用方法に記載されています。
このようなATは下記で解説するコアリスト内の概念を認識すべきです。
また、下記で述べるオープンリストにある概念や、
独自の概念も認識してもよいです。
インテント概念辞書
は、概念名をその概念に対応する音声・テキスト・点字へ対応付けする抽象的なマッピングです。
これは、MathMLレンダラーが既定値セットとして認識すべき情報を提供するB.
演算子辞書にやや類似しています。
propertyは演算子辞書におけるformの利用とも類似性があり、
マッチングには結合性プロパティ(prefix、infixなど)が使われます。
インテント概念名は2つのリストにまとめられ、 w3c/mathml-docs GitHubリポジトリで管理されています。 これらの概念辞書はyamlデータを基にHTMLテーブルで公開されていますが、 概念から音声ヒントへのマッピングの実装方法は制限されません。 固定リストやハッシュテーブルのみならず、XPathマッチング、正規表現、AIなど 任意の適切な手法が使えます。 唯一要求されるのは、コア概念辞書に掲載されたケースを受け入れ、 適切な音声ヒントを生成できることです。
divide、
power、
greater-thanなどの一般的な概念が含まれます。Math Working Groupが多様なAT実装の経験をもとにまとめ、 [Concept-Lists]で定められた指針に従っています。
NCNameも使用できます。
将来の"core"概念リストでは、利用状況に応じて"open"リストから名前が取り込まれる可能性があります。
MathMLで使われる可能性があるUnicode文字は数千種類存在します。 実装者の参考用に、同じリポジトリに 音声テンプレートの非規範リストがあり、 多くの文字の推奨発話例を掲載しています。
インテントプロパティは、
intent属性で通常生成される音声や点字の発話内容を修飾する役目を持ちます。
多くのプロパティは、applicationの先頭や<mtable>など
特定のコンテキストのみに効果が定義されています。
他の文脈でもプロパティを使うことはエラーではありませんが、
既定では無視されるか、システム次第の振る舞いとなります。
概念リストと同様、Working Groupはプロパティリスト(実装推奨プロパティ値一覧)を管理しています。
ここでは、音声生成に影響する主要なプロパティ分類について説明します。
:prefix,
:infix, :postfix,
:function, :silent
これらのプロパティを関数applicationで使うことで、
名前の読上げを省略したり、語順を入れ替えたりできます。
:prefix、:infix、:postfixは
名前や引数の発話時の語順に関係し、
必ずしも数式表記の表示順とは一致しません。
unionはコアリストに登録されており、発話パターン「$1 union $2」や「union of $1 and $2」があります。
union :prefix ($a,$b)であれば、後者のスタイルを優先してほしい意図になります。
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
f:function($x, $y)はf of x comma yなどにもなり得ます。 どのプロパティも使われない場合、既定値は
functionとなります(但しliteralが
silent(例えば_)の場合は既定値は:silent)。
5.7
literalと
propertyに関する注意の例もご参照ください。
:literal, :common, :legacyこれらのプロパティは生成される音声全体のスタイルを制御します。 詳細は別ドキュメントで解説されています。
:literalはATに対し意味解釈を行わず、
リーフ内容も含めて全てをリテラル解釈で読み上げるよう要求します(例:|
ならvertical bar
)。
:commonは指定された一連のヒューリスティックを使って一般的記法の意図を解釈させます。
:legacyはシステム独自挙動を要求します。
:matrix,
:system-of-equations, :lines, :continued-row,
:equation-label
これらのプロパティはmtableや、
referenceを介したmtable、
mtr、mtdなどに利用できます。
アラインメント各部の読み上げ方に影響します。
発話の具体的な文言はシステム依存です。
:matrixでは、行番号などを発話するなど行列向けのスタイルになります。:system-of-equationsは、表示数式(および不等式)向けスタイルになり、通常は行番号を発話しません。
各表の行は通常「方程式」として読み上げられますが、
continued-rowプロパティがmtrに指定された場合は
前の行から折り返された方程式の続きとみなします。
:equation-labelはmtdに指定した場合、
そのセルが方程式ラベルであることを示します。:pause-short, :pause-medium,
:pause-long, :pause-xlong
:use-argnamearg属性を持つ要素にセルフプロパティとして使うことで、
ATがその子へ移動した際にarg属性値(翻訳されることもある)を発話するよう指定します。
特定のノードに対応するintent属性に
概念コンポーネントが含まれる場合、ATのインテント概念辞書を参照する必要があります。
概念名は正規化され(
(U+00F5)と_
(U+002E)を.
(U+002D)に変換)、
ASCII
大文字・小文字区別しない一致で比較します。-intent
で引数が明示されていれば、その数が既定個数となり、
結合性は明示されたプロパティ、
または概念辞書からデフォルト取得されます。それ以外の場合、既定個数は0とされます。
概念は、正規化名・結合性プロパティ・個数
がATの概念辞書のエントリと一致するときサポート概念(AT)と見なされます。
追加概念や多様な個数・結合性・別名に対応する実装も、適切にマッピングされていれば除外されません。
一致するエントリの音声ヒントは、
適切な音声・代替テキスト・点字レンダリング作成の指針として利用できます。
また、引数の順序も明確化できます。
ただし、一般記法は発音方法が多岐に渡るため、ATがヒント内容に従う義務はありません。例えばATは、<mfrac>
でマークアップされた分数をthree quarters
やthree 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は常に対象コミュニティに最適な発話を生成すべきです。
インテント式が生成する音声や点字への影響はシステム毎に異なります。 ただし、システムは本節で記載した解釈と一致する挙動を取るべきです。
self-property-listやtermに複数のプロパティが現れる場合は、
左から右に評価されます。原則すべてのプロパティが効果を持ちますが、
多くのケースでは複数プロパティが同じ内部パラメータをセットするため
相互に排他となり、最後に指定したものが有効となります。
例:f:prefix:suffixは
f:suffixとして振る舞い、両プロパティが結合性パラメータをセットします。同様に
:literal:commonは:commonとして処理され、両方ともデフォルト解釈パラメータをセットします。
一方f:pause-medium:prefixはf:prefix:pause-mediumと同様に
両方の効果が現れます。
インテント式の解釈時、
referenceが含まれていた場合、
参照要素の有効なインテントで置き換えても構いません。すなわち、参照先要素がintent属性付きで
インテント式を持つ場合、その式で置換できます。
また、参照直後にプロパティが付いていれば
組み合わせた式の末尾で優先的に適用され、参照元要素のプロパティより優先されます。
参照先要素がintentを持たない場合、あるいは
intentが
self-property-listであれば、
その要素の有効インテントとproperty listのプロパティも参照内容として置き換えます。
インテント式を持たない要素の有効インテントはシステム依存ですが、
現在の既定のインテント推論ルール(通常commonまたはliteral)と
互換性があるべきです。値は推論インテント式または
その要素で生成される発話表現に相当するliteralです。
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推論されます。
本節では上記の解釈を用いてインテント式を展開する例を示します。
<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
となります。
<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は一回作用し、その適用要素の子孫には影響しません。
<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
インテントプロセッサは、インテント式のエラーを 実装がサポートするいかなる適切な方法で通知してもよいです。生成テキストとしてメッセージを返したり、 例外(エラー)をスローしたりします。ただし、ウェブプラットフォーム環境では、読者がソースを修正できない場合が多いため、 インテントプロセッサは下記のようにエラーから回復できるモードを提供すべきです。
intent
属性が5.1 intentの文法に一致しない場合、
プロセッサはその属性が無いものとして動作すべきです。
通常、この場合はMathML要素およびその子孫から
適切なフォールバック・テキストが生成されます。エラー属性のみ無視され、
数式内の他のintent属性はそのまま利用される必要があります。$xなどのreferenceが、
子孫要素に値xのarg属性と一致しない場合、
プロセッサはその参照をリテラル_dollar_xで置き換えたものとして
動作すべきです。literalやproperty機能は、
数学概念の範囲を事前定義辞書の外側まで広げ、発話方法を制御できます。
例:$xと$yが
<mi arg="x">x</mi>や<mi
arg="y">y</mi>を参照する場合
list :silent ($x,$y)はx yと読まれる
semi-factorial :postfix($x)はx semi factorialと読まれる
これらの機能を使えば、生成される発話をほぼ完全に制御できます。 例として:
free-algebra ($r, $x)free algebra of r and xと読まれる
free-algebra-construct:silent (_free, $r, _algebra, _on, $x)free r algebra on xと読まれる
_(free, _($r,algebra), on, $x)free r algebra; on xと読まれる
しかし、literalは辞書に無いため、 これらの表現の意味がより不透明になりやすく、過度な利用はATの利用者適応能力や 翻訳・ロケール固有の発話自動化を制限します。 よって、後者2例の利用は推奨されません。
逆に、意味ある概念に対応しないが
特定の発話が必要な場合は、
literal名(先頭
)を使う方が
未サポート概念
を使うより望ましいです。こうすれば将来の辞書アップデートでの衝突を回避できます。
よって、最後の例は特に避けるべきです。
_
intentの主な利用法は、
同一構文が異なる意味を持つ場合の曖昧性を解消し、
それぞれ異なる読み上げになるケースです。
上付き記号msupは、累乗、転置、微分、装飾記号等、様々な意味があり、
以下のようにintentの有無で可能な読み上げ例を示します。
<msup intent="power($base,$exp)">
<mi arg="base">x</mi>
<mi arg="exp">n</mi>
</msup>
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終わり
プロパティ指定時、読み上げは変化します。
<msup intent="$op :postfix ($a)">
<mi arg="a">A</mi>
<mi arg="op" intent="transpose">T</mi>
</msup>
A転置
<msup intent="derivative($a)">
<mi arg="a">f</mi>
<mi>′</mi>
</msup>
fの微分
f上付きプライム終わり
<msup intent="x-prime">
<mi>x</mi>
<mo>′</mo>
</msup>
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上付きプライム終わり
アンダースコア関数は、合成名の各断片がローカライズされている場合も有効です。例:キリル(ブルガリア語)
<msup intent="_($base,$script)">
<mi arg="base" intent="_хикс">x</mi>
<mo arg="script" intent="_прим">′</mo>
</msup>
хикス プリム
x上付きプライム終わり
また、個々断片のナレーション委託はATに委ねつつグループ化は指定できます:
<msup intent="_($base,$script)">
<mi arg="base">x</mi>
<mo arg="script">′</mo>
</msup>
x プライム
x上付きプライム終わり
オーバーバーは複素共役や平均(mean)、intentの有無で読み分け可能:
<mover intent="conjugate($v)">
<mi arg="v">z</mi>
<mo>¯</mo>
</mover>
<mtext> <!--nbsp-->は <!--nbsp-->ではない</mtext>
<mover intent="mean($var)">
<mi arg="var">X</mi>
<mo>¯</mo>
</mover>
zの共役は平均Xではない
z上バーはX上バーではない
intent機構は、未サポート概念名で拡張可能。 例:Bell数が辞書にない場合
<msub intent="bell-number($index)">
<mi>B</mi>
<mn arg="index">2</mn>
</msub>
期待どおりの読み上げになる:
2のBell数
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
<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;
終わり行列
揃った方程式
<mtable intent=':equations'>
<mtr>
<mtd columnalign="right">
<mn>2</mn>
<mo>⁢<!--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
折り返し表現を含む揃った方程式
<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;
上記で説明したintent属性に加えて、
MathMLはより一般的な注釈付けフレームワークを提供します。MathML式は、
注釈の種類を示す記号(注釈キー)と
付属するデータ(注釈値)で構成されるペアの並びで
装飾することができます。
semantics、annotation、
annotation-xml要素を組み合わせて
MathMLの注釈を表現します。semantics要素は
式とその注釈のコンテナです。
annotation要素はテキスト注釈のコンテナ、
annotation-xml要素は構造化注釈に使われます。
semantics要素は注釈対象の式を最初の子として持ち、
続いて0個以上のannotation及びannotation-xml要素を並べます。
semantics要素は
表示要素・内容要素の両方とみなされ、どちらの文脈でも使えます。
全てのMathMLプロセッサはsemantics要素を処理すべきです。
たとえ2つのサブセットのうち一つのみ、または
[MathML-Core]しか処理しない場合でもです。
注釈キーは、式と注釈の関係を指定します。 多様な関係が設定可能です。 例:代替表現、意味の指定や補足、型情報、表示ヒント、特定プロセッサ向けのプライベートデータなど。 注釈キーはプロセッサがその注釈を処理するかどうか判断する主たる指標です。
式と注釈の論理的関係は、 式の正しい処理に大きな影響を与え得ます。例えば、 semantic attributionsと呼ばれる注釈形式は、 一部の処理環境では無視すると意味が変わる場合があります。一方、 代替表現は式の意味を変更しませんが、 表示にヒントを与えることが多く、表示の仕方が変わる場合があります。 プライベートデータやメタデータを持つ注釈も、意味や表示には影響しませんが、特定文脈で有用です。
注釈キーはContent Dictionary内の記号として定義可能で、
annotation・annotation-xml要素の
cdとname属性で指定します。
もしくは、definitionURL属性で
cdやnameの代わりに参照することもできます。
MathMLは最も一般的な注釈用に2つの定義済み注釈キーを用意しています: alternate-representationと contentequivです。 これらはmathmlkeysコンテント辞書で定義されています。 alternate-representation は注釈値が他のマークアップ言語による表現の代替を与えることを示し、 contentequivは 注釈値が本質的に意味的に等価な表現であることを示します。
注釈キーが
annotationやannotation-xml要素に明示されていない場合の
デフォルトの注釈キーは
alternate-representationです。
通常、注釈キーは式と注釈との論理的な関係のみを指定します。
注釈自体のデータ形式はencoding属性で指示します。
MathML 2ではencoding属性が
プロセッサの解釈可能性判断における主要な情報でした。互換性維持のため
プロセッサは注釈キーとencoding属性両方を参照することが望まれます。
特にMathML 2では
MathML, MathML-Content, MathML-Presentation
の定義済みエンコーディング値を指定しています。
MathMLエンコーディング値は
annotation-xml要素がMathML式を含むことを示します。
他の値の使い方は下記で詳述します。
代替表現注釈は、多くの場合式のレンダリングや、 他のマークアップ言語による等価表現の提供に使われます。 一般に、代替表現注釈は元の式の意味を変更しませんが、 表示方法が変わり得ます。
特に重要なのは、内容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>⁡<!--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文書で使う方法を参照してください。
内容等価注釈は、式に対する追加の計算情報を提供します。 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>
一般的な場合、各注釈要素はannotationの場合は文字データ、
annotation-xmlの場合はXMLマークアップデータとして
注釈値を持ちます。
semantics要素内に現れる注釈の種類には制限はありません。
例えば、TeXエンコーディング、コンピュータ代数システム向けリニア入力、画像、詳細な数学型情報などを提供できます。
場合によっては、semantics要素の代替子要素が
注釈表現の挙動に本質的に関係せず、特殊な処理系向けに役立つ場合があります。
より効率的に複数注釈形式を提供するため、
semantics要素は空のannotation及び
annotation-xml要素を含むことができ、
encodingやsrc属性で
注釈値の外部位置を指定できます。
この種の注釈は注釈参照と呼ばれます。
<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>
エクスポートされたマークアップの消費先が、 こうした注釈により参照される外部エンティティの取得ができない場合を想定し、 処理エージェントは指定された場所で外部エンティティの内容を取得し、 注釈を展開済みの形式へ置換すべきです。
注釈参照は他の注釈同様、 注釈対象と注釈値との関係を指定する注釈キーの判定規則に従います。
semantics要素は
MathML式に注釈を関連付けるコンテナ要素です。
semantics要素の最初の子は注釈対象の式です。
どんなMathML式でも、この最初の子にできます。
それ以降のannotationや
annotation-xml子要素で注釈を囲みます。
XML形式の注釈はannotation-xmlで囲み、
文字データ形式の注釈はannotationで囲みます。
上述の通り、semantics要素は
表示要素・内容要素の両方であり、内容次第でどちらにもできます。
したがって、全てのMathMLプロセッサは表示マークアップのみ、あるいは内容マークアップのみを処理する場合でも
semantics要素を処理すべきです。
semantics要素のデフォルト表示は
最初の子要素のデフォルト表示です。
レンダラーは注釈内情報を使い、注釈対象要素の表示をカスタマイズできます。
<semantics>
<mrow>
<mrow>
<mi>sin</mi>
<mo>⁡<!--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>
annotation要素は、
セマンティック注釈のコンテナ要素で、
非XML形式でパースされる文字データによる表現情報を保持します。
annotation要素には注釈の文字データのみを含め、
XMLマークアップ要素は含めるべきではありません。
注釈内にXML予約文字&、<が含まれる場合は、
エンティティ参照やXML構文ではCDATAセクションでエンコードする必要があります。
| 名前 | 値 | デフォルト |
| definitionURL | URI | なし |
| 注釈キー記号の場所 | ||
| encoding | string | なし |
| 注釈の意味情報のエンコーディング | ||
| cd | string | mathmlkeys |
| 注釈キー記号を含むコンテント辞書 | ||
| name | string | alternate-representation |
| 注釈キー記号の名前 | ||
| src | URI | なし |
| 意味情報の外部ソースの場所 | ||
cdとname属性を合わせることで、
注釈キー記号を指定します。これが、注釈対象要素と注釈間の関係を識別します。
(6.5 <semantics>要素参照)。
definitionURL属性は
注釈キー記号への参照を単独属性として提供します。
これら属性がなければ、注釈キー記号は
alternate-representation
(mathmlkeysコンテント辞書)となります。
encoding属性は
注釈内容のコンテンツタイプを表します。
encoding属性値にはメディアタイプが入り、
データ形式を識別します。関連メディアタイプが無い場合は、自己記述型文字列を使えます。
src属性は
MathML式に外部エンティティを注釈として添付する仕組みを提供します。
<annotation encoding="image/png" src="333/formula56.png"/>
annotation要素は
セマンティック対応付け要素であり、
semantics要素の子としてのみ使用できます。
annotation要素自体のデフォルト表示はありませんが、
レンダラーは注釈情報で対象要素の表示をカスタマイズできます。
annotation-xml要素は、構造化マークアップによる
セマンティック注釈のコンテナ要素です。annotation-xml要素には、注釈のマークアップ要素・属性・文字データを含めます。
| 名前 | 値 | デフォルト |
| definitionURL | URI | なし |
| 注釈キー記号の場所 | ||
| encoding | string | なし |
| 注釈の意味情報のエンコーディング | ||
| cd | string | mathmlkeys |
| 注釈キー記号を含むコンテント辞書 | ||
| name | string | alternate-representation |
| 注釈キー記号の名前 | ||
| src | URI | なし |
| 意味情報の外部ソースの場所 | ||
cdとname属性を合わせることで、
注釈キー記号を指定します。これは、注釈対象要素と注釈間の関係を識別します。
(6.5 <semantics>要素で説明)。
definitionURL属性は
単一属性として注釈キー記号への参照手段を提供します。これらの属性がなければ、
注釈キー記号は
alternate-representation
(mathmlkeysコンテント辞書)です。
encoding属性は
注釈内容のコンテンツタイプを表します。値には
エンコーディングデータのデータ形式を識別するメディアタイプを指定できます。
関連するメディアタイプがない場合は、自己記述型文字列を使えます。
上述や7.2.4
MathMLエンコーディング名で説明のように
MathMLではMathML、MathML-Presentation、MathML-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要素自体のデフォルト表示はありませんが、
レンダラーは注釈情報を使って対象要素の表示をカスタマイズできます。
上記の例で用いた名前空間拡張性は、
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-xmlにencoding属性が(大文字小文字無視で)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に使うよりも適切です。
表示マークアップは式の記法構造を符号化します。 内容マークアップは式の関数構造を符号化します。 ある用途では両者の組み合わせが必要になります。 本節では表示マークアップを内容マークアップに埋め込む際および逆の際の制約を説明します。
結果式が一意の関数適用構造を保持する限り、内容マークアップ内部に 表示マークアップを埋め込めます。具体的には、表示マークアップは 内容マークアップ中で以下3つの方法のみ出現できます:
ciとcnトークン要素内
csymbol要素内
semantics要素内
それ以外の表示マークアップが内容マークアップで現れればMathMLエラーです。 以下でこの3ケースの詳細議論:
トークン要素ciとcnは、
任意のMathML文字(8. 文字・実体・フォントで定義)や
表示要素を含めてよいです。
ciやcn要素内の
連続したMathML文字のブロックは適切に
miやmnでラップされたものとして扱われ、
結果の表示要素群は暗黙のmrowでラップされたものとしてレンダリングされます。
csymbol要素内の表示マークアップトークン要素ci, cn同様の
レンダリング規則をcsymbol要素にも用います。
semantics要素内の表示マークアップsemantics要素の主な目的の1つは、
任意のMathML式を内容マークアップに意味的に意味ある形で取り込むための仕組み提供です。
特に有効な表示式はsemanticsの最初の子に置くことで
内容式に埋め込めます。その意味はsemantics内の
1つ以上の注釈要素で示すべきです。
表示マークアップ中に内容マークアップを埋め込む際は、 結果式のレンダリングが一意になる必要があります。 すなわち、原則として埋め込まれた内容マークアップごとに 表示マークアップ断片を作り、 各内容断片の置換によってよく形成された表示式になることが求められます。 表示エンジンは内容マークアップ成分参照せずに 表示部分のみ処理できるべきです。
この制約により、埋め込む内容式は内容式としてもwell-formedで、
contentコンテナ外でも自立可能でなければなりません。
以下の内容要素群は表示要素の直下に現れてはいけません:
annotation、annotation-xml、
bvar、condition、degree、
logbase、lowlimit、uplimit。
また、表示マークアップ中では内容マークアップは 表示トークン要素内に現れてはいけません。
一部アプリケーションは表示・内容情報両方利用できます。
パラレルマークアップは同一数学式に対する複数のマークアップ木を
結合する手段です。パラレルマークアップはsemantics要素で行います。
パラレルマークアップは単独でも、より大きい内容や表示木中でも使えます。
多くの場合、数式全体へ表示・内容両方のマークアップを与えるのが目的です。
1つのsemantics要素で
2つのマークアップ木をペアにでき、片方の子で表示マークアップ、
もう片方の子で内容マークアップを表現します。
下記例では、ブール代数式 をこのように符号化しています。
<semantics>
<mrow>
<mrow><mo>(</mo><mi>a</mi> <mo>+</mo> <mi>b</mi><mo>)</mo></mrow>
<mo>⁢<!--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>
上記マークアップは表示マークアップを最初の子要素、内容マークアップを
annotation-xml要素の一部として注釈付けしています。逆に、
内容マークアップを最初の子要素、表示をannotation-xmlで
注釈する等価形式も可能です。
大きなオブジェクトの部分式処理も考慮し、
MathMLではsemantics要素のブランチ間に
対応する部分構造のクロスリファレンスを持たせられます。
クロスリファレンスは、semantics内の
id属性およびxref属性の利用で確立します。
semantics内でのid/xref属性適用は、
各代替ブランチの部分式を任意選択したい場合のベストプラクティスです。
idやxrefは
どのMathML要素にも指定できます。
下記例は、ブール代数式 のクロスリファレンス例です。
<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">⁢<!--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>
同じ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ではこうした記法は避けて下さい。
有効に機能するためには、MathML は多様なレンダラー、プロセッサ、トランスレータ、エディタと良く連携する必要があります。本章では MathML の生成およびレンダリングに関わるインターフェース上の問題のいくつかを取り上げます。MathML は主にウェブ文書内で数学を符号化するために存在するので、おそらく最も重要なインターフェースの問題は、MathML を [HTML]、および将来登場する新しい HTML と [XHTML] に埋め込むことに関連する問題です。
他の XML 文書に MathML を埋め込む際に生じるインターフェース上の問題は2種類あります。第一に、MathML マークアップは埋め込み可能な有効な XML コンテンツとして認識されなければならず、エラーとして扱われてはなりません。この問題は主に XML の名前空間管理に関する問題として見ることができます [Namespaces]。
第二に、MathML を生成・処理するツール間で確実に通信できる必要があります。MathML ツールにはエディタ、トランスレータ、コンピュータ代数システム、その他の科学ソフトウェアが含まれます。しかし、MathML 式は長くなりがちで手入力時にエラーが起きやすいため、使いやすい変換・作成ツールで容易に MathML を生成できるようにし、これらのツールが依存性やプラットフォーム、ベンダに依らず確実に協調動作するよう特別な配慮を行う必要があります。
本章はコンテンツおよびプレゼンテーション両方のマークアップに適用され、semantics、annotation、および annotation-xml
要素に対する特定の処理モデルを記述します。これらは6. Annotating
MathML: semanticsで説明されています。
名前空間をサポートする XML 文書内では [XML],
[Namespaces]、MathML
マークアップを認識する推奨の方法は MathML 名前空間の MathML 要素 math を、MathML 名前空間 URI
http://www.w3.org/1998/Math/MathML によって識別することです。
MathML 名前空間 URI は [XHTML] 文書内に MathML を埋め込むための推奨手段です。ただし、一部のユーザーエージェントは MathML マークアップを処理するための特定の拡張を呼び出すために補助情報を必要とする場合があります。
MathML を埋め込みたいマークアップ言語の仕様は、本推奨とは独立した条件を必要とする場合があり得ます。そのような条件は本推奨で述べたものと類似しているべきであり、MathML 要素のローカル名は本推奨で定義されたものと同じであるべきです。
HTML は任意の名前空間を許可しませんが、MathML 名前空間に関する組込みの知識を持っています。
HTML パーサによって math 要素およびその子孫は
http://www.w3.org/1998/Math/MathML
名前空間に配置され、アプリケーションからは名前空間が宣言された XHTML の入力であるかのように見えます。詳細な HTML パーサによる MathML の取り扱い規則は 7.4.3
Mixing MathML and HTML を参照してください。
MathML 式のレンダリングは多くの場合ウェブブラウザ内で行われますが、他の MathML 処理機能は別のアプリケーション内でより自然に行われます。特に一般的なのは、方程式エディタやコンピュータ代数システムで MathML 式を開くことです。したがって、MathML フラグメントを識別するためのエンコーディング名を指定することが重要です。
XML 名前空間が認識されない環境では、メディアタイプ [RFC2045], [RFC2046] を可能な限り使用して 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 は MathML、MathML-Content、および MathML-Presentation を
encoding 属性の既定値として規定していました。これらの値は後方互換のためメディアタイプの代替として使用できます。詳細は 6.2 Alternate
representations および
6.3 Content equivalents
を参照してください。さらに、MathML 1.0 はメディアタイプ text/mathml を提案しましたが、これは [RFC7303]
により置き換えられています。
MathML 式はアプリケーション間でコピー&ペーストやドラッグ&ドロップのパラダイムを用いて交換されることが多く、ファイルに格納されたり HTTP 経由で交換されたりします。本節ではこれらの転送中に MathML を処理するための推奨方法を提供します。
本節で説明する MathML フラグメントの転送は、複数のフレーバ(しばしば メディアタイプ、クリップボード形式、または データフレーバ と呼ばれる)でデータを利用可能にすることによって、二つのアプリケーションのコンテキスト間で行われます。これらのフレーバは通常、生成アプリケーションによって優先順位順に並べられ、消費アプリケーションは優先順で調べます。コピー&ペーストのパラダイムでは、アプリケーションは中心の クリップボード にコンテンツを 配置 し、各 クリップボード形式 ごとに一つのデータストリームを置きます。消費アプリケーションは好む形式のデータを読み取ることで交渉します。ドラッグ&ドロップのパラダイムでは、アプリケーションは利用可能な形式を宣言してコンテンツを 提供 します。受け手は利用可能な形式の一覧に基づいてドロップを受け入れるか拒否し、ドロップ時に受け取りアプリケーションは示された形式のうちの一つでデータ提供を要求します。HTTP GET 転送ではクライアントが受け入れ可能なメディアタイプのリストを送信し、サーバはその中のいずれかのメディアタイプでデータを返します。HTTP POST 転送ではクライアントがサーバが受け入れ可能なメディアタイプでラベル付けされたデータを送信できます。
現在のデスクトッププラットフォームはコピー&ペーストやドラッグ&ドロップの転送を類似したアーキテクチャで提供していますが、プラットフォームごとに命名体系が異なります。HTTP
転送はすべてメディアタイプに基づきます。本節では、アプリケーションが提供すべき転送タイプ、それらの命名方法、ならびに semantics、annotation、および annotation-xml 要素の取り扱い方法を規定します。
これら三つの交渉メカニズムを要約するため、以下の段落では転送の フレーバ(各フレーバは 名前(文字列)と 内容(バイナリデータのストリーム)を持ち、提供、受け入れ、および/または エクスポート される)について述べます。
7.2.4 Names of MathML Encodings に示された名前は、MathML エンコーディングに対応する転送フレーバを識別するために使用される正確な文字列です。そうしたフレーバ名をサポートする場合、可能な OS 上ではアプリケーションはこれらのフレーバ名のサポートを登録するべきです(例: Windows では RegisterClipboardFormat の呼び出し、Macintosh ではアプリケーション記述子にユニバーサルタイプ識別子を宣言する等)。
MathML を転送する際、アプリケーションは転送データの内容が MathML 文書型の well-formed な XML インスタンスであることを MUST 確保しなければなりません。具体的には次の要件を満たす必要があります:
インスタンスは XML 宣言で始まってもよい(例: <?xml version="1.0">)
インスタンスは正確に一つのルート math 要素を含まなければならない MUST
インスタンスはルートの math 要素上で MathML 名前空間を宣言しなければならない MUST
インスタンスは schemaLocation 属性を math
要素上で使用して、インスタンスが準拠する MathML スキーマの場所を示してもよい MAY。ただしその属性があっても、MathML
インスタンスの消費者が参照されたスキーマを取得または使用することを要求するものではありません。
相互運用性を高めるため、実体名(例: α)ではなく数値文字参照(例: α)を使うことが望ましい SHOULD
UTF-8 以外のエンコーディングを使用する場合、インスタンスは文字エンコーディングを XML 宣言で指定するか、UTF-16 の場合はバイトオーダーマーク (BOM) を用いて指定しなければならない MUST
MathML マークアップを転送するアプリケーションは、次の慣行に従うこと SHOULD が推奨されます:
純粋な表示マークアップおよび/または純粋な内容マークアップをサポートするアプリケーションは、利用可能な分だけこれらのフレーバを提供するべき SHOULD。
もしアプリケーションが一つの MathML フレーバのみをエクスポートする場合で、より特定のフレーバを決定できないなら、そのフレーバ名は MathML
と命名するべき SHOULD。
より特定のフレーバを決定できる場合、アプリケーションは汎用と特定の両方の転送フレーバを提供するべき SHOULD。ただし、受信側が特定フレーバをサポートすることを確信している場合にのみ、実際に特定フレーバを提供するべき SHOULD。例えば HTTP GET 転送では、クライアントが送る Accept ヘッダに特定の転送タイプが含まれている場合にのみそれらを返すべきです。
もしアプリケーションが二つの特定フレーバ(内容と表示)をエクスポートできるなら、それら両方と汎用フレーバをエクスポートするべき SHOULD。汎用フレーバはトップレベルの MathML semantics
要素を用いて他の二つを併合するべきです(参照: 6.9.1
Top-level Parallel Markup)。
ルート要素の唯一の子が semantics 要素である MathML
フラグメントをエクスポートする場合、上記のフレーバに続いて、各 annotation や annotation-xml 要素ごとに転送フレーバを提供するべき SHOULD(その転送フレーバが encoding
属性値に基づいて認識・命名可能であり、かつ注釈キーが(既定の)alternate-representation
である場合)。各注釈の転送内容は、指定されたエンコーディングでの文字データ(annotation 要素の場合)、あるいは
well-formed な XML フラグメント(annotation-xml 要素の場合)、または注釈参照の src 属性で示された URL にリクエストして得られるデータであるべきです。
最終的なフォールバックとして、アプリケーションはプレーンテキストフレーバ(例:
text/plain、CF_UNICODETEXT、UnicodeText、NSStringPboardType)でデータのバージョンをエクスポートしてもよい
MAY。複数のバージョンが利用可能な場合、テキストとしてエクスポートするバージョンはアプリケーションの裁量で選べます。古い
MathML プロセッサの中にはプレーンテキストで転送される MathML インスタンスが math
要素から始まることを期待するものがあるため、テキスト版は一般に XML 宣言や DOCTYPE 宣言など math
要素より前に出る XML プロローグ要素を省略するべき SHOULD。Unicode
テキスト版は最も具体性が低いフレーバとして最後にエクスポートされるべきであり、エクスポートするフレーバは最も具体的なものを先頭に、最も具体性の低いものを末尾に並べる原則に従うべきです。
MathML インスタンスが純粋な内容マークアップか純粋な表示マークアップかを判定するために、math、semantics、annotation、および annotation-xml 要素は、表示および内容の両方の語彙に属するものとして見なされるべきです。ルート要素が math であることはあらゆる MathML 転送で要求されるため、math
要素はこのように扱われます。semantics 要素とその子注釈要素は MathML
内の任意の注釈機構を構成し、表示・内容のいずれにも固有のものではありません。したがって、MathML
を消費するアプリケーションは二つの語彙のうち一つしか実装していない場合でも、これら四つの要素は常に処理するべきです。
上記の推奨は、例えばクリップボード用に画像やアプリケーション固有フォーマットなどのバイナリデータをプロデューサが提供できることを許容します。その唯一の方法は注釈の src 属性でバイナリデータを参照することであり、XML 文字データは任意のバイトストリームデータ転送を許さないことに注意してください。
上記の推奨はこれらの転送パラダイムを使う MathML 対応アプリケーション間の相互運用性を改善することを意図していますが、相互運用性を保証するものではありません。例えば MathML データ内の外部リソース(スタイルシート等)への参照は、データの消費者がそれらを見つけられない場合(HTML の切り取り貼り付け等で発生しうる)に相互運用性問題を引き起こす可能性があります。外部リソースへの参照を利用するアプリケーションは、ユーザーに潜在的な問題を知らせ、参照リソースを取得する別の方法を提供することが推奨されます。一般に、解決できない、または理解できない参照を含む MathML データの消費者は、外部参照を無視すべきです。
ある e ラーニングアプリケーションは複数のソースから来る MathML を含むクイズ問題のデータベースを持ちます。アプリケーションは表示のためにデータを渡すだけで、洗練された MathML 解析能力は持ちません。したがって、与えられた MathML インスタンスが純粋に表示マークアップか純粋に内容マークアップかを判別できないことがあり、特定バージョンの MathML スキーマに対して妥当かどうかも分かりません。そこでクリップボードに次のデータ形式を配置します:
| フレーバ名 | フレーバ内容 |
MathML |
|
Unicode Text |
|
Windows プラットフォーム上の方程式エディタが純粋な表示マークアップを生成でき、それが MathML 3 に対して妥当であるとします。したがって、次のようなフレーバをエクスポートします:
| フレーバ名 | フレーバ内容 |
MathML Presentation |
|
Tiff |
(レンダリングのサンプル) |
Unicode Text |
|
Mac OS X プラットフォーム上のスキーマベースのコンテンツ管理システムが、著者からの混合マークアップ、記号計算系と連携するための純粋な内容マークアップ、印刷出版用の純粋な表示マークアップなど複数の MathML 表現を含むコレクションを持っているとします。システムはスキーマ使用のため名前空間プレフィックスを使用してマークアップを格納します。したがって以下のデータを転送できます:
| フレーバ名 | フレーバ内容 |
public.mathml.presentation |
|
public.mathml.content |
|
public.mathml |
|
public.plain-text.tex |
|
public.plain-text |
|
同様のコンテンツ管理システムがウェブベースで、数学式の 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 |
|
MathML Content |
|
MathML |
|
TeX |
|
CF_TIFF |
(画像ファイル formula3848.tiff から要求される画像データの内容) |
CF_UNICODETEXT |
|
MathML は通常、他のマークアップ言語と組み合わせて使用されます。最も典型的なのは文書レベルのマークアップ言語(例: HTML や DocBook)内での MathML の使用でしょう。また、複合文書フォーマット内で他のオブジェクトレベルのマークアップ言語が含まれる場合も普通にあります(例: HTML5 内の MathML と SVG)。その他の一般的なユースケースとしては、著者ツールが MathML マークアップ内にカーソル位置やその他の状態情報を表す要素を挿入し、著者が編集を中断した位置から再開できるようにするようなケースがあります(そのために it was broken といった断片が残ることがあります)。
ほとんどの文書マークアップ言語にはインライン方程式(またはグラフィック、オブジェクト等)の概念があるので、MathML インスタンスをコンテンツモデルに取り込む自然な方法が通常存在します。しかし逆方向、つまり
MathML 内へ他マークアップを埋め込むことは必ずしも明確ではありません。多くの MathML 要素では子要素の役割が位置によって定義されるためです。例えば apply の第1子は演算子でなければならず、mfrac
の第2子は分母です。そのような文脈に外部マークアップが現れたときの適切な挙動は問題があります。特定の文脈でそのような振る舞いが定義可能であっても、汎用の MathML
プロセッサにとっては実装上の課題となります。
この理由により、標準スキーマは MathML インスタンス内に外来のマークアップ要素を含めることを許可していません。
標準スキーマでは他名前空間からの要素は許されませんが、他名前空間からの属性は許可されます。未知の XML マークアップに遭遇した MathML プロセッサは次のように振る舞うべきです:
非 MathML 名前空間からの属性は黙って無視するべきです。
非 MathML 名前空間からの要素はエラーとして扱うべきです。ただし annotation-xml
要素内は例外です。要素がプレゼンテーション要素の子であれば、3.3.5
Error Message <merror>
で説明される方式で処理するべきです。要素がコンテンツ要素の子であれば、4.2.9
Error Markup <cerror>
で説明される方式で処理するべきです。
例えば mfrac 要素の第2子が未知の要素であれば、その分数はエラーを示す分母でレンダリングされるべきです。
複合文書フォーマットを設計する際に、MathML をより大きな文書型に含める設計者は MathML のコンテンツモデルを拡張して追加の要素を許可することができます。例えば一般的な拡張は MathML スキーマを拡張して非 MathML 名前空間の要素をトークン要素内で許可するが、その他の要素では許可しないようにすることです。未知のマークアップに遭遇した MathML プロセッサは次のように振る舞うべきです:
未認識の XML 属性は黙って無視するべきです。
MathML のトークン要素内にある未認識の要素は黙って無視するべきです。
非 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 はプライベートデータの 保存 を次の戦略で許可します:
XML 名前空間の使用を許す形式では、少量のデータについては全ての MathML 要素上で他名前空間からの属性を許可します。
大きなデータのために、アプリケーションは semantics 要素を使用できます(詳細は 6. Annotating MathML: semantics を参照)。
著者ツールやその他のアプリケーションが表示 MathML の部分木と特定のアクションを関連付ける必要がある場合(例: 未完成の式を著者が埋めるためにマークする等)、maction 要素を使用できます(詳細は 3.7.1 Bind Action to
Sub-Expression を参照)。
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 のホームページを参照してください。
数学式のマークアップを必要とする非 XML の語彙が存在する場合があり、本仕様を参照することが理にかなうことがあります。HTML は次節で議論する重要な例ですが、他にも例があります。TeX
風の構文(例: \frac{a}{b})を用いて <mfrac> や <mi> を明示的に使用せずに表現することも可能です。あるシステムが指定された構文を解析し、MathML
スキーマに対して検証できる木を生成できるなら、そのシステムは MathML アプリケーションと見なすことができます。ただしそのようなシステムを用いる文書は厳密には有効な MathML
ではない点に注意してください。そのような構文の実装は可能であればあらゆる数学式をここで定義する XML 構文の MathML として出力する機能を提供すべきです。そのようなアプリケーションは D.1 MathML Conformance
に記述される MathML 出力準拠プロセッサと見なされます。
非 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 要素 | |
mprescripts |
none |
malignmark |
maligngroup |
複合文書フォーマットがリンク機構をサポートする場合、MathML 式内へのリンク位置を指定するには id 属性を使用するべきです。id 属性はすべての MathML 要素で許可され、その値は文書内で一意でなければならないため、この目的に最適です。
MathML 2 ではリンクの直接的なサポートはなく、複合文書文脈でリンクを定義するために "XML Linking Language"(XLink)[XLink] を参照していました。前述のとおり MathML 3
はリンクのために href 属性を追加したため、xlink:href
はもはや必要ではありません。しかし、MathML は非 MathML 名前空間の属性を許可するため xlink:href
は依然として許可されています。新しい複合文書フォーマットでは MathML 3 の href
属性を使用することが推奨されます。ユーザーエージェントが href と xlink:href の両方を持つ要素に遭遇した場合、href
属性が優先されるべきです。後方互換性をサポートするため、XML Linking を実装するユーザーエージェントは xlink:href
の使用も引き続きサポートすべきです。
新しい字形の導入を除けば、画像を用いる場面の多くはラベル付き図の表示に相当します。たとえば結び目図、ベン図、ダイキン図、ファインマン図、可換図などがこれに含まれます。したがって、それらの内容は構造化されたグラフィックスと 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
プロセッサは表示のためにこれらのどれかの表現を使うことができ、例えば下のようなグラフィカルな形式を生成するかもしれません。
この例の semantics 表現は MathML-Content マークアップで与えられ、semantics
要素の最初の子になっています。この点で、それは XHTML の img 要素の alt 属性に最も類似する表現であり、非視覚的レンダリングに最適な選択となるでしょう。
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 情報へのアクセスの程度が大きく異なるためです。
CSS や類似のスタイルシートは選択された MathML 要素のレンダリングプロパティを変更できます。レンダリングプロパティは要素上の属性によっても変更され得るし、レンダラーによって自動的に変更され得るため、さまざまなソースによって要求された変更がどの順序で適用されるかを指定する必要があります。順序は [CSS21] のカスケード規則により定義され、非 CSS の提示ヒントの優先度も考慮します。
TeX には MathML の mover/munder
のアクセントに対応する多数のコマンドがあります。仕様はそれらのアクセントにどの文字を使うべきかを示していません。場合によっては ASCII 文字を使える場合がありますが、類似する非 ASCII
文字もあります。これらの多くは mover/munder
と共に使われる際に伸縮可能(stretchy)であるべきです。
少なくとも、レンダラや MathML を生成するツール間で使用文字について一致させるために、(伸縮可能な) アクセントとして次のいずれ(あるいはすべて)を使うべきか仕様に明示するべきです(以下は候補の一部):
\hat -- '^', U+0302, U+02C6\check -- 'v', U+0306, U+02D8\tilde -- '~', U+0303, U+223C, U+02DC\acute -- U+0027, U+00B4, U+02CA, U+0301, U+02B9, U+2032\grave -- U+0060, U+02BC, U+02CB, U+0300\dot -- '.', U+00B7, U+02D9, U+0307, and potentially others like
U+2E33\ddot -- '..', U+00A8, U+0308\breve -- U+02D8, U+0306\bar -- '_', '-', U+00AF, U+02C9, U+0304, U+0305, U+0332, U+FF3F
vec -- U+20D7, U+2192, U+27F6注: MathPlayer の経験に基づくと、これらの代替は実際の文書でよく見られるため、Core でこれらを明示すること(MathML 3 においても)が重要です。現状だと人々はどの文字を使うべきか推測せざるを得ない状況になっています。
\overline -- \bar と同じであるべき\underline -- \bar と同じ?本章では MathML 内で使用する文字に関する議論、使用に関する推奨、および Unicode [Unicode] に符号化された UCS(Universal Multiple-Octet Coded Character Set、ISO-10646)で示される該当コードポイントの正しい形に関する警告を含みます。
追加の数学用英数字記号は Unicode 3.1 で導入されました。
3.2.2
トークン要素に共通の数学スタイル属性で述べたように、MathML は数学的英数字文字を指定する代替機構を提供します。すなわち、mathvariant 属性を mi
のようなトークン要素に付け、トークン内の文字データが数学用英数字記号を選択することを示します。
平面 1 の数学用英数字記号の重要な用途は、フラクトゥール(Fraktur)やギリシャボールド、スクリプトなどの特殊な数学フォントで通常表示される識別子です。例えば、Mathematical Fraktur アルファベットは U+1D504 ("A") から U+1D537 ("z") まで走ります。したがって、フラクトゥール文字を使う変数の識別子は次のようにマークアップできます。
<mi>𝔄<!--BLACK-LETTER CAPITAL A--></mi>
mathvariant 属性で指定することです:
<mi mathvariant="fraktur">A</mi>
MathML プロセッサは、数学用英数字文字が現れた場合、それを未装飾の対応文字と mathvariant
属性の組合せと同一視して扱わなければなりません。
レンダラは少なくとも Unicode に対応するコードポイントを持つ組合せを区別し、十分なフォントサポートがない場合はそうした組合せを無視してよいことを想定しています。
印刷や代替レンダリングの品質に重要であっても、それ自体に対応するグリフの印が直接対応しない文字があります。ここではそれらを非標識文字と呼びます。これらの役割は 3. Presentation Markup および 4. Content Markup で論じられています。
MathML では、改行位置などのページ組版の制御は mo や mspace
要素の適切な属性の使用によって行われます。
以下の文字は単純な空白文字ではありません。これらは 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>) |
数学文献でかなり頻繁に出現し、特別な意味を持ついくつかの文字は、UCS 内の類似文字としばしば混同されます。ある場合では、一般的なキーボード文字がより適切な数学文字の代替として定着しています。別のケースでは、文字は式と本文の両方で正当な用途があるが、レンダリングやフォントの慣習が衝突します。これらすべてをここでは「異常文字」と呼びます。
典型的な 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 はこれらをアプリケーション固有の作成慣行と見なし、互換性のために著者ツールはより正確な数学文字を用いるマークアップを生成することを推奨します。
UCS には伝統的に自然な「スクリプト」的性質を持つとみなされてきた文字がいくつかあります。これらの視覚的表現はスクリプトに似ており、ベースラインより上に上がり、基準のフォントサイズより小さく表示されます。度記号やプライム文字がその例です。テキスト内でこれらの文字はそれに続く識別子と連続して現れ、通常同じフォントでレンダリングされます。ここではこれらを擬似スクリプトと呼びます。
ほとんどすべての数学的文脈では、擬似スクリプト文字は MathML の明示的なスクリプトマークアップで基底式に関連付けられるべきです。例えば「x prime」の推奨エンコーディングは次のとおりです
<msup><mi>x</mi><mo>′<!--PRIME--></mo></msup>
であり、次のようにしてはなりません
<mi>x'</mi>
または明示的なスクリプト構成を使わない他の変種でもありません。ただし、mtext
のようなテキスト文脈内では擬似スクリプトが他の文字データと連続して使われることはあり得ます。
数学文脈で明示的マークアップが好ましい理由は二つあります。第一に、擬似スクリプトを下付き識別子と一緒に使うと組版で問題が起きることがあります。伝統的に x' の下付きはプライムの下に積まれてレンダリングされます。これはスクリプトマークアップを使えば容易に達成できます。例えば:
<mrow><msubsup><mi>x</mi><mn>0</mn><mo>′<!--PRIME--></mo></msubsup></mrow>
対照的に、
<mrow><msub><mi>x'</mi><mn>0</mn></msub></mrow>
はスクリプトがずれて表示されます。
これは多くのフォントで擬似スクリプトのグリフが既に縮小され上付きになっているため、レンダラは擬似スクリプトを上付き位置にある他の文字コードと異なるように扱う必要があることを意味します。
第二の理由は、明示的なスクリプトマークアップは意図された数学構造をより正確に反映することが多いからです。例えば、
<msup>
<mrow><mo>(</mo><mrow><mi>f</mi><mo>+</mo><mi>g</mi></mrow><mo>)</mo></mrow>
<mo>′<!--PRIME--></mo>
</msup>
はプライムが全体の式に作用していることを正確に反映し、最後の右括弧に対して作用していることを示唆しません。
ただし、すべての MathML トークン要素のデータモデルは Unicode テキストであるため、次のような構成を含む有効な MathML マークアップの可能性を完全には排除できません:
<mrow><mi>x'</mi></mrow>
や
<mrow><mi>x</mi><mo>'</mo></mrow>
最初の形式は稀な状況では x' という複数文字の識別子を示すために正当に使われることがありますが、そのような形式は一般に避けるべきです。著作および検証ツールは推奨されるスクリプトマークアップを生成することが推奨されます:
<mrow><msup><mi>x</mi><mo>′<!--PRIME--></mo></msup></mrow>
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](バックプライムとしても知られる)などが含まれます。
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] の一覧を参照してください。
一般則として、基底文字に結合文字列が続く場合、それが合成された事前合成文字に相当するなら、その合成文字と同等に扱うべきです。
課題 178
Relax NG スキーマは MathML の XML シリアル化を検査するために使用でき、HTML シリアル化など他の MathML シリアル化を検証するための基盤となります。
XML シリアル化を使用する場合でも、このスキーマを適用する前に入力の正規化が必要になることがあります。特に、HTML に従い、[MathML-Core] は
onclick のような属性が任意の大文字小文字で指定されることを許容します(例:
OnClick="...")。ここで属性名を大文字小文字を区別しないと指定することは実用上困難なため、小文字の名前のみが許可されています。同様に、接頭辞が
data- で始まる任意の属性は有効と見なすべきです。ここに示したスキーマは固定された属性 data-other のみを許可しているため、検証の前に
data 属性を削除するように入力を正規化するか、特定のアプリケーションで使用される属性をサポートするようスキーマを拡張する必要があります。
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 スキーマを文書に関連付ける方法はありません。
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}?
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")*}}?
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
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}
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"
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
MathML DTD は名前空間接頭辞を MathML 要素に使用できるようにするために [Modularization] に示された戦略を使用します。ただし、互換性のために XML シリアル化に名前空間接頭辞を使用しないことが推奨されます(HTML シリアル化との互換性のため)。
XML シリアル化を使用する場合は、HTML シリアル化と異なり、DTD を指定しない限り ∫ のような文字実体参照を使用できない点に注意してください。DTD
としてここに示す完全な MathML DTD を指定するか、[Entities] に規定された
HTML/MathML の実体宣言セットのいずれかを指定する必要があります。文字は常に文字データを直接使用するか、数値文字参照を使用して指定できるため、∫ や
∫ を使用し、∫ の代わりにすることができます。
MathML フラグメントは MathML 用の XML スキーマを使用して検証できます。スキーマは次にあります: http://www.w3.org/Math/XMLSchema/mathml4/mathml4.xsd。 提供されたスキーマは Relax NG スキーマから機械的に生成されており、XSD 構文で強制できないいくつかの制約を省略しています。
以下の表は、MathML における演算子、フェンス、区切り文字、およびアクセントのレンダリング特性の提案辞書を示したものです。これらはすべて mo
要素で表されます。簡潔にするため、本付録ではそのような要素を単に operators
と呼びます。なお、[MathML-Core]
の実装は、これらの値を既定の演算子間隔の規範的定義として使用します。
辞書は要素の内容だけでなく、要素の内容と form
属性値の組合せによって索引付けされています。複数の形式を持つ演算子は複数のエントリを持ちます。form
属性が与えられない場合にどの形式を使用するかは MathML 仕様で指定されています。詳しくは 3.2.5.6.2 form 属性の既定値 を参照してください。
データはすべて機械可読形式の unicode.xml に含まれており、HTML/MathML のエンティティ定義のソースでもあり、[Entities]
に同梱されています。以下では、より人間に読みやすい二つの形式で提示しています。データの代替的な提示については [MathML-Core] も参照してください。
最初の表示では、演算子はまず form と spacing 属性で並べられ、次に priority
によって順序付けされます。次に文字がリストされ、その文字に対する残りの演算子辞書のエントリに関する追加データは title 属性を介して与えられ、適切なブラウザではツールチップとして表示されます。
データの第二の表示では、表の最上行の見出しをクリックすることで、適切なブラウザではその列で表を並べ替えることができます。
ここで示す lspace および rspace の値は 0 から 7
の範囲で、1/18 em の倍数を表し、namedspace に用いられる値と一致します。
内容が InvisibleTimes または ApplyFunction
の不可視演算子については、MathML
のレンダラーが文脈依存で間隔を選択することが推奨されます(これは以下の表で与えられる静的な値に対する例外です)。<mo>⁡</mo>
の場合、右側の被演算子がフェンスで始まらないような式(例えば のような)では、合計の間隔(lspace+rspace)は 0
より大きくするべきです。<mo>⁢</mo>
の場合、両方の被演算子(またはベースライン上の最も近いトークン)が非傾斜フォントで表示される識別子であるとき(すなわち提案される規則の下で両被演算子が複数文字識別子であるとき)には、合計の間隔は 0
より大きくするべきです。
いくつかのレンダラーは、TeX の場合のように、スクリプト中に現れる多くの演算子(すなわち scriptlevel が 0 より大きいとき; 参照:
3.3.4 スタイル変更 <mstyle>)についてほとんど間隔を使わないことを望むかもしれません。
| 文字 | 字形 | 名称 | 形式 | 優先度 | 左間隔 | 右間隔 | プロパティ |
|---|---|---|---|---|---|---|---|
| ‘ | ‘ | left single quotation mark | prefix | 100 | 0 | 0 | |
| ’ | ’ | right single quotation mark | postfix | 100 | 0 | 0 | |
| “ | “ | left double quotation mark | prefix | 100 | 0 | 0 | |
| ” | ” | 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 |
| ‖ | ‖ | double vertical line | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ‖ | ‖ | double vertical line | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⌈ | ⌈ | left ceiling | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⌉ | ⌉ | right ceiling | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⌊ | ⌊ | left floor | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⌋ | ⌋ | right floor | postfix | 120 | 0 | 0 | stretchy, symmetric |
| 〈 | 〈 | left-pointing angle bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| 〉 | 〉 | right-pointing angle bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ❲ | ❲ | light left tortoise shell bracket ornament | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ❳ | ❳ | light right tortoise shell bracket ornament | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⟦ | ⟦ | mathematical left white square bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⟧ | ⟧ | mathematical right white square bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⟨ | ⟨ | mathematical left angle bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⟩ | ⟩ | mathematical right angle bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⟪ | ⟪ | mathematical left double angle bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⟫ | ⟫ | mathematical right double angle bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⟬ | ⟬ | mathematical left white tortoise shell bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⟭ | ⟭ | mathematical right white tortoise shell bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⟮ | ⟮ | mathematical left flattened parenthesis | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⟯ | ⟯ | mathematical right flattened parenthesis | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦀ | ⦀ | triple vertical bar delimiter | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦀ | ⦀ | triple vertical bar delimiter | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦃ | ⦃ | left white curly bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦄ | ⦄ | right white curly bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦅ | ⦅ | left white parenthesis | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦆ | ⦆ | right white parenthesis | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦇ | ⦇ | z notation left image bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦈ | ⦈ | z notation right image bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦉ | ⦉ | z notation left binding bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦊ | ⦊ | z notation right binding bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦋ | ⦋ | left square bracket with underbar | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦌ | ⦌ | right square bracket with underbar | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦍ | ⦍ | left square bracket with tick in top corner | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦎ | ⦎ | right square bracket with tick in bottom corner | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦏ | ⦏ | left square bracket with tick in bottom corner | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦐ | ⦐ | right square bracket with tick in top corner | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦑ | ⦑ | left angle bracket with dot | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦒ | ⦒ | right angle bracket with dot | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦓ | ⦓ | left arc less-than bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦔ | ⦔ | right arc greater-than bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦕ | ⦕ | double left arc greater-than bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦖ | ⦖ | double right arc less-than bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦗ | ⦗ | left black tortoise shell bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦘ | ⦘ | right black tortoise shell bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦙ | ⦙ | dotted fence | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦙ | ⦙ | dotted fence | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⧘ | ⧘ | left wiggly fence | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⧙ | ⧙ | right wiggly fence | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⧚ | ⧚ | left double wiggly fence | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⧛ | ⧛ | right double wiggly fence | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⧼ | ⧼ | left-pointing curved angle bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⧽ | ⧽ | right-pointing curved angle bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ; | ; | semicolon | infix | 140 | 0 | 3 | linebreakstyle=after |
| ⦁ | ⦁ | z notation spot | infix | 140 | 5 | 5 | |
| , | , | comma | infix | 160 | 0 | 3 | linebreakstyle=after |
| ⁣ | | invisible separator | infix | 160 | 0 | 0 | linebreakstyle=after |
| : | : | colon | infix | 180 | 0 | 3 | |
| ⦂ | ⦂ | z notation type colon | infix | 180 | 5 | 5 | |
| ∴ | ∴ | therefore | prefix | 200 | 0 | 0 | |
| ∵ | ∵ | because | prefix | 200 | 0 | 0 | |
| -> | -> | multiple character operator: -> | infix | 220 | 5 | 5 | |
| ⊶ | ⊶ | original of | infix | 220 | 5 | 5 | |
| ⊷ | ⊷ | image of | infix | 220 | 5 | 5 | |
| ⊸ | ⊸ | multimap | infix | 220 | 5 | 5 | |
| ⧴ | ⧴ | rule-delayed | infix | 220 | 5 | 5 | |
| // | // | multiple character operator: // | infix | 240 | 5 | 5 | |
| ⊢ | ⊢ | right tack | infix | 260 | 5 | 5 | |
| ⊣ | ⊣ | left tack | infix | 260 | 5 | 5 | |
| ⊧ | ⊧ | models | infix | 260 | 5 | 5 | |
| ⊨ | ⊨ | true | infix | 260 | 5 | 5 | |
| ⊩ | ⊩ | forces | infix | 260 | 5 | 5 | |
| ⊪ | ⊪ | triple vertical bar right turnstile | infix | 260 | 5 | 5 | |
| ⊫ | ⊫ | double vertical bar double right turnstile | infix | 260 | 5 | 5 | |
| ⊬ | ⊬ | does not prove | infix | 260 | 5 | 5 | |
| ⊭ | ⊭ | not true | infix | 260 | 5 | 5 | |
| ⊮ | ⊮ | does not force | infix | 260 | 5 | 5 | |
| ⊯ | ⊯ | negated double vertical bar double right turnstile | infix | 260 | 5 | 5 | |
| ⫞ | ⫞ | short left tack | infix | 260 | 5 | 5 | |
| ⫟ | ⫟ | short down tack | infix | 260 | 5 | 5 | |
| ⫠ | ⫠ | short up tack | infix | 260 | 5 | 5 | |
| ⫡ | ⫡ | perpendicular with s | infix | 260 | 5 | 5 | |
| ⫢ | ⫢ | vertical bar triple right turnstile | infix | 260 | 5 | 5 | |
| ⫣ | ⫣ | double vertical bar left turnstile | infix | 260 | 5 | 5 | |
| ⫤ | ⫤ | vertical bar double left turnstile | infix | 260 | 5 | 5 | |
| ⫥ | ⫥ | double vertical bar double left turnstile | infix | 260 | 5 | 5 | |
| ⫦ | ⫦ | long dash from left member of double vertical | infix | 260 | 5 | 5 | |
| ⫧ | ⫧ | short down tack with overbar | infix | 260 | 5 | 5 | |
| ⫨ | ⫨ | short up tack with underbar | infix | 260 | 5 | 5 | |
| ⫩ | ⫩ | short up tack above short down tack | infix | 260 | 5 | 5 | |
| ⫪ | ⫪ | double down tack | infix | 260 | 5 | 5 | |
| ⫫ | ⫫ | double up tack | infix | 260 | 5 | 5 | |
| ! | ! | exclamation mark | prefix | 280 | 0 | 0 | |
| ¬ | ¬ | not sign | prefix | 280 | 0 | 0 | |
| ∀ | ∀ | for all | prefix | 280 | 0 | 0 | |
| ∃ | ∃ | there exists | prefix | 280 | 0 | 0 | |
| ∄ | ∄ | there does not exist | prefix | 280 | 0 | 0 | |
| ∼ | ∼ | tilde operator | prefix | 280 | 0 | 0 | |
| ⌐ | ⌐ | reversed not sign | prefix | 280 | 0 | 0 | |
| ⌙ | ⌙ | turned not sign | prefix | 280 | 0 | 0 | |
| ⫬ | ⫬ | double stroke not sign | prefix | 280 | 0 | 0 | |
| ⫭ | ⫭ | reversed double stroke not sign | prefix | 280 | 0 | 0 | |
| ∈ | ∈ | element of | infix | 300 | 5 | 5 | |
| ∉ | ∉ | not an element of | infix | 300 | 5 | 5 | |
| ∊ | ∊ | small element of | infix | 300 | 5 | 5 | |
| ∋ | ∋ | contains as member | infix | 300 | 5 | 5 | |
| ∌ | ∌ | does not contain as member | infix | 300 | 5 | 5 | |
| ∍ | ∍ | small contains as member | infix | 300 | 5 | 5 | |
| ⊂ | ⊂ | subset of | infix | 300 | 5 | 5 | |
| ⊃ | ⊃ | superset of | infix | 300 | 5 | 5 | |
| ⊄ | ⊄ | not a subset of | infix | 300 | 5 | 5 | |
| ⊅ | ⊅ | not a superset of | infix | 300 | 5 | 5 | |
| ⊆ | ⊆ | subset of or equal to | infix | 300 | 5 | 5 | |
| ⊇ | ⊇ | superset of or equal to | infix | 300 | 5 | 5 | |
| ⊈ | ⊈ | neither a subset of nor equal to | infix | 300 | 5 | 5 | |
| ⊉ | ⊉ | neither a superset of nor equal to | infix | 300 | 5 | 5 | |
| ⊊ | ⊊ | subset of with not equal to | infix | 300 | 5 | 5 | |
| ⊋ | ⊋ | superset of with not equal to | infix | 300 | 5 | 5 | |
| ⊏ | ⊏ | square image of | infix | 300 | 5 | 5 | |
| ⊐ | ⊐ | square original of | infix | 300 | 5 | 5 | |
| ⊑ | ⊑ | square image of or equal to | infix | 300 | 5 | 5 | |
| ⊒ | ⊒ | square original of or equal to | infix | 300 | 5 | 5 | |
| ⊰ | ⊰ | precedes under relation | infix | 300 | 5 | 5 | |
| ⊱ | ⊱ | succeeds under relation | infix | 300 | 5 | 5 | |
| ⊲ | ⊲ | normal subgroup of | infix | 300 | 5 | 5 | |
| ⊳ | ⊳ | contains as normal subgroup | infix | 300 | 5 | 5 | |
| ⋐ | ⋐ | double subset | infix | 300 | 5 | 5 | |
| ⋑ | ⋑ | double superset | infix | 300 | 5 | 5 | |
| ⋢ | ⋢ | not square image of or equal to | infix | 300 | 5 | 5 | |
| ⋣ | ⋣ | not square original of or equal to | infix | 300 | 5 | 5 | |
| ⋤ | ⋤ | square image of or not equal to | infix | 300 | 5 | 5 | |
| ⋥ | ⋥ | square original of or not equal to | infix | 300 | 5 | 5 | |
| ⋪ | ⋪ | not normal subgroup of | infix | 300 | 5 | 5 | |
| ⋫ | ⋫ | does not contain as normal subgroup | infix | 300 | 5 | 5 | |
| ⋬ | ⋬ | not normal subgroup of or equal to | infix | 300 | 5 | 5 | |
| ⋭ | ⋭ | does not contain as normal subgroup or equal | infix | 300 | 5 | 5 | |
| ⋲ | ⋲ | element of with long horizontal stroke | infix | 300 | 5 | 5 | |
| ⋳ | ⋳ | element of with vertical bar at end of horizontal stroke | infix | 300 | 5 | 5 | |
| ⋴ | ⋴ | small element of with vertical bar at end of horizontal stroke | infix | 300 | 5 | 5 | |
| ⋵ | ⋵ | element of with dot above | infix | 300 | 5 | 5 | |
| ⋶ | ⋶ | element of with overbar | infix | 300 | 5 | 5 | |
| ⋷ | ⋷ | small element of with overbar | infix | 300 | 5 | 5 | |
| ⋸ | ⋸ | element of with underbar | infix | 300 | 5 | 5 | |
| ⋹ | ⋹ | element of with two horizontal strokes | infix | 300 | 5 | 5 | |
| ⋺ | ⋺ | contains with long horizontal stroke | infix | 300 | 5 | 5 | |
| ⋻ | ⋻ | contains with vertical bar at end of horizontal stroke | infix | 300 | 5 | 5 | |
| ⋼ | ⋼ | small contains with vertical bar at end of horizontal stroke | infix | 300 | 5 | 5 | |
| ⋽ | ⋽ | contains with overbar | infix | 300 | 5 | 5 | |
| ⋾ | ⋾ | small contains with overbar | infix | 300 | 5 | 5 | |
| ⋿ | ⋿ | z notation bag membership | infix | 300 | 5 | 5 | |
| ⥹ | ⥹ | subset above rightwards arrow | infix | 300 | 5 | 5 | |
| ⥺ | ⥺ | leftwards arrow through subset | infix | 300 | 5 | 5 | |
| ⥻ | ⥻ | superset above leftwards arrow | infix | 300 | 5 | 5 | |
| ⪽ | ⪽ | subset with dot | infix | 300 | 5 | 5 | |
| ⪾ | ⪾ | superset with dot | infix | 300 | 5 | 5 | |
| ⪿ | ⪿ | subset with plus sign below | infix | 300 | 5 | 5 | |
| ⫀ | ⫀ | superset with plus sign below | infix | 300 | 5 | 5 | |
| ⫁ | ⫁ | subset with multiplication sign below | infix | 300 | 5 | 5 | |
| ⫂ | ⫂ | superset with multiplication sign below | infix | 300 | 5 | 5 | |
| ⫃ | ⫃ | subset of or equal to with dot above | infix | 300 | 5 | 5 | |
| ⫄ | ⫄ | superset of or equal to with dot above | infix | 300 | 5 | 5 | |
| ⫅ | ⫅ | subset of above equals sign | infix | 300 | 5 | 5 | |
| ⫆ | ⫆ | superset of above equals sign | infix | 300 | 5 | 5 | |
| ⫇ | ⫇ | subset of above tilde operator | infix | 300 | 5 | 5 | |
| ⫈ | ⫈ | superset of above tilde operator | infix | 300 | 5 | 5 | |
| ⫉ | ⫉ | subset of above almost equal to | infix | 300 | 5 | 5 | |
| ⫊ | ⫊ | superset of above almost equal to | infix | 300 | 5 | 5 | |
| ⫋ | ⫋ | subset of above not equal to | infix | 300 | 5 | 5 | |
| ⫌ | ⫌ | superset of above not equal to | infix | 300 | 5 | 5 | |
| ⫍ | ⫍ | square left open box operator | infix | 300 | 5 | 5 | |
| ⫎ | ⫎ | square right open box operator | infix | 300 | 5 | 5 | |
| ⫏ | ⫏ | closed subset | infix | 300 | 5 | 5 | |
| ⫐ | ⫐ | closed superset | infix | 300 | 5 | 5 | |
| ⫑ | ⫑ | closed subset or equal to | infix | 300 | 5 | 5 | |
| ⫒ | ⫒ | closed superset or equal to | infix | 300 | 5 | 5 | |
| ⫓ | ⫓ | subset above superset | infix | 300 | 5 | 5 | |
| ⫔ | ⫔ | superset above subset | infix | 300 | 5 | 5 | |
| ⫕ | ⫕ | subset above subset | infix | 300 | 5 | 5 | |
| ⫖ | ⫖ | superset above superset | infix | 300 | 5 | 5 | |
| ⫗ | ⫗ | superset beside subset | infix | 300 | 5 | 5 | |
| ⫘ | ⫘ | superset beside and joined by dash with subset | infix | 300 | 5 | 5 | |
| ⫙ | ⫙ | 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 | |
| < | < | less-than sign | infix | 320 | 5 | 5 | |
| <= | <= | 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 | |
| ∝ | ∝ | proportional to | infix | 320 | 5 | 5 | |
| ∣ | ∣ | divides | infix | 320 | 5 | 5 | |
| ∤ | ∤ | does not divide | infix | 320 | 5 | 5 | |
| ∥ | ∥ | parallel to | infix | 320 | 5 | 5 | |
| ∦ | ∦ | not parallel to | infix | 320 | 5 | 5 | |
| ∷ | ∷ | proportion | infix | 320 | 5 | 5 | |
| ∹ | ∹ | excess | infix | 320 | 5 | 5 | |
| ∺ | ∺ | geometric proportion | infix | 320 | 5 | 5 | |
| ∻ | ∻ | homothetic | infix | 320 | 5 | 5 | |
| ∼ | ∼ | tilde operator | infix | 320 | 5 | 5 | |
| ∽ | ∽ | reversed tilde | infix | 320 | 5 | 5 | |
| ∾ | ∾ | inverted lazy s | infix | 320 | 5 | 5 | |
| ≁ | ≁ | not tilde | infix | 320 | 5 | 5 | |
| ≂ | ≂ | minus tilde | infix | 320 | 5 | 5 | |
| ≃ | ≃ | asymptotically equal to | infix | 320 | 5 | 5 | |
| ≄ | ≄ | not asymptotically equal to | infix | 320 | 5 | 5 | |
| ≅ | ≅ | approximately equal to | infix | 320 | 5 | 5 | |
| ≆ | ≆ | approximately but not actually equal to | infix | 320 | 5 | 5 | |
| ≇ | ≇ | neither approximately nor actually equal to | infix | 320 | 5 | 5 | |
| ≈ | ≈ | almost equal to | infix | 320 | 5 | 5 | |
| ≉ | ≉ | not almost equal to | infix | 320 | 5 | 5 | |
| ≊ | ≊ | almost equal or equal to | infix | 320 | 5 | 5 | |
| ≋ | ≋ | triple tilde | infix | 320 | 5 | 5 | |
| ≌ | ≌ | all equal to | infix | 320 | 5 | 5 | |
| ≍ | ≍ | equivalent to | infix | 320 | 5 | 5 | |
| ≎ | ≎ | geometrically equivalent to | infix | 320 | 5 | 5 | |
| ≏ | ≏ | difference between | infix | 320 | 5 | 5 | |
| ≐ | ≐ | approaches the limit | infix | 320 | 5 | 5 | |
| ≑ | ≑ | geometrically equal to | infix | 320 | 5 | 5 | |
| ≒ | ≒ | approximately equal to or the image of | infix | 320 | 5 | 5 | |
| ≓ | ≓ | image of or approximately equal to | infix | 320 | 5 | 5 | |
| ≔ | ≔ | colon equals | infix | 320 | 5 | 5 | |
| ≕ | ≕ | equals colon | infix | 320 | 5 | 5 | |
| ≖ | ≖ | ring in equal to | infix | 320 | 5 | 5 | |
| ≗ | ≗ | ring equal to | infix | 320 | 5 | 5 | |
| ≘ | ≘ | corresponds to | infix | 320 | 5 | 5 | |
| ≙ | ≙ | estimates | infix | 320 | 5 | 5 | |
| ≚ | ≚ | equiangular to | infix | 320 | 5 | 5 | |
| ≛ | ≛ | star equals | infix | 320 | 5 | 5 | |
| ≜ | ≜ | delta equal to | infix | 320 | 5 | 5 | |
| ≝ | ≝ | equal to by definition | infix | 320 | 5 | 5 | |
| ≞ | ≞ | measured by | infix | 320 | 5 | 5 | |
| ≟ | ≟ | questioned equal to | infix | 320 | 5 | 5 | |
| ≠ | ≠ | not equal to | infix | 320 | 5 | 5 | |
| ≡ | ≡ | identical to | infix | 320 | 5 | 5 | |
| ≢ | ≢ | not identical to | infix | 320 | 5 | 5 | |
| ≣ | ≣ | strictly equivalent to | infix | 320 | 5 | 5 | |
| ≤ | ≤ | less-than or equal to | infix | 320 | 5 | 5 | |
| ≥ | ≥ | greater-than or equal to | infix | 320 | 5 | 5 | |
| ≦ | ≦ | less-than over equal to | infix | 320 | 5 | 5 | |
| ≧ | ≧ | greater-than over equal to | infix | 320 | 5 | 5 | |
| ≨ | ≨ | less-than but not equal to | infix | 320 | 5 | 5 | |
| ≩ | ≩ | greater-than but not equal to | infix | 320 | 5 | 5 | |
| ≪ | ≪ | much less-than | infix | 320 | 5 | 5 | |
| ≫ | ≫ | much greater-than | infix | 320 | 5 | 5 | |
| ≬ | ≬ | between | infix | 320 | 5 | 5 | |
| ≭ | ≭ | not equivalent to | infix | 320 | 5 | 5 | |
| ≮ | ≮ | not less-than | infix | 320 | 5 | 5 | |
| ≯ | ≯ | not greater-than | infix | 320 | 5 | 5 | |
| ≰ | ≰ | neither less-than nor equal to | infix | 320 | 5 | 5 | |
| ≱ | ≱ | neither greater-than nor equal to | infix | 320 | 5 | 5 | |
| ≲ | ≲ | less-than or equivalent to | infix | 320 | 5 | 5 | |
| ≳ | ≳ | greater-than or equivalent to | infix | 320 | 5 | 5 | |
| ≴ | ≴ | neither less-than nor equivalent to | infix | 320 | 5 | 5 | |
| ≵ | ≵ | neither greater-than nor equivalent to | infix | 320 | 5 | 5 | |
| ≶ | ≶ | less-than or greater-than | infix | 320 | 5 | 5 | |
| ≷ | ≷ | greater-than or less-than | infix | 320 | 5 | 5 | |
| ≸ | ≸ | neither less-than nor greater-than | infix | 320 | 5 | 5 | |
| ≹ | ≹ | neither greater-than nor less-than | infix | 320 | 5 | 5 | |
| ≺ | ≺ | precedes | infix | 320 | 5 | 5 | |
| ≻ | ≻ | succeeds | infix | 320 | 5 | 5 | |
| ≼ | ≼ | precedes or equal to | infix | 320 | 5 | 5 | |
| ≽ | ≽ | succeeds or equal to | infix | 320 | 5 | 5 | |
| ≾ | ≾ | precedes or equivalent to | infix | 320 | 5 | 5 | |
| ≿ | ≿ | succeeds or equivalent to | infix | 320 | 5 | 5 | |
| ⊀ | ⊀ | does not precede | infix | 320 | 5 | 5 | |
| ⊁ | ⊁ | does not succeed | infix | 320 | 5 | 5 | |
| ⊜ | ⊜ | circled equals | infix | 320 | 5 | 5 | |
| ⊦ | ⊦ | assertion | infix | 320 | 5 | 5 | |
| ⊴ | ⊴ | normal subgroup of or equal to | infix | 320 | 5 | 5 | |
| ⊵ | ⊵ | contains as normal subgroup or equal to | infix | 320 | 5 | 5 | |
| ⋈ | ⋈ | bowtie | infix | 320 | 5 | 5 | |
| ⋍ | ⋍ | reversed tilde equals | infix | 320 | 5 | 5 | |
| ⋔ | ⋔ | pitchfork | infix | 320 | 5 | 5 | |
| ⋕ | ⋕ | equal and parallel to | infix | 320 | 5 | 5 | |
| ⋖ | ⋖ | less-than with dot | infix | 320 | 5 | 5 | |
| ⋗ | ⋗ | greater-than with dot | infix | 320 | 5 | 5 | |
| ⋘ | ⋘ | very much less-than | infix | 320 | 5 | 5 | |
| ⋙ | ⋙ | very much greater-than | infix | 320 | 5 | 5 | |
| ⋚ | ⋚ | less-than equal to or greater-than | infix | 320 | 5 | 5 | |
| ⋛ | ⋛ | greater-than equal to or less-than | infix | 320 | 5 | 5 | |
| ⋜ | ⋜ | equal to or less-than | infix | 320 | 5 | 5 | |
| ⋝ | ⋝ | equal to or greater-than | infix | 320 | 5 | 5 | |
| ⋞ | ⋞ | equal to or precedes | infix | 320 | 5 | 5 | |
| ⋟ | ⋟ | equal to or succeeds | infix | 320 | 5 | 5 | |
| ⋠ | ⋠ | does not precede or equal | infix | 320 | 5 | 5 | |
| ⋡ | ⋡ | does not succeed or equal | infix | 320 | 5 | 5 | |
| ⋦ | ⋦ | less-than but not equivalent to | infix | 320 | 5 | 5 | |
| ⋧ | ⋧ | greater-than but not equivalent to | infix | 320 | 5 | 5 | |
| ⋨ | ⋨ | precedes but not equivalent to | infix | 320 | 5 | 5 | |
| ⋩ | ⋩ | succeeds but not equivalent to | infix | 320 | 5 | 5 | |
| ⟂ | ⟂ | perpendicular | infix | 320 | 5 | 5 | |
| ⥶ | ⥶ | less-than above leftwards arrow | infix | 320 | 5 | 5 | |
| ⥷ | ⥷ | leftwards arrow through less-than | infix | 320 | 5 | 5 | |
| ⥸ | ⥸ | greater-than above rightwards arrow | infix | 320 | 5 | 5 | |
| ⦶ | ⦶ | circled vertical bar | infix | 320 | 5 | 5 | |
| ⦷ | ⦷ | circled parallel | infix | 320 | 5 | 5 | |
| ⦹ | ⦹ | circled perpendicular | infix | 320 | 5 | 5 | |
| ⧀ | ⧀ | circled less-than | infix | 320 | 5 | 5 | |
| ⧁ | ⧁ | circled greater-than | infix | 320 | 5 | 5 | |
| ⧎ | ⧎ | right triangle above left triangle | infix | 320 | 5 | 5 | |
| ⧏ | ⧏ | left triangle beside vertical bar | infix | 320 | 5 | 5 | |
| ⧐ | ⧐ | vertical bar beside right triangle | infix | 320 | 5 | 5 | |
| ⧑ | ⧑ | bowtie with left half black | infix | 320 | 5 | 5 | |
| ⧒ | ⧒ | bowtie with right half black | infix | 320 | 5 | 5 | |
| ⧓ | ⧓ | black bowtie | infix | 320 | 5 | 5 | |
| ⧡ | ⧡ | increases as | infix | 320 | 5 | 5 | |
| ⧣ | ⧣ | equals sign and slanted parallel | infix | 320 | 5 | 5 | |
| ⧤ | ⧤ | equals sign and slanted parallel with tilde above | infix | 320 | 5 | 5 | |
| ⧥ | ⧥ | identical to and slanted parallel | infix | 320 | 5 | 5 | |
| ⧦ | ⧦ | gleich stark | infix | 320 | 5 | 5 | |
| ⩦ | ⩦ | equals sign with dot below | infix | 320 | 5 | 5 | |
| ⩧ | ⩧ | identical with dot above | infix | 320 | 5 | 5 | |
| ⩨ | ⩨ | triple horizontal bar with double vertical stroke | infix | 320 | 5 | 5 | |
| ⩩ | ⩩ | triple horizontal bar with triple vertical stroke | infix | 320 | 5 | 5 | |
| ⩪ | ⩪ | tilde operator with dot above | infix | 320 | 5 | 5 | |
| ⩫ | ⩫ | tilde operator with rising dots | infix | 320 | 5 | 5 | |
| ⩬ | ⩬ | similar minus similar | infix | 320 | 5 | 5 | |
| ⩭ | ⩭ | congruent with dot above | infix | 320 | 5 | 5 | |
| ⩮ | ⩮ | equals with asterisk | infix | 320 | 5 | 5 | |
| ⩯ | ⩯ | almost equal to with circumflex accent | infix | 320 | 5 | 5 | |
| ⩰ | ⩰ | approximately equal or equal to | infix | 320 | 5 | 5 | |
| ⩱ | ⩱ | equals sign above plus sign | infix | 320 | 5 | 5 | |
| ⩲ | ⩲ | plus sign above equals sign | infix | 320 | 5 | 5 | |
| ⩳ | ⩳ | equals sign above tilde operator | infix | 320 | 5 | 5 | |
| ⩴ | ⩴ | double colon equal | infix | 320 | 5 | 5 | |
| ⩵ | ⩵ | two consecutive equals signs | infix | 320 | 5 | 5 | |
| ⩶ | ⩶ | three consecutive equals signs | infix | 320 | 5 | 5 | |
| ⩷ | ⩷ | equals sign with two dots above and two dots below | infix | 320 | 5 | 5 | |
| ⩸ | ⩸ | equivalent with four dots above | infix | 320 | 5 | 5 | |
| ⩹ | ⩹ | less-than with circle inside | infix | 320 | 5 | 5 | |
| ⩺ | ⩺ | greater-than with circle inside | infix | 320 | 5 | 5 | |
| ⩻ | ⩻ | less-than with question mark above | infix | 320 | 5 | 5 | |
| ⩼ | ⩼ | greater-than with question mark above | infix | 320 | 5 | 5 | |
| ⩽ | ⩽ | less-than or slanted equal to | infix | 320 | 5 | 5 | |
| ⩾ | ⩾ | greater-than or slanted equal to | infix | 320 | 5 | 5 | |
| ⩿ | ⩿ | less-than or slanted equal to with dot inside | infix | 320 | 5 | 5 | |
| ⪀ | ⪀ | greater-than or slanted equal to with dot inside | infix | 320 | 5 | 5 | |
| ⪁ | ⪁ | less-than or slanted equal to with dot above | infix | 320 | 5 | 5 | |
| ⪂ | ⪂ | greater-than or slanted equal to with dot above | infix | 320 | 5 | 5 | |
| ⪃ | ⪃ | less-than or slanted equal to with dot above right | infix | 320 | 5 | 5 | |
| ⪄ | ⪄ | greater-than or slanted equal to with dot above left | infix | 320 | 5 | 5 | |
| ⪅ | ⪅ | less-than or approximate | infix | 320 | 5 | 5 | |
| ⪆ | ⪆ | greater-than or approximate | infix | 320 | 5 | 5 | |
| ⪇ | ⪇ | less-than and single-line not equal to | infix | 320 | 5 | 5 | |
| ⪈ | ⪈ | greater-than and single-line not equal to | infix | 320 | 5 | 5 | |
| ⪉ | ⪉ | less-than and not approximate | infix | 320 | 5 | 5 | |
| ⪊ | ⪊ | greater-than and not approximate | infix | 320 | 5 | 5 | |
| ⪋ | ⪋ | less-than above double-line equal above greater-than | infix | 320 | 5 | 5 | |
| ⪌ | ⪌ | greater-than above double-line equal above less-than | infix | 320 | 5 | 5 | |
| ⪍ | ⪍ | less-than above similar or equal | infix | 320 | 5 | 5 | |
| ⪎ | ⪎ | greater-than above similar or equal | infix | 320 | 5 | 5 | |
| ⪏ | ⪏ | less-than above similar above greater-than | infix | 320 | 5 | 5 | |
| ⪐ | ⪐ | greater-than above similar above less-than | infix | 320 | 5 | 5 | |
| ⪑ | ⪑ | less-than above greater-than above double-line equal | infix | 320 | 5 | 5 | |
| ⪒ | ⪒ | greater-than above less-than above double-line equal | infix | 320 | 5 | 5 | |
| ⪓ | ⪓ | less-than above slanted equal above greater-than above slanted equal | infix | 320 | 5 | 5 | |
| ⪔ | ⪔ | greater-than above slanted equal above less-than above slanted equal | infix | 320 | 5 | 5 | |
| ⪕ | ⪕ | slanted equal to or less-than | infix | 320 | 5 | 5 | |
| ⪖ | ⪖ | slanted equal to or greater-than | infix | 320 | 5 | 5 | |
| ⪗ | ⪗ | slanted equal to or less-than with dot inside | infix | 320 | 5 | 5 | |
| ⪘ | ⪘ | slanted equal to or greater-than with dot inside | infix | 320 | 5 | 5 | |
| ⪙ | ⪙ | double-line equal to or less-than | infix | 320 | 5 | 5 | |
| ⪚ | ⪚ | double-line equal to or greater-than | infix | 320 | 5 | 5 | |
| ⪛ | ⪛ | double-line slanted equal to or less-than | infix | 320 | 5 | 5 | |
| ⪜ | ⪜ | double-line slanted equal to or greater-than | infix | 320 | 5 | 5 | |
| ⪝ | ⪝ | similar or less-than | infix | 320 | 5 | 5 | |
| ⪞ | ⪞ | similar or greater-than | infix | 320 | 5 | 5 | |
| ⪟ | ⪟ | similar above less-than above equals sign | infix | 320 | 5 | 5 | |
| ⪠ | ⪠ | similar above greater-than above equals sign | infix | 320 | 5 | 5 | |
| ⪡ | ⪡ | double nested less-than | infix | 320 | 5 | 5 | |
| ⪢ | ⪢ | double nested greater-than | infix | 320 | 5 | 5 | |
| ⪣ | ⪣ | double nested less-than with underbar | infix | 320 | 5 | 5 | |
| ⪤ | ⪤ | greater-than overlapping less-than | infix | 320 | 5 | 5 | |
| ⪥ | ⪥ | greater-than beside less-than | infix | 320 | 5 | 5 | |
| ⪦ | ⪦ | less-than closed by curve | infix | 320 | 5 | 5 | |
| ⪧ | ⪧ | greater-than closed by curve | infix | 320 | 5 | 5 | |
| ⪨ | ⪨ | less-than closed by curve above slanted equal | infix | 320 | 5 | 5 | |
| ⪩ | ⪩ | greater-than closed by curve above slanted equal | infix | 320 | 5 | 5 | |
| ⪪ | ⪪ | smaller than | infix | 320 | 5 | 5 | |
| ⪫ | ⪫ | larger than | infix | 320 | 5 | 5 | |
| ⪬ | ⪬ | smaller than or equal to | infix | 320 | 5 | 5 | |
| ⪭ | ⪭ | larger than or equal to | infix | 320 | 5 | 5 | |
| ⪮ | ⪮ | equals sign with bumpy above | infix | 320 | 5 | 5 | |
| ⪯ | ⪯ | precedes above single-line equals sign | infix | 320 | 5 | 5 | |
| ⪰ | ⪰ | succeeds above single-line equals sign | infix | 320 | 5 | 5 | |
| ⪱ | ⪱ | precedes above single-line not equal to | infix | 320 | 5 | 5 | |
| ⪲ | ⪲ | succeeds above single-line not equal to | infix | 320 | 5 | 5 | |
| ⪳ | ⪳ | precedes above equals sign | infix | 320 | 5 | 5 | |
| ⪴ | ⪴ | succeeds above equals sign | infix | 320 | 5 | 5 | |
| ⪵ | ⪵ | precedes above not equal to | infix | 320 | 5 | 5 | |
| ⪶ | ⪶ | succeeds above not equal to | infix | 320 | 5 | 5 | |
| ⪷ | ⪷ | precedes above almost equal to | infix | 320 | 5 | 5 | |
| ⪸ | ⪸ | succeeds above almost equal to | infix | 320 | 5 | 5 | |
| ⪹ | ⪹ | precedes above not almost equal to | infix | 320 | 5 | 5 | |
| ⪺ | ⪺ | succeeds above not almost equal to | infix | 320 | 5 | 5 | |
| ⪻ | ⪻ | double precedes | infix | 320 | 5 | 5 | |
| ⪼ | ⪼ | double succeeds | infix | 320 | 5 | 5 | |
| ⫚ | ⫚ | pitchfork with tee top | infix | 320 | 5 | 5 | |
| ⫮ | ⫮ | does not divide with reversed negation slash | infix | 320 | 5 | 5 | |
| ⫲ | ⫲ | parallel with horizontal stroke | infix | 320 | 5 | 5 | |
| ⫳ | ⫳ | parallel with tilde operator | infix | 320 | 5 | 5 | |
| ⫴ | ⫴ | triple vertical bar binary relation | infix | 320 | 5 | 5 | |
| ⫵ | ⫵ | triple vertical bar with horizontal stroke | infix | 320 | 5 | 5 | |
| ⫷ | ⫷ | triple nested less-than | infix | 320 | 5 | 5 | |
| ⫸ | ⫸ | triple nested greater-than | infix | 320 | 5 | 5 | |
| ⫹ | ⫹ | double-line slanted less-than or equal to | infix | 320 | 5 | 5 | |
| ⫺ | ⫺ | double-line slanted greater-than or equal to | infix | 320 | 5 | 5 | |
| ⯑ | ⯑ | uncertainty sign | infix | 320 | 5 | 5 | |
| ← | ← | leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ↑ | ↑ | upwards arrow | infix | 340 | 5 | 5 | stretchy |
| → | → | rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ↓ | ↓ | downwards arrow | infix | 340 | 5 | 5 | stretchy |
| ↔ | ↔ | left right arrow | infix | 340 | 5 | 5 | stretchy |
| ↕ | ↕ | up down arrow | infix | 340 | 5 | 5 | stretchy |
| ↖ | ↖ | north west arrow | infix | 340 | 5 | 5 | |
| ↗ | ↗ | north east arrow | infix | 340 | 5 | 5 | |
| ↘ | ↘ | south east arrow | infix | 340 | 5 | 5 | |
| ↙ | ↙ | south west arrow | infix | 340 | 5 | 5 | |
| ↚ | ↚ | leftwards arrow with stroke | infix | 340 | 5 | 5 | stretchy |
| ↛ | ↛ | rightwards arrow with stroke | infix | 340 | 5 | 5 | stretchy |
| ↜ | ↜ | leftwards wave arrow | infix | 340 | 5 | 5 | stretchy |
| ↝ | ↝ | rightwards wave arrow | infix | 340 | 5 | 5 | stretchy |
| ↞ | ↞ | leftwards two headed arrow | infix | 340 | 5 | 5 | stretchy |
| ↟ | ↟ | upwards two headed arrow | infix | 340 | 5 | 5 | stretchy |
| ↠ | ↠ | rightwards two headed arrow | infix | 340 | 5 | 5 | stretchy |
| ↡ | ↡ | downwards two headed arrow | infix | 340 | 5 | 5 | stretchy |
| ↢ | ↢ | leftwards arrow with tail | infix | 340 | 5 | 5 | stretchy |
| ↣ | ↣ | rightwards arrow with tail | infix | 340 | 5 | 5 | stretchy |
| ↤ | ↤ | leftwards arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ↥ | ↥ | upwards arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ↦ | ↦ | rightwards arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ↧ | ↧ | downwards arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ↨ | ↨ | up down arrow with base | infix | 340 | 5 | 5 | stretchy |
| ↩ | ↩ | leftwards arrow with hook | infix | 340 | 5 | 5 | stretchy |
| ↪ | ↪ | rightwards arrow with hook | infix | 340 | 5 | 5 | stretchy |
| ↫ | ↫ | leftwards arrow with loop | infix | 340 | 5 | 5 | stretchy |
| ↬ | ↬ | rightwards arrow with loop | infix | 340 | 5 | 5 | stretchy |
| ↭ | ↭ | left right wave arrow | infix | 340 | 5 | 5 | stretchy |
| ↮ | ↮ | left right arrow with stroke | infix | 340 | 5 | 5 | stretchy |
| ↯ | ↯ | downwards zigzag arrow | infix | 340 | 5 | 5 | |
| ↰ | ↰ | upwards arrow with tip leftwards | infix | 340 | 5 | 5 | stretchy |
| ↱ | ↱ | upwards arrow with tip rightwards | infix | 340 | 5 | 5 | stretchy |
| ↲ | ↲ | downwards arrow with tip leftwards | infix | 340 | 5 | 5 | stretchy |
| ↳ | ↳ | downwards arrow with tip rightwards | infix | 340 | 5 | 5 | stretchy |
| ↴ | ↴ | rightwards arrow with corner downwards | infix | 340 | 5 | 5 | stretchy |
| ↵ | ↵ | downwards arrow with corner leftwards | infix | 340 | 5 | 5 | stretchy |
| ↶ | ↶ | anticlockwise top semicircle arrow | infix | 340 | 5 | 5 | |
| ↷ | ↷ | clockwise top semicircle arrow | infix | 340 | 5 | 5 | |
| ↸ | ↸ | north west arrow to long bar | infix | 340 | 5 | 5 | |
| ↹ | ↹ | leftwards arrow to bar over rightwards arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ↺ | ↺ | anticlockwise open circle arrow | infix | 340 | 5 | 5 | |
| ↻ | ↻ | clockwise open circle arrow | infix | 340 | 5 | 5 | |
| ↼ | ↼ | leftwards harpoon with barb upwards | infix | 340 | 5 | 5 | stretchy |
| ↽ | ↽ | leftwards harpoon with barb downwards | infix | 340 | 5 | 5 | stretchy |
| ↾ | ↾ | upwards harpoon with barb rightwards | infix | 340 | 5 | 5 | stretchy |
| ↿ | ↿ | upwards harpoon with barb leftwards | infix | 340 | 5 | 5 | stretchy |
| ⇀ | ⇀ | rightwards harpoon with barb upwards | infix | 340 | 5 | 5 | stretchy |
| ⇁ | ⇁ | rightwards harpoon with barb downwards | infix | 340 | 5 | 5 | stretchy |
| ⇂ | ⇂ | downwards harpoon with barb rightwards | infix | 340 | 5 | 5 | stretchy |
| ⇃ | ⇃ | downwards harpoon with barb leftwards | infix | 340 | 5 | 5 | stretchy |
| ⇄ | ⇄ | rightwards arrow over leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⇅ | ⇅ | upwards arrow leftwards of downwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⇆ | ⇆ | leftwards arrow over rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⇇ | ⇇ | leftwards paired arrows | infix | 340 | 5 | 5 | stretchy |
| ⇈ | ⇈ | upwards paired arrows | infix | 340 | 5 | 5 | stretchy |
| ⇉ | ⇉ | rightwards paired arrows | infix | 340 | 5 | 5 | stretchy |
| ⇊ | ⇊ | downwards paired arrows | infix | 340 | 5 | 5 | stretchy |
| ⇋ | ⇋ | leftwards harpoon over rightwards harpoon | infix | 340 | 5 | 5 | stretchy |
| ⇌ | ⇌ | rightwards harpoon over leftwards harpoon | infix | 340 | 5 | 5 | stretchy |
| ⇍ | ⇍ | leftwards double arrow with stroke | infix | 340 | 5 | 5 | stretchy |
| ⇎ | ⇎ | left right double arrow with stroke | infix | 340 | 5 | 5 | stretchy |
| ⇏ | ⇏ | rightwards double arrow with stroke | infix | 340 | 5 | 5 | stretchy |
| ⇐ | ⇐ | leftwards double arrow | infix | 340 | 5 | 5 | stretchy |
| ⇑ | ⇑ | upwards double arrow | infix | 340 | 5 | 5 | stretchy |
| ⇒ | ⇒ | rightwards double arrow | infix | 340 | 5 | 5 | stretchy |
| ⇓ | ⇓ | downwards double arrow | infix | 340 | 5 | 5 | stretchy |
| ⇔ | ⇔ | left right double arrow | infix | 340 | 5 | 5 | stretchy |
| ⇕ | ⇕ | up down double arrow | infix | 340 | 5 | 5 | stretchy |
| ⇖ | ⇖ | north west double arrow | infix | 340 | 5 | 5 | |
| ⇗ | ⇗ | north east double arrow | infix | 340 | 5 | 5 | |
| ⇘ | ⇘ | south east double arrow | infix | 340 | 5 | 5 | |
| ⇙ | ⇙ | south west double arrow | infix | 340 | 5 | 5 | |
| ⇚ | ⇚ | leftwards triple arrow | infix | 340 | 5 | 5 | stretchy |
| ⇛ | ⇛ | rightwards triple arrow | infix | 340 | 5 | 5 | stretchy |
| ⇜ | ⇜ | leftwards squiggle arrow | infix | 340 | 5 | 5 | stretchy |
| ⇝ | ⇝ | rightwards squiggle arrow | infix | 340 | 5 | 5 | stretchy |
| ⇞ | ⇞ | upwards arrow with double stroke | infix | 340 | 5 | 5 | stretchy |
| ⇟ | ⇟ | downwards arrow with double stroke | infix | 340 | 5 | 5 | stretchy |
| ⇠ | ⇠ | leftwards dashed arrow | infix | 340 | 5 | 5 | stretchy |
| ⇡ | ⇡ | upwards dashed arrow | infix | 340 | 5 | 5 | stretchy |
| ⇢ | ⇢ | rightwards dashed arrow | infix | 340 | 5 | 5 | stretchy |
| ⇣ | ⇣ | downwards dashed arrow | infix | 340 | 5 | 5 | stretchy |
| ⇤ | ⇤ | leftwards arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ⇥ | ⇥ | rightwards arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ⇦ | ⇦ | leftwards white arrow | infix | 340 | 5 | 5 | stretchy |
| ⇧ | ⇧ | upwards white arrow | infix | 340 | 5 | 5 | stretchy |
| ⇨ | ⇨ | rightwards white arrow | infix | 340 | 5 | 5 | stretchy |
| ⇩ | ⇩ | downwards white arrow | infix | 340 | 5 | 5 | stretchy |
| ⇪ | ⇪ | upwards white arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⇫ | ⇫ | upwards white arrow on pedestal | infix | 340 | 5 | 5 | stretchy |
| ⇬ | ⇬ | upwards white arrow on pedestal with horizontal bar | infix | 340 | 5 | 5 | stretchy |
| ⇭ | ⇭ | upwards white arrow on pedestal with vertical bar | infix | 340 | 5 | 5 | stretchy |
| ⇮ | ⇮ | upwards white double arrow | infix | 340 | 5 | 5 | stretchy |
| ⇯ | ⇯ | upwards white double arrow on pedestal | infix | 340 | 5 | 5 | stretchy |
| ⇰ | ⇰ | rightwards white arrow from wall | infix | 340 | 5 | 5 | stretchy |
| ⇱ | ⇱ | north west arrow to corner | infix | 340 | 5 | 5 | |
| ⇲ | ⇲ | south east arrow to corner | infix | 340 | 5 | 5 | |
| ⇳ | ⇳ | up down white arrow | infix | 340 | 5 | 5 | stretchy |
| ⇴ | ⇴ | right arrow with small circle | infix | 340 | 5 | 5 | stretchy |
| ⇵ | ⇵ | downwards arrow leftwards of upwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⇶ | ⇶ | three rightwards arrows | infix | 340 | 5 | 5 | stretchy |
| ⇷ | ⇷ | leftwards arrow with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⇸ | ⇸ | rightwards arrow with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⇹ | ⇹ | left right arrow with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⇺ | ⇺ | leftwards arrow with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⇻ | ⇻ | rightwards arrow with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⇼ | ⇼ | left right arrow with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⇽ | ⇽ | leftwards open-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⇾ | ⇾ | rightwards open-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⇿ | ⇿ | left right open-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⌁ | ⌁ | electric arrow | infix | 340 | 5 | 5 | |
| ⍼ | ⍼ | right angle with downwards zigzag arrow | infix | 340 | 5 | 5 | |
| ⎋ | ⎋ | broken circle with northwest arrow | infix | 340 | 5 | 5 | |
| ➔ | ➔ | heavy wide-headed rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➘ | ➘ | heavy south east arrow | infix | 340 | 5 | 5 | |
| ➙ | ➙ | heavy rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➚ | ➚ | heavy north east arrow | infix | 340 | 5 | 5 | |
| ➛ | ➛ | drafting point rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➜ | ➜ | heavy round-tipped rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➝ | ➝ | triangle-headed rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➞ | ➞ | heavy triangle-headed rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➟ | ➟ | dashed triangle-headed rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➠ | ➠ | heavy dashed triangle-headed rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➡ | ➡ | black rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➥ | ➥ | heavy black curved downwards and rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➦ | ➦ | heavy black curved upwards and rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➧ | ➧ | squat black rightwards arrow | infix | 340 | 5 | 5 | |
| ➨ | ➨ | heavy concave-pointed black rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➩ | ➩ | right-shaded white rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➪ | ➪ | left-shaded white rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➫ | ➫ | back-tilted shadowed white rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➬ | ➬ | front-tilted shadowed white rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➭ | ➭ | heavy lower right-shadowed white rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➮ | ➮ | heavy upper right-shadowed white rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➯ | ➯ | notched lower right-shadowed white rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➱ | ➱ | notched upper right-shadowed white rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➲ | ➲ | circled heavy white rightwards arrow | infix | 340 | 5 | 5 | |
| ➳ | ➳ | white-feathered rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➴ | ➴ | black-feathered south east arrow | infix | 340 | 5 | 5 | |
| ➵ | ➵ | black-feathered rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➶ | ➶ | black-feathered north east arrow | infix | 340 | 5 | 5 | |
| ➷ | ➷ | heavy black-feathered south east arrow | infix | 340 | 5 | 5 | |
| ➸ | ➸ | heavy black-feathered rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➹ | ➹ | heavy black-feathered north east arrow | infix | 340 | 5 | 5 | |
| ➺ | ➺ | teardrop-barbed rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➻ | ➻ | heavy teardrop-shanked rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➼ | ➼ | wedge-tailed rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➽ | ➽ | heavy wedge-tailed rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➾ | ➾ | open-outlined rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⟰ | ⟰ | upwards quadruple arrow | infix | 340 | 5 | 5 | stretchy |
| ⟱ | ⟱ | downwards quadruple arrow | infix | 340 | 5 | 5 | stretchy |
| ⟲ | ⟲ | anticlockwise gapped circle arrow | infix | 340 | 5 | 5 | |
| ⟳ | ⟳ | clockwise gapped circle arrow | infix | 340 | 5 | 5 | |
| ⟴ | ⟴ | right arrow with circled plus | infix | 340 | 5 | 5 | stretchy |
| ⟵ | ⟵ | long leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⟶ | ⟶ | long rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⟷ | ⟷ | long left right arrow | infix | 340 | 5 | 5 | stretchy |
| ⟸ | ⟸ | long leftwards double arrow | infix | 340 | 5 | 5 | stretchy |
| ⟹ | ⟹ | long rightwards double arrow | infix | 340 | 5 | 5 | stretchy |
| ⟺ | ⟺ | long left right double arrow | infix | 340 | 5 | 5 | stretchy |
| ⟻ | ⟻ | long leftwards arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⟼ | ⟼ | long rightwards arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⟽ | ⟽ | long leftwards double arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⟾ | ⟾ | long rightwards double arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⟿ | ⟿ | long rightwards squiggle arrow | infix | 340 | 5 | 5 | stretchy |
| ⤀ | ⤀ | rightwards two-headed arrow with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤁ | ⤁ | rightwards two-headed arrow with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤂ | ⤂ | leftwards double arrow with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤃ | ⤃ | rightwards double arrow with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤄ | ⤄ | left right double arrow with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤅ | ⤅ | rightwards two-headed arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⤆ | ⤆ | leftwards double arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⤇ | ⤇ | rightwards double arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⤈ | ⤈ | downwards arrow with horizontal stroke | infix | 340 | 5 | 5 | stretchy |
| ⤉ | ⤉ | upwards arrow with horizontal stroke | infix | 340 | 5 | 5 | stretchy |
| ⤊ | ⤊ | upwards triple arrow | infix | 340 | 5 | 5 | stretchy |
| ⤋ | ⤋ | downwards triple arrow | infix | 340 | 5 | 5 | stretchy |
| ⤌ | ⤌ | leftwards double dash arrow | infix | 340 | 5 | 5 | stretchy |
| ⤍ | ⤍ | rightwards double dash arrow | infix | 340 | 5 | 5 | stretchy |
| ⤎ | ⤎ | leftwards triple dash arrow | infix | 340 | 5 | 5 | stretchy |
| ⤏ | ⤏ | rightwards triple dash arrow | infix | 340 | 5 | 5 | stretchy |
| ⤐ | ⤐ | rightwards two-headed triple dash arrow | infix | 340 | 5 | 5 | stretchy |
| ⤑ | ⤑ | rightwards arrow with dotted stem | infix | 340 | 5 | 5 | stretchy |
| ⤒ | ⤒ | upwards arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ⤓ | ⤓ | downwards arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ⤔ | ⤔ | rightwards arrow with tail with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤕ | ⤕ | rightwards arrow with tail with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤖ | ⤖ | rightwards two-headed arrow with tail | infix | 340 | 5 | 5 | stretchy |
| ⤗ | ⤗ | rightwards two-headed arrow with tail with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤘ | ⤘ | rightwards two-headed arrow with tail with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤙ | ⤙ | leftwards arrow-tail | infix | 340 | 5 | 5 | stretchy |
| ⤚ | ⤚ | rightwards arrow-tail | infix | 340 | 5 | 5 | stretchy |
| ⤛ | ⤛ | leftwards double arrow-tail | infix | 340 | 5 | 5 | stretchy |
| ⤜ | ⤜ | rightwards double arrow-tail | infix | 340 | 5 | 5 | stretchy |
| ⤝ | ⤝ | leftwards arrow to black diamond | infix | 340 | 5 | 5 | stretchy |
| ⤞ | ⤞ | rightwards arrow to black diamond | infix | 340 | 5 | 5 | stretchy |
| ⤟ | ⤟ | leftwards arrow from bar to black diamond | infix | 340 | 5 | 5 | stretchy |
| ⤠ | ⤠ | rightwards arrow from bar to black diamond | infix | 340 | 5 | 5 | stretchy |
| ⤡ | ⤡ | north west and south east arrow | infix | 340 | 5 | 5 | |
| ⤢ | ⤢ | north east and south west arrow | infix | 340 | 5 | 5 | |
| ⤣ | ⤣ | north west arrow with hook | infix | 340 | 5 | 5 | |
| ⤤ | ⤤ | north east arrow with hook | infix | 340 | 5 | 5 | |
| ⤥ | ⤥ | south east arrow with hook | infix | 340 | 5 | 5 | |
| ⤦ | ⤦ | south west arrow with hook | infix | 340 | 5 | 5 | |
| ⤧ | ⤧ | north west arrow and north east arrow | infix | 340 | 5 | 5 | |
| ⤨ | ⤨ | north east arrow and south east arrow | infix | 340 | 5 | 5 | |
| ⤩ | ⤩ | south east arrow and south west arrow | infix | 340 | 5 | 5 | |
| ⤪ | ⤪ | south west arrow and north west arrow | infix | 340 | 5 | 5 | |
| ⤫ | ⤫ | rising diagonal crossing falling diagonal | infix | 340 | 5 | 5 | |
| ⤬ | ⤬ | falling diagonal crossing rising diagonal | infix | 340 | 5 | 5 | |
| ⤭ | ⤭ | south east arrow crossing north east arrow | infix | 340 | 5 | 5 | |
| ⤮ | ⤮ | north east arrow crossing south east arrow | infix | 340 | 5 | 5 | |
| ⤯ | ⤯ | falling diagonal crossing north east arrow | infix | 340 | 5 | 5 | |
| ⤰ | ⤰ | rising diagonal crossing south east arrow | infix | 340 | 5 | 5 | |
| ⤱ | ⤱ | north east arrow crossing north west arrow | infix | 340 | 5 | 5 | |
| ⤲ | ⤲ | north west arrow crossing north east arrow | infix | 340 | 5 | 5 | |
| ⤳ | ⤳ | wave arrow pointing directly right | infix | 340 | 5 | 5 | |
| ⤴ | ⤴ | arrow pointing rightwards then curving upwards | infix | 340 | 5 | 5 | stretchy |
| ⤵ | ⤵ | arrow pointing rightwards then curving downwards | infix | 340 | 5 | 5 | stretchy |
| ⤶ | ⤶ | arrow pointing downwards then curving leftwards | infix | 340 | 5 | 5 | stretchy |
| ⤷ | ⤷ | arrow pointing downwards then curving rightwards | infix | 340 | 5 | 5 | stretchy |
| ⤸ | ⤸ | right-side arc clockwise arrow | infix | 340 | 5 | 5 | |
| ⤹ | ⤹ | left-side arc anticlockwise arrow | infix | 340 | 5 | 5 | |
| ⤺ | ⤺ | top arc anticlockwise arrow | infix | 340 | 5 | 5 | |
| ⤻ | ⤻ | bottom arc anticlockwise arrow | infix | 340 | 5 | 5 | |
| ⤼ | ⤼ | top arc clockwise arrow with minus | infix | 340 | 5 | 5 | |
| ⤽ | ⤽ | top arc anticlockwise arrow with plus | infix | 340 | 5 | 5 | |
| ⤾ | ⤾ | lower right semicircular clockwise arrow | infix | 340 | 5 | 5 | |
| ⤿ | ⤿ | lower left semicircular anticlockwise arrow | infix | 340 | 5 | 5 | |
| ⥀ | ⥀ | anticlockwise closed circle arrow | infix | 340 | 5 | 5 | |
| ⥁ | ⥁ | clockwise closed circle arrow | infix | 340 | 5 | 5 | |
| ⥂ | ⥂ | rightwards arrow above short leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⥃ | ⥃ | leftwards arrow above short rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⥄ | ⥄ | short rightwards arrow above leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⥅ | ⥅ | rightwards arrow with plus below | infix | 340 | 5 | 5 | stretchy |
| ⥆ | ⥆ | leftwards arrow with plus below | infix | 340 | 5 | 5 | stretchy |
| ⥇ | ⥇ | rightwards arrow through x | infix | 340 | 5 | 5 | stretchy |
| ⥈ | ⥈ | left right arrow through small circle | infix | 340 | 5 | 5 | stretchy |
| ⥉ | ⥉ | upwards two-headed arrow from small circle | infix | 340 | 5 | 5 | stretchy |
| ⥊ | ⥊ | left barb up right barb down harpoon | infix | 340 | 5 | 5 | stretchy |
| ⥋ | ⥋ | left barb down right barb up harpoon | infix | 340 | 5 | 5 | stretchy |
| ⥌ | ⥌ | up barb right down barb left harpoon | infix | 340 | 5 | 5 | stretchy |
| ⥍ | ⥍ | up barb left down barb right harpoon | infix | 340 | 5 | 5 | stretchy |
| ⥎ | ⥎ | left barb up right barb up harpoon | infix | 340 | 5 | 5 | stretchy |
| ⥏ | ⥏ | up barb right down barb right harpoon | infix | 340 | 5 | 5 | stretchy |
| ⥐ | ⥐ | left barb down right barb down harpoon | infix | 340 | 5 | 5 | stretchy |
| ⥑ | ⥑ | up barb left down barb left harpoon | infix | 340 | 5 | 5 | stretchy |
| ⥒ | ⥒ | leftwards harpoon with barb up to bar | infix | 340 | 5 | 5 | stretchy |
| ⥓ | ⥓ | rightwards harpoon with barb up to bar | infix | 340 | 5 | 5 | stretchy |
| ⥔ | ⥔ | upwards harpoon with barb right to bar | infix | 340 | 5 | 5 | stretchy |
| ⥕ | ⥕ | downwards harpoon with barb right to bar | infix | 340 | 5 | 5 | stretchy |
| ⥖ | ⥖ | leftwards harpoon with barb down to bar | infix | 340 | 5 | 5 | stretchy |
| ⥗ | ⥗ | rightwards harpoon with barb down to bar | infix | 340 | 5 | 5 | stretchy |
| ⥘ | ⥘ | upwards harpoon with barb left to bar | infix | 340 | 5 | 5 | stretchy |
| ⥙ | ⥙ | downwards harpoon with barb left to bar | infix | 340 | 5 | 5 | stretchy |
| ⥚ | ⥚ | leftwards harpoon with barb up from bar | infix | 340 | 5 | 5 | stretchy |
| ⥛ | ⥛ | rightwards harpoon with barb up from bar | infix | 340 | 5 | 5 | stretchy |
| ⥜ | ⥜ | upwards harpoon with barb right from bar | infix | 340 | 5 | 5 | stretchy |
| ⥝ | ⥝ | downwards harpoon with barb right from bar | infix | 340 | 5 | 5 | stretchy |
| ⥞ | ⥞ | leftwards harpoon with barb down from bar | infix | 340 | 5 | 5 | stretchy |
| ⥟ | ⥟ | rightwards harpoon with barb down from bar | infix | 340 | 5 | 5 | stretchy |
| ⥠ | ⥠ | upwards harpoon with barb left from bar | infix | 340 | 5 | 5 | stretchy |
| ⥡ | ⥡ | downwards harpoon with barb left from bar | infix | 340 | 5 | 5 | stretchy |
| ⥢ | ⥢ | leftwards harpoon with barb up above leftwards harpoon with barb down | infix | 340 | 5 | 5 | stretchy |
| ⥣ | ⥣ | upwards harpoon with barb left beside upwards harpoon with barb right | infix | 340 | 5 | 5 | stretchy |
| ⥤ | ⥤ | rightwards harpoon with barb up above rightwards harpoon with barb down | infix | 340 | 5 | 5 | stretchy |
| ⥥ | ⥥ | downwards harpoon with barb left beside downwards harpoon with barb right | infix | 340 | 5 | 5 | stretchy |
| ⥦ | ⥦ | leftwards harpoon with barb up above rightwards harpoon with barb up | infix | 340 | 5 | 5 | stretchy |
| ⥧ | ⥧ | leftwards harpoon with barb down above rightwards harpoon with barb down | infix | 340 | 5 | 5 | stretchy |
| ⥨ | ⥨ | rightwards harpoon with barb up above leftwards harpoon with barb up | infix | 340 | 5 | 5 | stretchy |
| ⥩ | ⥩ | rightwards harpoon with barb down above leftwards harpoon with barb down | infix | 340 | 5 | 5 | stretchy |
| ⥪ | ⥪ | leftwards harpoon with barb up above long dash | infix | 340 | 5 | 5 | stretchy |
| ⥫ | ⥫ | leftwards harpoon with barb down below long dash | infix | 340 | 5 | 5 | stretchy |
| ⥬ | ⥬ | rightwards harpoon with barb up above long dash | infix | 340 | 5 | 5 | stretchy |
| ⥭ | ⥭ | rightwards harpoon with barb down below long dash | infix | 340 | 5 | 5 | stretchy |
| ⥮ | ⥮ | upwards harpoon with barb left beside downwards harpoon with barb right | infix | 340 | 5 | 5 | stretchy |
| ⥯ | ⥯ | downwards harpoon with barb left beside upwards harpoon with barb right | infix | 340 | 5 | 5 | stretchy |
| ⥰ | ⥰ | right double arrow with rounded head | infix | 340 | 5 | 5 | stretchy |
| ⥱ | ⥱ | equals sign above rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⥲ | ⥲ | tilde operator above rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⥳ | ⥳ | leftwards arrow above tilde operator | infix | 340 | 5 | 5 | stretchy |
| ⥴ | ⥴ | rightwards arrow above tilde operator | infix | 340 | 5 | 5 | stretchy |
| ⥵ | ⥵ | rightwards arrow above almost equal to | infix | 340 | 5 | 5 | stretchy |
| ⥼ | ⥼ | left fish tail | infix | 340 | 5 | 5 | stretchy |
| ⥽ | ⥽ | right fish tail | infix | 340 | 5 | 5 | stretchy |
| ⥾ | ⥾ | up fish tail | infix | 340 | 5 | 5 | stretchy |
| ⥿ | ⥿ | down fish tail | infix | 340 | 5 | 5 | stretchy |
| ⧟ | ⧟ | double-ended multimap | infix | 340 | 5 | 5 | |
| ⬀ | ⬀ | north east white arrow | infix | 340 | 5 | 5 | |
| ⬁ | ⬁ | north west white arrow | infix | 340 | 5 | 5 | |
| ⬂ | ⬂ | south east white arrow | infix | 340 | 5 | 5 | |
| ⬃ | ⬃ | south west white arrow | infix | 340 | 5 | 5 | |
| ⬄ | ⬄ | left right white arrow | infix | 340 | 5 | 5 | stretchy |
| ⬅ | ⬅ | leftwards black arrow | infix | 340 | 5 | 5 | stretchy |
| ⬆ | ⬆ | upwards black arrow | infix | 340 | 5 | 5 | stretchy |
| ⬇ | ⬇ | downwards black arrow | infix | 340 | 5 | 5 | stretchy |
| ⬈ | ⬈ | north east black arrow | infix | 340 | 5 | 5 | |
| ⬉ | ⬉ | north west black arrow | infix | 340 | 5 | 5 | |
| ⬊ | ⬊ | south east black arrow | infix | 340 | 5 | 5 | |
| ⬋ | ⬋ | south west black arrow | infix | 340 | 5 | 5 | |
| ⬌ | ⬌ | left right black arrow | infix | 340 | 5 | 5 | stretchy |
| ⬍ | ⬍ | up down black arrow | infix | 340 | 5 | 5 | stretchy |
| ⬎ | ⬎ | rightwards arrow with tip downwards | infix | 340 | 5 | 5 | stretchy |
| ⬏ | ⬏ | rightwards arrow with tip upwards | infix | 340 | 5 | 5 | stretchy |
| ⬐ | ⬐ | leftwards arrow with tip downwards | infix | 340 | 5 | 5 | stretchy |
| ⬑ | ⬑ | leftwards arrow with tip upwards | infix | 340 | 5 | 5 | stretchy |
| ⬰ | ⬰ | left arrow with small circle | infix | 340 | 5 | 5 | stretchy |
| ⬱ | ⬱ | three leftwards arrows | infix | 340 | 5 | 5 | stretchy |
| ⬲ | ⬲ | left arrow with circled plus | infix | 340 | 5 | 5 | stretchy |
| ⬳ | ⬳ | long leftwards squiggle arrow | infix | 340 | 5 | 5 | stretchy |
| ⬴ | ⬴ | leftwards two-headed arrow with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⬵ | ⬵ | leftwards two-headed arrow with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⬶ | ⬶ | leftwards two-headed arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⬷ | ⬷ | leftwards two-headed triple dash arrow | infix | 340 | 5 | 5 | stretchy |
| ⬸ | ⬸ | leftwards arrow with dotted stem | infix | 340 | 5 | 5 | stretchy |
| ⬹ | ⬹ | leftwards arrow with tail with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⬺ | ⬺ | leftwards arrow with tail with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⬻ | ⬻ | leftwards two-headed arrow with tail | infix | 340 | 5 | 5 | stretchy |
| ⬼ | ⬼ | leftwards two-headed arrow with tail with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⬽ | ⬽ | leftwards two-headed arrow with tail with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⬾ | ⬾ | leftwards arrow through x | infix | 340 | 5 | 5 | stretchy |
| ⬿ | ⬿ | wave arrow pointing directly left | infix | 340 | 5 | 5 | |
| ⭀ | ⭀ | equals sign above leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⭁ | ⭁ | reverse tilde operator above leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⭂ | ⭂ | leftwards arrow above reverse almost equal to | infix | 340 | 5 | 5 | stretchy |
| ⭃ | ⭃ | rightwards arrow through greater-than | infix | 340 | 5 | 5 | stretchy |
| ⭄ | ⭄ | rightwards arrow through superset | infix | 340 | 5 | 5 | stretchy |
| ⭅ | ⭅ | leftwards quadruple arrow | infix | 340 | 5 | 5 | stretchy |
| ⭆ | ⭆ | rightwards quadruple arrow | infix | 340 | 5 | 5 | stretchy |
| ⭇ | ⭇ | reverse tilde operator above rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⭈ | ⭈ | rightwards arrow above reverse almost equal to | infix | 340 | 5 | 5 | stretchy |
| ⭉ | ⭉ | tilde operator above leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⭊ | ⭊ | leftwards arrow above almost equal to | infix | 340 | 5 | 5 | stretchy |
| ⭋ | ⭋ | leftwards arrow above reverse tilde operator | infix | 340 | 5 | 5 | stretchy |
| ⭌ | ⭌ | rightwards arrow above reverse tilde operator | infix | 340 | 5 | 5 | stretchy |
| ⭍ | ⭍ | downwards triangle-headed zigzag arrow | infix | 340 | 5 | 5 | |
| ⭎ | ⭎ | short slanted north arrow | infix | 340 | 5 | 5 | |
| ⭏ | ⭏ | short backslanted south arrow | infix | 340 | 5 | 5 | |
| ⭚ | ⭚ | slanted north arrow with hooked head | infix | 340 | 5 | 5 | |
| ⭛ | ⭛ | backslanted south arrow with hooked tail | infix | 340 | 5 | 5 | |
| ⭜ | ⭜ | slanted north arrow with horizontal tail | infix | 340 | 5 | 5 | |
| ⭝ | ⭝ | backslanted south arrow with horizontal tail | infix | 340 | 5 | 5 | |
| ⭞ | ⭞ | bent arrow pointing downwards then north east | infix | 340 | 5 | 5 | |
| ⭟ | ⭟ | short bent arrow pointing downwards then north east | infix | 340 | 5 | 5 | |
| ⭠ | ⭠ | leftwards triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭡ | ⭡ | upwards triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭢ | ⭢ | rightwards triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭣ | ⭣ | downwards triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭤ | ⭤ | left right triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭥ | ⭥ | up down triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭦ | ⭦ | north west triangle-headed arrow | infix | 340 | 5 | 5 | |
| ⭧ | ⭧ | north east triangle-headed arrow | infix | 340 | 5 | 5 | |
| ⭨ | ⭨ | south east triangle-headed arrow | infix | 340 | 5 | 5 | |
| ⭩ | ⭩ | south west triangle-headed arrow | infix | 340 | 5 | 5 | |
| ⭪ | ⭪ | leftwards triangle-headed dashed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭫ | ⭫ | upwards triangle-headed dashed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭬ | ⭬ | rightwards triangle-headed dashed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭭ | ⭭ | downwards triangle-headed dashed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭮ | ⭮ | clockwise triangle-headed open circle arrow | infix | 340 | 5 | 5 | |
| ⭯ | ⭯ | anticlockwise triangle-headed open circle arrow | infix | 340 | 5 | 5 | |
| ⭰ | ⭰ | leftwards triangle-headed arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ⭱ | ⭱ | upwards triangle-headed arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ⭲ | ⭲ | rightwards triangle-headed arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ⭳ | ⭳ | downwards triangle-headed arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ⭶ | ⭶ | north west triangle-headed arrow to bar | infix | 340 | 5 | 5 | |
| ⭷ | ⭷ | north east triangle-headed arrow to bar | infix | 340 | 5 | 5 | |
| ⭸ | ⭸ | south east triangle-headed arrow to bar | infix | 340 | 5 | 5 | |
| ⭹ | ⭹ | south west triangle-headed arrow to bar | infix | 340 | 5 | 5 | |
| ⭺ | ⭺ | leftwards triangle-headed arrow with double horizontal stroke | infix | 340 | 5 | 5 | stretchy |
| ⭻ | ⭻ | upwards triangle-headed arrow with double horizontal stroke | infix | 340 | 5 | 5 | stretchy |
| ⭼ | ⭼ | rightwards triangle-headed arrow with double horizontal stroke | infix | 340 | 5 | 5 | stretchy |
| ⭽ | ⭽ | downwards triangle-headed arrow with double horizontal stroke | infix | 340 | 5 | 5 | stretchy |
| ⮀ | ⮀ | leftwards triangle-headed arrow over rightwards triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⮁ | ⮁ | upwards triangle-headed arrow leftwards of downwards triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⮂ | ⮂ | rightwards triangle-headed arrow over leftwards triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⮃ | ⮃ | downwards triangle-headed arrow leftwards of upwards triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⮄ | ⮄ | leftwards triangle-headed paired arrows | infix | 340 | 5 | 5 | stretchy |
| ⮅ | ⮅ | upwards triangle-headed paired arrows | infix | 340 | 5 | 5 | stretchy |
| ⮆ | ⮆ | rightwards triangle-headed paired arrows | infix | 340 | 5 | 5 | stretchy |
| ⮇ | ⮇ | downwards triangle-headed paired arrows | infix | 340 | 5 | 5 | stretchy |
| ⮈ | ⮈ | leftwards black circled white arrow | infix | 340 | 5 | 5 | |
| ⮉ | ⮉ | upwards black circled white arrow | infix | 340 | 5 | 5 | |
| ⮊ | ⮊ | rightwards black circled white arrow | infix | 340 | 5 | 5 | |
| ⮋ | ⮋ | downwards black circled white arrow | infix | 340 | 5 | 5 | |
| ⮌ | ⮌ | anticlockwise triangle-headed right u-shaped arrow | infix | 340 | 5 | 5 | |
| ⮍ | ⮍ | anticlockwise triangle-headed bottom u-shaped arrow | infix | 340 | 5 | 5 | |
| ⮎ | ⮎ | anticlockwise triangle-headed left u-shaped arrow | infix | 340 | 5 | 5 | |
| ⮏ | ⮏ | anticlockwise triangle-headed top u-shaped arrow | infix | 340 | 5 | 5 | |
| ⮔ | ⮔ | four corner arrows circling anticlockwise | infix | 340 | 5 | 5 | |
| ⮕ | ⮕ | rightwards black arrow | infix | 340 | 5 | 5 | stretchy |
| ⮠ | ⮠ | downwards triangle-headed arrow with long tip leftwards | infix | 340 | 5 | 5 | stretchy |
| ⮡ | ⮡ | downwards triangle-headed arrow with long tip rightwards | infix | 340 | 5 | 5 | stretchy |
| ⮢ | ⮢ | upwards triangle-headed arrow with long tip leftwards | infix | 340 | 5 | 5 | stretchy |
| ⮣ | ⮣ | upwards triangle-headed arrow with long tip rightwards | infix | 340 | 5 | 5 | stretchy |
| ⮤ | ⮤ | leftwards triangle-headed arrow with long tip upwards | infix | 340 | 5 | 5 | stretchy |
| ⮥ | ⮥ | rightwards triangle-headed arrow with long tip upwards | infix | 340 | 5 | 5 | stretchy |
| ⮦ | ⮦ | leftwards triangle-headed arrow with long tip downwards | infix | 340 | 5 | 5 | stretchy |
| ⮧ | ⮧ | rightwards triangle-headed arrow with long tip downwards | infix | 340 | 5 | 5 | stretchy |
| ⮨ | ⮨ | black curved downwards and leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⮩ | ⮩ | black curved downwards and rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⮪ | ⮪ | black curved upwards and leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⮫ | ⮫ | black curved upwards and rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⮬ | ⮬ | black curved leftwards and upwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⮭ | ⮭ | black curved rightwards and upwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⮮ | ⮮ | black curved leftwards and downwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⮯ | ⮯ | black curved rightwards and downwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⮰ | ⮰ | ribbon arrow down left | infix | 340 | 5 | 5 | |
| ⮱ | ⮱ | ribbon arrow down right | infix | 340 | 5 | 5 | |
| ⮲ | ⮲ | ribbon arrow up left | infix | 340 | 5 | 5 | |
| ⮳ | ⮳ | ribbon arrow up right | infix | 340 | 5 | 5 | |
| ⮴ | ⮴ | ribbon arrow left up | infix | 340 | 5 | 5 | |
| ⮵ | ⮵ | ribbon arrow right up | infix | 340 | 5 | 5 | |
| ⮶ | ⮶ | ribbon arrow left down | infix | 340 | 5 | 5 | |
| ⮷ | ⮷ | ribbon arrow right down | infix | 340 | 5 | 5 | |
| ⮸ | ⮸ | upwards white arrow from bar with horizontal bar | infix | 340 | 5 | 5 | stretchy |
| ∪ | ∪ | union | infix | 360 | 4 | 4 | |
| ⊌ | ⊌ | multiset | infix | 360 | 4 | 4 | |
| ⊍ | ⊍ | multiset multiplication | infix | 360 | 4 | 4 | |
| ⊎ | ⊎ | multiset union | infix | 360 | 4 | 4 | |
| ⊔ | ⊔ | square cup | infix | 360 | 4 | 4 | |
| ⋓ | ⋓ | double union | infix | 360 | 4 | 4 | |
| ⩁ | ⩁ | union with minus sign | infix | 360 | 4 | 4 | |
| ⩂ | ⩂ | union with overbar | infix | 360 | 4 | 4 | |
| ⩅ | ⩅ | union with logical or | infix | 360 | 4 | 4 | |
| ⩊ | ⩊ | union beside and joined with union | infix | 360 | 4 | 4 | |
| ⩌ | ⩌ | closed union with serifs | infix | 360 | 4 | 4 | |
| ⩏ | ⩏ | double square union | infix | 360 | 4 | 4 | |
| ∩ | ∩ | intersection | infix | 380 | 4 | 4 | |
| ⊓ | ⊓ | square cap | infix | 380 | 4 | 4 | |
| ⋒ | ⋒ | double intersection | infix | 380 | 4 | 4 | |
| ⨟ | ⨟ | z notation schema composition | infix | 380 | 4 | 4 | |
| ⨠ | ⨠ | z notation schema piping | infix | 380 | 4 | 4 | |
| ⨡ | ⨡ | z notation schema projection | infix | 380 | 4 | 4 | |
| ⨾ | ⨾ | z notation relational composition | infix | 380 | 4 | 4 | |
| ⩀ | ⩀ | intersection with dot | infix | 380 | 4 | 4 | |
| ⩃ | ⩃ | intersection with overbar | infix | 380 | 4 | 4 | |
| ⩄ | ⩄ | intersection with logical and | infix | 380 | 4 | 4 | |
| ⩆ | ⩆ | union above intersection | infix | 380 | 4 | 4 | |
| ⩇ | ⩇ | intersection above union | infix | 380 | 4 | 4 | |
| ⩈ | ⩈ | union above bar above intersection | infix | 380 | 4 | 4 | |
| ⩉ | ⩉ | intersection above bar above union | infix | 380 | 4 | 4 | |
| ⩋ | ⩋ | intersection beside and joined with intersection | infix | 380 | 4 | 4 | |
| ⩍ | ⩍ | closed intersection with serifs | infix | 380 | 4 | 4 | |
| ⩎ | ⩎ | double square intersection | infix | 380 | 4 | 4 | |
| ⫛ | ⫛ | transversal intersection | infix | 380 | 4 | 4 | |
| + | + | plus sign | infix | 400 | 4 | 4 | |
| - | - | hyphen-minus | infix | 400 | 4 | 4 | |
| ± | ± | plus-minus sign | infix | 400 | 4 | 4 | |
| − | − | minus sign | infix | 400 | 4 | 4 | |
| ∓ | ∓ | minus-or-plus sign | infix | 400 | 4 | 4 | |
| ∔ | ∔ | dot plus | infix | 400 | 4 | 4 | |
| ∖ | ∖ | set minus | infix | 400 | 4 | 4 | |
| ∨ | ∨ | logical or | infix | 400 | 4 | 4 | |
| ∸ | ∸ | dot minus | infix | 400 | 4 | 4 | |
| ⊕ | ⊕ | circled plus | infix | 400 | 4 | 4 | |
| ⊖ | ⊖ | circled minus | infix | 400 | 4 | 4 | |
| ⊝ | ⊝ | circled dash | infix | 400 | 4 | 4 | |
| ⊞ | ⊞ | squared plus | infix | 400 | 4 | 4 | |
| ⊟ | ⊟ | squared minus | infix | 400 | 4 | 4 | |
| ⊽ | ⊽ | nor | infix | 400 | 4 | 4 | |
| ⋎ | ⋎ | curly logical or | infix | 400 | 4 | 4 | |
| ➕ | ➕ | heavy plus sign | infix | 400 | 4 | 4 | |
| ➖ | ➖ | heavy minus sign | infix | 400 | 4 | 4 | |
| ⦸ | ⦸ | circled reverse solidus | infix | 400 | 4 | 4 | |
| ⧅ | ⧅ | squared falling diagonal slash | infix | 400 | 4 | 4 | |
| ⧵ | ⧵ | reverse solidus operator | infix | 400 | 4 | 4 | |
| ⧷ | ⧷ | reverse solidus with horizontal stroke | infix | 400 | 4 | 4 | |
| ⧹ | ⧹ | big reverse solidus | infix | 400 | 4 | 4 | |
| ⧺ | ⧺ | double plus | infix | 400 | 4 | 4 | |
| ⧻ | ⧻ | triple plus | infix | 400 | 4 | 4 | |
| ⨢ | ⨢ | plus sign with small circle above | infix | 400 | 4 | 4 | |
| ⨣ | ⨣ | plus sign with circumflex accent above | infix | 400 | 4 | 4 | |
| ⨤ | ⨤ | plus sign with tilde above | infix | 400 | 4 | 4 | |
| ⨥ | ⨥ | plus sign with dot below | infix | 400 | 4 | 4 | |
| ⨦ | ⨦ | plus sign with tilde below | infix | 400 | 4 | 4 | |
| ⨧ | ⨧ | plus sign with subscript two | infix | 400 | 4 | 4 | |
| ⨨ | ⨨ | plus sign with black triangle | infix | 400 | 4 | 4 | |
| ⨩ | ⨩ | minus sign with comma above | infix | 400 | 4 | 4 | |
| ⨪ | ⨪ | minus sign with dot below | infix | 400 | 4 | 4 | |
| ⨫ | ⨫ | minus sign with falling dots | infix | 400 | 4 | 4 | |
| ⨬ | ⨬ | minus sign with rising dots | infix | 400 | 4 | 4 | |
| ⨭ | ⨭ | plus sign in left half circle | infix | 400 | 4 | 4 | |
| ⨮ | ⨮ | plus sign in right half circle | infix | 400 | 4 | 4 | |
| ⨹ | ⨹ | plus sign in triangle | infix | 400 | 4 | 4 | |
| ⨺ | ⨺ | minus sign in triangle | infix | 400 | 4 | 4 | |
| ⩒ | ⩒ | logical or with dot above | infix | 400 | 4 | 4 | |
| ⩔ | ⩔ | double logical or | infix | 400 | 4 | 4 | |
| ⩖ | ⩖ | two intersecting logical or | infix | 400 | 4 | 4 | |
| ⩗ | ⩗ | sloping large or | infix | 400 | 4 | 4 | |
| ⩛ | ⩛ | logical or with middle stem | infix | 400 | 4 | 4 | |
| ⩝ | ⩝ | logical or with horizontal dash | infix | 400 | 4 | 4 | |
| ⩡ | ⩡ | small vee with underbar | infix | 400 | 4 | 4 | |
| ⩢ | ⩢ | logical or with double overbar | infix | 400 | 4 | 4 | |
| ⩣ | ⩣ | logical or with double underbar | infix | 400 | 4 | 4 | |
| ⊻ | ⊻ | xor | infix | 420 | 4 | 4 | |
| ∑ | ∑ | n-ary summation | prefix | 440 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨊ | ⨊ | modulo two sum | prefix | 440 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨋ | ⨋ | summation with integral | prefix | 440 | 3 | 3 | largeop, symmetric |
| ⨝ | ⨝ | join | prefix | 440 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨞ | ⨞ | large left triangle operator | prefix | 440 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨁ | ⨁ | n-ary circled plus operator | prefix | 460 | 3 | 3 | largeop, movablelimits, symmetric |
| ∫ | ∫ | integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ∬ | ∬ | double integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ∭ | ∭ | triple integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ∮ | ∮ | contour integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ∯ | ∯ | surface integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ∰ | ∰ | volume integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ∱ | ∱ | clockwise integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ∲ | ∲ | clockwise contour integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ∳ | ∳ | anticlockwise contour integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨌ | ⨌ | quadruple integral operator | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨍ | ⨍ | finite part integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨎ | ⨎ | integral with double stroke | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨏ | ⨏ | integral average with slash | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨐ | ⨐ | circulation function | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨑ | ⨑ | anticlockwise integration | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨒ | ⨒ | line integration with rectangular path around pole | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨓ | ⨓ | line integration with semicircular path around pole | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨔ | ⨔ | line integration not including the pole | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨕ | ⨕ | integral around a point operator | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨖ | ⨖ | quaternion integral operator | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨗ | ⨗ | integral with leftwards arrow with hook | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨘ | ⨘ | integral with times sign | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨙ | ⨙ | integral with intersection | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨚ | ⨚ | integral with union | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨛ | ⨛ | integral with overbar | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨜ | ⨜ | integral with underbar | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⋃ | ⋃ | n-ary union | prefix | 500 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨃ | ⨃ | n-ary union operator with dot | prefix | 500 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨄ | ⨄ | n-ary union operator with plus | prefix | 500 | 3 | 3 | largeop, movablelimits, symmetric |
| ⋀ | ⋀ | n-ary logical and | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⋁ | ⋁ | n-ary logical or | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⋂ | ⋂ | n-ary intersection | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨀ | ⨀ | n-ary circled dot operator | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨂ | ⨂ | n-ary circled times operator | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨅ | ⨅ | n-ary square intersection operator | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨆ | ⨆ | n-ary square union operator | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨇ | ⨇ | two logical and operator | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨈ | ⨈ | two logical or operator | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨉ | ⨉ | n-ary times operator | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⫼ | ⫼ | large triple vertical bar operator | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⫿ | ⫿ | n-ary white vertical bar | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ∏ | ∏ | n-ary product | prefix | 540 | 3 | 3 | largeop, movablelimits, symmetric |
| ∐ | ∐ | n-ary coproduct | prefix | 540 | 3 | 3 | largeop, movablelimits, symmetric |
| @ | @ | commercial at | infix | 560 | 3 | 3 | |
| ∟ | ∟ | right angle | prefix | 580 | 0 | 0 | |
| ∠ | ∠ | angle | prefix | 580 | 0 | 0 | |
| ∡ | ∡ | measured angle | prefix | 580 | 0 | 0 | |
| ∢ | ∢ | spherical angle | prefix | 580 | 0 | 0 | |
| ⊾ | ⊾ | right angle with arc | prefix | 580 | 0 | 0 | |
| ⊿ | ⊿ | right triangle | prefix | 580 | 0 | 0 | |
| ⟀ | ⟀ | three dimensional angle | prefix | 580 | 0 | 0 | |
| ⦛ | ⦛ | measured angle opening left | prefix | 580 | 0 | 0 | |
| ⦜ | ⦜ | right angle variant with square | prefix | 580 | 0 | 0 | |
| ⦝ | ⦝ | measured right angle with dot | prefix | 580 | 0 | 0 | |
| ⦞ | ⦞ | angle with s inside | prefix | 580 | 0 | 0 | |
| ⦟ | ⦟ | acute angle | prefix | 580 | 0 | 0 | |
| ⦠ | ⦠ | spherical angle opening left | prefix | 580 | 0 | 0 | |
| ⦡ | ⦡ | spherical angle opening up | prefix | 580 | 0 | 0 | |
| ⦢ | ⦢ | turned angle | prefix | 580 | 0 | 0 | |
| ⦣ | ⦣ | reversed angle | prefix | 580 | 0 | 0 | |
| ⦤ | ⦤ | angle with underbar | prefix | 580 | 0 | 0 | |
| ⦥ | ⦥ | reversed angle with underbar | prefix | 580 | 0 | 0 | |
| ⦦ | ⦦ | oblique angle opening up | prefix | 580 | 0 | 0 | |
| ⦧ | ⦧ | oblique angle opening down | prefix | 580 | 0 | 0 | |
| ⦨ | ⦨ | measured angle with open arm ending in arrow pointing up and right | prefix | 580 | 0 | 0 | |
| ⦩ | ⦩ | measured angle with open arm ending in arrow pointing up and left | prefix | 580 | 0 | 0 | |
| ⦪ | ⦪ | measured angle with open arm ending in arrow pointing down and right | prefix | 580 | 0 | 0 | |
| ⦫ | ⦫ | measured angle with open arm ending in arrow pointing down and left | prefix | 580 | 0 | 0 | |
| ⦬ | ⦬ | measured angle with open arm ending in arrow pointing right and up | prefix | 580 | 0 | 0 | |
| ⦭ | ⦭ | measured angle with open arm ending in arrow pointing left and up | prefix | 580 | 0 | 0 | |
| ⦮ | ⦮ | measured angle with open arm ending in arrow pointing right and down | prefix | 580 | 0 | 0 | |
| ⦯ | ⦯ | measured angle with open arm ending in arrow pointing left and down | prefix | 580 | 0 | 0 | |
| && | && | multiple character operator: && | infix | 600 | 4 | 4 | |
| ∧ | ∧ | logical and | infix | 600 | 4 | 4 | |
| ⊼ | ⊼ | nand | infix | 600 | 4 | 4 | |
| ⋏ | ⋏ | curly logical and | infix | 600 | 4 | 4 | |
| ⩑ | ⩑ | logical and with dot above | infix | 600 | 4 | 4 | |
| ⩓ | ⩓ | double logical and | infix | 600 | 4 | 4 | |
| ⩕ | ⩕ | two intersecting logical and | infix | 600 | 4 | 4 | |
| ⩘ | ⩘ | sloping large and | infix | 600 | 4 | 4 | |
| ⩙ | ⩙ | logical or overlapping logical and | infix | 600 | 4 | 4 | |
| ⩚ | ⩚ | logical and with middle stem | infix | 600 | 4 | 4 | |
| ⩜ | ⩜ | logical and with horizontal dash | infix | 600 | 4 | 4 | |
| ⩞ | ⩞ | logical and with double overbar | infix | 600 | 4 | 4 | |
| ⩟ | ⩟ | logical and with underbar | infix | 600 | 4 | 4 | |
| ⩠ | ⩠ | logical and with double underbar | infix | 600 | 4 | 4 | |
| * | * | asterisk | infix | 620 | 3 | 3 | |
| . | . | full stop | infix | 620 | 3 | 3 | |
| · | · | middle dot | infix | 620 | 3 | 3 | |
| × | × | multiplication sign | infix | 620 | 3 | 3 | |
| • | • | bullet | infix | 620 | 3 | 3 | |
| ⁃ | ⁃ | hyphen bullet | infix | 620 | 3 | 3 | |
| ⁢ | | invisible times | infix | 620 | 0 | 0 | |
| ∗ | ∗ | asterisk operator | infix | 620 | 3 | 3 | |
| ∙ | ∙ | bullet operator | infix | 620 | 3 | 3 | |
| ≀ | ≀ | wreath product | infix | 620 | 3 | 3 | |
| ⊗ | ⊗ | circled times | infix | 620 | 3 | 3 | |
| ⊙ | ⊙ | circled dot operator | infix | 620 | 3 | 3 | |
| ⊛ | ⊛ | circled asterisk operator | infix | 620 | 3 | 3 | |
| ⊠ | ⊠ | squared times | infix | 620 | 3 | 3 | |
| ⊡ | ⊡ | squared dot operator | infix | 620 | 3 | 3 | |
| ⊺ | ⊺ | intercalate | infix | 620 | 3 | 3 | |
| ⋅ | ⋅ | dot operator | infix | 620 | 3 | 3 | |
| ⋆ | ⋆ | star operator | infix | 620 | 3 | 3 | |
| ⋇ | ⋇ | division times | infix | 620 | 3 | 3 | |
| ⋉ | ⋉ | left normal factor semidirect product | infix | 620 | 3 | 3 | |
| ⋊ | ⋊ | right normal factor semidirect product | infix | 620 | 3 | 3 | |
| ⋋ | ⋋ | left semidirect product | infix | 620 | 3 | 3 | |
| ⋌ | ⋌ | right semidirect product | infix | 620 | 3 | 3 | |
| ⌅ | ⌅ | projective | infix | 620 | 3 | 3 | |
| ⌆ | ⌆ | perspective | infix | 620 | 3 | 3 | |
| ⧆ | ⧆ | squared asterisk | infix | 620 | 3 | 3 | |
| ⧈ | ⧈ | squared square | infix | 620 | 3 | 3 | |
| ⧔ | ⧔ | times with left half black | infix | 620 | 3 | 3 | |
| ⧕ | ⧕ | times with right half black | infix | 620 | 3 | 3 | |
| ⧖ | ⧖ | white hourglass | infix | 620 | 3 | 3 | |
| ⧗ | ⧗ | black hourglass | infix | 620 | 3 | 3 | |
| ⧢ | ⧢ | shuffle product | infix | 620 | 3 | 3 | |
| ⨝ | ⨝ | join | infix | 620 | 3 | 3 | |
| ⨞ | ⨞ | large left triangle operator | infix | 620 | 3 | 3 | |
| ⨯ | ⨯ | vector or cross product | infix | 620 | 3 | 3 | |
| ⨰ | ⨰ | multiplication sign with dot above | infix | 620 | 3 | 3 | |
| ⨱ | ⨱ | multiplication sign with underbar | infix | 620 | 3 | 3 | |
| ⨲ | ⨲ | semidirect product with bottom closed | infix | 620 | 3 | 3 | |
| ⨳ | ⨳ | smash product | infix | 620 | 3 | 3 | |
| ⨴ | ⨴ | multiplication sign in left half circle | infix | 620 | 3 | 3 | |
| ⨵ | ⨵ | multiplication sign in right half circle | infix | 620 | 3 | 3 | |
| ⨶ | ⨶ | circled multiplication sign with circumflex accent | infix | 620 | 3 | 3 | |
| ⨷ | ⨷ | multiplication sign in double circle | infix | 620 | 3 | 3 | |
| ⨻ | ⨻ | multiplication sign in triangle | infix | 620 | 3 | 3 | |
| ⨼ | ⨼ | interior product | infix | 620 | 3 | 3 | |
| ⨽ | ⨽ | righthand interior product | infix | 620 | 3 | 3 | |
| ⨿ | ⨿ | amalgamation or coproduct | infix | 620 | 3 | 3 | |
| ⩐ | ⩐ | 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 | |
| ÷ | ÷ | division sign | infix | 680 | 4 | 4 | |
| ⁄ | ⁄ | fraction slash | infix | 680 | 4 | 4 | |
| ∕ | ∕ | division slash | infix | 680 | 4 | 4 | |
| ∶ | ∶ | ratio | infix | 680 | 4 | 4 | |
| ⊘ | ⊘ | circled division slash | infix | 680 | 4 | 4 | |
| ➗ | ➗ | heavy division sign | infix | 680 | 4 | 4 | |
| ⟋ | ⟋ | mathematical rising diagonal | infix | 680 | 3 | 3 | |
| ⟍ | ⟍ | mathematical falling diagonal | infix | 680 | 3 | 3 | |
| ⦼ | ⦼ | circled anticlockwise-rotated division sign | infix | 680 | 4 | 4 | |
| ⧄ | ⧄ | squared rising diagonal slash | infix | 680 | 4 | 4 | |
| ⧶ | ⧶ | solidus with overbar | infix | 680 | 4 | 4 | |
| ⧸ | ⧸ | big solidus | infix | 680 | 4 | 4 | |
| ⨸ | ⨸ | circled division sign | infix | 680 | 4 | 4 | |
| ⫶ | ⫶ | triple colon operator | infix | 680 | 4 | 4 | |
| ⫻ | ⫻ | triple solidus binary relation | infix | 680 | 4 | 4 | |
| ⫽ | ⫽ | double solidus operator | infix | 680 | 4 | 4 | |
| ⫾ | ⫾ | white vertical bar | infix | 680 | 3 | 3 | |
| ⩤ | ⩤ | z notation domain antirestriction | infix | 700 | 3 | 3 | |
| ⩥ | ⩥ | z notation range antirestriction | infix | 700 | 3 | 3 | |
| + | + | plus sign | prefix | 720 | 0 | 0 | |
| - | - | hyphen-minus | prefix | 720 | 0 | 0 | |
| ± | ± | plus-minus sign | prefix | 720 | 0 | 0 | |
| ∁ | ∁ | complement | prefix | 720 | 0 | 0 | |
| ∆ | ∆ | increment | infix | 720 | 0 | 0 | |
| − | − | minus sign | prefix | 720 | 0 | 0 | |
| ∓ | ∓ | minus-or-plus sign | prefix | 720 | 0 | 0 | |
| ➕ | ➕ | heavy plus sign | prefix | 720 | 0 | 0 | |
| ➖ | ➖ | heavy minus sign | prefix | 720 | 0 | 0 | |
| ⫝̸ | ⫝̸ | forking | infix | 740 | 3 | 3 | |
| ⫝ | ⫝ | nonforking | infix | 740 | 3 | 3 | |
| ** | ** | multiple character operator: ** | infix | 760 | 3 | 3 | |
| ⅅ | ⅅ | double-struck italic capital d | prefix | 780 | 3 | 0 | |
| ⅆ | ⅆ | double-struck italic small d | prefix | 780 | 3 | 0 | |
| ∂ | ∂ | partial differential | prefix | 780 | 3 | 0 | |
| ∇ | ∇ | nabla | prefix | 780 | 0 | 0 | |
| <> | <> | 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 | |
| ′ | ′ | prime | postfix | 820 | 0 | 0 | |
| ? | ? | question mark | infix | 840 | 3 | 3 | |
| √ | √ | square root | prefix | 860 | 3 | 0 | |
| ∛ | ∛ | cube root | prefix | 860 | 3 | 0 | |
| ∜ | ∜ | fourth root | prefix | 860 | 3 | 0 | |
| ⁡ | | function application | infix | 880 | 0 | 0 | |
| ∘ | ∘ | ring operator | infix | 900 | 3 | 3 | |
| ⊚ | ⊚ | circled ring operator | infix | 900 | 3 | 3 | |
| ⋄ | ⋄ | diamond operator | infix | 900 | 3 | 3 | |
| ⧇ | ⧇ | squared small circle | infix | 900 | 3 | 3 | |
| " | " | quotation mark | postfix | 920 | 0 | 0 | |
| & | & | 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 |
| ¨ | ¨ | diaeresis | postfix | 920 | 0 | 0 | |
| ¯ | ¯ | macron | postfix | 920 | 0 | 0 | stretchy |
| ° | ° | degree sign | postfix | 920 | 0 | 0 | |
| ² | ² | superscript two | postfix | 920 | 0 | 0 | |
| ³ | ³ | superscript three | postfix | 920 | 0 | 0 | |
| ´ | ´ | acute accent | postfix | 920 | 0 | 0 | |
| ¸ | ¸ | cedilla | postfix | 920 | 0 | 0 | |
| ¹ | ¹ | superscript one | postfix | 920 | 0 | 0 | |
| ˆ | ˆ | modifier letter circumflex accent | postfix | 920 | 0 | 0 | stretchy |
| ˇ | ˇ | caron | postfix | 920 | 0 | 0 | stretchy |
| ˉ | ˉ | modifier letter macron | postfix | 920 | 0 | 0 | stretchy |
| ˊ | ˊ | modifier letter acute accent | postfix | 920 | 0 | 0 | |
| ˋ | ˋ | modifier letter grave accent | postfix | 920 | 0 | 0 | |
| ˍ | ˍ | modifier letter low macron | postfix | 920 | 0 | 0 | stretchy |
| ˘ | ˘ | breve | postfix | 920 | 0 | 0 | |
| ˙ | ˙ | dot above | postfix | 920 | 0 | 0 | |
| ˚ | ˚ | ring above | postfix | 920 | 0 | 0 | |
| ˜ | ˜ | small tilde | postfix | 920 | 0 | 0 | stretchy |
| ˝ | ˝ | double acute accent | postfix | 920 | 0 | 0 | |
| ˷ | ˷ | modifier letter low tilde | postfix | 920 | 0 | 0 | stretchy |
| ̂ | ̂ | combining circumflex accent | postfix | 920 | 0 | 0 | stretchy |
| ̑ | ̑ | combining inverted breve | postfix | 920 | 0 | 0 | |
| ‚ | ‚ | single low-9 quotation mark | postfix | 920 | 0 | 0 | |
| ‛ | ‛ | single high-reversed-9 quotation mark | postfix | 920 | 0 | 0 | |
| „ | „ | double low-9 quotation mark | postfix | 920 | 0 | 0 | |
| ‟ | ‟ | double high-reversed-9 quotation mark | postfix | 920 | 0 | 0 | |
| ″ | ″ | double prime | postfix | 920 | 0 | 0 | |
| ‴ | ‴ | triple prime | postfix | 920 | 0 | 0 | |
| ‵ | ‵ | reversed prime | postfix | 920 | 0 | 0 | |
| ‶ | ‶ | reversed double prime | postfix | 920 | 0 | 0 | |
| ‷ | ‷ | reversed triple prime | postfix | 920 | 0 | 0 | |
| ‾ | ‾ | overline | postfix | 920 | 0 | 0 | stretchy |
| ⁗ | ⁗ | quadruple prime | postfix | 920 | 0 | 0 | |
| ⁤ | | invisible plus | infix | 920 | 0 | 0 | |
| ⃛ | ⃛ | combining three dots above | postfix | 920 | 0 | 0 | |
| ⃜ | ⃜ | combining four dots above | postfix | 920 | 0 | 0 | |
| ⌢ | ⌢ | frown | postfix | 920 | 0 | 0 | stretchy |
| ⌣ | ⌣ | smile | postfix | 920 | 0 | 0 | stretchy |
| ⎴ | ⎴ | top square bracket | postfix | 920 | 0 | 0 | stretchy |
| ⎵ | ⎵ | bottom square bracket | postfix | 920 | 0 | 0 | stretchy |
| ⏍ | ⏍ | square foot | postfix | 920 | 0 | 0 | |
| ⏜ | ⏜ | top parenthesis | postfix | 920 | 0 | 0 | stretchy |
| ⏝ | ⏝ | bottom parenthesis | postfix | 920 | 0 | 0 | stretchy |
| ⏞ | ⏞ | top curly bracket | postfix | 920 | 0 | 0 | stretchy |
| ⏟ | ⏟ | bottom curly bracket | postfix | 920 | 0 | 0 | stretchy |
| ⏠ | ⏠ | top tortoise shell bracket | postfix | 920 | 0 | 0 | stretchy |
| ⏡ | ⏡ | bottom tortoise shell bracket | postfix | 920 | 0 | 0 | stretchy |
| 𞻰 | 𞻰 | arabic mathematical operator meem with hah with tatweel | postfix | 920 | 0 | 0 | stretchy |
| 𞻱 | 𞻱 | arabic mathematical operator hah with dal | postfix | 920 | 0 | 0 | stretchy |
| _ | _ | low line | infix | 940 | 0 | 0 |
オープン・ウェブ・プラットフォームの重要な要素として、W3C の MathML 規格は、コンテンツ作成者や開発者がウェブ上で数学表現を組み込み、その基礎となる構造的および意味的情報を他の技術に公開するという前例のない可能性を持っています。これらの情報公開を可能にすることはアクセシビリティの基盤であり、デジタル数学コンテンツを機械可読、検索可能、再利用可能にするための道を提供します
ウェブ上でアクセシブルなデジタルコンテンツを作成するための国際的に受け入れられた基準および基本原則は、W3C の Web Content Accessibility Guidelines [WCAG21] に示されています。これらの原則を数学情報を含むデジタルコンテンツに拡張するにあたり、WCAG は MathML を使用する場所におけるアクセシビリティを定義するための有益な枠組みを提供します。
現在の WCAG 指針は、MathML として符号化された数学コンテンツを障害を持つユーザーが利用できるようにする方法について直接的な指示を提供していないため、本仕様は MathML を含むデジタルコンテンツにこれらの指針を適用する方法を定義します。
これらの推奨事項に従う利点の一つは、デジタル数学コンテンツが既に世界中で広く使用されているウェブコンテンツのアクセシビリティ要件を満たすのに役立つことです。さらに、デジタル数学教材がアクセシブルであることを確保することで、障害の有無にかかわらず読者層を拡大することができます。
ベストプラクティスに関する追加の指針は、時間の経過とともに [MathML-Notes] にて作成されます。これらをノートとして配置することで、アクセシビリティの慣行は MathML の仕様とは独立して適応・進化できるようになります。ノートは過去・現在・将来の MathML バージョン、さらに MathML-Core と完全な MathML 規格の両方に関する考慮事項にも使用されることを意図しています。別個の文書というアプローチにより、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 を使用することで、開発者がこのような自動アクセシブルなグラフ作成ユーティリティをウェブサイトに適用する可能性が生まれます。
ユーザーエージェント(例:ウェブブラウザ)は、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 で mathcolor や mathbackground
属性を使って色を表現している場合、それらが意味を表現するために使用されているならば、それらの要素を含める必要があります。
属性 alttext
は標準の音声ルール処理を上書きするために使用できます(例:標準化された評価でしばしば行われるように)。しかし、この方法には多くの制約があります。例えば、式の発話全体をタグ内に記述しなければならないため、著者が気にしている小さな部分だけを指定することが難しいことがあります。さらに、alttext
はプレーンテキストに限定されるため、音声エンジンに渡すための一時停止やピッチ変化といった音声キューを含めることはできません。また、alttext 属性は MathML
ツリーへの直接の連結を持たないため、式の同期ハイライトを扱う方法がなくなり、ユーザーが式を通じてナビゲートする方法もなくなります。
初期のドラフトの MathML Accessibility API Mappings
1.0
が利用可能です。本仕様は製品内で MathML
のアクセシビリティを担当するユーザーエージェント開発者を対象としています。この仕様の目的は、各支援技術が期待するロール、状態、およびプロパティを保持した状態で MathML
コンテンツを受け取ることにより、MathML コンテンツのアクセシビリティを最大化することです。ARIA ラベルや aria-labeledby
の配置は、点字生成を上書きしてしまうため MathML では適切ではありません。
非規範とマークされた節に加えて、この仕様の著作ガイドライン、図、例、および注はすべて非規範です。本仕様の他のすべての部分は規範的です。
キーワード 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 を維持しています。適合性に関する活動やリソースの最新情報についてはこの文書を参照してください。
有効な MathML 式は、MathML RelaxNG スキーマと本仕様で与えられる追加要件によって定義される XML 構成です。
ここでは「MathML プロセッサ」という表現を、有効な MathML 式を受け入れたり生成したりできる任意のアプリケーションを指すものとして用います。有効な MathML 式の両方を受け入れ生成する MathML プロセッサは、MathML を「ラウンドトリップ」できる可能性があります。最も単純なラウンドトリップの例は、修正することなく新しいファイルに書き出すエディタかもしれません。
MathML 適合性には次の三つの形式が規定されています:
MathML 入力適合プロセッサは、すべての有効な MathML 式を受け入れなければなりません;それはすべての MathML 式を適切にアプリケーション固有の形式に変換し、ネイティブなアプリケーション操作を行えるようにするべきです。
MathML 出力適合プロセッサは、有効な MathML を生成し、すべてのアプリケーション固有データを適切に表現しなければなりません。
MathML ラウンドトリップ適合プロセッサは、MathML の等価性を保持しなければなりません。二つの MathML 式が「等価」であるとは、かつその時に限り、任意の関連する状況下で任意の MathML プロセッサによって両式が同じ解釈(MathML スキーマと仕様で述べられる通り)を持つ場合を指します。本書の別箇所で要素ごとの等価性が議論されています。
上記の定義を超えて、MathML 規格は個々のプロセッサに対して要求を課していません。開発者を案内するために、MathML 規格は助言的な資料を含んでいます;例えば、3. Presentation Markup 全体に多くの推奨レンダリング規則があります。しかし一般に、開発者は自分の特定のアプリケーションにとってどのような種類の MathML 実装が意味を持つかを解釈するための自由度が与えられています。
適合性と意味ある実装の解釈の違いを明確にするために、いくつか例を考えます:
MathML 入力適合であるためには、バリデーティングパーサーは式を受け入れ、有効な MathML であれば「true」を返すだけで十分です。特に、MathML 式をレンダリングしたり解釈したりする必要はありません。
コンテンツマークアップに基づく MathML の計算代数インターフェースは、すべてのプレゼンテーションマークアップを無視する選択をするかもしれません。インターフェースがプレゼンテーションマークアップを含む有効なすべての MathML 式を受け入れる限り、そのアプリケーションを技術的に MathML 入力適合と特徴づけることは正当です。
ある方程式エディタは、いくつかの式を MathML として容易にエクスポートできる内部データ表現を持ち、他の式はできないかもしれません。エディタが単純な式を有効な MathML としてエクスポートし、変換に失敗した他の式については変換が失敗した旨のエラーメッセージを表示するだけなら、それでも技術的には MathML 出力適合と見なされます。
前述の例が示すように、有用であるためには MathML 適合性の概念はしばしば言語のどの部分が意味ある実装を持っているか、という判断を含みます。これは、特定のアプリケーションが MathML のどの部分を意味的に実装しているかを定量的に示す仕組みを必要とします。その目的のために、W3C Math Working Group は テスト スイート を提供しています。
テストスイートは、多数の MathML 式で構成され、それらはマークアップのカテゴリおよびテスト対象の支配的な MathML 要素によって分類されています。このテストスイートの存在によって、例えば前述の仮想的な計算代数インターフェースが、テストスイートのコンテンツマークアップのセクションに含まれるすべての式を含む MathML コンテンツマークアップを意味的に実装していると述べることで定量的に特徴付けることが可能になります。
MathML の一部を意味ある形で実装しないことを選択する開発者には、テストスイートの特定カテゴリを参照して省略する部分を列挙することを推奨します。
MathML 出力適合プロセッサ向けに、現在利用可能な MathML を検証するツールに関する情報は W3C MathML Validator にて管理されています。 MathML 出力適合プロセッサの開発者は、このバリデータを使って出力を検証することを推奨します。
アプリケーションが実装している MathML 仕様の部分を検証したい MathML アプリケーションの顧客は、意思決定プロセスの一部としてテストスイートを使用することを推奨します。
MathML 4.0 には以前の MathML の多くの機能が含まれており、それらのいくつかは現在非推奨となっています。次の点は、機能が非推奨であることの意味を定義し、非推奨機能と現在の MathML 適合性との関係を明確にします。
MathML 出力適合であるためには、オーサリングツールは非推奨機能を含む MathML マークアップを生成してはなりません。
MathML 入力適合であるためには、レンダリングおよび読み上げツールは、MathML 1.x または MathML 2.x と適合していると見なされるために非推奨機能をサポートする必要があります。MathML 4.0 に適合していると見なされるために非推奨機能をサポートする必要はありません。しかし、すべてのツールは可能な限り古い形式をサポートすることが奨励されます。
MathML ラウンドトリップ適合であるためには、プロセッサは非推奨機能を含まない式についてのみ 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 等)を監視し、より標準化されたマークアップが利用可能になった際に文書を更新することが奨励されます。
MathML
入力適合のアプリケーションが、不正な属性の数や型、または子スキーマを持つ一つ以上の要素を含む入力を受け取った場合でも、可能な限り理解可能な方法で入力全体をレンダリングするよう試みるべきです。すなわち、有効であった入力部分は通常通りレンダリングし、不正な式の代わりにエラーメッセージを(merror
要素で囲まれているかのようにレンダリングして表示するべきです。
エディタやトランスレータのような MathML 出力適合アプリケーションは、入力のエラーを示すために merror
式を生成することを選択できます。これは、技術的には有効だが誤りを含む可能性のある MathML を生成するよりも通常好ましいです。
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 マークアップの中核的慣習を回避する抜け穴として乱用することを促すものではありません。著者およびアプリケーションは非標準属性を慎重に使用すべきです。
ウェブプラットフォームにおける MathML の実装は [MathML-Core] を実装すべきであり、 したがってそこで指定されている プライバシーに関する考慮事項 が適用されます。
ウェブプラットフォームにおける MathML の実装は [MathML-Core] を実装すべきであり、 したがってそこで指定されている セキュリティに関する考慮事項 が適用されます。
場合によっては、MathML 式が XML として解析されることがあります。その場合には XML 解析のセキュリティに関する考慮事項が適用されます。これは [RFC7303] に説明されています。
以下の表は、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 |
以下の表は特定の演算子要素に指定できる属性を一覧にしたものです。さらに、すべての演算子要素は CommonAtt および DefEncAtt 属性を許可します。
要素の 名前 は最初の列にあり、演算子を説明する節へのリンクを提供します。
属性 列は演算子要素に指定できる属性名を示します。
値 列は演算子要素に特有の属性に指定できる値を示します。
| 名前 | 属性 | 値 |
|---|---|---|
| tendsto | type? |
string |
| interval | closure? |
open | closed |
open-closed | closed-open
|
| set | type? |
set | multiset |
text |
| list | order |
numeric | lexicographic |
要素の 名前 は最初の列にあり、演算子を説明する節へのリンクを提供します。
シンボル 列は、演算子をエンコードするために使用できる csymbol の一覧を示し、Strict Content MathML
Transformation Algorithm で使用される OpenMath シンボルへのリンクを提供します。
クラス 列は演算子クラスを指定します。これは演算子が期待する引数の数を示し、場合によっては 4.3.4 Operator Classes に記述されているように 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 に変換するには、以下の規則を順に入力式に適用し、対象となる構成要素がすべて除去されるまで繰り返します:
非 Strict な bind を書き換え、非推奨要素を除去する:
結合式の外側の bind タグは、修飾子があるか複数の子を持つ場合に apply
に変更します。これにより、後続の規則を場合分けなしに非 Strict な結合式に適用できるようにしてアルゴリズムを簡素化します。なお、このステップで導入された apply 要素は、後の規則で再び bind 要素に変更されることに注意してください。
修飾子の慣用的使用に対する特別ケース規則を適用する:
変数の束縛状態を明確にするために、微分を規則 Rewrite: diff、Rewrite: nthdiff、 および Rewrite: partialdiffdegree に従って書き換えます。
積分については、束縛変数と自由変数の状態、ならびに積分範囲が lowlimit/uplimit の対で与えられている場合の方向を曖昧さなくするために、規則 Rewrite:
int, Rewrite: defint
および Rewrite: defint limits を適用して書き換えます。
極限は Rewrite: tendsto および Rewrite: limits condition に従って書き換えます。
総和と総積は 4.3.5.2 N-ary Sum
<sum/> および 4.3.5.3 N-ary Product
<product/> に記述された通りに書き換えます。
根(ルート)は F.2.5 Roots に記述されている通りに書き換えます。
対数は F.2.6 Logarithms に記述されている通りに書き換えます。
モーメントは F.2.7 Moments に記述されている通りに書き換えます。
修飾子を domainofapplication に書き換える:
これらの規則は、bvar および修飾子を用いるすべての apply 構成を、一般的な
domainofapplication 修飾子のみを用いる形に書き換えます。
区間:interval および lowlimit/uplimit として与えられた修飾子は、Rewrite: interval qualifier
に従って整数の区間へ書き換えます。
複数の condition:複数の condition 修飾子はそれらの論理積を取ることで単一のものへ書き換えます。得られた複合的な condition は規則 Rewrite:
condition に従って domainofapplication に書き換えられます。
複数の domainofapplication:複数の domainofapplication 修飾子は、指定されたドメインの交差を取ることで単一のものに書き換えます。
コンテナマークアップを正規化する:
集合およびリストは規則 Rewrite: n-ary setlist domainofapplication に従って書き換えます。
区間、ベクトル、行列、および行列行は F.3.1
Intervals、および 4.3.5.8 N-ary Matrix Constructors:
<vector/>,
<matrix/>,
<matrixrow/>
に記述されている通りに書き換えます。なお、修飾子は既に domainofapplication
に書き換えられており、ステップ6 でさらに書き換えられることに注意してください。
ラムダ式は規則 Rewrite: lambda および Rewrite: lambda domainofapplication に従って書き換えます。
分岐関数(piecewise)は 4.3.10.5
Piecewise declaration <piecewise>, <piece>, <otherwise> に記述されている通りに書き換えます。
domainofapplication 修飾子を用いる演算子に対する特別ケース規則を適用する:
このステップでは、4.3 Content
MathML for
Specific Structures で導入された演算子に関する特別ケースを扱います。考慮すべき特別ケースにはいくつかのクラスがあります:
規則 Rewrite: n-ary unary set、Rewrite:
n-ary unary domainofapplication、および Rewrite: n-ary unary single に従って、min、max、mean 等の n-ary/ unary 演算子を書き換えます。
forall および exists のような量化子が domainofapplication とともに使用されている場合は、規則 Rewrite: quantifier に従って含意と論理積を用いる式へ書き換えます。
domainofapplication 要素(bvar
の有無を問わず)を用いる積分は、規則 Rewrite: int および
Rewrite: defint に従って書き換えます。
domainofapplication 要素(bvar
の有無を問わず)を用いる総和および総積は、4.3.5.2
N-ary Sum
<sum/> および 4.3.5.3 N-ary Product
<product/> に記述されている通りに書き換えます。
domainofapplication を除去する:この段階では、任意の apply は高々一つの domainofapplication
子を持ち、特別ケースは扱われています。domainofapplication は Strict Content MathML
ではないため、書き換えられます
もし apply が bvar 子を含まない場合は、規則 Rewrite: restriction によって制限関数の適用へ書き換えます。
関係に用いられる場合は、規則 Rewrite: n-ary relations および Rewrite: n-ary relations bvar に従って、predicate_on_list シンボルの適用へ書き換えます。
一般の n-ary 演算子については、一般規則 Rewrite: n-ary domainofapplication に従って、apply_to_list シンボルを用いる構成へ書き換えます。
束縛変数を持つ apply に対しては、規則 Rewrite:
apply bvar domainofapplication に従って、suchthat シンボル(set1 コンテント辞書)を用いる構成へ書き換えます。
非 Strict なトークン要素を書き換える:
type 属性が e-notation、rational、complex-cartesian、complex-polar、または constant のいずれかである cn
要素として表された数値を、規則 Rewrite: cn sep、Rewrite: cn based_integer、
および Rewrite: cn constant に従って厳密な cn に書き換えます。
ci、csymbol、またはプレゼンテーション MathML を含む
cn を、規則 Rewrite: cn presentation mathml
および Rewrite: ci presentation
mathml(および csymbol に対する同様の規則)に従って semantics 要素に書き換えます。
演算子を写す:残っている 4.3
Content MathML for
Specific Structures に定義される任意の演算子は、規則 Rewrite: element
に従って、構文表で特定されたシンボルを参照する csymbol
に書き換えられます。各演算子要素の説明で述べられているように、適切なシンボルの選択を決定するために特別なケース規則が必要なものがあります。注目すべきいくつかのケースは次のとおりです:
非 Strict な属性を書き換える:
type 属性を書き換える:
この時点で、type を受け入れるすべての要素は、ci と csymbol を除いて、属性を持たない Strict
Content マークアップの同等物へ書き換えられているはずです。ここでは型情報が演算子シンボルの選択に反映されています。 現在残っている ci および csymbol 要素の type 属性は、規則 Rewrite: ci type annotation および Rewrite: csymbol type
annotation に従って semantics を用いる厳密な式へ書き換えます。
definitionURL および encoding
属性を書き換える:
csymbol 要素の definitionURL と
encoding 属性がコンテント辞書への参照として解釈できる場合(詳細は 4.2.3.2
Non-Strict uses of <csymbol> を参照)、これらを
cd 属性でコンテント辞書を参照する形に書き換えます。
属性を書き換える:Strict マークアップで許されない属性を持つ要素は、規則 Rewrite:
attributes に従って、最初の子にその属性を除いた要素を持ち、残りの属性を annotation
要素として持つ semantics 構成へ書き換えます。
4.2.6 結合と束縛変数 <bind>
および <bvar> に記述されているように、bind 要素の厳密な形式は修飾子を許容せず、非 bvar の子要素をひとつだけ許可します。
修飾子を持つか複数の非 bvar 子要素を持つ各結合式において、bind タグを apply に置き換えてください。
このステップは、後続の規則が apply を用いて非厳密な結合式を修正する際に、bind
を使った非厳密な結合式に対して別途場合分けを行わずに適用できるようにします。
後の規則は、これらの apply を用いた非厳密な結合式を再び厳密な bind
要素に戻します。
修飾子の慣用的な使用に対する特別ケース規則を適用してください。
変数の束縛状態を明示するために、規則 Rewrite: diff、 Rewrite: nthdiff、 および Rewrite: partialdiffdegree を用いて微分を 書き換えてください。
微分演算子に関して重要なのは、式の場合、その変数は実際には微分演算子によって束縛されていないという点を認識することです。
次の式を変換します
<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 シンボルを使用してください。
<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
シンボルに対応します。二つの引数は直接対応しますので特別な規則は不要です。
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>
束縛変数や積分範囲が lowlimit/uplimit
の対で与えられている場合の方向性などの曖昧さを解消するため、規則 Rewrite: int,
Rewrite: defint および Rewrite: defint limits を用いて積分を
書き換えてください。
関数に適用される不定積分としての int 要素は、calculus1 の int シンボルに対応します。定積分として関数に適用される場合は defint シンボルに対応します。
束縛変数が存在しない場合、不定積分の厳密マークアップへの翻訳は単純です。束縛変数がある場合は次の規則を使用してください。
不定積分を変換します。ここで
<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>
ただし、定積分のために積分領域を指定するために使用され得る他の種類の修飾子の翻訳に関しては、後続の規則に追加の注記がありますので参照してください。
束縛変数が存在する場合、一般には状況はより複雑であり、以下の規則が使用されます。
定積分を変換します。ここで
<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
の対を持つ定積分は、積分範囲に向き(オリエンテーション)があるという直観を強く伴い、下端と上端を入れ替えると結果の符号が変わることに注意してください。これに対処するため、次の特別な翻訳規則を使用してください:
<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>
規則 Rewrite: tendsto と Rewrite: limits condition を用いて極限を 書き換えてください。
tendsto を用いて極限を修飾する用法は、規則 Rewrite:
limits condition に従って式を厳密な Content MathML に書き表すことで形式的に定義されます。本仕様では他のより慣用的な tendsto の用法は形式的に定義されていません。これらのケースを厳密な Content MathML に書き換える際には、tendsto を下記のように注釈付き識別子として書き換えるべきです。
<tendsto/>
の厳密等価は
<semantics>
<ci>tendsto</ci>
<annotation-xml encoding="MathML-Content">
<tendsto/>
</annotation-xml>
</semantics>
<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> は束縛変数を含む任意の式であり、選択するシンボル
null は tendsto 要素の type
属性に依存することに注意してください(詳細は 4.3.10.4
Limits <limit/> を参照)。
総和と総積は 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 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>
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>
4.3.7.8 Moment <moment/>, <momentabout> に記述されている通りにモーメントを
書き換えてください。
厳密なマークアップに書き換えるとき、moment
シンボル(s_data1 コンテント辞書由来)は、moment 要素が明示的な引数リストに適用される場合に使われます。分布に適用される場合は s_dist1 の moment
シンボルを使用すべきです。どちらの演算子も最初の引数に次数、第二引数に点、続いてデータ集合または確率変数を取ります。
<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>
修飾子をdomainofapplicationに書き換える。
これらの規則は、bvarや修飾子を用いるすべてのapply構成を、
一般的なdomainofapplication修飾子のみを用いる形に書き換える。
修飾子がintervalおよび
lowlimit/uplimit
として与えられている場合、それらを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修飾子を置き換える場合にも用いられることに注意する。intervalはbvarに直後に続く場合にのみ修飾子として解釈される。他の文脈ではintervalは構築子として解釈され、F.4.2 Intervals, vectors, matricesを参照。
複数のcondition修飾子は、それらの論理積を取って単一の修飾子に書き換える。得られた複合的なconditionは、規則
書き換え: conditionに従ってdomainofapplicationに書き換えられる。
condition修飾子は、束縛変数をより大きなドメイン上の真偽値を返す式で制限し、与えられた値がその制限されたドメインに属するかどうかを指定する。condition要素は真理条件を表す単一の子要素を含む。複合条件は条件内でandのようなブール演算子を適用することによって形成される。
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>を用いて未指定のドメインを導入する。
複数のdomainofapplication修飾子は、指定されたドメインの共通部分(intersection)を取って単一の修飾子に書き換える。
集合とリストは規則 書き換え: n-ary setlist domainofapplicationに従って書き換える。
set と list の使用法は他の n-ary
コンストラクタと同じ形式に従いますが、Strict Content MathML に書き換える際には通常の規則の変種が用いられます。これは map 記号が必要な集合やリストを暗黙的に構成するため、この場合 apply_to_list は不要だからです。
これらのn項演算子を表す要素はスキーマパターンnary-setlist-constructor.classで指定される。
引数リストが明示的に与えられている場合は、規則書き換え: elementが適用される。
修飾子を使って引数のリストが指定されている場合、以下の規則が用いられる。
次の形式の式。ここで <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.3.1
Intervals、
4.3.5.8 N-ary Matrix
Constructors:
<vector/>,
<matrix/>,
<matrixrow/>
に記載されている方法で書き換えられる。任意の修飾子は既に domainofapplication
に書き換えられており、後のステップでさらに書き換えられることに注意する。
Strict マークアップでは、interval 要素は interval1 コンテントディクショナリの4つの記号のいずれかに対応する。もし closure が open の値を持つなら interval は interval_oo に対応する。値が closed の場合は interval_cc に対応し、値が open-closed の場合は interval_oc、closed-open の場合は interval_co に対応する。
ラムダ式は規則 書き換え: lambda および 書き換え: lambda domainofapplication に従って書き換える。
もし 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 によって構成された関数項に翻訳され、指定されたドメインに対して 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>
区分定義関数の書き換えは 4.3.10.5
Piecewise declaration <piecewise>,
<piece>, <otherwise> に記載されているとおりである。
Strict Content MathML では、コンテナ要素である piecewise、piece、および 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>
domainofapplication修飾子を用いる演算子に対する特殊ケース規則を適用する。
このステップでは、4.3 Content MathML
for
Specific Structures で導入された演算子の特殊ケースを扱う。考慮すべき特殊ケースにはいくつかの分類がある。
min、max、mean
などの n項/単項 演算子は、規則 書き換え: n-ary unary set、書き換え: n-ary unary
domainofapplication
および 書き換え: n-ary unary single に従って書き換える。
要素 <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 を使う必要がない点で異なる。
次の形式の式。ここで <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 記号は使われず、記号は引数に直接適用される。
要素 <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 は引数を明示的なデータ集合として解釈するか、分布を表す確率変数として解釈するかによって異なる。
forall および exists の量化子が domainofapplication と共に用いられる場合、それらを含意や論理積を用いる式に書き換える規則 書き換え:
quantifier に従って書き換える。
もし bind と共に修飾子がなく使われるなら、Strict Content MathML における解釈は単純である。一般に、apply や修飾子と共に使われる場合の解釈は次の規則によって与えられる。
次の形式の式で、<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 の場合の追加の記号は and、forall の場合は
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>
domainofapplication 要素(bvarの有無を問わず)と共に用いられる積分は、規則 書き換え: int および
書き換え: defint に従って書き換えられる。F.2.2 Integrals を参照。
domainofapplication 要素(bvarの有無を問わず)と共に用いられる総和および積は、
4.3.5.2 N-ary Sum <sum/> および 4.3.5.3 N-ary Product <product/> に記載された方法で書き換えられる。
F.2.4 Sums and Products を参照。
この段階では、任意の
apply は高々一つの domainofapplication
子を持ち、特殊ケースは対処済みである。domainofapplication は Strict Content MathML
ではないため、次のいずれかの形に書き換えられる。
上記の規則を適用することにより、interval、
condition、
uplimit および
lowlimit を用いる表現はすべて domainofapplication
のみを使う形に書き換えられる。domainofapplication が得られたら、Strict
マークアップへの最終的な対応付けは次の規則を用いて行われる。
apply が bvar 子を含まない場合は、規則
書き換え: 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>
関係と共に用いられる場合は、規則 書き換え: n-ary relations および 書き換え: n-ary relations bvar に従って predicate_on_list 記号の適用に変換される。
次の形の式は
<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>
次の形の式は
<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 を使用すべきである。
一般的な n 項演算子についての一般規則 書き換え: n-ary domainofapplication に従って、apply_to_list 記号を用いる構成に書き換えられる。
引数リストが明示的に与えられている場合は、規則 書き換え: element が適用される。
修飾子要素の使用は、Strict Content MathML では明示的に関数を引数のリストに適用する形で apply_to_list 記号を用いて表現される。以下の規則は domainofapplication 修飾子のみを考慮する(他の修飾子は前述のように 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 構文を使う点に注意。これらのケースでは、上述の規則が対応する構文上の修正を伴って適用される。
suchthat 記号を用いる構成へは、束縛変数を持つ
apply に対して規則
書き換え: apply
bvar domainofapplication に従って変換される。
一般に、束縛変数および(場合によっては)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> 子は省略される。
非 Strict なトークン要素を次のように書き換える
cn 要素で表され、type
属性が e-notation、rational、
complex-cartesian、complex-polar、
constant のいずれかである数値は、規則
書き換え: cn sep、書き換え: cn
based_integer
および 書き換え: cn constant に従って Strict な cn に書き換えられる。
cn に sep 子がある場合、間のテキストは cn
要素として書き換えられることがある。もし sep を持つ cn に
base 属性がある場合、これは結果の各 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 ではなくなり、各引数は再帰的に処理される必要がある。
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 を使うべきである。
Strict Content MathML では、定数は csymbol 要素を用いて表現されるべきである。多くの重要な定数は nums1 コンテンツディクショナリに定義されている。次の形の式は
<cn type="constant">c</cn>
Strict Content MathML では次のように等価である:
<csymbol cd="nums1">c2</csymbol>
ここで c2 は以下の表に従って c に対応する。
| 内容 | 説明 | OpenMath 記号 |
U+03C0 (π) |
三角法で通常用いられる π:およそ 3.141592653... | pi |
U+2147 (ⅇ or ⅇ) |
自然対数の底:およそ 2.718281828... | e |
U+2148 (ⅈ or ⅈ) |
-1 の平方根 | i |
U+03B3 (γ) |
オイラーの定数:およそ 0.5772156649... | gamma |
U+221E (∞ or &infty;) |
無限大。適切な解釈は文脈による | infinity |
ci、csymbol、またはプレゼンテーション MathML を含む cn を、規則
書き換え: cn presentation mathml、書き換え: ci presentation mathml および csymbol に対する類似の規則を用いて semantics 要素に書き換える。
もし 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 式の例:
<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 に書き換えられるようにする必要がある。
次の例は視覚的には と表示され、内容的には単一の記号として扱われる原子的な記号を符号化している。
<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>
残るすべての、4.3 特定構造のための Content
MathML で定義された演算子を、規則
書き換え: element によって構文表で特定された記号を参照する csymbol に書き換える。
例えば、
<plus/>
は Strict 形式に相当する
<csymbol cd="arith1">plus</csymbol>
各演算子要素の説明で述べたように、適切な記号の選択を決めるために特殊な規則を要する演算子がある。特に注目すべき場合は次の通りである:
selector 演算子については引数の順序を書き換える必要があり、記号は引数の型に依存する。
いくつかの集合演算子の記号の選択は、引数の type の値に依存する。
いくつかの統計演算子の記号の選択は、引数の型の値に依存する。
emptyset 要素の記号の選択は文脈に依存する。
minus 要素は 単項算術演算子(例: - x を表す)として、または
二項算術演算子(例: x- y を表す)として使用できる。
引数が1つで使われる場合、minus は unary_minus 記号に対応する。
引数が2つで使われる場合、minus は minus 記号に対応する。
どちらの場合も、Strict Content マークアップへの翻訳は 書き換え: element に記載されているように直接的であり、実際の使用法を反映する記号を選ぶだけでよい。
Strict Content マークアップに翻訳する際、もし type が multiset の値を持つなら、代わりに multiset1 の in 記号を使用すべきである。
Strict Content マークアップに翻訳する際、もし type が multiset の値を持つなら、代わりに multiset1 の notin 記号を使用すべきである。
Strict Content マークアップに翻訳する際、もし type が multiset の値を持つなら、代わりに multiset1 の subset 記号を使用すべきである。
Strict Content マークアップに翻訳する際、もし type が multiset の値を持つなら、代わりに multiset1 の prsubset 記号を使用すべきである。
Strict Content マークアップに翻訳する際、もし type が multiset の値を持つなら、代わりに multiset1 の notsubset 記号を使用すべきである。
Strict Content マークアップに翻訳する際、もし type が multiset の値を持つなら、代わりに multiset1 の notprsubset 記号を使用すべきである。
Strict Content マークアップに翻訳する際、もし type が multiset の値を持つなら、代わりに multiset1 の setdiff 記号を使用すべきである。
Strict Content マークアップに翻訳する際、もし type
が multiset の値を持つなら、代わりに multiset1 の size 記号を使用すべきである。
mean 要素が明示的な引数リストに適用される場合、Strict Content マークアップへの翻訳は直接的であり、s_data1 コンテンツディクショナリの mean 記号を使用する(書き換え: element参照)。分布に適用される場合は、s_dist1 の mean 記号を使用すべきである。修飾子付きの場合は同様の注意事項とともに 書き換え: n-ary domainofapplication を用いる。
sdev 要素が明示的な引数リストに適用される場合、Strict Content マークアップへの翻訳は直接的であり、s_data1 の sdev 記号を使用する(書き換え:
element参照)。分布に適用される場合は、s_dist1 の sdev 記号を使用すべきである。修飾子付きの場合は同様に 書き換え: n-ary domainofapplication を用いる。
variance 要素が明示的な引数リストに適用される場合、Strict Content マークアップへの翻訳は直接的であり、s_data1 の variance 記号を使用する(書き換え: element参照)。分布に適用される場合は、s_dist1 の variance 記号を使用すべきである。修飾子付きの場合は同様に 書き換え: n-ary domainofapplication を用いる。
median 要素が明示的な引数リストに適用される場合、Strict Content マークアップへの翻訳は直接的であり、s_data1 の median 記号を使用する(書き換え:
element参照)。
mode 要素が明示的な引数リストに適用される場合、Strict Content マークアップへの翻訳は直接的であり、s_data1 の mode 記号を使用する(書き換え:
element参照)。
場合によっては文脈から emptyset が multiset1 コンテンツディクショナリの emptyset
記号に対応することが明らかなことがある。しかし、著者が明示的にそれを示す方法は注釈以外にないため、常に set1 の emptyset 記号へ翻訳することも許容される。
この時点で、type を受け入れるすべての要素(ci と
csymbol を除く)は、type 属性を持たない Strict
Content マークアップの等価表現に書き換えられているはずであり、
型情報は演算子記号の選択に反映されている。残っている ci および csymbol
要素で type 属性を持つものは、規則
書き換え: ci type annotation および 書き換え: csymbol type
annotation に従って semantics を用いた厳密な式に書き換える。
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 の使用では csymbol は type 属性の使用を許す。
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>
もし definitionURL および encoding 属性が
csymbol 要素上でコンテンツディクショナリへの参照として解釈できる場合(詳細は 4.2.3.2 <csymbol>
の非 Strict 用法 を参照)、それらを書き換えて代わりに cd 属性でコンテンツディクショナリを参照するようにする。
Strict マークアップで許されない属性を持つ要素は、規則 書き換え:
attributes に従って、これらの属性を持たない要素を第一子とし、属性を annotation 要素として持つ
semantics 構成に書き換える。
cn や interval のような多くの Content MathML
要素は、表す対象の意味を特殊化する属性を許す。これらの場合、個別に与えられた特別な書き換え規則が 4.3 特定構造のための Content MathML に記載されている。しかし、Content
MathML 要素は すべての MathML 要素で共有される属性 を受け入れ、文脈によっては他の XML
名前空間からの属性を含むこともある。そのような属性は Strict Content マークアップでは別の形に書き換えられねばならない。
例えば、
<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 が参照される。
この節は規範的ではありません。
現在の 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
ワーキンググループは 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 に対して感謝すべきです。
https の使用と、現行の W3C 公開の要件に従って GitHub Issues ページへの参照を追加しました。
mode および macros 属性を <math> から削除しました。これらは MathML 2 以降非推奨となっていました。macros は定義された振る舞いを持たず、mode は適切な
display の使用で置き換え可能です。レガシー用途が必要な場合は mathml4-legacy
スキーマがこれらを有効にします。
other 属性を削除しました。これは MathML 2 以降非推奨でした。レガシー用途が必要な場合は
mathml4-legacy スキーマがこれを有効にします。
mo 演算子でマークアップするべきであることを明確化しました(3.2.4.4 単独の <mn> で書くべきでない数値 を参照)。
<mmultiscripts>,
<mprescripts/>
におけるスクリプトの水平位置合わせが基底に向かって行われることを明確化し、新しい例を追加しました。
fontfamily、fontweight、fontstyle、fontsize、color、background
を削除し、代わりに mathvariant、mathsize、mathcolor、mathbackground を使用するようにしました。これらの属性は mstyle 上でも無効になりました。古い文書の検証が必要な場合は mathml4-legacy
スキーマを使用できます。
mglyph から削除されました。mglyph は引き続き MathML に画像を含めるために保持されています。
mspace に対する値 indentingnewline はもはや有効ではありません(これまで
newline と同等でした)。
mtr と mtd
で示されなければなりません。[MathML1]
では、実装が行マークアップを省略時に推論することを要求していましたが、今回は明示が必要です。
malignmark の使用を制限・簡素化し、既存実装で実装されている機能に合わせました。表要素上の groupalign 属性はもはやサポートされません。mo 属性である fence と separator を削除しました(これらは B. Operator Dictionary のプロパティ一覧にも掲載されなくなります)。これらは A.2.6 Legacy MathML
スキーマでは依然有効ですが、デフォルトスキーマでは無効です。none は全体を通して空の mrow
に置き換えられました([MathML-Core] に合わせるため)。mlabeledtr 要素とそれに関連する属性 side と minlabelspacing はもはや仕様で扱われません。これらはデフォルトスキーマから削除されますが、Legacy Schema では有効です。
mpadded の長さ属性に対する特別拡張構文
( "+" | "-" )?
unsigned-number
( ("%" pseudo-unit?)
| pseudo-unit
| unit
| namedspace
)? を MathML-Core に合わせるためサポート対象外としました。多くの機能は標準の CSS 長さ構文でまだ利用可能です。詳細は 注: mpadded
長さ を参照してください。
share element、4.2.7.2 An Acyclicity Constraint、4.2.7.3 Structure
Sharing and Binding、4.2.7.4 Rendering Expressions with Structure Sharing
の例を修正し、スキーマの規範に合わせて href ではなく src
を使用するようにしました。以前の例も一般的な表現属性として有効でしたが、ここでは正規の属性名に合わせています。
reln、declare、および fn を削除しました。必要に応じてレガシー用途向けに mathml4-legacy スキーマで有効にできます。
intent 属性について記述しました。
Mixing Markup Languages for Mathematical Expressionsから改称しました。
<semantics>
要素を用いて表示マークアップと内容マークアップを混在させる既存のテキストは第二節に維持されていますが、いくつかの非規範的なテキストと例は [MathML-Notes] に移され、簡略化されています。encoding と definitionURL の <semantics>
上での使用が非推奨とされました。これらは本仕様では無効です。レガシー用途でこれらの属性を検証する必要がある場合は mathml4-legacy
スキーマを使用できます。mathml4-core スキーマを基礎として mathml4-presentation
を構築し、既存の文書群([MathML-Core])に一致する既存のコーパスを検証するための新しい
mathml4-legacy スキーマを作成しました(これは [MathML3]
に一致します)。
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: