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 (数学评论,美国数学会)
Robert Miner(已故) (Design Science公司)
反馈:
GitHub w3c/mathml-core (拉取请求, 新建议题, 开放议题)

摘要

本规范定义了数学标记语言(MathML)的核心子集,适用于浏览器实现。MathML是一种用于描述数学符号并捕捉其结构和内容的标记语言。MathML的目标是使数学能够像HTML处理文本一样,在万维网上被传递、接收和处理。

本文档状态

本节描述了本文件在发布时的状态。当前的W3C出版物列表和本技术报告的最新修订版本可在 W3C标准与草案索引中找到,网址为 https://www.w3.org/TR/。

本文件由数学工作组作为候选推荐快照使用 推荐规范流程发布。

作为候选推荐发布并不表示W3C及其成员认可。本候选推荐快照已完成 广泛评审,旨在收集 实现经验, 并获得工作组成员承诺给予实现 免付专利费的许可

本候选推荐预计不会早于2025年9月30日升级为提议推荐。

本文件由一个 W3C 专利政策框架下运作的组织产生。 W3C维护一个 公开专利披露列表 ,列出与小组成果相关的专利披露;该页面也包含 专利披露的说明。如某人确实知晓某专利且认为其包含 必要权利要求, 必须按 W3C专利政策第6章的要求进行披露。

本文件受 2023年11月3日W3C流程文件管理。

1. 简介

本节为非规范性内容。

[MATHML3] 规范存在若干缺陷,使得在网页渲染引擎间一致实现或用用户定义构造扩展变得困难,例如:

本 MathML Core 规范旨在通过尽可能精确地描述数学公式的可视渲染,结合来自 TeXBook 附录 G [TEXBOOK] 以及 Open Font Format [OPEN-FONT-FORMAT], [OPEN-TYPE-MATH-ILLUMINATED] 的附加规则来解决这些问题。它还依赖于现代浏览器实现和 Web 技术 [HTML] [SVG] [CSS2] [DOM],在必要时澄清与它们的交互或引入新的低级原语以改进 Web 平台分层。

MathML3 中不太适合在此框架中包含或不那么基础的部分已被省略。相反,它们在单独且更大的 [MATHML4] 规范中描述。哪些数学特性将包含在未来版本的 MathML Core 中或作为 polyfill 实现仍未确定。此问题和其他潜在改进在 GitHub 上跟踪

通过提高实现细节层级、聚焦可行的子集、遵循由浏览器驱动的设计并依赖自动化的 Web 平台测试,本规范预计将大幅提高 MathML 的互操作性。此外,对 MathML 分层的工作将使用户能够使用现代 Web 技术(例如 shadow treescustom elements 或来自 [HOUDINI] 的 API) 来实现 MathML4 的其余部分或更一般地扩展 MathML Core。

2. MathML 基础

2.1 元素和属性

术语 MathML 元素 指的是任何属于 MathML 命名空间 的元素。 本规范定义的 MathML 元素称为 MathML 核心元素,清单如下。 未在下述清单中的任何 MathML 元素称为 未知 MathML 元素

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

所谓 分组元素 包括 maction, math, merror, mphantom, mprescripts, mrow, mstyle, semantics 以及 未知 MathML 元素

所谓 脚本元素 包括 mmultiscripts, mover, msub, msubsup, msup, munder 以及 munderover

根元素mrootmsqrt

本规范中定义的属性不含命名空间,被称为 MathML 属性

2.1.1 顶级 <math> 元素

MathML 指定了一个唯一的顶级或根 math 元素,用于封装文档内的每个 MathML 标记实例。其他所有 MathML 内容 都必须包含在一个 <math> 元素内。

<math> 元素可以使用 2.1.3 全局属性 以及如下属性:

display 属性(如有), 必须为 ASCII 不区分大小写 匹配 blockinlineA. 用户代理样式表 中说明的用户代理样式表 包含针对该属性的规则,影响 displayblock mathinline math) 及 math-stylenormalcompact)属性的默认值。 若 display 属性不存在或值无效,用户代理样式表会按 inline 处理。

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

alttext 属性可被一些不实现数学布局的 传统系统作为替代文本使用。

如果 <math> 元素的计算 display 属性不为 block mathinline 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;">
  This mathematical formula with a big summation and the number pi
  <math display="block" style="border: 1px dotted black;">
    <mrow>
      <munderover>
        <mo></mo>
        <mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow>
        <mrow><mo>+</mo><mn></mn></mrow>
      </munderover>
      <mfrac>
        <mn>1</mn>
        <msup><mi>n</mi><mn>2</mn></msup>
      </mfrac>
    </mrow>
    <mo>=</mo>
    <mfrac>
      <msup><mi>π</mi><mn>2</mn></msup>
      <mn>6</mn>
    </mfrac>
  </math>
  is easy to prove.
</div>
math example (display)

对比之下,相同公式在行内模式如下所示。公式嵌入在文本段落中 不会强制换行。 mrow 布局算法指定的基线用于垂直 对齐。请注意, 求和和等号、分数等中间都对齐, 但未与外围文本的字母基线对齐。

math example (inline)

由于良好的数学排版需要使用数学字体, 用户代理样式表 应该将 font-family 设置为 math ,而不是继承父元素。此外,许多可在父容器设置的 CSS 属性, 如 font-stylefont-weightdirectiontext-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 专有类型:

unsigned-integer
一个 <integer> 类型的值,定义见 [CSS-VALUES-4],其首字符不能为 U+002D HYPHEN-MINUS (-) 或 U+002B PLUS SIGN (+)。
boolean
一个字符串,ASCII 不区分大小写 匹配 truefalse

2.1.3 全局属性

下列属性通用于所有 MathML 元素,并可以在所有 MathML 元素上指定:

2.1.4 HTML 与 MathML 元素通用属性

id, class, style, data-*, autofocusnoncetabindex 属性与 HTML 元素的 id, class, style, data-*, autofocus, noncetabindex 的语法和语义相同。

dir 属性(如有),必须为 ASCII 不区分大小写 匹配 ltrrtl。 在这种情况下,用户代理应将该属性作为 表现性提示,设置 元素的 direction 属性为相应值。 更具体来说, ASCII 不区分大小写 匹配 rtl 时为 rtl, 匹配 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 example

所有 MathML 元素都支持事件处理属性, 详见 HTML 的 事件处理内容属性

所有事件处理内容属性 HTML 规定所有 HTMLElement 都支持的事件处理属性 也同样由所有 MathML 元素支持,具体定义见 MathMLElement IDL

2.1.5 传统 MathML 样式属性

mathcolormathbackground 属性,如有,值必须为 <color>。 此时用户代理会按表现性提示, 设置元素的 colorbackground-color 属性值。 mathcolor 描述 MathML 文本、横线等的前景色; mathbackground 描述元素的背景色。

mathsize 属性,如有,值必须为合法的 <length-percentage>。 此时用户代理会按表现性提示,设置元素的 font-size 属性。 mathsize 表示数学公式中字形的期望高度,同时自动缩放其他部分(间距、偏移、线条粗细等)。

以上属性为兼容完整 MathML 而实现。仅以 MathML Core 为目标的作者建议使用 CSS 进行样式设置。

2.1.6 displaystylescriptlevel 属性

displaystyle 属性,如有,值必须为 boolean。 此时用户代理会按表现性提示,设置元素的 math-style 属性值。 具体地说, ASCII 不区分大小写 匹配 true 时映射为 normal, 匹配 false 时映射为 compact。 此属性表示公式是否试图减小逻辑高度(为 false 时),例如通过调整内容大小或脚本布局。

scriptlevel 属性,如有,值必须为 +<U>, -<U><U>, 其中 <U>unsigned-integer。 此时用户代理会按表现性提示,设置元素的 math-depth 属性。 具体地说, +<U>-<U><U> 分别映射为 add(<U>)add(<-U>)<U>

displaystylescriptlevel 的值会在 MathML 元素内部自动调整。 完全实现这些属性,需要在用户代理样式表里指定额外 CSS 属性, 见 A. 用户代理样式表。 特别是,所有 MathML 元素默认指定 font-size: math,以确保 scriptlevel 变化生效。

本例中,一个 munder 元素用于将脚本 "A" 附加在基底 "∑" 下。默认情况下,求和符号按其父级继承的字号渲染,A 为缩小下标。 若 displaystyle 为 true,则求和符号变大,"A"变为下标。 若 scriptlevel 在 "A" 上重置为 0,则其字号与顶层 math 根一致。

<math>
  <munder>
    <mo></mo>
    <mi>A</mi>
  </munder>
  <munder displaystyle="true">
    <mo></mo>
    <mi>A</mi>
  </munder>
  <munder>
    <mo></mo>
    <mi scriptlevel="0">A</mi>
  </munder>
</math>
displaystyle-scriptlevel example
TEX 的 \displaystyle\textstyle\scriptstyle\scriptscriptstyle 分别对应 displaystylescriptleveltrue0false0false1、 以及 false 和 2。

2.1.7 预留为有效的属性

属性 intentarg 被预留为有效属性。

本规范未定义任何针对 intentarg 属性的可观察行为。

这些属性在 [MATHML4] 中有说明,后续版本是否定义尚无定论。作者需注意,目前还在开发中,可能变化。

2.2 集成到Web平台

2.2.1 HTML和SVG

可按照相关规范 [HTML] [SVG],把MathML与HTML和SVG混合使用。

在评估SVG的 requiredExtensions 属性时,用户代理必须声明支持 MathML命名空间指定的语言扩展。

此示例中,在HTML文档中使用了内嵌的MathML和SVG元素。在SVG图中,<switch><foreignObject>(含适当<requiredExtensions>)用于嵌入含文本回退的MathML公式。HTML的input元素用于mtext内,在数学公式中实现可交互输入。另见3.7 语义与展示,了解把SVG和HTML嵌入到annotation-xml元素的示例。

(原内容保留)
html-svg example

2.2.2 CSS样式化

用户代理必须支持本规范提及的多项CSS功能,包括4. 数学布局CSS扩展提到的新特性。必须遵循display: contents的计算规则。

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

(原内容保留)
style example

包含MathML核心元素的所有文档,必须将A. 用户代理样式表中的CSS规则,纳入为用户代理级样式表默认规则。特别地,会增加!important规则,将所有MathML元素的书写模式强制设为horizontal-lr

float 属性不会让父元素的display值为block mathinline math的元素浮动,也不会令其脱离文档流。

::first-line::first-letter伪元素不适用于display值为block mathinline math的元素,这类元素不会为其祖先元素贡献首行或首字母。

以下CSS特性不被支持,必须忽略:

  • 数学公式内部的换行:white-space在所有MathML元素上被视为nowrap
  • 对齐属性:align-contentjustify-contentalign-selfjustify-self无效于MathML元素。
这些功能可能在该文档的后续版本中被支持。现阶段不建议作者自行设定这些属性,否则易引发向后兼容性问题。

2.2.3 DOM与JavaScript

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

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

(原内容保留)

GlobalEventHandlersHTMLOrForeignElement 接口定义见[HTML]。

下例中,MathML公式用于渲染“α除以2”,点击红色α后会变为蓝色β。

(原内容保留)
dom-idl example
问题
重命名 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. User Agent Stylesheet 中描述:

  • 对于 <math> 根元素, 根据 display 属性的值,它等同于 inline mathblock math
  • 对于 表格类 MathML 元素 mtable, mtr, mtd ,它们分别等同于 inline-table, table-rowtable-cell
  • 对于除了首个子项以外的所有 mactionsemantics 元素,其值为 none
  • 对于所有其他 MathML 元素,其值等同于 block math

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

除非另有说明,本规范中的图示使用的 书写模式horizontal-lr 且方向为 ltr。 参见 4, 5 以及 6,它们示例了有时用于数学布局的其他书写模式。

用于 MathML 元素的盒依赖若干参数以便执行布局,这既要兼容 CSS,又需要考虑 数学公式内部非常精确的位置和间距:

  1. 内联度量。 最小内容内联大小, 最大内容内联大小内联大小 来自 CSS。见 1
    1 MathML 元素的通用盒模型
  2. 块度量。 块大小, 首基线集末基线集。 为 MathML 盒定义了以下 基线

    1. 字母基线 通常与拉丁大写字形的底部对齐。从该盒的 字母基线 到盒的 line-over 边的代数距离称为 行上升量。从 line-under 边到该盒的 字母基线 的代数距离 称为 行下降量
    2. 数学基线,也称为 数学轴, 通常与分数线、围栏中线和二元运算符的中点对齐。它相对于 字母基线AxisHeightline-over 方向偏移。
    3. 墨迹上边基线,表示数学内容实际绘制的 line-over 理论极限,不含任何额外空白。 若未指定,则与 line-over 边对齐。 从 字母基线墨迹上边基线 的代数距离称为 墨迹行上升量
    4. 墨迹下边基线,表示数学内容实际绘制的 line-under 理论极限,不含任何额外空白。 若未指定,则与 line-under 边对齐。 从 墨迹下边基线字母基线 的代数距离称为 墨迹行下降量
    对于数学布局,定位文本时依赖墨迹范围非常重要。对于更复杂的符号(例如根号),情况并非总是如此。 虽然为所有 MathML 元素定义了墨迹上升量和墨迹下降量,但它们主要用于令牌元素。在其他情况下,它们仅与普通的上升和下降匹配。
    除非另有说明,MathML 盒的 末基线集 等同于其 首基线集
  3. 一个可选的 斜体校正, 表示一个盒的文本沿 内联轴 倾斜的度量。 见 2
    2 斜体 f 和大型积分符号的斜体校正示例
    如果在计算 最小内容内联大小最大内容内联大小 或在布局期间请求该值,则以 0 作为后备值。
  4. 一个可选的 顶部重音附着点 ,为在将该盒作为重音定位时应使用的盒的内联轴上的参考偏移量提供参考。 见 3
    3 抛物线重音(circumflex)顶部附着示例
    如果在计算 最小内容内联大小 (或 最大内容内联大小)时请求该属性,则使用 最小内容内联大小(或 最大内容内联大小)的一半作为后备值。 如果在布局期间请求该属性,则使用该盒内联大小的一半作为后备值。

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

  • 内联偏移量:子盒的内联偏移量 是父盒的 inline-start 边与子盒的 inline-start 边之间的偏移。
  • 块偏移量:子盒的块偏移量 是父盒的 block-start 边与子盒的 block-start 边之间的偏移。
  • 行左偏移量:子盒的行左偏移量 是父盒的 line-left 边与子盒的 line-left 边之间的偏移。
