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 (拉取请求, 新建议题, 开放议题)

摘要

本规范定义了数学标记 语言(即 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] 规范存在若干缺点,使其难以 在各个 Web 渲染引擎中一致地实现,也难以 使用用户定义的构造进行扩展,例如:

本 MathML Core 规范旨在通过 尽可能准确地规定数学公式的视觉渲染来解决这些问题, 其中采用了 TeXBook 附录 G 中的附加规则 [TEXBOOK] 以及 Open Font Format [OPEN-FONT-FORMAT]、 [OPEN-TYPE-MATH-ILLUMINATED] 中的规则。它还依赖现代 浏览器 实现和 Web 技术 [HTML] [SVG] [CSS2] [DOM], 并在需要时阐明 与它们的交互,或引入新的底层原语以 改善 Web 平台的分层。

MathML3 中不太适合此框架或较不 基础的部分已被省略。它们改为在 一份独立且更庞大的 [MATHML4] 规范中描述。关于哪些 数学功能将包含在 MathML Core 的未来版本中,或者 通过 polyfill 实现,目前仍未确定。这个问题以及其他 潜在改进正在 GitHub 上 跟踪。

通过提高实现细节的程度、聚焦于一个 可行的子集、遵循浏览器驱动的设计并依赖 自动化 Web 平台测试,本规范有望 大幅改善 MathML 的互操作性。此外,MathML 分层方面的工作将使用户能够使用 影子树、 自定义元素或 [HOUDINI] 中的 API 来实现 MathML 4 规范的其余部分,或者更一般地扩展 MathML Core。

2. MathML 基础

2.1 元素和属性

术语 MathML 元素是指 MathML 命名空间中的任何元素。 本规范中定义的 MathML 元素称为 MathML Core 元素,并列于下方。 任何未列于下方的 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 规定了一个顶层或根 math 元素,它封装文档中的每个 MathML 标记实例。所有其他 MathML 内容 都必须包含在 <math> 元素中。

<math> 元素接受 2.1.3 全局属性中描述的属性, 以及 以下属性:

display 属性如果存在, 则必须 不区分 ASCII 大小写地 匹配 block 或 inline。 A. 用户 代理样式表中描述的用户代理样式表 包含针对该属性的规则,这些规则会影响 display (block math 或 inline math) 和 math-style (normal 或 compact)属性的默认值。 如果 display 属性缺失或具有无效值,用户代理 样式表会将其视为与 inline 相同。

本规范未定义任何 alttext 属性特有的可观察行为。

注
某些不实现数学布局的旧版系统 可能会将 alttext 属性用作 替代文本。

如果 <math> 元素的计算 display 属性不等于 block math 或 inline math, 则按照描述相应值的 CSS 规范 对其进行布局。 否则,使用 mrow 元素的布局算法生成 数学内容盒。该数学内容 盒用作元素布局的内容, 如 CSS 中针对 display: block (如果计算值为 block math)或 display: inline (如果计算值为 inline math)所述。 此外,如果计算 display 属性等于 block math,则该数学内容盒会在内容盒内 水平居中渲染。

注
TEX 的显示模式 $$...$$ 和行内模式 $...$分别对应于 display="block" 和 display="inline"。

在以下示例中,一个 math 公式 以显示模式在新行中渲染并占据全部宽度, 数学内容在容器内居中:

<div style="width: 15em;">
  这个数学公式包含一个大求和符号和圆周率
  <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>
  很容易证明。
</div>
数学示例(显示模式)

作为比较,同一个公式在 行内模式下将如下所示。公式嵌入文本段落中, 不强制换行。 mrow 布局算法指定的基线 用于垂直 对齐。请注意, 求和符号、等号以及分数的中部都会对齐, 但不会与周围 文本的字母基线对齐。

数学示例(行内模式)

由于良好的数学渲染需要使用数学 字体,因此 用户代理样式表 应当将 <math> 元素上的 font-family 设置为 math 值,而不是让它继承。 此外,可以在父容器上设置的若干 CSS 属性,例如 font-style、font-weight、 direction 或 text-indent 等, 不应应用于数学公式,因此 用户代理样式表 包含默认重置这些属性的规则。

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 特有类型:

无符号整数
一个 <integer> 值,如 [CSS-VALUES-4] 中所定义,其第一个 字符既不是 U+002D 连字符减号字符 (-),也不是 U+002B 加号 (+)。
布尔值
一个 不区分 ASCII 大小写地 匹配 true 或 false 的字符串。

2.1.3 全局属性

以下属性为所有 MathML 元素所共有,并可在所有 MathML 元素上指定:

2.1.4 HTML 和 MathML 元素共有的属性

id、 class、 style、 data-*、 autofocus、 nonce 和 tabindex 属性具有与 HTML 元素上的 id、 class、 style、 data-*、 autofocus、 nonce 和 tabindex 属性所定义的相同语法和语义。

dir 属性如果存在, 则必须 不区分 ASCII 大小写地匹配 ltr 或 rtl。 在这种情况下,用户代理应当将该属性视为 表现提示,把元素的 direction 属性设置为相应值。 更准确地说, 不区分 ASCII 大小写地匹配 rtl 会映射到 rtl,而 不区分 ASCII 大小写地匹配 ltr 会映射到 ltr。

注
dir 属性用于设置数学 公式的方向性,在阿拉伯语世界中通常为 rtl。 然而,从右向左书写的语言通常会嵌入 从左向右书写的数学内容,因此 用户代理样式表会在 math 元素上相应地重置 direction 属性。

在以下示例中,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 示例

所有 MathML 元素都支持事件处理器内容属性, 如 HTML 中事件处理器内容属性所述。

HTML 中 注明为所有 HTMLElement 所支持的 所有事件处理器内容属性 同样受所有 MathML 元素支持,如 MathMLElement IDL 中所定义。

2.1.5 旧版 MathML 样式 属性

mathcolor 和 mathbackground 属性如果存在,则其 值必须为 <color>。 在这种情况下,用户代理应当将这些属性视为 表现提示,将元素的 color 和 background-color 属性设置为相应值。 mathcolor 属性描述 MathML 文本、横线等的前景填充 颜色,而 mathbackground 属性描述元素的背景颜色。

mathsize 属性如果存在,则其 值必须是有效的 <length-percentage>。 在这种情况下,用户代理应当将该属性视为 表现提示,将元素的 font-size 属性设置为相应值。 mathsize 属性表示数学公式中字形所需的高度, 同时也会相应缩放其他部分(间距、偏移、 横线粗细等)。

注
实现上述属性是为了与完整 MathML 保持兼容。仅以 MathML Core 为目标的作者应使用 CSS 进行样式设置。

2.1.6 displaystyle 和 scriptlevel 属性

displaystyle 属性如果存在,其值必须为布尔值。 在这种情况下,用户代理应当将该属性视为 表现提示,将元素的 math-style 属性设置为相应值。 更准确地说, 不区分 ASCII 大小写地匹配 true 会映射到 normal,而 不区分 ASCII 大小写地匹配 false 会映射到 compact。 此属性表示公式是否应尝试最小化 逻辑高度(值为 false)或不这样做 (值为 true),例如通过更改内容大小或 标记的布局。

scriptlevel 属性如果存在,则其值必须为 +<U>、-<U> 或 <U>, 其中 <U> 是 无符号整数。 在这种情况下, 用户代理应当将 scriptlevel 属性视为 表现提示,将元素的 math-depth 属性设置为相应值。 更准确地说, +<U>、-<U> 和 <U> 分别映射到 add(<U>)、 add(<-U>) 和 <U>。

displaystyle 和 scriptlevel 值 会在 MathML 元素内部自动调整。 要完整实现这些属性,必须在用户代理样式表中 指定额外的 CSS 属性, 如 A. 用户代理样式表中所述。 特别是,对于所有 MathML 元素,都会指定默认的 font-size: math,以确保 scriptlevel 的更改被考虑在内。

在此示例中,使用 munder 元素将标记 “A” 附加到基底 “∑”。默认情况下,求和 符号使用从其父元素继承的 font-size 渲染, 而 A 则作为缩小的下标渲染。 如果 displaystyle 为 true,求和符号会绘制得 更大,而 “A” 会成为下方标记。 如果在 “A” 上将 scriptlevel 重置为 0,则它将 使用与顶层 math 根元素相同的 font-size。

<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 示例
注
TEX 的 \displaystyle、\textstyle、 \scriptstyle 和 \scriptscriptstyle 分别对应 displaystyle 和 scriptlevel 的 true 和 0、 false 和 0、 false 和 1, 以及 false 和 2。

2.1.7 保留为 有效的属性

属性 intent 和 arg 被保留为有效属性。

本规范未定义任何 intent 和 arg 属性特有的可观察行为。

注
这些属性在 [MATHML4] 中有所描述,本规范的 未来版本可能会,也可能不会 定义它们。作者应注意,它们目前 仍在开发中,并可能发生变化。

2.2 与 Web 平台集成

2.2.1 HTML 和 SVG

MathML 可以按照相关 规范 [HTML] [SVG] 中的描述与 HTML 和 SVG 混合使用。

在求值 SVG requiredExtensions 属性时,用户代理必须声明支持由 MathML 命名空间 标识的语言扩展。

在此示例中,行内 MathML 和 SVG 元素用于 HTML 文档内部。SVG 元素 <switch> 和 <foreignObject>(带有 正确的 <requiredExtensions>)用于 在图表中嵌入带有文本回退内容的 MathML 公式。 HTML input 元素用于 mtext 内部,以在数学 公式中包含交互式输入字段。另请参阅 3.7 语义和表现, 其中提供了在 annotation-xml 元素内部使用 SVG 和 HTML 的示例。

<svg style="font-size: 20px" width="400px" height="220px" viewBox="0 0 200 110">
  <g transform="translate(10,80)">
    <path d="M 0 0 L 150 0 A 75 75 0 0 0 0 0
             M 30 0 L 30 -60 M 30 -10 L 40 -10 L 40 0"
          fill="none" stroke="black"></path>
    <text transform="translate(10,20)">1</text>
    <switch transform="translate(35,-40)">
      <foreignObject width="200" height="50"
                     requiredExtensions="http://www.w3.org/1998/Math/MathML">
        <math>
          <msqrt>
            <mn>2</mn>
            <mi>r</mi>
            <mo>−</mo>
            <mn>1</mn>
          </msqrt>
        </math>
      </foreignObject>
      <text>\sqrt{2r - 1}</text>
    </switch>
  </g>
</svg>

<p>
  填空:
  <math>
    <msqrt>
      <mn>2</mn>
      <mtext><input onchange="..." size="2" type="text"></mtext>
      <mo>−</mo>
      <mn>1</mn>
    </msqrt>
    <mo>=</mo>
    <mn>3</mn>
  </math>
</p>
html-svg 示例

2.2.2 CSS 样式

用户代理必须支持本 规范中提及的各种 CSS 功能,包括 4. 用于数学布局的 CSS 扩展中描述的新功能。 它们必须遵循 display: contents 的计算规则。

在此示例中,MathML 公式继承其 父元素的 CSS 颜色,并使用通过 style 属性指定的 font-family。

<div style="width: 15em; color: blue">
  这个数学公式包含一个大求和符号和圆周率
  <math display="block" style="font-family: STIX Two Math">
    <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>
  很容易证明。
</div>
样式示例

所有包含 MathML Core 元素的文档都必须 将 A. 用户代理样式表中描述的 CSS 规则纳入用户代理级别的样式表默认值。 特别是,这会添加 !important 规则,以强制 所有 MathML 元素的书写模式 为 horizontal-lr。

float 属性不会 使父元素的计算 display 值为 block math 或 inline math 的元素产生浮动, 也不会使它们脱离常规流。

::first-line 和 ::first-letter 伪元素不适用于计算 display 值为 block math 或 inline math 的元素,并且这类 元素不会为其祖先贡献首个格式化行或首字母。

以下 CSS 功能不受支持,必须忽略:

  • 数学公式内部的换行: 在所有 MathML 元素上, white-space 都被视为 nowrap。
  • 对齐属性: align-content、justify-content、 align-self、justify-self 对 MathML 元素不起作用。
注
这些功能可能会在本文档的未来版本中处理。 目前,不建议作者为这些属性设置不同的值, 因为这可能导致向后兼容性 问题。

2.2.3 DOM 和 JavaScript

支持 Web 应用程序 API 的用户代理必须确保 MathML 的视觉渲染 与 [DOM] 树保持同步,特别是在 MathML 属性被动态修改时执行必要的 更新。

DOM 中表示 MathML 元素的所有节点 都必须实现并向脚本公开以下 MathMLElement 接口。

WebIDL[Exposed=Window]
interface MathMLElement : Element { };
MathMLElement includes GlobalEventHandlers;
MathMLElement includes HTMLOrForeignElement;

GlobalEventHandlers 和 HTMLOrForeignElement 接口定义于 [HTML] 中。

在以下示例中,MathML 公式用于渲染 分数“α 除以 2”。单击红色的 α 时,它会 变为蓝色的 β。

<script>
  function ModifyMath(mi) {
      mi.style.color = 'blue';
      mi.textContent = 'β';
  }
</script>
<math>
  <mrow>
    <mfrac>
      <mi style="color: red" onclick="ModifyMath(this)">α</mi>
      <mn>2</mn>
    </mfrac>
  </mrow>
</math>
dom-idl 示例
议题
重命名 HTMLOrSVGElement,并在 [HTML] 中定义 MathMLElement。

2.2.4 文本布局

由于数学字体通常包含非常高的字形,例如大型 积分符,因此使用排版度量对于避免 文本行间距过大很重要。因此, 用户代理在执行文本布局时必须考虑 OS/2 表中的 USE_TYPO_METRICS 标志 [OPEN-FONT-FORMAT]。

2.2.5 焦点

MathML 使作者能够在支持交互的用户代理中 提供交互性,其使用的概念、方法和指南与 HTML 中所述的 焦点 相同,并应用本节所述的针对 MathML 应用方式的修改或 澄清。

当元素获得焦点时,所有适用的 CSS 焦点相关伪类,如 选择器第 3 级 中所定义,均按照该规范的定义适用。

嵌入的 math 元素的内容 (包括标记元素内部的 HTML 元素) 会参与包含它们的所有者 HTML 文档的顺序焦点次序(组合顺序焦点次序)。

3. 表现标记

3.1 视觉格式化模型

3.1.1 盒模型

默认 display 属性 在 A. 用户代理样式表中描述:

  • 对于 <math> 根元素, 根据 display 属性的值, 它等于 inline math 或 block math。
  • 对于表格式 MathML 元素 mtable、 mtr、 mtd, 它分别等于 inline-table、 table-row 和 table-cell。
  • 对于 maction 和 semantics 元素除第一个子元素之外的所有子元素,它等于 none。
  • 对于所有其他 MathML 元素,它等于 block math。

为了指定不同 书写模式下的数学布局, 本规范使用 [CSS-WRITING-MODES-4] 中的概念:

注
除非另有规定, 本规范中的图使用 horizontal-lr 和 ltr 书写模式。 有关有时用于数学布局的其他 书写模式示例,请参阅 图 4、 图 5和 图 6。

