MathMLコア

W3C 候補勧告スナップショット

この文書の詳細情報
このバージョン:
https://www.w3.org/TR/2025/CR-mathml-core-20250624/
最新の公開バージョン:
https://www.w3.org/TR/mathml-core/
最新エディタ草案:
https://w3c.github.io/mathml-core/
履歴:
https://www.w3.org/standards/history/mathml-core/
コミット履歴
テストスイート:
https://github.com/web-platform-tests/wpt/tree/master/mathml/
実装レポート:
https://wpt.fyi/results/?label=master&label=experimental&aligned&q=math%20%20not%28path%3A%2Fjs%29
編集者:
David Carlisle (NAG)
Frédéric Wang (Igalia)
元編集者:
Patrick Ion (Mathematical Reviews, American Mathematical Society)
Robert Miner (故人) (Design Science, Inc.)
フィードバック:
GitHub w3c/mathml-core (プルリクエスト, 新しいIssue, オープンIssue)

概要

この仕様は、ブラウザー実装に適した数式マークアップ言語(MathML)のコアサブセットを定義します。 MathMLは数式表記を記述し、その構造と内容の両方を保持するためのマークアップ言語です。 MathMLの目標は、HTMLがテキストに対して可能にしたように、数学をワールドワイドウェブで配信・受信・処理できるようにすることです。

この文書のステータス

このセクションは、本書が公開された時点の文書のステータスを説明します。現在のW3C刊行物一覧と本技術レポートの最新改訂版は W3C 標準およびドラフト一覧の https://www.w3.org/TR/ で確認できます。

この文書は Math作業グループ により、 勧告トラックを使用して 候補勧告スナップショットとして公開されました。

候補勧告としての公開は、W3Cおよびそのメンバーによる支持を示すものではありません。 候補勧告スナップショットは 幅広いレビューを受けており、 実装経験 の収集を目的とし、 ワーキンググループメンバーによる ロイヤリティフリーライセンス での実装のコミットメントがあります。

この候補勧告は、2025年9月30日より早く提案勧告に進むことはありません。

この文書は、 W3C 特許ポリシー に基づいて活動するグループによって作成されました。 W3Cは、 グループの成果品に関して提出された特許開示の公開リスト を管理しています;そのページには特許開示方法についての手順も記載されています。 特定の特許が 必須クレーム を含むと認識した場合は、 W3C特許ポリシー第6節に従い開示が必要です。

この文書は 2023年11月3日W3Cプロセス文書 により管理されています。

1. 導入

このセクションは規範的ではありません。

[MATHML3] 仕様には、ウェブレンダリングエンジン間で一貫して実装したり、ユーザー定義の構成で拡張したりすることを困難にするいくつかの欠点があります。例としては次のようなものがあります:

本MathML Core仕様は、TeXBookの付録G [TEXBOOK] およびOpen Font Format [OPEN-FONT-FORMAT] や [OPEN-TYPE-MATH-ILLUMINATED] からの追加規則を用いて、数学式の視覚的レンダリングを可能な限り正確に定義することでこれらの問題に対処することを目的としています。また、現代のブラウザー実装やウェブ技術 [HTML] [SVG] [CSS2] [DOM] に依存し、必要に応じてそれらとの相互作用を明確にしたり、ウェブプラットフォームのレイヤリングを改善するための新しい低レベルのプリミティブを導入したりします。

このフレームワークに適合しない、またはそれほど基本的でないMathML3の部分は省略され、代わりに別のより大きな [MATHML4] 仕様で説明されています。どの数学機能が将来のMathML Coreに含まれるか、またはポリフィルとして実装されるかの詳細はまだ未確定です。この問題やその他の潜在的な改善はGitHubで追跡されています

実装の詳細レベルを高め、実用的なサブセットに注力し、ブラウザー主導の設計に従い、自動化されたウェブプラットフォームテストに依拠することにより、本仕様はMathMLの相互運用性を大幅に向上させると期待されます。さらに、MathMLのレイヤリングに関する取り組みにより、ユーザーは shadow trees, custom elements、あるいは[HOUDINI] のAPIなどの現代的なウェブ技術を用いて、 MathML 4仕様の残りの部分を実装したり、より一般的にMathML Coreを拡張したりできるようになります。

2. MathML の基礎

2.1 要素と属性

用語 MathML 要素MathML 名前空間 の任意の要素を指します。 この仕様で定義される MathML 要素は MathML コア要素 と呼ばれており、以下に一覧があります。 下記以外の MathML 要素は 未知の MathML 要素 と呼びます。

  1. annotation
  2. annotation-xml
  3. maction
  4. math
  5. merror
  6. mfrac
  7. mi
  8. mmultiscripts
  9. mn
  10. mo
  11. mover
  12. mpadded
  13. mphantom
  14. mprescripts
  15. mroot
  16. mrow
  17. ms
  18. mspace
  19. msqrt
  20. mstyle
  21. msub
  22. msubsup
  23. msup
  24. mtable
  25. mtd
  26. mtext
  27. mtr
  28. munder
  29. munderover
  30. semantics

グループ化要素maction, math, merror, mphantom, mprescripts, mrow, mstyle, semantics および 未知の MathML 要素 です。

スクリプト要素mmultiscripts, mover, msub, msubsup, msup, munder および munderover です。

根号要素mroot および msqrt です。

この仕様で定義される属性には名前空間がなく、 MathML属性 と呼ばれます:

2.1.1 最上位 <math> 要素

MathML は、文書内の各 MathML マークアップのインスタンスをカプセル化する単一の最上位(ルート) math 要素を指定します。他のすべての MathML コンテンツは <math> 要素内になければなりません。

<math> 要素は 2.1.3 グローバル属性 および 以下の属性を受け入れます:

display 属性がある場合、 ASCII 大文字・小文字を区別せず block または inline と一致する必要があります。 A. ユーザーエージェントスタイルシート で この属性のデフォルト値に影響するルール(block math または inline math) および math-stylenormal または compact)プロパティが記述されています。 属性が無い場合や無効な値の場合、ユーザーエージェントスタイルシートはそれを inline と同じように扱います。

この仕様は alttext 属性に固有の可観測な動作を定義しません。

Note
alttext 属性は数式レイアウトを実装していない一部のレガシーシステムで代替テキストとして用いられる場合があります。

<math> 要素で計算される display プロパティが block mathinline math でない場合は、CSS 仕様で記述された該当の値によりレイアウトされます。そうでない場合は mrow 要素のレイアウトアルゴリズムで math content box を生成します。その math content box が、要素のレイアウト内容として利用されます(CSS の display: blockdisplay: inline の場合)。 さらに、計算結果が block math の場合は、その math content box は コンテナ内で水平中央にレンダリングされます。

Note
TEX の display mode $$...$$ と inline mode $...$ は、 それぞれ display="block" および display="inline" に対応します。

次の例では、math 数式が新しい行に display モードで描画され、コンテナ内で数式内容が中央揃えとなります:

<div style="width: 15em;">
  This mathematical formula with a big summation and the number pi
  <math display="block" style="border: 1px dotted black;">
    <mrow>
      <munderover>
        <mo></mo>
        <mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow>
        <mrow><mo>+</mo><mn></mn></mrow>
      </munderover>
      <mfrac>
        <mn>1</mn>
        <msup><mi>n</mi><mn>2</mn></msup>
      </mfrac>
    </mrow>
    <mo>=</mo>
    <mfrac>
      <msup><mi>π</mi><mn>2</mn></msup>
      <mn>6</mn>
    </mfrac>
  </math>
  is easy to prove.
</div>
math example (display)

比較として、同じ数式をインラインモードで表示した場合、強制改行なしでテキスト段落内に埋め込まれます。 mrow のレイアウトアルゴリズムにより指定されたベースラインが垂直方向の揃えに使われます。和記号、イコール記号、分数の中央が互いに揃っていますが、周囲のテキストのアルファベットのベースラインとは一致しません。

math example (inline)

適切な数学レンダリングには数学フォントの利用が必要なため、 ユーザーエージェントスタイルシート では <math> 要素で font-family を 親要素から継承せず math に設定すべきです。また親コンテナで設定されることのある font-stylefont-weightdirectiontext-indent などの CSS プロパティは数式自体には適用されないため、ユーザーエージェントスタイルシートでそれらをデフォルトでリセットする規則があります。

math {
  direction: ltr;
  text-indent: 0;
  letter-spacing: normal;
  line-height: normal;
  word-spacing: normal;
  font-family: math;
  font-size: inherit;
  font-style: normal;
  font-weight: normal;
  display: inline math;
  math-shift: normal;
  math-style: compact;
  math-depth: 0;
}
math[display="block" i] {
  display: block math;
  math-style: normal;
}
math[display="inline" i] {
  display: inline math;
  math-style: compact;
}

2.1.2 MathML属性値の型

CSSデータ型に加え、いくつかのMathML属性は次のMathML固有型に依存します。

unsigned-integer
[CSS-VALUES-4]で定義される <integer>値で、最初の文字が U+002D ハイフン記号(-)でも U+002B プラス記号(+)でもないもの。
boolean
ASCII大文字小文字区別なしtruefalse に一致する文字列。

2.1.3 グローバル属性

以下の属性はすべてのMathML要素に共通で指定できます。

2.1.4 HTML要素とMathML要素に共通の属性

idclassstyledata-*autofocus、および noncetabindex 属性は、HTML要素で定義されているものと同じ構文と意味です。

dir 属性が存在する場合、 ASCII大文字小文字区別なしltr または rtl と一致していなければなりません。 その場合、ユーザーエージェントはその属性を 呈示用ヒントとして要素の direction プロパティに対応付けて扱うこととなります。 具体的には、rtl との一致は rtl に、 ltr との一致は ltr にマップされます。

Note
dir 属性は数式の方向性を設定する際によく使われ、アラビア語圏では rtl が多く使われます。 しかし右から左に書く言語でも数式自体は左から右の場合が多く、ユーザーエージェントスタイルシートが対応して direction プロパティを math 要素上でリセットします。

次の例では、dir 属性を使い「𞸎 + 𞸑 のべき(٢ 分の 𞸟 + ١)」を 右から左にレンダリングしています。

<math dir="rtl">
  <mrow>
    <mi>𞸎</mi>
    <mo>+</mo>
    <msup>
      <mi>𞸑</mi>
      <mfrac>
        <mn>٢</mn>
        <mrow>
          <mi>𞸟</mi>
          <mo>+</mo>
          <mn>١</mn>
        </mrow>
      </mfrac>
    </msup>
  </mrow>
</math>
dir example

すべてのMathML要素は、HTMLのイベントハンドラー属性同様にイベントハンドラー属性をサポートします。

すべてのイベントハンドラー属性は HTMLで HTMLElements がサポートするものと同様に、MathML要素でも MathMLElement IDL によりサポートされます。

2.1.5 レガシーMathMLスタイル属性

mathcolormathbackground 属性がある場合、値は <color>型でなければなりません。 この場合、ユーザーエージェントは属性を 呈示用ヒントとして、要素の colorおよび background-color プロパティに対応する値として設定します。 mathcolor属性はMathMLのテキストやバーなどの前景色を、 mathbackground属性は要素の背景色を示します。

mathsize 属性がある場合、有効な <length-percentage> でなければなりません。 この場合、ユーザーエージェントは属性を 呈示用ヒントとして 要素のfont-sizeプロパティに設定します。 mathsizeプロパティは数式中のグリフの高さを示し、それに応じて他の要素(スペーシングやシフト、バーの線の太さなど)も拡縮されます。

Note
これらの属性はフルMathMLとの互換のために実装されています。MathML Coreのみを対象にする場合はCSSスタイリングを使用することが推奨されます。

2.1.6 displaystyle属性とscriptlevel属性

displaystyle 属性がある場合、値はboolean型でなければなりません。 この場合、ユーザーエージェントは属性を 呈示用ヒントとして要素の math-style プロパティに設定します。 具体的には、ASCII大文字小文字区別なしtruenormalに、falsecompactにマップされます。 この属性は、数式の論理的高さ(値がfalseの場合に内容サイズやスクリプト配置を変更することで高さを最小化)を最小化するか否かを示します。

scriptlevel 属性がある場合、値は +<U>-<U><U> のいずれかで、<U>unsigned-integer型です。 この場合、ユーザーエージェントは scriptlevel属性を 呈示用ヒントとして要素の math-depth プロパティに対応する値で設定します。 具体的には +<U>-<U><U> はそれぞれ add(<U>)add(<-U>)<U> にマップされます。

displaystyleおよびscriptlevel値は、MathML要素内で自動調整されます。 これら属性を完全に実装するには、 A. ユーザーエージェントスタイルシートに追加CSSプロパティの指定が必要です。 とりわけ全てのMathML要素には font-size: math がデフォルト指定され、scriptlevel の変化が反映されます。

この例では、munder 要素でベース「∑」にスクリプト「A」を付与しています。デフォルトではΣが親から継承した フォントサイズで描画され、「A」は小さくスクリプト配置されます。displaystyleがtrueだとΣが大きく描画され「A」は下付きとなり、scriptlevelを「A」に0指定すると最上位math要素と同じフォントサイズになります。

<math>
  <munder>
    <mo></mo>
    <mi>A</mi>
  </munder>
  <munder displaystyle="true">
    <mo></mo>
    <mi>A</mi>
  </munder>
  <munder>
    <mo></mo>
    <mi scriptlevel="0">A</mi>
  </munder>
</math>
displaystyle-scriptlevel example
Note
TEX の \displaystyle\textstyle\scriptstyle\scriptscriptstyleはそれぞれ displaystyle(true/false)・ scriptlevel(0/1/2)の組み合わせに対応します。

2.1.7 有効として予約された属性

intentarg 属性は有効として予約されています。

この仕様ではintentおよびarg属性に固有の可観測動作は定義されていません。

Note
これら属性は[MATHML4]で説明されており、 今後のバージョンで定義されるかどうかは未定です。現在開発中で今後変更される可能性がありますので、著者は注意してください。

2.2 ウェブプラットフォームへの統合

2.2.1 HTMLとSVG

MathMLはHTMLやSVGと混在して使用できます。詳細は各仕様 [HTML] [SVG] を参照してください。

SVGのrequiredExtensions 属性の評価時、ユーザーエージェントは MathML名前空間で識別される言語拡張をサポートする必要があります。

この例では、インラインMathMLとSVG要素がHTML文書内で利用されています。SVG要素<switch><foreignObject><requiredExtensions>属性指定あり)は、図内にテキストフォールバック付きMathML数式を埋め込むために使用されています。さらに、HTMLinput要素も mtext 内で使われており、数式内のインタラクティブな入力フィールドを実現しています。3.7 Semantics and Presentationではannotation-xml 要素内でSVGやHTMLを使う例も参照できます。

...(コード部分は翻訳不要)...
html-svg example

2.2.2 CSSスタイリング

ユーザーエージェントは本仕様で言及されているCSSの各機能や、 4. 数式レイアウトのためのCSS拡張 で新しく定義されたものをサポートしなければなりません。 また、display: contentsの計算ルールも適用されます。

この例では、MathML数式が親のCSSカラーを継承し、font-familystyle 属性によって指定されています。

...(コード部分は翻訳不要)...
style example

MathMLコア要素を含むすべての文書は A. ユーザーエージェントスタイルシート で記述されたCSSルールをユーザーエージェントレベルのスタイルシートのデフォルトとして含める必要があります。 特に、すべてのMathML要素は!importantルールで writing modehorizontal-lrに強制されます。

float プロパティは親の計算済み表示値が block mathまたはinline mathの場合、要素を浮動させたり、アウト・オブ・フローにしません。

::first-line::first-letter 疑似要素は、計算済み表示値がblock mathまたはinline mathの要素には適用されず、 それら要素は祖先の最初のフォーマット済み行や最初の文字に寄与しません。

以下のCSS機能はサポートされず、無視しなければなりません:

  • 数式内の改行:white-spaceはすべてのMathML要素でnowrap扱いとなります。
  • アライメントプロパティ:align-contentjustify-contentalign-selfjustify-selfはMathML要素に効果を持ちません。
これらの機能は、将来のバージョンで取り扱われる可能性があります。現時点では、これらのプロパティに異なる値を設定しないことを推奨します。後方互換性の問題につながる可能性があります。

2.2.3 DOMとJavaScript

WebアプリケーションAPIをサポートするユーザーエージェントは Web application APIsに従い、 MathMLの視覚的レンダリングが[DOM]ツリーと同期されるようにしなければなりません。特に MathML属性が動的に変更された場合、必要な更新を行う必要があります。

DOM内でMathML要素を表すすべてのノードは、次の MathMLElementインターフェースを実装し、スクリプトに公開しなければなりません。

...(コード部分は翻訳不要)...

GlobalEventHandlersおよび HTMLOrForeignElement インターフェースは[HTML]で定義されています。

この例では、MathML数式によって「α over 2」が表示されており、赤いαをクリックすると青いβに変わります。

...(コード部分は翻译不要)...
dom-idl example
課題
HTMLOrSVGElementの改称および [HTML] でのMathMLElement定義。

2.2.4 テキストレイアウト

数学用フォントには一般に大きな積分記号など背の高いグリフが含まれるため、過度なテキスト行間を防ぐためにタイポグラフィメトリクスの使用が重要です。そのため、ユーザーエージェントはレイアウト時に OS/2テーブルのUSE_TYPO_METRICSフラグも考慮しなければなりません。[OPEN-FONT-FORMAT]

2.2.5 フォーカス

MathMLは著者がインタラクティブなユーザーエージェントでインタラクティブ性を提供するために、HTMLで説明されている Focus と同じコンセプト・アプローチ・ガイダンスを、MathML固有の調整や補足とともに提供します。

要素がフォーカスされた場合、Selectors Level 3 で定義される、適用されるCSSフォーカス関連疑似クラスが全て適用されます。

埋め込まれた math 要素の内容 (トークン要素内のHTML要素を含む)は、所有者HTML文書(結合された順次フォーカス順序)の順次フォーカス順序に寄与します。

3. 表示マークアップ

3.1 視覚的フォーマットモデル

3.1.1 ボックスモデル

既定の display プロパティは A. User Agent Stylesheet に記載されています:

  • <math> ルートに対しては、 display 属性の値に応じて inline math または block math と等しくなります。
  • 表形式の MathML 要素mtable, mtr, mtd についてはそれぞれ inline-table, table-row および table-cell と等しくなります。
  • すべての子のうち最初の子を除く mactionsemantics 要素に対しては、none と等しくなります。
  • その他すべての MathML 要素 に対しては block math と等しくなります。

異なる writing modes での数式レイアウトを指定するために、 本仕様では [CSS-WRITING-MODES-4] の概念を使用します:

特に指定がない限り、 本仕様の図は writing modehorizontal-lr および ltr を使用しています。 他の書字方向の例については、4, 5 および 6 を参照してください。これらは数式レイアウトで使用されることのある他の書字方向の例です。

MathML 要素に使用されるボックスは、CSS と互換性を保ちながら、 数式内の非常に正確な位置や間隔を考慮してレイアウトを行うために、いくつかのパラメータに依存します:

  1. インラインメトリクス: min-content inline sizemax-content inline size および inline size (CSS から)。1 を参照してください。
    1 MathML 要素の汎用ボックスモデル
  2. ブロックメトリクス。 block sizefirst baseline set および last baseline set。 MathML ボックスに対して以下の基線が定義されます:

    1. alphabetic baseline は通常、大文字ラテン文字の底線と整列します。 ボックスの alphabetic baseline から ボックスの line-over 辺までの代数距離は line-ascent と呼ばれます。 ボックスの line-under 辺から alphabetic baseline までの代数距離は line-descent と呼ばれます。
    2. mathematical baseline(別名 math axis)は、通常分数線、フェンスの中央、および二項演算子の中央と整列します。 これは alphabetic baseline から AxisHeight によって line-over 側へ ずらされます。
    3. ink-over baseline は、余分な余白を除いた 数式コンテンツの描画における理論上の line-over の限界を示します。 指定がない場合、この基線は line-over 辺と一致します。 alphabetic baseline から ink-over baseline までの代数距離は ink line-ascent と呼ばれます。
    4. ink-under baseline は、余分な余白を除いた 数式コンテンツの描画における理論上の line-under の限界を示します。 指定がない場合、この基線は line-under 辺と一致します。 ink-under baseline から alphabetic baseline までの代数距離は ink line-descent と呼ばれます。
    数式レイアウトにおいては、配置する際にインクの範囲(ink extent)に依拠することが非常に重要です。 これはより複雑な表記(例:平方根)の場合には当てはまりません。 ink-ascent と ink-descent はすべての MathML 要素に対して定義されていますが、実際に使用されるのはトークン要素に限られることが多いです。他の場合では、通常の ascent と descent と一致します。
    特に指定がない限り、MathML ボックスの last baseline setfirst baseline set と等しくなります。
  3. オプションの italic correction があり、 これはボックス内のテキストが inline axis に沿ってどれだけ斜めになっているかの尺度を提供します。 2 を参照してください。
    2 斜体 f と大きな積分記号の italic correction の例
    もし min-content inline sizemax-content inline size の計算中やレイアウト中に要求されるが指定されていない場合、代替値として 0 が使用されます。
  4. オプションの top accent attachment があり、 これはアクセントとして配置する際にボックスの inline axis 上で使用される参照オフセットを提供します。 3 を参照してください。
    3 サーカムフレックス記号の top accent attachment の例
    もし min-content inline size(それぞれ max-content inline size)の計算中に要求されるが指定されていない場合、代替値として min-content inline size の半分(それぞれ max-content inline size の半分)が使用されます。 レイアウト中に要求されるが指定されていない場合は、ボックスのインラインサイズの半分が代替値として使用されます。

MathML ボックスに対して、次のオフセットが定義されます:

  • 子ボックスの inline offset は、親ボックスの inline-start 辺と子ボックスの inline-start 辺との間のオフセットです。
  • 子ボックスの block offset は、親ボックスの block-start 辺と子ボックスの block-start 辺との間のオフセットです。
  • 子ボックスの line-left offset は、親ボックスの line-left 辺と 子ボックスの line-left 辺との間のオフセットです。
4 例:書字方向 horizontal-tb および rtl のボックスモデル(例:アラビア語の数式で使用されることがある)
5 例:書字方向 vertical-lr および ltr のボックスモデル(例:モンゴル語の数式で使用されることがある)
6 例:書字方向 vertical-rl および ltr のボックスモデル(例:日本語の数式で使用されることがある)
MathML ボックス内の子ボックスやグラフィカル要素の位置は、inline offsetblock offset を使って表現されます。 便宜上、レイアウトアルゴリズムはフロー相対方向、行相対方向、または alphabetic baseline を用いてオフセットを記述することがあります。 子ボックスの位置は常にボックス自身および子ボックスのメトリクス計算後に行われるため、これらの記述方式は相互に変換可能です。

以下は行相対メトリクスから得られるオフセットの例です:

Issue 78: Ink ascent/descent opentype/texneeds-tests
インクの上り/下り(ink ascent/descent)の定義を改善しますか?

3.1.2 レイアウトアルゴリズム

各 MathML 要素には関連する math content box があり、 本章のレイアウトアルゴリズムで説明されるように、次の構造を用いて計算されます:

  1. math コンテンツの min-content inline size および max-content inline size の計算。
  2. ボックスレイアウト:
    1. in-flow 子ボックスのレイアウト。
    2. math コンテンツの inline sizeink line-ascentink line-descentline-ascent および line-ascent の計算。
    3. math content box 内の子ボックスのオフセットの計算、 および追加のグラフィカル要素(バー、根記号など)のサイズとオフセットの計算。
    4. [CSS-POSITION-3] に記載されているように、 絶対配置および 固定配置 のボックスのレイアウトと配置。

以下の追加手順を実行する必要があります:

上記の説明によれば、margin-collapsing は MathML 要素には適用されません。

ボックスレイアウト中、オプションで inline stretch size constraint および block stretch size constraint パラメータが embellished operators に対して使用されることがあります。前者は、core operatorinline axis に沿って伸長される際に目標とすべきサイズを示します。 後者は、ink line-ascent および ink line-descent を示し、core operatorblock axis に沿って伸長される際に覆うべき範囲を示します。 特に指定がない限り、これらのパラメータはボックスレイアウト中には無視され、子ボックスは伸長サイズ制約なしにレイアウトされます。

Issue 76: Define what inline percentages resolve against. css/html5need specification updateneeds-tests
インラインのパーセンテージが何に対して解決されるかを定義する
Issue 77: Define what block percentages resolve against. css/html5need specification updateneeds-tests
ブロックのパーセンテージが何に対して解決されるかを定義する

3.1.3 匿名の <mrow> ボックス

anonymous box は DOM ツリー内に関連付けられた要素を持たず、レイアウト目的のみに生成されるボックスです。匿名ボックスのプロパティは包む非匿名ボックスから継承され、非継承プロパティは初期値を持ちます。 anonymous <mrow> boxanonymous box であり、displayblock math に等しく、 セクション 3.3.1.2 <mrow> のレイアウト に記載されているようにレイアウトされます。

もし MathML 要素が anonymous <mrow> ボックスを生成する ならば、その要素は子を匿名の <mrow> ボックスで包みます。つまり、その要素の視覚的フォーマットモデル内のサブツリーは匿名の <mrow> ボックスで構成され、その匿名ボックスが当該 MathML 要素の子に関連付けられたボックスを含みます。

次の例では、 mathmrow 要素はセクション 3.3.1.2 <mrow> のレイアウト に記載されているようにレイアウトされます。特に、 <math> 要素はその <mo>≠</mo> 子の周りに適切な間隔を追加し、 <mrow> 要素はその <mo>|</mo> 子を垂直方向に伸長します。

また、 mtd 要素は display: table-cell を持ち、 msqrt 要素はその子の周りに根記号を表示します。しかし、これらの要素もセクション 3.3.1.2 <mrow> のレイアウト に記載されているものと類似した方法で子を配置します:<msqrt> 要素はその <mo>+</mo> 子の周りに適切な間隔を追加し、一方 <mtd> 要素はその <mo> 子を垂直方向に伸長します。 これを可能にするために、これら二つの要素のそれぞれが anonymous <mrow> box を生成します。

<math>
  <mrow>
    <mo>|</mo>
    <mtable>
      <mtr>
        <mtd>
          <mi>x</mi>
        </mtd>
        <mtd>
          <mo>(</mo>
          <mfrac linethickness="0">
            <mn>5</mn>
            <mn>3</mn>
          </mfrac>
          <mo>)</mo>
        </mtd>
      </mtr>
      <mtr>
        <mtd>
          <msqrt>
            <mn>7</mn>
            <mo>+</mo>
            <mn>2</mn>
          </msqrt>
        </mtd>
        <mtd>
          <mi>y</mi>
        </mtd>
      </mtr>
    </mtable>
    <mo>|</mo>
  </mrow>
  <mo></mo>
  <mn>0</mn>
</math>
math example (display)

3.1.4 スタッキングコンテキスト

MathML 要素は様々な間隔規則のために重なり合うことがあります。また、追加のグラフィカル要素(バー、根記号など)を含むこともあります。 計算後のスタイルが display: block math または display: inline math の MathML 要素は新しいスタッキングコンテキストを生成します。これらの MathML 要素の 描画順序 は、ブロック要素とまったく同じです。追加のグラフィカル要素はテキストと背景の後に描画されます(display: inline math の場合はステップ 7.2.4 の直後、display: block math の場合はステップ 7.2 の直後)。

3.2 トークン要素

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

実際には、ほとんどの MathML トークン要素は変数や数値、演算子などの単純なテキストのみを含み、高度なレイアウトは必要としません。しかし、改行を含むテキストや、任意の HTML5 フレージング要素を含めることもできます。

3.2.1 テキスト <mtext>

mtext 要素は、そのままレンダリングすべき任意のテキストを表現するために使用します。一般的に、<mtext> 要素は注釈テキストを示すことを意図しています。

<mtext> 要素は 2.1.3 グローバル属性 で説明されている属性を受け入れます。

次の例では、 mtext を定義内の条件語句として使っています:

<math>
  <mi>y</mi>
  <mo>=</mo>
  <mrow>
    <msup>
      <mi>x</mi>
      <mn>2</mn>
    </msup>
    <mtext>&nbsp;if&nbsp;</mtext>
    <mrow>
      <mi>x</mi>
      <mo></mo>
      <mn>1</mn>
    </mrow>
    <mtext>&nbsp;and&nbsp;</mtext>
    <mn>2</mn>
    <mtext>&nbsp;otherwise.</mtext>
  </mrow>
</math>
mtext example
3.2.1.1 <mtext> のレイアウト

この要素の算出 display プロパティが block math または inline math でない場合、対応する値が記述されている CSS 仕様に従ってレイアウトされます。それ以外の場合は、以下のレイアウトが行われます。

<mtext> 要素が 強制改行ソフトラップの機会 を含まないテキストコンテンツのみから成る場合は、そのテキストのために生成される匿名子ノードが該当する CSS 仕様で定められた通りにレイアウトされ、かつ次の通りです:

それ以外の場合、mtext 要素は ブロックボックス としてレイアウトされ、対応する min-content inline sizemax-content inline sizeinline sizeblock sizefirst baseline set および last baseline setmath content box のために用いられます。

3.2.2 識別子 <mi>

mi 要素は、記号名や 任意のテキスト を識別子としてレンダリングするために使用します。識別子には変数、関数名、記号定数などが含まれます。

<mi> 要素は 2.1.3 グローバル属性 で説明されている属性に加えて、次の属性を受け入れます。

レイアウトアルゴリズムは mtext 要素と同じです。 ユーザーエージェントスタイルシート には、自動イタリックを 4.2 math-auto 変換 で導入された text-transform 値で実装するために、次のプロパティを含める必要があります。

mi {
  text-transform: math-auto;
}

mathvariant 属性が存在する場合は ASCII大文字・小文字を区別しない 形で normal と一致しなければなりません。 その場合、ユーザーエージェントはこの属性をプレゼンテーションヒントとみなし、 要素の text-transform プロパティを none に設定します。それ以外の場合、この属性は効果を持ちません。