4 适用于例如阿拉伯语数学的书写模式 horizontal-tbrtl 的盒模型。
5 适用于例如蒙古语数学的书写模式 vertical-lrltr 的盒模型。
6 适用于例如日语数学的书写模式 vertical-rlltr 的盒模型。
子盒和图形项在 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> 盒中。即在视觉格式模型中,其子树由包含该 MathML 元素子项对应盒的 匿名 <mrow> 盒 所组成。

在下例中, mathmrow 元素按第 3.3.1.2 <mrow> 的布局 描述进行布局。特别地,<math> 元素会在其 <mo>≠</mo> 子项周围增加适当间距,而 <mrow> 元素会竖直拉伸其 <mo>|</mo> 子项。

元素 mtddisplay: 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>
math example (display)

3.1.4 堆叠上下文

由于各种间距规则,MathML 元素可能会发生重叠。它们也可能包含额外的图形项(横线、根号符号等)。 具有计算样式 display: block mathdisplay: inline math 的 MathML 元素会生成新的堆叠上下文。这样的 MathML 元素的 绘制顺序 对其 流内 子项与块元素完全相同。额外的图形项在文本和背景之后绘制(对于 display: inline math 在步骤 7.2.4 之后, 对于 display: block math 在步骤 7.2 之后)。

3.2 记号元素

在展示标记中,记号元素通常用于表示具有含义的数学符号的最小单元。记号在文本中大致类似于单词。然而,由于数学符号的精确、符号化特性,记号元素的各种类别和属性在 MathML 标记中非常重要。相比之下,在文本数据中,单个单词极少需要被单独标记或特殊样式化。

实际上,大多数 MathML 记号元素只包含变量、数字、运算符等的简单文本,并不需要复杂的布局。但它也可以包含含换行的文本或任意 HTML5 短语元素。

3.2.1 文本 <mtext>

mtext 元素用于表示应按原样渲染的任意文本。一般来说, <mtext> 元素用于表示注释性文本。

<mtext> 元素可使用2.1.3 全局属性中描述的属性。

在下例中, mtext 用于在定义中插入条件性词语:

<math>
  <mi>y</mi>
  <mo>=</mo>
  <mrow>
    <msup>
      <mi>x</mi>
      <mn>2</mn>
    </msup>
    <mtext>&nbsp;if&nbsp;</mtext>
    <mrow>
      <mi>x</mi>
      <mo></mo>
      <mn>1</mn>
    </mrow>
    <mtext>&nbsp;and&nbsp;</mtext>
    <mn>2</mn>
    <mtext>&nbsp;otherwise.</mtext>
  </mrow>
</math>
mtext example
3.2.1.1 <mtext> 的布局

如果该元素的计算属性 display 不等于 block mathinline math, 则按照 CSS 规范的对应值进行布局。 否则,执行如下布局。

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

否则,mtext 元素以块盒布局,并为 数学内容盒使用相应的最小内容内联大小最大内容内联大小内联大小块大小首基线集末基线集

3.2.2 标识符 <mi>

mi 元素用于表示应作为标识符渲染的符号名或任意文本。标识符可以包括变量、函数名和符号常量。

<mi> 元素可使用2.1.3 全局属性 以及下列属性:

其布局算法与 mtext 元素相同。 用户代理样式表 必须包含下列属性以通过 4.2 math-auto 变换 实现自动斜体:

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 拉丁小写 c, 按斜体映射表替换为 U+1D450 数学斜体小写 c),对第三个 <mi>(被 mathvariant="normal" 覆盖,设置 text-transform 为 none)和第四个 <mi>(U+221E 无穷大在斜体映射表无定义)均无效果。

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

3.2.3 数字 <mn>

mn 元素用于表示“数字字面量”或其他应当数字字面量方式渲染的数据。一般来说,数字字面量是一串数字,可能包括小数点,表示无符号整数或实数。

<mn> 元素可使用2.1.3 全局属性。其布局算法与 mtext 元素相同。

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

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

3.2.4 运算符、括号、分隔符或重音 <mo>

mo 元素表示一个运算符或任何应以运算符方式渲染的内容。一般来说,数学运算符的符号约定相当复杂,因此 MathML 为 <mo> 元素提供了相对复杂的渲染机制。

结果,在 MathML 中,应“以运算符方式渲染”的内容清单,包括许多常规含义下并非数学运算符的符号。除了普通的中缀、前缀或后缀运算符外,还包括大括号、小括号和“绝对值”竖线等括号类字符,逗号和分号等分隔符,以及位于符号之上的横线或波浪线等数学重音。 本章中的“运算符”一词以这种广义方式使用。

<mo> 元素可使用2.1.3 全局属性,也可使用以下属性:

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

作者可以使用 fenceseparator 来描述运算符的特定语义。 默认值可从 Operators_fenceOperators_separator 表中获取,或等价于运算符字典的人类可读版

下例中, mo 元素用于二元运算符 +。该运算符的默认间距在其两侧是对称的。如果通过 form 属性强制其为前缀运算符,则间距更紧凑。 也可以使用 lspacerspace 属性显式指定间距。

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

另一个用例是用于诸如求和等大型运算符。当 displaystyle 为 true 时,运算符以较大尺寸显示,但也可以通过 largeop 属性改变。当 displaystyle 为 false 时,下标实际上作为下标渲染,通过 movablelimits 属性也可改变行为。

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

运算符也常用于可拉伸符号,如括号、重音、箭头等。下例中,竖直箭头会根据 mspace 元素的高度进行拉伸。 可以通过 stretchy 属性覆写默认拉伸行为,例如强制箭头不拉伸。 symmetric 属性用于指定运算符是否在数学轴(分数线)上下对称拉伸。 minsizemaxsize 属性用于进一步约束拉伸大小。

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

请注意,运算符的默认属性依赖于字典,详见 3.2.4.2 基于字典的属性。例如,二元运算符通常默认两侧间距对称,而括号(fence)默认支持拉伸。

3.2.4.1 修饰运算符

若某个MathML 核心元素满足以下条件,则称其为 修饰运算符

  1. mo 元素;
  2. 脚本元素mfrac, 其首个流内子元素存在且本身也是 修饰运算符
  3. 分组元素mpadded, 其流内子元素(任意顺序)中恰好有一个 修饰运算符,其他为零个或多个 空间样式元素。

核心运算符 是递归定义所得的 <mo> 元素,规则如下:

  1. 若是 mo 元素,其核心运算符即为其自身。
  2. 若为修饰 脚本元素mfrac 元素,其核心运算符为其首个流内子元素的核心运算符。
  3. 若为修饰 分组元素mpadded ,其核心运算符为其唯一修饰运算符 流内子元素的核心运算符。

拉伸轴 :若其 核心运算符 仅包含一个字符 c 且该字符具有 inline 固有拉伸轴,则为 内联,否则为

可视格式模型中的盒也用此定义,其中 匿名 <mrow> 盒视作 分组元素

3.2.4.2 基于字典的属性

修饰运算符form 属性为 infixprefixpostfix 三者之一。 mo 元素对应的 form 属性(如有), 必须为这三者之一的 ASCII 不区分大小写 匹配。

修饰运算符 form 决定算法

  1. form 属性存在且有效,则其 ASCII 小写值 被采用。
  2. 若修饰运算符为 分组元素mpaddedmsqrt 多于一个流内子元素的第一个(忽略所有空间样式子元素),则为 prefix
  3. 否则若为上述类型的最后一个 流内 子元素,则为 postfix
  4. 否则若为脚本元素流内非首个子元素,则为 postfix
  5. 否则为 infix

stretchysymmetriclargeopmovablelimits 属性,在 修饰运算符 中为 falsetrue。 后者时,认为修饰运算符“具有”该属性。 上述属性在 mo 元素上,如有,必须为 boolean 类型。

lspacerspaceminsize 属性在修饰运算符中为 <length-percentage>maxsize 属性为 <length-percentage> 或 ∞。 mo 元素对应同名属性(如有)也要求类型为 <length-percentage>

修饰运算符属性决定算法如下:

  1. 如核心运算符有有效 stretchysymmetriclargeopmovablelimitslspacerspacemaxsizeminsize 属性,则取其 ASCII 小写值
  2. 否则,执行修饰运算符 form 决定算法
  3. 若核心运算符内容仅为文本 Content,则 Category 设为 运算符类别判定算法的结果 (Content, Form)Form 为前述得到的形式。
  4. CategoryDefault 且修饰运算符没有在核心运算符属性中显式指定 form,则依次:
    1. Category 设为 运算符类别判定算法(Content, infix) 结果。
    2. 若仍为 Default,用 postfix 再运行。
    3. 若仍为 Default,用 prefix 再运行。
  5. 执行 运算符类别属性赋值算法 Category

在布局阶段,stretchy, symmetric, largeop, movablelimits, lspace, rspace, minsize 的值由 修饰运算符属性决定算法得到,但有如下额外解释:

  • lspacerspace 的百分比,对应上面字典值或兜底值。
  • minsizemaxsize 的百分比含义,详见 3.2.4.3 运算符布局
  • lspace, rspace, minsize, maxsize 若为与字体相关的长度,则基于 核心运算符的字体风格。
3.2.4.3 运算符的布局

如果 <mo> 元素的计算 display 属性不是 block mathinline math, 则按照 CSS 规范中描述的对应值布局。 否则,按照下述布局进行渲染。

仅当 <mo> 元素的 visibility 属性为 visible 时才绘制运算符文本。 绘制时,颜色取 <mo> 元素的 color

运算符的布局如下:

  1. 如果 <mo> 元素的内容不是单一字符 c,则回退到 3.2.1.1 <mtext> 的布局算法。
  2. 如果运算符拥有 stretchy 属性:
  3. 如果运算符有 largeop 属性且 <mo> 元素的 math-stylenormal, 则:
    1. 使用 MathVariants 表,尝试查找高度不少于 DisplayOperatorMinHeight 的字形。未找到则用最大非基础字形;仍无则退回 3.2.1.1 <mtext> 的布局算法。

    2. 对应字形给出 最小内容内联大小最大内容内联大小内联大小 和块度量。
    3. 绘制该字形。
    8 求和符号的基础和显示风格尺寸
  4. 其它情况回退到 3.2.1.1 <mtext> 的布局算法。

如上述步骤中调用了 生成拉伸字形 算法,则数学内容的 斜体校正 取该算法返回值。

3.2.5 空白 <mspace>

mspace 空元素表示一个由其属性设置的任意所需大小的空白区域。

<mspace> 元素可以使用2.1.3 全局属性中的属性,以及以下属性:

widthheightdepth 属性如存在,值必须是有效的<length-percentage>

  • 如果 width 属性存在、有效且不是百分比,则该属性作为 表现性提示,将元素的 width 属性设置为对应的值。
  • 如果 height 属性不存在、无效或为百分比,则请求的行上升量为 0。 否则,请求的行上升量为 height 属性的解析值,负值钳制为 0
  • 如果 heightdepth 属性均存在、有效且不是百分比,则它们作为 表现性提示,将元素的 height 属性设置为字符串 "calc("、height 属性值、" + "、depth 属性值和 ")" 的拼接结果。 仅有其中一个属性存在且有效时,作为表现性提示设置 height 属性为对应值。

下例中,使用 mspace 在公式中强制插入空白(加了1px蓝色边框便于可视化空白):

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

如果 <mspace> 元素的计算 display 属性不是 block mathinline math, 则按照 CSS 规范相应值布局。 否则, <mspace> 元素的布局如 9 所示。 数学内容的最小内容内联大小最大内容内联大小内联大小均等于 width 属性的解析值。 数学内容的块大小等于 height 属性的解析值。 数学内容的行上升量等于前述请求的行上升量。

9 <mspace> 元素盒模型
height/depth 术语来自 [MATHML3], 其本身受 [TEXBOOK] 启发。
3.2.5.1 空白样式元素的定义

一些 MathML 展示元素属于“空白样式”,即这些元素通常渲染为空白,对表达式的数学含义没有影响。因此,这些元素在其它 MathML 表达式中常以不同寻常的方式起作用。