MathML 元素所使用的盒依赖若干参数,以便以与 CSS 兼容的方式执行布局, 同时还考虑数学公式中 非常精确的位置和间距:

  1. 行内度量。 CSS 中的 最小内容行内大小、 最大内容行内大小和 行内大小。 请参阅 图 1。
    图 1 MathML 元素的通用盒模型
  2. 块度量。 块大小、 第一基线集 和 最后基线集。 为 MathML 盒定义了以下基线:

    1. 字母基线 通常与大写拉丁 字形的底部对齐。从 字母基线到盒的 行上方边缘的代数距离称为 行上升量。从 行下方边缘到盒的字母基线 的代数距离 称为 行下降量。
    2. 数学基线,也称为 数学 轴,通常与分数 线、围栏和二元运算符的中部对齐。它相对于字母基线向行上方偏移 AxisHeight。
    3. 墨迹上方基线,表示绘制数学内容的行上方 理论边界,不包括任何 额外空白。 如果未指定,则它与行上方边缘对齐。 从字母基线 到 墨迹上方基线的代数距离称为 墨迹行上升量。
    4. 墨迹下方基线,表示绘制数学内容的行下方 理论边界,不包括任何 额外空白。 如果未指定,则它与行下方边缘对齐。 从墨迹下方基线 到字母基线的代数距离称为 墨迹行下降量。
    注
    对于数学布局,在定位文本时依赖墨迹范围 非常重要。对于更复杂的 表示法(例如平方根)则并非如此。 尽管为所有 MathML 元素定义了墨迹上升量和墨迹下降量, 但它们实际上仅用于标记 元素。在其他情况下,它们只是与普通的上升量和 下降量相同。
    除非另有规定,对于 MathML 盒,最后基线集等于 第一基线集。
  3. 一个可选的 斜体校正, 用于度量盒中的文本沿 行内轴倾斜的程度。 请参阅 图 2。
    图 2 斜体 f 和大型积分符的斜体校正 示例
    如果在计算 最小内容行内大小和 最大内容行内大小期间或在布局期间请求它, 则使用 0 作为回退值。
  4. 一个可选的 顶部重音附着点, 它在盒的 行内轴上提供一个参考偏移量,应在 将该盒定位为重音时使用。 请参阅 图 3。
    图 3 抑扬符重音的顶部重音 附着点示例
    如果在计算 最小内容行内大小 (相应地为最大内容行内大小)期间请求它,则使用 最小内容行内大小(相应地为最大内容行内大小)的一半作为 回退值。 如果在布局期间请求它,则使用盒的 行内大小的一半作为回退值。

给定一个 MathML 盒,定义以下偏移量:

  • 子盒的 行内偏移 是父盒的 行内起始边缘与 子盒的 行内起始边缘之间的偏移量。
  • 子盒的 块 偏移 是父盒的块起始边缘与 子盒的 块起始边缘之间的偏移量。
  • 子盒的 行左侧偏移 是父盒的行左侧边缘与 子盒的 行左侧边缘之间的偏移量。
图 4 可能用于例如阿拉伯语数学的 horizontal-tb 和 rtl 书写模式的盒模型。
图 5 可能用于例如蒙古语数学的 vertical-lr 和 ltr 书写模式的盒模型。
图 6 可能用于例如日语数学的 vertical-rl 和 ltr 书写模式的盒模型。
注
MathML 盒内部的子盒和图形项目的位置 使用行内偏移 和块偏移表示。 为方便起见,布局算法可以使用 流相对方向、行相对方向或 字母基线来描述偏移量。 始终可以从一种描述转换为另一种描述, 因为子盒的定位总是在 计算出该盒及其子盒的度量之后进行。

以下是根据行相对 度量获得的偏移量示例:

议题 78:墨迹上升量/下降量 opentype/texneeds-tests
改进墨迹上升量/下降量的定义?

3.1.2 布局算法

每个 MathML 元素都有一个关联的 数学内容盒,它按照本章布局算法中的描述 使用以下结构进行计算:

  1. 计算数学内容的最小内容行内大小 和最大内容行内大小。
  2. 盒布局:
    1. 布局流内子盒。
    2. 计算数学内容的行内大小、 墨迹行上升量、 墨迹行下降量、 行上升量和 行上升量。
    3. 计算数学 内容盒内子盒的偏移量, 以及额外图形项目 (横线、根号符号等)的大小和偏移量。
    4. 按照 [CSS-POSITION-3] 中的描述, 对绝对定位 和固定定位 盒进行布局和定位。

必须执行以下额外步骤:

注
根据上述描述,外边距折叠不 适用于 MathML 元素。

在盒布局期间,可以在 修饰运算符上使用可选的 行内拉伸大小约束和 块拉伸大小约束参数。前者表示 沿行内轴拉伸的核心运算符应覆盖的 目标大小。 后者表示沿块轴拉伸的核心运算符应覆盖的 墨迹行上升量和墨迹 行下降量。 除非另有规定,在 盒布局期间会忽略这些参数,并在没有 任何拉伸大小约束的情况下布局子盒。

议题 76:定义行内百分比以什么为基准解析。 css/html5need specification updateneeds-tests
定义行内百分比以什么为基准解析
议题 77:定义块百分比以什么为基准解析。 css/html5need specification updateneeds-tests
定义块百分比以什么为基准解析

3.1.3 匿名 <mrow> 盒

匿名 盒是在 DOM 树中没有任何关联 元素,并且仅为布局目的 生成的盒。匿名盒的属性从 包围它的非匿名盒继承,而非继承属性具有 其初始值。 匿名 <mrow> 盒是 一个 display 等于 block math 的匿名盒,并按照 3.3.1.2 <mrow> 的布局一节中的描述进行布局。

如果一个 MathML 元素 生成匿名 <mrow> 盒,那么它会使用匿名 <mrow> 盒包裹 其子元素。即, 它在视觉格式化模型中的子树由一个 匿名 <mrow> 盒 构成,而该盒本身包含与此 MathML 元素的子元素关联的盒。

在以下示例中, math 和 mrow 元素按照 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> 子元素。 为了实现这一点, 这两个元素中的每一个都会 生成匿名 <mrow> 盒。

<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>
数学示例(显示模式)

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;如果&nbsp;</mtext>
    <mrow>
      <mi>x</mi>
      <mo>≥</mo>
      <mn>1</mn>
    </mrow>
    <mtext>&nbsp;并且&nbsp;</mtext>
    <mn>2</mn>
    <mtext>&nbsp;否则。</mtext>
  </mrow>
</math>
mtext 示例
3.2.1.1 <mtext> 的布局

如果元素的计算 display 属性不等于 block math 或 inline math, 则按照描述相应值的 CSS 规范 对其进行布局。 否则,执行以下布局。

如果 <mtext> 元素仅包含 不带 强制换行 或 软换行机会 的文本内容, 则为该文本生成的匿名子节点 按照相关 CSS 规范中的定义进行布局,并且:

否则,mtext 元素作为 块盒 进行布局,并使用相应的最小内容行内大小、 最大内容行内大小、 行内大小、块大小、 第一基线集和最后基线集 作为数学内容盒的相应值。

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” 由三个字符组成), 使第二个 <mi> 以数学斜体渲染(“c” 由单个 字符 U+0063 Latin Small Letter C 组成,并根据 italic 表映射为 U+1D450 Mathematical Italic Small C),对 第三个 <mi> 不起作用(被 mathvariant="normal" 覆盖,将 text-transform 设置为 none),对第四个 <mi> 也不起作用(italic 表中 没有为 U+221E Infinity 定义映射)。

<math>
  <mi>cos</mi>
  <mo>,</mo>
  <mi>c</mi>
  <mo>,</mo>
  <mi mathvariant="normal">c</mi>
  <mo>,</mo>
  <mi>∞</mi>
</math>
mi 示例

3.2.3 数字 <mn>

mn 元素表示“数字字面量”或 应作为数字字面量渲染的其他数据。一般来说, 数字字面量是一个数字序列,可能包含 小数点,表示无符号整数或实数。

<mn> 元素接受 2.1.3 全局 属性中描述的属性。其布局算法与 mtext 元素相同。

在以下示例中, mn 用于 写一个十进制数。

<math>
  <mn>3.141592653589793</mn>
</math>
mn 示例

3.2.4 运算符、 围栏、分隔符或重音 <mo>

mo 元素表示 运算符或任何应作为运算符渲染的内容。 通常,数学运算符的表示法约定 相当复杂,因此 MathML 提供了一种相对 复杂的机制,用于指定 <mo> 元素的渲染行为。

因此,在 MathML 中, 应“作为运算符渲染”的内容列表包括 许多通常意义上并非数学运算符的表示法。 除了具有中缀、前缀或 后缀形式的普通运算符之外,还包括花括号、 圆括号和“绝对值”竖线等围栏字符;逗号 和分号等分隔符;以及符号上方的横线或波浪线等 数学重音。本章使用术语“运算符”来指代 这种广义上的运算符。

<mo> 元素接受 2.1.3 全局属性 中描述的属性,以及以下 属性:

本规范未定义任何 fence 和 separator 属性特有的可观察行为。

注
作者可以使用 fence 和 separator 来描述运算符的特定语义。 默认值可以根据 Operators_fence 和 Operators_separator 表确定,或者等价地,根据 运算符字典的人类可读版本确定。

在以下示例中, mo 元素 用于二元运算符 +。默认间距在该运算符 两侧对称。如果依赖 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 示例 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 示例 2

运算符还用于围栏、 重音、箭头等可拉伸符号。在以下示例中,垂直箭头 拉伸到 mspace 元素的高度。 可以使用 stretchy 属性覆盖默认拉伸行为,例如强制箭头不拉伸。 symmetric 属性允许指示 运算符是否应当在数学轴 (分数线)的上方和下方对称拉伸。 最后, minsize 和 maxsize 属性会对 拉伸大小添加额外约束。

<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 示例 3

请注意,运算符的默认属性 基于字典,如 3.2.4.2 基于字典的属性中所述。例如,二元 运算符通常默认在其两侧具有对称间距,而 围栏通常默认可拉伸。

3.2.4.1 修饰运算符

如果一个 MathML Core 元素满足以下条件之一,则它是 修饰运算符:

  1. 一个 mo 元素;
  2. 一个带标记元素或 mfrac, 其第一个流内子元素存在,并且是 修饰运算符;
  3. 一个分组元素或 mpadded, 其流内子元素由(以任意顺序排列的)一个 修饰运算符和零个或多个 类空白元素组成。

修饰运算符的 核心运算符 是按如下方式递归定义的 <mo> 元素:

  1. mo 元素的核心运算符就是该元素本身。
  2. 修饰的 带标记元素或 mfrac 元素的核心运算符是其第一个流内子元素的核心运算符。
  3. 修饰的 分组元素或 mpadded 的核心运算符,是其唯一的修饰运算符 流内子元素的核心运算符。

如果一个修饰运算符的 核心运算符仅包含 由单个字符 c 组成的文本内容,并且该字符具有 行内固有拉伸轴, 则该修饰运算符的 拉伸轴为行内。 否则,修饰运算符的拉伸轴 为块。

相同定义也适用于 视觉格式化模型中的盒,其中 匿名 <mrow> 盒被视为 分组元素。

3.2.4.2 基于字典的 属性

修饰运算符的 form 属性为 infix、prefix 或 postfix 之一。 mo 元素上对应的 form 属性 如果存在,则必须 不区分 ASCII 大小写地 匹配这些值之一。

用于确定 修饰运算符的 form 的算法如下:

  1. 如果 核心运算符上存在有效的 form 属性, 则使用其 ASCII 小写值。
  2. 如果修饰运算符是一个 分组元素、 mpadded 或 msqrt 的第一个流内子元素,并且该元素有多个流内子元素 (忽略所有类空白子元素),则其 form 为 prefix。
  3. 或者,如果修饰运算符是一个 分组元素、 mpadded 或 msqrt 的最后一个流内子元素,并且该元素有多个流内子元素 (忽略所有类空白子元素),则其 form 为 postfix。
  4. 或者,如果修饰运算符是 带标记元素的流内子元素, 但不是第一个 流内 子元素,则其 form 为 postfix。
  5. 否则,修饰运算符的 form 为 infix。

修饰运算符的 stretchy、 symmetric、 largeop、 movablelimits 属性为 false 或 true。 在后一种情况下, 称该修饰运算符具有该 属性。 mo 元素上对应的 stretchy、symmetric、largeop、movablelimits 属性如果存在,则必须为 布尔值。

修饰运算符的 lspace、 rspace、 minsize 属性为 <length-percentage>。 修饰运算符的 maxsize 属性为 <length-percentage> 或 ∞。 mo 元素上的 lspace、 rspace、 minsize 和 maxsize 属性如果存在, 则必须为 <length-percentage>。

用于确定 修饰运算符属性的算法如下:

  1. 如果 核心运算符上存在有效的对应 stretchy、 symmetric、 largeop、 movablelimits、 lspace、 rspace、 maxsize 或 minsize 属性,则使用该属性的 ASCII 小写值。
  2. 否则,运行用于 确定修饰运算符的 form 的算法。
  3. 如果核心运算符仅包含文本 内容 Content,则将 Category 设置为 用于确定 运算符类别的算法 (Content, Form) 的结果,其中 Form 是上一步计算出的 form。
  4. 如果 Category 为 Default,并且 修饰运算符的form 没有作为其核心 运算符上的属性被显式 指定:
    1. 将 Category 设置为 用于 确定运算符类别的算法 (Content, Form) 的结果,其中 Form 为 infix。
    2. 如果 Category 为 Default,则 再次运行该算法,并将 Form 设置为 postfix。
    3. 如果 Category 为 Default,则 再次运行该算法,并将 Form 设置为 prefix。
  5. 运行 用于 根据运算符的类别设置其 属性的算法 Category。

在布局期间使用时, stretchy、 symmetric、 largeop、 movablelimits、 lspace、 rspace、 minsize 的值通过 用于 确定修饰运算符属性的算法获得,并进行以下额外 解析:

  • lspace、 rspace 的百分比值 相对于从字典读取的值 或上述回退值进行解释。
  • minsize 和 maxsize 百分比值的解释在 3.2.4.3 运算符的 布局中描述。
  • lspace、rspace、 minsize 和 maxsize 的字体相对长度 依赖核心运算符的 字体样式,而不是 修饰运算符的字体样式。
3.2.4.3 运算符的布局

如果 <mo> 元素的计算 display 属性不等于 block math 或 inline math, 则按照描述相应值的 CSS 规范 对其进行布局。 否则,执行以下布局。

仅当 <mo> 元素的 visibility 为 visible 时, 才必须绘制运算符文本。 在这种情况下,必须使用 <mo> 元素的 color 进行绘制。

运算符按如下方式布局:

  1. 如果 <mo> 元素的内容 不是由单个字符 c 组成, 则回退到 3.2.1.1 <mtext> 的布局算法。
  2. 如果运算符具有stretchy 属性:
  3. 如果运算符具有largeop 属性,并且 <mo> 元素上的 math-style 为 normal, 则:
    1. 使用 MathVariants 表尝试查找高度至少为 DisplayOperatorMinHeight 的字形。 如果未找到,则回退到 最大的非基本字形。如果仍未找到,则回退到 3.2.1.1 <mtext> 的布局算法。

    2. 数学内容的最小内容行内大小、 最大内容行内大小、 行内大小和块度量 由找到的 字形给出。
    3. 绘制该字形。
    图 8 求和符号的基本大小和 displaystyle 大小
  4. 否则,回退到 3.2.1.1 <mtext> 的布局算法。

如果上述某一步使用了 塑造可拉伸字形的算法, 则数学内容的 斜体校正 设置为该算法返回的值。

3.2.5 空白 <mspace>

mspace 空元素表示由其属性设置的、任意 所需大小的空白空间。

<mspace> 元素接受 2.1.3 全局属性 中描述的属性,以及以下 属性:

width、 height、 depth 如果存在,则必须 具有有效的 <length-percentage> 值。

  • 如果 width 属性存在、有效且不是百分比,则 将该属性用作 表现提示, 将元素的 width 属性设置为相应值。
  • 如果 height 属性缺失、无效或为百分比,则请求的 行上升量为 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 示例