[MathML3] では、 mathvariant 属性はトークン要素の論理クラスを定義するために使用され、それぞれのクラスは特定の意味を持つ書体的に関連した記号トークンの集合を提供していました。

MathML Core では、この属性は mi 要素の自動イタリックを解除する場合にのみ使われます。他の用途については、適切な 数学用英数字記号 [UNICODE] を使用してください。セクション C. 数理用英数字記号 も参照してください。

次の例では、 mi は変数や関数名をレンダリングするために使われています。 4.2 math-auto 変換 によるデフォルトスタイル text-transform: math-auto の効果は、 最初の <mi> にはありません("cos" は3文字で構成されるため)、 2番目の <mi> は数学イタリック体でレンダリングされます("c" は1文字、U+0063 ラテン小文字 c で、 イタリック テーブルに従い U+1D450 数学イタリック小文字 c にマッピングされます)、 3番目の <mi> には効果がありません(mathvariant="normal" により、 text-transform が none になる)、4番目の <mi> にも効果がありません(U+221E 無限大のイタリックテーブルにマッピングが定義されていない)。

<math>
  <mi>cos</mi>
  <mo>,</mo>
  <mi>c</mi>
  <mo>,</mo>
  <mi mathvariant="normal">c</mi>
  <mo>,</mo>
  <mi></mi>
</math>
mi example

3.2.3 数値 <mn>

mn 要素は「数値リテラル」や 数値リテラルとしてレンダリングされるべき他のデータを表します。一般的に、数値リテラルは桁(数字)の並びであり、おそらく小数点を含む、符号なし整数または実数を表します。

<mn> 要素は 2.1.3 グローバル属性 で説明されている属性を受け入れます。そのレイアウトアルゴリズムは mtext 要素と同じです。

次の例では、 mn を使用して 小数を表記しています。

<math>
  <mn>3.141592653589793</mn>
</math>
mn example

3.2.4 演算子・フェンス・セパレータ・アクセント <mo>

mo 要素は、演算子または演算子としてレンダリングされるべきもの全般を表します。 一般に、数学演算子の記法上の慣習は非常に複雑であるため、MathMLは<mo>要素のレンダリング動作を指定するために比較的高度な仕組みを提供します。

その結果、MathMLにおいて「演算子としてレンダリングされるべきもの」には、通常意味での数学演算子以外の記号も多く含まれます。中置・前置・後置の通常の演算子のほか、波括弧や括弧、絶対値バーといったフェンス記号、カンマやセミコロン等のセパレータ、シンボル上のバーやチルダなどの数学アクセントも該当します。本章では「演算子」という用語をこの広い意味で用います。

<mo>要素は2.1.3 グローバル属性に加え、以下の属性を受け入れます:

本仕様はfence属性及びseparator属性に対して特有の可観測な動作は定義しません。

著者はfence および separator を用いて演算子の特定のセマンティクスを記述できます。 デフォルト値はOperators_fenceOperators_separator テーブル、または演算子辞書の人間可読版により決まります。

以下の例では、 mo 要素が 2項演算子 + のために使われています。デフォルトの間隔はその演算子の周りで対称になります。form属性によって前置演算子として扱うよう強制すると、より狭い間隔が使われます。 また、 lspace 属性や rspace 属性を使って間隔を明示的に指定することもできます。

<math>
  <mn>1</mn>
  <mo>+</mo>
  <mn>2</mn>
  <mo form="prefix">+</mo>
  <mn>3</mn>
  <mo lspace="2em">+</mo>
  <mn>4</mn>
  <mo rspace="3em">+</mo>
  <mn>5</mn>
</math>
mo example 1

他の用途は、和記号のような大きい演算子です。 displaystyle が true の場合、その演算子は大きく描画されますが、 largeop 属性で変更可能です。 displaystyle が false の場合、下付きが実際には下付き文字として描画されますが、 movablelimits 属性で変更可能です。

<math>
  <mrow displaystyle="true">
  <munder>
    <mo></mo>
    <mn>5</mn>
  </munder>
  <munder>
    <mo largeop="false"></mo>
    <mn>6</mn>
  </munder>
  </mrow>
  <mrow>
    <munder>
      <mo></mo>
      <mn>5</mn>
    </munder>
    <munder>
      <mo movablelimits="false"></mo>
      <mn>7</mn>
    </munder>
  </mrow>
</math>
mo example 2

演算子は、フェンスやアクセント、矢印などの伸縮可能な記号としても使われます。次の例では、縦の矢印が mspace 要素の高さまで伸びています。 stretchy 属性で、例えば伸縮しない矢印にするなどデフォルトの伸縮動作を上書きできます。 symmetric 属性では、演算子を数式軸(分数線)を挟んで対称に伸ばすかどうかを示します。 さらに minsizemaxsize 属性で 伸縮サイズをさらに制約できます。

<math>
  <mfrac>
    <mspace height="50px" depth="50px" width="10px" style="background: blue"/>
    <mspace height="25px" depth="25px" width="10px" style="background: green"/>
  </mfrac>
  <mo></mo>
  <mo stretchy="false"></mo>
  <mo symmetric="true"></mo>
  <mo minsize="250px"></mo>
  <mo maxsize="50px"></mo>
</math>
mo example 3

演算子のデフォルトプロパティは3.2.4.2 辞書ベース属性で説明されているように辞書ベースです。たとえば 2項演算子は通常、デフォルトの対称間隔を持ち、フェンスは通常デフォルトで伸縮します。

3.2.4.1 装飾付き演算子

MathML Core 要素は、次の場合に 装飾付き演算子 となります:

  1. mo 要素である場合。
  2. スクリプト要素または mfrac であって、最初のin-flow子が存在し、それが 装飾付き演算子である場合。
  3. グループ化要素または mpadded であって、in-flow子が(順不同で)1つの装飾付き演算子と0個以上の 空白様(space-like)要素からなる場合。

コア演算子とは、装飾付き演算子(embellished operator)に対して、次のように再帰的に定義される<mo>要素です:

  1. mo 要素のコア演算子は、その当該要素自身です。
  2. 装飾付きスクリプト要素または mfrac 要素のコア演算子は、その最初のin-flow子のコア演算子です。
  3. 装飾付きグループ化要素または mpadded のコア演算子は、その固有の装飾付き演算子 in-flow子のコア演算子です。

伸長軸(stretch axis)は、装飾付き演算子(embellished operator)に対し、 その コア演算子が 1文字だけから成るテキスト内容cを持ち、かつ その文字がインライン固有伸長軸を持つ場合はinlineです。 それ以外の場合、装飾付き演算子の伸長軸はblockです。

同じ定義は、「 匿名<mrow>ボックス」を グループ化要素として扱う視覚的フォーマットモデルのボックスにも適用されます。

3.2.4.2 辞書ベース属性

装飾付き演算子(embellished operator)form プロパティは infixprefixpostfix のいずれかです。 対応するform属性を mo 要素に持たせる場合、その値は ASCII大文字小文字区別なし でいずれかに一致しなければなりません。

装飾付き演算子のform判定アルゴリズム は次の通りです:

  1. form属性がcore operatorに存在し正しい場合、そのASCII小文字値を使う。
  2. その装飾付き演算子が、グループ化要素mpadded または msqrt の最初のin-flow子(すべてのspace-like子を無視)であり、かつ子が2つ以上ある場合はprefix。
  3. その装飾付き演算子が、グループ化要素mpadded または msqrt の最後のin-flow子(すべてのspace-like子を無視)であり、かつ子が2つ以上ある場合はpostfix。
  4. その装飾付き演算子がスクリプト要素の (最初以外の)in-flow子である場合はpostfix。
  5. それ以外の場合はinfix

stretchysymmetriclargeopmovablelimits いずれも装飾付き演算子(embellished operator) のプロパティとなり、 falsetrue のいずれかの値を持ちます。trueの場合、「そのプロパティを持つ」とされます。 対応する stretchysymmetriclargeopmovablelimits属性は mo 要素で使用する場合は boolean でなければなりません。

lspacerspaceminsize は全て装飾付き演算子(embellished operator)のプロパティであり、 <length-percentage> です。 maxsize プロパティは 装飾付き演算子に対し <length-percentage> または ∞ を取ります。 lspacerspaceminsizemaxsize 属性も mo 要素で使用する場合は <length-percentage>型でなければなりません。

装飾付き演算子のプロパティ判定アルゴリズムは次の通りです:

  1. 対応する stretchysymmetriclargeopmovablelimitslspacerspacemaxsizeminsize 属性がcore operatorに存在しかつ有効な場合は、そのプロパティのASCII小文字化した値を使う。
  2. それ以外は装飾付き演算子のform判定アルゴリズムを実行。
  3. そのcore operatorにテキストコンテンツContentのみが含まれる場合、 Category演算子のカテゴリ判定アルゴリズム (Content, Form)(Formは前ステップで算出)で設定。
  4. CategoryDefault で かつformcore operator属性に明示的に与えられていなかった場合:
    1. Forminfixとして 演算子のカテゴリ判定アルゴリズム (Content, Form)の結果でCategoryを設定。
    2. CategoryDefault の場合は Form = postfix で再度行う。
    3. CategoryDefault の場合は Form = prefix で再度行う。
  5. 最後に カテゴリからプロパティを決定するアルゴリズムを実行。

レイアウト処理で使用する際、 stretchysymmetriclargeopmovablelimitslspacerspaceminsize の値は 装飾付き演算子のプロパティ判定アルゴリズム で、以下に挙げる追加規則も含めて得られます:

  • lspacerspaceのパーセント値は 辞書から読んだ値や上記fallback値に対する割合として解釈されます。
  • minsizemaxsizeのパーセント値の解釈は 3.2.4.3 演算子のレイアウト で説明します。
  • lspacerspaceminsizemaxsize のフォント相対長さは コア演算子のフォントスタイルに依存し、装飾付き演算子自身のものではないことに注意します。
3.2.4.3 演算子のレイアウト

<mo> 要素の算出 display プロパティが block math または inline math でない場合は、対応する値が述べられている CSS 仕様に従ってレイアウトされます。そうでない場合、以下のレイアウトが実行されます。

演算子のテキストは、<mo> 要素の visibilityvisible の場合にのみ描画されなければなりません。その場合は <mo> 要素の color で描画されなければなりません。

演算子は次のようにレイアウトされます:

  1. <mo> 要素の内容が 1 文字 c でない場合、3.2.1.1<mtext> のレイアウトのアルゴリズムにフォールバックします。
  2. 演算子が stretchy プロパティをもつ場合:
    • その演算子の 伸長軸 がインラインの場合:
      1. ストレッチグリフのシェイプ を、利用可能な最初のフォントでインライン方向に c に対して生成できなければ、3.2.1.1 <mtext> のレイアウトアルゴリズムにフォールバックします。
      2. 数式内容の min-content inline sizemax-content inline size3.2.1.1<mtext> のレイアウトアルゴリズムの値に設定されます。
      3. インラインのストレッチサイズ制約 Tinline がなければ、3.2.1.1 <mtext> のレイアウトアルゴリズムにフォールバックします。
      4. 数式内容の inline size およびインクのブロックメトリクスは、ストレッチグリフのシェイプ アルゴリズムを inline dimension Tinline に対して適用したものとなります。
      5. 演算子の描画は、上述のボックスメトリクスで決定された位置に、ストレッチグリフのシェイプ アルゴリズムでTinlineまでストレッチしたグリフで行います。
    • そうでない場合、演算子の 伸長軸 はブロックとなり、以下の手順を実施します:
      1. ストレッチグリフのシェイプ を、利用可能な最初のフォントでブロック方向に c に対して生成できなければ、3.2.1.1 <mtext> のレイアウトアルゴリズムにフォールバックします。
      2. 数式内容の min-content inline sizemax-content inline size は、縦方向にストレッチしたグリフの推奨インラインサイズ となります。
      3. ブロックストレッチサイズ制約 (Uascent, Udescent)がなければ3.2.1.1 <mtext> のレイアウトアルゴリズムにフォールバックします。
      4. 演算子が symmetric プロパティを持つ場合は、 目標サイズを TascentTdescent とし、それぞれ SascentSdescent に設定: そうでない場合は、それぞれ UascentUdescent に設定する。
        プロパティ TascentAxisHeight = Tdescent + AxisHeight は, 演算子がベースラインより上に正確に Tascent、 下に Tdescent だけ伸びる場合、数式軸の上下で対称にストレッチされたことを意味します。 SascentSdescent はこの条件を満たし、それぞれ UascentUdescent 以上となる最小値です。
      5. minsizemaxsize を演算子の minsizemaxsize プロパティとします。パーセント値はグリフ c の高さに対する割合です。 T = Tascent + Tdescent をターゲットサイズとします。 minsize < 0 なら minsize を 0 に、maxsize < minsize の場合は maxsizeminsize にします。 0 ≤ minsizemaxsize の場合:
        • T ≤ 0 の場合 Tascentminsize / 2 + AxisHeight として TdescentminsizeTascent にする。
        • 0 < T < minsize の場合は Tascent を max(0, (TascentAxisHeight) × minsize / T + AxisHeight ) TdescentminsizeTascent にする。
        • maxsize < T の場合は Tascent を max(0, (TascentAxisHeight) × maxsize / T + AxisHeight ) TdescentmaxsizeTascent にする。
        デフォルトの maxsize で値 ∞ は、他のどんなサイズよりも大きいものとして扱われます。すなわち、minsize ≤ maxsize は常に真、maxsize < minsize および maxsize < T は常に偽です。
        このステップで、 minsizeTmaxsize が成り立つことが保証されます。さらにターゲット値が数式軸に対して対称ストレッチとなる場合、 math axis に関して TascentAxisHeight = Tdescent + AxisHeight も維持されます。
      6. inline sizeink line-ascentink line-descentline-ascentline-descentストレッチグリフのシェイプアルゴリズムでブロック方向 Tascent + Tdescent にストレッチしたものから得られます。 数式内容の inline size はストレッチグリフの幅です。ストレッチグリフは line-under 方向へ Δ ずらして、その中心がターゲットの中心に合うようにします。内容のインクアセントはストレッチグリフの ascent − Δ、インクディセントはストレッチグリフの descent + Δ になります。これらの中心座標は「½ (ascent − descent)」なので、Δ = [(ascent of stretchy glyph − descent of stretchy glyph) − (TascentTdescent)]/2 です。
      7. 演算子の描画は、直前のボックスメトリクスで決定された位置に、ストレッチグリフのシェイプ アルゴリズムでブロック方向 Tascent + Tdescent までストレッチしたグリフで行われ、さらに Δ だけ line-over 方向にずらされます。
      7 左中括弧のベースサイズ、サイズバリアントとグリフアセンブリ
  3. 演算子が largeop プロパティを持ち、 <mo> 要素の math-stylenormal のとき:
    1. MathVariants テーブルを使い、高さが DisplayOperatorMinHeight 以上のグリフを探します。 なければ、一番大きいベース以外のグリフ、それもなければ 3.2.1.1 <mtext> のレイアウトアルゴリズムにフォールバックします。

    2. 数式内容の min-content inline sizemax-content inline sizeinline size、およびブロックメトリクスは、得られたグリフによります。
    3. そのグリフを描画します。
    8 総和記号のベースサイズと displaystyle サイズ
  4. その他の場合は3.2.1.1 <mtext> のレイアウトアルゴリズムにフォールバックします。

上記のいずれかのステップで ストレッチグリフのシェイプ アルゴリズムが使われた場合は、数式内容の italic correction はそのアルゴリズムで返された値に設定されます。

3.2.5 スペース <mspace>

mspace 空要素は、その属性によって設定された任意のサイズの空白を表す。

<mspace> 要素は、 2.1.3 グローバル属性 で説明されている属性と、以下の属性を受け入れる:

width, height, depth が存在する場合、 その値は有効な <length-percentage> でなければならない。

  • width 属性が存在し、有効でありパーセントでない場合、 その属性は要素の 表示ヒント として、その要素の width プロパティに対応する値を設定するために使われる。
  • height 属性が存在せず、有効でないかパーセントの場合、要求された line-ascent は 0 となる。 それ以外の場合は height 属性の解決値で負の値は 0 に丸める。
  • height 属性と depth 属性の両方が存在し、有効でかつパーセントでない場合、 それらは 表示ヒント として使われ、要素の height プロパティに "calc(", height 属性値, " + ", depth 属性値, ")" を連結した値を設定する。 どちらか一方だけが存在し有効かつパーセントでない場合、それは 表示ヒント としてその要素の height プロパティに対応する値を設定する。

次の例では mspace を使って式内のスペースを強制的に設けている(スペースを視覚化しやすくするために 1px の青いボーダーが追加されている):

<math>
  <mn>1</mn>
  <mspace width="1em"
          style="border-top: 1px solid blue"/> 
  <mfrac>
    <mrow>
      <mn>2</mn>
      <mspace depth="1em"
              style="border-left: 1px solid blue"/>
    </mrow>
    <mrow>
      <mn>3</mn>
      <mspace height="2em"
              style="border-left: 1px solid blue"/>
    </mrow>
  </mfrac>
</math>
mspace example

<mspace> 要素の計算された display プロパティ値が block math または inline math と等しくない場合、 対応する値が記述されている CSS 仕様に従ってレイアウトされる。 それ以外の場合、 <mspace> 要素は 9 のようにレイアウトされる。 min-content inline sizemax-content inline size および inline sizewidth プロパティの解決値と等しい。 block sizeheight プロパティの解決値と等しい。 line-ascent は上記で決定された要求された line-ascent と等しい。

9 <mspace> 要素のボックスモデル
height/depth という用語は [MATHML3] 由来であり、 そのインスピレーション元は [TEXBOOK] である。
3.2.5.1 スペース類似要素の定義

多くの MathML 表示要素は「スペース類似(space-like)」であり、通常は空白としてレンダリングされ、 それが現れる式の数学的意味には影響しない。 そのため、これらの要素は他の MathML 式の中でもやや例外的な動作をする場合が多い。

MathML コア要素は もし次のいずれかであれば、 スペース類似要素 となる:

  1. mtext または mspace である場合;
  2. あるいは、全ての フロー内 子要素が スペース類似 である グループ化要素 または mpadded である場合。

同じ定義がビジュアルフォーマットモデルのボックスにも適用され、 匿名 <mrow> ボックスグループ化要素 として扱われる。

mphantom は、その内容がスペース類似でない限り、自動的にスペース類似とは見なされない点に注意。 これは、隣接する要素がスペース類似かどうかで演算子スペースが影響を受けるためである。 <mphantom> 要素は主として式の整列の補助を意図しており、 <mphantom> の隣の演算子は <mphantom> の内容があるかのように挙動するべきであり、 等しい大きさの空白領域の隣であるかのように振る舞うべきではない。

3.2.6 文字列リテラル <ms>

ms 要素は、コンピュータ代数システムや「プログラム言語」を含む他のシステムによって解釈されるような式内の 「文字列リテラル」を表す用途で使う。

<ms> 要素は 2.1.3 グローバル属性 で説明されている属性を受け付ける。そのレイアウトアルゴリズムは mtext 要素と同じである。

次の例では ms を使ってリテラル文字列を記述している:

<math>
  <mi>s</mi>
  <mo>=</mo>
  <ms>"hello world"</ms>
</math>
ms example
MathML3 では lquote 属性や rquote 属性で それぞれ開き引用符と閉じ引用符として使う文字列を指定できたが、 これらはサポートされなくなり、 引用符は <ms> 要素内部のテキストとして指定しなければならない。 レガシードキュメントの視覚表現を保持するためには CSS ルールを追加できる。 例えば左から右方向の場合:
ms:before, ms:after {
  content: "\0022";
}
ms[lquote]:before {
  content: attr(lquote);
}
ms[rquote]:after {
  content: attr(rquote);
}

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

トークン以外にも、いくつかの MathML 表示要素のファミリーが存在する。一つのファミリーは添字や上付き文字などの各種「スクリプト」記法を扱う。もう一つのファミリーは行列やテーブルに関係する。本節で述べるその他の要素は、分数や根号などの基本記法や、スタイルプロパティの設定やエラー処理などの汎用的な機能を扱う。

3.3.1 部分式のグループ化 <mrow>

mrow 要素は、一つ以上の部分式をまとめてグループ化するために使う。通常、演算子として働く <mo> 要素一つ以上と、それらの「オペランド」となる式から構成される。

次の例では mrow を用いて、「1 + 2/3」和を分数の分子( mfrac の1番目の子)としてグループ化し、さらに冪乗式( msup の1番目の子)を構成し、それを5乗している。 mrow 単独では、グループ化した内容の周囲に視覚的な囲いは追加しないことに注意。これらを明示的に追加するには mo 要素を用いる必要がある。

mrow 要素内では、子要素の垂直位置合わせ( アルファベットベースラインまたは数学ベースラインに従う)が適切に行われ、囲い記号は垂直方向に伸長され、+演算子の前後のスペースも自動的に調整される。

<math>
  <msup>
    <mrow>
      <mo>(</mo>
      <mfrac>
        <mrow>
          <mn>1</mn>
          <mo>+</mo>
          <mfrac>
            <mn>2</mn>
            <mn>3</mn>
          </mfrac>
        </mrow>
        <mn>4</mn>
      </mfrac>
      <mo>)</mo>
    </mrow>
    <mn>5</mn>
  </msup>
</math>
mrow example

<mrow> 要素は 2.1.3 グローバル属性 で説明されている属性を受け付ける。 <mrow> 要素の フロー内 子要素 child1, child2, …, childN10 の通りにレイアウトされる。子ボックスは横一列に順次配置され、そのすべての アルファベットベースライン が揃えられる。

10 <mrow> 要素のボックスモデル
ボックスモデルによって アルファベットベースライン が揃えられるので、分数バーや対称に伸長する演算子も、典型的な場合は 数式軸に合わせて揃う。 AxisHeight がすべての フロー内 子で同一の場合である。
3.3.1.1 ブロック軸方向の演算子伸長アルゴリズム
11 ブロック軸方向における演算子の対称・非対称伸長

ブロック軸方向の演算子伸長アルゴリズム は、以下の手順から成る:

  1. ブロック伸長サイズ制約 または インライン伸長サイズ制約 が存在する場合、レイアウトされる要素は 装飾演算子 である。同じサイズ制約で フロー内 子のうち装飾演算子であるもの1つをレイアウトし、他の フロー内 子は サイズ制約なしでレイアウトし、終了する。
  2. それ以外の場合、 フロー内 子のリストを LToStretch装飾演算子 かつ stretchy プロパティおよびブロック stretch axisがある)と LNotToStretch に分割する。
  3. LNotToStretch のすべてに伸長サイズ制約なしでレイアウトを行う。 LToStretch が空なら終了。 LNotToStretch が空の場合は LToStretch のすべてに ブロック伸長サイズ制約 (0, 0) でレイアウトを行う。
  4. 前のステップでレイアウトした フロー内 子の マージンボックス のうち 最大のインクアセント・最大のインクディセントを それぞれ Uascent, Udescent として求める。
  5. LToStretch の全要素を ブロック伸長サイズ制約 (Uascent, Udescent) で(再)レイアウト。
3.3.1.2 <mrow> のレイアウト

このボックスが 匿名 <mrow> ボックス でなく、紐付く要素の計算した display プロパティが block math または inline math でない場合は 対応する値が記述されている CSS 仕様に従ってレイアウトされる。 それ以外の場合は以下のレイアウトが行われる。

子ボックスが 装飾演算子 でなく、かつ イタリック補正が0でなければ それは 斜体となる。

大型演算子は イタリック補正 が非零となる場合があるが、 これは添字添付時に利用される。 より一般的には全ての 装飾演算子 の周囲スペースはlspace および rspace 指定に従い算出されるため、斜体扱いしない。

min-content インラインサイズmax-content インラインサイズも同様)は、 以下のアルゴリズムで計算される:

  1. このボックスが math 要素であるか、装飾演算子でなければ add-space を true に、そうでなければ false に設定。
  2. inline-offset に0を設定する。
  3. previous-italic-correction に0を設定する。
  4. すべての フロー内 子について繰り返す:
    1. その子が斜体でなければ inline-offsetprevious-italic-correction を加算。
    2. 装飾演算子であり add-space が true なら inline-offsetlspace を加算。
    3. その子の margin boxmin-content インラインサイズ(または max-content インラインサイズ)を inline-offset に加算。
    4. その子が斜体なら previous-italic-correctionイタリック補正 を設定。 そうでなければ0を設定。
    5. 装飾演算子かつ add-space が true なら inline-offsetrspace を加算。
  5. inline-offsetprevious-italic-correction を加算。
  6. inline-offset を返す。

フロー内 子は ブロック軸方向の演算子伸長アルゴリズム でレイアウトされる。

数式コンテンツの inline size は、 数式コンテンツの min-content inline size および max-content inline size と同じ計算法で、 フロー内 子の margin boxinline size を使って計算される。

数式コンテンツの インク・ラインアセント(または ラインアセント)は、 すべての フロー内 子の margin boxインク・ラインアセント(または ラインアセント)の最大値となる。同様に、 インク・ラインディセント(または ラインディセント)は すべての フロー内 子の margin boxインク・ラインディセント(または インク・ラインアセント)の最大値となる。

フロー内 子の位置決めは次のアルゴリズムで行われる:

  1. このボックスが math 要素であるか、装飾演算子でなければ add-space を true に、そうでなければ false に設定。
  2. inline-offset に0を設定。
  3. previous-italic-correction に0を設定。
  4. すべての フロー内 子について繰り返し:
    1. 斜体でなければinline-offsetprevious-italic-correctionを加算。
    2. 装飾演算子かつadd-spaceがtrueならinline-offsetlspace を加算。
    3. その子のインラインオフセットinline-offsetに設定し、ブロックオフセットは子のアルファベットベースラインが全体のアルファベットベースラインに合わせられるように設定。
    4. その子のmargin boxinline sizeinline-offsetに加算。
    5. 斜体ならprevious-italic-correctionイタリック補正を設定し、そうでなければ0を設定。
    6. 装飾演算子かつadd-spaceがtrueならinline-offsetrspaceを加算。

数式コンテンツのイタリック補正は、最後のフロー内子(previous-italic-correctionの最終値)とする。

3.3.2 分数 <mfrac>

mfrac 要素は分数に用いられる。二項係数やルジャンドル記号など分数型オブジェクトもマークアップ可能。

<mfrac> 要素の計算された display プロパティが block math または inline math でない場合、該当するCSS仕様に従ってレイアウトされる。 それ以外は以下のレイアウトになる。

<mfrac> 要素は 2.1.3 グローバル属性 加えて、次の属性を受け付ける:

linethickness 属性は、分数バーとして用いる 分数線の太さ を示す。指定がある場合、その値は有効な <length-percentage> でなければならない。 属性がない場合や無効な値なら FractionRuleThickness がデフォルト値となる。 パーセント値はデフォルト値に相対的に解釈。 負の値は0と解釈される。

次の例は 4 つの異なる linethickness の分数を示す。バーは常に + や − の中央に揃い、分子分母は水平方向に中央揃え。 displaystyle でない分数は、隙間やフォントサイズが小さい。

<math>
  <mn>0</mn>
  <mo>+</mo>
  <mfrac displaystyle="true">
    <mn>1</mn>
    <mn>2</mn>
  </mfrac>
  <mo></mo>
  <mfrac>
    <mn>1</mn>
    <mn>2</mn>
  </mfrac>
  <mo>+</mo>
  <mfrac linethickness="200%">
    <mn>1</mn>
    <mn>234</mn>
  </mfrac>
  <mo></mo>
  <mrow>
    <mo>(</mo>
    <mfrac linethickness="0">
      <mn>123</mn>
      <mn>4</mn>
    </mfrac>
    <mo>)</mo>
  </mrow>
</math>
mfrac example

<mfrac> 要素は displaystylefalse に、 もしくは既に false なら scriptlevel を子内部で1増やす。 2番目の子内部で math-shiftcompact に設定。 分数線と周辺要素(例えばマイナス記号や他の分数線等)の混同を避けるため、デフォルトで1ピクセルのスペースを要素の周囲に追加する。 ユーザーエージェントスタイルシート には次のルールが必須:

mfrac {
  padding-inline: 1px;
}
mfrac > * {
  math-depth: auto-add;
  math-style: compact;
}
mfrac > :nth-child(2) {
  math-shift: compact;
}

<mfrac> 要素の フロー内 子が2つでない場合、そのレイアウトは mrow 要素と同様となる。 2つの場合、1番目の フロー内 子を 分子、 2番目は 分母 とし、下記のレイアウトアルゴリズムとなる。

実際には <mfrac> 要素は2つの フロー内 子を持つ。 従って CSS ルールは scriptlevel, displaystyle, math-shift の分子・分母ごとの切り替え操作を行うことになる。
3.3.2.1 分数線が非ゼロの場合

分数線の太さが非ゼロの場合、 <mfrac> 要素は 12 のようにレイアウトされる。 分数線は visibilityvisible の場合のみ描画される。 このとき分数線の色は要素の color を使う。

12 <mfrac> 要素のボックスモデル

min-content インラインサイズmax-content インラインサイズも同様)は、分子margin box のそれと 分母margin box のどちらか大きい方。

inline 伸長サイズ制約 または block 伸長サイズ制約 がある場合、 分子 も同じ伸長サイズ制約でレイアウトし、 そうでなければ制約なしでレイアウト。分母 は常に制約なしでレイアウト。

数式コンテンツの inline size は、 分子分母margin boxinline size の大きい方。

NumeratorShift は以下の最大値:

DenominatorShift は以下の最大値:

数式コンテンツの line-ascent は、以下の最大値:

数式コンテンツの line-descent は、以下の最大値:

分子分母も同様)の inline offset は、数式コンテンツの inline size の半分− 分子(分母)の margin boxinline size の半分。

分子分母も同様)の アルファベットベースライン は 基準ベースラインから NumeratorShiftDenominatorShift)だけ line-overline-under)方向にずらす。

math content boxcontent box 内でブロック開始端が揃い、エッジ中央も揃うよう配置する。