MathML 核心元素若为以下情况,则称其为 空白样式元素

  1. mtextmspace
  2. 或为分组元素mpadded ,其所有流内子元素均为空白样式元素。

可视格式模型的盒也用相同定义,其中 匿名 <mrow> 盒被视作 分组元素

注意, mphantom 元素本身并不自动归为“空白样式”,除非其内容本身为空白样式。这是因为运算符间距受相邻元素是否为空白样式影响。 由于 <mphantom> 元素主要用来辅助对齐表达式,那么与其相邻的运算符应当表现得好像它们是挨着 <mphantom> 的内容,而不是一块等面积的空白。

3.2.6 字符串字面量 <ms>

ms 元素用于表达式中表示“字符串字面量”,适用于由计算机代数系统或包含“编程语言”的其它系统解释的表达式。

<ms> 元素可以使用2.1.3 全局属性。其布局算法与 mtext 元素相同。

下例中, ms 用于写一个字符字面量字符串:

<math>
  <mi>s</mi>
  <mo>=</mo>
  <ms>"hello world"</ms>
</math>
ms example
在 MathML3 中,曾可以用 lquoterquote 属性分别指定左/右引号字符串。现在已不再支持,必须把引号写在 <ms> 元素的文本内容里。如需保留旧文档视觉效果,可通过 CSS 完成。例如从左至右时:
ms:before, ms:after {
  content: "\0022";
}
ms[lquote]:before {
  content: attr(lquote);
}
ms[rquote]:after {
  content: attr(rquote);
}

3.3 通用布局模式

除了记号(tokens)之外,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 example

<mrow> 元素可接受2.1.3 全局属性中描述的属性。具有 in-flow 子元素 child1、child2、…、childN<mrow> 元素的布局如10所示。子盒会排成一行,并对齐其 字母基线

10 <mrow> 元素的盒模型
由于盒模型确保了字母基线的对齐, 分数线或对称拉伸运算符 也会按照数学轴对齐,在典型情况下 AxisHeight对于所有 in-flow 子元素都一致。
3.3.1.1 沿 block 轴拉伸运算符的算法
11 运算符在块轴上的对称和非对称拉伸

沿 block 轴拉伸运算符的算法 步骤如下:

  1. 如果存在块轴拉伸尺寸约束内联轴拉伸尺寸约束, 那么正布局的元素为 修饰运算符。布局唯一的 in-flow 子元素(为 修饰运算符)时,带有相同尺寸约束;其它子元素就不带尺寸约束,然后结束。
  2. 否则, 将 in-flow 子元素列表分为两个列表 LToStretch(含具 修饰运算符并带 stretchy 属性且 block stretch axis的子项)和LNotToStretch
  3. 对于 LNotToStretch中的所有项,按无拉伸尺寸约束完成布局。 若 LToStretch 为空,结束。 若 LNotToStretch 为空,则 LToStretch所有项使用 块轴拉伸尺寸约束 (0, 0)布局。
  4. 计算无约束下的目标尺寸 UascentUdescent,分别为上一步已布局的边距盒中最大上行与最大下行。
  5. 块轴拉伸尺寸约束 (Uascent, Udescent),对LToStretch的元素进行(重新)布局。
3.3.1.2 <mrow>布局

如果该盒不是匿名 <mrow> 盒, 且关联元素的计算属性 display 不等于 block mathinline math, 则按 CSS 规范中描述的对应值布局。 否则,按如下方式布局。

子盒如果不是 修饰运算符 且有非零斜体校正,则定义为倾斜

大型运算符可能会有非零的斜体校正,但该值用于附加脚本时。 更一般地,所有修饰运算符 都被视为非倾斜,间距按照lspacerspace指定的方式计算。

最小内容内联尺寸(或 最大内容内联尺寸)按以下算法计算:

  1. 若该盒对应 math 元素或不是 修饰运算符,则 add-space 设为 true,否则为 false。
  2. inline-offset为0。
  3. previous-italic-correction为0。
  4. 对每个 in-flow 子元素执行:
    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

in-flow子元素采用 沿 block 轴拉伸运算符的算法进行布局。

数学内容的内联尺寸计算方式与其最小内容内联尺寸最大内容内联尺寸一致,但用in-flow子元素的边距盒内联尺寸代替。

数学内容的墨水上行(或行上行)为所有 in-flow 子元素的边距盒中,墨水上行(或行上行)的最大值;墨水下行(或行下行)为所有 in-flow 子元素边距盒墨水下行(或墨水上行)的最大值。

in-flow子元素的位置使用下列算法:

  1. 若该盒对应 math 元素或不是 修饰运算符,则add-space为true,否则为false。
  2. inline-offset为0。
  3. previous-italic-correction为0。
  4. 对每个 in-flow 子元素执行:
    1. 若不是倾斜,则inline-offsetprevious-italic-correction
    2. 若为修饰运算符add-space为true,则 inline-offsetlspace属性。
    3. 设定该子元素的内联偏移inline-offset,块偏移设定使该元素的字母基线与容器的字母基线对齐。
    4. inline-offset加上该子元素边距盒内联尺寸
    5. 若为倾斜,则 previous-italic-correction 设为其斜体校正;否则为0。
    6. 若为修饰运算符add-space为true,则 inline-offset加其 rspace 属性。

数学内容的斜体校正取最后一个 in-flow 子元素的校正值(即previous-italic-correction的最终值)。

3.3.2 分数 <mfrac>

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

如果 <mfrac> 元素的计算 display 属性不等于 block mathinline math ,则按照 CSS 规范中描述的对应值来布局。 否则,采用下述布局方式。

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

linethickness 属性指示用于分数线的 分数线粗细 。如指定,必须是合法的 <length-percentage>。 若属性缺失或值非法,则使用 FractionRuleThickness 作为默认值。百分比相对于该默认值计算。负值视为0。

下例包含四个分数,分别有不同的 linethickness 值。分数线始终与加号和减号的中线对齐。分子分母水平方向居中。不属于displaystyle的分数使用更小的间距和字体。

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

<mfrac> 元素设置 displaystylefalse, 若本为 false,则其子元素的 scriptlevel 增加 1。 它在第二个子元素内设定math-shiftcompact。 为避免分数线与其它相邻项目(如负号或另一个分数线)混淆,元素周围添加默认1像素的空隙。 用户代理样式表 必须包含如下规则:

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

如果 <mfrac> 元素的 in-flow 子元素少于或多于两个,其布局算法与 mrow 元素一致。 否则,第一个 in-flow 子元素称为 分子,第二个 in-flow 子元素称为 分母 ,其布局算法如下所述。

实际中 <mfrac> 元素一般有两个 in-flow 子元素。CSS 规则主要对 scriptleveldisplaystylemath-shift分子分母 进行样式调整。
3.3.2.1 分数线粗细非零的分数

分数线粗细非零, <mfrac> 元素按 12 显示。 仅当 <mfrac> 元素的 visibility 属性为 visible 时,才绘制分数线。 此时,分数线颜色采用 <mfrac> 元素的 color

12 <mfrac> 元素盒模型

内容的最小内容内联尺寸 (或最大内容内联尺寸) 取分子 分子 边距盒最小内容内联尺寸 (或最大内容内联尺寸)与分母 分母 边距盒的该尺寸最大值。

若有 内联拉伸尺寸约束块拉伸尺寸约束, 则 分子 也使用相同约束布局,否则无约束。 分母 始终无任何拉伸约束布局。

数学内容的内联尺寸 取分子分子 边距盒与分母分母 边距盒的该尺寸最大值。

NumeratorShift 为以下两者的最大值:

DenominatorShift 为以下两者的最大值:

数学内容的行上行为以下最大值:

数学内容的行下行为以下最大值:

分子(或分母)的 内联偏移 为数学内容内联尺寸一半减去其边距盒内联尺寸一半。

分子(或分母)的 字母基线,相对于父容器的 字母基线 ,分别向 line-over(或 line-under)方向偏移 NumeratorShift(或 DenominatorShift)距离。

数学内容盒内容盒内放置,使两者 block-start 边对齐且中线重合。

分数线的内联尺寸内容盒内联尺寸,且其起始内联边与内容盒对齐。 分数线中线自数学内容盒字母基线line-over 方向偏移 AxisHeight 距离。 块尺寸为分数线粗细。

3.3.2.2 分数线粗细为0的分数

分数线粗细为0,<mfrac> 元素则按 13 显示。

13 无分数线时的<mfrac>盒模型

数学内容的最小内容内联尺寸最大内容内联尺寸内联尺寸均与 3.3.2.1 分数线粗细非零的分数一致。

若有 内联拉伸尺寸约束块拉伸尺寸约束, 分子使用相同的约束布局,反之则无约束。 分母总是无任何拉伸约束布局。

math-stylecompact,则 TopShiftBottomShift 分别取 StackTopShiftUpStackBottomShiftDown。 否则math-stylenormal ,分别取 StackTopDisplayStyleShiftUpStackBottomDisplayStyleShiftDown

Gap 定义为 (BottomShift − 分母边距盒墨水上行)+ (TopShift − 分子边距盒墨水下行)。 若 math-stylecompactGapMinStackGapMin, 否则为 StackDisplayStyleGapMin。 若 Δ = GapMinGap 为正,则 TopShift 增加 Δ/2,BottomShift 增加 Δ − Δ/2。

数学内容的行上行为最大值:

数学内容的行下行为最大值:

分子和分母的 内联偏移 计算与 3.3.2.1 分数线粗细非零的分数一致。

分子(和分母)的字母基线 相对于父级字母基线,分别沿 line-over方向偏移TopShift(或沿line-under方向偏移-BottomShift)。

数学内容盒内容盒内放置,使两者 block-start 边对齐且中线重合。

3.3.3 根号 <msqrt>, <mroot>

根号元素用于构造一个带有根号符号 √ 并带上线条的表达式。 msqrt 元素用于平方根, mroot 元素用于带有指标的根号(如立方根)。

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

下例中用 msqrt 写了一个平方根,用 mroot 写了一个立方根。 注意 msqrt 有多个子元素,平方根作用于所有这些元素。 mroot 恰有两个子元素:根指数为第二个(数字3),作用于第一个(平方根)。 还要注意这些元素只会改变 mroot 指数内的字号,而且缩小的程度大于分数的分子分母内部。

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

<msqrt><mroot> 元素将math-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 mathinline math, 则按照 CSS 规范中描述的对应值来布局。 否则,采用下面的布局规则。

如果 <mroot> 子元素数目少于或多于两个, 布局算法与 mrow 元素一致。 否则,第一个 in-flow 子元素为 mroot 基, 第二个 in-flow 子元素为 mroot 指数, 其布局算法如下所述。

实际中,<mroot> 元素通常有两个 in-flow 子元素。CSS 规则主要对指数部分进行scriptleveldisplaystyle 设置。

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

3.3.3.1 根号符号

仅当 <msqrt><mroot> 元素的 visibilityvisible 时才绘制根号符号, 此时根号符号颜色采用该元素的 color

根号字形 指用字符 U+221A SQUARE ROOT 所得字形。

根号间距 如果 math-stylecompact 时使用 RadicalVerticalGap, 否则使用 RadicalDisplayStyleVerticalGap

伸缩根号字形的目标高度为: RadicalRuleThickness + 根号间距 + 基体的墨水高度。

根号字形的盒度量根号符号的绘制,需按 为某目标block尺寸伸展字形的算法来获得。

3.3.3.2 平方根

<msqrt> 元素如14布局。

14 <msqrt> 元素盒模型

数学内容的最小内容内联尺寸 (或最大内容内联尺寸) 为 沿block轴拉伸 根号字形优选内联尺寸, 加上 msqrt 基边距盒最小内容内联尺寸 (或最大内容内联尺寸)。

数学内容的 内联尺寸根号字形的盒度量的前导宽度加上 msqrt 基 边距盒内联尺寸

数学内容的行上行,取以下两者最大值:

数学内容的行下行,取以下两者最大值:

上横线的内联尺寸msqrt 基 边距盒内联尺寸msqrt 基和上横线的内联偏移均相同,等于 根号字形的盒度量的宽度。

msqrt 基字母基线对齐 容器的字母基线。 上横线的块大小RadicalRuleThickness 。其垂直中心相对于字母基线line-over方向的偏移为数学内容的行上行,减去 RadicalExtraAscender,再减去 RadicalRuleThickness一半。

最后,进行根号符号的绘制

3.3.3.3 带指数的根式

<mroot> 元素布局如15mroot 指数先被忽略,仅将 mroot 基 与根号字形 按14的算法布局 ,生成边距盒 B(绿框)。

15 <mroot> 元素盒模型

数学内容最小内容内联尺寸 (或最大内容内联尺寸)为 max(0, RadicalKernBeforeDegree) + mroot 指数 边距盒最小内容内联尺寸 (或最大内容内联尺寸) + max(−最小内容内联尺寸, RadicalKernAfterDegree) (或 max(−最大内容内联尺寸, RadicalKernAfterDegree) ) + B 的最小内容内联尺寸 (或最大内容内联尺寸)。

按相同的收敛规则, AdjustedRadicalKernBeforeDegreeAdjustedRadicalKernAfterDegree 分别为 max(0, RadicalKernBeforeDegree) 与 max(−指数边距盒内联尺寸, RadicalKernAfterDegree)。