如果 <mspace> 元素的 计算 display 属性不等于 block math 或 inline math, 则按照描述相应值的 CSS 规范 对其进行布局。 否则, <mspace> 元素按照 图 9所示进行布局。 数学内容的最小内容行内大小、 最大内容行内大小和行内大小 等于 width 属性解析后的值。 数学内容的块大小等于 height 属性解析后的值。 数学内容的行上升量等于 上文确定的请求行上升量。

图 9 <mspace> 元素的盒模型
注
height/depth 术语来自 [MATHML3], 而后者本身受到 [TEXBOOK] 的启发。
3.2.5.1 类空白元素的 定义

若干 MathML 表现元素是“类空白”的, 也就是说,它们通常渲染为空白,并且不会影响 它们所在表达式的数学含义。 因此,这些元素在其他 MathML 表达式中通常 以某种特殊方式发挥作用。

如果一个 MathML Core 元素满足以下条件之一,则它是 类空白元素:

  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 示例
注
在 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 的第一个子元素),并构造一个带围栏的表达式 ( msup 的第一个子元素), 然后将其提升到 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 示例

<mrow> 元素接受 2.1.3 全局 属性中描述的属性。一个具有流内子元素 child1、child2、…、childN 的 <mrow> 元素按照 图 10所示进行布局。子盒 按行依次放置,并使其所有 字母基线 对齐。

图 10 <mrow> 元素的盒模型
注
由于盒模型会确保字母 基线对齐, 因此在 AxisHeight 对所有流内子元素都相同的典型情况下, 分数线或对称的可拉伸运算符 也会沿数学轴对齐。
3.3.1.1 沿块轴拉伸运算符的算法
图 11 沿块轴 对运算符进行对称和非对称 拉伸

沿块轴拉伸运算符的 算法 包括以下步骤:

  1. 如果存在块拉伸大小 约束 或行内拉伸大小约束, 则正在布局的元素是 修饰运算符。使用相同的拉伸大小约束 对其中作为修饰运算符的那个 流内子元素进行布局, 并在没有任何拉伸大小约束的情况下 对所有其他流内子元素进行布局, 然后停止。
  2. 否则, 将流内子元素列表拆分为第一个列表 LToStretch,其中包含 具有stretchy 属性和块拉伸轴的 修饰运算符; 以及第二个列表 LNotToStretch。
  3. 在没有任何拉伸大小约束的情况下,对 LNotToStretch 中的所有项目执行布局。 如果 LToStretch 为空,则停止。 如果 LNotToStretch 为空,则对 LToStretch 中的所有项目 使用块拉伸大小 约束 (0, 0) 执行布局。
  4. 分别计算无约束目标大小 Uascent 和 Udescent,其值分别为 上一步中已布局的流内子元素的 外边距盒的最大墨迹上升量和最大墨迹下降量。
  5. 使用 块拉伸大小约束 (Uascent, Udescent) 对 LToStretch 中的所有元素进行布局或重新布局。
3.3.1.2 <mrow> 的布局

如果该盒不是匿名 <mrow> 盒, 并且关联元素的计算 display 属性不等于 block math 或 inline math, 则按照描述相应值的 CSS 规范 对其进行布局。 否则,执行以下布局。

如果一个子盒不是 修饰运算符 并且具有非零斜体校正, 则该子盒是倾斜的。

注
大型运算符可能具有非零斜体校正,但该值 用于附加标记。 更一般地,所有修饰运算符 都被视为非倾斜的,因为它们周围的间距 按照lspace 和 rspace 的规定进行计算。

最小内容行内大小 (相应地为最大内容行内大小)使用 以下算法计算:

  1. 如果该盒对应于 math 元素 或者不是 修饰运算符, 则将 add-space 设置为 true;否则设置为 false。
  2. 将 inline-offset 设置为 0。
  3. 将 previous-italic-correction 设置为 0。
  4. 对于每个流内子元素:
    1. 如果子元素不是倾斜的,则将 inline-offset 增加 previous-italic-correction。
    2. 如果子元素是修饰 运算符 并且 add-space 为 true,则将 inline-offset 增加 其lspace 属性的值。
    3. 将 inline-offset 增加 子元素外边距盒的最小内容行内大小 (相应地为最大内容行内大小)。
    4. 如果子元素是倾斜的,则 将 previous-italic-correction 设置为 其斜体校正。否则将其设置为 0。
    5. 如果子元素是修饰 运算符 并且 add-space 为 true,则将 inline-offset 增加 其rspace 属性的值。
  5. 将 inline-offset 增加 previous-italic-correction。
  6. 返回 inline-offset。

使用 沿块轴 拉伸运算符的算法 对流内子元素进行布局。

数学内容的行内大小按照与 数学内容的最小内容行内大小和 最大内容行内大小相同的方式计算, 但改用 流内子元素的外边距盒的行内大小。

数学内容的墨迹行上升量(相应地为行上升量) 是所有流内子元素的外边距盒的 墨迹行上升量(相应地为行上升量) 中的最大值。类似地, 数学内容的墨迹行下降量(相应地为行下降量) 是所有流内子元素的外边距盒的墨迹行下降量 (相应地为墨迹行上升量) 中的最大值。

使用以下算法定位流内子元素:

  1. 如果该盒对应于 math 元素 或者不是 修饰运算符, 则将 add-space 设置为 true;否则设置为 false。
  2. 将 inline-offset 设置为 0。
  3. 将 previous-italic-correction 设置为 0。
  4. 对于每个流内子元素:
    1. 如果子元素不是倾斜的,则将 inline-offset 增加 previous-italic-correction。
    2. 如果子元素是修饰 运算符 并且 add-space 为 true,则将 inline-offset 增加 其lspace 属性的值。
    3. 将子元素的行内偏移 设置为 inline-offset,并设置其块 偏移, 使子元素的字母基线 与字母 基线对齐。
    4. 将 inline-offset 增加 子元素外边距盒的行内大小。
    5. 如果子元素是倾斜的,则 将 previous-italic-correction 设置为 其斜体校正。否则将其设置为 0。
    6. 如果子元素是修饰 运算符 并且 add-space 为 true,则将 inline-offset 增加 其rspace 属性的值。

数学内容的斜体校正设置为最后一个流内子元素的 斜体 校正,即 previous-italic-correction 的最终值。

3.3.2 分数 <mfrac>

mfrac 元素用于表示分数。它也可用于标记 类似分数的对象,例如二项式系数和勒让德符号。

如果 <mfrac> 元素的计算 display 属性不等于 block math 或 inline math, 则按照描述相应值的 CSS 规范 对其进行布局。 否则,执行以下布局。

<mfrac> 元素接受 2.1.3 全局属性 中描述的属性,以及以下 属性:

linethickness 属性指示分数线所使用的 分数线粗细。 如果存在,则必须 具有有效的 <length-percentage> 值。 如果该属性缺失或具有无效值, 则使用 FractionRuleThickness 作为默认 值。百分比相对于该默认值解释。 负值解释为 0。

以下示例包含四个 linethickness 值不同的分数。分数线始终 与加号和减号的中部对齐。 分子和分母水平居中。 不处于displaystyle 中的分数使用较小的间距和 font-size。

<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 示例

<mfrac> 元素在其子元素内将 displaystyle 设置为 false, 或者如果它已经是 false,则将 scriptlevel 增加 1。 它在其第二个子元素内将 math-shift 设置为 compact。 为避免分数线与其他 相邻项目(例如减号或另一个分数的分数线)之间产生视觉混淆, 会在元素周围默认添加 1 像素的空白。 用户代理样式表 必须包含以下规则:

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

如果 <mfrac> 元素 少于或多于两个流内子元素,则其布局算法 与 mrow 元素相同。 否则,第一个流内子元素称为 分子,第二个 流内子元素称为 分母, 布局算法如下所述。

注
实际上,<mfrac> 元素有两个 流内子元素。因此,CSS 规则基本上会对 分子和 分母执行 scriptlevel、displaystyle 和math-shift 更改。
3.3.2.1 分数线 粗细非零的分数

如果分数线粗细非零,则 <mfrac> 元素按照 图 12所示进行布局。 仅当 <mfrac> 元素的 visibility 为 visible 时, 才必须绘制分数线。 在这种情况下,必须使用 <mfrac> 元素的 color 绘制分数线。

图 12 <mfrac> 元素的盒模型

内容的最小内容行内大小 (相应地为最大内容行内大小) 是分子的 外边距盒的最小内容行内大小 (相应地为最大内容行内大小)与分母的 外边距盒的最小内容行内大小 (相应地为最大内容行内大小)之间的最大值。

如果存在行内拉伸大小 约束 或块拉伸大小约束, 则分子也使用相同的拉伸大小 约束进行布局; 否则,它在没有任何拉伸 大小约束的情况下进行布局。分母始终在没有 任何拉伸大小约束的情况下进行布局。

数学内容的行内大小 是分子的外边距盒的行内大小与 分母的外边距盒的行内大小之间的最大值。

NumeratorShift 是以下值中的最大值:

DenominatorShift 是以下值中的最大值:

数学内容的行上升量是以下值中的最大值:

数学内容的行下降量是以下值中的最大值:

分子 (相应地为分母)的 行内偏移 为数学内容行内大小的一半 − 分子的外边距盒的行内大小的一半 (相应地为分母的外边距盒的行内大小的一半)。

分子(相应地为分母)的 字母基线 相对于字母基线偏移 NumeratorShift(相应地为 DenominatorShift)的距离, 朝向行上方(相应地为行下方)。

数学内容盒放置在 内容盒内,使它们的块起始边缘 对齐,并且这些边缘的中点位于相同 位置。

分数线的行内大小为 内容盒的行内大小,其 行内起始边缘与 内容盒的相应边缘对齐。 分数线的中心相对于数学内容盒的字母 基线 朝行上方偏移 AxisHeight 的距离。 它的块大小为 分数线粗细。

3.3.2.2 分数线 粗细为零的分数

如果分数线粗细为零, 则 <mfrac> 元素改为按照 图 13所示进行布局。

图 13 没有分数线的 <mfrac> 元素的盒模型

数学内容的最小内容行内大小、最大内容行内大小 和行内大小的计算方式与 3.3.2.1 分数线粗细非零的分数中相同。

如果存在行内拉伸大小 约束或 块拉伸大小约束, 则分子也使用相同的拉伸大小 约束进行布局; 否则,它在没有任何拉伸 大小约束的情况下进行布局。分母始终在没有 任何拉伸大小约束的情况下进行布局。

如果 math-style 为 compact, 则 TopShift 和 BottomShift 分别 设置为 StackTopShiftUp 和StackBottomShiftDown。 否则,math-style 为 normal, 并且它们分别设置为StackTopDisplayStyleShiftUp 和StackBottomDisplayStyleShiftDown。

Gap 定义为 (BottomShift − 分母的 外边距盒的墨迹行上升量)+ (TopShift − 分子的 外边距盒的墨迹行下降量)。 如果 math-style 为 compact, 则 GapMin 为 StackGapMin; 否则,math-style 为 normal, 并且它为 StackDisplayStyleGapMin。 如果 Δ = GapMin − Gap 为正,则 TopShift 和 BottomShift 分别增加 Δ/2 和 Δ − Δ/2。

数学内容的行上升量是以下值中的最大值:

数学内容的行下降量是以下值中的最大值:

分子和分母的 行内偏移 的计算方式与 3.3.2.1 分数线粗细非零的分数中相同。

分子(相应地为分母)的 字母基线 相对于字母基线偏移 TopShift(相应地为 − BottomShift)的距离, 朝向 行上方(相应地为行下方)。

数学内容盒放置在 内容盒内,使它们的块起始边缘 对齐,并且这些边缘的中点位于相同 位置。

3.3.3 根式 <msqrt>、<mroot>

根式元素构造一个带有 根号 √ 且内容上方有横线的表达式。 msqrt 元素 用于平方根,而 mroot 元素 用于绘制带有根指数的根式,例如立方根。

<msqrt> 和 <mroot> 元素接受 2.1.3 全局 属性中描述的属性。

以下示例包含一个使用 msqrt 编写的平方根 和一个使用 mroot 编写的立方根。 请注意, msqrt 有多个子元素,并且 平方根应用于所有这些子元素。 mroot 恰好有两个子元素:它是 以第二个子元素(数字 3)为根指数、 应用于第一个子元素(平方根)的根式。 还要注意,这些元素只会更改 mroot 根指数内的 font-size,但其缩小程度 比分数的分子和分母中更大。

<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 示例

<msqrt> 和 <mroot> 元素将 math-shift 设置为 compact。 <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> 少于或多于两个 流内子元素, 则其布局算法 与 mrow 元素相同。 否则,第一个流内子元素称为 mroot 基底, 第二个流内子元素称为 mroot 根指数, 其布局算法如下所述。

注
实际上,<mroot> 元素有两个 流内子元素。因此,CSS 规则基本上会对根指数执行 scriptlevel 和displaystyle 更改。

<msqrt> 元素 生成一个匿名 <mrow> 盒, 称为 msqrt 基底。

3.3.3.1 根号符号

仅当 <msqrt> 或 <mroot> 元素的 visibility 为 visible 时, 才必须绘制根号符号。 在这种情况下,必须使用该元素的 color 绘制根号符号。

根号 字形是字符 U+221A SQUARE ROOT 所获得的字形。

如果 math-style 为 compact, 则 根号 间隙由 RadicalVerticalGap 给出;如果 math-style 为 normal, 则由 RadicalDisplayStyleVerticalGap 给出。

可拉伸根号字形的根号目标大小为 RadicalRuleThickness、 根号间隙和基底墨迹高度之和。

根号字形的盒度量 和根号主体的绘制由 塑造可拉伸字形到 根号字形目标大小的块尺寸的算法给出。

3.3.3.2 平方根

<msqrt> 元素按照 图 14所示进行布局。

图 14 <msqrt> 元素的盒模型

数学内容的最小内容行内大小 (相应地为最大内容行内大小) 是 根号字形的 沿 块轴拉伸的字形的首选行内大小 与 msqrt 基底的外边距盒的 最小内容行内大小(相应地为最大内容行内大小)之和。

数学内容的行内大小为 根号字形的盒度量的前进宽度 与msqrt 基底的外边距盒的 行内大小之和。

数学内容的行上升量是以下值中的最大值:

数学内容的行下降量是以下值中的最大值:

上横线的行内大小为 msqrt 基底的外边距盒的行内大小。 msqrt 基底和 上横线的行内偏移也相同, 并且等于 根号字形的盒度量的宽度。

msqrt 基底的字母基线与字母基线对齐。 上横线的块大小为 RadicalRuleThickness。它的垂直中心 相对于字母基线 朝行上方偏移一段距离, 该距离等于数学内容的行上升量,减去 RadicalExtraAscender, 再减去RadicalRuleThickness的一半。

最后,执行根号主体的绘制:

3.3.3.3 带根指数的根式

<mroot> 元素按照 图 15所示进行布局。 首先忽略mroot 根指数,并按照图 图 14所示, 使用与 3.3.3.2 平方根 中相同的算法,对mroot 基底 和 根号字形进行布局, 以生成一个外边距盒 B(以绿色表示)。

图 15 <mroot> 元素的盒模型

数学内容的最小内容行内大小 (相应地为最大内容行内大小)是以下各项之和: max(0, RadicalKernBeforeDegree)、 mroot 根指数的外边距盒的 mroot 根指数的 最小内容行内大小 (相应地为最大内容行内大小)、 max(−最小内容行内大小, RadicalKernAfterDegree) (相应地为 max(−mroot 根指数的外边距盒的最大内容行内大小, RadicalKernAfterDegree)) 以及 B 的 最小内容行内大小 (相应地为最大内容行内大小)。

使用相同的限制方式, AdjustedRadicalKernBeforeDegree 和 AdjustedRadicalKernAfterDegree 分别 定义为 max(0, RadicalKernBeforeDegree) 和 max(−根指数的外边距盒的行内大小, RadicalKernAfterDegree)。