分数線の inline sizecontent boxinline size で、 inline-start は content box の inline-start と一致。 分数線中心は math content boxアルファベットベースライン から AxisHeight だけ line-over 側にシフトする。 block size分数線の太さ になる。

3.3.2.2 分数線がゼロの場合

分数線の太さがゼロの場合、 <mfrac> 要素は 13 のようにレイアウトされる。

13 <mfrac> 要素(分数線なし)のボックスモデル

数式コンテンツの min-content inline sizemax-content inline sizeinline size3.3.2.1 分数線が非ゼロの場合 と同様に計算される。

inline 伸長サイズ制約 または block 伸長サイズ制約 がある場合、 分子 も同じ制約でレイアウト、 そうでなければ制約なし。分母 は常に制約なし。

math-stylecompact なら TopShiftBottomShift はそれぞれ StackTopShiftUpStackBottomShiftDown を用いる。 それ以外(normal)は StackTopDisplayStyleShiftUpStackBottomDisplayStyleShiftDown を使う。

Gap は (BottomShift分母インクアセント) +(TopShift分子インクディセント) と定義。 math-stylecompact なら GapMinStackGapMin。 それ以外は StackDisplayStyleGapMin。 Δ = GapMinGap が正なら TopShiftBottomShift をそれぞれ Δ/2、Δ−Δ/2 増やす。

数式コンテンツの line-ascent は、以下の最大値:

数式コンテンツの line-descent は、以下の最大値:

分子分母inline offset 計算は、 3.3.2.1 分数線が非ゼロの場合と同じ。

分子分母も同様)の アルファベットベースライン は 基準ベースラインから TopShift(−BottomShift)だけ line-overline-under)方向にずらす。

math content boxcontent box 内でブロック開始端が揃い、中央も揃うよう配置する。

3.3.3 根号 <msqrt>, <mroot>

根号要素は、内容の上に線を持つ根号記号√を使った式を構成する。 msqrt 要素は 平方根に用いられ、mroot 要素は たとえば立方根のように添字付きの根号に使われる。

<msqrt> および <mroot> 要素は 2.1.3 グローバル属性 で説明されている属性を受け付ける。

次の例は msqrt で書かれた平方根と mroot で書かれた立方根を含むもの。 msqrt は子要素が複数あり、平方根が全てに適用されていること、 mroot は必ず2つの子要素を持ち、2番目の子(数字3)が添字として1番目の子(平方根)全体にかかっていることに注意。 またこれらの要素では mroot の指数部は、分数の分子分母より小さくスケールダウンされつつ、フォントサイズが変わるだけであることも示す。

<math>
  <mroot>
    <msqrt>
      <mfrac>
        <mn>1</mn>
        <mn>2</mn>
      </mfrac>
      <mo>+</mo>
      <mn>4</mn>
    </msqrt>
    <mn>3</mn>
  </mroot>
  <mo>+</mo>
  <mn>0</mn>
</math>
msqrt-mroot example

<msqrt> および <mroot> 要素は math-shiftcompact に設定する。 <mroot> 要素は全ての子のうち最初の子以外に scriptlevel を2増やし、displaystyle を "false" にする。 ユーザーエージェントスタイルシート にはその挙動を実現するため次のルールが必須:

mroot > :not(:first-child) {
  math-depth: add(2);
  math-style: compact;
}
mroot, msqrt {
  math-shift: compact;
}

<msqrt><mroot> 要素の計算された display プロパティが block math または inline math でない場合、対応するCSS仕様に従ってレイアウトされる。 それ以外は以下レイアウトとなる。

<mroot>フロー内 子が2つでない場合は mrow 要素と同様のアルゴリズムでレイアウトされる。 2つの場合、最初の フロー内 子を mroot の基底 、2番目を mroot の指数 と呼び、そのレイアウトアルゴリズムは下記。

実際には <mroot> 要素は2つの フロー内 子を持ち、CSSルールは 指数に対して scriptleveldisplaystyle 切り替えを行うのみ。

<msqrt> 要素は 匿名 <mrow> ボックスmsqrt の基底)を生成する。

3.3.3.1 根号記号

根号記号は <msqrt><mroot> 要素の visibilityvisible の場合のみ描画される。 その場合、記号はその要素の color で描画。

根号グリフ は、 U+221A SQUARE ROOT 文字で得られるグリフ。

根号ギャップRadicalVerticalGapmath-stylecompact の時) または RadicalDisplayStyleVerticalGapmath-stylenormal の時)。

伸縮する根号グリフのターゲットサイズは RadicalRuleThickness根号ギャップ、 基底のインク高さの合計。

根号グリフのボックスメトリクス および 根号の描画 は、 伸縮グリフの字形化アルゴリズム(ターゲットサイズを block dimension とする)に従う。

3.3.3.2 平方根

<msqrt> 要素は 14 のようにレイアウトされる。

14 <msqrt> 要素のボックスモデル

数式コンテンツの min-content inline sizemax-content inline sizeも同様)は 根号グリフブロック軸方向に伸ばした場合の好ましいインラインサイズ と、msqrt の基底margin boxmin-content inline sizemax-content inline size)との和。

数式コンテンツの inline size は、 根号グリフのボックスメトリクス のアドバンス幅と msqrt の基底の margin box の inline sizeの和。

数式コンテンツの line-ascent は以下の最大値:

数式コンテンツの line-descent は以下の最大値:

オーバーバーの inline sizemsqrt の基底の margin box の inline sizemsqrt の基底および オーバーバーの inline offset も同じで、 値は 根号グリフのボックスメトリクスの幅。

msqrt の基底アルファベットベースライン は全体のベースラインと揃う。 オーバーバーの block sizeRadicalRuleThickness。 その垂直中心は、数式コンテンツの line-ascentRadicalExtraAscenderRadicalRuleThickness÷2 だけ ベースラインから line-over 方向にオフセット。

最後に 根号記号の描画 を行う:

3.3.3.3 添字付き根号

<mroot> 要素は 15 のようにレイアウトされる。 mroot の指数を一旦無視して、 mroot の基底 と根号グリフを 14 と同様のアルゴリズムでレイアウトし緑で示す margin box B を構成する。

15 <mroot> 要素のボックスモデル

数式コンテンツの min-content inline sizemax-content inline sizeも同様)は max(0, RadicalKernBeforeDegree)、 mroot の指数margin box の同サイズ、 max(−そのサイズ, RadicalKernAfterDegree) 、B の 同サイズ の合計。

同じ値域制限で、 AdjustedRadicalKernBeforeDegree および AdjustedRadicalKernAfterDegree はそれぞれ max(0, RadicalKernBeforeDegree) および max(−指数 margin box のinline size, RadicalKernAfterDegree) と定義。

数式コンテンツの inline sizeAdjustedRadicalKernBeforeDegree、 指数の margin boxinline sizeAdjustedRadicalKernAfterDegree、 B の inline size の合計。

数式コンテンツの line-ascent は以下の最大値:

数式コンテンツの line-descent は以下の最大値:

指数の inline offsetAdjustedRadicalKernBeforeDegreemroot の基底も同じ位置+指数 margin box の inline size

B の アルファベットベースライン は 全体の アルファベットベースライン と揃える。 指数の アルファベットベースラインline-under エッジから RadicalDegreeBottomRaisePercent × B の block size+ 指数 margin box の line-descent だけオフセットされる。

一般に根号の添字前カーニングは正、後カーニングは負なので、 ルート要素の開始側にスペースができ、指数部は根号記号とオーバーラップすることになる。

3.3.4 スタイル変更 <mstyle>

歴史的に、 mstyle 要素は、その内容のレンダリングに影響するスタイル変更を行うために導入された。

<mstyle> 要素は 2.1.3 グローバル属性 で説明されている属性を受け付ける。 レイアウトアルゴリズムは mrow 要素と同じである。

<mstyle> はフルMathMLとの互換性のために実装されている。MathML Coreのみをターゲットとする場合は、スタイリングにCSSの利用が推奨される。

次の例では、 mstyle を使ってscriptlevel およびdisplaystyle の設定を行う。 これによって、それぞれ子孫のフォントサイズおよび添字の配置に影響が出ることがわかる。 MathML Core では mrow だけでもよい。

<math>
  <munder>
    <mo movablelimits="true">*</mo>
    <mi>A</mi>
  </munder>
  <mstyle scriptlevel="1">
    <mstyle displaystyle="true">
      <munder>
        <mo movablelimits="true">*</mo>
        <mi>B</mi>
      </munder>
      <munder>
        <mo movablelimits="true">*</mo>
        <mi>C</mi>
      </munder>
    </mstyle>
    <munder>
      <mo movablelimits="true">*</mo>
      <mi>D</mi>
    </munder>
  </mstyle>
</math>
mstyle example

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

merror 要素は内容を「エラーメッセージ」として表示する。この要素の意図は、他の入力からMathMLを生成するプログラムが入力の構文エラーを通知するための標準的な方法を提供することである。

次の例では merror を使い、LaTeXのような入力のパースエラーを示している:

<math>
  <mfrac>
    <merror>
      <mtext>Syntax error: \frac{1}</mtext>
    </merror>
    <mn>3</mn>
  </mfrac>
</math>
merror example

<merror> 要素は 2.1.3 グローバル属性 で説明されている属性を受け付ける。 レイアウトアルゴリズムは mrow 要素と同じである。 ユーザーエージェントスタイルシート にはエラーメッセージを視覚的に強調するため次のルールが必須:

merror {
  border: 1px solid red;
  background-color: lightYellow;
}

3.3.6 内容周囲スペース調整 <mpadded>

mpadded 要素は フロー内 子の内容と同じように描画されるが、 <mpadded> の属性に従い、その内容のサイズおよび相対位置の基準点が変更される。

<mpadded> 要素は 2.1.3 グローバル属性 で説明されている属性の他、以下の属性を受け付ける:

widthheightdepthlspace および voffset が存在する場合、その値は有効な <length-percentage> でなければならない。

次の例では mpadded を使って分数の周りのスペースを調整している (青色背景で視覚化)。 属性なしでは mrow と同じ振る舞いだが、 属性でボックスのサイズ(width・height・depth)や分数の配置(lspace・voffset)が指定できる。

<math>
  <mrow>
    <mn>1</mn>
    <mpadded style="background: lightblue;">
      <mfrac>
        <mn>23456</mn>
        <mn>78</mn>
      </mfrac>
    </mpadded>
    <mn>9</mn>
  </mrow>
  <mo>+</mo>
  <mrow>
    <mn>1</mn>
    <mpadded lspace="2em" voffset="-1em" height="1em" depth="3em" width="7em"
             style="background: lightblue;">
      <mfrac>
        <mn>23456</mn>
        <mn>78</mn>
      </mfrac>
    </mpadded>
    <mn>9</mn>
  </mrow>
</math>
mpadded example
3.3.6.1 内側ボックスと要求パラメータ

mpadded 要素は 匿名 <mrow> ボックスmpadded 内部ボックス)を生成し、 inner inline size・inner line-ascent・inner line-descent というパラメータを持つ。

指定パラメータの決定方法:

  • 指定幅は width プロパティの解決値。 width 属性が存在し有効かつパーセントでなければ、 その値で表示ヒントとして 要素の width プロパティに設定。
  • height 属性が存在せず無効またはパーセントなら指定高さは inner line-ascent。 そうでなければheight属性の解決値(負値は0に丸める)。
  • depth 属性が存在せず無効またはパーセントなら指定depthは inner line-ascent。 そうでなければdepth属性の解決値(負値は0に丸める)。
  • lspace 属性が存在せず無効またはパーセントなら指定lspaceは0。そうでなければ解決値(負値は0に丸める)。
  • voffset 属性が存在せず無効またはパーセントなら指定voffsetは0。そうでなければ解決値。
    voffset の負値は 0 に丸められない。
3.3.6.2 <mpadded> のレイアウト

<mpadded> 要素の計算された display プロパティが block math または inline math でない場合、対応するCSS仕様に従ってレイアウトされる。 それ以外の場合、16 のようにレイアウトされる。

16 <mpadded> 要素のボックスモデル

数式コンテンツの min-content inline sizemax-content inline sizeは、 3.3.6.1 内側ボックスと要求パラメータ で計算される値("inner inline size" の代わりに mpadded 内部ボックスの値を使う)。

数式コンテンツの inline size3.3.6.1 内側ボックスと要求パラメータで計算される指定幅。

数式コンテンツの line-ascent は指定高さ、 line-descent は指定depth。

mpadded 内部ボックス は、 その アルファベットベースライン を 指定voffsetだけ line-over 方向にシフトして配置される。

3.3.7 部分式を不可視化 <mphantom>

歴史的には、 mphantom 要素は、その内容を不可視状態で描画するが、内容を通常通りレンダリングした場合と同じ計量サイズや他の寸法(アルファベットベースラインの位置等を含む)を保持するために導入された。

次の例では mphantom を使うことで、分数の分子と分母の対応部分の整列が確実になるようにしている:

<math>
  <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>
</math>
mphantom example

<mphantom> 要素は 2.1.3 グローバル属性で説明されている属性を受け付ける。 レイアウトアルゴリズムは mrow 要素と同じである。 ユーザーエージェントスタイルシート では内容を不可視化するために、次のルールが必須である:

mphantom {
  visibility: hidden;
}
<mphantom> はフルMathMLとの互換性のために実装されている。MathML Coreのみをターゲットとする場合は、スタイリングにはCSS利用が推奨される。

3.4 添字とリミットの構成要素

このセクションで説明する要素は、基底の周囲に一つまたは複数のスクリプト(添え書き)を配置する。記号にさまざまな種類の添字や装飾を付けることは数学では非常に一般的な記法装置である。純粋な視覚的レイアウトだけなら、与えられた基底の周囲すべての伝統的なスクリプト位置にスクリプト・装飾を配置できる汎用要素ひとつで十分であろう。しかし一般的な記法の抽象構造をより明確に表現するため、MathMLではより専門化された複数のスクリプティング要素を提供している。

下付き・上付き要素に加えて、MathML には基底の上下にスクリプトを配置する overscript/underscript 要素がある。これらは大型演算子へのリミット設置や、基底の上・下へのアクセントやラインの配置に使うことができる。

3.4.1 下付き・上付き <msub>, <msup>, <msubsup>

msub, msup および msubsup 要素は、 MathML式に添字(下付きや上付き)を付加するために使う。 これらは 2.1.3 グローバル属性で説明されている属性を受け付ける。

次の例は下付き添字と上付き添字の基本的な利用例。スクリプト内部では自動的にフォントサイズが縮小される。

<math>
  <msub>
    <mn>1</mn>
    <mn>2</mn>
  </msub>
  <mo>+</mo>
  <msup>
    <mn>3</mn>
    <mn>4</mn>
  </msup>
  <mo>+</mo>
  <msubsup>
    <mn>5</mn>
    <mn>6</mn>
    <mn>7</mn>
  </msubsup>
</math>
msub-msup-msubsup example

<msub>, <msup> または <msubsup> 要素の計算された display プロパティが block math または inline math でない場合は、対応するCSS仕様に従ってレイアウトされる。 それ以外は以下のレイアウトとなる。

3.4.1.1 <msub>, <msup>, <msubsup> の子

<msub> 要素の フロー内 子が2つでない場合、 mrow 要素と同じレイアウトアルゴリズムになる。 2つの場合、1番目の フロー内 子が msub の基底、 2番目が msub 下付き と呼び、 レイアウトアルゴリズムは 3.4.1.2 下付き付き基底 で説明されている。

<msup> 要素の フロー内 子が2つでない場合、 mrow 要素と同じレイアウトアルゴリズムになる。 2つの場合、1番目の フロー内 子が msup の基底、 2番目が msup 上付き と呼び、 レイアウトアルゴリズムは 3.4.1.3 上付き付き基底 で説明されている。

<msubsup> 要素の フロー内 子が3つでない場合、 mrow 要素と同じレイアウトアルゴリズムになる。 3つの場合、1番目の フロー内 子が msubsup の基底、 2番目が msubsup 下付き、 3番目が msubsup 上付き と呼び、 レイアウトアルゴリズムは 3.4.1.4 下付き・上付き付き基底 で説明されている。

3.4.1.2 下付き付き基底

<msub> 要素は 17 のようにレイアウトされる。 LargeOpItalicCorrectionmsub の基底装飾演算子 で、 largeop プロパティがある場合はその イタリック補正 であり、それ以外は0。

17 <msub> 要素のボックスモデル

数式コンテンツの min-content inline sizemax-content inline sizeも同様)は、 msub の基底margin boxmin-content inline sizeLargeOpItalicCorrectionmsub 下付きmargin boxmin-content inline sizeSpaceAfterScript

inline 伸長サイズ制約 または block 伸長サイズ制約 があれば msub の基底 も同じ制約でレイアウトされ、 そうでない場合は制約なしでレイアウト。スクリプトは常に制約なしでレイアウトされる。

数式コンテンツの inline sizemsub の基底margin boxinline sizeLargeOpItalicCorrectionmsub 下付きmargin boxinline sizeSpaceAfterScript

SubShift は次の最大値:

数式コンテンツの line-ascent は次の最大値:

数式コンテンツの line-descent は次の最大値:

msub の基底inline offset は0、 msub 下付きinline offsetmsub の基底margin boxinline sizeLargeOpItalicCorrection

msub の基底 はその アルファベットベースライン を 全体のベースラインに一致させて配置し、 msub 下付き はその アルファベットベースライン を 基準ベースラインから SubShift だけ line-under 側にシフトして配置される。

3.4.1.3 上付き付き基底

<msup> 要素は 18 のようにレイアウトされる。 ItalicCorrectionmsup の基底装飾演算子 かつ largeop プロパティがない場合 0、それ以外は イタリック補正

18 <msup> 要素のボックスモデル

数式コンテンツの min-content inline sizemax-content inline sizeも同様)は msup の基底margin boxmin-content inline sizeItalicCorrectionmsup 上付きmargin boxmin-content inline sizeSpaceAfterScript

inline 伸長サイズ制約 または block 伸長サイズ制約 があれば msup の基底 も同じ制約でレイアウトされ、 そうでなければ制約なしでレイアウト。スクリプトは常に制約なしでレイアウトされる。

数式コンテンツの inline sizemsup の基底margin boxinline sizeItalicCorrectionmsup 上付きmargin boxinline sizeSpaceAfterScript

SuperShift は次の最大値:

数式コンテンツの line-ascent は次の最大値:

数式コンテンツの line-descent は次の最大値:

msup の基底inline offset は0、 msup 上付きinline offsetmsup の基底margin boxinline sizeItalicCorrection

msup の基底 はその アルファベットベースライン を 全体のベースラインに一致させて配置し、 msup 上付き はその アルファベットベースライン を 基準ベースラインから SuperShift だけ line-over 側にシフトして配置される。

3.4.1.4 下付き・上付き付き基底

<msubsup> 要素は 18 のようにレイアウトされる。 LargeOpItalicCorrectionおよびSubShift3.4.1.2 下付き付き基底に従い、 ItalicCorrectionSuperShift3.4.1.3 上付き付き基底に従う。

19 <msubsup> 要素のボックスモデル

数式コンテンツの min-content inline sizemax-content inline sizeinline sizeも同様)は、 3.4.1.2 下付き付き基底3.4.1.3 上付き付き基底 の計算値のうち最大のものになる。

inline 伸長サイズ制約 または block 伸長サイズ制約 があれば msubsup の基底 も同じ制約でレイアウトされ、 そうでなければ制約なしでレイアウト。スクリプトは常に制約なしでレイアウトされる。

inline 伸長サイズ制約 または block 伸長サイズ制約 があれば msubsup の基底 も同じ制約でレイアウトされ、 そうでなければ制約なしでレイアウト。スクリプトは常に制約なしでレイアウトされる。

SubSuperGap は2つのスクリプト間のblock axis方向の隙間であり、 (SubShiftmsubsup 下付きインクアセント) + (SuperShiftmsubsup 上付きインクディセント) で定義される。 SubSuperGapSubSuperscriptGapMin に満たない場合、次の手順で保証される:

  1. Δ を SuperscriptBottomMaxWithSubscript − (SuperShiftmsubsup 上付きインクディセント) とする。 Δ > 0 なら Δ を {Δと SubSuperscriptGapMinSubSuperGap} の小さい方にし、SuperShift(従って SubSuperGap も)を Δ だけ増やす。
  2. Δ を SubSuperscriptGapMinSubSuperGap とする。 Δ > 0 なら SubscriptShift(および SubSuperGap)をΔだけ増やす。

数式コンテンツの インクアセントline-ascentインクディセントline-descentも同様)は、 3.4.1.2 下付き付き基底3.4.1.3 上付き付き基底 の計算結果(上記調整済みの SubShift, SuperShiftを使う)いずれか大きい値となる。

msubsup の基底・スクリプトの inline offset および block offset3.4.1.2 下付き付き基底 および 3.4.1.3 上付き付き基底に準ずる。

msubsup 下付きmsubsup 上付きでも同様)が空ボックスであっても、 <msubsup> のレンダリングは 3.4.1.3 上付き付き基底3.4.1.2 下付き付き基底 と必ずしも同一にはならない。これは SubSuperGap の追加制約があるためである。 また、空の msubsup 下付き (または msubsup 上付き)の位置も 全体サイズに影響しうる。

アルゴリズムを単純に保つため、特に空スクリプトを特別に処理することは行わない。

3.4.2 下付き・上付き <munder>, <mover>, <munderover>

The munder, mover and munderover elements are used to attach accents or limits placed under or over a MathML expression.

<munderover> 要素は 2.1.3 グローバル属性で説明されている属性に加えて、次の属性を受け付ける:

同様に、<mover> 要素(それぞれ <munder> 要素)は 2.1.3 グローバル属性で説明されている属性に加え、 accent 属性(それぞれ accentunder 属性)を受け付ける。

accent, accentunder 属性は、存在する場合、その値が ブール値 でなければならない。 これらの属性が存在しないか無効な場合は false と見なされる。 ユーザーエージェントはこれらを 3.4.4 Displaystyle, scriptlevel and math-shift in scripts に記載された通りに実装しなければならない。

The following example shows basic use of under- and overscripts. The font-size is automatically scaled down within the scripts, unless they are meant to be accents.

<math>
  <munder>
    <mn>1</mn>
    <mn>2</mn>
  </munder>
  <mo>+</mo>
  <mover>
    <mn>3</mn>
    <mn>4</mn>
  </mover>
  <mo>+</mo>
  <munderover>
    <mn>5</mn>
    <mn>6</mn>
    <mn>7</mn>
  </munderover>
  <mo>+</mo>
  <munderover accent="true">
    <mn>8</mn>
    <mn>9</mn>
    <mn>10</mn>
  </munderover>
  <mo>+</mo>
  <munderover accentunder="true">
    <mn>11</mn>
    <mn>12</mn>
    <mn>13</mn>
  </munderover>
</math>
munder-over-munderover example

If the <munder>, <mover> or <munderover> elements do not have their computed display property equal to block math or inline math then they are laid out according to the CSS specification where the corresponding value is described. Otherwise, the layout below is performed.

3.4.2.1 子要素: <munder>, <mover>, <munderover>

<munder> 要素の フロー内 子が2つでない場合、そのレイアウトアルゴリズムは mrow 要素と同じになる。2つであれば、最初の フロー内 子を munder base、 2番目を munder underscript と呼ぶ。

<mover> 要素の フロー内 子が2つでない場合、そのレイアウトアルゴリズムは mrow 要素と同じになる。2つであれば、最初の フロー内 子を mover base、 2番目を mover overscript と呼ぶ。

<munderover> 要素の フロー内 子が3つでない場合、そのレイアウトアルゴリズムは mrow 要素と同じになる。3つであれば、最初の子を munderover base、 2番目を munderover underscript、 3番目を munderover overscript と呼ぶ。

もし <munder>, <mover> または <munderover>math-style プロパティが compact に設定され、 かつ基底が embellished operatormovablelimits プロパティを持つ場合、 それぞれのレイアウトアルゴリズムは <msub>, <msup>, <msubsup> の 説明と同じになる(3.4.1.2 Base with subscript, 3.4.1.3 Base with superscript など)。

それ以外の場合、<munder>, <mover>, <munderover> のレイアウトアルゴリズムはそれぞれ 3.4.2.3 Base with underscript, 3.4.2.4 Base with overscript および 3.4.2.5 Base with underscript and overscript に記載されている通りである。

3.4.2.2 インライン軸に沿った演算子の伸長アルゴリズム

インライン軸に沿った演算子の伸長アルゴリズム は次の通りである。

  1. If there is an inline stretch size constraint or block stretch size constraint then the element being laid out is an embellished operator. Lay out the base with the same stretch size constraint.
  2. Split the list of in-flow children that have not been laid out yet into a first list LToStretch containing embellished operators with a stretchy property and inline stretch axis; and a second list LNotToStretch.
  3. Perform layout without any stretch size constraint on all the items of LNotToStretch. If LToStretch is empty then stop. If LNotToStretch is empty, perform layout with inline stretch size constraint 0 for all the items of LToStretch.
  4. Calculate the target size T to the maximum inline size of the margin boxes of child boxes that have been laid out in the previous step.
  5. Lay out or relayout all the elements of LToStretch with inline stretch size constraint T.
3.4.2.3 下付き付き基底

<munder> 要素は 20 のようにレイアウトされる。 LargeOpItalicCorrection は、munder baseembellished operator かつ largeop プロパティを持つ場合の イタリック補正 であり、そうでなければ0である。

20 <munder> 要素のボックスモデル

数式コンテンツの min-content inline size(および max-content inline size) は以下の方法で計算されるが、ここでは下記のインラインサイズ計算における munder basemargin boxmunder underscriptmargin box をそれぞれの min-content inline size(あるいは max-content inline size)で置き換えて計算する。

フロー内 の子要素は インライン軸に沿った演算子の伸長アルゴリズム を使ってレイアウトされる。

数式コンテンツの inline size は、次の差の絶対値を決定することで計算される:

上記の第2項で計算された最小値を m とすると、 inline offset は次のようになる: munder base の inline offset は −m − 基底の margin box の半分、 munder underscript の inline offset は −m − underscript の margin box の半分 − 半分の LargeOpItalicCorrection である。

パラメータ UnderShiftUnderExtraDescender は、以下の3つの場合をこの順に検討して決定する:

  1. munder baseembellished operatorlargeop プロパティを持つ場合、 UnderShift は次の最大値である:

    UnderExtraDescender は 0 である。

  2. munder baseembellished operatorstretchy を持ち、 インライン方向が stretch axis である場合、 UnderShift は次の最大値である:

    UnderExtraDescender は 0 である。
  3. 上記のいずれにも当てはまらない場合、 UnderShiftUnderbarVerticalGapaccentunder 属性が true と ASCII 大小区別なしで一致しない場合)、 そうでなければ 0 と等しい。 UnderExtraAscenderUnderbarExtraDescender である。

数式コンテンツの line-ascent は次の最大値である:

数式コンテンツの line-descent は次の最大値である:

アルファベットベースライン は、 munder base のアルファベットベースラインが基準と一致するよう揃えられる。 munder underscript のアルファベットベースラインは、 基準ベースラインから インクラインディセント(munder base の margin box の)+ UnderShift だけ line-under 方向に移動される。

math content boxcontent box 内に配置され、そのブロック開始端が揃えられ、これらのエッジの中央が同じ位置になるようにされる。

3.4.2.4 上付き付き基底

<mover> 要素は 21 のようにレイアウトされる。 LargeOpItalicCorrection は、mover baseembellished operatorlargeop プロパティを持つ場合の イタリック補正 であり、そうでなければ0である。

21 <mover> 要素のボックスモデル

min-content inline size(および max-content inline size)は、 以下のインラインサイズの計算と同様だが、ここでは mover basemargin boxmover overscriptmargin box を それぞれの min-content inline size(または max-content inline size)で置き換えて計算する。

フロー内 の子要素は インライン軸に沿った演算子の伸長アルゴリズム を使ってレイアウトされる。

TopAccentAttachmenttop accent attachment(mover overscript のもの)か、 定義されていない場合は mover overscriptmargin box の半分のいずれかとなる。

数式コンテンツの inline size は、 インライン軸に沿った演算子の伸長アルゴリズム を適用してレイアウトを行い、次の差の絶対値を求めることで計算される:

上記の第2項で計算された最小値を m とすると、 inline offset は次のようになる: mover base の inline offset は −m − 基底の margin box の半分、 mover overscript の inline offset は −m − overscript の margin box の半分 + 半分の LargeOpItalicCorrection である。

パラメータ OverShiftOverExtraDescender は、以下の3つの場合をこの順に検討して決定する:

  1. mover baseembellished operatorlargeop プロパティを持つ場合、 OverShift は次の最大値である:

    OverExtraAscender は 0 である。

  2. mover baseembellished operatorstretchy を持ち、 インライン方向が stretch axis である場合、 OverShift は次の最大値である:

    OverExtraDescender は 0 である。
  3. それ以外の場合、OverShift は次のいずれかである:

    1. OverbarVerticalGapaccent 属性が ASCII 大小区別なしで true と一致しない場合)、
    2. AccentBaseHeightline-ascentmover basemargin box) が非負であればその値、
    3. それ以外は 0。

    OverExtraAscenderOverbarExtraAscender である。

Note
For accent overscripts and bases with line-ascents that are at most AccentBaseHeight, the rule from [OPEN-FONT-FORMAT] [TEXBOOK] is actually to align the alphabetic baselines of the overscripts and of the bases. This assumes that accent glyphs are designed in such a way that their ink bottoms are more or less AccentBaseHeight above their alphabetic baselines. Hence, the previous rule will guarantee that all the overscript bottoms are aligned while still avoiding collision with the bases. However, MathML can have arbitrary accent overscripts, so a more general and simpler rule is provided above: Ensure that the bottom of overscript is at least AccentBaseHeight above the alphabetic baseline of the base.

数式コンテンツの line-ascent は次の最大値である:

数式コンテンツの line-descent は次の最大値である:

アルファベットベースライン は、 mover base のアルファベットベースラインが基準と一致するよう揃えられる。 mover overscript のアルファベットベースラインは、 基準ベースラインから基底の インクラインアセントOverShift だけ line-over 方向に移動される。

math content boxcontent box 内に配置され、そのブロック開始端が揃えられ、これらのエッジの中央が同じ位置になるようにされる。

3.4.2.5 下付きおよび上付き付き基底

<munderover> の一般的なレイアウトは 22 に示される。 LargeOpItalicCorrection, UnderShift, UnderExtraDescender, OverShift, OverExtraDescender の各パラメータは、 3.4.2.3 Base with underscript3.4.2.4 Base with overscript と同様に計算される。

22 <munderover> 要素のボックスモデル

数式コンテンツの min-content inline sizemax-content inline size、 および inline size は、最大の inline offset と最小の inline offset の 絶対差として計算される。これらの極値は 3.4.2.3 Base with underscript3.4.2.4 Base with overscript で計算される対応する極値を取り、それらの極値の極端値を用いて計算される。 inline offsets は、それぞれ munderover base, munderover underscript, munderover overscript について、対応する節と同様に計算されるが、新しい最小値 m(対応する最小値の最小値)を用いる点が異なる。

これらの節と同様に、フロー内 子要素は インライン軸に沿った演算子の伸長アルゴリズム を使ってレイアウトされる。

数式コンテンツの line-ascent および line-descent は、3.4.2.3 Base with underscript3.4.2.4 Base with overscript で計算される極値のうち極端な値を取ることで計算される。

最後に、アルファベットベースラインmunderover base, munderover underscriptmunderover overscript に対して、 それぞれ 3.4.2.3 Base with underscript および 3.4.2.4 Base with overscript と同様に計算される。

math content boxcontent box 内に配置され、そのブロック開始端が揃えられ、これらのエッジの中央が同じ位置になるようにされる。

Note

underscript(あるいは overscript)が空ボックスである場合、基底と overscript(あるいは underscript)は 3.4.2.4 Base with overscript (あるいは 3.4.2.3 Base with underscript) と同様にレイアウトされるが、 空の underscript(あるいは overscript)の位置が追加の空白を生じさせる可能性がある。 アルゴリズムを単純に保つため、空スクリプトを特別扱いする試みは行っていない。

3.4.3 プレスクリプトおよびテンソル指数 <mmultiscripts>

プレサブスクリプトおよびテンソル表記は mmultiscripts 要素で表される。 mprescripts 要素は、 ポストスクリプトとプレスクリプトの間の区切りとして使用される。 これら2つの要素は 2.1.3 グローバル属性で説明されている属性を受け付ける。

次の例は、mprescripts を含む プレスクリプトとポストスクリプトの基本的な使用例を示す。 スクリプトが表示されない位置には空の mrow 要素が使用されている。 スクリプト内ではフォントサイズが自動的に縮小される。

<math>
  <mmultiscripts>
    <mn>1</mn>
    <mn>2</mn>
    <mn>3</mn>
    <mrow></mrow>
    <mn>5</mn>
    <mprescripts/>
    <mn>6</mn>
    <mrow></mrow>
    <mn>8</mn>
    <mn>9</mn>
  </mmultiscripts>
</math>
mmultiscripts example

<mmultiscripts> または <mprescripts> 要素の計算された display プロパティが block math または inline math でない場合、それらは対応する値が記述された CSS 仕様に従ってレイアウトされる。 それ以外の場合は以下のレイアウトが行われる。

<mprescripts> 要素は mrow 要素としてレイアウトされる。

有効な <mmultiscripts> 要素は、次の フロー内 子を含む:

  • 最初の フロー内 子は mmultiscripts 基底 と呼ばれ、 mprescripts 要素であってはならない。
  • これに続いて偶数個の フロー内 子があり、これらは mmultiscripts ポストスクリプト と呼ばれ、いずれも mprescripts 要素ではない。 これらのスクリプトは(空であってもよい)リストを形成し、 subscript, superscript, subscript, superscript, … の順に並ぶ。 連続する子2つ(subscript, superscript)の各組を 下付き/上付きペア と呼ぶ。
  • 任意でその後に mprescripts 要素と偶数個の フロー内 子が続き、これらは mmultiscripts プレサクリプト と呼ばれ、いずれも mprescripts 要素ではない。 これらのスクリプトも(空であってもよい)下付き/上付きペア のリストを形成する。

もし <mmultiscripts> 要素が有効でない場合、そのレイアウトは mrow 要素と同じになる。 それ以外の場合、レイアウトアルゴリズムは 3.4.3.1 Base with prescripts and postscripts に記載された通りに実行される。

3.4.3.1 基底とプレ/ポストスクリプト

<mmultiscripts> 要素は 23 に示すようにレイアウトされる。 各 下付き/上付きペア に対して、 ItalicCorrection および LargeOpItalicCorrection3.4.1.2 Base with subscript および 3.4.1.3 Base with superscript に記載されたように定義される。

23 <mmultiscripts> 要素のボックスモデル

数式コンテンツの min-content inline size(および max-content inline size)は、 以下に述べる数式コンテンツの inline size の計算と同じ方法で求められるが、 mmultiscripts 基底margin box とスクリプトの margin boxes については "inline size" の代わりに "min-content inline size" (それぞれ "max-content inline size") を用いる。

もし inline 伸長サイズ制約 または block 伸長サイズ制約 があれば、 mmultiscripts 基底 も同じ制約でレイアウトされる。 それ以外の場合は制約なしでレイアウトされる。他の要素は常に制約なしでレイアウトされる。

数式コンテンツの inline size は次のアルゴリズムで計算される:

  1. まず inline-offset を 0 に設定する。
  2. mmultiscripts プレサクリプト の各 下付き/上付きペアについて、 inline-offsetSpaceAfterScript と、次のうち大きい方を加算する:

  3. 次に inline-offsetmmultiscripts 基底margin boxinline size を加え、inline-sizeinline-offset に設定する。

  4. mmultiscripts ポストスクリプト の各 下付き/上付きペアについて、 inline-size を少なくとも次の値に修正する:

    また inline-offset を次の最大値に更新する:

    さらに inline-offsetSpaceAfterScript を加算する。

  5. 最後に inline-size を返す。

SubShift(および SuperShift)は、 各 下付き/上付きペア に対して 3.4.1.4 Base with subscript and superscript で記述された各下付き・上付きシフト値の最大値を取ることで算出される。

数式コンテンツの line-ascent は、上で算出した SubShiftSuperShift の値を用いて、各ペアについて 3.4.1.4 Base with subscript and superscript に記載された line-ascent の最大値を取ることで計算される。

数式コンテンツの line-descent は、同様に上で算出した SubShiftSuperShift の値を用いて、各ペアについて 3.4.1.4 Base with subscript and superscript に記載された line-descent の最大値を取ることで計算される。

最後に、フロー内 子要素の配置は次のアルゴリズムで実行される:

  1. まず inline-offset を 0 に設定する。
  2. まず mmultiscripts プレサクリプト の各 下付き/上付きペア について:

    1. inline-offsetSpaceAfterScript を加算する。

    2. pair-inline-size を次の最大値に設定する:

    3. 下付きは inline-start 位置 inline-offset + pair-inline-size − 下付きの margin boxinline size に配置する。

    4. 上付きは inline-start 位置 inline-offset + pair-inline-size − 上付きの margin boxinline size に配置する。

    5. 下付き(および上付き)の alphabetic baseline を、基準の alphabetic baseline から SubShift(それぞれ SuperShift)だけ line-under(それぞれ line-over)方向にシフトして配置する。

    6. inline-offsetpair-inline-size を加算する。

  3. mmultiscripts 基底<mprescripts> のボックスを inline offsets の位置 inline-offset に配置し、 それらの alphabetic baselines を基準の alphabetic baseline と揃える。

  4. 次に mmultiscripts ポストスクリプト の各 下付き/上付きペア について:

    1. pair-inline-size を次の最大値に設定する:

    2. 下付きは inline-start 位置 inline-offsetLargeOpItalicCorrection に配置する。

    3. 上付きは inline-start 位置 inline-offset + ItalicCorrection に配置する。

    4. 下付き(上付き)の alphabetic baseline を、基準の alphabetic baseline から SubShift(それぞれ SuperShift)だけ line-under(それぞれ line-over)方向にシフトして配置する。

    5. inline-offsetpair-inline-size を加算する。

    6. inline-offsetSpaceAfterScript を加算する。

<mmultiscripts> にポストスクリプトが1組だけ含まれる場合、 そのレイアウトは同じ フロー内 子を持つ <msubsup> と同じになる。 しかし msubsup の節 で指摘されている通り、 さらにその下付き(または上付き)が空ボックスである場合は、 <msub>(または <msup>) と同一にはならないことがある。 アルゴリズムを単純に保つため、空スクリプトを特別扱いすることは行わない。

3.4.4 Displaystyle, scriptlevel, math-shift のスクリプト内での挙動

すべての スクリプト要素 について、基本ルールは 1番目以外のすべての子要素に displaystylefalse に設定し、 scriptlevel をインクリメントすること。 ただし mover (または munderover) 要素で accent 属性が ASCII 大文字・小文字問わず true に一致する場合は 2番目(または3番目)の子内部で scriptlevel をインクリメントしない。さらに mover および munderover 要素で accentunder 属性が ASCII 大文字・小文字問わず true に一致する場合も 2番目の子内部で scriptlevel をインクリメントしない。

<mmultiscripts>math-shiftcompact に、mprescripts の前なら偶数番目の子に、mprescripts 後なら奇数番目の子に適用。 <msub> および <msubsup> は2番目の子に math-shiftcompact に設定。 mover および munderover 要素で accent 属性が ASCII 大文字・小文字問わず true の場合 1番目の子に math-shiftcompact を設定。

A. ユーザーエージェント スタイルシート にはこれを実現するため、次のCSSが必須:

msub > :not(:first-child),
msup > :not(:first-child),
msubsup > :not(:first-child),
mmultiscripts > :not(:first-child),
munder > :not(:first-child),
mover > :not(:first-child),
munderover > :not(:first-child) {
  math-depth: add(1);
  math-style: compact;
}
munder[accentunder="true" i] > :nth-child(2),
mover[accent="true" i] > :nth-child(2),
munderover[accentunder="true" i] > :nth-child(2),
munderover[accent="true" i] > :nth-child(3) {
  font-size: inherit;
}
msub > :nth-child(2),
msubsup > :nth-child(2),
mmultiscripts > :nth-child(even),
mmultiscripts > mprescripts ~ :nth-child(odd),
mover[accent="true" i] > :first-child,
munderover[accent="true" i] > :first-child {
  math-shift: compact;
}
mmultiscripts > mprescripts ~ :nth-child(even) {
  math-shift: inherit;
}
実際、本節で説明されたMathML要素の全子要素は フロー内 であり、 <mprescripts> は空となる。 したがって各CSSルールは、実質的にスクリプトに対し displaystylescriptlevel の自動切り替え、 および下付きや基底への math-shift 切り替えを行うことになる。

3.5 表形式の数学

行列・配列その他表状の数式記法は mtable mtr mtd 要素を使ってマークアップする。これらの要素は table, tr td ([HTML])に似ている。

以下の例は、表形式レイアウトにより行列を書けることを示す。分数の横棒や等号の中央と垂直に揃えられていることにも注目。

<math>
  <mfrac>
    <mi>A</mi>
    <mn>2</mn>
  </mfrac>
  <mo>=</mo>
  <mrow>
    <mo>(</mo>
    <mtable>
      <mtr>
        <mtd><mn>1</mn></mtd>
        <mtd><mn>2</mn></mtd>
        <mtd><mn>3</mn></mtd>
      </mtr>
      <mtr>
        <mtd><mn>4</mn></mtd>
        <mtd><mn>5</mn></mtd>
        <mtd><mn>6</mn></mtd>
      </mtr>
      <mtr>
        <mtd><mn>7</mn></mtd>
        <mtd><mn>8</mn></mtd>
        <mtd><mn>9</mn></mtd>
      </mtr>
    </mtable>
    <mo>)</mo>
  </mrow>
</math>
tables example

3.5.1 表または行列 <mtable>

mtableinline-table としてレイアウトされ、 displaystylefalse に設定する。 ユーザーエージェントスタイルシートには この性質を実現するため以下のルールが必須:

mtable {
  display: inline-table;
  math-style: compact;
}

mtable 要素はCSSの table として扱われ、 min-content inline size, max-content inline size, inline size, block size, first baseline set, last baseline set などが決定される。 テーブルの中央は 数式軸と揃う。

<mtable>2.1.3 グローバル属性 で説明されている属性を受け付ける。

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

mtrtable-row としてレイアウトされる。 ユーザーエージェントスタイルシート には この振る舞いを実現するため次のルールが必須:

mtr {
  display: table-row;
}

<mtr>2.1.3 グローバル属性 で説明されている属性を受け付ける。

3.5.3 表または行列のセル <mtd>

mtd は内容を中央揃えと既定のパディングにした table-cell としてレイアウトされる。 ユーザーエージェントスタイルシート には 次のルールが必須:

mtd {
  display: table-cell;
  /* Centering inside table cells should rely on box alignment properties.
     See https://github.com/w3c/mathml-core/issues/156 */
  text-align: center;
  padding: 0.5ex 0.4em;
}

<mtd>2.1.3 グローバル属性の他、以下の属性を受け付ける:

columnspan(および rowspan)属性は colspan (および rowspan) と同じ構文と意味を持ち、 [HTML] の <td> 属性を踏襲。 特にパース方法は 行処理アルゴリズムに従い、 常に "colspan" を "columnspan" と読替える。

[MathML3] 以前ではこのカラム結合属性名は columnspan であり、後方互換性保持のため残っている。

<mtd> 要素は 匿名 <mrow> ボックスを生成する。

3.6 式への動きの付与

歴史的に maction 要素は、式にアクションをバインドする仕組みを提供する。

<maction> 要素は 2.1.3 グローバル属性で説明されている属性のほか、以下の属性を受け付ける。

本仕様では、actiontype および selection 属性に特有の可観測な挙動を定義しない。

以下の例は [MathML3] での "toggle" アクションタイプ例であり、 レンダラーは選択された部分式(初期値は「1/3」)を順にトグル表示する。選択部分式をクリックすると "1/4"、"1/2"、"1/3" ... と巡回する。 これはMathML Coreの一部ではなく、JavaScriptやCSSポリフィルで実装できるが、デフォルトでは最初の子だけが描画される。

<math>
  <maction actiontype="toggle" selection="2">
    <mfrac>
      <mn>1</mn>
      <mn>2</mn>
    </mfrac>
    <mfrac>
      <mn>1</mn>
      <mn>3</mn>
    </mfrac>
    <mfrac>
      <mn>1</mn>
      <mn>4</mn>
    </mfrac>
  </maction>
</math>
maction example

<maction> のレイアウトアルゴリズムは <mrow> と同じである。 ユーザーエージェントスタイルシート には、デフォルト動作(すなわち最初の子以外を隠す)を実装するため次のルールが必須:

maction > :not(:first-child) {
  display: none;
}
<maction> はフルMathMLとの互換性のために実装されている。MathML Core のみを対象とする著者は 独自アクション実装には他のHTML, CSS, JavaScript手法を推奨。 必要があれば [MathML3] で定義された maction 属性にも依拠できる。

3.7 意味情報とプレゼンテーション

semantics 要素は、MathML式に注釈を結びつけるためのコンテナ要素である。通常、 <semantics> 要素の最初の子は注釈対象となるMathML式であり、それ以降の子要素は annotation 要素内のテキスト注釈、または annotation-xml 要素内のより複雑なマークアップ注釈となる。

以下の例では分数「1/2」に一つはテキスト注釈(LaTeX)、もう一つはXML注釈(Content MathML)、さらにSVGやHTML注釈が加えられている。 これらはユーザーエージェントによる描画対象ではない。対応するSVGやHTMLマークアップも注釈として加えられている。

<math>
  <semantics>
    <mfrac>
      <mn>1</mn>
      <mn>2</mn>
    </mfrac>
    <annotation encoding="application/x-tex">\frac{1}{2}</annotation>
    <annotation-xml encoding="application/mathml-content+xml">
      <apply>
        <divide/>
         <cn>1</cn>
         <cn>2</cn>
      </apply>
    </annotation-xml>
    <annotation-xml>
      <svg width="25" height="75" xmlns="http://www.w3.org/2000/svg">
        <path stroke-width="5.8743"
              d="m5.9157 27.415h6.601v-22.783l-7.1813 1.4402v-3.6805l7.1408
                 -1.4402h4.0406v26.464h6.601v3.4005h-17.203z"/>
        <path stroke="#000000" stroke-width="2.3409"
              d="m0.83496 39.228h23.327"/>
        <path stroke-width="5.8743"
              d="m8.696 70.638h14.102v3.4005h-18.963v-3.4005q2.3004-2.3804
                 6.2608-6.3813 3.9806-4.0206 5.0007-5.1808 1.9403-2.1803
                 2.7004-3.6805 0.78011-1.5202 0.78011-2.9804 0-2.3804
                 -1.6802-3.8806-1.6603-1.5002-4.3406-1.5002-1.9003 0-4.0206
                 0.6601-2.1003 0.6601-4.5007 2.0003v-4.0806q2.4404-0.98013
                 4.5607-1.4802 2.1203-0.50007 3.8806-0.50007 4.6407 0 7.401
                 2.3203 2.7604 2.3203 2.7604 6.2009 0 1.8403-0.7001 3.5006
                 -0.68013 1.6402-2.5004 3.8806-0.50007 0.58009-3.1805 3.3605
                 -2.6804 2.7604-7.5614 7.7412z"/>
      </svg>
    </annotation-xml>
    <annotation-xml encoding="application/xhtml+xml">
      <div style="display: inline-flex;
                  flex-direction: column; align-items: center;">
        <div>1</div>
        <div></div>
        <div>2</div>
      </div>
    </annotation-xml>
  </semantics>
</math>
semantics example

<semantics> 要素は 2.1.3 グローバル属性 で説明されている属性を受け付ける。レイアウトアルゴリズムは mrow 要素と同じ。 ユーザーエージェントスタイルシート には、注釈付きのMathML式(最初の子)のみ描画対象とするため次のルールが必須:

semantics > :not(:first-child) {
  display: none;
}

<annotation-xml> および <annotation> 要素は 2.1.3 グローバル属性 のほか以下の属性を受け付ける。

本仕様では encoding 属性に特有の可観測な挙動を定義しない。

<annotation-xml> および <annotation> の レイアウトアルゴリズムは mtext 要素と同じ。

著者は encoding 属性を使い、HTMLインテグレーションポイントやクリップボードコピー、代替レンダリングなど用途で注釈を区別できる。 特にCSSで代替注釈を描画可能。例:
/* Hide the annotated child. */
semantics > :first-child { display: none; }
 /* Show all text annotations. */
semantics > annotation { display: inline; }
/* Show all HTML annotations. */
semantics > annotation-xml[encoding="text/html" i],
semantics > annotation-xml[encoding="application/xhtml+xml" i] {
  display: inline-block;
}

4. 数式レイアウト用CSS拡張

4.1 display: block math および display: inline math

display プロパティ CSS Display Module Level 3 に新しい inner display type が追加される:

Name: display
New values: <display-outside> || [ <display-inside> | math ]

MathML要素でない要素の場合、 指定値が display: block mathdisplay: inline math なら、計算値は block flowinline flow となる。 mtable 要素の計算値は block tableinline tablemtr 要素の場合、計算値は table-rowmtd 要素の場合、計算値は table-cell

計算済 display 値が block mathinline mathMathML要素は、 タグ名等に応じたボックス生成・レイアウトを行う。 未知のMathML要素mrow 要素と同じ挙動になる。

display: block mathdisplay: inline math はMathML要素のデフォルトレイアウトを提供する一方、 ネイティブdisplay値や カスタム値 でこれを上書き可能。 これにより記法拡張やPolyfill等のカスタム表記も実現できる。

以下の例は、MathML mrow 要素の標準レイアウトをグリッド表示に上書きしたもの。

<math>
  <msup>
    <mrow>
      <mo symmetric="false">[</mo>
      <mrow style="display: block; width: 4.5em;">
        <mrow style="display: grid;
                     grid-template-columns: 1.5em 1.5em 1.5em;
                     grid-template-rows: 1.5em 1.5em;
                     justify-items: center;
                     align-items: center;">
          <mn>12</mn>
          <mn>34</mn>
          <mn>56</mn>
          <mn>7</mn>
          <mn>8</mn>
          <mn>9</mn>
        </mrow>
      </mrow>
      <mo symmetric="false">]</mo>
    </mrow>
    <mi>α</mi>
  </msup>
</math>
display example

4.2 math-auto 変換

text-transform プロパティ CSS Text Module Level 4 に新しい値 math-auto が追加される。 テキストノードが1文字だけを含み、計算値が math-auto かつ文字が C.1 italic mappings 「Original」列にある場合、対応する「italic」列の文字に変換される。

一般的な記法として複数文字の識別子(例:"exp"関数名)は標準書体、1文字の変数(例:"n")はイタリック書体にすることがある。 math-auto プロパティはこのデフォルト挙動を実現するためのもの。必要なら上書きも可能。 数学フォントでは、イタリックスタイル化によるグリフ変形とは異なる、Unicode上の C.1 italic mappings に格納されたイタリック体グリフが用意されている点に注意。 左:font-style: italic 右:text-transform: math-auto でのレンダリング例(Latin Modern Math フォント):

font-style: italic VS text-transform: math-auto

4.3 math-style プロパティ

Name: math-style
Value: normal | compact
Initial: normal
Applies to: すべての要素
Inherited: yes
Percentages: n/a
Computed value: 指定キーワード
Canonical order: n/a
Animation type: 非アニメーション
Media: ビジュアル

math-stylecompact の場合、子孫の数式レイアウトは logical height の最小化を目指し、以下を適用する:

次の例は math ルートに math-style: compact(左)と math-style: normal(右)を設定した数式レンダ例。 前者では分数内フォント縮小とΣの制限が下付き・上付きとして描画され、後者ではΣが大型化、分数内空きも増加した。

math-style example

2つの math-style 値は、典型的にインライン(compact)/ディスプレイ(normal)モード式に対応 [TeXBook]。 ディスプレイ式は内部でスクリプトや行列成分/分子分母等をインラインにしたりなど自動切替があり、上書きしたい場合もある。 math-style プロパティでユーザエージェントスタイルシートや displaystyle 属性から 簡単にこの挙動を制御・Polyfill等で拡張できる。

4.4 math-shift プロパティ

Name: math-shift
Value: normal | compact
Initial: normal
Applies to: すべての要素
Inherited: yes
Percentages: n/a
Computed value: 指定キーワード
Canonical order: n/a
Animation type: 非アニメーション
Media: ビジュアル

math-shiftcompact の場合、 子孫の上付き配置には superscriptShiftUpCramped パラメータを用いる。 normal の場合は superscriptShiftUp パラメータを用いる。

このプロパティはMathMLの スクリプト要素 レイアウト時の上付き配置などに用いる。 § 3.4.1 Subscripts and Superscripts <msub>, <msup>, <msubsup>, 3.4.3 Prescripts and Tensor Indices <mmultiscripts>, 3.4.2 Underscripts and Overscripts <munder>, <mover>, <munderover> 参照。

次例は2つの“xの2乗”を同じfont-size・compact math-styleで表示しつつ、 片方は√内につきcompact math-shift、もう片方は normal math-shift で 上付き“2”の位置が微妙に異なる例。

math-shift example

[TeXBook]によれば、 数式は標準でnormal(通常)スタイルを使うが 部分式(根号・分母等)でcompact(TeXでは "cramped")に切り替える場合も。 math-shift で MathMLユーザーエージェントスタイルシート等でこれらの制御が容易。 Polyfill作者もこのプロパティでデフォルト実装の細かな調整が可能。

4.5 math-depth プロパティ

数式各要素についてトップレベルからの「深さ」を記述する math-depth プロパティが導入される。これは font-size 指定値が math の場合の 計算値決定等に使われる。

Name: math-depth
Value: auto-add | add(<integer>) | <integer>
Initial: 0
Applies to: すべての要素
Inherited: yes
Percentages: n/a
Computed value: 整数値、下記参照
Canonical order: n/a
Animation type: 非アニメーション
Media: ビジュアル

math-depth の計算値判定手順:

font-size 指定値が math の場合、 計算値は継承 font-size × 下記手順のスケールファクタとなる:

  1. A=継承 math-depth、 B=計算 math-depth、 C=0.71、S=1.0とする
    • A=BならSを返す
    • B < A ならA,BをswapしInvertScaleFactor=true
    • それ以外はB>AでInvertScaleFactor=false
  2. E=B-A > 0
  3. 継承フォントにOpenType MATHテーブルがあれば:
  4. S×CE
  5. InvertScaleFactor=falseならS、trueなら1/Sを返す

下例は 通常 math-style の数式がLatin Modern Mathフォントで表示される例。 スクリプトや分数などの部分式でフォントサイズが自動縮小されていく。 上付きでは縮小、ルート内部(prescript)ではさらに急速に縮小、分数も内側は縮小だが外側は math-style自動切替のため縮小しない等がわかる。

font-size-scriptlevel example

[TeXBook]準拠のこれら規則は微妙な差があり、専用の math-depth 機構で実装可能なことは重要。 MathMLなら ユーザーエージェントスタイルシートでも適用できる。 Polyfill等の調整にも有用。 MathMLの scriptlevel 属性 で math-depth 変更も可能。

5. OpenType MATH テーブル

本章ではOpenTypeフォントの MATH テーブル [OPEN-FONT-FORMAT] で提供される機能について説明する。 本章全体で、 Cライクな表記 Table.Subtable1[index].Subtable2.Parameter を用いてOpenTypeパラメータを指す。 こうしたパラメータは(サブテーブルが無い・オフセット不正など)利用できない場合もあるため、フォールバック手段が準備されている。

MathMLは適切なOpenType機能を持つ数学フォントで描画することが強く推奨される。ここで用意されるフォールバックでは十分良い描画が保証されない場合がある。

OpenType値(間接的にMathValueRecord経由も含む)がデザイン単位で与えられる場合、レイアウト用途で head.unitsPerEm、CSS font-size またはズーム値を加味して適切な値にスケーリングされる。

5.1 レイアウト定数 (MathConstants)

以下は 最初に利用可能なフォントに対する全体のレイアウト定数である。

デフォルト・フォールバック定数
0
デフォルト罫線太さ
post.underlineThickness もしくは デフォルト・フォールバック定数(定数未定義時)。
scriptPercentScaleDown
MATH.MathConstants.scriptPercentScaleDown / 100 もしくは MATH.MathConstants.scriptPercentScaleDown が null/無い場合は0.71
scriptScriptPercentScaleDown
MATH.MathConstants.scriptScriptPercentScaleDown / 100 または null/値なしの時は0.5041
displayOperatorMinHeight
MATH.MathConstants.displayOperatorMinHeight もしくは 定数未定義時はデフォルト・フォールバック定数
axisHeight
MATH.MathConstants.axisHeight または 定数未定義時 OS/2.sxHeight の半分
accentBaseHeight
MATH.MathConstants.accentBaseHeight または無い場合 OS/2.sxHeight
subscriptShiftDown
MATH.MathConstants.subscriptShiftDown または無い場合 OS/2.ySubscriptYOffset
subscriptTopMax
MATH.MathConstants.subscriptTopMax または 無い場合 ⅘ × OS/2.sxHeight
subscriptBaselineDropMin
MATH.MathConstants.subscriptBaselineDropMin またはデフォルト・フォールバック定数
superscriptShiftUp
MATH.MathConstants.superscriptShiftUp または OS/2.ySuperscriptYOffset(無い時)
superscriptShiftUpCramped
MATH.MathConstants.superscriptShiftUpCramped またはデフォルト・フォールバック定数
superscriptBottomMin
MATH.MathConstants.superscriptBottomMin または無い時 ¼ × OS/2.sxHeight
superscriptBaselineDropMax
MATH.MathConstants.superscriptBaselineDropMax またはデフォルト・フォールバック定数
subSuperscriptGapMin
MATH.MathConstants.subSuperscriptGapMin または未定義時は4 × デフォルト罫線太さ
superscriptBottomMaxWithSubscript
MATH.MathConstants.superscriptBottomMaxWithSubscript または未定義時 ⅘ × OS/2.sxHeight
spaceAfterScript
MATH.MathConstants.spaceAfterScript または未定義時 1/24em
upperLimitGapMin
MATH.MathConstants.upperLimitGapMin または未定義時デフォルト・フォールバック定数
upperLimitBaselineRiseMin
MATH.MathConstants.upperLimitBaselineRiseMin または未定義時デフォルト・フォールバック定数
lowerLimitGapMin
MATH.MathConstants.lowerLimitGapMin または未定義時デフォルト・フォールバック定数
lowerLimitBaselineDropMin
MATH.MathConstants.lowerLimitBaselineDropMin または未定義時デフォルト・フォールバック定数
stackTopShiftUp
MATH.MathConstants.stackTopShiftUp または未定義時デフォルト・フォールバック定数
stackTopDisplayStyleShiftUp
MATH.MathConstants.stackTopDisplayStyleShiftUp またはデフォルト・フォールバック定数
stackBottomShiftDown
MATH.MathConstants.stackBottomShiftDown またはデフォルト・フォールバック定数
stackBottomDisplayStyleShiftDown
MATH.MathConstants.stackBottomDisplayStyleShiftDown またはデフォルト・フォールバック定数
stackGapMin
MATH.MathConstants.stackGapMin または未定義時 3 × デフォルト罫線太さ
stackDisplayStyleGapMin
MATH.MathConstants.stackDisplayStyleGapMin または未定義時 7 × デフォルト罫線太さ
stretchStackTopShiftUp
MATH.MathConstants.stretchStackTopShiftUp またはデフォルト・フォールバック定数
stretchStackBottomShiftDown
MATH.MathConstants.stretchStackBottomShiftDown またはデフォルト・フォールバック定数
stretchStackGapAboveMin
MATH.MathConstants.stretchStackGapAboveMin またはデフォルト・フォールバック定数
stretchStackGapBelowMin
MATH.MathConstants.stretchStackGapBelowMin またはデフォルト・フォールバック定数
fractionNumeratorShiftUp
MATH.MathConstants.fractionNumeratorShiftUp またはデフォルト・フォールバック定数(未定義時)
fractionNumeratorDisplayStyleShiftUp
MATH.MathConstants.fractionNumeratorDisplayStyleShiftUp またはデフォルト・フォールバック定数
fractionDenominatorShiftDown
MATH.MathConstants.fractionDenominatorShiftDown またはデフォルト・フォールバック定数
fractionDenominatorDisplayStyleShiftDown
MATH.MathConstants.fractionDenominatorDisplayStyleShiftDown またはデフォルト・フォールバック定数
fractionNumeratorGapMin
MATH.MathConstants.fractionNumeratorGapMin またはデフォルト罫線太さ
fractionNumDisplayStyleGapMin
MATH.MathConstants.fractionNumDisplayStyleGapMin または未定義時 3 × デフォルト罫線太さ
fractionRuleThickness
MATH.MathConstants.fractionRuleThickness またはデフォルト罫線太さ
fractionDenominatorGapMin
MATH.MathConstants.fractionDenominatorGapMin またはデフォルト罫線太さ
fractionDenomDisplayStyleGapMin
MATH.MathConstants.fractionDenomDisplayStyleGapMin または未定義時 3 × デフォルト罫線太さ
overbarVerticalGap
MATH.MathConstants.overbarVerticalGap または未定義時 3 × デフォルト罫線太さ
overbarExtraAscender
MATH.MathConstants.overbarExtraAscender またはデフォルト罫線太さ
underbarVerticalGap
MATH.MathConstants.underbarVerticalGap または未定義時 3 × デフォルト罫線太さ
underbarExtraDescender
MATH.MathConstants.underbarExtraDescender またはデフォルト罫線太さ
radicalVerticalGap
MATH.MathConstants.radicalVerticalGap または未定義時 1¼ × デフォルト罫線太さ
radicalDisplayStyleVerticalGap
MATH.MathConstants.radicalDisplayStyleVerticalGap またはデフォルト罫線太さ + ¼ OS/2.sxHeight(未定義時)
radicalRuleThickness
MATH.MathConstants.radicalRuleThickness またはデフォルト罫線太さ
radicalExtraAscender
MATH.MathConstants.radicalExtraAscender またはデフォルト罫線太さ
radicalKernBeforeDegree
MATH.MathConstants.radicalKernBeforeDegree または未定義時 5/18em
radicalKernAfterDegree
MATH.MathConstants.radicalKernAfterDegree または未定義時 −10/18em
radicalDegreeBottomRaisePercent
MATH.MathConstants.radicalDegreeBottomRaisePercent / 100.0 または未定義時 0.6