数学内容内联尺寸AdjustedRadicalKernBeforeDegree + 指数边距盒内联尺寸 + AdjustedRadicalKernAfterDegree + B的内联尺寸

数学内容行上行取以下最大值:

数学内容行下行,取以下最大值:

指数的内联偏移AdjustedRadicalKernBeforeDegreemroot 基的内联偏移为上述值加上指数边距盒的内联尺寸。

B 的 字母基线与父容器的字母基线对齐。 指数的字母基线line-under边偏移距离为 RadicalDegreeBottomRaisePercent × B的块尺寸加上指数边距盒行下行

通常,根指数左侧留空(kerning)为正,右侧为负,这意味着根号整体会有起始内联空隙,而根指数会覆盖根号钩部。

3.3.4 样式更改 <mstyle>

mstyle 元素的历史用途是用于更改影响其内容渲染的样式。

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

<mstyle> 的实现是为了兼容完整的 MathML。仅以 MathML Core 为目标的作者,建议用 CSS 实现样式。

在下例中, mstyle 用于设置scriptleveldisplaystyle。 可以观察到,这分别影响了其后代的字体大小以及下标位置。在 MathML Core 中,也可以只用 mrow 元素来实现。

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

3.3.5 错误信息 <merror>

merror 元素将其内容显示为“错误信息”。这一元素的目的是为将其它输入转换为 MathML 的程序,提供标准方法报告输入中的语法错误。

下例中, merror 用于表示部分 LaTeX 风格输入的解析错误:

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

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

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

3.3.6 调整内容周围空间 <mpadded>

mpadded 元素的渲染效果与其in-flow子内容相同,但其大小和相对定位起点,可按 <mpadded>的属性进行调整。

<mpadded> 元素接受 2.1.3 全局属性 及下列属性:

widthheightdepthlspacevoffset 如指定,必须是合法的 <length-percentage> 值。

下例中, mpadded 用于微调分数周围的间距 (用蓝色背景可视化)。 不加属性时等同 mrow ,但 通过这些属性可指定盒的尺寸 (width, height, depth)及分数内容在盒内的位置(lspace 和 voffset)。

<math>
  <mrow>
    <mn>1</mn>
    <mpadded style="background: lightblue;">
      <mfrac>
        <mn>23456</mn>
        <mn>78</mn>
      </mfrac>
    </mpadded>
    <mn>9</mn>
  </mrow>
  <mo>+</mo>
  <mrow>
    <mn>1</mn>
    <mpadded lspace="2em" voffset="-1em" height="1em" depth="3em" width="7em"
             style="background: lightblue;">
      <mfrac>
        <mn>23456</mn>
        <mn>78</mn>
      </mfrac>
    </mpadded>
    <mn>9</mn>
  </mrow>
</math>
mpadded example
3.3.6.1 内部盒与请求参数

mpadded 元素 生成一个匿名 <mrow> 盒 ,称为 mpadded 内部盒, 其参数称为 内部内联尺寸、内部行上行和内部行下行。

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

  • width 请求值为 width 属性的解析值。 若 width 属性已指定、有效且不是百分比,则该属性作为 表现性提示 ,将元素的 width 属性设置为对应值。
  • height 属性缺失、无效或为百分比,则 height 请求值为内部行上行。 否则请求值为 height 属性的解析值,负值钳制为 0
  • depth 属性缺失、无效或为百分比,则 depth 请求值为内部行上行。 否则请求值为 depth 属性的解析值,负值钳制为 0
  • lspace 属性缺失、无效或为百分比,则 lspace 请求值为 0。否则请求值为 lspace 属性解析值,负值钳制为 0
  • voffset 属性缺失、无效或为百分比,则 voffset 请求值为 0,否则请求值为 voffset 属性的解析值。
    voffset 值不会钳制为0
3.3.6.2 <mpadded> 布局

<mpadded> 元素的计算属性 display 不等于 block mathinline math, 则参见 CSS 规范描述。否则,布局如 16所示。

16 <mpadded> 元素盒模型

数学内容最小内容内联尺寸(或最大内容内联尺寸),用 3.3.6.1 内部盒与请求参数 算法,但把“内部内联尺寸”换成 mpadded 内部盒最小内容内联尺寸(或最大内容内联尺寸)。

数学内容内联尺寸3.3.6.1 内部盒与请求参数 算法请求宽度计算。

数学内容行上行为请求的 height,行下行为请求的 depth。

mpadded 内部盒字母基线 相对于父字母基线 按请求的 voffset 向line-over方向偏移。

3.3.7 使子表达式不可见 <mphantom>

mphantom 元素最初被引入用于将其内容不可见地渲染,但保留与正常渲染一样的度量尺寸和其它参数,包括其内容正常渲染时的字母基线位置。

在下例中, mphantom 用于保证分数分子与分母对应位置的对齐:

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

<mphantom> 元素可接受2.1.3 全局属性。其布局算法与 mrow 元素一致。 用户代理样式表 必须包含如下规则以隐藏内容:

mphantom {
  visibility: hidden;
}
<mphantom> 实现是为了兼容完整 MathML。仅以 MathML Core 为目标的作者,建议直接用 CSS 控制样式。

3.4 上下标与极限结构

本节描述的元素用于在基底周围定位一个或多个上/下脚本。在数学中,将各种上/下角标和修饰附加到符号上是非常常见的记号工具。仅作视觉排版时,一个通用元素足以在传统的基底周围任意位置布置脚本和修饰。但为了更好地表达常见记法的抽象结构,MathML 提供了更多专用的脚本元素。

除了下标和上标元素之外,MathML 还有 overscript 与 underscript 元素,可将脚本放置在基线之上和之下。这些元素用于给大型运算符添加极限,或在基底上下方添加符号、横线等。

3.4.1 下标与上标 <msub>, <msup>, <msubsup>

msubmsupmsubsup 元素用于给 MathML 表达式添加下标和上标。 它们接受2.1.3 全局属性中描述的属性。

下例演示了下标和上标的基本用法。脚本内容的字体大小会自动变小。

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

<msub><msup><msubsup> 元素的计算 display 属性不为 block mathinline math ,则按 CSS 规范描述。 否则,按下述布局方式。

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

<msub> 元素 的 in-flow 子元素不等于 2 个,则其布局算法与 mrow 元素一样。 否则,第一个 in-flow 子元素为 msub 基底, 第二个 in-flow 子元素为 msub 下标,布局算法见3.4.1.2 基底带下标

<msup> 元素 的 in-flow 子元素不等于 2 个,则其布局算法与 mrow 元素一样。 否则,第一个 in-flow 子元素为 msup 基底, 第二个 in-flow 子元素为 msup 上标,布局算法见3.4.1.3 基底带上标

<msubsup> 元素 的 in-flow 子元素不等于 3 个,则其布局算法与 mrow 元素一样。 否则,第一个 in-flow 子元素为 msubsup 基底, 第二个 in-flow 子元素为msubsup 下标, 第三个 in-flow 子元素为 msubsup 上标,布局算法见3.4.1.4 基底带下标与上标

3.4.1.2 基底带下标

<msub> 元素布局如17LargeOpItalicCorrectionmsub 基底斜体校正(若其为具有largeop属性的修饰运算符时),否则为0。

17 <msub> 元素盒模型

数学内容最小内容内联尺寸(或最大内容内联尺寸)为 msub 基底边距盒的该尺寸 − LargeOpItalicCorrection + msub 下标边距盒的该尺寸 + SpaceAfterScript

若有 内联拉伸尺寸约束块拉伸尺寸约束,则 msub 基底也用该约束布局,否则无约束。脚本总是无拉伸尺寸约束布局。

数学内容的内联尺寸msub 基底边距盒的内联尺寸 − LargeOpItalicCorrection + msub 下标边距盒的内联尺寸 + SpaceAfterScript

SubShift 的值为以下三者的最大值:

数学内容行上行为下列两者最大值:

数学内容行下行为下列两者最大值:

msub 基底内联偏移量为 0, msub 下标内联偏移量msub 基底margin box内联尺寸减去 LargeOpItalicCorrection

msub 基底字母基线 与容器的字母基线对齐。msub 下标则将其字母基线,向 line-under 方向偏移 SubShift

3.4.1.3 基底带上标

<msup> 元素布局如18ItalicCorrectionmsup 基底斜体校正 (若其不是具有 largeop 属性的修饰运算符时),否则为0。

18 <msup> 元素盒模型

数学内容最小内容内联尺寸(或最大内容内联尺寸)为 msup 基底边距盒的该尺寸 + ItalicCorrection + msup 上标边距盒的该尺寸 + SpaceAfterScript

若有 内联拉伸尺寸约束块拉伸尺寸约束,则 msup 基底也用该约束布局,否则无约束。脚本总是无拉伸尺寸约束布局。

数学内容内联尺寸msup 基底边距盒的内联尺寸 + ItalicCorrection + msup 上标边距盒的内联尺寸 + SpaceAfterScript

SuperShift 的值为以下三者的最大值:

数学内容行上行为下列两者最大值:

数学内容行下行为下列两者最大值:

msup 基底内联偏移为 0,上标的内联偏移msup 基底 边距盒的内联尺寸 + ItalicCorrection

msup 基底字母基线 与父容器的字母基线对齐。msup 上标将其字母基线沿line-over方向偏移 SuperShift

3.4.1.4 基底带下标与上标

<msubsup>元素布局如18LargeOpItalicCorrectionSubShift 设定规则同3.4.1.2 基底带下标ItalicCorrectionSuperShift 设定规则同3.4.1.3 基底带上标

19 <msubsup> 元素盒模型

数学内容最小内容内联尺寸(或最大内容内联尺寸内联尺寸)为 3.4.1.2 基底带下标3.4.1.3 基底带上标 算法算得的两个值的最大值。

若有 内联拉伸尺寸约束块拉伸尺寸约束, 则msubsup 基底也用该约束布局,否则无约束。脚本总是无拉伸尺寸约束布局。

若有 内联拉伸尺寸约束块拉伸尺寸约束, 则msubsup 基底也用该约束布局,否则无约束。脚本总是无拉伸尺寸约束布局。

SubSuperGap,即两脚本在块轴方向的间隔,为 (SubShiftmsubsup 下标 边距盒墨水上行) + (SuperShiftmsubsup 上标 边距盒墨水下行)。 若 SubSuperGap 小于 SubSuperscriptGapMin 则按如下步骤保证其大于等于下限:

  1. 令 Δ 为SuperscriptBottomMaxWithSubscript − (SuperShiftmsubsup 上标 边距盒墨水下行)。 若 Δ > 0 则 Δ 重新取 Δ 与 SubSuperscriptGapMinSubSuperGap 的较小值,并将 SuperShift(及 SubSuperGap)增加 Δ。
  2. 令 Δ 为SubSuperscriptGapMinSubSuperGap。若 Δ > 0, 则SubscriptShift(及SubSuperGap)增加Δ。

数学内容墨水上行行上行墨水下行行下行3.4.1.2 基底带下标3.4.1.3 基底带上标 算法所得的值取最大,但用上述调整后的 SubShiftSuperShift

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 下标与上标(Underscripts and Overscripts) <munder>, <mover>, <munderover>

munder, movermunderover 元素用于在 MathML 表达式的下方或上方附加重音符或极限(limits)。

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

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

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

下面的示例演示了下标与上标的基本用法。脚本内的字体大小会自动缩小,除非它们是作为重音使用。

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

<munder><mover><munderover> 元素的计算 display 属性不为 block mathinline math,则按 CSS 规范中相应值进行布局。否则,执行下面的布局规则。

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

<munder> 元素的 in-flow 子元素少于或多于两个,则其布局算法与 mrow 元素相同。否则,第一个 in-flow 子元素称为 munder base,第二个 in-flow 子元素称为 munder underscript

<mover> 元素的 in-flow 子元素少于或多于两个,则其布局算法与 mrow 元素相同。否则,第一个 in-flow 子元素称为 mover base,第二个 in-flow 子元素称为 mover overscript

<munderover> 元素的 in-flow 子元素少于或多于三个,则其布局算法与 mrow 元素相同。否则,第一个 in-flow 子元素称为 munderover base,第二个 in-flow 子元素称为 munderover underscript,第三个 in-flow 子元素称为 munderover overscript

如果 <munder><mover><munderover> 的计算 math-style 属性等于 compact,且它们的基底是具有 movablelimits 属性的 embellished operator,则它们的布局算法分别与 3.4.1.2 Base with subscript3.4.1.3 Base with superscript3.4.1.4 Base with subscript and superscript 中描述的相应算法相同。

否则,<munder><mover><munderover> 的布局算法分别在 3.4.2.3 Base with underscript3.4.2.4 Base with overscript3.4.2.5 Base with underscript and overscript 中描述。

3.4.2.2 沿内联轴拉伸运算符的算法(Algorithm for stretching operators along the inline axis)

沿内联轴拉伸运算符的算法 如下所示。

  1. 如果存在 内联拉伸尺寸约束块拉伸尺寸约束,则被布局的元素为一个 embellished operator。用相同的拉伸尺寸约束布局基底。
  2. 将尚未布局的 in-flow 子元素列表分为两个列表:第一个列表 LToStretch 包含具有 stretchy 属性并沿内联方向有 stretch axisembellished operators;第二个列表为 LNotToStretch
  3. LNotToStretch 的所有项在没有任何拉伸尺寸约束下进行布局。如果 LToStretch 为空则停止。如果 LNotToStretch 为空,则对 LToStretch 的所有项使用内联拉伸尺寸约束 0 进行布局。
  4. 计算目标尺寸 T,即在上一步已布局的子盒的 边距盒 中最大的 内联尺寸
  5. 使用内联拉伸尺寸约束 TLToStretch 的所有元素进行(重新)布局。