数学内容的行内大小为 AdjustedRadicalKernBeforeDegree、 根指数的外边距盒的行内大小、 AdjustedRadicalKernAfterDegree 和 B 的行内大小之和。

数学内容的行上升量是以下值中的最大值:

数学内容的行下降量是以下值中的最大值:

根指数的行内偏移为 AdjustedRadicalKernBeforeDegree。 mroot 基底的 inline-offset 等于该值加上 根指数的外边距盒的行内大小。

B 的字母基线与字母基线对齐。 根指数的字母基线相对于 行下方边缘偏移一段距离,该距离为 RadicalDegreeBottomRaisePercent × B 的块大小 + 根指数的外边距盒的行下降量。

注
通常,根指数之前的字距调整为正值,而 根指数之后的字距调整为负值,这意味着根 元素会具有一些行内起始空白,并且根指数 会与根号主体重叠。

3.3.4 样式更改 <mstyle>

从历史上看, mstyle 元素被引入用于进行 会影响其内容渲染的样式更改。

<mstyle> 元素接受 2.1.3 全局属性中描述的属性。 其布局算法与 mrow 元素相同。

注
实现 <mstyle> 是为了与完整 MathML 保持兼容。仅 以 MathML Core 为目标的作者应使用 CSS 进行样式设置。

在以下示例中, mstyle 用于设置scriptlevel 和displaystyle。 可以观察到,这分别影响其 后代的 font-size 和下标位置。 在 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 示例

3.3.5 错误消息 <merror>

merror 元素将其内容显示为 “错误消息”。该元素旨在为 从其他输入生成 MathML 的程序提供一种标准方式,以报告 其输入中的语法错误。

在以下示例中, merror 用于指示某些类似 LaTeX 的输入中的解析错误:

<math>
  <mfrac>
    <merror>
      <mtext>语法错误:\frac{1}</mtext>
    </merror>
    <mn>3</mn>
  </mfrac>
</math>
merror 示例

<merror> 元素接受 2.1.3 全局属性中描述的属性。 其布局算法与 mrow 元素相同。 为了在视觉上突出显示错误 消息,用户代理样式表 必须包含以下规则:

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

3.3.6 调整内容 周围的空白 <mpadded>

mpadded 元素的渲染与其流内子内容相同,但其 内容的大小和相对定位点会根据 <mpadded> 的属性进行修改。

<mpadded> 元素接受 2.1.3 全局属性 中描述的属性,以及以下 属性:

width、 height、 depth、 lspace 和 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 示例
3.3.6.1 内部盒 和请求的参数

mpadded 元素 生成一个匿名 <mrow> 盒,称为 mpadded 内部盒,其参数称为 内部行内大小、内部行上升量和内部行下降量。

请求的 <mpadded> 参数按如下方式确定:

  • 请求的 width 是 width 属性解析后的值。 如果 width 属性存在、有效且不是百分比,则 将该属性用作 表现提示, 将元素的 width 属性设置为相应值。
  • 如果 height 属性缺失、无效或为百分比,则请求的 height 为内部行上升量。 否则,请求的 height 为 height 属性解析后的值,并将 负值限制为 0。
  • 如果 depth 属性缺失、无效或为百分比,则请求的 depth 为内部行上升量。 否则,请求的 depth 为 depth 属性解析后的值,并将 负值限制为 0。
  • 如果 lspace 属性缺失、无效或为百分比,则请求的 lspace 为 0。否则,请求的 lspace 为 lspace 属性解析后的值,并将 负值限制为 0。
  • 如果 voffset 属性缺失、无效或为百分比,则请求的 voffset 为 0。否则,请求的 voffset 为 voffset 属性解析后的值。
    注
    负的 voffset 值不会被限制为 0。
3.3.6.2 <mpadded> 的布局

如果 <mpadded> 元素的计算 display 属性不等于 block math 或 inline math, 则按照描述相应值的 CSS 规范 对其进行布局。 否则,它按照 图 16所示进行布局。

图 16 <mpadded> 元素的盒模型

数学内容的最小内容行内大小(相应地为最大内容行内大小) 是在 3.3.6.1 内部盒和请求的参数 中计算出的请求 width, 但使用 mpadded 内部盒的最小内容行内大小 (相应地为最大内容行内大小) 代替“内部行内 大小”。

数学内容的行内大小 是在 3.3.6.1 内部盒和请求的参数中计算出的请求 width。

数学内容的行上升量为请求的 height。 数学内容的行下降量为请求的 depth。

放置mpadded 内部盒时,使其字母基线 相对于字母基线 朝行上方偏移请求的 voffset。

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 示例

<mphantom> 元素接受 2.1.3 全局 属性中描述的属性。其布局算法与 mrow 元素相同。 为了隐藏内容, 用户代理样式表 必须包含以下规则:

mphantom {
  visibility: hidden;
}
注
实现 <mphantom> 是为了与完整 MathML 保持兼容。仅 以 MathML Core 为目标的作者应使用 CSS 进行样式设置。

3.4 上下标和极限模式

本节描述的元素将一个或多个上下标 定位在基底周围。将各种类型的上下标和修饰 附加到符号上是数学中非常常见的表示方式。对于 纯视觉布局,单个通用元素即可 将上下标和修饰定位到给定基底周围任意传统的 上下标位置。然而,为了更好地捕获 常见表示法的抽象结构,MathML 提供了 若干更专用的上下标元素。

除下标/上标元素之外,MathML 还有上方标记和 下方标记元素,用于将标记放置在基底上方和下方。 这些元素可用于为大型运算符放置极限,或者 在基底上方或下方放置重音和线条。

3.4.1 下标和上标 <msub>、<msup>、 <msubsup>

msub、 msup 和 msubsup 元素用于将 下标和上标附加到 MathML 表达式。 它们接受 2.1.3 全局属性中描述的属性。

以下示例展示了下标和 上标的基本用法。font-size 会在 标记内部自动缩小。

<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 示例

如果 <msub>、 <msup> 或 <msubsup> 元素的计算 display 属性不等于 block math 或 inline math, 则按照描述相应值的 CSS 规范 对它们进行布局。 否则,执行以下布局。

3.4.1.1 <msub>、 <msup>、<msubsup> 的子元素

如果 <msub> 元素 少于或多于两个流内子元素,则其布局算法 与 mrow 元素相同。 否则,第一个流内子元素称为 msub 基底, 第二个流内子元素称为 msub 下标,布局算法在 3.4.1.2 带 下标的基底中说明。

如果 <msup> 元素 少于或多于两个流内子元素,则其布局算法 与 mrow 元素相同。 否则,第一个流内子元素称为 msup 基底, 第二个流内子元素称为 msup 上标,布局算法在 3.4.1.3 带 上标的基底中说明。

如果 <msubsup> 元素 少于或多于三个流内子元素,则其布局算法 与 mrow 元素相同。 否则,第一个流内子元素称为 msubsup 基底,第二个流内子元素 称为 msubsup 下标, 第三个流内子元素称为 msubsup 上标,布局算法在 3.4.1.4 带下标和上标的基底中说明。

3.4.1.2 带下标的基底

<msub> 元素按照 图 17所示进行布局。 如果msub 基底 是具有 largeop 属性的修饰运算符, 则 LargeOpItalicCorrection 为其斜体校正,否则为 0。

图 17 <msub> 元素的盒模型

数学内容的 最小内容行内大小(相应地为最大内容行内大小) 为 msub 基底的外边距盒的 最小内容行内大小(相应地为最大内容行内大小)− LargeOpItalicCorrection + msub 下标的外边距盒的 最小内容行内大小(相应地为最大内容行内大小)+ SpaceAfterScript。

如果存在 行内拉伸大小约束 或块拉伸大小约束, 则msub 基底也使用相同的拉伸大小 约束进行布局;否则在没有任何拉伸 大小约束的情况下进行布局。标记始终在没有 任何拉伸大小约束的情况下进行布局。

数学内容的行内大小 为msub 基底的外边距盒的行内大小 − LargeOpItalicCorrection + msub 下标的外边距盒的行内大小 + SpaceAfterScript。

SubShift 是以下值中的最大值:

数学内容的行上升量是以下值中的最大值:

数学内容的行下降量是以下值中的最大值:

msub 基底的行内偏移为 0,而 msub 下标的行内偏移为msub 基底的外边距盒的行内大小 − LargeOpItalicCorrection。

放置msub 基底时,使其字母基线 与字母基线对齐。放置msub 下标时,使其字母基线 相对于字母基线 朝行下方偏移 SubShift。

3.4.1.3 带上标的基底

<msup> 元素按照 图 18所示进行布局。 如果msup 基底 不是具有 largeop 属性的修饰运算符, 则 ItalicCorrection 为其斜体校正,否则为 0。

图 18 <msup> 元素的盒模型

数学内容的 最小内容行内大小(相应地为最大内容行内大小) 为 msup 基底的外边距盒的 最小内容行内大小(相应地为最大内容行内大小)+ ItalicCorrection + msup 上标的外边距盒的 最小内容行内大小(相应地为最大内容行内大小)+ SpaceAfterScript。

如果存在 行内拉伸大小约束 或块拉伸大小约束, 则msup 基底也使用相同的拉伸大小 约束进行布局;否则在没有任何拉伸 大小约束的情况下进行布局。标记始终在没有 任何拉伸大小约束的情况下进行布局。

数学内容的行内大小 为msup 基底的外边距盒的行内大小 + ItalicCorrection + msup 上标的外边距盒的行内大小 + SpaceAfterScript。

SuperShift 是以下值中的最大值:

数学内容的行上升量是以下值中的最大值:

数学内容的行下降量是以下值中的最大值:

msup 基底的行内偏移为 0,而 msup 上标的行内偏移为msup 基底的外边距盒的行内大小 + ItalicCorrection。

放置msup 基底时,使其字母基线 与字母基线对齐。放置msup 上标时,使其 字母基线 相对于字母基线 朝行上方偏移 SuperShift。

3.4.1.4 带 下标和上标的基底

<msubsup> 元素按照 图 18所示进行布局。 LargeOpItalicCorrection 和 SubShift 按照 3.4.1.2 带下标的基底中的方式设置。 ItalicCorrection 和 SuperShift 按照 3.4.1.3 带上标的基底中的方式设置。

图 19 <msubsup> 元素的盒模型

数学内容的 最小内容行内大小(相应地为最大内容行内大小和 行内大小)是 3.4.1.2 带 下标的基底和 3.4.1.3 带 上标的基底中计算出的数学内容 最小内容行内大小(相应地为最大内容行内大小和 行内大小)之间的最大值。

如果存在 行内拉伸大小约束 或块拉伸大小约束, 则msubsup 基底也使用相同的拉伸大小 约束进行布局;否则在没有任何拉伸 大小约束的情况下进行布局。标记始终在没有 任何拉伸大小约束的情况下进行布局。

如果存在 行内拉伸大小约束 或块拉伸大小约束, 则msubsup 基底也使用相同的拉伸大小 约束进行布局;否则在没有任何拉伸 大小约束的情况下进行布局。标记始终在没有 任何拉伸大小约束的情况下进行布局。

SubSuperGap 是两个标记 沿块轴方向之间的间隙,定义为 (SubShift − msubsup 下标的 外边距盒的墨迹行上升量)+ (SuperShift − msubsup 上标的外边距盒的墨迹行下降量)。 如果 SubSuperGap 小于 SubSuperscriptGapMin,则执行 以下步骤以确保满足该条件:

  1. 令 Δ 为 SuperscriptBottomMaxWithSubscript −(SuperShift − msubsup 上标的外边距盒的墨迹行下降量)。 如果 Δ > 0,则将 Δ 设置为 Δ 与 SubSuperscriptGapMin − SubSuperGap 之间的最小值,并将 SuperShift(因此 SubSuperGap 也会)增加 Δ。
  2. 令 Δ 为 SubSuperscriptGapMin − SubSuperGap。 如果 Δ > 0,则 将 SubscriptShift(因此 SubSuperGap 也会)增加 Δ。

数学内容的墨迹行上升量(相应地为行上升量、墨迹 行下降量、 行下降量) 设置为 3.4.1.2 带 下标的基底和 3.4.1.3 带 上标的基底中计算出的数学内容 墨迹行上升量(相应地为行上升量、墨迹 行下降量、 行下降量)的最大值, 但使用上面调整后的 SubShift 和 SuperShift 值。

msubsup 基底和标记的 行内偏移和块偏移 按照 3.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>

munder、 mover 和 munderover 元素用于 附加 放置在 MathML 表达式下方或上方的重音或极限。

<munderover> 元素接受 2.1.3 全局 属性中描述的属性,以及 以下属性:

类似地,<mover> 元素 (相应地为 <munder> 元素)接受 2.1.3 全局属性中描述的属性, 以及 accent 属性(相应地为 accentunder 属性)。

accent、 accentunder 属性如果存在,其值必须为布尔值。 如果这些属性缺失或无效,则视为 等于 false。 用户代理必须按照 3.4.4 标记中的 displaystyle、scriptlevel 和 math-shift中的描述实现它们。

以下示例展示了下方标记和上方标记的基本用法。 font-size 会在标记内部自动缩小, 除非这些标记旨在作为重音。

<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 示例

如果 <munder>、 <mover> 或 <munderover> 元素的计算 display 属性不等于 block math 或 inline math, 则按照描述相应值的 CSS 规范 对它们进行布局。 否则,执行以下布局。

3.4.2.1 <munder>、 <mover>、<munderover> 的子元素

如果 <munder> 元素 少于或多于两个流内子元素,则其布局算法 与 mrow 元素相同。 否则,第一个流内子元素称为 munder 基底,第二个流内子元素称为 munder 下方标记。

如果 <mover> 元素 少于或多于两个流内子元素,则其布局算法 与 mrow 元素相同。 否则,第一个流内子元素称为 mover 基底,第二个流内子元素称为 mover 上方标记。

如果 <munderover> 元素 少于或多于三个流内子元素,则其布局算法 与 mrow 元素相同。 否则,第一个流内子元素称为 munderover 基底,第二个流内子元素 称为 munderover 下方标记, 第三个流内子元素称为 munderover 上方标记。

如果 <munder>、<mover> 或 <munderover> 元素的计算 math-style 属性等于 compact, 且其基底是具有 movablelimits 属性的修饰运算符,则 它们的布局算法分别 与 3.4.1.2 带 下标的基底、 3.4.1.3 带 上标的基底和 3.4.1.4 带下标和上标的基底中 为 <msub>、<msup> 和 <msubsup> 描述的布局算法相同。

否则, <munder>、<mover> 和 <munderover> 的布局算法分别在 3.4.2.3 带 下方标记的基底、 3.4.2.4 带 上方标记的基底和 3.4.2.5 带下方标记和上方标记的基底中描述。

3.4.2.2 沿行内轴拉伸运算符的算法

沿行内 轴拉伸运算符的算法 如下。

  1. 如果存在 行内拉伸大小约束或 块拉伸大小约束, 则正在布局的元素是 修饰运算符。使用 相同的拉伸大小约束布局基底。
  2. 将尚未 布局的流内子元素列表拆分为第一个列表 LToStretch,其中包含 具有stretchy 属性和行内拉伸轴的 修饰运算符; 以及第二个列表 LNotToStretch。
  3. 在没有任何拉伸大小约束的情况下,对 LNotToStretch 中的所有项目执行布局。 如果 LToStretch 为空,则停止。 如果 LNotToStretch 为空,则对 LToStretch 中的所有项目 使用行内拉伸 大小约束 0 执行布局。
  4. 将目标大小 T 计算为 上一步中已布局子盒的 外边距盒的最大行内大小。
  5. 使用行内拉伸大小约束 T 对 LToStretch 中的所有元素进行布局或重新布局。