5.2 グリフ情報 (MathGlyphInfo)

MathTopAccentAttachment はリスクあり。

以下は 最初に利用可能なフォントのグリフ単位のテーブルである。

MathItalicsCorrectionInfo
イタリック補正値のサブテーブル MATH.MathGlyphInfo.MathItalicsCorrectionInfo。 対象グリフに値があれば MATH.MathGlyphInfo.MathItalicsCorrectionInfo.italicsCorrection の値を、 なければ 0 を使う。
MathTopAccentAttachment
上部アクセント位置指定用 MATH.MathGlyphInfo.MathTopAccentAttachment サブテーブル。 対象グリフに値があれば MATH.MathGlyphInfo.MathTopAccentAttachment.topAccentAttachment を、 なければグリフ進行幅の半分を使う。

5.3 演算子のサイズバリアント (MathVariants)

このセクションでは MATH.MathVariants テーブルを用いた任意サイズのストレッチグリフ処理について説明する。

5.3.1 GlyphAssembly テーブル

本節は [OPEN-TYPE-MATH-IN-HARFBUZZ] を元にする。 定義簡素化のため、以下を採用する:

  • ominMATH.MathVariant.minConnectorOverlap
  • GlyphPartRecordfExtender フラグ有なら extender である。
  • MathVariant.horizGlyphConstructionOffsets より得たら横組、それ以外は縦組
  • 与えられた GlyphAssembly について、 NExt (および NNonExt)は extender(およびextenderでない)数
  • 同じく SExtSNonExt)は extender(非extender)のfullAdvance和
  • SExt,NonOverlappingSExtomin NExt

以下成立しない場合、user agentはGlyphAssemblyを無効とみなす:

  • NExt > 0(繰り返しで伸長不可)
  • SExt,NonOverlapping > 0
  • すべての GlyphPartRecordstartConnectorLength, endConnectorLengthomin

本仕様では各extenderをr回繰り返し、各グリフ間overlapをoとして組み立てる。 glyph数は AssemblyGlyphCount(r) = NNonExt + r NExt 伸長サイズは AssembySize(o, r) = SNonExt + r SExt − o(AssemblyGlyphCount(r) − 1)