3.4.2.3 基底带下标(Base with underscript)

<munder> 元素的布局如 20 所示。LargeOpItalicCorrection 是当 munder base 为具有 largeop 属性的 embellished operator 时的 斜体校正,否则为 0。

20 <munder> 元素的盒模型

数学内容的 最小内容内联尺寸(或 最大内容内联尺寸)按下文的 内联尺寸 计算方式得出,但将 munder base边距盒munder underscript边距盒内联尺寸 替换为它们各自的 最小内容内联尺寸(或 最大内容内联尺寸)。

in-flow 子元素采用 沿内联轴拉伸运算符的算法 进行布局。

数学内容的 内联尺寸 通过确定下列两者的绝对差值来计算:

如果 m 是上面第二条中计算得到的最小值,则 munder 基底内联偏移量为 −m − 基底 margin box 的一半内联尺寸munder 下标内联偏移量为 −m − munder 下标margin box 的一半内联尺寸,再减去 LargeOpItalicCorrection 的一半。

参数 UnderShiftUnderExtraDescender 通过按以下顺序考虑三种情形来确定:

  1. munder base 是具有 largeop 属性的 embellished operator,则 UnderShift 为以下两者的最大值:

    UnderExtraDescender 为 0。

  2. munder base 是具有 stretchy 属性且其 stretch axis 为内联方向时,则 UnderShift 为下列两者的最大值:

    UnderExtraDescender 为 0。

  3. 否则,若 accentunder 属性不是与 true 的 ASCII 不区分大小写匹配,则 UnderShift 等于 UnderbarVerticalGap,否则为零。UnderExtraAscenderUnderbarExtraDescender

数学内容的 行上行 为下列两者的最大值:

数学内容的 行下行 为下列两者的最大值:

munder base 的字母基线与容器的字母基线对齐。munder underscript 的字母基线相对于容器的字母基线向 line-under 方向偏移,距离等于基底的 墨水下行 + UnderShift

math content box 放置在 content box 内,使它们的 block-start 边对齐且这些边的中点重合。

3.4.2.4 基底带上标(Base with overscript)

<mover> 元素的布局如 21 所示。LargeOpItalicCorrection 是当 mover base 为具有 largeop 属性的 embellished operator 时的 斜体校正,否则为 0。

21 <mover> 元素的盒模型

数学内容的 最小内容内联尺寸(或 最大内容内联尺寸)按下文的 内联尺寸 计算方式得出,但将 mover base边距盒mover overscript边距盒内联尺寸 替换为它们各自的 最小内容内联尺寸(或 最大内容内联尺寸)。

in-flow 子元素采用 沿内联轴拉伸运算符的算法 进行布局。

TopAccentAttachmentmover overscripttop accent attachment,如果未定义则为该 overscript 的 边距盒 的一半内联尺寸。

数学内容的 内联尺寸 通过应用 沿内联轴拉伸运算符的算法 进行布局后,确定下列两者的绝对差值:

  • 下列项的最大值:
  • 下列项的最小值:
    • − 所述 mover base边距盒 的一半内联尺寸。
    • TopAccentAttachment + 一半的 LargeOpItalicCorrection

如果 m 是上面第二条中计算得到的最小值,则 mover 基底内联偏移量为 −m − 基底 margin 的一半内联尺寸mover 上标内联偏移量为 −m − mover 上标margin box 的一半内联尺寸,加上 LargeOpItalicCorrection 的一半。

参数 OverShiftOverExtraDescender 通过按以下顺序考虑三种情形来确定:

  1. mover base 是具有 largeop 属性的 embellished operator,则 OverShift 为以下两者的最大值:

    OverExtraAscender 为 0。

  2. mover base 是具有 stretchy 属性且其 stretch axis 为内联方向时,则 OverShift 为以下两者的最大值:

    OverExtraDescender 为 0。

  3. 否则,OverShift 等于:

    1. OverbarVerticalGap,如果 accent 属性不是与 true 的 ASCII 不区分大小写匹配;
    2. 或者为 AccentBaseHeight − 所述 mover base边距盒 的行上行(如果该差值非负);
    3. 否则为 0。

    OverExtraAscenderOverbarExtraAscender

对于重音型 overscript 以及其基底的行上行不超过 AccentBaseHeight 的情况,[OPEN-FONT-FORMAT] 与 [TEXBOOK] 中的规则实际上是将 overscript 与基底的字母基线对齐。这假定重音字形的墨水底部大约位于其字形相对于字母基线的 AccentBaseHeight 之上。因此,上述规则可以保证所有 overscript 的底部对齐,同时避免与基底碰撞。然而 MathML 可以有任意的重音 overscript,因此这里提供了更通用且简单的规则:确保 overscript 的底部至少位于基底的字母基线之上 AccentBaseHeight 的距离。

数学内容的 行上行 为下列两者的最大值:

数学内容的 行下行 为下列两者的最大值:

mover base 的字母基线与容器的字母基线对齐。mover overscript 的字母基线相对于容器的字母基线向 line-over 方向偏移,距离等于基底的 墨水上行 + OverShift

math content box 放置在 content box 内,使它们的 block-start 边对齐且这些边的中点重合。

3.4.2.5 基底同时有下标与上标(Base with underscript and overscript)

<munderover> 的一般布局如 22 所示。参数 LargeOpItalicCorrectionUnderShiftUnderExtraDescenderOverShiftOverExtraDescender 的计算与在 3.4.2.3 Base with underscript3.4.2.4 Base with overscript 中的计算相同。

22 <munderover> 元素的盒模型

数学内容的最小内容内联尺寸最大内容内联尺寸内联尺寸,计算方式为最大内联偏移量与最小内联偏移量的绝对差值。 这些极值通过取3.4.2.3 带下标基底3.4.2.4 带上标基底中计算所得极值的极大/极小值获得。 munderover 基底munderover 下标munderover 上标内联偏移量,按这些章节的方法计算,但所用的最小值 m(对应极小值的最小值)取新的。

与这些章节类似,in-flow 子元素采用 沿内联轴拉伸运算符的算法 进行布局。

数学内容的 行上行行下行 也通过取在 3.4.2.3 Base with underscript3.4.2.4 Base with overscript 中计算出的相应极值的极端值来计算。

最后,munderover basemunderover underscriptmunderover overscript 的字母基线按 3.4.2.3 Base with underscript3.4.2.4 Base with overscript 中的规则计算。

math content box 放置在 content box 内,使它们的 block-start 边对齐且这些边的中点重合。

当 underscript(或 overscript)为空盒时,基底和 overscript(或 underscript)的布局类似于 3.4.2.4 Base with overscript(或 3.4.2.3 Base with underscript),但空的 underscript(或 overscript)的位置可能会增加额外的间距。为保持算法简单,不对空脚本做特殊处理。

3.4.3 前置脚本与张量指标 <mmultiscripts>

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

下例演示了前置脚本和后置脚本的基本用法,涉及一个 mprescripts。 在不需要脚本的位置使用空的 mrow 元素占位。 脚本内容的字体大小会自动缩小。

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

如果 <mmultiscripts><mprescripts> 元素的 display 计算属性不为 block mathinline math, 则按 CSS 规范描述的对应值进行布局。 否则,按下述规则布局。

<mprescripts> 元素的布局与 mrow 元素相同。

一个合法的 <mmultiscripts> 元素包含下列 in-flow 子元素:

  • 第一个 in-flow 子元素,称为 mmultiscripts base,且不能为 mprescripts 元素。
  • 后接偶数个 in-flow 子元素,称为 mmultiscripts 后置脚本,均不能为 mprescripts 元素。这些脚本可以是(可能为空的)下标、上标、下标、上标、下标、上标等列表。 每对相邻下标、上标称为 下标/上标对
  • 可选地,后接一个 mprescripts 元素和偶数个 in-flow 子元素,称为 mmultiscripts 前置脚本,均不能为 mprescripts 元素。这些脚本组成一个(可能为空的)下标/上标对的列表。

如果 <mmultiscripts> 元素不合法,则其布局同 mrow 元素。 否则布局算法见 3.4.3.1 基底带前置脚本与后置脚本

3.4.3.1 基底带前置脚本与后置脚本

<mmultiscripts> 元素布局如 23 所示。 对于每个 mmultiscripts 后置脚本下标/上标对,其 ItalicCorrectionLargeOpItalicCorrection定义如 3.4.1.2 基底带下标3.4.1.3 基底带上标

23 <mmultiscripts> 元素的盒模型

数学内容的最小内容内联尺寸(或最大内容内联尺寸),用下文内联尺寸算法,但 mmultiscripts base 和各脚本的 边距盒 替换为其 最小内容内联尺寸 (或最大内容内联尺寸)。

若有 内联拉伸尺寸约束块拉伸尺寸约束mmultiscripts base 也用该约束布局,否则不带任何拉伸约束。其他元素总是不带拉伸尺寸约束布局。

数学内容内联尺寸用如下算法计算:

  1. 设置 inline-offset 为 0。
  2. 对每个 mmultiscripts 前置脚本下标/上标对,将 inline-offset 增加 SpaceAfterScript 及 下列最大值:

  3. inline-offset 增加 mmultiscripts base边距盒内联尺寸, 并将 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 基底带下标与上标算法,且用上面得到的 SubShiftSuperShift,取最大值。

数学内容行下行,为每对 下标/上标对3.4.1.4 基底带下标与上标算法,且用上面得到的 SubShiftSuperShift,取最大值。

最后,各 in-flow 子元素位置如下算法安排:

  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. 分别将下标(或上标)的字母基线line-under(或 line-over)方向与父基线偏移 SubShift(或 SuperShift)。
    6. inline-offset 增加 pair-inline-size
  3. mmultiscripts base<mprescripts> 盒放在 inline-offset 处,字母基线与父基线对齐。
  4. 对每个 mmultiscripts 后置脚本下标/上标对

    1. pair-inline-size 设为下标盒和上标盒的 内联尺寸两者最大。
    2. 下标放在 inline-offsetLargeOpItalicCorrection
    3. 上标放在 inline-offset + ItalicCorrection
    4. 分别将下标(或上标)的字母基线line-under(或 line-over)方向与父基线偏移 SubShift(或 SuperShift)。
    5. inline-offset 增加 pair-inline-size
    6. inline-offset 增加 SpaceAfterScript

仅含一个 mmultiscripts 后置脚本 下标/上标对<mmultiscripts>,布局方式与同样 in-flow 子元素的 <msubsup> 相同。 但是,如 对于<msubsup> 所述, 若下标(或上标)为空盒,则一般不与 <msub> (或 <msup>)一致。 为简化算法,不对空脚本作特殊处理。

3.4.4 Displaystyle、scriptlevel 和 scripts 中的 math-shift

对于所有脚本类元素,经验法则是在除第一个子元素外的所有子元素中,将displaystyle 设为 false,并累加 scriptlevel。 但是,若 mover (或 munderover) 元素具有 accent 属性且其值为 ASCII 不区分大小写的 true,则不会在其第二个(或第三个)子元素中累加 scriptlevel。 同样, movermunderover 元素,若有 accentunder 属性且其值为 ASCII 不区分大小写的 true,则也不会在其第二个子元素中累加 scriptlevel。

<mmultiscripts> 会对位于 mprescripts 之前的偶数位置的子元素和之后的奇数位置的子元素,设置 math-shiftcompact<msub><msubsup> 会对它们的第二个子元素设置 math-shiftcompactmovermunderover 若有 accent 属性且其值为 ASCII 不区分大小写 true,也会在首个子元素中设置math-shiftcompact

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 元素的所有子元素都是 in-flow,且 <mprescripts> 为空。 因此 CSS 规则基本上自动实现了脚本的 displaystylescriptlevel 的切换; 以及下标和部分基底的 math-shift 的自动切换。

3.5 表格式数学

矩阵、数组及其他表格状的数学记号标记使用 mtable mtr mtd 元素。这些元素类似于 [HTML] 中的 tabletrtd 元素。

下例展示了如何用表格布局写出一个矩阵。注意它在竖直方向上与分数线和等号中线对齐。

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

3.5.1 表格或矩阵 <mtable>

mtable 的布局类似于 inline-table,并将 displaystyle 设为 false用户代理样式表需包含如下规则用以实现上述属性:

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

mtable 元素表现为 CSS table, 其 最小内容内联尺寸最大内容内联尺寸内联尺寸块尺寸first baseline setlast baseline set 集都相应地决定。 表的中心与math axis对齐。

<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;
  /* Centering inside table cells should rely on box alignment properties.
     See https://github.com/w3c/mathml-core/issues/156 */
  text-align: center;
  padding: 0.5ex 0.4em;
}

<mtd> 同时接受 2.1.3 全局属性 以及下列属性:

columnspan(分别为 rowspan)属性,其语法和语义与[HTML] 中 <td> 元素上的 colspan (或 rowspan) 属性一致。特别是,其解析参见 算法 processing rows 要求,且始终将 "colspan" 视作 "columnspan"。