3.4.2.3 带下方标记的基底

<munder> 元素按照 图 20所示进行布局。 如果munder 基底 是具有 largeop 属性的修饰运算符, 则 LargeOpItalicCorrection 为其斜体校正,否则为 0。

图 20 <munder> 元素的盒模型

数学内容的最小内容行内大小(相应地为最大内容行内大小) 按照下面数学内容行内大小的方式计算, 但将 munder 基底的外边距盒和munder 下方标记的外边距盒的 行内大小 替换为 munder 基底的外边距盒和munder 下方标记的外边距盒的 最小内容行内大小(相应地为最大内容行内大小)。

使用沿 行内轴拉伸运算符的算法 对流内子元素进行布局。

数学内容的行内大小通过确定以下两项之间的绝对差值 来计算:

如果 m 是上面第二项中计算出的最小值,则 munder 基底的行内偏移 为 −m − 基底外边距盒的行内大小的一半。 munder 下方标记的行内偏移为 −m − munder 下方标记的 外边距盒的行内大小的一半 − LargeOpItalicCorrection 的一半。

参数 UnderShift 和 UnderExtraDescender 按以下顺序考虑三种情况来确定:

  1. munder 基底是具有 largeop 属性的 修饰运算符。 UnderShift 是以下值中的最大值:

    UnderExtraDescender 为 0。

  2. munder 基底是具有 stretchy 属性 且拉伸轴为行内的 修饰运算符。 UnderShift 是以下值中的最大值:

    UnderExtraDescender 为 0。
  3. 否则,如果 accentunder 属性没有 不区分 ASCII 大小写地匹配 true, 则 UnderShift 等于UnderbarVerticalGap; 否则等于零。 UnderExtraAscender 为 UnderbarExtraDescender。

数学内容的行上升量是以下值中的最大值:

数学内容的行下降量是以下值中的最大值:

munder 基底的字母基线与字母基线对齐。 munder 下方标记的字母基线相对于字母基线 朝行下方偏移一段距离,该距离等于 munder 基底的 外边距盒的墨迹行下降量 + UnderShift。

数学内容盒放置在 内容盒内,使它们的块起始边缘 对齐,并且这些边缘的中点位于相同 位置。

3.4.2.4 带上方标记的基底

<mover> 元素按照 图 21所示进行布局。 如果mover 基底 是具有 largeop 属性的修饰运算符, 则 LargeOpItalicCorrection 为其斜体校正,否则为 0。

图 21 <mover> 元素的盒模型

数学内容的最小内容行内大小(相应地为最大内容行内大小) 按照下面数学内容行内大小的方式计算, 但将 mover 基底的外边距盒和mover 上方标记的外边距盒的 行内大小替换为 mover 基底的外边距盒和mover 上方标记的外边距盒的 最小内容行内大小(相应地为最大内容行内大小)。

使用沿 行内轴拉伸运算符的算法 对流内子元素进行布局。

TopAccentAttachment 为 mover 上方标记的 顶部重音附着点;如果未定义, 则为mover 上方标记的外边距 盒的行内大小的一半。

数学内容的行内大小通过 应用沿 行内轴拉伸运算符的算法进行 布局,并确定以下两项之间的绝对差值来计算:

如果 m 是上面第二项中计算出的最小值,则 mover 基底的行内偏移 为 −m − 基底外边距的行内大小的一半。 mover 上方标记的行内偏移为 −m − mover 上方标记的外边距 盒的行内大小的一半 + LargeOpItalicCorrection 的一半。

参数 OverShift 和 OverExtraDescender 按以下顺序考虑三种情况来确定:

  1. mover 基底是具有 largeop 属性的 修饰运算符。 OverShift 是以下值中的最大值:

    OverExtraAscender 为 0。

  2. mover 基底是具有 stretchy 属性且 拉伸轴为行内的 修饰运算符。 OverShift 是以下值中的最大值:

    OverExtraDescender 为 0。
  3. 否则,OverShift 等于以下第一个适用值:

    1. 如果 accent 属性没有 不区分 ASCII 大小写地匹配 true, 则为 OverbarVerticalGap。
    2. 或者,如果 AccentBaseHeight 减去 mover 基底的外边距盒的行上升量 所得差值为非负值,则为该差值。
    3. 否则为 0。

    OverExtraAscender 为 OverbarExtraAscender。

注
对于重音上方标记,以及行上升量不超过 AccentBaseHeight 的基底, [OPEN-FONT-FORMAT] [TEXBOOK] 中的规则实际上是使 上方标记与基底的 字母基线对齐。这假定 重音字形的设计使其墨迹底部 大致位于其字母基线上方 AccentBaseHeight 的位置。因此, 前述规则将确保所有上方标记的底部 对齐,同时仍避免与基底发生碰撞。 然而,MathML 可以具有任意重音上方标记,因此 上文提供了一个更通用且更简单的规则:确保 上方标记的底部至少位于基底字母基线上方 AccentBaseHeight 的位置。

数学内容的行上升量是以下值中的最大值:

数学内容的行下降量是以下值中的最大值:

mover 基底的字母基线与字母基线对齐。 mover 上方标记的字母基线相对于字母基线 朝行上方偏移一段距离,该距离等于 基底的墨迹行上升量 + OverShift。

数学内容盒放置在 内容盒内,使它们的块起始边缘 对齐,并且这些边缘的中点位于相同 位置。

3.4.2.5 带 下方标记和上方标记的基底

<munderover> 的一般布局如 图 22所示。 LargeOpItalicCorrection、 UnderShift、 UnderExtraDescender、 OverShift、 OverExtraDescender 参数 按照 3.4.2.3 带 下方标记的基底和 3.4.2.4 带 上方标记的基底中的相同方式计算。

图 22 <munderover> 元素的盒模型

数学内容的最小内容行内大小、最大内容行内大小 和行内大小 计算为最大行内偏移与最小行内 偏移之间的绝对差值。 这些极值通过取 3.4.2.3 带 下方标记的基底和 3.4.2.4 带 上方标记的基底中计算出的相应极值的极值来计算。 munderover 基底、 munderover 下方标记和 munderover 上方标记的 行内偏移 按照这些节中的方式计算,但使用 新的最小值 m(相应最小值中的最小值)。

与这些节中一样,使用 沿 行内轴拉伸运算符的算法 对流内子元素进行布局。

数学内容的行上升量和行下降量 也通过取 3.4.2.3 带 下方标记的基底和 3.4.2.4 带 上方标记的基底中计算出的极值的极值来计算。

最后, munderover 基底、 munderover 下方标记和 munderover 上方标记的 字母基线 按照 3.4.2.3 带 下方标记的基底和 3.4.2.4 带 上方标记的基底中的方式计算。

数学内容盒放置在 内容盒内,使它们的块起始边缘 对齐,并且这些边缘的中点位于相同 位置。

注

当下方标记(相应地为上方标记)是空 盒时,基底和上方标记(相应地为下方标记)的布局 类似于 3.4.2.4 带 上方标记的基底 (相应地为3.4.2.3 带下方标记的基底), 但空下方标记(相应地为 上方标记)的位置可能会增加额外空白。 为保持算法简单,不会尝试 以特殊方式处理空标记。

3.4.3 前置标记和张量索引 <mmultiscripts>

前置下标和张量表示法由 mmultiscripts 元素表示。 mprescripts 元素 用作后置标记和前置标记之间的分隔符。 这两个元素接受 2.1.3 全局属性中描述的属性。

以下示例展示了前置标记 和后置标记的基本用法,其中涉及 mprescripts。 在不渲染标记的位置使用空的 mrow 元素。 font-size 会在标记内部自动缩小。

<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 示例

如果 <mmultiscripts> 或 <mprescripts> 元素的计算 display 属性不等于 block math 或 inline math, 则按照描述相应值的 CSS 规范 对它们进行布局。 否则,执行以下布局。

<mprescripts> 元素按照 mrow 元素进行布局。

有效的 <mmultiscripts> 元素包含以下 流内子元素:

  • 第一个流内子元素,称为 mmultiscripts 基底,它不是 mprescripts 元素。
  • 后跟偶数个流内子元素,称为 mmultiscripts 后置标记,其中没有任何一个是 mprescripts 元素。 这些标记形成一个(可能为空的)列表: 下标、上标、下标、上标、 下标、上标,等等。 每一对连续的下标、上标子元素 称为 下标/上标对。
  • 其后可选地跟随 一个 mprescripts 元素和 偶数个流内子元素,称为 mmultiscripts 前置标记,其中没有任何一个是 mprescripts 元素。 这些标记形成一个(可能为空的) 下标/上标对列表。

如果 <mmultiscripts> 元素无效,则 按照与 mrow 元素相同的方式布局。 否则,按照 3.4.3.1 带前置标记和后置标记的基底中的方式执行布局算法。

3.4.3.1 带 前置标记和后置标记的基底

<mmultiscripts> 元素按照 图 23所示进行布局。 对于 mmultiscripts 后置标记的每个下标/上标对, ItalicCorrection 和 LargeOpItalicCorrection 按照 3.4.1.2 带 下标的基底 和3.4.1.3 带 上标的基底中的方式定义。

图 23 <mmultiscripts> 元素的盒模型

数学内容的 最小内容行内大小(相应地为最大内容行内大小) 按照下面数学内容行内大小的相同方式计算, 但对于 mmultiscripts 基底的 外边距盒和标记的外边距盒, 将“行内大小”替换为“最小内容行内大小” (相应地为“最大内容行内大小”)。

如果存在行内拉伸大小 约束或 块拉伸大小约束, 则mmultiscripts 基底 也使用相同的拉伸大小约束进行布局。 否则,在没有任何拉伸 大小约束的情况下进行布局。其他元素始终在没有 任何拉伸大小约束的情况下进行布局。

数学内容的行内大小 使用以下算法计算:

  1. 将 inline-offset 设置为 0。
  2. 对于mmultiscripts 前置标记的每个下标/上标对, 将 inline-offset 增加 SpaceAfterScript + 以下值中的最大值:

  3. 将 inline-offset 增加 mmultiscripts 基底的外边距盒的行内大小, 并将 inline-size 设置为 inline-offset。
  4. 对于mmultiscripts 后置标记的每个下标/上标对, 修改 inline-size,使其至少为:

    将 inline-offset 增加以下值中的最大值:

    将 inline-offset 增加 SpaceAfterScript。

  5. 返回 inline-size。

SubShift(相应地为 SuperShift) 通过取每个 下标/上标对的所有下标偏移 (相应地为上标偏移)的最大值来计算,如 3.4.1.4 带下标和上标的基底中所述。

数学内容的行上升量 通过取每个 下标/上标对的所有行上升量 的最大值来计算,如 3.4.1.4 带下标和上标的基底中所述, 但使用上面计算出的 SubShift 和 SuperShift 值。

数学内容的行下降量 通过取每个 下标/上标对的所有行下降量 的最大值来计算,如 3.4.1.4 带下标和上标的基底中所述, 但使用上面计算出的 SubShift 和 SuperShift 值。

最后,使用 以下算法放置流内子元素:

  1. 将 inline-offset 设置为 0。
  2. 对于mmultiscripts 前置标记的每个下标/上标对:

    1. 将 inline-offset 增加 SpaceAfterScript。
    2. 将 pair-inline-size 设置为以下值中的最大值:
    3. 将下标放置在行内起始位置 inline-offset + pair-inline-size − 下标的外边距盒的行内大小处。
    4. 将上标放置在行内起始位置 inline-offset + pair-inline-size − 上标的外边距盒的行内大小处。
    5. 放置下标(相应地为上标),使其 字母基线 相对于字母 基线偏移 SubShift(相应地为 SuperShift), 朝行下方(相应地为行上方)。
    6. 将 inline-offset 增加 pair-inline-size。
  3. 将mmultiscripts 基底 和 <mprescripts> 盒 放置在行内偏移 inline-offset 处,并使其字母基线 与字母基线对齐。
  4. 对于mmultiscripts 后置标记的每个下标/上标对:

    1. 将 pair-inline-size 设置为以下值中的最大值:
    2. 将下标 放置在行内起始位置 inline-offset − LargeOpItalicCorrection 处。
    3. 将上标 放置在行内起始位置 inline-offset + ItalicCorrection 处。
    4. 放置下标(上标),使其字母基线 相对于字母 基线偏移 SubShift(相应地为 SuperShift), 朝行下方(相应地为行上方)。
    5. 将 inline-offset 增加 pair-inline-size。
    6. 将 inline-offset 增加 SpaceAfterScript。
注

仅具有 mmultiscripts 后置标记的一个 下标/上标对的 <mmultiscripts> 与具有相同流内子元素的 <msubsup> 采用相同方式布局。 然而,如 针对 <msubsup> 所指出的, 如果下标(相应地为上标)还是 空盒,则其布局不一定与 <msub> (相应地为 <msup>)元素相同。 为保持算法简单,不会尝试 以特殊 方式处理空标记。

3.4.4 标记中的 displaystyle、scriptlevel 和 math-shift

对于所有带标记元素,经验规则是将 displaystyle 设置为 false,并 在除第一个子元素之外的所有子 元素中增加 scriptlevel。 然而,一个 mover (相应地, munderover) 元素,如果其 accent 属性 不区分 ASCII 大小写地 匹配 true,则不会在 其第二个子元素(相应地为第三个子元素)中增加 scriptlevel。类似地, mover 和 munderover 元素, 如果其 accentunder 属性 不区分 ASCII 大小写地 匹配 true,则不会在 其第二个子元素中增加 scriptlevel。

<mmultiscripts> 会在位于 mprescripts 之前的偶数位置子元素上,将 math-shift 设置为 compact; 对于位于 mprescripts 之后的子元素,则在奇数位置 设置。 <msub> 和 <msubsup> 元素会在其第二个子元素上将 math-shift 设置为 compact。 mover 和 munderover 元素,如果其 accent 属性 不区分 ASCII 大小写地 匹配 true,也会在其第一个子元素内将 math-shift 设置为 compact。

为了实现此行为, A. 用户代理 样式表必须包含以下 样式:

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 规则本质上会自动对标记进行 displaystyle 和 scriptlevel 更改;并对 下标以及有时对基底进行 math-shift 更改。

3.5 表格式数学

矩阵、数组和其他类似表格的数学表示法使用 mtable mtr mtd 元素进行标记。这些元素类似于 [HTML] 中的 table、 tr 和 td 元素。

以下示例展示了如何使用表格式布局编写 矩阵。请注意,它在垂直方向与分数 线和等号中部居中对齐。

<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>
表格示例

3.5.1 表格或矩阵 <mtable>

mtable 按照 inline-table 进行布局,并将 displaystyle 设置为 false。为了实现这些属性, 用户代理样式表必须包含 以下规则:

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

mtable 元素作为 CSS 表格, 并相应地确定 最小内容行内大小、最大内容行内大小、 行内大小、块大小、 第一基线集和最后基线集。 表格的中心与数学轴对齐。

<mtable> 接受 2.1.3 全局 属性中描述的属性。

3.5.2 表格或矩阵中的行 <mtr>

mtr 按照 table-row 进行布局。为了实现该行为, 用户代理样式表必须包含 以下规则:

mtr {
  display: table-row;
}

<mtr> 接受 2.1.3 全局 属性中描述的属性。

3.5.3 表格或矩阵中的单元格 <mtd>

mtd 按照 table-cell 进行布局,内容在单元格中居中,并且 具有默认内边距。 用户代理样式表必须包含 以下规则:

mtd {
  display: table-cell;
  /* 表格单元格内的居中应依赖盒对齐属性。
     请参阅 https://github.com/w3c/mathml-core/issues/156 */
  text-align: center;
  padding: 0.5ex 0.4em;
}

<mtd> 接受 2.1.3 全局属性 中描述的属性,以及以下属性:

columnspan(相应地为 rowspan)属性具有与 [HTML] 中 <td> 元素上的 colspan (相应地为 rowspan) 属性相同的语法和语义。 特别是,这些属性的解析按照 处理 行的算法中的描述进行,始终将“colspan”读取为 “columnspan”。

注
[MathML3] 以及更早版本中的跨列属性名称为 columnspan,出于向后兼容性 原因而予以保留。

<mtd> 元素 生成一个匿名 <mrow> 盒。

3.6 使表达式可交互

从历史上看, maction 元素提供了一种 将操作绑定到表达式的机制。

<maction> 元素接受 2.1.3 全局属性中描述的属性, 以及以下 属性:

本规范未定义任何 actiontype 和 selection 属性特有的可观察行为。

以下示例展示了 [MathML3] 中的“toggle”操作类型,其中渲染器交替显示所选子表达式, 从“三分之一”开始,并在单击所选子表达式时 依次循环显示它们(“四分之一”、“二分之一”、 “三分之一”等)。这不属于 MathML Core,但可以 使用 JavaScript 和 CSS polyfill 实现。默认行为 只是渲染第一个子元素。

<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 示例

<maction> 元素的布局算法 与 <mrow> 元素相同。 为了隐藏除 第一个子元素之外的所有子元素, 用户代理样式表 必须包含以下规则, 这是旧版 actiontype 值的默认行为:

maction > :not(:first-child) {
  display: none;
}
注
实现 <maction> 是为了与完整 MathML 保持兼容。仅以 MathML Core 为目标的作者应使用其他 HTML、CSS 和 JavaScript 机制来实现 自定义操作。他们可以 使用 [MathML3] 中定义的 maction 属性。

3.7 语义和表现

semantics 元素是将 注释与 MathML 表达式关联起来的容器元素。通常, <semantics> 元素的第一个子元素是 要注释的 MathML 表达式,而后续子元素 表示 annotation 元素中的文本注释,或 annotation-xml 元素中的更复杂标记注释。

以下示例展示了如何为分数“二分之一” 添加文本注释(LaTeX)或 XML 注释 (内容 MathML),这些注释并不打算由 用户代理渲染。该分数还使用等价的 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 示例

<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 渲染替代注释,例如:
/* 隐藏被注释的子元素。 */
semantics > :first-child { display: none; }
 /* 显示所有文本注释。 */
semantics > annotation { display: inline; }
/* 显示所有 HTML 注释。 */
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 值

来自 CSS 显示模块第 3 级 的 display 属性 扩展了一个新的内部显示类型:

名称: display
新值: <display-outside> || [ <display-inside> | math ]

对于不是MathML 元素的元素,如果指定的 display 值为 block math 或 inline math,则计算值分别为 block flow 和 inline flow。 对于 mtable 元素, 计算值分别为 block table 和 inline table。 对于 mtr 元素,计算值 为 table-row。 对于 mtd 元素,计算值 为 table-cell。

计算 display 值等于 block math 或 inline math 的MathML 元素 根据其标签名控制盒的生成和布局,如 相关章节中所述。 未知 MathML 元素 的行为与 mrow 元素相同。

注
display: block math 和 display: inline math 值为 MathML 元素提供默认 布局,同时允许 使用原生 display 值或 自定义值覆盖它。 这使作者或 polyfill 能够定义自己的自定义表示法, 以调整或扩展 MathML Core。

在以下示例中, 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 示例

4.2 math-auto 变换

来自 CSS 文本模块第 4 级 的 text-transform 属性 新增了一个值 math-auto。 对于包含单个字符的文本节点,如果计算值 为 math-auto,并且该字符存在于 C.1 italic 映射的“Original”列中, 则将其转换为“italic” 列中的相应字符。

一种常见的样式惯例是将 包含多个字母的标识符(例如函数名“exp”) 以正常样式渲染,而将仅包含一个字母的标识符 (例如变量“n”)以斜体样式渲染。 math-auto 属性旨在实现这种 默认行为,如有必要,作者可以覆盖它。 请注意,数学字体设计有一种特殊类型的 斜体字形,它们位于 C.1 italic 映射的 Unicode 位置, 与通过斜体字体样式获得的字形塑造不同。 比较这个 使用 Latin Modern Math 字体渲染的数学公式, 左侧使用 font-style: italic, 右侧使用 text-transform: math-auto:

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

4.3 math-style 属性

名称: math-style
值: normal | compact
初始值: normal
适用于: 所有元素
继承: 是
百分比: 不适用
计算值: 指定的关键字
规范顺序: 不适用
动画类型: 不可动画
媒体: 视觉

当 math-style 为 compact 时, 后代的数学布局会尝试通过 应用以下规则来最小化 逻辑高度:

以下示例展示了一个 数学公式,其 math 根元素分别设置为 math-style: compact(左)和 math-style: normal(右)。 在前一种情况下,font-size 会在 分数内部自动缩小,并且求和极限会渲染为 ∑ 的下标和上标。在后一种情况下,∑ 会 绘制得比普通文本更大,并且 分数内部的垂直间隙(即使相对于当前 font-size)也更大。

math-style 示例

这两个 math-style 值通常分别对应于 行内模式和显示模式下的数学表达式 [TeXBook]。 显示模式下的数学公式 可能会在某些子公式中自动切换到行内模式 (例如标记、矩阵元素、分子和分母等), 有时需要覆盖此默认行为。 math-style 属性使得可以在 用户代理样式表 中配合 displaystyle 属性轻松为 MathML 实现这些 功能;同时也将 它们公开给 polyfill。

4.4 math-shift 属性

名称: math-shift
值: normal | compact
初始值: normal
适用于: 所有元素
继承: 是
百分比: 不适用
计算值: 指定的关键字
规范顺序: 不适用
动画类型: 不可动画
媒体: 视觉

如果 math-shift 的值为 compact,后代的数学布局将使用 superscriptShiftUpCramped 参数来放置 上标。 如果 math-shift 的值为 normal,数学布局 将改为使用 superscriptShiftUp 参数。

此属性用于在 MathML 带标记元素的布局期间定位上标。 请参阅 § 3.4.1 下标和上标 <msub>、<msup>、 <msubsup>、 3.4.3 前置标记和张量索引 <mmultiscripts>以及 3.4.2 下方标记和上方标记 <munder>、<mover>、 <munderover>。

在以下示例中,两个“x 的平方”都使用 compact math-style 和相同的 font-size 渲染。 然而,平方根中的那个使用 compact math-shift 渲染,而 另一个使用 normal math-shift 渲染,从而 导致上标“2”的偏移存在细微差异。

math-shift 示例

根据 [TeXBook], 数学公式默认使用 normal 样式,但可能会 在某些子公式中切换到 compact 样式(TeX 术语中的“cramped”) (例如根式、分数分母等)。 math-shift 属性使得可以在 用户代理样式表中轻松 为 MathML 实现这些规则。 页面作者或 polyfill 开发者也可以利用 对此属性的访问来调整或细化默认 实现。

4.5 math-depth 属性

引入新的 math-depth 属性,用于描述数学公式中每个元素 相对于该公式顶层容器的“深度”概念。 具体而言,它用于 在 font-size 属性的指定值为 math 时确定其计算值。

名称: math-depth
值: auto-add | add(<integer>) | <integer>
初始值: 0
适用于: 所有元素
继承: 是
百分比: 不适用
计算值: 一个整数,见下文
规范顺序: 不适用
动画类型: 不可动画
媒体: 视觉

math-depth 值的计算值 按如下方式确定:

如果 font-size 的指定值为 math,则 font-size 的计算值通过将继承的 font-size 值乘以由以下过程计算出的非零缩放因子得到:

  1. 令 A 为继承的 math-depth 值, B 为计算后的 math-depth 值, C 为 0.71,S 为 1.0
    • 如果 A = B,则返回 S。
    • 如果 B < A,则交换 A 和 B,并将 InvertScaleFactor 设置为 true。
    • 否则 B > A,并将 InvertScaleFactor 设置为 false。
  2. 令 E 为 B - A > 0。
  3. 如果继承的第一个可用字体具有 OpenType MATH 表:
  4. 将 S 乘以 CE。
  5. 如果 InvertScaleFactor 为 false,则返回 S,否则返回 1/S。

以下示例展示了一个 使用 normal math-style 和 Latin Modern Math 字体渲染的数学公式。 当进入标记或分数等子表达式时, font-size 会根据该字体中包含的 MATH 表值自动缩小。 请注意,进入上标时 font-size 会缩小, 但进入根式的前置标记时缩小得更快。此外,进入内部 分数时会缩小,而进入外部分数时不会, 这是由于分数中 math-style 会自动改变。

font-size-scriptlevel 示例

[TeXBook] 中的这些规则较为微妙,因此值得使用 独立的 math-depth 机制来表达和 处理它们。可以使用 用户代理样式表 在 MathML 中实现这些规则。 页面作者或 polyfill 开发者也可以利用 对此属性的访问来调整或细化默认 实现。特别是,MathML 中的 scriptlevel 属性 提供了一种执行 math-depth 更改的方式。

5. OpenType MATH 表

本章描述 OpenType 字体 [OPEN-FONT-FORMAT] 的 MATH 表所提供的功能。 在本章中, 使用类似 C 的表示法 Table.Subtable1[index].Subtable2.Parameter 来 表示 OpenType 参数。 此类参数可能不可用(例如字体缺少某个 子表、具有无效偏移等),因此提供了 回退选项。

注
强烈建议使用具有 正确 OpenType 功能的数学字体渲染 MathML。无法保证所提供的回退 选项能够提供足够好的渲染效果。

以设计单位表示的 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,如果 MATH.MathConstants.scriptScriptPercentScaleDown 为 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]。 为方便起见,使用以下定义:

  • omin 为 MATH.MathVariant.minConnectorOverlap。
  • 当且仅当 GlyphPartRecord.partFlags 设置了 fExtender 标志时, GlyphPartRecord 才是扩展器。
  • 如果 GlyphAssembly 是从 MathVariant.horizGlyphConstructionOffsets 获得的,则它是水平的。 否则它是垂直的(并从 MathVariant.vertGlyphConstructionOffsets 获得)。
  • 对于给定的 GlyphAssembly 表, NExt (相应地, NNonExt)是 GlyphAssembly.partRecords 中扩展器 (相应地为非扩展器)的数量。
  • 对于给定的 GlyphAssembly 表, SExt (相应地, SNonExt)是 GlyphAssembly.partRecords 中所有扩展器 (相应地为非扩展器)的 GlyphPartRecord.fullAdvance 之和。
  • SExt,NonOverlapping = SExt − omin NExt 是扩展器最大不重叠部分之和。

如果不满足以下条件,用户代理必须将 GlyphAssembly 视为无效:

  • NExt > 0。否则,组合无法 通过重复扩展器来增长。
  • SExt,NonOverlapping > 0。 否则,连接扩展器时组合不会增长。
  • 对于 GlyphAssembly.partRecords 中的每个 GlyphPartRecord, GlyphPartRecord.startConnectorLength 和 GlyphPartRecord.endConnectorLength 的值必须至少为 omin。 否则,无法满足 MathVariant.minConnectorOverlap 的条件。

在本规范中,通过将每个 扩展器重复 r 次,并在每个 字形之间使用相同的重叠值 o 来构建字形组合。 此类组合中的字形数量为 AssemblyGlyphCount(r) = NNonExt + r NExt,而 拉伸大小为 AssembySize(o, r) = SNonExt + r SExt − o (AssemblyGlyphCount(r) − 1)。

rmin 是 获得大小至少为 T 的组合所需的最少重复次数, 即满足 AssembySize(omin, r) ≥ T 的最小 r。 它定义为 0 与以下值向上取整结果之间的最大值: ((T − SNonExt + omin (NNonExt − 1)) / SExt,NonOverlapping)。

omax,theorical = (AssembySize(0, rmin) − T) / (AssemblyGlyphCount(rmin) − 1) 是通过将使用 零重叠构建的组合的额外大小均匀分配而得到的理论重叠值。

omax 是 通过将每个扩展器重复 rmin 次来构建 大小至少为 T 的组合时可能的 最大重叠值。 如果 AssemblyGlyphCount(rmin) ≤ 1,则 实际重叠值无关紧要。 否则,omax 定义为以下值中的最小值:

  • omax,theorical。
  • GlyphAssembly.partRecords 中所有 条目的 GlyphPartRecord.startConnectorLength, 如果最后一个条目不是扩展器,则将其排除。
  • GlyphAssembly.partRecords 中所有 条目的 GlyphPartRecord.endConnectorLength, 如果第一个条目不是扩展器,则将其排除。

对于目标大小 T, 字形组合拉伸大小 为 AssembySize(omax, rmin)。

字形 组合宽度、 字形 组合上升量 和 字形组合下降量 定义如下:

  • 如果 GlyphAssembly 是垂直的, 则宽度是 GlyphAssembly.partRecords 中所有 GlyphPartRecord 的 GlyphPartRecord.glyphID 所标识字形的最大前进宽度, 上升量是给定目标大小 T 的 字形组合拉伸大小, 下降量为 0。
  • 否则,GlyphAssembly 是水平的, 宽度为给定目标大小 T 的 字形组合拉伸大小,而 上升量(相应地为下降量)是 GlyphAssembly.partRecords 中所有 GlyphPartRecord 的 GlyphPartRecord.glyphID 所标识字形的 最大上升量(相应地为下降量)。

字形组合高度是 字形组合上升量和 字形组合下降量之和。

注
垂直字形组合的水平度量(相应地,水平字形组合的垂直度量) 不依赖于目标大小 T。

字形组合的塑造 使用以下算法执行:

  1. 计算 rmin 和 omax。
  2. 将 (x, y) 设置为 (0, 0), 将 RepetitionCounter 设置为 0,并将 PartIndex 设置为 -1。
  3. 重复以下步骤:
    1. 如果 RepetitionCounter 为 0:
      1. 递增 PartIndex。
      2. 如果 PartIndex 等于 GlyphAssembly.partCount, 则停止。
      3. 否则,将 Part 设置为 GlyphAssembly.partRecords[PartIndex]。 如果 Part 是扩展器,则将 RepetitionCounter 设置为 rmin,否则设置为 1。
      • 如果字形组合是水平的,则 绘制 ID 为 Part.glyphID 的字形,使其(左侧,基线)坐标 位于 (x, y)。 将 x 设置为 x + Part.fullAdvance − omax.
      • 否则(如果字形组合是垂直的), 则 绘制 ID 为 Part.glyphID 的字形,使其(左侧,底部)坐标 位于 (x, y)。 将 y 设置为 y − Part.fullAdvance + omax.
    2. 递减 RepetitionCounter。

5.3.2 字形 拉伸算法

沿 块轴拉伸的字形的首选行内大小 使用以下算法计算:

  1. 将 S 设置为字形的前进宽度。
  2. 如果给定字形在 MathVariants.vertGlyphConstructionOffsets 表中存在 MathGlyphConstruction 表:
    1. 对于 MathGlyphConstruction.mathGlyphVariantRecord 中的每个 MathGlyphVariantRecord, 确保 S 至少为 ID MathGlyphVariantRecord.variantGlyph 所标识字形的前进宽度。
    2. 如果存在有效的 GlyphAssembly 子表, 则确保 S 至少为 字形组合宽度。
  3. 返回 S。
注
沿 块轴拉伸的字形的首选行内大小将返回该字形所有可能 垂直构造中的最大宽度。 实际上,数学字体通常设计为使 垂直构造的宽度几乎恒定,因此对实际宽度可能产生的 高估很小。