rminは 要求サイズ T に到達するためのrepetition数の最小値: AssembySize(omin, r) ≥ T となる最小r。max(0, ceil((T − SNonExt + omin(NNonExt−1))/SExt,NonOverlapping)

omax,theorical = (AssembySize(0, rmin) − T)/(AssemblyGlyphCount(rmin) − 1)

omax は extenderをrmin回繰返すことで T以上のサイズを作る最大overlap値: AssemblyGlyphCount(rmin) ≤ 1 なら overlap値は何でも良い。それ以外は以下最小:

  • omax,theorical
  • GlyphPartRecord.startConnectorLength 各値(最後の非extenderを除く)
  • GlyphPartRecord.endConnectorLength 各値(最初の非extenderを除く)

指定サイズ Tに対する glyph assembly stretch sizeAssembySize(omax, rmin)

glyph assembly widthglyph assembly ascent glyph assembly descent は以下の通り:

  • 縦組みの場合 幅=partRecords中すべての GlyphPartRecord.glyphID の進行幅最大値 ascent=stretch size descent=0
  • 横組みの場合 幅=stretch size ascent/descent=partRecords内各グリフIDのascent/descent最大値

glyph assembly heightglyph assembly ascentglyph assembly descent

縦組み(または横組み) glyph assembly の横(縦)メトリックはTに依存しない。

glyph assembly の shaping アルゴリズムは以下:

  1. rminomax決定
  2. (x, y)=(0, 0)、RepetitionCounter=0、PartIndex=-1に
  3. 以下繰り返す:
    1. RepetitionCounter==0なら
      1. PartIndex++
      2. PartIndex==partCountなら 終了
      3. それ以外はPart=partRecords[PartIndex]、extenderならRepetitionCounter=rmin、非なら1
      • 横組なら glyph(Part.glyphID)を(x,y)左・ベースライン位置に描画 x=x+fullAdvance−omax
      • 縦組なら glyph(Part.glyphID)を(x, y)左・下端に描画 y=y−fullAdvance+omax
    2. RepetitionCounter--

5.3.2 グリフ伸長アルゴリズム

block軸伸長グリフの望ましいインラインサイズ はこのアルゴリズムで決定:

  1. S=グリフの進行幅
  2. MathGlyphConstructionテーブルが MathVariants.vertGlyphConstructionOffsets にあれば
    1. MathGlyphVariantRecordについて、SをvariantGlyphの進行幅最大値に
    2. 有効なGlyphAssemblyがあれば Sを assembly width 以上に
  3. Sを返す
block軸伸長グリフの望ましいインラインサイズは、全ての縦伸長構成の最大幅を返す。 実際、数学フォントは縦組構成がほぼ一定幅なので過大評価は小さい。

グリフをインライン/ブロック方向Tにストレッチ成形するアルゴリズムは以下:

  1. MathGlyphConstructionテーブルが無い場合は失敗で終了
  2. グリフ進行幅(または高さ)がT以上なら通常成形でそのグリフ・MathItalicsCorrectionInfo・バウンディングボックスで成功
  3. MathGlyphVariantRecordにadvanceMeasurementがT以上のものがあれば そのvariantGlyph・MathItalicsCorrectionInfo・通常成形で成功
  4. 有効なGlyphAssemblyがあれば、指定b.box・GlyphAssembly.italicsCorrectionで shaping を行い成功
  5. Stretch方でTに届かなければ直前の結果で成功
フォントがストレッチ構成を持たない場合、UAは B.4 Unicodeベースのグリフアセンブリのような独自構成で補完可。

A. ユーザーエージェントスタイルシート

@namespace url(http://www.w3.org/1998/Math/MathML);

/* 全体ルール */
* {
  font-size: math;
  display: block math;
  writing-mode: horizontal-tb !important;
}

/* <math> 要素 */
math {
  direction: ltr;
  text-indent: 0;
  letter-spacing: normal;
  line-height: normal;
  word-spacing: normal;
  font-family: math;
  font-size: inherit;
  font-style: normal;
  font-weight: normal;
  display: inline math;
  math-shift: normal;
  math-style: compact;
  math-depth: 0;
}
math[display="block" i] {
  display: block math;
  math-style: normal;
}
math[display="inline" i] {
  display: inline math;
  math-style: compact;
}

/* <mrow>系 要素 */
semantics > :not(:first-child) {
  display: none;
}
maction > :not(:first-child) {
  display: none;
}
merror {
  border: 1px solid red;
  background-color: lightYellow;
}
mphantom {
  visibility: hidden;
}

/* トークン要素 */
mi {
  text-transform: math-auto;
}

/* 表系 */
mtable {
  display: inline-table;
  math-style: compact;
}
mtr {
  display: table-row;
}
mtd {
  display: table-cell;
  /* セル内中央揃えは box alignment プロパティに依存
     See https://github.com/w3c/mathml-core/issues/156 */
  text-align: center;
  padding: 0.5ex 0.4em;
}

/* 分数 */
mfrac {
  padding-inline: 1px;
}
mfrac > * {
  math-depth: auto-add;
  math-style: compact;
}
mfrac > :nth-child(2) {
  math-shift: compact;
}

/* その他 scriptlevel, displaystyle, math-shift のためのルール */
mroot > :not(:first-child) {
  math-depth: add(2);
  math-style: compact;
}
mroot, msqrt {
  math-shift: compact;
}
msub > :not(:first-child),
msup > :not(:first-child),
msubsup > :not(:first-child),
mmultiscripts > :not(:first-child),
munder > :not(:first-child),
mover > :not(:first-child),
munderover > :not(:first-child) {
  math-depth: add(1);
  math-style: compact;
}
munder[accentunder="true" i] > :nth-child(2),
mover[accent="true" i] > :nth-child(2),
munderover[accentunder="true" i] > :nth-child(2),
munderover[accent="true" i] > :nth-child(3) {
  font-size: inherit;
}
msub > :nth-child(2),
msubsup > :nth-child(2),
mmultiscripts > :nth-child(even),
mmultiscripts > mprescripts ~ :nth-child(odd),
mover[accent="true" i] > :first-child,
munderover[accent="true" i] > :first-child {
  math-shift: compact;
}
mmultiscripts > mprescripts ~ :nth-child(even) {
  math-shift: inherit;
}

B. 演算子テーブル

B.1 演算子辞書

本節では、 3.2.4.2 辞書ベース属性および ストレッチ軸の決定方法について説明する。 下記のコンパクト表は機械処理に適しており、 B.2 演算子辞書(人間可読)を参考にされたい。

カテゴリから演算子のプロパティを設定するアルゴリズムは次の通り:

演算子のカテゴリ決定アルゴリズム (Content, Form) は以下の通り:

  1. Content(UTF-16文字列)の長さが1または2でなければ、カテゴリDefaultで打ち切り。
  2. ContentがU+0320–U+03FFの範囲内1文字なら、カテゴリDefaultで打ち切り。2文字の場合は:
    • Contentが U+1EEF0 ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL または U+1EEF1 ARABIC MATHEMATICAL OPERATOR HAH WITH DAL のサロゲートペアで 且つ Formpostfix なら、カテゴリIで打ち切り。
    • 2文字目が U+0338 COMBINING LONG SOLIDUS OVERLAY または U+20D2 COMBINING LONG VERTICAL LINE OVERLAY なら Content を1文字目に置き換え、手順3へ。
    • それ以外で ContentOperators_2_ascii_chars にあれば、Contentを 「U+0320 + インデックス」に置換え手順3へ。
    • 他はカテゴリDefaultで打ち切り。
  3. Formがinfixで ContentがU+007C またはU+223C ならカテゴリForceDefaultで打ち切り。 (Content, Form)のカテゴリが 25 でN/A符号化(カテゴリL/M)なら、そのカテゴリで打ち切り。 それ以外は:
    • U+0000–U+03FF内ならKeyContent、 U+2000–U+2BFF内ならKeyContent−0x1C00。 他はDefaultで打ち切り。
    • Formがinfix/prefix/postfixならそれぞれ0x0000/0x1000/0x2000をKeyに加算。
    • アサート: Keyは0x2FFF以下。
    • 27Entry%0x4000=KeyのEntryを探し、 見つかれば 26 でencodingからカテゴリ返し、なければDefault
特殊表 エントリ数
Operators_2_ascii_chars 18エントリ(2文字ASCII):'!!', '!=', '&&', '**', '*=', '++', '+=', '--', '-=', '->', '//', '/=', ':=', '<=', '<>', '==', '>=', '||',
Operators_fence 61エントリ(16範囲):[U+0028–U+0029], {U+005B}, {U+005D}, [U+007B–U+007D], {U+0331}, {U+2016}, [U+2018–U+2019], [U+201C–U+201D], [U+2308–U+230B], [U+2329–U+232A], [U+2772–U+2773], [U+27E6–U+27EF], {U+2980}, [U+2983–U+2999], [U+29D8–U+29DB], [U+29FC–U+29FD},
Operators_separator 3エントリ:U+002C, U+003B, U+2063,
24 演算子辞書の特殊テーブル。
総数: 82, 90バイト
(文字UTF-16+範囲長1バイト想定)
(Content, Form)キー カテゴリ
中置(infix)313件(35範囲):[U+2190–U+2195], [U+219A–U+21AE], [U+21B0–U+21B5], {U+21B9}, ... A
中置108件(31範囲):{U+002B}, {U+002D}, ... B
中置64件(33範囲):{U+0025}, {U+002A}, ... C
前置(prefix)52件(22範囲):{U+0021}, ... D
後置(postfix)40件(21範囲):[U+0021–U+0022], ... E
前置30件:U+0028, U+005B, ... F
後置30件:U+0029, U+005D, ... G
前置27件(2範囲):[U+222B–U+2233], ... H
後置22件(13範囲):[U+005E–U+005F], ... I
前置22件(6範囲):[U+220F–U+2211], ... J
中置8件(5範囲):{U+002F}, {U+005C}, ... K
前置6件(3範囲):[U+2145–U+2146], ... L
中置3件:U+002C, U+003A, U+003B, M
25 演算子(Content, Form)からカテゴリへの対応表。
総数: 725件, 639バイト(UTF-16+範囲長1バイト想定)
カテゴリ 形式 符号 lspace rspace プロパティ
Default N/A N/A 0.2777777777777778em 0.2777777777777778em N/A
ForceDefault N/A N/A 0.2777777777777778em 0.2777777777777778em N/A
A 中置 0x0 0.2777777777777778em 0.2777777777777778em stretchy
B 中置 0x4 0.2222222222222222em 0.2222222222222222em N/A
C 中置 0x8 0.16666666666666666em 0.16666666666666666em N/A
D 前置 0x1 0 0 N/A
E 後置 0x2 0 0 N/A
F 前置 0x5 0 0 stretchy symmetric
G 後置 0x6 0 0 stretchy symmetric
H 前置 0x9 0.16666666666666666em 0.16666666666666666em symmetric largeop
I 後置 0xA 0 0 stretchy
J 前置 0xD 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
K 中置 0xC 0 0 N/A
L 前置 N/A 0.16666666666666666em 0 N/A
M 中置 N/A 0 0.16666666666666666em N/A
26 各カテゴリに対する演算子の値。
3列目は4ビット符号で、下位2ビットが中置0・前置1・後置2
716件(236範囲, 範囲長最大16): {0x8025}, {0x802A}, {0x402B}, ...
27 Key=Entry%0x4000, category=Entry/0x1000。
総数716, 590バイト(範囲長4ビット想定)
  • 25 および 27 は連続するUnicodeブロックにあわせて範囲化されている。
  • 検索の際は範囲開始で二分探索+範囲長で追加判定を用いると速い
  • logは凹関数ゆえに 27 全体で一度二分探索する方が 25 の各大サブ表毎に探索するより効率的。

文字cの本来のストレッチ軸は下記リストの文字ならインライン軸。 それ以外はブロック軸

U+003D, U+005E, U+005F, U+007E, U+00AF, U+02C6, U+02C7, U+02C9, U+02CD, U+02DC, U+02F7, U+0302, U+0332, U+203E, U+20D0, U+20D1, U+20D6, U+20D7, U+20E1, U+2190, U+2192, U+2194, U+2198, U+2199, U+219A, U+219B, U+219C, U+219D, U+219E, U+21A0, U+21A2, U+21A3, U+21A4, U+21A6, U+21A9, U+21AA, U+21AB, U+21AC, U+21AD, U+21AE, U+21B4, U+21B9, U+21BC, U+21BD, U+21C0, U+21C1, U+21C4, U+21C6, U+21C7, U+21C9, U+21CB, U+21CC, U+21CD, U+21CE, U+21CF, U+21D0, U+21D2, U+21D4, U+21DA, U+21DB, U+21DC, U+21DD, U+21E0, U+21E2, U+21E4, U+21E5, U+21E6, U+21E8, U+21F0, U+21F4, U+21F6, U+21F7, U+21F8, U+21F9, U+21FA, U+21FB, U+21FC, U+21FD, U+21FE, U+21FF, U+2322, U+2323, U+23B4, U+23B5, U+23DC, U+23DD, U+23DE, U+23DF, U+23E0, U+23E1, U+2500, U+2794, U+2799, U+279B, U+279C, U+279D, U+279E, U+279F, U+27A0, U+27A1, U+27A5, U+27A6, U+27A8, U+27A9, U+27AA, U+27AB, U+27AC, U+27AD, U+27AE, U+27AF, U+27B1, U+27B3, U+27B5, U+27B8, U+27BA, U+27BB, U+27BC, U+27BD, U+27BE, U+27F4, U+27F5, U+27F6, U+27F7, U+27F8, U+27F9, U+27FA, U+27FB, U+27FC, U+27FD, U+27FE, U+27FF, U+2900, U+2901, U+2902, U+2903, U+2904, U+2905, U+2906, U+2907, U+290C, U+290D, U+290E, U+290F, U+2910, U+2911, U+2914, U+2915, U+2916, U+2917, U+2918, U+2919, U+291A, U+291B, U+291C, U+291D, U+291E, U+291F, U+2920, U+2942, U+2943, U+2944, U+2945, U+2946, U+2947, U+2948, U+294A, U+294B, U+294E, U+2950, U+2952, U+2953, U+2956, U+2957, U+295A, U+295B, U+295E, U+295F, U+2962, U+2964, U+2966, U+2967, U+2968, U+2969, U+296A, U+296B, U+296C, U+296D, U+2970, U+2971, U+2972, U+2973, U+2974, U+2975, U+297C, U+297D, U+2B04, U+2B05, U+2B0C, U+2B30, U+2B31, U+2B32, U+2B33, U+2B34, U+2B35, U+2B36, U+2B37, U+2B38, U+2B39, U+2B3A, U+2B3B, U+2B3C, U+2B3D, U+2B3E, U+2B40, U+2B41, U+2B42, U+2B43, U+2B44, U+2B45, U+2B46, U+2B47, U+2B48, U+2B49, U+2B4A, U+2B4B, U+2B4C, U+2B60, U+2B62, U+2B64, U+2B6A, U+2B6C, U+2B70, U+2B72, U+2B7A, U+2B7C, U+2B80, U+2B82, U+2B84, U+2B86, U+2B95, U+FE35, U+FE36, U+FE37, U+FE38, U+1EEF0, U+1EEF1,
28 インラインストレッチ軸を持つ演算子コードポイント(昇順)
合計246件, 492バイト(非BMP以外16bit想定)
本来のストレッチ軸は、演算子辞書の真偽値プロパティとして持たせることも可能だが 形態に依存せず、ごく一部の演算子のみインライン軸ストレッチがあるため 独立の昇順配列で実装する方が良い。サロゲートペア(U+1EEF0, U+1EEF1)は個別判定推奨。

B.2 演算子辞書(人間可読)

このセクションは規範的ではありません。

以下の辞書はB.1 演算子辞書の人間可読バージョンを提供します。 3.2.4.2 辞書ベース属性 で この辞書の使い方や、 ContentForm の値の特定方法について説明していますので参照してください。

rspace および lspace の値は 対応する列に示されています。 また、 stretchysymmetriclargeopmovablelimits の値は、 "properties" 列に列挙されていれば true となります。

Content ストレッチ軸 form lspace rspace プロパティ
< U+003C block infix 0.2777777777777778em 0.2777777777777778em N/A
= U+003D inline infix 0.2777777777777778em 0.2777777777777778em N/A
> U+003E block infix 0.2777777777777778em 0.2777777777777778em N/A
| U+007C block infix 0.2777777777777778em 0.2777777777777778em fence
↖ U+2196 block infix 0.2777777777777778em 0.2777777777777778em N/A
↗ U+2197 block infix 0.2777777777777778em 0.2777777777777778em N/A
↘ U+2198 inline infix 0.2777777777777778em 0.2777777777777778em N/A
↙ U+2199 inline infix 0.2777777777777778em 0.2777777777777778em N/A
↯ U+21AF block infix 0.2777777777777778em 0.2777777777777778em N/A
↶ U+21B6 block infix 0.2777777777777778em 0.2777777777777778em N/A
↷ U+21B7 block infix 0.2777777777777778em 0.2777777777777778em N/A
↸ U+21B8 block infix 0.2777777777777778em 0.2777777777777778em N/A
↺ U+21BA block infix 0.2777777777777778em 0.2777777777777778em N/A
↻ U+21BB block infix 0.2777777777777778em 0.2777777777777778em N/A
⇖ U+21D6 block infix 0.2777777777777778em 0.2777777777777778em N/A
⇗ U+21D7 block infix 0.2777777777777778em 0.2777777777777778em N/A
⇘ U+21D8 block infix 0.2777777777777778em 0.2777777777777778em N/A
⇙ U+21D9 block infix 0.2777777777777778em 0.2777777777777778em N/A
⇱ U+21F1 block infix 0.2777777777777778em 0.2777777777777778em N/A
⇲ U+21F2 block infix 0.2777777777777778em 0.2777777777777778em N/A
∈ U+2208 block infix 0.2777777777777778em 0.2777777777777778em N/A
∉ U+2209 block infix 0.2777777777777778em 0.2777777777777778em N/A
∊ U+220A block infix 0.2777777777777778em 0.2777777777777778em N/A
∋ U+220B block infix 0.2777777777777778em 0.2777777777777778em N/A
∌ U+220C block infix 0.2777777777777778em 0.2777777777777778em N/A
∍ U+220D block infix 0.2777777777777778em 0.2777777777777778em N/A
∝ U+221D block infix 0.2777777777777778em 0.2777777777777778em N/A
∣ U+2223 block infix 0.2777777777777778em 0.2777777777777778em N/A
∤ U+2224 block infix 0.2777777777777778em 0.2777777777777778em N/A
∥ U+2225 block infix 0.2777777777777778em 0.2777777777777778em N/A
∦ U+2226 block infix 0.2777777777777778em 0.2777777777777778em N/A
∷ U+2237 block infix 0.2777777777777778em 0.2777777777777778em N/A
∹ U+2239 block infix 0.2777777777777778em 0.2777777777777778em N/A
∺ U+223A block infix 0.2777777777777778em 0.2777777777777778em N/A
∻ U+223B block infix 0.2777777777777778em 0.2777777777777778em N/A
∼ U+223C block infix 0.2777777777777778em 0.2777777777777778em N/A
∽ U+223D block infix 0.2777777777777778em 0.2777777777777778em N/A
∾ U+223E block infix 0.2777777777777778em 0.2777777777777778em N/A
≁ U+2241 block infix 0.2777777777777778em 0.2777777777777778em N/A
≂ U+2242 block infix 0.2777777777777778em 0.2777777777777778em N/A
≃ U+2243 block infix 0.2777777777777778em 0.2777777777777778em N/A
≄ U+2244 block infix 0.2777777777777778em 0.2777777777777778em N/A
≅ U+2245 block infix 0.2777777777777778em 0.2777777777777778em N/A
≆ U+2246 block infix 0.2777777777777778em 0.2777777777777778em N/A
≇ U+2247 block infix 0.2777777777777778em 0.2777777777777778em N/A
≈ U+2248 block infix 0.2777777777777778em 0.2777777777777778em N/A
≉ U+2249 block infix 0.2777777777777778em 0.2777777777777778em N/A
≊ U+224A block infix 0.2777777777777778em 0.2777777777777778em N/A
≋ U+224B block infix 0.2777777777777778em 0.2777777777777778em N/A
≌ U+224C block infix 0.2777777777777778em 0.2777777777777778em N/A
≍ U+224D block infix 0.2777777777777778em 0.2777777777777778em N/A
≎ U+224E block infix 0.2777777777777778em 0.2777777777777778em N/A
≏ U+224F block infix 0.2777777777777778em 0.2777777777777778em N/A
≐ U+2250 block infix 0.2777777777777778em 0.2777777777777778em N/A
≑ U+2251 block infix 0.2777777777777778em 0.2777777777777778em N/A
≒ U+2252 block infix 0.2777777777777778em 0.2777777777777778em N/A
≓ U+2253 block infix 0.2777777777777778em 0.2777777777777778em N/A
≔ U+2254 block infix 0.2777777777777778em 0.2777777777777778em N/A
≕ U+2255 block infix 0.2777777777777778em 0.2777777777777778em N/A
≖ U+2256 block infix 0.2777777777777778em 0.2777777777777778em N/A
≗ U+2257 block infix 0.2777777777777778em 0.2777777777777778em N/A
≘ U+2258 block infix 0.2777777777777778em 0.2777777777777778em N/A
≙ U+2259 block infix 0.2777777777777778em 0.2777777777777778em N/A
≚ U+225A block infix 0.2777777777777778em 0.2777777777777778em N/A
≛ U+225B block infix 0.2777777777777778em 0.2777777777777778em N/A
≜ U+225C block infix 0.2777777777777778em 0.2777777777777778em N/A
≝ U+225D block infix 0.2777777777777778em 0.2777777777777778em N/A
≞ U+225E block infix 0.2777777777777778em 0.2777777777777778em N/A
≟ U+225F block infix 0.2777777777777778em 0.2777777777777778em N/A
≠ U+2260 block infix 0.2777777777777778em 0.2777777777777778em N/A
≡ U+2261 block infix 0.2777777777777778em 0.2777777777777778em N/A
≢ U+2262 block infix 0.2777777777777778em 0.2777777777777778em N/A
≣ U+2263 block infix 0.2777777777777778em 0.2777777777777778em N/A
≤ U+2264 block infix 0.2777777777777778em 0.2777777777777778em N/A
≥ U+2265 block infix 0.2777777777777778em 0.2777777777777778em N/A
≦ U+2266 block infix 0.2777777777777778em 0.2777777777777778em N/A
≧ U+2267 block infix 0.2777777777777778em 0.2777777777777778em N/A
≨ U+2268 block infix 0.2777777777777778em 0.2777777777777778em N/A
≩ U+2269 block infix 0.2777777777777778em 0.2777777777777778em N/A
≪ U+226A block infix 0.2777777777777778em 0.2777777777777778em N/A
≫ U+226B block infix 0.2777777777777778em 0.2777777777777778em N/A
≬ U+226C block infix 0.2777777777777778em 0.2777777777777778em N/A
≭ U+226D block infix 0.2777777777777778em 0.2777777777777778em N/A
≮ U+226E block infix 0.2777777777777778em 0.2777777777777778em N/A
≯ U+226F block infix 0.2777777777777778em 0.2777777777777778em N/A
≰ U+2270 block infix 0.2777777777777778em 0.2777777777777778em N/A
≱ U+2271 block infix 0.2777777777777778em 0.2777777777777778em N/A
≲ U+2272 block infix 0.2777777777777778em 0.2777777777777778em N/A
≳ U+2273 block infix 0.2777777777777778em 0.2777777777777778em N/A
≴ U+2274 block infix 0.2777777777777778em 0.2777777777777778em N/A
≵ U+2275 block infix 0.2777777777777778em 0.2777777777777778em N/A
≶ U+2276 block infix 0.2777777777777778em 0.2777777777777778em N/A
≷ U+2277 block infix 0.2777777777777778em 0.2777777777777778em N/A
≸ U+2278 block infix 0.2777777777777778em 0.2777777777777778em N/A
≹ U+2279 block infix 0.2777777777777778em 0.2777777777777778em N/A
≺ U+227A block infix 0.2777777777777778em 0.2777777777777778em N/A
≻ U+227B block infix 0.2777777777777778em 0.2777777777777778em N/A
≼ U+227C block infix 0.2777777777777778em 0.2777777777777778em N/A
≽ U+227D block infix 0.2777777777777778em 0.2777777777777778em N/A
≾ U+227E block infix 0.2777777777777778em 0.2777777777777778em N/A
≿ U+227F block infix 0.2777777777777778em 0.2777777777777778em N/A
⊀ U+2280 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊁ U+2281 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊂ U+2282 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊃ U+2283 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊄ U+2284 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊅ U+2285 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊆ U+2286 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊇ U+2287 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊈ U+2288 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊉ U+2289 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊊ U+228A block infix 0.2777777777777778em 0.2777777777777778em N/A
⊋ U+228B block infix 0.2777777777777778em 0.2777777777777778em N/A
⊏ U+228F block infix 0.2777777777777778em 0.2777777777777778em N/A
⊐ U+2290 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊑ U+2291 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊒ U+2292 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊜ U+229C block infix 0.2777777777777778em 0.2777777777777778em N/A
⊢ U+22A2 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊣ U+22A3 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊦ U+22A6 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊧ U+22A7 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊨ U+22A8 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊩ U+22A9 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊪ U+22AA block infix 0.2777777777777778em 0.2777777777777778em N/A
⊫ U+22AB block infix 0.2777777777777778em 0.2777777777777778em N/A
⊬ U+22AC block infix 0.2777777777777778em 0.2777777777777778em N/A
⊭ U+22AD block infix 0.2777777777777778em 0.2777777777777778em N/A
⊮ U+22AE block infix 0.2777777777777778em 0.2777777777777778em N/A
⊯ U+22AF block infix 0.2777777777777778em 0.2777777777777778em N/A
⊰ U+22B0 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊱ U+22B1 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊲ U+22B2 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊳ U+22B3 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊴ U+22B4 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊵ U+22B5 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊶ U+22B6 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊷ U+22B7 block infix 0.2777777777777778em 0.2777777777777778em N/A
⊸ U+22B8 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋈ U+22C8 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋍ U+22CD block infix 0.2777777777777778em 0.2777777777777778em N/A
⋐ U+22D0 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋑ U+22D1 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋔ U+22D4 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋕ U+22D5 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋖ U+22D6 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋗ U+22D7 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋘ U+22D8 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋙ U+22D9 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋚ U+22DA block infix 0.2777777777777778em 0.2777777777777778em N/A
⋛ U+22DB block infix 0.2777777777777778em 0.2777777777777778em N/A
⋜ U+22DC block infix 0.2777777777777778em 0.2777777777777778em N/A
⋝ U+22DD block infix 0.2777777777777778em 0.2777777777777778em N/A
⋞ U+22DE block infix 0.2777777777777778em 0.2777777777777778em N/A
⋟ U+22DF block infix 0.2777777777777778em 0.2777777777777778em N/A
⋠ U+22E0 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋡ U+22E1 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋢ U+22E2 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋣ U+22E3 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋤ U+22E4 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋥ U+22E5 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋦ U+22E6 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋧ U+22E7 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋨ U+22E8 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋩ U+22E9 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋪ U+22EA block infix 0.2777777777777778em 0.2777777777777778em N/A
⋫ U+22EB block infix 0.2777777777777778em 0.2777777777777778em N/A
⋬ U+22EC block infix 0.2777777777777778em 0.2777777777777778em N/A
⋭ U+22ED block infix 0.2777777777777778em 0.2777777777777778em N/A
⋲ U+22F2 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋳ U+22F3 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋴ U+22F4 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋵ U+22F5 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋶ U+22F6 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋷ U+22F7 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋸ U+22F8 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋹ U+22F9 block infix 0.2777777777777778em 0.2777777777777778em N/A
⋺ U+22FA block infix 0.2777777777777778em 0.2777777777777778em N/A
⋻ U+22FB block infix 0.2777777777777778em 0.2777777777777778em N/A
⋼ U+22FC block infix 0.2777777777777778em 0.2777777777777778em N/A
⋽ U+22FD block infix 0.2777777777777778em 0.2777777777777778em N/A
⋾ U+22FE block infix 0.2777777777777778em 0.2777777777777778em N/A
⋿ U+22FF block infix 0.2777777777777778em 0.2777777777777778em N/A
⌁ U+2301 block infix 0.2777777777777778em 0.2777777777777778em N/A
⍼ U+237C block infix 0.2777777777777778em 0.2777777777777778em N/A
⎋ U+238B block infix 0.2777777777777778em 0.2777777777777778em N/A
➘ U+2798 block infix 0.2777777777777778em 0.2777777777777778em N/A
➚ U+279A block infix 0.2777777777777778em 0.2777777777777778em N/A
➧ U+27A7 block infix 0.2777777777777778em 0.2777777777777778em N/A
➲ U+27B2 block infix 0.2777777777777778em 0.2777777777777778em N/A
➴ U+27B4 block infix 0.2777777777777778em 0.2777777777777778em N/A
➶ U+27B6 block infix 0.2777777777777778em 0.2777777777777778em N/A
➷ U+27B7 block infix 0.2777777777777778em 0.2777777777777778em N/A
➹ U+27B9 block infix 0.2777777777777778em 0.2777777777777778em N/A
⟂ U+27C2 block infix 0.2777777777777778em 0.2777777777777778em N/A
⟲ U+27F2 block infix 0.2777777777777778em 0.2777777777777778em N/A
⟳ U+27F3 block infix 0.2777777777777778em 0.2777777777777778em N/A
⤡ U+2921 block infix 0.2777777777777778em 0.2777777777777778em N/A
⤢ U+2922 block infix 0.2777777777777778em 0.2777777777777778em N/A
⤣ U+2923 block infix 0.2777777777777778em 0.2777777777777778em N/A
⤤ U+2924 block infix 0.2777777777777778em 0.2777777777777778em N/A
⤥ U+2925 block infix 0.2777777777777778em 0.2777777777777778em N/A
⤦ U+2926 block infix 0.2777777777777778em 0.2777777777777778em N/A
⤧ U+2927 block infix 0.2777777777777778em 0.2777777777777778em N/A
⤨ U+2928 block infix 0.2777777777777778em 0.2777777777777778em N/A
⤩ U+2929 block infix 0.2777777777777778em 0.2777777777777778em N/A
⤪ U+292A block infix 0.2777777777777778em 0.2777777777777778em N/A
⤫ U+292B block infix 0.2777777777777778em 0.2777777777777778em N/A
⤬ U+292C block infix 0.2777777777777778em 0.2777777777777778em N/A
⤭ U+292D block infix 0.2777777777777778em 0.2777777777777778em N/A
⤮ U+292E block infix 0.2777777777777778em 0.2777777777777778em N/A
⤯ U+292F block infix 0.2777777777777778em 0.2777777777777778em N/A
⤰ U+2930 block infix 0.2777777777777778em 0.2777777777777778em N/A
⤱ U+2931 block infix 0.2777777777777778em 0.2777777777777778em N/A
⤲ U+2932 block infix 0.2777777777777778em 0.2777777777777778em N/A
⤳ U+2933 block infix 0.2777777777777778em 0.2777777777777778em N/A
⤸ U+2938 block infix 0.2777777777777778em 0.2777777777777778em N/A
⤹ U+2939 block infix 0.2777777777777778em 0.2777777777777778em N/A
⤺ U+293A block infix 0.2777777777777778em 0.2777777777777778em N/A
⤻ U+293B block infix 0.2777777777777778em 0.2777777777777778em N/A
⤼ U+293C block infix 0.2777777777777778em 0.2777777777777778em N/A
⤽ U+293D block infix 0.2777777777777778em 0.2777777777777778em N/A
⤾ U+293E block infix 0.2777777777777778em 0.2777777777777778em N/A
⤿ U+293F block infix 0.2777777777777778em 0.2777777777777778em N/A
⥀ U+2940 block infix 0.2777777777777778em 0.2777777777777778em N/A
⥁ U+2941 block infix 0.2777777777777778em 0.2777777777777778em N/A
⥶ U+2976 block infix 0.2777777777777778em 0.2777777777777778em N/A
⥷ U+2977 block infix 0.2777777777777778em 0.2777777777777778em N/A
⥸ U+2978 block infix 0.2777777777777778em 0.2777777777777778em N/A
⥹ U+2979 block infix 0.2777777777777778em 0.2777777777777778em N/A
⥺ U+297A block infix 0.2777777777777778em 0.2777777777777778em N/A
⥻ U+297B block infix 0.2777777777777778em 0.2777777777777778em N/A
⦁ U+2981 block infix 0.2777777777777778em 0.2777777777777778em N/A
⦂ U+2982 block infix 0.2777777777777778em 0.2777777777777778em N/A
⦶ U+29B6 block infix 0.2777777777777778em 0.2777777777777778em N/A
⦷ U+29B7 block infix 0.2777777777777778em 0.2777777777777778em N/A
⦹ U+29B9 block infix 0.2777777777777778em 0.2777777777777778em N/A
⧀ U+29C0 block infix 0.2777777777777778em 0.2777777777777778em N/A
⧁ U+29C1 block infix 0.2777777777777778em 0.2777777777777778em N/A
⧎ U+29CE block infix 0.2777777777777778em 0.2777777777777778em N/A
⧏ U+29CF block infix 0.2777777777777778em 0.2777777777777778em N/A
⧐ U+29D0 block infix 0.2777777777777778em 0.2777777777777778em N/A
⧑ U+29D1 block infix 0.2777777777777778em 0.2777777777777778em N/A
⧒ U+29D2 block infix 0.2777777777777778em 0.2777777777777778em N/A
⧓ U+29D3 block infix 0.2777777777777778em 0.2777777777777778em N/A
⧟ U+29DF block infix 0.2777777777777778em 0.2777777777777778em N/A
⧡ U+29E1 block infix 0.2777777777777778em 0.2777777777777778em N/A
⧣ U+29E3 block infix 0.2777777777777778em 0.2777777777777778em N/A
⧤ U+29E4 block infix 0.2777777777777778em 0.2777777777777778em N/A
⧥ U+29E5 block infix 0.2777777777777778em 0.2777777777777778em N/A
⧦ U+29E6 block infix 0.2777777777777778em 0.2777777777777778em N/A
⧴ U+29F4 block infix 0.2777777777777778em 0.2777777777777778em N/A
⩦ U+2A66 block infix 0.2777777777777778em 0.2777777777777778em N/A
⩧ U+2A67 block infix 0.2777777777777778em 0.2777777777777778em N/A
⩨ U+2A68 block infix 0.2777777777777778em 0.2777777777777778em N/A
⩩ U+2A69 block infix 0.2777777777777778em 0.2777777777777778em N/A
⩪ U+2A6A block infix 0.2777777777777778em 0.2777777777777778em N/A
⩫ U+2A6B block infix 0.2777777777777778em 0.2777777777777778em N/A
⩬ U+2A6C block infix 0.2777777777777778em 0.2777777777777778em N/A
⩭ U+2A6D block infix 0.2777777777777778em 0.2777777777777778em N/A
⩮ U+2A6E block infix 0.2777777777777778em 0.2777777777777778em N/A
⩯ U+2A6F block infix 0.2777777777777778em 0.2777777777777778em N/A
⩰ U+2A70 block infix 0.2777777777777778em 0.2777777777777778em N/A
⩱ U+2A71 block infix 0.2777777777777778em 0.2777777777777778em N/A
⩲ U+2A72 block infix 0.2777777777777778em 0.2777777777777778em N/A
⩳ U+2A73 block infix 0.2777777777777778em 0.2777777777777778em N/A
⩴ U+2A74 block infix 0.2777777777777778em 0.2777777777777778em N/A
⩵ U+2A75 block infix 0.2777777777777778em 0.2777777777777778em N/A
⩶ U+2A76 block infix 0.2777777777777778em 0.2777777777777778em N/A
⩷ U+2A77 block infix 0.2777777777777778em 0.2777777777777778em N/A
⩸ U+2A78 block infix 0.2777777777777778em 0.2777777777777778em N/A
⩹ U+2A79 block infix 0.2777777777777778em 0.2777777777777778em N/A
⩺ U+2A7A block infix 0.2777777777777778em 0.2777777777777778em N/A
⩻ U+2A7B block infix 0.2777777777777778em 0.2777777777777778em N/A
⩼ U+2A7C block infix 0.2777777777777778em 0.2777777777777778em N/A
⩽ U+2A7D block infix 0.2777777777777778em 0.2777777777777778em N/A
⩾ U+2A7E block infix 0.2777777777777778em 0.2777777777777778em N/A
⩿ U+2A7F block infix 0.2777777777777778em 0.2777777777777778em N/A
⪀ U+2A80 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪁ U+2A81 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪂ U+2A82 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪃ U+2A83 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪄ U+2A84 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪅ U+2A85 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪆ U+2A86 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪇ U+2A87 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪈ U+2A88 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪉ U+2A89 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪊ U+2A8A block infix 0.2777777777777778em 0.2777777777777778em N/A
⪋ U+2A8B block infix 0.2777777777777778em 0.2777777777777778em N/A
⪌ U+2A8C block infix 0.2777777777777778em 0.2777777777777778em N/A
⪍ U+2A8D block infix 0.2777777777777778em 0.2777777777777778em N/A
⪎ U+2A8E block infix 0.2777777777777778em 0.2777777777777778em N/A
⪏ U+2A8F block infix 0.2777777777777778em 0.2777777777777778em N/A
⪐ U+2A90 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪑ U+2A91 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪒ U+2A92 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪓ U+2A93 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪔ U+2A94 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪕ U+2A95 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪖ U+2A96 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪗ U+2A97 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪘ U+2A98 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪙ U+2A99 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪚ U+2A9A block infix 0.2777777777777778em 0.2777777777777778em N/A
⪛ U+2A9B block infix 0.2777777777777778em 0.2777777777777778em N/A
⪜ U+2A9C block infix 0.2777777777777778em 0.2777777777777778em N/A
⪝ U+2A9D block infix 0.2777777777777778em 0.2777777777777778em N/A
⪞ U+2A9E block infix 0.2777777777777778em 0.2777777777777778em N/A
⪟ U+2A9F block infix 0.2777777777777778em 0.2777777777777778em N/A
⪠ U+2AA0 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪡ U+2AA1 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪢ U+2AA2 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪣ U+2AA3 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪤ U+2AA4 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪥ U+2AA5 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪦ U+2AA6 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪧ U+2AA7 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪨ U+2AA8 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪩ U+2AA9 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪪ U+2AAA block infix 0.2777777777777778em 0.2777777777777778em N/A
⪫ U+2AAB block infix 0.2777777777777778em 0.2777777777777778em N/A
⪬ U+2AAC block infix 0.2777777777777778em 0.2777777777777778em N/A
⪭ U+2AAD block infix 0.2777777777777778em 0.2777777777777778em N/A
⪮ U+2AAE block infix 0.2777777777777778em 0.2777777777777778em N/A
⪯ U+2AAF block infix 0.2777777777777778em 0.2777777777777778em N/A
⪰ U+2AB0 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪱ U+2AB1 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪲ U+2AB2 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪳ U+2AB3 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪴ U+2AB4 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪵ U+2AB5 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪶ U+2AB6 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪷ U+2AB7 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪸ U+2AB8 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪹ U+2AB9 block infix 0.2777777777777778em 0.2777777777777778em N/A
⪺ U+2ABA block infix 0.2777777777777778em 0.2777777777777778em N/A
⪻ U+2ABB block infix 0.2777777777777778em 0.2777777777777778em N/A
⪼ U+2ABC block infix 0.2777777777777778em 0.2777777777777778em N/A
⪽ U+2ABD block infix 0.2777777777777778em 0.2777777777777778em N/A
⪾ U+2ABE block infix 0.2777777777777778em 0.2777777777777778em N/A
⪿ U+2ABF block infix 0.2777777777777778em 0.2777777777777778em N/A
⫀ U+2AC0 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫁ U+2AC1 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫂ U+2AC2 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫃ U+2AC3 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫄ U+2AC4 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫅ U+2AC5 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫆ U+2AC6 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫇ U+2AC7 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫈ U+2AC8 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫉ U+2AC9 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫊ U+2ACA block infix 0.2777777777777778em 0.2777777777777778em N/A
⫋ U+2ACB block infix 0.2777777777777778em 0.2777777777777778em N/A
⫌ U+2ACC block infix 0.2777777777777778em 0.2777777777777778em N/A
⫍ U+2ACD block infix 0.2777777777777778em 0.2777777777777778em N/A
⫎ U+2ACE block infix 0.2777777777777778em 0.2777777777777778em N/A
⫏ U+2ACF block infix 0.2777777777777778em 0.2777777777777778em N/A
⫐ U+2AD0 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫑ U+2AD1 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫒ U+2AD2 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫓ U+2AD3 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫔ U+2AD4 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫕ U+2AD5 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫖ U+2AD6 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫗ U+2AD7 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫘ U+2AD8 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫙ U+2AD9 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫚ U+2ADA block infix 0.2777777777777778em 0.2777777777777778em N/A
⫞ U+2ADE block infix 0.2777777777777778em 0.2777777777777778em N/A
⫟ U+2ADF block infix 0.2777777777777778em 0.2777777777777778em N/A
⫠ U+2AE0 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫡ U+2AE1 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫢ U+2AE2 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫣ U+2AE3 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫤ U+2AE4 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫥ U+2AE5 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫦ U+2AE6 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫧ U+2AE7 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫨ U+2AE8 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫩ U+2AE9 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫪ U+2AEA block infix 0.2777777777777778em 0.2777777777777778em N/A
⫫ U+2AEB block infix 0.2777777777777778em 0.2777777777777778em N/A
⫮ U+2AEE block infix 0.2777777777777778em 0.2777777777777778em N/A
⫲ U+2AF2 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫳ U+2AF3 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫴ U+2AF4 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫵ U+2AF5 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫷ U+2AF7 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫸ U+2AF8 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫹ U+2AF9 block infix 0.2777777777777778em 0.2777777777777778em N/A
⫺ U+2AFA block infix 0.2777777777777778em 0.2777777777777778em N/A
⬀ U+2B00 block infix 0.2777777777777778em 0.2777777777777778em N/A
⬁ U+2B01 block infix 0.2777777777777778em 0.2777777777777778em N/A
⬂ U+2B02 block infix 0.2777777777777778em 0.2777777777777778em N/A
⬃ U+2B03 block infix 0.2777777777777778em 0.2777777777777778em N/A
⬈ U+2B08 block infix 0.2777777777777778em 0.2777777777777778em N/A
⬉ U+2B09 block infix 0.2777777777777778em 0.2777777777777778em N/A
⬊ U+2B0A block infix 0.2777777777777778em 0.2777777777777778em N/A
⬋ U+2B0B block infix 0.2777777777777778em 0.2777777777777778em N/A
⬿ U+2B3F block infix 0.2777777777777778em 0.2777777777777778em N/A
⭍ U+2B4D block infix 0.2777777777777778em 0.2777777777777778em N/A
⭎ U+2B4E block infix 0.2777777777777778em 0.2777777777777778em N/A
⭏ U+2B4F block infix 0.2777777777777778em 0.2777777777777778em N/A
⭚ U+2B5A block infix 0.2777777777777778em 0.2777777777777778em N/A
⭛ U+2B5B block infix 0.2777777777777778em 0.2777777777777778em N/A
⭜ U+2B5C block infix 0.2777777777777778em 0.2777777777777778em N/A
⭝ U+2B5D block infix 0.2777777777777778em 0.2777777777777778em N/A
⭞ U+2B5E block infix 0.2777777777777778em 0.2777777777777778em N/A
⭟ U+2B5F block infix 0.2777777777777778em 0.2777777777777778em N/A
⭦ U+2B66 block infix 0.2777777777777778em 0.2777777777777778em N/A
⭧ U+2B67 block infix 0.2777777777777778em 0.2777777777777778em N/A
⭨ U+2B68 block infix 0.2777777777777778em 0.2777777777777778em N/A
⭩ U+2B69 block infix 0.2777777777777778em 0.2777777777777778em N/A
⭮ U+2B6E block infix 0.2777777777777778em 0.2777777777777778em N/A
⭯ U+2B6F block infix 0.2777777777777778em 0.2777777777777778em N/A
⭶ U+2B76 block infix 0.2777777777777778em 0.2777777777777778em N/A
⭷ U+2B77 block infix 0.2777777777777778em 0.2777777777777778em N/A
⭸ U+2B78 block infix 0.2777777777777778em 0.2777777777777778em N/A
⭹ U+2B79 block infix 0.2777777777777778em 0.2777777777777778em N/A
⮈ U+2B88 block infix 0.2777777777777778em 0.2777777777777778em N/A
⮉ U+2B89 block infix 0.2777777777777778em 0.2777777777777778em N/A
⮊ U+2B8A block infix 0.2777777777777778em 0.2777777777777778em N/A
⮋ U+2B8B block infix 0.2777777777777778em 0.2777777777777778em N/A
⮌ U+2B8C block infix 0.2777777777777778em 0.2777777777777778em N/A
⮍ U+2B8D block infix 0.2777777777777778em 0.2777777777777778em N/A
⮎ U+2B8E block infix 0.2777777777777778em 0.2777777777777778em N/A
⮏ U+2B8F block infix 0.2777777777777778em 0.2777777777777778em N/A
⮔ U+2B94 block infix 0.2777777777777778em 0.2777777777777778em N/A
⮰ U+2BB0 block infix 0.2777777777777778em 0.2777777777777778em N/A
⮱ U+2BB1 block infix 0.2777777777777778em 0.2777777777777778em N/A
⮲ U+2BB2 block infix 0.2777777777777778em 0.2777777777777778em N/A
⮳ U+2BB3 block infix 0.2777777777777778em 0.2777777777777778em N/A
⮴ U+2BB4 block infix 0.2777777777777778em 0.2777777777777778em N/A
⮵ U+2BB5 block infix 0.2777777777777778em 0.2777777777777778em N/A
⮶ U+2BB6 block infix 0.2777777777777778em 0.2777777777777778em N/A
⮷ U+2BB7 block infix 0.2777777777777778em 0.2777777777777778em N/A
⯑ U+2BD1 block infix 0.2777777777777778em 0.2777777777777778em N/A
String != U+0021 U+003D block infix 0.2777777777777778em 0.2777777777777778em N/A
String *= U+002A U+003D block infix 0.2777777777777778em 0.2777777777777778em N/A
String += U+002B U+003D block infix 0.2777777777777778em 0.2777777777777778em N/A
String -= U+002D U+003D block infix 0.2777777777777778em 0.2777777777777778em N/A
String -> U+002D U+003E block infix 0.2777777777777778em 0.2777777777777778em N/A
String // U+002F U+002F block infix 0.2777777777777778em 0.2777777777777778em N/A
String /= U+002F U+003D block infix 0.2777777777777778em 0.2777777777777778em N/A
String := U+003A U+003D block infix 0.2777777777777778em 0.2777777777777778em N/A
String <= U+003C U+003D block infix 0.2777777777777778em 0.2777777777777778em N/A
String == U+003D U+003D block infix 0.2777777777777778em 0.2777777777777778em N/A
String >= U+003E U+003D block infix 0.2777777777777778em 0.2777777777777778em N/A
String || U+007C U+007C block infix 0.2777777777777778em 0.2777777777777778em fence
← U+2190 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↑ U+2191 block infix 0.2777777777777778em 0.2777777777777778em stretchy
→ U+2192 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↓ U+2193 block infix 0.2777777777777778em 0.2777777777777778em stretchy
↔ U+2194 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↕ U+2195 block infix 0.2777777777777778em 0.2777777777777778em stretchy
↚ U+219A inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↛ U+219B inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↜ U+219C inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↝ U+219D inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↞ U+219E inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↟ U+219F block infix 0.2777777777777778em 0.2777777777777778em stretchy
↠ U+21A0 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↡ U+21A1 block infix 0.2777777777777778em 0.2777777777777778em stretchy
↢ U+21A2 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↣ U+21A3 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↤ U+21A4 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↥ U+21A5 block infix 0.2777777777777778em 0.2777777777777778em stretchy
↦ U+21A6 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↧ U+21A7 block infix 0.2777777777777778em 0.2777777777777778em stretchy
↨ U+21A8 block infix 0.2777777777777778em 0.2777777777777778em stretchy
↩ U+21A9 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↪ U+21AA inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↫ U+21AB inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↬ U+21AC inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↭ U+21AD inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↮ U+21AE inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↰ U+21B0 block infix 0.2777777777777778em 0.2777777777777778em stretchy
↱ U+21B1 block infix 0.2777777777777778em 0.2777777777777778em stretchy
↲ U+21B2 block infix 0.2777777777777778em 0.2777777777777778em stretchy
↳ U+21B3 block infix 0.2777777777777778em 0.2777777777777778em stretchy
↴ U+21B4 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↵ U+21B5 block infix 0.2777777777777778em 0.2777777777777778em stretchy
↹ U+21B9 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↼ U+21BC inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↽ U+21BD inline infix 0.2777777777777778em 0.2777777777777778em stretchy
↾ U+21BE block infix 0.2777777777777778em 0.2777777777777778em stretchy
↿ U+21BF block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇀ U+21C0 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇁ U+21C1 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇂ U+21C2 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇃ U+21C3 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇄ U+21C4 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇅ U+21C5 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇆ U+21C6 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇇ U+21C7 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇈ U+21C8 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇉ U+21C9 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇊ U+21CA block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇋ U+21CB inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇌ U+21CC inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇍ U+21CD inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇎ U+21CE inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇏ U+21CF inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇐ U+21D0 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇑ U+21D1 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇒ U+21D2 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇓ U+21D3 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇔ U+21D4 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇕ U+21D5 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇚ U+21DA inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇛ U+21DB inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇜ U+21DC inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇝ U+21DD inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇞ U+21DE block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇟ U+21DF block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇠ U+21E0 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇡ U+21E1 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇢ U+21E2 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇣ U+21E3 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇤ U+21E4 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇥ U+21E5 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇦ U+21E6 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇧ U+21E7 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇨ U+21E8 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇩ U+21E9 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇪ U+21EA block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇫ U+21EB block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇬ U+21EC block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇭ U+21ED block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇮ U+21EE block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇯ U+21EF block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇰ U+21F0 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇳ U+21F3 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇴ U+21F4 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇵ U+21F5 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⇶ U+21F6 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇷ U+21F7 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇸ U+21F8 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇹ U+21F9 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇺ U+21FA inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇻ U+21FB inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇼ U+21FC inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇽ U+21FD inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇾ U+21FE inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⇿ U+21FF inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➔ U+2794 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➙ U+2799 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➛ U+279B inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➜ U+279C inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➝ U+279D inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➞ U+279E inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➟ U+279F inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➠ U+27A0 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➡ U+27A1 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➥ U+27A5 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➦ U+27A6 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➨ U+27A8 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➩ U+27A9 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➪ U+27AA inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➫ U+27AB inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➬ U+27AC inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➭ U+27AD inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➮ U+27AE inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➯ U+27AF inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➱ U+27B1 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➳ U+27B3 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➵ U+27B5 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➸ U+27B8 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➺ U+27BA inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➻ U+27BB inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➼ U+27BC inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➽ U+27BD inline infix 0.2777777777777778em 0.2777777777777778em stretchy
➾ U+27BE inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⟰ U+27F0 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⟱ U+27F1 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⟴ U+27F4 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⟵ U+27F5 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⟶ U+27F6 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⟷ U+27F7 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⟸ U+27F8 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⟹ U+27F9 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⟺ U+27FA inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⟻ U+27FB inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⟼ U+27FC inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⟽ U+27FD inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⟾ U+27FE inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⟿ U+27FF inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤀ U+2900 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤁ U+2901 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤂ U+2902 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤃ U+2903 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤄ U+2904 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤅ U+2905 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤆ U+2906 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤇ U+2907 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤈ U+2908 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⤉ U+2909 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⤊ U+290A block infix 0.2777777777777778em 0.2777777777777778em stretchy
⤋ U+290B block infix 0.2777777777777778em 0.2777777777777778em stretchy
⤌ U+290C inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤍ U+290D inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤎ U+290E inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤏ U+290F inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤐ U+2910 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤑ U+2911 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤒ U+2912 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⤓ U+2913 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⤔ U+2914 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤕ U+2915 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤖ U+2916 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤗ U+2917 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤘ U+2918 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤙ U+2919 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤚ U+291A inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤛ U+291B inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤜ U+291C inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤝ U+291D inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤞ U+291E inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤟ U+291F inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤠ U+2920 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⤴ U+2934 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⤵ U+2935 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⤶ U+2936 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⤷ U+2937 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥂ U+2942 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥃ U+2943 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥄ U+2944 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥅ U+2945 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥆ U+2946 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥇ U+2947 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥈ U+2948 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥉ U+2949 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥊ U+294A inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥋ U+294B inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥌ U+294C block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥍ U+294D block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥎ U+294E inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥏ U+294F block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥐ U+2950 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥑ U+2951 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥒ U+2952 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥓ U+2953 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥔ U+2954 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥕ U+2955 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥖ U+2956 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥗ U+2957 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥘ U+2958 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥙ U+2959 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥚ U+295A inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥛ U+295B inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥜ U+295C block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥝ U+295D block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥞ U+295E inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥟ U+295F inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥠ U+2960 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥡ U+2961 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥢ U+2962 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥣ U+2963 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥤ U+2964 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥥ U+2965 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥦ U+2966 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥧ U+2967 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥨ U+2968 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥩ U+2969 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥪ U+296A inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥫ U+296B inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥬ U+296C inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥭ U+296D inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥮ U+296E block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥯ U+296F block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥰ U+2970 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥱ U+2971 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥲ U+2972 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥳ U+2973 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥴ U+2974 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥵ U+2975 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥼ U+297C inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥽ U+297D inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⥾ U+297E block infix 0.2777777777777778em 0.2777777777777778em stretchy
⥿ U+297F block infix 0.2777777777777778em 0.2777777777777778em stretchy
⬄ U+2B04 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬅ U+2B05 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬆ U+2B06 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⬇ U+2B07 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⬌ U+2B0C inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬍ U+2B0D block infix 0.2777777777777778em 0.2777777777777778em stretchy
⬎ U+2B0E block infix 0.2777777777777778em 0.2777777777777778em stretchy
⬏ U+2B0F block infix 0.2777777777777778em 0.2777777777777778em stretchy
⬐ U+2B10 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⬑ U+2B11 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⬰ U+2B30 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬱ U+2B31 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬲ U+2B32 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬳ U+2B33 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬴ U+2B34 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬵ U+2B35 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬶ U+2B36 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬷ U+2B37 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬸ U+2B38 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬹ U+2B39 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬺ U+2B3A inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬻ U+2B3B inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬼ U+2B3C inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬽ U+2B3D inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⬾ U+2B3E inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭀ U+2B40 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭁ U+2B41 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭂ U+2B42 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭃ U+2B43 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭄ U+2B44 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭅ U+2B45 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭆ U+2B46 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭇ U+2B47 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭈ U+2B48 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭉ U+2B49 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭊ U+2B4A inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭋ U+2B4B inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭌ U+2B4C inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭠ U+2B60 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭡ U+2B61 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⭢ U+2B62 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭣ U+2B63 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⭤ U+2B64 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭥ U+2B65 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⭪ U+2B6A inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭫ U+2B6B block infix 0.2777777777777778em 0.2777777777777778em stretchy
⭬ U+2B6C inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭭ U+2B6D block infix 0.2777777777777778em 0.2777777777777778em stretchy
⭰ U+2B70 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭱ U+2B71 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⭲ U+2B72 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭳ U+2B73 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⭺ U+2B7A inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭻ U+2B7B block infix 0.2777777777777778em 0.2777777777777778em stretchy
⭼ U+2B7C inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⭽ U+2B7D block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮀ U+2B80 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⮁ U+2B81 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮂ U+2B82 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⮃ U+2B83 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮄ U+2B84 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⮅ U+2B85 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮆ U+2B86 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⮇ U+2B87 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮕ U+2B95 inline infix 0.2777777777777778em 0.2777777777777778em stretchy
⮠ U+2BA0 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮡ U+2BA1 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮢ U+2BA2 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮣ U+2BA3 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮤ U+2BA4 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮥ U+2BA5 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮦ U+2BA6 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮧ U+2BA7 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮨ U+2BA8 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮩ U+2BA9 block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮪ U+2BAA block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮫ U+2BAB block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮬ U+2BAC block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮭ U+2BAD block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮮ U+2BAE block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮯ U+2BAF block infix 0.2777777777777778em 0.2777777777777778em stretchy
⮸ U+2BB8 block infix 0.2777777777777778em 0.2777777777777778em stretchy
+ U+002B block infix 0.2222222222222222em 0.2222222222222222em N/A
- U+002D block infix 0.2222222222222222em 0.2222222222222222em N/A
± U+00B1 block infix 0.2222222222222222em 0.2222222222222222em N/A
÷ U+00F7 block infix 0.2222222222222222em 0.2222222222222222em N/A
⁄ U+2044 block infix 0.2222222222222222em 0.2222222222222222em N/A
− U+2212 block infix 0.2222222222222222em 0.2222222222222222em N/A
∓ U+2213 block infix 0.2222222222222222em 0.2222222222222222em N/A
∔ U+2214 block infix 0.2222222222222222em 0.2222222222222222em N/A
∕ U+2215 block infix 0.2222222222222222em 0.2222222222222222em N/A
∖ U+2216 block infix 0.2222222222222222em 0.2222222222222222em N/A
∧ U+2227 block infix 0.2222222222222222em 0.2222222222222222em N/A
∨ U+2228 block infix 0.2222222222222222em 0.2222222222222222em N/A
∩ U+2229 block infix 0.2222222222222222em 0.2222222222222222em N/A
∪ U+222A block infix 0.2222222222222222em 0.2222222222222222em N/A
∶ U+2236 block infix 0.2222222222222222em 0.2222222222222222em N/A
∸ U+2238 block infix 0.2222222222222222em 0.2222222222222222em N/A
⊌ U+228C block infix 0.2222222222222222em 0.2222222222222222em N/A
⊍ U+228D block infix 0.2222222222222222em 0.2222222222222222em N/A
⊎ U+228E block infix 0.2222222222222222em 0.2222222222222222em N/A
⊓ U+2293 block infix 0.2222222222222222em 0.2222222222222222em N/A
⊔ U+2294 block infix 0.2222222222222222em 0.2222222222222222em N/A
⊕ U+2295 block infix 0.2222222222222222em 0.2222222222222222em N/A
⊖ U+2296 block infix 0.2222222222222222em 0.2222222222222222em N/A
⊘ U+2298 block infix 0.2222222222222222em 0.2222222222222222em N/A
⊝ U+229D block infix 0.2222222222222222em 0.2222222222222222em N/A
⊞ U+229E block infix 0.2222222222222222em 0.2222222222222222em N/A
⊟ U+229F block infix 0.2222222222222222em 0.2222222222222222em N/A
⊻ U+22BB block infix 0.2222222222222222em 0.2222222222222222em N/A
⊼ U+22BC block infix 0.2222222222222222em 0.2222222222222222em N/A
⊽ U+22BD block infix 0.2222222222222222em 0.2222222222222222em N/A
⋎ U+22CE block infix 0.2222222222222222em 0.2222222222222222em N/A
⋏ U+22CF block infix 0.2222222222222222em 0.2222222222222222em N/A
⋒ U+22D2 block infix 0.2222222222222222em 0.2222222222222222em N/A
⋓ U+22D3 block infix 0.2222222222222222em 0.2222222222222222em N/A
➕ U+2795 block infix 0.2222222222222222em 0.2222222222222222em N/A
➖ U+2796 block infix 0.2222222222222222em 0.2222222222222222em N/A
➗ U+2797 block infix 0.2222222222222222em 0.2222222222222222em N/A
⦸ U+29B8 block infix 0.2222222222222222em 0.2222222222222222em N/A
⦼ U+29BC block infix 0.2222222222222222em 0.2222222222222222em N/A
⧄ U+29C4 block infix 0.2222222222222222em 0.2222222222222222em N/A
⧅ U+29C5 block infix 0.2222222222222222em 0.2222222222222222em N/A
⧵ U+29F5 block infix 0.2222222222222222em 0.2222222222222222em N/A
⧶ U+29F6 block infix 0.2222222222222222em 0.2222222222222222em N/A
⧷ U+29F7 block infix 0.2222222222222222em 0.2222222222222222em N/A
⧸ U+29F8 block infix 0.2222222222222222em 0.2222222222222222em N/A
⧹ U+29F9 block infix 0.2222222222222222em 0.2222222222222222em N/A
⧺ U+29FA block infix 0.2222222222222222em 0.2222222222222222em N/A
⧻ U+29FB block infix 0.2222222222222222em 0.2222222222222222em N/A
⨟ U+2A1F block infix 0.2222222222222222em 0.2222222222222222em N/A
⨠ U+2A20 block infix 0.2222222222222222em 0.2222222222222222em N/A
⨡ U+2A21 block infix 0.2222222222222222em 0.2222222222222222em N/A
⨢ U+2A22 block infix 0.2222222222222222em 0.2222222222222222em N/A
⨣ U+2A23 block infix 0.2222222222222222em 0.2222222222222222em N/A
⨤ U+2A24 block infix 0.2222222222222222em 0.2222222222222222em N/A
⨥ U+2A25 block infix 0.2222222222222222em 0.2222222222222222em N/A
⨦ U+2A26 block infix 0.2222222222222222em 0.2222222222222222em N/A
⨧ U+2A27 block infix 0.2222222222222222em 0.2222222222222222em N/A
⨨ U+2A28 block infix 0.2222222222222222em 0.2222222222222222em N/A
⨩ U+2A29 block infix 0.2222222222222222em 0.2222222222222222em N/A
⨪ U+2A2A block infix 0.2222222222222222em 0.2222222222222222em N/A
⨫ U+2A2B block infix 0.2222222222222222em 0.2222222222222222em N/A
⨬ U+2A2C block infix 0.2222222222222222em 0.2222222222222222em N/A
⨭ U+2A2D block infix 0.2222222222222222em 0.2222222222222222em N/A
⨮ U+2A2E block infix 0.2222222222222222em 0.2222222222222222em N/A
⨸ U+2A38 block infix 0.2222222222222222em 0.2222222222222222em N/A
⨹ U+2A39 block infix 0.2222222222222222em 0.2222222222222222em N/A
⨺ U+2A3A block infix 0.2222222222222222em 0.2222222222222222em N/A
⨾ U+2A3E block infix 0.2222222222222222em 0.2222222222222222em N/A
⩀ U+2A40 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩁ U+2A41 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩂ U+2A42 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩃ U+2A43 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩄ U+2A44 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩅ U+2A45 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩆ U+2A46 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩇ U+2A47 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩈ U+2A48 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩉ U+2A49 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩊ U+2A4A block infix 0.2222222222222222em 0.2222222222222222em N/A
⩋ U+2A4B block infix 0.2222222222222222em 0.2222222222222222em N/A
⩌ U+2A4C block infix 0.2222222222222222em 0.2222222222222222em N/A
⩍ U+2A4D block infix 0.2222222222222222em 0.2222222222222222em N/A
⩎ U+2A4E block infix 0.2222222222222222em 0.2222222222222222em N/A
⩏ U+2A4F block infix 0.2222222222222222em 0.2222222222222222em N/A
⩑ U+2A51 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩒ U+2A52 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩓ U+2A53 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩔ U+2A54 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩕ U+2A55 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩖ U+2A56 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩗ U+2A57 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩘ U+2A58 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩙ U+2A59 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩚ U+2A5A block infix 0.2222222222222222em 0.2222222222222222em N/A
⩛ U+2A5B block infix 0.2222222222222222em 0.2222222222222222em N/A
⩜ U+2A5C block infix 0.2222222222222222em 0.2222222222222222em N/A
⩝ U+2A5D block infix 0.2222222222222222em 0.2222222222222222em N/A
⩞ U+2A5E block infix 0.2222222222222222em 0.2222222222222222em N/A
⩟ U+2A5F block infix 0.2222222222222222em 0.2222222222222222em N/A
⩠ U+2A60 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩡ U+2A61 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩢ U+2A62 block infix 0.2222222222222222em 0.2222222222222222em N/A
⩣ U+2A63 block infix 0.2222222222222222em 0.2222222222222222em N/A
⫛ U+2ADB block infix 0.2222222222222222em 0.2222222222222222em N/A
⫶ U+2AF6 block infix 0.2222222222222222em 0.2222222222222222em N/A
⫻ U+2AFB block infix 0.2222222222222222em 0.2222222222222222em N/A
⫽ U+2AFD block infix 0.2222222222222222em 0.2222222222222222em N/A
String && U+0026 U+0026 block infix 0.2222222222222222em 0.2222222222222222em N/A
% U+0025 block infix 0.16666666666666666em 0.16666666666666666em N/A
* U+002A block infix 0.16666666666666666em 0.16666666666666666em N/A
. U+002E block infix 0.16666666666666666em 0.16666666666666666em N/A
? U+003F block infix 0.16666666666666666em 0.16666666666666666em N/A
@ U+0040 block infix 0.16666666666666666em 0.16666666666666666em N/A
^ U+005E inline infix 0.16666666666666666em 0.16666666666666666em N/A
· U+00B7 block infix 0.16666666666666666em 0.16666666666666666em N/A
× U+00D7 block infix 0.16666666666666666em 0.16666666666666666em N/A
• U+2022 block infix 0.16666666666666666em 0.16666666666666666em N/A
⁃ U+2043 block infix 0.16666666666666666em 0.16666666666666666em N/A
∗ U+2217 block infix 0.16666666666666666em 0.16666666666666666em N/A
∘ U+2218 block infix 0.16666666666666666em 0.16666666666666666em N/A
∙ U+2219 block infix 0.16666666666666666em 0.16666666666666666em N/A
≀ U+2240 block infix 0.16666666666666666em 0.16666666666666666em N/A
⊗ U+2297 block infix 0.16666666666666666em 0.16666666666666666em N/A
⊙ U+2299 block infix 0.16666666666666666em 0.16666666666666666em N/A
⊚ U+229A block infix 0.16666666666666666em 0.16666666666666666em N/A
⊛ U+229B block infix 0.16666666666666666em 0.16666666666666666em N/A
⊠ U+22A0 block infix 0.16666666666666666em 0.16666666666666666em N/A
⊡ U+22A1 block infix 0.16666666666666666em 0.16666666666666666em N/A
⊺ U+22BA block infix 0.16666666666666666em 0.16666666666666666em N/A
⋄ U+22C4 block infix 0.16666666666666666em 0.16666666666666666em N/A
⋅ U+22C5 block infix 0.16666666666666666em 0.16666666666666666em N/A
⋆ U+22C6 block infix 0.16666666666666666em 0.16666666666666666em N/A
⋇ U+22C7 block infix 0.16666666666666666em 0.16666666666666666em N/A
⋉ U+22C9 block infix 0.16666666666666666em 0.16666666666666666em N/A
⋊ U+22CA block infix 0.16666666666666666em 0.16666666666666666em N/A
⋋ U+22CB block infix 0.16666666666666666em 0.16666666666666666em N/A
⋌ U+22CC block infix 0.16666666666666666em 0.16666666666666666em N/A
⌅ U+2305 block infix 0.16666666666666666em 0.16666666666666666em N/A
⌆ U+2306 block infix 0.16666666666666666em 0.16666666666666666em N/A
⟋ U+27CB block infix 0.16666666666666666em 0.16666666666666666em N/A
⟍ U+27CD block infix 0.16666666666666666em 0.16666666666666666em N/A
⧆ U+29C6 block infix 0.16666666666666666em 0.16666666666666666em N/A
⧇ U+29C7 block infix 0.16666666666666666em 0.16666666666666666em N/A
⧈ U+29C8 block infix 0.16666666666666666em 0.16666666666666666em N/A
⧔ U+29D4 block infix 0.16666666666666666em 0.16666666666666666em N/A
⧕ U+29D5 block infix 0.16666666666666666em 0.16666666666666666em N/A
⧖ U+29D6 block infix 0.16666666666666666em 0.16666666666666666em N/A
⧗ U+29D7 block infix 0.16666666666666666em 0.16666666666666666em N/A
⧢ U+29E2 block infix 0.16666666666666666em 0.16666666666666666em N/A
⨝ U+2A1D block infix 0.16666666666666666em 0.16666666666666666em N/A
⨞ U+2A1E block infix 0.16666666666666666em 0.16666666666666666em N/A
⨯ U+2A2F block infix 0.16666666666666666em 0.16666666666666666em N/A
⨰ U+2A30 block infix 0.16666666666666666em 0.16666666666666666em N/A
⨱ U+2A31 block infix 0.16666666666666666em 0.16666666666666666em N/A
⨲ U+2A32 block infix 0.16666666666666666em 0.16666666666666666em N/A
⨳ U+2A33 block infix 0.16666666666666666em 0.16666666666666666em N/A
⨴ U+2A34 block infix 0.16666666666666666em 0.16666666666666666em N/A
⨵ U+2A35 block infix 0.16666666666666666em 0.16666666666666666em N/A
⨶ U+2A36 block infix 0.16666666666666666em 0.16666666666666666em N/A
⨷ U+2A37 block infix 0.16666666666666666em 0.16666666666666666em N/A
⨻ U+2A3B block infix 0.16666666666666666em 0.16666666666666666em N/A
⨼ U+2A3C block infix 0.16666666666666666em 0.16666666666666666em N/A
⨽ U+2A3D block infix 0.16666666666666666em 0.16666666666666666em N/A
⨿ U+2A3F block infix 0.16666666666666666em 0.16666666666666666em N/A
⩐ U+2A50 block infix 0.16666666666666666em 0.16666666666666666em N/A
⩤ U+2A64 block infix 0.16666666666666666em 0.16666666666666666em N/A
⩥ U+2A65 block infix 0.16666666666666666em 0.16666666666666666em N/A
⫝̸ U+2ADC block infix 0.16666666666666666em 0.16666666666666666em N/A
⫝ U+2ADD block infix 0.16666666666666666em 0.16666666666666666em N/A
⫾ U+2AFE block infix 0.16666666666666666em 0.16666666666666666em N/A
String ** U+002A U+002A block infix 0.16666666666666666em 0.16666666666666666em N/A
String <> U+003C U+003E block infix 0.16666666666666666em 0.16666666666666666em N/A
! U+0021 block prefix 0 0 N/A
+ U+002B block prefix 0 0 N/A
- U+002D block prefix 0 0 N/A
¬ U+00AC block prefix 0 0 N/A
± U+00B1 block prefix 0 0 N/A
‘ U+2018 block prefix 0 0 fence
“ U+201C block prefix 0 0 fence
∀ U+2200 block prefix 0 0 N/A
∁ U+2201 block prefix 0 0 N/A
∃ U+2203 block prefix 0 0 N/A
∄ U+2204 block prefix 0 0 N/A
∇ U+2207 block prefix 0 0 N/A
− U+2212 block prefix 0 0 N/A
∓ U+2213 block prefix 0 0 N/A
∟ U+221F block prefix 0 0 N/A
∠ U+2220 block prefix 0 0 N/A
∡ U+2221 block prefix 0 0 N/A
∢ U+2222 block prefix 0 0 N/A
∴ U+2234 block prefix 0 0 N/A
∵ U+2235 block prefix 0 0 N/A
∼ U+223C block prefix 0 0 N/A
⊾ U+22BE block prefix 0 0 N/A
⊿ U+22BF block prefix 0 0 N/A
⌐ U+2310 block prefix 0 0 N/A
⌙ U+2319 block prefix 0 0 N/A
➕ U+2795 block prefix 0 0 N/A
➖ U+2796 block prefix 0 0 N/A
⟀ U+27C0 block prefix 0 0 N/A
⦛ U+299B block prefix 0 0 N/A
⦜ U+299C block prefix 0 0 N/A
⦝ U+299D block prefix 0 0 N/A
⦞ U+299E block prefix 0 0 N/A
⦟ U+299F block prefix 0 0 N/A
⦠ U+29A0 block prefix 0 0 N/A
⦡ U+29A1 block prefix 0 0 N/A
⦢ U+29A2 block prefix 0 0 N/A
⦣ U+29A3 block prefix 0 0 N/A
⦤ U+29A4 block prefix 0 0 N/A
⦥ U+29A5 block prefix 0 0 N/A
⦦ U+29A6 block prefix 0 0 N/A
⦧ U+29A7 block prefix 0 0 N/A
⦨ U+29A8 block prefix 0 0 N/A
⦩ U+29A9 block prefix 0 0 N/A
⦪ U+29AA block prefix 0 0 N/A
⦫ U+29AB block prefix 0 0 N/A
⦬ U+29AC block prefix 0 0 N/A
⦭ U+29AD block prefix 0 0 N/A
⦮ U+29AE block prefix 0 0 N/A
⦯ U+29AF block prefix 0 0 N/A
⫬ U+2AEC block prefix 0 0 N/A
⫭ U+2AED block prefix 0 0 N/A
String || U+007C U+007C block prefix 0 0 fence
! U+0021 block postfix 0 0 N/A
" U+0022 block postfix 0 0 N/A
% U+0025 block postfix 0 0 N/A
& U+0026 block postfix 0 0 N/A
' U+0027 block postfix 0 0 N/A
` U+0060 block postfix 0 0 N/A
¨ U+00A8 block postfix 0 0 N/A
° U+00B0 block postfix 0 0 N/A
² U+00B2 block postfix 0 0 N/A
³ U+00B3 block postfix 0 0 N/A
´ U+00B4 block postfix 0 0 N/A
¸ U+00B8 block postfix 0 0 N/A
¹ U+00B9 block postfix 0 0 N/A
ˊ U+02CA block postfix 0 0 N/A
ˋ U+02CB block postfix 0 0 N/A
˘ U+02D8 block postfix 0 0 N/A
˙ U+02D9 block postfix 0 0 N/A
˚ U+02DA block postfix 0 0 N/A
˝ U+02DD block postfix 0 0 N/A
̑ U+0311 block postfix 0 0 N/A
’ U+2019 block postfix 0 0 fence
‚ U+201A block postfix 0 0 N/A
‛ U+201B block postfix 0 0 N/A
” U+201D block postfix 0 0 fence
„ U+201E block postfix 0 0 N/A
‟ U+201F block postfix 0 0 N/A
′ U+2032 block postfix 0 0 N/A
″ U+2033 block postfix 0 0 N/A
‴ U+2034 block postfix 0 0 N/A
‵ U+2035 block postfix 0 0 N/A
‶ U+2036 block postfix 0 0 N/A
‷ U+2037 block postfix 0 0 N/A
⁗ U+2057 block postfix 0 0 N/A
⃛ U+20DB block postfix 0 0 N/A
⃜ U+20DC block postfix 0 0 N/A
⏍ U+23CD block postfix 0 0 N/A
String !! U+0021 U+0021 block postfix 0 0 N/A
String ++ U+002B U+002B block postfix 0 0 N/A
String -- U+002D U+002D block postfix 0 0 N/A
String || U+007C U+007C block postfix 0 0 fence
( U+0028 block prefix 0 0 stretchy symmetric fence
[ U+005B block prefix 0 0 stretchy symmetric fence
{ U+007B block prefix 0 0 stretchy symmetric fence
| U+007C block prefix 0 0 stretchy symmetric fence
‖ U+2016 block prefix 0 0 stretchy symmetric fence
⌈ U+2308 block prefix 0 0 stretchy symmetric fence
⌊ U+230A block prefix 0 0 stretchy symmetric fence
〈 U+2329 block prefix 0 0 stretchy symmetric fence
❲ U+2772 block prefix 0 0 stretchy symmetric fence
⟦ U+27E6 block prefix 0 0 stretchy symmetric fence
⟨ U+27E8 block prefix 0 0 stretchy symmetric fence
⟪ U+27EA block prefix 0 0 stretchy symmetric fence
⟬ U+27EC block prefix 0 0 stretchy symmetric fence
⟮ U+27EE block prefix 0 0 stretchy symmetric fence
⦀ U+2980 block prefix 0 0 stretchy symmetric fence
⦃ U+2983 block prefix 0 0 stretchy symmetric fence
⦅ U+2985 block prefix 0 0 stretchy symmetric fence
⦇ U+2987 block prefix 0 0 stretchy symmetric fence
⦉ U+2989 block prefix 0 0 stretchy symmetric fence
⦋ U+298B block prefix 0 0 stretchy symmetric fence
⦍ U+298D block prefix 0 0 stretchy symmetric fence
⦏ U+298F block prefix 0 0 stretchy symmetric fence
⦑ U+2991 block prefix 0 0 stretchy symmetric fence
⦓ U+2993 block prefix 0 0 stretchy symmetric fence
⦕ U+2995 block prefix 0 0 stretchy symmetric fence
⦗ U+2997 block prefix 0 0 stretchy symmetric fence
⦙ U+2999 block prefix 0 0 stretchy symmetric fence
⧘ U+29D8 block prefix 0 0 stretchy symmetric fence
⧚ U+29DA block prefix 0 0 stretchy symmetric fence
⧼ U+29FC block prefix 0 0 stretchy symmetric fence
) U+0029 block postfix 0 0 stretchy symmetric fence
] U+005D block postfix 0 0 stretchy symmetric fence
| U+007C block postfix 0 0 stretchy symmetric fence
} U+007D block postfix 0 0 stretchy symmetric fence
‖ U+2016 block postfix 0 0 stretchy symmetric fence
⌉ U+2309 block postfix 0 0 stretchy symmetric fence
⌋ U+230B block postfix 0 0 stretchy symmetric fence
〉 U+232A block postfix 0 0 stretchy symmetric fence
❳ U+2773 block postfix 0 0 stretchy symmetric fence
⟧ U+27E7 block postfix 0 0 stretchy symmetric fence
⟩ U+27E9 block postfix 0 0 stretchy symmetric fence
⟫ U+27EB block postfix 0 0 stretchy symmetric fence
⟭ U+27ED block postfix 0 0 stretchy symmetric fence
⟯ U+27EF block postfix 0 0 stretchy symmetric fence
⦀ U+2980 block postfix 0 0 stretchy symmetric fence
⦄ U+2984 block postfix 0 0 stretchy symmetric fence
⦆ U+2986 block postfix 0 0 stretchy symmetric fence
⦈ U+2988 block postfix 0 0 stretchy symmetric fence
⦊ U+298A block postfix 0 0 stretchy symmetric fence
⦌ U+298C block postfix 0 0 stretchy symmetric fence
⦎ U+298E block postfix 0 0 stretchy symmetric fence
⦐ U+2990 block postfix 0 0 stretchy symmetric fence
⦒ U+2992 block postfix 0 0 stretchy symmetric fence
⦔ U+2994 block postfix 0 0 stretchy symmetric fence
⦖ U+2996 block postfix 0 0 stretchy symmetric fence
⦘ U+2998 block postfix 0 0 stretchy symmetric fence
⦙ U+2999 block postfix 0 0 stretchy symmetric fence
⧙ U+29D9 block postfix 0 0 stretchy symmetric fence
⧛ U+29DB block postfix 0 0 stretchy symmetric fence
⧽ U+29FD block postfix 0 0 stretchy symmetric fence
∫ U+222B block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
∬ U+222C block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
∭ U+222D block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
∮ U+222E block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
∯ U+222F block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
∰ U+2230 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
∱ U+2231 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
∲ U+2232 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
∳ U+2233 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨋ U+2A0B block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨌ U+2A0C block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨍ U+2A0D block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨎ U+2A0E block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨏ U+2A0F block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨐ U+2A10 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨑ U+2A11 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨒ U+2A12 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨓ U+2A13 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨔ U+2A14 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨕ U+2A15 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨖ U+2A16 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨗ U+2A17 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨘ U+2A18 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨙ U+2A19 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨚ U+2A1A block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨛ U+2A1B block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
⨜ U+2A1C block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop
^ U+005E inline postfix 0 0 stretchy
_ U+005F inline postfix 0 0 stretchy
~ U+007E inline postfix 0 0 stretchy
¯ U+00AF inline postfix 0 0 stretchy
ˆ U+02C6 inline postfix 0 0 stretchy
ˇ U+02C7 inline postfix 0 0 stretchy
ˉ U+02C9 inline postfix 0 0 stretchy
ˍ U+02CD inline postfix 0 0 stretchy
˜ U+02DC inline postfix 0 0 stretchy
˷ U+02F7 inline postfix 0 0 stretchy
̂ U+0302 inline postfix 0 0 stretchy
‾ U+203E inline postfix 0 0 stretchy
⌢ U+2322 inline postfix 0 0 stretchy
⌣ U+2323 inline postfix 0 0 stretchy
⎴ U+23B4 inline postfix 0 0 stretchy
⎵ U+23B5 inline postfix 0 0 stretchy
⏜ U+23DC inline postfix 0 0 stretchy
⏝ U+23DD inline postfix 0 0 stretchy
⏞ U+23DE inline postfix 0 0 stretchy
⏟ U+23DF inline postfix 0 0 stretchy
⏠ U+23E0 inline postfix 0 0 stretchy
⏡ U+23E1 inline postfix 0 0 stretchy
𞻰 U+1EEF0 inline postfix 0 0 stretchy
𞻱 U+1EEF1 inline postfix 0 0 stretchy
∏ U+220F block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
∐ U+2210 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
∑ U+2211 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⋀ U+22C0 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⋁ U+22C1 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⋂ U+22C2 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⋃ U+22C3 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⨀ U+2A00 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⨁ U+2A01 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⨂ U+2A02 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⨃ U+2A03 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⨄ U+2A04 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⨅ U+2A05 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⨆ U+2A06 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⨇ U+2A07 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⨈ U+2A08 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⨉ U+2A09 block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⨊ U+2A0A block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⨝ U+2A1D block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⨞ U+2A1E block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⫼ U+2AFC block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
⫿ U+2AFF block prefix 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
/ U+002F block infix 0 0 N/A
\ U+005C block infix 0 0 N/A
_ U+005F inline infix 0 0 N/A
⁡ U+2061 block infix 0 0 N/A
⁢ U+2062 block infix 0 0 N/A
⁣ U+2063 block infix 0 0 separator
⁤ U+2064 block infix 0 0 N/A
∆ U+2206 block infix 0 0 N/A
ⅅ U+2145 block prefix 0.16666666666666666em 0 N/A
ⅆ U+2146 block prefix 0.16666666666666666em 0 N/A
∂ U+2202 block prefix 0.16666666666666666em 0 N/A
√ U+221A block prefix 0.16666666666666666em 0 N/A
∛ U+221B block prefix 0.16666666666666666em 0 N/A
∜ U+221C block prefix 0.16666666666666666em 0 N/A
, U+002C block infix 0 0.16666666666666666em separator
: U+003A block infix 0 0.16666666666666666em N/A
; U+003B block infix 0 0.16666666666666666em separator
Figure 29 演算子(Content, Form)からプロパティへの対応マップ。
Total size: 1177 entries, ≥ 3679 bytes
('Content' が少なくとも1つの UTF-16 文字を使うと仮定し、'Stretch Axis' を1ビット、'Form' を2ビット、'rspace' と 'space' の組み合わせを少なくとも3ビット、プロパティの組み合わせを3ビットとすると)

B.3 結合文字の同等性

この節は非規範的です。

次の表は、MathML のアクセント構成で使用される場合の、空白を取る文字(spacing)と結合文字(non-spacing)の間の対応を示します。

結合 (Combining)

非結合 (Non Combining) スタイル 結合 (Combining)
U+002B プラス記号 U+031F 結合プラス記号(下付き)
U+002D ハイフンマイナス U+0305 結合オーバーライン
U+002D ハイフンマイナス U+0320 結合マイナス記号(下付き)
U+002D ハイフンマイナス U+0332 結合ローライン
U+002E ピリオド(full stop) U+0307 結合ドット(上付き)
U+002E ピリオド(full stop) U+0323 結合ドット(下付き)
U+005E サーカムフレックス(circumflex accent) U+0302 結合サーカムフレックス
U+005E サーカムフレックス(circumflex accent) U+032D 結合サーカムフレックス(下付き)
U+005F 下線(low line) U+0332 結合ローライン
U+0060 グレイヴアクセント(grave accent) U+0300 結合グレイヴアクセント
U+0060 グレイヴアクセント(grave accent) U+0316 結合グレイヴアクセント(下付き)
U+007E チルダ(tilde) U+0303 結合チルダ
U+007E チルダ(tilde) U+0330 結合チルダ(下付き)
U+00A8 ダイアレシス(diaeresis) U+0308 結合ダイアレシス
U+00A8 ダイアレシス(diaeresis) U+0324 結合ダイアレシス(下付き)
U+00AF マクロン(macron) U+0304 結合マクロン
U+00AF マクロン(macron) U+0305 結合オーバーライン
U+00B4 アキュートアクセント(acute accent) U+0301 結合アキュートアクセント
U+00B4 アキュートアクセント(acute accent) U+0317 結合アキュートアクセント(下付き)
U+00B8 セディーユ(cedilla) U+0327 結合セディーユ
U+02C6 修飾字サーカムフレックス(modifier letter circumflex accent) U+0302 結合サーカムフレックス
U+02C7 カーロン(caron) U+030C 結合カーロン
U+02C7 カーロン(caron) U+032C 結合カーロン(下付き)
U+02D8 ブレーヴ(breve) U+0306 結合ブレーヴ
U+02D8 ブレーヴ(breve) U+032E 結合ブレーヴ(下付き)
U+02D9 上点(dot above) U+0307 結合ドット(上付き)
U+02D9 上点(dot above) U+0323 結合ドット(下付き)
U+02DB オゴネク(ogonek) U+0328 結合オゴネク
U+02DC 小チルダ(small tilde) U+0303 結合チルダ
U+02DC 小チルダ(small tilde) U+0330 結合チルダ(下付き)
U+02DD 二重アキュート(double acute accent) U+030B 結合二重アキュート
U+203E オーバーライン(overline) U+0305 結合オーバーライン
U+2190 左向き矢印(leftwards arrow) U+20D6
U+2192 右向き矢印(rightwards arrow) U+20D7 結合右矢印(上付き)
U+2192 右向き矢印(rightwards arrow) U+20EF 結合右矢印(下付き)
U+2212 マイナス記号(minus sign) U+0305 結合オーバーライン
U+2212 マイナス記号(minus sign) U+0332 結合ローライン
U+27F6 長い右向き矢印(long rightwards arrow) U+20D7 結合右矢印(上付き)
U+27F6 長い右向き矢印(long rightwards arrow) U+20EF 結合右矢印(下付き)

非結合 (Non Combining)

結合 (Combining) スタイル 非結合 (Non Combining)
U+0300 結合グレイヴアクセント U+0060 グレイヴアクセント
U+0301 結合アキュートアクセント U+00B4 アキュートアクセント
U+0302 結合サーカムフレックス U+005E サーカムフレックス
U+0302 結合サーカムフレックス U+02C6 修飾字サーカムフレックス
U+0303 結合チルダ U+007E チルダ
U+0303 結合チルダ U+02DC 小チルダ
U+0304 結合マクロン U+00AF マクロン
U+0305 結合オーバーライン U+002D ハイフンマイナス
U+0305 結合オーバーライン U+00AF マクロン
U+0305 結合オーバーライン U+203E オーバーライン
U+0305 結合オーバーライン U+2212 マイナス記号
U+0306 結合ブレーヴ U+02D8 ブレーヴ
U+0307 結合ドット(上付き) U+02E
U+0307 結合ドット(上付き) U+002E ピリオド(full stop)
U+0307 結合ドット(上付き) U+02D9 上点(dot above)
U+0308 結合ダイアレシス U+00A8 ダイアレシス
U+030B 結合二重アキュート U+02DD 二重アキュート
U+030C 結合カーロン U+02C7 カーロン
U+0312 結合反転カンマ上 U+0B8
U+0316 結合グレイヴアクセント(下付き) U+0060 グレイヴアクセント
U+0317 結合アキュートアクセント(下付き) U+00B4 アキュートアクセント
U+031F 結合プラス記号(下付き) U+002B プラス記号
U+0320 結合マイナス記号(下付き) U+002D ハイフンマイナス
U+0323 結合ドット(下付き) U+002E ピリオド(full stop)
U+0323 結合ドット(下付き) U+02D9 上点(dot above)
U+0324 結合ダイアレシス(下付き) U+00A8 ダイアレシス
U+0327 結合セディーユ(下付き) U+00B8 セディーユ
U+0328 結合オゴネク(下付き) U+02DB オゴネク
U+032C 結合カーロン(下付き) U+02C7 カーロン
U+032D 結合サーカムフレックス(下付き) U+005E サーカムフレックス
U+032E 結合ブレーヴ(下付き) U+02D8 ブレーヴ
U+0330 結合チルダ(下付き) U+007E チルダ
U+0330 結合チルダ(下付き) U+02DC 小チルダ
U+0332 結合ローライン(下付き) U+002D ハイフンマイナス
U+0332 結合ローライン(下付き) U+005F 下線(low line)
U+0332 結合ローライン(下付き) U+2212 マイナス記号
U+0338 結合ロングソリダスオーバーレイ over U+02F
U+20D7 結合右矢印(上付き) U+2192 右向き矢印
U+20D7 結合右矢印(上付き) U+27F6 長い右向き矢印
U+20EF 結合右矢印(下付き) U+2192 右向き矢印
U+20EF 結合右矢印(下付き) U+27F6 長い右向き矢印

B.4 Unicodeベースのグリフアセンブリ

この節は非規範的です。

次の表は、フォントに MATH.MathVariants テーブルが存在しない場合に、ユーザーエージェントが特定の 基底文字 を伸長するために使用できるフォールバックを提供する。 5.3 演算子のサイズバリアント(MathVariants のアルゴリズムは同様に機能するが、いくつか調整がある:

基底文字 グリフ構築 エクステンダ文字 下/左 文字 中間文字 上/右 文字
U+0028 ( U+239C ⎜ U+239D ⎝ N/A U+239B ⎛
U+0029 ) U+239F ⎟ U+23A0 ⎠ N/A U+239E ⎞
U+003D = U+003D = U+003D = N/A N/A
U+005B [ U+23A2 ⎢ U+23A3 ⎣ N/A U+23A1 ⎡
U+005D ] U+23A5 ⎥ U+23A6 ⎦ N/A U+23A4 ⎤
U+005F _ U+005F _ U+005F _ N/A N/A
U+007B { U+23AA ⎪ U+23A9 ⎩ U+23A8 ⎨ U+23A7 ⎧
U+007C | U+007C | U+007C | N/A N/A
U+007D } U+23AA ⎪ U+23AD ⎭ U+23AC ⎬ U+23AB ⎫
U+00AF ¯ U+00AF ¯ U+00AF ¯ N/A N/A
U+2016 ‖ U+2016 ‖ U+2016 ‖ N/A N/A
U+203E ‾ U+203E ‾ U+203E ‾ N/A N/A
U+2190 ← U+23AF ⎯ U+2190 ← N/A U+23AF ⎯
U+2191 ↑ U+23D0 ⏐ U+23D0 ⏐ N/A U+2191 ↑
U+2192 → U+23AF ⎯ U+23AF ⎯ N/A U+2192 →
U+2193 ↓ U+23D0 ⏐ U+2193 ↓ N/A U+23D0 ⏐
U+2194 ↔ U+23AF ⎯ U+2190 ← N/A U+2192 →
U+2195 ↕ U+23D0 ⏐ U+2193 ↓ N/A U+2191 ↑
U+21A4 ↤ U+23AF ⎯ U+2190 ← N/A U+22A3 ⊣
U+21A6 ↦ U+23AF ⎯ U+22A2 ⊢ N/A U+2192 →
U+21BC ↼ U+23AF ⎯ U+21BC ↼ N/A U+23AF ⎯
U+21BD ↽ U+23AF ⎯ U+21BD ↽ N/A U+23AF ⎯
U+21C0 ⇀ U+23AF ⎯ U+23AF ⎯ N/A U+21C0 ⇀
U+21C1 ⇁ U+23AF ⎯ U+23AF ⎯ N/A U+21C1 ⇁
U+2223 ∣ U+2223 ∣ U+2223 ∣ N/A N/A
U+2225 ∥ U+2225 ∥ U+2225 ∥ N/A N/A
U+2308 ⌈ U+23A2 ⎢ U+23A2 ⎢ N/A U+23A1 ⎡
U+2309 ⌉ U+23A5 ⎥ U+23A5 ⎥ N/A U+23A4 ⎤
U+230A ⌊ U+23A2 ⎢ U+23A3 ⎣ N/A N/A
U+230B ⌋ U+23A5 ⎥ U+23A6 ⎦ N/A N/A
U+23B0 ⎰ U+23AA ⎪ U+23AD ⎭ N/A U+23A7 ⎧
U+23B1 ⎱ U+23AA ⎪ U+23A9 ⎩ N/A U+23AB ⎫
U+27F5 ⟵ U+23AF ⎯ U+2190 ← N/A U+23AF ⎯
U+27F6 ⟶ U+23AF ⎯ U+23AF ⎯ N/A U+2192 →
U+27F7 ⟷ U+23AF ⎯ U+2190 ← N/A U+2192 →
U+294E ⥎ U+23AF ⎯ U+21BC ↼ N/A U+21C0 ⇀
U+2950 ⥐ U+23AF ⎯ U+21BD ↽ N/A U+21C1 ⇁
U+295A ⥚ U+23AF ⎯ U+21BC ↼ N/A U+22A3 ⊣
U+295B ⥛ U+23AF ⎯ U+22A2 ⊢ N/A U+21C0 ⇀
U+295E ⥞ U+23AF ⎯ U+21BD ↽ N/A U+22A3 ⊣
U+295F ⥟ U+23AF ⎯ U+22A2 ⊢ N/A U+21C1 ⇁

C. 数学的英数字記号

この節は非規範的です。

[xml-entity-names] に詳述されている通り、太字、イタリック、フラクチュール、等幅、ダブルストラック等の形式を持つ数学的英数字記号は Unicode に用意されています。

これらの英数字記号には Unicode のコードポイントを使ってアクセスすべきです。MATHEMATICAL SCRIPT 文字については Chancery と Roundhand の書体を区別する必要が生じることがあります。これらは LaTeX の \mathcal\mathscr コマンドで特に使われます。その方法の一つとして、特定のグリフバリアントを選択する手段を説明する Unicode の第23章第4節 Variation Selectors を利用することが挙げられます[UNICODE]。実際、Unicode Character Database の StandardizedVariants.txt ファイルは、大文字のスクリプトに対してバリアントセレクタ U+FE00 と U+FE01 をそれぞれ Chancery と Roundhand を指定するために使用できることを示しています。

Alternatively, some mathematical fonts rely on salt or ssXY properties from [OPEN-FONT-FORMAT] to provide both styles. Page authors may use the font-variant-alternates property with corresponding OpenType font features to access these glyphs.

さらに、上記の方法でアクセスできるイタリック体の数学用英数字文字は、デフォルトで単一文字の <mi> 要素に適用される CSS の text-transform: math-auto 変換を用いても利用できます。便宜上、math italic へのマッピングを下に示します。

C.1 italic マッピング

元の文字 italic Δコードポイント
A U+0041 𝐴 U+1D434 1D3F3
B U+0042 𝐵 U+1D435 1D3F3
C U+0043 𝐶 U+1D436 1D3F3
D U+0044 𝐷 U+1D437 1D3F3
E U+0045 𝐸 U+1D438 1D3F3
F U+0046 𝐹 U+1D439 1D3F3
G U+0047 𝐺 U+1D43A 1D3F3
H U+0048 𝐻 U+1D43B 1D3F3
I U+0049 𝐼 U+1D43C 1D3F3
J U+004A 𝐽 U+1D43D 1D3F3
K U+004B 𝐾 U+1D43E 1D3F3
L U+004C 𝐿 U+1D43F 1D3F3
M U+004D 𝑀 U+1D440 1D3F3
N U+004E 𝑁 U+1D441 1D3F3
O U+004F 𝑂 U+1D442 1D3F3
P U+0050 𝑃 U+1D443 1D3F3
Q U+0051 𝑄 U+1D444 1D3F3
R U+0052 𝑅 U+1D445 1D3F3
S U+0053 𝑆 U+1D446 1D3F3
T U+0054 𝑇 U+1D447 1D3F3
U U+0055 𝑈 U+1D448 1D3F3
V U+0056 𝑉 U+1D449 1D3F3
W U+0057 𝑊 U+1D44A 1D3F3
X U+0058 𝑋 U+1D44B 1D3F3
Y U+0059 𝑌 U+1D44C 1D3F3
Z U+005A 𝑍 U+1D44D 1D3F3
a U+0061 𝑎 U+1D44E 1D3ED
b U+0062 𝑏 U+1D44F 1D3ED
c U+0063 𝑐 U+1D450 1D3ED
d U+0064 𝑑 U+1D451 1D3ED
e U+0065 𝑒 U+1D452 1D3ED
f U+0066 𝑓 U+1D453 1D3ED
g U+0067 𝑔 U+1D454 1D3ED
h U+0068 ℎ U+0210E 20A6
i U+0069 𝑖 U+1D456 1D3ED
j U+006A 𝑗 U+1D457 1D3ED
k U+006B 𝑘 U+1D458 1D3ED
l U+006C 𝑙 U+1D459 1D3ED
m U+006D 𝑚 U+1D45A 1D3ED
n U+006E 𝑛 U+1D45B 1D3ED
o U+006F 𝑜 U+1D45C 1D3ED
p U+0070 𝑝 U+1D45D 1D3ED
q U+0071 𝑞 U+1D45E 1D3ED
r U+0072 𝑟 U+1D45F 1D3ED
s U+0073 𝑠 U+1D460 1D3ED
t U+0074 𝑡 U+1D461 1D3ED
u U+0075 𝑢 U+1D462 1D3ED
v U+0076 𝑣 U+1D463 1D3ED
w U+0077 𝑤 U+1D464 1D3ED
x U+0078 𝑥 U+1D465 1D3ED
y U+0079 𝑦 U+1D466 1D3ED
z U+007A 𝑧 U+1D467 1D3ED
ı U+0131 𝚤 U+1D6A4 1D573
ȷ U+0237 𝚥 U+1D6A5 1D46E
Α U+0391 𝛢 U+1D6E2 1D351
Β U+0392 𝛣 U+1D6E3 1D351
Γ U+0393 𝛤 U+1D6E4 1D351
Δ U+0394 𝛥 U+1D6E5 1D351
Ε U+0395 𝛦 U+1D6E6 1D351
Ζ U+0396 𝛧 U+1D6E7 1D351
Η U+0397 𝛨 U+1D6E8 1D351
Θ U+0398 𝛩 U+1D6E9 1D351
Ι U+0399 𝛪 U+1D6EA 1D351
Κ U+039A 𝛫 U+1D6EB 1D351
Λ U+039B 𝛬 U+1D6EC 1D351
Μ U+039C 𝛭 U+1D6ED 1D351
Ν U+039D 𝛮 U+1D6EE 1D351
Ξ U+039E 𝛯 U+1D6EF 1D351
Ο U+039F 𝛰 U+1D6F0 1D351
Π U+03A0 𝛱 U+1D6F1 1D351
Ρ U+03A1 𝛲 U+1D6F2 1D351
ϴ U+03F4 𝛳 U+1D6F3 1D2FF
Σ U+03A3 𝛴 U+1D6F4 1D351
Τ U+03A4 𝛵 U+1D6F5 1D351
Υ U+03A5 𝛶 U+1D6F6 1D351
Φ U+03A6 𝛷 U+1D6F7 1D351
Χ U+03A7 𝛸 U+1D6F8 1D351
Ψ U+03A8 𝛹 U+1D6F9 1D351
Ω U+03A9 𝛺 U+1D6FA 1D351
∇ U+2207 𝛻 U+1D6FB 1B4F4
α U+03B1 𝛼 U+1D6FC 1D34B
β U+03B2 𝛽 U+1D6FD 1D34B
γ U+03B3 𝛾 U+1D6FE 1D34B
δ U+03B4 𝛿 U+1D6FF 1D34B
ε U+03B5 𝜀 U+1D700 1D34B
ζ U+03B6 𝜁 U+1D701 1D34B
η U+03B7 𝜂 U+1D702 1D34B
θ U+03B8 𝜃 U+1D703 1D34B
ι U+03B9 𝜄 U+1D704 1D34B
κ U+03BA 𝜅 U+1D705 1D34B
λ U+03BB 𝜆 U+1D706 1D34B
μ U+03BC 𝜇 U+1D707 1D34B
ν U+03BD 𝜈 U+1D708 1D34B
ξ U+03BE 𝜉 U+1D709 1D34B
ο U+03BF 𝜊 U+1D70A 1D34B
π U+03C0 𝜋 U+1D70B 1D34B
ρ U+03C1 𝜌 U+1D70C 1D34B
ς U+03C2 𝜍 U+1D70D 1D34B
σ U+03C3 𝜎 U+1D70E 1D34B
τ U+03C4 𝜏 U+1D70F 1D34B
υ U+03C5 𝜐 U+1D710 1D34B
φ U+03C6 𝜑 U+1D711 1D34B
χ U+03C7 𝜒 U+1D712 1D34B
ψ U+03C8 𝜓 U+1D713 1D34B
ω U+03C9 𝜔 U+1D714 1D34B
∂ U+2202 𝜕 U+1D715 1B513
ϵ U+03F5 𝜖 U+1D716 1D321
ϑ U+03D1 𝜗 U+1D717 1D346
ϰ U+03F0 𝜘 U+1D718 1D328
ϕ U+03D5 𝜙 U+1D719 1D344
ϱ U+03F1 𝜚 U+1D71A 1D329
ϖ U+03D6 𝜛 U+1D71B 1D345

D. 謝辞

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

MathML CoreはMathML3をベースとしている。 付録 E [MathML3] で その仕様に貢献した人々のリストを見ることができる。

MathML Coreは当初MathML Community Groupによって開発され、 その後Math Working Groupが引き継いだ。本仕様の策定期間中、 MathML Core会合に定期的に参加したWorking GroupやCommunity Groupのメンバーは以下のとおり: Brian Kardell、 Bruce Miller、 Daniel Marques、 David Carlisle、 David Farmer、 Deyan Ginev、 Frédéric Wang、 Louis Mahler、 Moritz Schubotz、 Murray Sargent、 Neil Soiffer、 Patrick Ion、 Rob Buis、 Steve Noble、 Sam Dooley。

さらに編集作業で Brian Kardell、 Neil Soiffer、 Rob Buis 各氏に特に感謝したい。

テストスイート作成にも大変多くの方々にご協力頂いた: Brian Kardell、 Frédéric Wang、 Neil Soiffer、 Rob Buis。 いくつかのテストはブラウザリポジトリのMathMLテストをもとにしており、 MozillaとWebKitのコントリビュータにも感謝する。

また、公開コミュニケーションチャネルで貴重なご意見・フィードバックをくださった André Greiner-Petter、 Anne van Kesteren、 Boris Zbarsky、 Brian Smith、 Elika Etemad、 Emilio Cobos Álvarez、 ExE Boss、 Ian Kilpatrick、 Koji Ishii、 L. David Baron、 Michael Kohlhase、 Michael Smith、 Ryosuke Niwa、 Sergey Malkin、 Tab Atkins Jr., Viktor Yaffle、 frankvel 各氏にも感謝します。

E. セキュリティの考慮事項

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

本仕様は 2.1.3 グローバル属性 で述べたMathMLイベントハンドラ属性を通じてスクリプト実行機構を追加している。UAはHTMLやSVG要素と同様の セキュリティ制限を適用し、これら属性中のスクリプト実行を抑止してもよい。

[MathML3] では、 hrefxlink:href 属性により任意要素をリンク可能であり、 URLを信頼できないリソースや javascript: 実行へも向けられた。 これら属性はMathML Coreには存在しない。 ただし 2.2.1 HTMLとSVG で述べたように MathML内にHTMLやSVGコンテンツ(HTMLやSVGリンクを含む)を埋め込むことは可能である。

[MathML3] では、 maction 要素の actiontype"statusline" を指定することでブラウザのステータスラインを上書き可能だった。 これにより攻撃者が安全でないリンクのURLテキスト表示を隠蔽できた。

<math>
  <maction actiontype="statusline">
    <mtext><a href="javascript:alert('JS execution')">Click me!</a></mtext>
    <mtext>./this-is-a-safe-link.html</mtext>
  </maction>
</math>

この機能はMathML Coreでは廃止されており、 maction 要素は本質的に mrow コンテナ+追加スタイル挙動になる。

攻撃者は非常に大きなストレッチ演算子を挿入してUAをフリーズさせようとするおそれがある。 これは glyph assembly shaping アルゴリズムに 極端多数のグリフ処理を強いるためである。UAは rminGlyphAssembly.partCount に上限を設けてこれを緩和できる。

CSS Fonts Module で述べたように 攻撃者は不正・悪意のあるフォントを使いブラウザ実装の脆弱性を突くおそれがある。 本仕様では OpenType MATH table の利用範囲が広いため、UAはこのテーブルもフォントサニタイザで適切に扱うべき。

最後に、攻撃面縮小のため一部UAは Webプラットフォームの一部無効化オプションも備える。MathMLレイアウトを無効にするには DOMツリーの要素をHTML名前空間に強制し 4. 数式レイアウト用CSS拡張 を無効にすればよい。

F. プライバシーの考慮事項

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

2.2.1 HTMLとSVG で説明したように、 MathMLは <foreignObject> 要素を通じてSVG画像内に埋め込むことができ、これは canvas 要素でも利用できる。 UAは、潜在的 情報漏えい 防止のためにcanvasを汚染(taint)したり、JavaScript API経由のcanvas内容取得時に "SecurityError" を返す等の施策を選択できる。

下記例はcanvas画像にMathML内容+HTMLリンク(https://example.org/)を含めた場合である。 攻撃者がピクセルを context.getImageData() 経由で読んでも、そのリンクが既訪問かどうか判定できてはならない。 MathML内リンクについては E. セキュリティの考慮事項 も参照。

let svg = `
  <svg xmlns="http://www.w3.org/2000/svg" width="100px" height="100px">
    <foreignObject width="100" height="100"
                   requiredExtensions="http://www.w3.org/1998/Math/MathML">
      <math xmlns="http://www.w3.org/1998/Math/MathML">
        <msqrt style="font-size: 25px">
          <mtext>&#x25a0;</mtext>
          <mtext><a href="https://example.org/">&#x25a0;</a></mtext>
        </msqrt>
      </math>
    </foreignObject>
  </svg>`;
let image = new Image();
image.width = 100;
image.height = 100;
image.onload = () => {
  let canvas = document.createElement('canvas');
  canvas.width = 100;
  canvas.height = 100;
  canvas.style = "border: 1px solid black";
  document.body.appendChild(canvas);
  let context = canvas.getContext("2d");
  context.drawImage(image, 0, 0);
};
image.src = `data:image/svg+xml;base64,${window.btoa(svg)}`;

本仕様はDOM 要素のレイアウトを記述し、これにシステムフォントが関与しうる。HTML/CSSレイアウト同様、 JavaScript API(例: context.getImageData()getBoundingClientRect() など) でボックス寸法・位置を測定し、システムフォント情報を間接推定できる。 上記のような計測試験と一般的な既知フォント比較で、攻撃者がユーザーのデフォルトフォントを推定可能である。

以下の HTML+CSS+JavaScript ドキュメントは、特異なメトリクスを持つWebフォントを利用し既定システムフォント A Well Known System Font が存在するかどうかを判定しようとする。

<style>
  @font-face {
    font-family: MyWebFontWithVeryWideGlyphs;
    src: url("/fonts/my-web-fonts-with-very-wide-glyphs.woff");
  }
  #container {
    font-family: AWellKnownSystemFont, MyWebFontWithVeryWideGlyphs;
  }
</style>
<div id="container">SOMETEXT</div>
<div id="reference">SOMETEXT</div>
<script>
document.fonts.ready.then(() => {
  let containerWidth =
    document.getElementById("container").getBoundingClientRect().width;
  let referenceWidth =
    document.getElementById("reference").getBoundingClientRect().width;
  let isWellKnownSystemFontAvailable =
    Math.abs(containerWidth - referenceWidth) < 1;
});
</script>

次の HTML+CSS+JavaScript ドキュメントは UI serif フォントがアジア系グリフを持つかどうかを判定しようとする:

<style>
  @font-face {
    font-family: MyWebFontWithVeryWideAsianGlyphs;
    src: url("/fonts/my-web-fonts-with-very-wide-asian-glyphs.woff");
  }
  #container {
    font-family: ui-serif, MyWebFontWithVeryWideAsianGlyphs
  }
  #reference {
    font-family: MyWebFontWithVeryWideAsianGlyphs;
  }
</style>
<div id="container"></div>
<div id="reference"></div>
<script>
document.fonts.ready.then(() => {
  let containerWidth =
    document.getElementById("container").getBoundingClientRect().width;
  let referenceWidth =
    document.getElementById("reference").getBoundingClientRect().width;
  let uiSerifFontDoesNotContainAsianGlyph =
    Math.abs(containerWidth - referenceWidth) < 1;
});
</script>

以下は同一テキストを text-decoration-thicknessfrom-font1em (ここでは100ピクセル)で描画し、高さ比較から PostScript Table の underlineThickness 値近似を求める手法例である [OPEN-FONT-FORMAT]。

<style>
  #test {
    font-size: 100px;
  }
  #container {
    text-decoration-line: underline;
    text-decoration-thickness: from-font;
  }
  #reference {
    text-decoration-line: underline;
    text-decoration-thickness: 1em;
  }
</style>
<div id="test">
  <div id="container">SOMETEXT</div>
  <div id="reference">SOMETEXT</div>
</div>

本仕様は 5. OpenType MATH table の情報を使いMathML内容を描画する。 MathConstants および MathGlyphInfoの多くのレイアウトパラメータは 上述のような計測法でよい近似値を得られる。 MathVariants テーブルの利用もストレッチ演算子のサイズ違いを canvasに描画するなどで判定できる。

これらのパラメータ自体は個人情報でないが、 本仕様の実装によりフォント情報露出が増え、攻撃者がフィンガープリント技術を用いる危険も高まる。 一般に、利用可能・好みの数学フォント特定などが可能となる。

G. 適合性

適合要件は記述的な断定およびRFC 2119用語を組み合わせて表現している。規範テキストの中のキーワード “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL” はRFC 2119に従って解釈する。 ただし読みやすさのため本仕様ではこれら語句は全大文字にはなっていない。

本仕様の文章は特に非規範的と明示されている節、例、注記を除き全て規範的である。 [RFC2119]

本仕様の例は「for example」や class="example" 指定で区別され、例えば以下のように示す:

これは情報提供目的の例です。

補足的な注記は“Note”という語で始まり、 class="note"で区別される。例えば次の通り:

Note

Note, これは情報提供目的の注記です。

勧告(advisement)は他規範テキストから目立つように <strong class="advisement"> でマークアップされ、例えば次のようになる: UAは MUST アクセシブルな代替手段を提供しなければならない。

H. 参考文献

H.1 規範的参考文献

[CSS-CASCADE-4]
CSS Cascading and Inheritance Level 4. Elika Etemad; Tab Atkins Jr. W3C. 13 January 2022. W3C Candidate Recommendation. URL: https://www.w3.org/TR/css-cascade-4/
[CSS-DISPLAY-3]
CSS Display Module Level 3. Elika Etemad; Tab Atkins Jr. W3C. 30 March 2023. W3C Candidate Recommendation. URL: https://www.w3.org/TR/css-display-3/
[CSS-POSITION-3]
CSS Positioned Layout Module Level 3. Elika Etemad; Tab Atkins Jr. W3C. 11 March 2025. W3C Working Draft. URL: https://www.w3.org/TR/css-position-3/
[CSS-TEXT-4]
CSS Text Module Level 4. Elika Etemad; Koji Ishii; Alan Stearns; Florian Rivoal. W3C. 29 May 2024. W3C Working Draft. URL: https://www.w3.org/TR/css-text-4/
[CSS-VALUES-4]
CSS Values and Units Module Level 4. Tab Atkins Jr.; Elika Etemad. W3C. 12 March 2024. W3C Working Draft. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-4]
CSS Writing Modes Level 4. Elika Etemad; Koji Ishii. W3C. 30 July 2019. W3C Candidate Recommendation. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. Bert Bos; Tantek Çelik; Ian Hickson; Håkon Wium Lie. W3C. 7 June 2011. W3C Recommendation. URL: https://www.w3.org/TR/CSS2/
[DOM]
DOM Standard. Anne van Kesteren. WHATWG. Living Standard. URL: https://dom.spec.whatwg.org/
[HTML]
HTML Standard. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[OPEN-FONT-FORMAT]
Information technology — Coding of audio-visual objects — Part 22: Open Font Format. ISO/IEC. January 2019. Published. URL: https://www.iso.org/standard/74461.html
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[SELECT]
Selectors Level 3. Tantek Çelik; Elika Etemad; Daniel Glazman; Ian Hickson; Peter Linss; John Williams. W3C. 6 November 2018. W3C Recommendation. URL: https://www.w3.org/TR/selectors-3/
[SVG]
Scalable Vector Graphics (SVG) 1.0 Specification. Jon Ferraiolo. W3C. 4 September 2001. W3C Recommendation. URL: https://www.w3.org/TR/SVG/

H.2 参考情報的参考文献

[CSS-FONTS-4]
CSS Fonts Module Level 4. Chris Lilley. W3C. 1 February 2024. W3C Working Draft. URL: https://www.w3.org/TR/css-fonts-4/
[CSS-LAYOUT-API-1]
CSS Layout API Level 1. Greg Whitworth; Ian Kilpatrick; Tab Atkins Jr.; Shane Stephens; Robert O'Callahan; Rossen Atanassov. W3C. 12 April 2018. FPWD. URL: https://www.w3.org/TR/css-layout-api-1/
[HOUDINI]
CSS-TAG Houdini Editor Drafts. URL: https://drafts.css-houdini.org/
[MATHML3]
Mathematical Markup Language (MathML) Version 3.0 2nd Edition. David Carlisle; Patrick D F Ion; Robert R Miner. W3C. 10 April 2014. W3C Recommendation. URL: https://www.w3.org/TR/MathML3/
[MATHML4]
Mathematical Markup Language (MathML) Version 4.0. David Carlisle et al.W3C Editor's Draft. URL: https://w3c.github.io/mathml/
[OPEN-TYPE-MATH-ILLUMINATED]
OpenType Math Illuminated. Ulrik Vieth. 2009. URL: https://www.tug.org/TUGboat/tb30-1/tb94vieth.pdf
[OPEN-TYPE-MATH-IN-HARFBUZZ]
OpenType MATH in HarfBuzz. Frédéric Wang. URL: https://frederic-wang.fr/2016/04/16/opentype-math-in-harfbuzz/
[TEXBOOK]
The TeXBook. Knuth, Donald E. Addison-Wesley Professional. 1984.
[UNICODE]
The Unicode Standard. Unicode Consortium. URL: https://www.unicode.org/versions/latest/
[webidl]
Web IDL Standard. Edgar Chen; Timothy Gu. WHATWG. Living Standard. URL: https://webidl.spec.whatwg.org/
[xml-entity-names]
XML Entity Definitions for Characters (3rd Edition). Patrick D F Ion; David Carlisle. W3C. 7 March 2023. W3C Recommendation. URL: https://www.w3.org/TR/xml-entity-names/