在 [MathML3] 及更早版本中该属性名称为 columnspan,为兼容遗留原因保留该名称。

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

3.6 表达式增强

maction 元素最初提供了一种将操作绑定到表达式的方法。

<maction> 元素接受2.1.3 全局属性中描述的属性,还有如下属性:

本规范未定义针对 actiontypeselection 属性的任何可观察行为。

下例展示了 [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 example

<maction> 元素的布局算法与 <mrow> 元素相同。 用户代理样式表 必须包含如下规则,以隐藏除第一个子元素外的其它子元素, 这也是 legacy 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 example

<semantics> 元素接受2.1.3 全局属性。其布局算法与 mrow 元素相同。 用户代理样式表 必须包含如下规则,以只渲染被注解的 MathML 表达式:

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

<annotation-xml><annotation> 元素接受2.1.3 全局属性, 及如下属性:

本规范未定义针对 encoding 属性的任何可观察行为。

<annotation-xml><annotation> 的布局算法与 mtext 元素相同。

作者可以利用 encoding 区分用于 HTML 集成点、剪贴板复制、备选渲染等的注解。 特别是,可以用 CSS 实现可选注解显示,例如
/* 隐藏被注解的主内容 */
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 mathdisplay: inline math

display 属性 来自 CSS Display Module Level 3 ,现扩展为新增一个内部 display 类型:

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

对于非 MathML 元素,如指定 displayblock mathinline math,则计算值分别为 block flowinline flow。 对于 mtable 元素, 其计算值分别为block tableinline table。 对于 mtr 元素,计算值为 table-row。 对于 mtd 元素,计算值为 table-cell

MathML 元素若计算 display 值为 block mathinline math ,则根据其标签名控制盒模型生成与布局(详见相关章节)。 未知 MathML 元素mrow 元素处理。

display: block mathdisplay: inline math 可为 MathML 元素提供默认布局, 同时允许作者通过原生 display 值或 自定义值覆盖, 便于自定义修饰或扩展 MathML Core(包括 polyfill)。

下例中,MathML mrow 元素的默认布局被覆盖为网格排列。

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

4.2 math-auto 字母变形

text-transform 属性 来自 CSS Text Module Level 4 新增值 math-auto。 若文本节点内容为单一字符,计算值为 math-auto 且该字符在C.1 italic 映射表的“原字符”列,则转换为“italic”列对应字符。

常见约定是多字母标识符(如函数名 "exp")正常体,单字母标识符(如变量 "n")斜体。math-auto 属性旨在实现默认行为,作者可覆写。数学字体为这些斜体专门设计了对应字形,见C.1 italic 映射,其形状和普通 italic 不同。下方为分别用 font-style: italic(左)和 text-transform: math-auto(右)渲染的数学公式对比:

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

4.3 math-style 属性

名称: math-style
值: normal | compact
初始值: normal
适用元素: 所有元素
是否继承: yes
百分比: n/a
计算值: 指定的关键字
标准顺序: n/a
动画类型: not animatable
媒体: visual

math-stylecompact 时,后代数式布局会尝试最小化逻辑高度,实施如下规则:

下例显示了 math 根式分别用 math-style: compact(左)和 math-style: normal(右)渲染。 前者分数自动缩小字体,求和符号上/下限表现为下/上标;后者求和符号大于正文,分数的竖向间隙也更大。

math-style example

通常 math-style 两种值分别对应行内与行间数学排版 [TeXBook]。 行间公式内部分子公式(如脚本、矩阵元素、分子分母等)可自动转入行内模式,有时需显示覆写,math-style 属性便于实现或暴露此行为。

4.4 math-shift 属性

名称: math-shift
值: normal | compact
初始值: normal
适用元素: 所有元素
是否继承: yes
百分比: n/a
计算值: 指定的关键字
标准顺序: n/a
动画类型: not animatable
媒体: visual

如果 math-shiftcompact,后代数式布局放置上标时会使用 superscriptShiftUpCramped; 若为 normal,则使用 superscriptShiftUp

该属性用于 MathML 脚本类元素排版上标。参见 § 3.4.1 下标、上标、下上标3.4.3 前置脚本与张量指标3.4.2 下标、上标和上下标

下例中,两个“x 的平方”都用紧凑 math-style 和相同 font-size 渲染, 但位于根号内的使用紧凑 math-shift, 另一个为普通 math-shift,导致上标“2”的抬升略有差异。

math-shift example

TeX [TeXBook] 默认用 normal 模式,遇某些子公式(如根号、分母等)自动转为 compact(TeX 称 "cramped")。math-shift 属性便于实现和覆写这些默认规则。

4.5 math-depth 属性

新增 math-depth 属性,用于描述公式每个元素相对于顶层容器的“深度”。 这用于确定 font-sizemath 时的计算值。

名称: math-depth
值: auto-add | add(<integer>) | <integer>
初始值: 0
适用元素: 所有元素
是否继承: yes
百分比: n/a
计算值: 整数,见下
标准顺序: n/a
动画类型: not animatable
媒体: visual

math-depth 的计算值如下:

font-size 指定为 math, 其计算值由继承 font-size 乘以下算法的非零缩放因子求得:

  1. 记 A 为继承 math-depth, B 为本元素的计算 math-depth, C=0.71,S=1.0
    • 若 A=B,返回 S。
    • 若 B<A,交换 A、B,InvertScaleFactor 记为 true。
    • 否则 B>A,InvertScaleFactor 为 false。
  2. 令 E=B-A>0。
  3. 若字体含 OpenType MATH 表:
  4. S 乘以 CE
  5. InvertScaleFactor 为 false 则返回 S,否则返回 1/S。

下例用 Latin Modern Math 字体显示的数学公式,其 math-style 为 normal。 进入脚本、分数等的子表达式时,字号会根据字体内 MATH 表自动缩小。尤其进入上标时减小,进入根式前脚本时减速更快。而进入内层分数会缩小字号,进入外层分数则不;这是因分数布局会自动切换 math-style

font-size-scriptlevel example

这些规则(参见 [TeXBook])较为复杂,单用 math-depth 能更加精确表达。实际实现可依赖用户代理样式表,作者和 polyfill 也可通过 css 灵活覆写。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 无效则为 0.71。
scriptScriptPercentScaleDown
MATH.MathConstants.scriptScriptPercentScaleDown / 100;若无效则为 0.5041。
displayOperatorMinHeight
MATH.MathConstants.displayOperatorMinHeight,如无用默认回退常量
axisHeight
MATH.MathConstants.axisHeight,如无用 OS/2.sxHeight 的一半。
accentBaseHeight
MATH.MathConstants.accentBaseHeight,如无用 OS/2.sxHeight
subscriptShiftDown
MATH.MathConstants.subscriptShiftDown,如无用 OS/2.ySubscriptYOffset
subscriptTopMax
MATH.MathConstants.subscriptTopMax,如无用 ⅘ × OS/2.sxHeight
subscriptBaselineDropMin
MATH.MathConstants.subscriptBaselineDropMin,如无用默认回退常量
superscriptShiftUp
MATH.MathConstants.superscriptShiftUp,如无用 OS/2.ySuperscriptYOffset
superscriptShiftUpCramped
MATH.MathConstants.superscriptShiftUpCramped,如无用默认回退常量
superscriptBottomMin
MATH.MathConstants.superscriptBottomMin,如无用 ¼ × OS/2.sxHeight
superscriptBaselineDropMax
MATH.MathConstants.superscriptBaselineDropMax,如无用默认回退常量
subSuperscriptGapMin
MATH.MathConstants.subSuperscriptGapMin,如无用 4 ×默认线条厚度
superscriptBottomMaxWithSubscript
MATH.MathConstants.superscriptBottomMaxWithSubscript,如无用⅘ × OS/2.sxHeight
spaceAfterScript
MATH.MathConstants.spaceAfterScript,如无用 1/24em。
upperLimitGapMin
MATH.MathConstants.upperLimitGapMin,如无用默认回退常量
upperLimitBaselineRiseMin
MATH.MathConstants.upperLimitBaselineRiseMin,如无用默认回退常量
lowerLimitGapMin
MATH.MathConstants.lowerLimitGapMin,如无用默认回退常量
lowerLimitBaselineDropMin
MATH.MathConstants.lowerLimitBaselineDropMin,如无用默认回退常量
stackTopShiftUp
MATH.MathConstants.stackTopShiftUp,如无用默认回退常量
stackTopDisplayStyleShiftUp
MATH.MathConstants.stackTopDisplayStyleShiftUp,如无用默认回退常量
stackBottomShiftDown
MATH.MathConstants.stackBottomShiftDown,如无用默认回退常量
stackBottomDisplayStyleShiftDown
MATH.MathConstants.stackBottomDisplayStyleShiftDown,如无用默认回退常量
stackGapMin
MATH.MathConstants.stackGapMin,如无用 3 ×默认线条厚度
stackDisplayStyleGapMin
MATH.MathConstants.stackDisplayStyleGapMin,如无用 7 × 默认线条厚度
stretchStackTopShiftUp
MATH.MathConstants.stretchStackTopShiftUp,如无用默认回退常量
stretchStackBottomShiftDown
MATH.MathConstants.stretchStackBottomShiftDown,如无用默认回退常量
stretchStackGapAboveMin
MATH.MathConstants.stretchStackGapAboveMin,如无用默认回退常量
stretchStackGapBelowMin
MATH.MathConstants.stretchStackGapBelowMin,如无用默认回退常量
fractionNumeratorShiftUp
MATH.MathConstants.fractionNumeratorShiftUp,如无用默认回退常量
fractionNumeratorDisplayStyleShiftUp
MATH.MathConstants.fractionNumeratorDisplayStyleShiftUp,如无用默认回退常量
fractionDenominatorShiftDown
MATH.MathConstants.fractionDenominatorShiftDown,如无用默认回退常量
fractionDenominatorDisplayStyleShiftDown
MATH.MathConstants.fractionDenominatorDisplayStyleShiftDown,如无用默认回退常量
fractionNumeratorGapMin
MATH.MathConstants.fractionNumeratorGapMin,如无用默认线条厚度
fractionNumDisplayStyleGapMin
MATH.MathConstants.fractionNumDisplayStyleGapMin,如无用 3 × 默认线条厚度
fractionRuleThickness
MATH.MathConstants.fractionRuleThickness,如无用默认线条厚度
fractionDenominatorGapMin
MATH.MathConstants.fractionDenominatorGapMin,如无用默认线条厚度
fractionDenomDisplayStyleGapMin
MATH.MathConstants.fractionDenomDisplayStyleGapMin,如无用 3 × 默认线条厚度
overbarVerticalGap
MATH.MathConstants.overbarVerticalGap,如无用 3 × 默认线条厚度
overbarExtraAscender
MATH.MathConstants.overbarExtraAscender,如无用默认线条厚度
underbarVerticalGap
MATH.MathConstants.underbarVerticalGap,如无用 3 × 默认线条厚度
underbarExtraDescender
MATH.MathConstants.underbarExtraDescender,如无用默认线条厚度
radicalVerticalGap
MATH.MathConstants.radicalVerticalGap,如无用 1¼ × 默认线条厚度
radicalDisplayStyleVerticalGap
MATH.MathConstants.radicalDisplayStyleVerticalGap,如无用默认线条厚度 + ¼ OS/2.sxHeight
radicalRuleThickness
MATH.MathConstants.radicalRuleThickness,如无用默认线条厚度
radicalExtraAscender
MATH.MathConstants.radicalExtraAscender,如无用默认线条厚度
radicalKernBeforeDegree
MATH.MathConstants.radicalKernBeforeDegree,如无用 5/18em。
radicalKernAfterDegree
MATH.MathConstants.radicalKernAfterDegree,如无用 −10/18em。
radicalDegreeBottomRaisePercent
MATH.MathConstants.radicalDegreeBottomRaisePercent / 100.0,如无用 0.6。

5.2 字形信息 (MathGlyphInfo)

MathTopAccentAttachment 存在风险。

以下为首个可用字体的逐字形表:

MathItalicsCorrectionInfo
MATH.MathGlyphInfo.MathItalicsCorrectionInfo 子表,表示斜体校正值。若有对应字形则用 MATH.MathGlyphInfo.MathItalicsCorrectionInfo.italicsCorrection ,否则用 0
MathTopAccentAttachment
MATH.MathGlyphInfo.MathTopAccentAttachment 子表,描述在 内联轴 上顶端数学重音的定位。若有对应字形则用 MATH.MathGlyphInfo.MathTopAccentAttachment.topAccentAttachment ,否则取该字形字宽一半。

5.3 运算符的尺寸变体 (MathVariants)

本节描述如何利用 MATH.MathVariants 表处理任意大小的可拉伸字形。

5.3.1 GlyphAssembly

本节基于 [OPEN-TYPE-MATH-IN-HARFBUZZ]。为方便起见,下列定义使用:

  • ominMATH.MathVariant.minConnectorOverlap
  • GlyphPartRecordpartFlagsfExtender 则为 extender。
  • GlyphAssemblyMathVariant.horizGlyphConstructionOffsets 获得则为水平方向,否则为垂直(MathVariant.vertGlyphConstructionOffsets)。
  • 给定 GlyphAssemblyNExt (分别 NNonExt)为 extender(非 extender)数量。
  • 给定 GlyphAssemblySExt (分别 SNonExt)为所有 extender(非 extender)GlyphPartRecord.fullAdvance 的和。
  • SExt,NonOverlapping = SExtomin NExt 表示 extender 最大非重叠部分之和。

如不满足下列条件,用户代理应视该 GlyphAssembly 为无效:

  • NExt > 0,否则无法重复扩展。
  • SExt,NonOverlapping > 0,否则拼合 extender 时无法变长。
  • GlyphAssembly.partRecords 每一项的 startConnectorLengthendConnectorLength 不得小于 omin,否则无法满足最小连接重叠。

本规范下,字形拼合通过每个 extender 重复 r 次,每次拼接重叠 o。拼合内字形数量 AssemblyGlyphCount(r) = NNonExt + r NExt,拉伸尺寸 AssembySize(o, r) = SNonExt + r SExt − o (AssemblyGlyphCount(r) − 1)。

rmin 是获得长度至少为 T 拼合所需的最小重复次数,即最小 r 满足 AssembySize(omin, r) ≥ T。等于 0 和上取整 ((T − SNonExt + omin (NNonExt − 1)) / SExt,NonOverlapping)的最大值。

omax,theorical = (AssembySize(0, rmin) − T) / (AssemblyGlyphCount(rmin) − 1) 为无重叠拼合时的理论重叠值,用以均匀平分多余长度。

omax 是通过各 extender rmin 次重复拼合、长度至少达 T 可实现的最大重叠。 若 AssemblyGlyphCount(rmin) ≤ 1,则重叠值无关紧要。 否则,omax 取下列最小值:

  • omax,theorical
  • GlyphPartRecord.startConnectorLength,排除最后一个非 extender。
  • GlyphPartRecord.endConnectorLength,排除第一个非 extender。

glyph assembly stretch size 对于目标长度 T,为 AssembySize(omax, rmin)。

字形拼合宽度字形拼合上行字形拼合下行 定义如下:

  • GlyphAssembly 为垂直拼合,宽度等于部件中所有 GlyphPartRecord.glyphID 字形最大的 advance width,上行等于目标长度 T 的 glyph assembly stretch size,下行为 0。
  • 否则,为水平方向,宽度为目标长度 T 下的 glyph assembly stretch size,上行(下行)为部件所有字形的最大上行(下行)。

字形拼合高度上行下行

对于垂直(或水平)拼合,水平方向(或垂直方向)度量与目标长度 T 无关。

字形拼合塑形 算法如下:

  1. 计算 rminomax
  2. (x, y) = (0, 0)RepetitionCounter = 0, PartIndex = -1。
  3. 不断执行以下步骤:
    1. 如果 RepetitionCounter 等于 0:
      1. PartIndex 加一
      2. 如 PartIndex 等于 GlyphAssembly.partCount 则停止。
      3. 否则设置 PartGlyphAssembly.partRecords[PartIndex]。若 Part 为 extender 设 RepetitionCounterrmin,否则为 1。
      • 若为水平拼合,则绘制 Part.glyphID,其(left, baseline)座标为 (x, y),再执行 x = x + Part.fullAdvance − omax
      • 否则(垂直拼合),绘制 Part.glyphID,其(left, bottom)座标为 (x, y),再 y = y − Part.fullAdvance + omax
    2. RepetitionCounter 减一。

5.3.2 字形拉伸算法

沿块轴拉伸字形的期望内联尺寸 算法如下:

  1. S 设为字形的 advance width。
  2. MathGlyphConstruction 表存在于 MathVariants.vertGlyphConstructionOffsets,则
    1. 对每个 MathGlyphVariantRecord,确保 S 至少为 variantGlyph advance width。
    2. 如有有效 GlyphAssembly,确保 S 至少为字形拼合宽度
  3. 返回 S。
沿块轴拉伸字形的期望内联尺寸 会给出该字形所有垂直构造宽度的最大值。实际中数学字体各垂直构造宽度几乎恒定,所以上估影响较小。

拉伸字形塑形 算法如下:

  1. MathVariants.horizGlyphConstructionOffsets(或 vert)中无 MathGlyphConstruction,则失败返回。
  2. 若 glyph 的 advance width(height)大于等于 T,则直接常规塑形和边界框,MathItalicsCorrectionInfo 为斜体校正,成功返回。
  3. 遍历 mathGlyphVariantRecord。如有 variant 的 advanceMeasurement 大于等于 T,则对 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 基于字典的属性以及运算符的stretch axis的值。下方紧凑表格适于计算机处理,另一种人类可读的展示见B.2 运算符字典(人类可读版)

根据类别设置运算符属性的算法如下:

判定运算符类别的算法Content, Form)如下:

  1. Content 作为 UTF-16 字符串长度不是 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 的代理对,且 Formpostfix,则类别为 I 退出。
    • 若第二字符为 U+0338 COMBINING LONG SOLIDUS OVERLAY 或 U+20D2 COMBINING LONG VERTICAL LINE OVERLAY,则将 Content 替换为首字符,转第 3 步。
    • 否则,若 ContentOperators_2_ascii_chars 列表中,则用 "U+0320 加在该列表 index 的 Unicode 字符" 替换 Content,转第 3 步。
    • 否则类别为 Default 退出。
  3. Form 为 infix 且 Content 是 U+007C VERTICAL LINE 或 U+223C TILDE OPERATOR,则类别为 ForceDefault 退出。若表25 中 (Content, Form) 对应的类别在26 为 N/A 编码(即类别为 LM)则立即以该类别退出。 否则:
    • Content 在 U+0000–U+03FF 则设 KeyContent,否则若在 U+2000–U+2BFF 则 Key = Content − 0x1C00。否则为 Default
    • 根据 Form 是 infix, prefix, postfix 分别给 Key 加 0x0000, 0x1000, 0x2000。
    • 断言: Key ≤ 0x2FFF。
    • 27 查找 Entry % 0x4000 = Key 的项,若找到用 Entry / 0x1000 编码的类别(见26)返回,否则类别为 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 位编码区分 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 升序表。