将可拉伸字形塑造到行内 (相应地为块)尺寸 T 的算法 如下:

  1. 如果给定字形在 MathVariants.horizGlyphConstructionOffsets 表(相应地为 MathVariants.vertGlyphConstructionOffsets 表)中不存在任何 MathGlyphConstruction 表, 则以失败退出。
  2. 如果字形的前进宽度 (相应地为高度)至少为 T, 则对该字形使用正常塑造和边界框, 并使用该字形的 MathItalicsCorrectionInfo 作为 斜体校正,然后以成功退出。
  3. 遍历 MathGlyphConstruction.mathGlyphVariantRecord 中的 MathGlyphVariantRecord 列表。 如果某个 MathGlyphVariantRecord.advanceMeasurement 至少为 T,则对 MathGlyphVariantRecord.variantGlyph 使用正常塑造和边界框, 并使用该字形的 MathItalicsCorrectionInfo 作为 斜体校正,然后以成功退出。
  4. 如果存在有效的 GlyphAssembly 子表, 则使用由 字形组合宽度、 字形组合高度、 字形组合上升量、 字形组合下降量给出的边界框,并将 GlyphAssembly.italicsCorrection 值作为斜体 校正,执行字形 组合的塑造,然后 以成功退出。
  5. 如果上述拉伸选项都无法覆盖目标 大小 T,则选择最后尝试的那个选项并以 成功退出。