KeyEntry % 0x4000, 类别编码 Entry / 0x1000。
共 716 条,590 字节(4 位范围长度)。
  • 2527 的表都按范围编码,充分利用了大量连续 Unicode 块的优势。
  • 查找这些表时,可先对所有范围首项做二分查找,再额外检查范围长度。
  • 因 log 函数凹性,对27全表二分查找比分别查各大子表要高效。

Unicode 字符c固有拉伸轴,若属于下表则为 inline(内联方向),否则为 block(块方向)。

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 位)。
固有拉伸轴也可作为运算符字典的布尔属性。但因其不依赖形式且能拉伸到内联方向的运算符极少,作为独立有序数组更高效。每项若单独测试 U+1EEF0 和 U+1EEF1,可用 16 字节编码。

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

本节为非规范性内容。

下列字典为B.1 运算符字典的人类可读版本。 请参见 3.2.4.2 基于字典的属性,了解 如何使用该字典以及如何 确定 ContentForm 作为索引方式查询字典中的值。

rspacelspace 的值 在对应的列中给出。 stretchysymmetriclargeopmovablelimits 这些属性,只要在“properties”列出现,则为 true

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

B.3 组合字符等价

本节为非规范性内容。

下表给出在 MathML 重音构造中使用时,间距字符与不间距字符之间的映射。

组合

非组合字符 样式 组合字符
U+002B 加号 (plus sign) 下方 U+031F 下方组合加号 (combining plus sign below)
U+002D 连字符 (hyphen-minus) 上方 U+0305 组合长音符 (combining overline)
U+002D 连字符 (hyphen-minus) 下方 U+0320 下方组合减号 (combining minus sign below)
U+002D 连字符 (hyphen-minus) 下方 U+0332 组合下划线 (combining low line)
U+002E 句号 (full stop) 上方 U+0307 上方组合点 (combining dot above)
U+002E 句号 (full stop) 下方 U+0323 下方组合点 (combining dot below)
U+005E 抑扬符/脱字符 (circumflex accent) 上方 U+0302 上方组合抑扬符 (combining circumflex accent)
U+005E 抑扬符/脱字符 (circumflex accent) 下方 U+032D 下方组合抑扬符 (combining circumflex accent below)
U+005F 下划线 (low line) 下方 U+0332 组合下划线 (combining low line)
U+0060 重音符/反引号 (grave accent) 上方 U+0300 上方组合重音符 (combining grave accent)
U+0060 重音符/反引号 (grave accent) 下方 U+0316 下方组合重音符 (combining grave accent below)
U+007E 波浪号 (tilde) 上方 U+0303 上方组合波浪 (combining tilde)
U+007E 波浪号 (tilde) 下方 U+0330 下方组合波浪 (combining tilde below)
U+00A8 分音符 (diaeresis) 上方 U+0308 上方组合分音符 (combining diaeresis)
U+00A8 分音符 (diaeresis) 下方 U+0324 下方组合分音符 (combining diaeresis below)
U+00AF 长音符/横线 (macron) 上方 U+0304 上方组合长音符 (combining macron)
U+00AF 长音符/横线 (macron) 上方 U+0305 组合长音符 (combining overline)
U+00B4 尖音符/急音符 (acute accent) 上方 U+0301 上方组合尖音符 (combining acute accent)
U+00B4 尖音符/急音符 (acute accent) 下方 U+0317 下方组合尖音符 (combining acute accent below)
U+00B8 尾音符/塞迪拉 (cedilla) 下方 U+0327 下方组合塞迪拉 (combining cedilla)
U+02C6 修饰字母脱字符 (modifier letter circumflex accent) 上方 U+0302 上方组合抑扬符 (combining circumflex accent)
U+02C7 抑扬符/卡龙 (caron) 上方 U+030C 上方组合卡龙 (combining caron)
U+02C7 抑扬符/卡龙 (caron) 下方 U+032C 下方组合卡龙 (combining caron below)
U+02D8 短音符/弧 (breve) 上方 U+0306 上方组合短音符 (combining breve)
U+02D8 短音符/弧 (breve) 下方 U+032E 下方组合短音符 (combining breve below)
U+02D9 上点 (dot above) 上方 U+0307 上方组合点 (combining dot above)
U+02D9 上点 (dot above) 下方 U+0323 下方组合点 (combining dot below)
U+02DB 尾圈 (ogonek) 下方 U+0328 下方组合尾圈 (combining ogonek)
U+02DC 小波浪 (small tilde) 上方 U+0303 上方组合波浪 (combining tilde)
U+02DC 小波浪 (small tilde) 下方 U+0330 下方组合波浪 (combining tilde below)
U+02DD 双长音符 (double acute accent) 上方 U+030B 上方组合双长音符 (combining double acute accent)
U+203E 长横线/上划线 (overline) 上方 U+0305 组合长音符 (combining overline)
U+2190 左箭头 (leftwards arrow) 上方 U+20D6
U+2192 右箭头 (rightwards arrow) 上方 U+20D7 上方组合右箭头 (combining right arrow above)
U+2192 右箭头 (rightwards arrow) 上方 U+20EF 下方组合右箭头 (combining right arrow below)
U+2212 减号 (minus sign) 上方 U+0305 组合长音符 (combining overline)
U+2212 减号 (minus sign) 下方 U+0332 组合下划线 (combining low line)
U+27F6 长右箭头 (long rightwards arrow) 上方 U+20D7 上方组合右箭头 (combining right arrow above)
U+27F6 长右箭头 (long rightwards arrow) 上方 U+20EF 下方组合右箭头 (combining right arrow below)

非组合

组合字符 样式 非组合字符
U+0300 上方组合重音符 (combining grave accent) 上方 U+0060 重音符/反引号 (grave accent)
U+0301 上方组合尖音符 (combining acute accent) 上方 U+00B4 尖音符/急音符 (acute accent)
U+0302 上方组合抑扬符 (combining circumflex accent) 上方 U+005E 抑扬符/脱字符 (circumflex accent)
U+0302 上方组合抑扬符 (combining circumflex accent) 上方 U+02C6 修饰字母脱字符 (modifier letter circumflex accent)
U+0303 上方组合波浪 (combining tilde) 上方 U+007E 波浪号 (tilde)
U+0303 上方组合波浪 (combining tilde) 上方 U+02DC 小波浪 (small tilde)
U+0304 上方组合长音符 (combining macron) 上方 U+00AF 长音符/横线 (macron)
U+0305 组合长音符 (combining overline) 上方 U+002D 连字符 (hyphen-minus)
U+0305 组合长音符 (combining overline) 上方 U+00AF 长音符/横线 (macron)
U+0305 组合长音符 (combining overline) 上方 U+203E 上划线/长横线 (overline)
U+0305 组合长音符 (combining overline) 上方 U+2212 减号 (minus sign)
U+0306 上方组合短音符 (combining breve) 上方 U+02D8 短音符/弧 (breve)
U+0307 上方组合点 (combining dot above) 上方 U+02E
U+0307 上方组合点 (combining dot above) 上方 U+002E 句号 (full stop)
U+0307 上方组合点 (combining dot above) 上方 U+02D9 上点 (dot above)
U+0308 上方组合分音符 (combining diaeresis) 上方 U+00A8 分音符 (diaeresis)
U+030B 上方组合双长音符 (combining double acute accent) 上方 U+02DD 双长音符 (double acute accent)
U+030C 上方组合卡龙 (combining caron) 上方 U+02C7 抑扬符/卡龙 (caron)
U+0312 上方组合倒逗号 (combining turned comma above) 上方 U+0B8
U+0316 下方组合重音符 (combining grave accent below) 下方 U+0060 重音符/反引号 (grave accent)
U+0317 下方组合尖音符 (combining acute accent below) 下方 U+00B4 尖音符/急音符 (acute accent)
U+031F 下方组合加号 (combining plus sign below) 下方 U+002B 加号 (plus sign)
U+0320 下方组合减号 (combining minus sign below) 下方 U+002D 连字符 (hyphen-minus)
U+0323 下方组合点 (combining dot below) 下方 U+002E 句号 (full stop)
U+0323 下方组合点 (combining dot below) 下方 U+02D9 上点 (dot above)
U+0324 下方组合分音符 (combining diaeresis below) 下方 U+00A8 分音符 (diaeresis)
U+0327 下方组合塞迪拉 (combining cedilla) 下方 U+00B8 尾音符/塞迪拉 (cedilla)
U+0328 下方组合尾圈 (combining ogonek) 下方 U+02DB 尾圈 (ogonek)
U+032C 下方组合卡龙 (combining caron below) 下方 U+02C7 抑扬符/卡龙 (caron)
U+032D 下方组合抑扬符 (combining circumflex accent below) 下方 U+005E 抑扬符/脱字符 (circumflex accent)
U+032E 下方组合短音符 (combining breve below) 下方 U+02D8 短音符/弧 (breve)
U+0330 下方组合波浪 (combining tilde below) 下方 U+007E 波浪号 (tilde)
U+0330 下方组合波浪 (combining tilde below) 下方 U+02DC 小波浪 (small tilde)
U+0332 组合下划线 (combining low line) 下方 U+002D 连字符 (hyphen-minus)
U+0332 组合下划线 (combining low line) 下方 U+005F 下划线 (low line)
U+0332 组合下划线 (combining low line) 下方 U+2212 减号 (minus sign)
U+0338 组合长斜线叠加 (combining long solidus overlay) over U+02F
U+20D7 上方组合右箭头 (combining right arrow above) 上方 U+2192 右箭头 (rightwards arrow)
U+20D7 上方组合右箭头 (combining right arrow above) 上方 U+27F6 长右箭头 (long rightwards arrow)
U+20EF 下方组合右箭头 (combining right arrow below) 上方 U+2192 右箭头 (rightwards arrow)
U+20EF 下方组合右箭头 (combining right arrow below) 上方 U+27F6 长右箭头 (long rightwards arrow)

B.4 基于 Unicode 的字形拼合

本节为非规范性内容。

下表提供了当字体未提供 MATH.MathVariants 表时,用户代理可用于拉伸给定的基底字符的回退方案。 5.3 运算符的尺寸变体 (MathVariants) 的算法基本相同,但做了若干调整:

基底字符 字形构造 扩展字符 底部/左侧字符 中部字符 顶端/右侧字符
U+0028 ( 垂直 U+239C ⎜ U+239D ⎝ 不适用 U+239B ⎛
U+0029 ) 垂直 U+239F ⎟ U+23A0 ⎠ 不适用 U+239E ⎞
U+003D = 水平 U+003D = U+003D = 不适用 不适用
U+005B [ 垂直 U+23A2 ⎢ U+23A3 ⎣ 不适用 U+23A1 ⎡
U+005D ] 垂直 U+23A5 ⎥ U+23A6 ⎦ 不适用 U+23A4 ⎤
U+005F _ 水平 U+005F _ U+005F _ 不适用 不适用
U+007B { 垂直 U+23AA ⎪ U+23A9 ⎩ U+23A8 ⎨ U+23A7 ⎧
U+007C | 垂直 U+007C | U+007C | 不适用 不适用
U+007D } 垂直 U+23AA ⎪ U+23AD ⎭ U+23AC ⎬ U+23AB ⎫
U+00AF ¯ 水平 U+00AF ¯ U+00AF ¯ 不适用 不适用
U+2016 ‖ 垂直 U+2016 ‖ U+2016 ‖ 不适用 不适用
U+203E ‾ 水平 U+203E ‾ U+203E ‾ 不适用 不适用
U+2190 ← 水平 U+23AF ⎯ U+2190 ← 不适用 U+23AF ⎯
U+2191 ↑ 垂直 U+23D0 ⏐ U+23D0 ⏐ 不适用 U+2191 ↑
U+2192 → 水平 U+23AF ⎯ U+23AF ⎯ 不适用 U+2192 →
U+2193 ↓ 垂直 U+23D0 ⏐ U+2193 ↓ 不适用 U+23D0 ⏐
U+2194 ↔ 水平 U+23AF ⎯ U+2190 ← 不适用 U+2192 →
U+2195 ↕ 垂直 U+23D0 ⏐ U+2193 ↓ 不适用 U+2191 ↑
U+21A4 ↤ 水平 U+23AF ⎯ U+2190 ← 不适用 U+22A3 ⊣
U+21A6 ↦ 水平 U+23AF ⎯ U+22A2 ⊢ 不适用 U+2192 →
U+21BC ↼ 水平 U+23AF ⎯ U+21BC ↼ 不适用 U+23AF ⎯
U+21BD ↽ 水平 U+23AF ⎯ U+21BD ↽ 不适用 U+23AF ⎯
U+21C0 ⇀ 水平 U+23AF ⎯ U+23AF ⎯ 不适用 U+21C0 ⇀
U+21C1 ⇁ 水平 U+23AF ⎯ U+23AF ⎯ 不适用 U+21C1 ⇁
U+2223 ∣ 垂直 U+2223 ∣ U+2223 ∣ 不适用 不适用
U+2225 ∥ 垂直 U+2225 ∥ U+2225 ∥ 不适用 不适用
U+2308 ⌈ 垂直 U+23A2 ⎢ U+23A2 ⎢ 不适用 U+23A1 ⎡
U+2309 ⌉ 垂直 U+23A5 ⎥ U+23A5 ⎥ 不适用 U+23A4 ⎤
U+230A ⌊ 垂直 U+23A2 ⎢ U+23A3 ⎣ 不适用 不适用
U+230B ⌋ 垂直 U+23A5 ⎥ U+23A6 ⎦ 不适用 不适用
U+23B0 ⎰ 垂直 U+23AA ⎪ U+23AD ⎭ 不适用 U+23A7 ⎧
U+23B1 ⎱ 垂直 U+23AA ⎪ U+23A9 ⎩ 不适用 U+23AB ⎫
U+27F5 ⟵ 水平 U+23AF ⎯ U+2190 ← 不适用 U+23AF ⎯
U+27F6 ⟶ 水平 U+23AF ⎯ U+23AF ⎯ 不适用 U+2192 →
U+27F7 ⟷ 水平 U+23AF ⎯ U+2190 ← 不适用 U+2192 →
U+294E ⥎ 水平 U+23AF ⎯ U+21BC ↼ 不适用 U+21C0 ⇀
U+2950 ⥐ 水平 U+23AF ⎯ U+21BD ↽ 不适用 U+21C1 ⇁
U+295A ⥚ 水平 U+23AF ⎯ U+21BC ↼ 不适用 U+22A3 ⊣
U+295B ⥛ 水平 U+23AF ⎯ U+22A2 ⊢ 不适用 U+21C0 ⇀
U+295E ⥞ 水平 U+23AF ⎯ U+21BD ↽ 不适用 U+22A3 ⊣
U+295F ⥟ 水平 U+23AF ⎯ U+22A2 ⊢ 不适用 U+21C1 ⇁

C. 数学字母数字符号

本节为非规范性内容。

如 [xml-entity-names] 所述, 带有粗体、斜体、Fraktur、等宽、双划线等形式的数学字母数字符号在 Unicode 中可用。

这些字母数字符号应通过它们的 Unicode 码位来访问。 有时需要区分 MATHEMATICAL SCRIPT 字符的 Chancery 和 Roundhand 风格。 这些风格在 LaTeX 中常用于 \mathcal\mathscr 命令。 一种方法是依赖 Unicode 的第 23.4 章“变体选择器”(Variation Selectors),该章描述了指定特定字形变体选择的方法 [UNICODE]。 实际上,Unicode 字符数据库中的 StandardizedVariants.txt 文件指出,变体选择器 U+FE00 和 U+FE01 可以用于大写 script 字符,分别指定 Chancery 和 Roundhand。

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

此外,上述方法也可用于访问 italic 数学字母数字字符,或通过 CSS 的 text-transform: math-auto 变换来访问;该变换默认应用于单字符的 <mi> 元素。 下表方便地给出了到数学斜体的映射。

C.1 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 事件处理属性引入了脚本执行机制。UA 可以决定阻止这些属性中指定脚本的执行,并遵循与 HTML 或 SVG 元素相同的安全限制。

在 [MathML3] 中, 可以通过 hrefxlink:href 属性使任何元素可链接,URL 可指向不可信资源,甚至执行 javascript:。这些属性在 MathML Core 中不可用。但如 2.2.1 HTML 和 SVG 所述,仍可在 MathML 中嵌入 HTML 或 SVG 内容,包括 HTML 或 SVG 链接。

在 [MathML3] 中, 可以使用 maction 元素,并将 actiontype 赋值为 "statusline",从而覆盖浏览器状态栏的文本。攻击者可利用此项隐藏不可信链接的 URL 文本,例如

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

该功能在 MathML Core 中不可用,此时 maction 元素本质上表现为带有额外样式的 mrow 容器。

攻击者可以通过插入非常大的可拉伸运算符,致使 字形拼合塑形 算法处理大量字形,从而拖垮 UA。UA 可通过限制 rminGlyphAssembly.partCount 的最大值来规避该问题。

CSS Fonts Module 所述, 攻击者可以利用不规范或恶意字体,试图利用浏览器实现中的潜在安全漏洞。 由于本规范大量采用 OpenType MATH 表,UA 应确保其字体清理机制能应对此表。

最后, 为减少攻击面,一些 UA 提供运行时选项以禁用部分 Web 平台。关闭 MathML 布局大体可通过强制将 DOM 树中的元素置于 HTML 命名空间并禁用 4. 用于数学排版的 CSS 扩展来实现。

F. 隐私注意事项

本节为非规范性内容。

2.2.1 HTML 和 SVG 所述, MathML 可通过 <foreignObject> 元素嵌入到 SVG 图像,从而可嵌入到 canvas 元素。 UA 可以采取任何措施来防止潜在的 信息泄露 ,例如污染 canvas,在通过 JavaScript API 访问画布内容时返回 “SecurityError”。

下例中,canvas 图像被设置为带有指向 https://example.org/ 的 HTML 链接的 MathML 内容图像。 攻击者不应能通过 context.getImageData() 读取像素来判定该链接是否被访问。 关于 MathML 中的链接内容,见 E. 安全注意事项

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

本规范描述了 DOM 元素 的排版,这可能涉及系统字体。与 HTML/CSS 排版一样, 可用 JavaScript API(如 context.getImageData()getBoundingClientRect()) 来测量盒尺寸、位置,并依此推断系统字体。 利用对这些字体的各种测试,并将测量结果与知名字体的结果对比,攻击者可以试探用户的默认字体。

下例 HTML+CSS+JavaScript 文档使用具特异度度量的 Web 字体来测试 A Well Known System Font 是否为默认可用字体。

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

下例 HTML+CSS+JavaScript 文档测试 UI serif 字体是否支持亚洲字形:

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

下例 HTML+CSS 文档,用 text-decoration-thickness 分别设置为 from-font1em(此处为 100px),呈现相同文本。比较两条下划线高度,可以很好地近似得到 PostScript Table [OPEN-FONT-FORMAT] 中 underlineThickness 的值。

<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 文档测量的方法,对 MathConstantsMathGlyphInfo 得到大多数布局参数的良好近似。通过在 canvas 上嵌入不同尺寸的可拉伸运算符,也可观察 MathML 渲染用到 MathVariants 表。

尽管单看这些参数都不是个人信息,实现本规范会增加可被攻击者用于指纹识别(fingerprinting)技术的字体信息集合。它们可能有助于推断用户可用或首选的数学字体。

G. 一致性

一致性要求通过描述性断言和 RFC 2119 术语组合表达。本规范正文中,“MUST”、“MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、“RECOMMENDED”、“MAY” 和 “OPTIONAL” 等关键词,应按 RFC 2119 所述解释。为便于阅读,规范中这些词未统一大写。

除明确标为非规范性内容、示例和注释的部分外,本规范其余文本均为规范性内容。 [RFC2119]

规范中的示例以“for example”开头,或用 class="example" 显式区分,例如:

这是一条说明性示例。

说明性注释以“Note”开头,并用 class="note" 与规范性文本区分,例如:

Note

注,这是一条说明性注释。

建议类内容属于规范性片段,样式上特别突出,并用 <strong class="advisement"> 区分,例如: UA MUST 提供可访问的替代方式。

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 布局 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 第二版. 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 Illuminated. Ulrik Vieth. 2009年. URL: https://www.tug.org/TUGboat/tb30-1/tb94vieth.pdf
[OPEN-TYPE-MATH-IN-HARFBUZZ]
OpenType MATH 在 HarfBuzz 中的实现. Frédéric Wang. URL: https://frederic-wang.fr/2016/04/16/opentype-math-in-harfbuzz/
[TEXBOOK]
TeX 书. 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/