注
如果字体未提供可拉伸构造的表,用户 代理可以使用自身的内部构造作为回退, 例如 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;
  /* 表格单元格内的居中应依赖盒对齐属性。
     请参阅 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. 如果作为 UTF-16 字符串的 Content 的长度 既不是 1 也不是 2,则以类别 Default 退出。
  2. 如果 Content 是 U+0320–U+03FF 范围内的单个字符, 则以类别 Default 退出。否则, 如果它有两个字符:
    • 如果 Content 是与 U+1EEF0 ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL 或 U+1EEF1 ARABIC MATHEMATICAL OPERATOR HAH WITH DAL 对应的代理项对,并且 Form 为 postfix,则以类别 I 退出。
    • 如果第二个字符是 U+0338 COMBINING LONG SOLIDUS OVERLAY 或 U+20D2 COMBINING LONG VERTICAL LINE OVERLAY,则将 Content 替换为第一个字符,并转到步骤 3。
    • 否则,如果 Content 列在 Operators_2_ascii_chars 中,则 将 Content 替换为 Unicode 字符 “U+0320 加上 Content 在 Operators_2_ascii_chars 中的索引”,并转到步骤 3。
    • 否则,以类别 Default 退出。
  3. 如果 Form 为 infix 且 Content 对应于 U+007C VERTICAL LINE 或 U+223C TILDE OPERATOR 之一,则以 类别 ForceDefault 退出。如果由表 图 25 给出的(Content、Form)类别 在表 图 26 中具有 N/A 编码 (即类别为 L 或 M),则 以该类别退出。 否则:
    • 如果 Content 位于 U+0000–U+03FF 范围内,则将 Key 设置为 Content; 如果位于 U+2000–U+2BFF 范围内,则设置为 Content − 0x1C00。 否则,以 类别 Default 退出。
    • 根据 Form 分别为 infix、prefix、 postfix,向 Key 加上 0x0000、0x1000、0x2000。
    • 断言:Key 至多为 0x2FFF。
    • 在表 图 27 中搜索一个 Entry, 使得 Entry % 0x4000 等于 Key。如果找到,则返回 图 26中 与编码 Entry / 0x1000 对应的类别。 否则,返回类别 Default。
特殊表 条目
Operators_2_ascii_chars 18 个条目(2 字符 ASCII 字符串): '!!', '!=', '&&', '**', '*=', '++', '+=', '--', '-=', '->', '//', '/=', ':=', '<=', '<>', '==', '>=', '||',
Operators_fence 61 个条目(16 个 Unicode 范围): [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) 键 类别
313 个条目(35 个 Unicode 范围),infix 形式: [U+2190–U+2195], [U+219A–U+21AE], [U+21B0–U+21B5], {U+21B9}, [U+21BC–U+21D5], [U+21DA–U+21F0], [U+21F3–U+21FF], {U+2794}, {U+2799}, [U+279B–U+27A1], [U+27A5–U+27A6], [U+27A8–U+27AF], {U+27B1}, {U+27B3}, {U+27B5}, {U+27B8}, [U+27BA–U+27BE], [U+27F0–U+27F1], [U+27F4–U+27FF], [U+2900–U+2920], [U+2934–U+2937], [U+2942–U+2975], [U+297C–U+297F], [U+2B04–U+2B07], [U+2B0C–U+2B11], [U+2B30–U+2B3E], [U+2B40–U+2B4C], [U+2B60–U+2B65], [U+2B6A–U+2B6D], [U+2B70–U+2B73], [U+2B7A–U+2B7D], [U+2B80–U+2B87], {U+2B95}, [U+2BA0–U+2BAF], {U+2BB8}, A
108 个条目(31 个 Unicode 范围),infix 形式: {U+002B}, {U+002D}, {U+00B1}, {U+00F7}, {U+0322}, {U+2044}, [U+2212–U+2216], [U+2227–U+222A], {U+2236}, {U+2238}, [U+228C–U+228E], [U+2293–U+2296], {U+2298}, [U+229D–U+229F], [U+22BB–U+22BD], [U+22CE–U+22CF], [U+22D2–U+22D3], [U+2795–U+2797], {U+29B8}, {U+29BC}, [U+29C4–U+29C5], [U+29F5–U+29FB], [U+2A1F–U+2A2E], [U+2A38–U+2A3A], {U+2A3E}, [U+2A40–U+2A4F], [U+2A51–U+2A63], {U+2ADB}, {U+2AF6}, {U+2AFB}, {U+2AFD}, B
64 个条目(33 个 Unicode 范围),infix 形式: {U+0025}, {U+002A}, {U+002E}, [U+003F–U+0040], {U+005E}, {U+00B7}, {U+00D7}, {U+0323}, {U+032E}, {U+2022}, {U+2043}, [U+2217–U+2219], {U+2240}, {U+2297}, [U+2299–U+229B], [U+22A0–U+22A1], {U+22BA}, [U+22C4–U+22C7], [U+22C9–U+22CC], [U+2305–U+2306], {U+27CB}, {U+27CD}, [U+29C6–U+29C8], [U+29D4–U+29D7], {U+29E2}, [U+2A1D–U+2A1E], [U+2A2F–U+2A37], [U+2A3B–U+2A3D], {U+2A3F}, {U+2A50}, [U+2A64–U+2A65], [U+2ADC–U+2ADD], {U+2AFE}, C
52 个条目(22 个 Unicode 范围),prefix 形式: {U+0021}, {U+002B}, {U+002D}, {U+00AC}, {U+00B1}, {U+0331}, {U+2018}, {U+201C}, [U+2200–U+2201], [U+2203–U+2204], {U+2207}, [U+2212–U+2213], [U+221F–U+2222], [U+2234–U+2235], {U+223C}, [U+22BE–U+22BF], {U+2310}, {U+2319}, [U+2795–U+2796], {U+27C0}, [U+299B–U+29AF], [U+2AEC–U+2AED], D
40 个条目(21 个 Unicode 范围),postfix 形式: [U+0021–U+0022], [U+0025–U+0027], {U+0060}, {U+00A8}, {U+00B0}, [U+00B2–U+00B4], [U+00B8–U+00B9], [U+02CA–U+02CB], [U+02D8–U+02DA], {U+02DD}, {U+0311}, {U+0320}, {U+0325}, {U+0327}, {U+0331}, [U+2019–U+201B], [U+201D–U+201F], [U+2032–U+2037], {U+2057}, [U+20DB–U+20DC], {U+23CD}, E
30 个条目,prefix 形式: U+0028, U+005B, U+007B, U+007C, U+2016, U+2308, U+230A, U+2329, U+2772, U+27E6, U+27E8, U+27EA, U+27EC, U+27EE, U+2980, U+2983, U+2985, U+2987, U+2989, U+298B, U+298D, U+298F, U+2991, U+2993, U+2995, U+2997, U+2999, U+29D8, U+29DA, U+29FC, F
30 个条目,postfix 形式: U+0029, U+005D, U+007C, U+007D, U+2016, U+2309, U+230B, U+232A, U+2773, U+27E7, U+27E9, U+27EB, U+27ED, U+27EF, U+2980, U+2984, U+2986, U+2988, U+298A, U+298C, U+298E, U+2990, U+2992, U+2994, U+2996, U+2998, U+2999, U+29D9, U+29DB, U+29FD, G
27 个条目(2 个 Unicode 范围),prefix 形式: [U+222B–U+2233], [U+2A0B–U+2A1C], H
22 个条目(13 个 Unicode 范围),postfix 形式: [U+005E–U+005F], {U+007E}, {U+00AF}, [U+02C6–U+02C7], {U+02C9}, {U+02CD}, {U+02DC}, {U+02F7}, {U+0302}, {U+203E}, [U+2322–U+2323], [U+23B4–U+23B5], [U+23DC–U+23E1], I
22 个条目(6 个 Unicode 范围),prefix 形式: [U+220F–U+2211], [U+22C0–U+22C3], [U+2A00–U+2A0A], [U+2A1D–U+2A1E], {U+2AFC}, {U+2AFF}, J
8 个条目(5 个 Unicode 范围),infix 形式: {U+002F}, {U+005C}, {U+005F}, [U+2061–U+2064], {U+2206}, K
6 个条目(3 个 Unicode 范围),prefix 形式: [U+2145–U+2146], {U+2202}, [U+221A–U+221C], L
3 个条目,infix 形式:U+002C, U+003A, U+003B, M
图 25 从运算符 (Content, Form) 到类别的映射。
总大小:725 个条目,639 字节
(假定字符为 UTF-16, 范围长度为 1 字节)。
类别 Form 编码 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 infix 0x0 0.2777777777777778em 0.2777777777777778em stretchy
B infix 0x4 0.2222222222222222em 0.2222222222222222em N/A
C infix 0x8 0.16666666666666666em 0.16666666666666666em N/A
D prefix 0x1 0 0 N/A
E postfix 0x2 0 0 N/A
F prefix 0x5 0 0 stretchy symmetric
G postfix 0x6 0 0 stretchy symmetric
H prefix 0x9 0.16666666666666666em 0.16666666666666666em symmetric largeop
I postfix 0xA 0 0 stretchy
J prefix 0xD 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
K infix 0xC 0 0 N/A
L prefix N/A 0.16666666666666666em 0 N/A
M infix N/A 0 0.16666666666666666em N/A
图 26 每个 类别的运算符值。
第三列提供类别的 4 位编码
,其中最低的 2 位分别编码 form:infix (0)、prefix (1) 和 postfix (2)。
716 个条目(236 个长度至多为 16 的范围): {0x8025}, {0x802A}, {0x402B}, {0x402D}, {0x802E}, {0xC02F}, [0x803F–0x8040], {0xC05C}, {0x805E}, {0xC05F}, {0x40B1}, {0x80B7}, {0x80D7}, {0x40F7}, {0x4322}, {0x8323}, {0x832E}, {0x8422}, {0x8443}, {0x4444}, [0xC461–0xC464], [0x0590–0x0595], [0x059A–0x05A9], [0x05AA–0x05AE], [0x05B0–0x05B5], {0x05B9}, [0x05BC–0x05CB], [0x05CC–0x05D5], [0x05DA–0x05E9], [0x05EA–0x05F0], [0x05F3–0x05FF], {0xC606}, [0x4612–0x4616], [0x8617–0x8619], [0x4627–0x462A], {0x4636}, {0x4638}, {0x8640}, [0x468C–0x468E], [0x4693–0x4696], {0x8697}, {0x4698}, [0x8699–0x869B], [0x469D–0x469F], [0x86A0–0x86A1], {0x86BA}, [0x46BB–0x46BD], [0x86C4–0x86C7], [0x86C9–0x86CC], [0x46CE–0x46CF], [0x46D2–0x46D3], [0x8705–0x8706], {0x0B94}, [0x4B95–0x4B97], {0x0B99}, [0x0B9B–0x0BA1], [0x0BA5–0x0BA6], [0x0BA8–0x0BAF], {0x0BB1}, {0x0BB3}, {0x0BB5}, {0x0BB8}, [0x0BBA–0x0BBE], {0x8BCB}, {0x8BCD}, [0x0BF0–0x0BF1], [0x0BF4–0x0BFF], [0x0D00–0x0D0F], [0x0D10–0x0D1F], {0x0D20}, [0x0D34–0x0D37], [0x0D42–0x0D51], [0x0D52–0x0D61], [0x0D62–0x0D71], [0x0D72–0x0D75], [0x0D7C–0x0D7F], {0x4DB8}, {0x4DBC}, [0x4DC4–0x4DC5], [0x8DC6–0x8DC8], [0x8DD4–0x8DD7], {0x8DE2}, [0x4DF5–0x4DFB], [0x8E1D–0x8E1E], [0x4E1F–0x4E2E], [0x8E2F–0x8E37], [0x4E38–0x4E3A], [0x8E3B–0x8E3D], {0x4E3E}, {0x8E3F}, [0x4E40–0x4E4F], {0x8E50}, [0x4E51–0x4E60], [0x4E61–0x4E63], [0x8E64–0x8E65], {0x4EDB}, [0x8EDC–0x8EDD], {0x4EF6}, {0x4EFB}, {0x4EFD}, {0x8EFE}, [0x0F04–0x0F07], [0x0F0C–0x0F11], [0x0F30–0x0F3E], [0x0F40–0x0F4C], [0x0F60–0x0F65], [0x0F6A–0x0F6D], [0x0F70–0x0F73], [0x0F7A–0x0F7D], [0x0F80–0x0F87], {0x0F95}, [0x0FA0–0x0FAF], {0x0FB8}, {0x1021}, {0x5028}, {0x102B}, {0x102D}, {0x505B}, [0x507B–0x507C], {0x10AC}, {0x10B1}, {0x1331}, {0x5416}, {0x1418}, {0x141C}, [0x1600–0x1601], [0x1603–0x1604], {0x1607}, [0xD60F–0xD611], [0x1612–0x1613], [0x161F–0x1622], [0x962B–0x9633], [0x1634–0x1635], {0x163C}, [0x16BE–0x16BF], [0xD6C0–0xD6C3], {0x5708}, {0x570A}, {0x1710}, {0x1719}, {0x5729}, {0x5B72}, [0x1B95–0x1B96], {0x1BC0}, {0x5BE6}, {0x5BE8}, {0x5BEA}, {0x5BEC}, {0x5BEE}, {0x5D80}, {0x5D83}, {0x5D85}, {0x5D87}, {0x5D89}, {0x5D8B}, {0x5D8D}, {0x5D8F}, {0x5D91}, {0x5D93}, {0x5D95}, {0x5D97}, {0x5D99}, [0x1D9B–0x1DAA], [0x1DAB–0x1DAF], {0x5DD8}, {0x5DDA}, {0x5DFC}, [0xDE00–0xDE0A], [0x9E0B–0x9E1A], [0x9E1B–0x9E1C], [0xDE1D–0xDE1E], [0x1EEC–0x1EED], {0xDEFC}, {0xDEFF}, [0x2021–0x2022], [0x2025–0x2027], {0x6029}, {0x605D}, [0xA05E–0xA05F], {0x2060}, [0x607C–0x607D], {0xA07E}, {0x20A8}, {0xA0AF}, {0x20B0}, [0x20B2–0x20B4], [0x20B8–0x20B9], [0xA2C6–0xA2C7], {0xA2C9}, [0x22CA–0x22CB], {0xA2CD}, [0x22D8–0x22DA], {0xA2DC}, {0x22DD}, {0xA2F7}, {0xA302}, {0x2311}, {0x2320}, {0x2325}, {0x2327}, {0x2331}, {0x6416}, [0x2419–0x241B], [0x241D–0x241F], [0x2432–0x2437], {0xA43E}, {0x2457}, [0x24DB–0x24DC], {0x6709}, {0x670B}, [0xA722–0xA723], {0x672A}, [0xA7B4–0xA7B5], {0x27CD}, [0xA7DC–0xA7E1], {0x6B73}, {0x6BE7}, {0x6BE9}, {0x6BEB}, {0x6BED}, {0x6BEF}, {0x6D80}, {0x6D84}, {0x6D86}, {0x6D88}, {0x6D8A}, {0x6D8C}, {0x6D8E}, {0x6D90}, {0x6D92}, {0x6D94}, {0x6D96}, [0x6D98–0x6D99], {0x6DD9}, {0x6DDB}, {0x6DFD},
图 27 最大 类别的条目列表,按 key 排序。
Key 为 Entry % 0x4000,类别 编码为 Entry / 0x1000。
总大小:716 个条目,590 字节
(假定 范围长度使用 4 位)。
注
  • 图 25和 图 27中的表 被编码为范围,以利用大量 连续 Unicode 块的存在。
  • 为了在这些表中快速查找条目,仍可先对 范围起始位置执行二分查找,然后 对范围长度进行额外检查。
  • 由于 log 是凹函数, 对 图 27中的整个表执行一次二分查找, 比分别在 图 25的每个大型子表中进行查找 更高效。

Unicode 字符 c 的固有拉伸轴如果属于下方列表,则为行内。 否则,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 与具有 行内拉伸轴的运算符对应的 Unicode 码点排序列表。
总大小:246 个条目,492 字节(假定除 非 BMP 条目外均使用 16 位)。
注
固有拉伸轴可以作为运算符字典的布尔属性包含在内。 但由于它不依赖 form,而且只有极少数运算符能够沿 行内轴拉伸,因此最好将其实现为单独的 有序数组。如果 U+1EEF0 ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL 和 U+1EEF1 ARABIC MATHEMATICAL OPERATOR HAH WITH DAL 单独测试, 每个条目都可以使用 16 字节编码。

B.2 运算符字典 (人类可读)

本节为非规范性内容。

以下字典提供 B.1 运算符字典的 人类可读版本。 有关如何使用此字典,以及如何 确定共同作为字典索引的 Content 和 Form 值的说明,请参阅 3.2.4.2 基于字典的 属性。

rspace 和 lspace 的值 在相应列中指明。 stretchy、 symmetric、 largeop、 movablelimits 的值,如果它们列在“properties”列中,则为 true。

Content 拉伸轴 form lspace rspace properties
< 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
图 29 从运算符 (Content, Form) 到属性的映射。
总大小:1177 个条目,≥ 3679 字节
(假定 'Content' 至少使用一个 UTF-16 字符,'Stretch Axis' 使用 1 位,'Form' 使用 2 位,'rspace' 和 'space' 的不同组合 至少使用 3 位,属性的不同组合使用 3 位)。

B.3 组合字符 等价关系

本节为非规范性内容。

下表给出了 MathML 重音构造中使用的空格字符和非空格 字符之间的映射。

组合

非组合 样式 组合
U+002B 加号 下方 U+031F 下方组合加号
U+002D 连字符减号 上方 U+0305 组合上划线
U+002D 连字符减号 下方 U+0320 下方组合减号
U+002D 连字符减号 下方 U+0332 组合下划线
U+002E 句点 上方 U+0307 上方组合点
U+002E 句点 下方 U+0323 下方组合点
U+005E 扬抑符重音 上方 U+0302 组合扬抑符重音
U+005E 扬抑符重音 下方 U+032D 下方组合扬抑符重音
U+005F 下划线 下方 U+0332 组合下划线
U+0060 重音符 上方 U+0300 组合重音符
U+0060 重音符 下方 U+0316 下方组合重音符
U+007E 波浪号 上方 U+0303 组合波浪号
U+007E 波浪号 下方 U+0330 下方组合波浪号
U+00A8 分音符 上方 U+0308 组合分音符
U+00A8 分音符 下方 U+0324 下方组合分音符
U+00AF 长音符 上方 U+0304 组合长音符
U+00AF 长音符 上方 U+0305 组合上划线
U+00B4 尖音符 上方 U+0301 组合尖音符
U+00B4 尖音符 下方 U+0317 下方组合尖音符
U+00B8 软音符 下方 U+0327 组合软音符
U+02C6 修饰字母扬抑符重音 上方 U+0302 组合扬抑符重音
U+02C7 抑扬符 上方 U+030C 组合抑扬符
U+02C7 抑扬符 下方 U+032C 下方组合抑扬符
U+02D8 短音符 上方 U+0306 组合短音符
U+02D8 短音符 下方 U+032E 下方组合短音符
U+02D9 上方点 上方 U+0307 上方组合点
U+02D9 上方点 下方 U+0323 下方组合点
U+02DB 反尾形符 下方 U+0328 组合反尾形符
U+02DC 小波浪号 上方 U+0303 组合波浪号
U+02DC 小波浪号 下方 U+0330 下方组合波浪号
U+02DD 双尖音符 上方 U+030B 组合双尖音符
U+203E 上划线 上方 U+0305 组合上划线
U+2190 向左箭头 上方 U+20D6
U+2192 向右箭头 上方 U+20D7 上方组合向右箭头
U+2192 向右箭头 上方 U+20EF 下方组合向右箭头
U+2212 减号 上方 U+0305 组合上划线
U+2212 减号 下方 U+0332 组合下划线
U+27F6 长向右箭头 上方 U+20D7 上方组合向右箭头
U+27F6 长向右箭头 上方 U+20EF 下方组合向右箭头

非组合

组合 样式 非组合
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 句点
U+0307 上方组合点 上方 U+02D9 上方点
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 句点
U+0323 下方组合点 下方 U+02D9 上方点
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 下划线
U+0332 组合下划线 下方 U+2212 减号
U+0338 组合长斜线覆盖符 覆盖 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 中提供了 bold、italic、fraktur、monospace、double-struck 等形式的数学字母数字符号。

应使用这些字母数字 符号的 Unicode 码点来访问它们。 有时需要区分 MATHEMATICAL SCRIPT 字符的 Chancery 和 Roundhand 样式。 它们尤其用于 LaTeX 的 \mathcal 和 \mathscr 命令。 一种方法是依赖 Unicode 第 23.4 章“变体选择符”, 其中描述了一种 指定特定字形变体选择的方法 [UNICODE]。 实际上,来自 Unicode 字符数据库的 StandardizedVariants.txt 文件表明,变体选择符 U+FE00 和 U+FE01 可用于大写 script 字符,以分别指定 Chancery 和 Roundhand。

或者,一些 数学字体依赖 [OPEN-FONT-FORMAT] 中的 salt 或 ssXY 属性来 提供这两种样式。页面作者可以使用 font-variant-alternates 属性配合相应的 OpenType 字体特性 来访问这些字形。

此外,可以如上所述使用 CSS text-transform: math-auto 变换来访问 italic 数学字母数字字符,该变换默认应用于单字符 <mi> 元素。 为方便起见,下面给出到数学斜体的映射。

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。有关 为该规范作出贡献的人员,请参阅 [MathML3] 的 附录 E。

MathML Core 最初由 MathML 社区组开发,随后 由 Math 工作组开发。在本规范开发期间, 经常参加 MathML Core 会议的工作组或社区组 成员有: 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 事件处理器属性添加脚本执行机制。用户代理可以 决定阻止执行 这些属性中指定的脚本,并遵循与适用于 HTML 或 SVG 元素 相同的安全限制。

注

在 [MathML3] 中, 可以通过 href 或 xlink: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 容器。

攻击者可以通过插入非常大的 可拉伸运算符来尝试使用户代理挂起,实际上会使 字形组合的塑造算法处理 大量 字形。用户代理可以通过 将 rmin 和 GlyphAssembly.partCount 限制为 最大值来规避此问题。

如 CSS 字体模块中所述, 攻击者可以尝试依赖格式错误或恶意字体来 利用浏览器实现中潜在的安全缺陷。 由于本规范广泛使用 OpenType MATH 表, 用户代理应确保其字体 清理机制能够处理该表。

最后, 为了减少攻击面,一些用户代理会提供运行时选项 以禁用 Web 平台的一部分。禁用 MathML 布局 基本上可以通过 强制 DOM 树中的元素置于 HTML 命名空间,并禁用 4. 用于数学布局的 CSS 扩展来实现。

F. 隐私注意事项

本节为非规范性内容。

如 2.2.1 HTML 和 SVG中所述, MathML 可以通过 <foreignObject> 元素嵌入 SVG 图像,因此可用于 canvas 元素。 用户代理可以决定实施任何措施,以防止潜在的 信息泄露, 例如污染 canvas,并在尝试通过 JavaScript API 访问 canvas 内容时返回 “SecurityError”。

在以下示例中,canvas 图像被设置为 某些 MathML 内容的图像,其中包含一个指向 https://example.org/ 的 HTML 链接。 攻击者不应能够通过 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 (例如 嵌入 canvas 上下文的内容上的 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 衬线字体是否提供亚洲文字字形:

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

以下 HTML+CSS 文档包含使用 text-decoration-thickness 分别设置为 from-font 和 1em(此处为 100 像素) 渲染的相同文本。通过比较两条下划线的高度, 可以计算出 PostScript 表中 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 表中的信息来渲染 MathML 内容。可以使用 类似于上文针对 HTML+CSS+JavaScript 文档所述的测量 技术,对 MathConstants 和 MathGlyphInfo 中的大多数 布局参数获得良好的近似值。通过在 canvas 上下文中放置不同大小的可拉伸 运算符,也可以观察 MathML 渲染对 MathVariants 表的使用。

虽然这些参数单独来看都不是个人信息, 但实现本规范会增加暴露的 字体信息集合,攻击者可利用这些信息实现 指纹识别技术。通常,它们可以帮助确定 用户可用和首选的数学字体。

G. 一致性

一致性要求使用 描述性断言与 RFC 2119 术语的组合来表达。本文档规范性部分中的关键词“必须”、 “不得”、“要求”、“应当”、 “不应当”、“应该”、“不应该 ”、 “推荐”、“可以”和“可选”应按照 RFC 2119 中的说明进行解释。 不过,为了便于阅读,这些词在本规范中并非全部以大写 字母出现。

除明确标记为非规范性的章节、 示例和注释外,本规范的所有文本都是规范性的。 [RFC2119]

本规范中的示例以 “例如”等词引入,或使用 class="example" 与规范性文本分隔,如下所示:

这是一个资料性示例的例子。

资料性注释以“注”开头,并使用 class="note" 与规范性文本分隔,如下所示:

注

注,这是一个资料性注释。

建议事项是经过样式设置以引起特别注意的规范性章节, 并使用 <strong class="advisement"> 与其他规范性文本分隔,如下所示: 用户代理必须提供可访问的替代方案。

H. 参考文献

H.1 规范性参考文献

[CSS-CASCADE-4]
CSS 层叠与继承第 4 级。Elika Etemad;Tab Atkins Jr.。W3C。2022年1月13日。W3C 候选 推荐标准。URL:https://www.w3.org/TR/css-cascade-4/
[CSS-DISPLAY-3]
CSS 显示模块第 3 级。Elika Etemad;Tab Atkins Jr.。W3C。2023年3月30日。W3C 候选推荐标准。URL:https://www.w3.org/TR/css-display-3/
[CSS-POSITION-3]
CSS 定位布局模块第 3 级。Elika Etemad;Tab Atkins Jr.。W3C。2025年3月11日。W3C 工作草案。URL:https://www.w3.org/TR/css-position-3/
[CSS-TEXT-4]
CSS 文本模块第 4 级。Elika Etemad; Koji Ishii;Alan Stearns;Florian Rivoal。W3C。2024年5月29日。W3C 工作草案。URL:https://www.w3.org/TR/css-text-4/
[CSS-VALUES-4]
CSS 值与单位模块第 4 级。 Tab Atkins Jr.;Elika Etemad。W3C。2024年3月12日。W3C 工作草案。URL:https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-4]
CSS 书写模式第 4 级。 Elika Etemad;Koji Ishii。W3C。2019年7月30日。W3C 候选推荐标准。URL:https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
层叠样式表第 2 级修订版 1(CSS 2.1) 规范。Bert Bos;Tantek Çelik;Ian Hickson;Håkon Wium Lie。W3C。2011年6月7日。W3C 推荐标准。URL:https://www.w3.org/TR/CSS2/
[DOM]
DOM 标准。Anne van Kesteren。WHATWG。 现行标准。URL:https://dom.spec.whatwg.org/
[HTML]
HTML 标准。Anne van Kesteren; Domenic Denicola;Dominic Farolino;Ian Hickson;Philip Jägenstedt;Simon Pieters。WHATWG。现行 标准。URL:https://html.spec.whatwg.org/multipage/
[OPEN-FONT-FORMAT]
信息技术 — 视听对象编码 — 第 22 部分:开放字体格式。ISO/IEC。2019年1月。 已发布。URL:https://www.iso.org/standard/74461.html
[RFC2119]
RFC 中用于指示 要求级别的关键词。S. Bradner。IETF。1997年3月。当前最佳实践。URL:https://www.rfc-editor.org/rfc/rfc2119
[SELECT]
选择器第 3 级。Tantek Çelik;Elika Etemad;Daniel Glazman;Ian Hickson;Peter Linss;John Williams。W3C。2018年11月6日。W3C 推荐标准。URL:https://www.w3.org/TR/selectors-3/
[SVG]
可缩放矢量图形(SVG)1.0 规范。Jon Ferraiolo。W3C。2001年9月4日。W3C 推荐标准。URL:https://www.w3.org/TR/SVG/

H.2 资料性参考文献

[CSS-FONTS-4]
CSS 字体模块第 4 级。Chris Lilley。W3C。2024年2月1日。W3C 工作草案。URL:https://www.w3.org/TR/css-fonts-4/
[CSS-LAYOUT-API-1]
CSS Layout API 第 1 级。Greg Whitworth;Ian Kilpatrick;Tab Atkins Jr.;Shane Stephens;Robert O'Callahan;Rossen Atanassov。W3C。 2018年4月12日。FPWD。URL:https://www.w3.org/TR/css-layout-api-1/
[HOUDINI]
CSS-TAG Houdini 编辑草案。URL:https://drafts.css-houdini.org/
[MATHML3]
数学标记语言(MathML)3.0 版第 2 版。David Carlisle;Patrick D F Ion;Robert R Miner。W3C。2014年4月10日。W3C 推荐标准。URL:https://www.w3.org/TR/MathML3/
[MATHML4]
数学标记语言(MathML)4.0 版。David Carlisle 等。W3C 编辑草案。URL:https://w3c.github.io/mathml/
[OPEN-TYPE-MATH-ILLUMINATED]
OpenType Math 详解。Ulrik Vieth。2009。URL:https://www.tug.org/TUGboat/tb30-1/tb94vieth.pdf
[OPEN-TYPE-MATH-IN-HARFBUZZ]
HarfBuzz 中的 OpenType MATH。Frédéric Wang。URL:https://frederic-wang.fr/2016/04/16/opentype-math-in-harfbuzz/
[TEXBOOK]
TeXBook。Knuth, Donald E.。Addison-Wesley Professional。1984。
[UNICODE]
Unicode 标准。Unicode Consortium。URL:https://www.unicode.org/versions/latest/
[webidl]
Web IDL 标准。Edgar Chen;Timothy Gu。 WHATWG。现行标准。URL:https://webidl.spec.whatwg.org/
[xml-entity-names]
字符的 XML 实体定义(第 3 版)。Patrick D F Ion;David Carlisle。W3C。2023年3月7日。W3C 推荐标准。 URL:https://www.w3.org/TR/xml-entity-names/