MathML 코어

W3C 후보 권고안 스냅샷

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2025/CR-mathml-core-20250624/
최신 공개 버전:
https://www.w3.org/TR/mathml-core/
최신 에디터 초안:
https://w3c.github.io/mathml-core/
이력:
https://www.w3.org/standards/history/mathml-core/
커밋 이력
테스트 스위트:
https://github.com/web-platform-tests/wpt/tree/master/mathml/
구현 보고서:
https://wpt.fyi/results/?label=master&label=experimental&aligned&q=math%20%20not%28path%3A%2Fjs%29
에디터:
David Carlisle (NAG)
Frédéric Wang (Igalia)
이전 에디터:
Patrick Ion (Mathematical Reviews, American Mathematical Society)
Robert Miner (사망) (Design Science, Inc.)
피드백:
GitHub w3c/mathml-core (풀 리퀘스트, 새 이슈, 오픈 이슈)

초록

이 명세서는 브라우저 구현에 적합한 수학 마크업 언어(MathML)의 핵심 부분 집합을 정의합니다. MathML은 수학적 표기법을 설명하고, 그 구조와 내용을 모두 캡처하는 마크업 언어입니다. MathML의 목표는 HTML이 텍스트에 대해 그 기능을 가능하게 했던 것처럼, 수학을 월드 와이드 웹에서 서비스되고, 수신되고, 처리될 수 있도록 하는 것입니다.

이 문서의 상태

이 섹션은 이 문서가 출판 당시 어떤 상태였는지를 설명합니다. 현재 W3C 출판물 목록과 이 기술 보고서의 최신 수정본은 W3C 표준 및 초안 인덱스에서 https://www.w3.org/TR/ 에서 확인할 수 있습니다.

이 문서는 수학 워킹 그룹에 의해 권고안 경로를 사용하여 후보 권고안 스냅샷으로 출판되었습니다.

후보 권고안으로서 출판되었다는 것은 W3C 및 그 회원의 지지를 의미하지 않습니다. 후보 권고안 스냅샷은 광범위한 검토를 받았으며, 구현 경험을 수집하는 것을 목적으로 하고, 워킹 그룹 멤버들로부터 로열티 없는 라이선스 제공에 대한 약속을 받았습니다.

이 후보 권고안은 2025년 9월 30일보다 더 이른 시점에 제안 권고안으로 진행될 것으로 예상되지 않습니다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성되었습니다. W3C모든 특허 공개의 공개 목록 을 해당 그룹의 산출물과 관련하여 유지 관리하며, 해당 페이지에는 특허 공개 방법에 대한 안내도 포함되어 있습니다. 개별적으로 해당 특허에 대해 필수 청구항이 포함되어 있다고 판단되는 경우, 특허 정책 섹션 6에 따라 정보를 공개해야 합니다.

이 문서는 2023년 11월 3일 W3C 프로세스 문서에 의해 관리됩니다.

1. 소개

이 섹션은 비규범적입니다.

[MATHML3] 명세에는 웹 렌더링 엔진 전반에서 일관되게 구현하기 어렵거나 사용자 정의 구성을 통해 확장하기 어렵게 만드는 몇 가지 단점이 있습니다. 예를 들면:

MathML Core 명세는 TeXBook의 부록 G [TEXBOOK] 및 Open Font Format [OPEN-FONT-FORMAT], [OPEN-TYPE-MATH-ILLUMINATED]의 추가 규칙을 사용하여 수학 수식의 시각적 렌더링에 대해 가능한 한 정확하게 다루고자 합니다. 또한 최신 브라우저 구현 및 웹 기술 [HTML] [SVG] [CSS2] [DOM]에 의존하며 필요에 따라 상호작용을 명확히 하거나 웹 플랫폼 계층을 개선하기 위한 새로운 저수준 원시 기능을 도입합니다.

이 프레임워크에 적합하지 않거나 덜 기본적인 MathML3의 일부는 생략되었습니다. 대신 별도의 더 큰 [MATHML4] 명세에 설명되어 있습니다. MathML Core의 향후 버전에 어떤 수학 기능이 포함되거나 폴리필로 구현될지는 아직 열려 있습니다. 이 문제와 기타 잠재적 개선 사항들은 GitHub에서 추적되고 있습니다.

구현 세부사항의 수준을 높이고, 실질적인 하위 집합에 집중하며, 브라우저 주도 설계를 따르고 자동화된 웹 플랫폼 테스트에 의존함으로써 본 명세는 MathML의 상호운용성을 크게 향상시킬 것으로 기대됩니다. 또한 MathML 계층화에 대한 노력은 사용자가 MathML 4 명세의 나머지 부분을 구현하거나 더 일반적으로 shadow trees, custom elements 또는 [HOUDINI]와 같은 현대적 웹 기술을 이용해 MathML Core를 확장할 수 있도록 합니다.

2. MathML 기본

2.1 요소와 속성

MathML 요소라는 용어는 MathML 네임스페이스 내의 모든 요소를 의미합니다. 이 명세에서 정의하는 MathML 요소는 MathML Core 요소라 하며 아래에 나열됩니다. 아래에 나열되지 않은 모든 MathML 요소는 알 수 없는 MathML 요소로 불립니다.

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

그룹화 요소maction, math, merror, mphantom, mprescripts, mrow, mstyle, semantics알 수 없는 MathML 요소입니다.

스크립트 요소mmultiscripts, mover, msub, msubsup, msup, mundermunderover입니다.

근호 요소mrootmsqrt입니다.

이 명세에서 정의하는 속성들은 네임스페이스가 없으며 MathML 속성이라 합니다:

2.1.1 최상위 <math> 요소

MathML은 문서 내에서 각 인스턴스를 캡슐화하는 단일 최상위 또는 루트 math 요소를 지정합니다. 모든 다른 MathML 콘텐츠는 <math> 요소에 포함되어야 합니다.

<math> 요소는 2.1.3 전역 속성 뿐만 아니라 아래의 속성도 가질 수 있습니다:

display 속성이 있다면, ASCII 영문 대소문자 구분 없이 block 또는 inline 값 중 하나여야 합니다. A. User Agent Stylesheet 에서 이 속성에 대한 규칙을 정의하며, display ( block math 또는 inline math ) 와 math-style ( normal 또는 compact ) 속성에 기본값을 결정합니다. display 속성이 없거나 유효하지 않은 경우 User Agent 스타일시트는 inline으로 처리합니다.

이 명세는 alttext 속성에 대해 관찰 가능한 동작을 정의하지 않습니다.

참고
alttext 속성은 수식 레이아웃을 지원하지 않는 레거시 시스템에서 대체 텍스트로 사용될 수 있습니다.

<math> 요소가 계산된 display 속성이 block math 또는 inline math가 아니라면 해당하는 CSS 명세에 따라 레이아웃이 수행됩니다. 그렇지 않으면 mrow 요소의 레이아웃 알고리즘으로 math content box 를 생성하며, 해당 math content box가 CSS 표기에 따라 element의 레이아웃 컨텐츠로 사용됩니다 (display: block의 경우 block math, display: inline의 경우 inline math). 또한 계산된 display 속성이 block math이면, math content box 는 컨텐츠 박스 내에서 수평 중앙 정렬로 렌더링됩니다.

참고
TEX의 display mode $$...$$ 와 inline mode $...$는 각각 display="block"display="inline"에 해당합니다.

다음 예시에서 math 수식이 새 줄에 display 모드로 전체 너비로 렌더링되며, 수식 컨텐츠가 컨테이너 내에서 중앙에 배치됩니다:

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

비교를 위해 같은 수식을 inline 모드로 렌더링하면 아래와 같이 보입니다. 수식은 강제 줄바꿈 없이 본문 단락에 삽입됩니다. mrow 레이아웃 알고리즘에서 지정한 기준선이 수직 정렬에 사용됩니다. 합산, 등호, 분수의 중앙이 모두 정렬되지만, 주변 텍스트의 알파벳 기준선과는 다릅니다.

math example (inline)

수학적 렌더링의 품질을 위해 수학 폰트 사용이 필요하므로 유저 에이전트 스타일시트<math> 요소에 font-familymath 값으로 설정해야 하며, 상위 요소로부터 상속하지 않아야 합니다. 또한 부모 컨테이너에 설정할 수 있는 font-style, font-weight, direction, text-indent 등 몇몇 CSS 속성은 수식에 적용되지 않아야 하므로 유저 에이전트 스타일시트 는 기본값으로 이들을 리셋하는 규칙을 가집니다.

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

2.1.2 MathML 특성 값의 타입

CSS 데이터 타입 외에도, 일부 MathML 속성은 아래와 같은 MathML 전용 타입에 의존합니다:

unsigned-integer
[CSS-VALUES-4]에 정의된 <integer> 값으로, 첫 글자가 U+002D 하이픈 마이너스 문자(-) 또는 U+002B 플러스 문자(+)가 아닙니다.
boolean
ASCII 대소문자 구분 없이 true 또는 false와 일치하는 문자열.

2.1.3 전역 속성

다음 속성들은 모든 MathML 요소에서 공통으로 사용되며 지정할 수 있습니다:

2.1.4 HTML과 MathML 요소에 공통인 속성

id, class, style, data-*, autofocusnonce, tabindex 속성들은 HTML 요소에 대해 정의된 것과 동일한 문법과 의미를 가집니다.

dir 속성이 있을 경우, ASCII 대소문자 구분 없이 ltr 또는 rtl이어야 합니다. 그런 경우 사용자 에이전트는 해당 속성을 요소의 direction 속성을 해당 값으로 설정하는 presentational hint 로 처리해야 합니다. rtl과 일치하면 rtl로, ltr과 일치하면 ltr로 매핑합니다.

참고
dir 속성은 수식의 방향을 설정하는 데 사용되며, 아랍권에서는 rtl이 자주 사용됩니다. 하지만 오른쪽에서 왼쪽으로 쓰는 언어에서는 종종 왼쪽에서 오른쪽으로 쓰는 수학이 삽입되어 유저 에이전트 스타일시트direction 속성을 math 요소에 맞게 조정합니다.

다음 예시에서는 dir 속성이 "𞸎 plus 𞸑 raised to the power of (٢ over, 𞸟 plus ١)"를 오른쪽에서 왼쪽으로 렌더링하는 데 사용됩니다.

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

모든 MathML 요소는 HTML에서 설명하는 이벤트 핸들러 콘텐츠 속성을 지원합니다.

HTML이 모든 HTMLElements에 대해 지원한다고 명시한 이벤트 핸들러 콘텐츠 속성은 MathMLElement IDL에서 정의된 바와 같이 모든 MathML 요소에도 지원됩니다.

2.1.5 레거시 MathML 스타일 속성

mathcolormathbackground 속성은 값이 <color>이어야 합니다. 이 경우 사용자 에이전트는 속성을 요소의 colorbackground-color 속성에 해당 값으로 설정하는 presentational hint로 처리해야 합니다. mathcolor는 수식 텍스트, bar 등의 전경 채움색을, mathbackground는 요소 배경색을 나타냅니다.

mathsize 속성은 값이 <length-percentage>여야 합니다. 이 경우 사용자 에이전트는 속성을 요소의 font-size 속성에 해당 값으로 설정하는 presentational hint로 처리해야 합니다. mathsize는 수식에서 글리프의 원하는 높이를 의미하며, 다른 부분(공간, 시프트, bar 두께 등)도 같이 스케일링합니다.

참고
위 속성들은 전체 MathML과의 호환성을 위해 구현되었습니다. 오직 MathML Core만 목표인 저자들은 CSS 스타일을 사용하는 것이 권장됩니다.

2.1.6 displaystylescriptlevel 속성

displaystyle 속성은 값이 boolean이어야 합니다. 이 경우 사용자 에이전트는 속성을 요소의 math-style 속성에 해당 값으로 설정하는 presentational hint로 처리해야 합니다. 보다 정확하게는, ASCII 대소문자 구분 없이 truenormal로, falsecompact로 매핑됩니다. 이 속성은 예를 들어 내용 크기나 스크립트 레이아웃 변경을 통해 논리 높이를 최소화해야 하는지(false) 여부를 나타냅니다.

scriptlevel 속성은 값으로 +<U>, -<U> 또는 <U>를 가질 수 있고, <U>unsigned-integer입니다. 이 경우 사용자 에이전트는 scriptlevel 속성을 요소의 math-depth 속성에 해당 값으로 설정하는 presentational hint로 처리해야 합니다. 보다 정확하게는, +<U>, -<U>, <U>는 각각 add(<U>), add(<-U>), <U>로 매핑됩니다.

displaystylescriptlevel 값은 MathML 요소 내에서 자동으로 조정됩니다. 이 속성을 완전히 구현하려면 A. User Agent Stylesheet에서 설명하는 추가 CSS 속성이 필요합니다. 특히 모든 MathML 요소에 대해 font-size: math 값이 기본으로 지정되어 scriptlevel 변경이 반영되도록 합니다.

이 예시에서 munder 요소를 사용하여 "∑" 기반에 "A" 스크립트를 붙였습니다. 기본적으로 집합 기호는 부모에서 상속된 폰트 크기로 렌더링되고, "A"는 축소된 아랫첨자로 표현됩니다. displaystyle가 true면 집합 기호가 더 크게 그리고 "A"는 아랫스크립트로 나타납니다. scriptlevel이 "A"에서 0으로 리셋되면, 최상위 math 루트와 동일한 폰트 크기를 사용합니다.

<math>
  <munder>
    <mo></mo>
    <mi>A</mi>
  </munder>
  <munder displaystyle="true">
    <mo></mo>
    <mi>A</mi>
  </munder>
  <munder>
    <mo></mo>
    <mi scriptlevel="0">A</mi>
  </munder>
</math>
displaystyle-scriptlevel example
참고
TEX의 \displaystyle, \textstyle, \scriptstyle, \scriptscriptstyle는 각각 displaystylescriptleveltrue0, false0, false1, false와 2 에 해당합니다.

2.1.7 유효 속성으로 예약된 속성

intentarg 속성은 유효한 속성으로 예약되어 있습니다.

본 명세는 intentarg 속성에 대한 관찰 가능한 동작을 정의하지 않습니다.

참고
이 속성들은 [MATHML4]에서 설명되어 있으며, 앞으로의 본 명세 버전에서 정의될 수도, 안 될 수도 있습니다. 저자들은 이 속성이 현재 개발 중이며 변경될 수 있음을 인지해야 합니다.

2.2 웹 플랫폼 통합

2.2.1 HTML 및 SVG

MathML은 관련 명세서([HTML] [SVG])에 따라 HTML 및 SVG와 혼합하여 사용할 수 있습니다.

SVG의 requiredExtensions 속성을 평가할 때 사용자 에이전트는 MathML 네임스페이스로 식별되는 언어 확장 지원을 선언해야 합니다.

이 예시에서는 HTML 문서 내에서 인라인 MathML과 SVG 요소를 함께 사용합니다. SVG 요소 <switch><foreignObject>(적절한 <requiredExtensions> 포함)는 다이어그램 내부에 텍스트 폴백이 있는 MathML 수식을 삽입하는 데 사용됩니다. HTML input 요소는 mtext 내에 포함되어 수식 안에 상호작용 필드를 제공합니다. 3.7 의미와 표현에서 annotation-xml 요소 내부에 SVG와 HTML이 있는 예시도 참고하세요.

...생략...
html-svg example

2.2.2 CSS 스타일링

사용자 에이전트는 본 명세서에 언급된 다양한 CSS 기능과 4. 수학 레이아웃을 위한 CSS 확장에서 기술된 새로운 기능을 지원하여야 합니다. 또한 display: contents의 계산 규칙을 따라야 합니다.

이 예시에서 MathML 수식은 부모의 CSS 색상을 상속하며 style 속성을 통해 지정된 font-family를 사용합니다.

...생략...
style example

MathML Core 요소가 포함된 모든 문서는 A. 유저 에이전트 스타일시트에서 설명하는 CSS 규칙을 유저 에이전트 수준 기본 스타일시트의 일부로 포함해야 합니다. 특히 모든 MathML 요소에 !important 규칙으로 writing modehorizontal-lr로 강제합니다.

float 속성은 부모의 계산된 display 값이 block math 또는 inline math일 때 해당 요소를 띄우지 않으며, out-of-flow로 처리하지 않습니다.

::first-line::first-letter 의사 요소는 계산된 display 값이 block math 또는 inline math인 요소에 적용되지 않으며, 그러한 요소는 상위에 첫 번째 줄/글자를 제공하지 않습니다.

다음 CSS 기능들은 지원되지 않으므로 무시해야 합니다:

  • 수식 내부에서의 줄 바꿈: white-space는 모든 MathML 요소에서 nowrap으로 처리됩니다.
  • 정렬 속성: align-content, justify-content, align-self, justify-self는 MathML 요소에 영향이 없습니다.
참고
이러한 기능들은 문서의 향후 버전에서 다뤄질 수 있습니다. 현 단계에서 저자들은 이 속성들에 다른 값을 지정하는 것을 피하는 것이 좋으며, 그렇게 하면 하위 호환성 문제가 발생할 수 있습니다.

2.2.3 DOM 및 JavaScript

웹 애플리케이션 API를 지원하는 사용자 에이전트는 MathML의 시각적 렌더링을 [DOM] 트리와 동기화해야 하며, 특히 MathML 속성이 동적으로 변경될 때 적절한 업데이트를 수행해야 합니다.

DOM에서 MathML 요소를 나타내는 모든 노드는 아래의 MathMLElement 인터페이스를 구현하고 스크립트에 노출해야 합니다.

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

GlobalEventHandlersHTMLOrForeignElement 인터페이스는 [HTML]에서 정의되어 있습니다.

아래 예시에서 MathML 수식은 "α over 2"를 렌더링하며, 빨간 α를 클릭하면 파란 β로 바뀝니다.

...생략...
dom-idl example
이슈
HTMLOrSVGElement 이름 변경 및 [HTML]에 MathMLElement 정의.

2.2.4 텍스트 레이아웃

수학 폰트는 큰 적분 등 매우 키가 높은 글리프를 포함하는 경우가 많으므로, 과도한 줄 간격을 피하기 위해 전각 타이포메트릭을 사용하는 것이 중요합니다. 이에 따라 사용자 에이전트는 OS/2 테이블의 USE_TYPO_METRICS 플래그 [OPEN-FONT-FORMAT]을 텍스트 레이아웃 시 반영해야 합니다.

2.2.5 포커스

MathML은 작가가 상호작용 가능한 사용자 에이전트를 지원할 수 있도록, HTML에서 설명한 것과 동일한 컨셉과 접근 방식을 수정·설명 적용하여 포커스(Focus)를 제공합니다.

요소가 포커스될 때, 해당 사양에 정의된 모든 관련 CSS 포커스 의사 클래스가 적용됩니다. (Selectors Level 3)

토큰 요소 내부의 HTML 요소를 포함하여, 삽입된 math 요소의 콘텐츠는 소유 HTML 문서의 포커스 순서(통합 포커스 순서)에 기여합니다.

3. 표현 마크업

3.1 시각적 서식 모델

3.1.1 박스 모델

기본 display 속성은 A. User Agent Stylesheet에 설명되어 있습니다:

  • <math> 루트의 경우, display 속성의 값에 따라 inline math 또는 block math에 해당합니다.
  • Tabular MathML elements mtable, mtr, mtd 에 대해서는 각각 inline-table, table-rowtable-cell에 해당합니다.
  • 대부분의 경우, mactionsemantics 요소의 첫 번째 자식을 제외한 모든 자식에 대해 그 값은 none입니다.
  • 다른 모든 MathML 요소에 대해서는 block math에 해당합니다.

서로 다른 writing modes에서 수식 레이아웃을 지정하기 위해, 이 명세서는 [CSS-WRITING-MODES-4]의 개념을 사용합니다:

참고
별도 명시가 없는 경우, 이 명세서의 도판들은 writing modehorizontal-lrltr를 사용합니다. 다른 쓰기 모드의 예시는 그림 4, 그림 5그림 6을 참조하세요. 이들은 수식 레이아웃에 때때로 사용되는 다른 쓰기 모드의 예입니다.

MathML 요소에 사용되는 박스는 CSS와 호환되는 방식으로 레이아웃을 수행하면서 수식 내의 매우 정확한 위치와 간격을 고려하기 위해 여러 매개변수에 의존합니다:

  1. 인라인 메트릭. min-content inline size, max-content inline sizeinline size 는 CSS에서 오는 값들입니다. 자세한 내용은 그림 1을 보세요.
    그림 1 MathML 요소를 위한 일반 박스 모델
  2. 블록 메트릭. block size, first baseline setlast baseline set. MathML 박스에 대해 다음의 baselines들이 정의됩니다:

    1. alphabetic baseline 은 일반적으로 대문자 라틴 글리프의 아래쪽과 정렬됩니다. 박스의 alphabetic baseline에서 박스의 line-over 가장자리까지의 대수적 거리를 line-ascent이라고 합니다. 박스의 line-under 가장자리에서 alphabetic baseline까지의 대수적 거리는 line-descent라고 합니다.
    2. mathematical baseline, 또는 math axis 라고도 불리며, 일반적으로 분수의 막대, 괄호의 중앙 및 이항 연산자의 가운데와 정렬됩니다. 이것은 alphabetic baseline에서 AxisHeight만큼 line-over 쪽으로 이동합니다.
    3. ink-over baseline은 수식 내용이 그려지는 line-over의 이론적 경계를 나타내며, 추가 공백은 제외합니다. 명시되지 않으면, 이것은 line-over 가장자리와 정렬됩니다. alphabetic baseline에서 ink-over baseline까지의 대수적 거리를 ink line-ascent이라고 합니다.
    4. ink-under baseline은 수식 내용이 그려지는 line-under의 이론적 경계를 나타내며, 추가 공백은 제외합니다. 명시되지 않으면, 이것은 line-under 가장자리와 정렬됩니다. ink-under baseline에서 alphabetic baseline까지의 대수적 거리를 ink line-descent이라고 합니다.
    참고
    수식 레이아웃에서는 텍스트를 위치시키기 위해 잉크 범위(ink extent)에 의존하는 것이 매우 중요합니다. 복잡한 표기(예: 제곱근)에서는 이것이 항상 해당되는 것은 아닙니다. ink-ascent와 ink-descent는 모든 MathML 요소에 대해 정의되지만 실제로는 토큰 요소에 주로 사용됩니다. 다른 경우에는 보통의 ascent 및 descent와 일치합니다.
    별도 명시가 없는 한, MathML 박스의 last baseline setfirst baseline set과 같습니다.
  3. 선택적 italic correction 이 있으며, 이는 박스의 텍스트가 inline axis를 따라 얼마나 기울어져 있는지를 측정합니다. 자세한 예시는 그림 2를 보세요.
    그림 2 이탤릭 f와 큰 적분 기호에 대한 italic correction 예시
    만약 min-content inline sizemax-content inline size 계산 중이거나 레이아웃 중에 요청되면, 대체값으로 0이 사용됩니다.
  4. 선택적 top accent attachment 이 있으며, 이는 억음(accent)으로 박스를 위치시킬 때 사용할 박스의 inline axis상의 기준 오프셋을 제공합니다. 예시는 그림 3를 참조하세요.
    그림 3 서커믹스 악센트에 대한 top accent attachment 예시
    만약 min-content inline size (또는 max-content inline size) 계산 중에 요청되면, 대체값으로 min-content inline size의 절반(또는 max-content inline size의 절반)이 사용됩니다. 레이아웃 중에 요청되면 박스의 인라인 크기 절반이 대체값으로 사용됩니다.

주어진 MathML 박스에 대해 다음 오프셋들이 정의됩니다:

  • The inline offset of a child box 는 부모 박스의 inline-start 가장자리와 자식 박스의 inline-start 가장자리 사이의 오프셋입니다.
  • The block offset of a child box 는 부모 박스의 block-start 가장자리와 자식 박스의 block-start 가장자리 사이의 오프셋입니다.
  • The line-left offset of a child box 는 부모 박스의 line-left 가장자리와 자식 박스의 line-left 가장자리 사이의 오프셋입니다.
그림 4 horizontal-tbrtl 쓰기 모드에 대한 박스 모델 (예: 아랍 수식에 사용될 수 있음)
그림 5 vertical-lrltr 쓰기 모드에 대한 박스 모델 (예: 몽골 수식에 사용될 수 있음)
그림 6 vertical-rlltr 쓰기 모드에 대한 박스 모델 (예: 일본어 수식에 사용될 수 있음)
참고
MathML 박스 내부의 자식 박스와 그래픽 항목의 위치는 inline offsetblock offset을 사용하여 표현됩니다. 편의를 위해 레이아웃 알고리즘은 흐름-상대 방향, 선-상대 방향 또는 alphabetic baseline을 사용하여 오프셋을 설명할 수 있습니다. 박스의 메트릭과 자식 박스들의 메트릭이 계산된 후에 항상 자식 박스의 위치가 결정되므로, 한 설명에서 다른 설명으로 변환하는 것이 항상 가능합니다.

다음은 선-상대 메트릭에서 얻은 오프셋의 예입니다:

Issue 78: Ink ascent/descent opentype/texneeds-tests
Ink ascent/descent 정의를 개선할 것인가?

3.1.2 레이아웃 알고리즘

각 MathML 요소에는 연관된 math content box가 있으며, 이 장의 레이아웃 알고리즘에 설명된 구조를 사용하여 계산됩니다:

  1. 수식 콘텐츠의 min-content inline sizemax-content inline size 계산.
  2. 박스 레이아웃:
    1. in-flow 자식 박스의 레이아웃.
    2. inline size, ink line-ascent, ink line-descent, line-ascentline-ascent의 계산.
    3. math content box 내에서 자식 박스의 오프셋 계산과 추가 그래픽 항목(바, 근호 기호 등)의 크기 및 오프셋 계산.
    4. [CSS-POSITION-3]에 설명된 대로, 절대 위치고정 위치 박스의 레이아웃과 위치 지정.

다음의 추가 단계들이 수행되어야 합니다:

참고
위 설명에 따라, margin-collapsing은 MathML 요소에 적용되지 않습니다.

박스 레이아웃 중에 선택적으로 inline stretch size constraintblock stretch size constraint 매개변수가 embellished operators에 사용될 수 있습니다. 전자는 core operatorinline axis를 따라 늘어날 때 목표로 삼아야 할 크기를 나타냅니다. 후자는 ink line-ascentink line-descent을 나타내며, 이는 core operatorblock axis를 따라 늘어날 때 커버해야 할 범위를 의미합니다. 별도 명시가 없는 한, 이러한 매개변수는 박스 레이아웃 중 무시되며 자식 박스들은 어떠한 stretch size constraint 없이 배치됩니다.

Issue 76: Define what inline percentages resolve against. css/html5need specification updateneeds-tests
인라인 백분율이 무엇을 기준으로 해석되는지 정의하세요
Issue 77: Define what block percentages resolve against. css/html5need specification updateneeds-tests
블록 백분율이 무엇을 기준으로 해석되는지 정의하세요

3.1.3 익명 <mrow> 박스

anonymous box는 DOM 트리에서 어떤 연관된 요소도 갖지 않으며 레이아웃 목적을 위해서만 생성되는 박스입니다. 익명 박스의 속성은 둘러싼 비익명 박스에서 상속되며, 비상속 속성들은 초기값을 갖습니다. anonymous <mrow> boxdisplayblock mathanonymous box이며, 섹션 3.3.1.2 <mrow>의 레이아웃에 설명된 대로 레이아웃됩니다.

만약 어떤 MathML 요소가 anonymous <mrow> 박스를 생성한다면 그 요소는 자식들을 anonymous <mrow> 박스로 감쌉니다. 즉, 그 요소의 시각적 포맷팅 모델에서의 서브트리는 anonymous <mrow> box로 구성되며, 그 박스는 해당 MathML 요소의 자식들과 연관된 박스들을 포함합니다.

다음 예에서, mathmrow 요소들은 섹션 3.3.1.2 <mrow>의 레이아웃에 설명된 대로 레이아웃됩니다. 특히, <math> 요소는 그 <mo>≠</mo> 자식 주위에 적절한 간격을 추가하고, <mrow> 요소는 그 <mo>|</mo> 자식들을 수직으로 늘립니다.

또한, mtd 요소는 display: table-cell을 가지며, msqrt 요소는 그 자식들 주위에 근호 기호를 표시합니다. 그러나 이들 또한 섹션 3.3.1.2 <mrow>의 레이아웃에 설명된 것과 유사한 방식으로 자식들을 배치합니다: <msqrt> 요소는 <mo>+</mo> 자식 주위에 적절한 간격을 추가하고, <mtd> 요소는 그 <mo> 자식들을 수직으로 늘립니다. 이것을 가능하게 하기 위해, 이 두 요소 각각은 anonymous <mrow> 박스를 생성합니다.

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

3.1.4 스태킹 컨텍스트

MathML 요소들은 다양한 간격 규칙 때문에 겹칠 수 있습니다. 또한 추가적인 그래픽 항목들(바, 근호 기호 등)을 포함할 수 있습니다. 계산된 스타일이 display: block math 또는 display: inline math인 MathML 요소는 새로운 스태킹 컨텍스트를 생성합니다. 그러한 MathML 요소의 페인팅 순서는 블록 요소들과 정확히 동일합니다. 추가 그래픽 항목들은 텍스트와 배경 뒤에 페인트되며 (display: inline math의 경우 단계 7.2.4 바로 다음, display: block math의 경우 단계 7.2 바로 다음에) 그려집니다.

3.2 토큰 요소

표현 마크업에서 토큰 요소는 의미를 가지는 수학 표기법의 가장 작은 단위를 나타내도록 설계되었습니다. 토큰은 텍스트에서 단어와 비슷한 역할을 합니다. 그러나 수학 표기법은 정확하고 기호적인 특성이 있기 때문에, 다양한 토큰 요소의 종류와 속성이 MathML 마크업에서 두드러진 역할을 합니다. 이에 비해, 텍스트 데이터에서는 개별 단어에 특별한 마크업이나 스타일링이 필요한 경우가 드뭅니다.

참고
실제로, 대부분의 MathML 토큰 요소는 변수, 숫자, 연산자 등과 같이 간단한 텍스트만 포함하고 복잡한 레이아웃이 필요하지 않습니다. 그러나 줄바꿈이 있는 텍스트나 임의의 HTML5 구문 요소를 포함할 수도 있습니다.

3.2.1 텍스트 <mtext>

mtext 요소는 있는 그대로 렌더링되어야 하는 임의 텍스트를 나타내는 데 사용됩니다. 일반적으로 <mtext> 요소는 설명 또는 주석 텍스트를 나타내는 데 사용됩니다.

<mtext> 요소는 2.1.3 글로벌 속성에 설명된 속성들을 받을 수 있습니다.

다음 예에서는 mtext 가 정의에서 조건부 단어를 넣는 데 사용되었습니다:

<math>
  <mi>y</mi>
  <mo>=</mo>
  <mrow>
    <msup>
      <mi>x</mi>
      <mn>2</mn>
    </msup>
    <mtext>&nbsp;if&nbsp;</mtext>
    <mrow>
      <mi>x</mi>
      <mo></mo>
      <mn>1</mn>
    </mrow>
    <mtext>&nbsp;and&nbsp;</mtext>
    <mn>2</mn>
    <mtext>&nbsp;otherwise.</mtext>
  </mrow>
</math>
mtext example
3.2.1.1 <mtext>의 레이아웃

만약 해당 요소의 계산된 display 속성이 block mathinline math와 같지 않으면, CSS 명세에서 설명된 해당 값에 따라 레이아웃됩니다. 그렇지 않으면 아래의 레이아웃이 적용됩니다.

<mtext> 요소가 강제 줄바꿈 이나 부드러운 줄바꿈 기회 없이 텍스트 콘텐츠만 포함한다면, 해당 텍스트에 대해 생성된 익명 자식 노드는 관련 CSS 명세에 정의된 대로 레이아웃되며, 다음과 같습니다:

그렇지 않은 경우, mtext 요소는 block box로서 레이아웃되며, 관련된 min-content inline size, max-content inline size, inline size, block size, first baseline setlast baseline setmath content box에 사용됩니다.

3.2.2 식별자 <mi>

mi 요소는 식별자로 렌더링되어야 하는 기호 이름 또는 임의의 텍스트를 나타냅니다. 식별자에는 변수, 함수 이름, 기호 상수 등이 포함될 수 있습니다.

<mi> 요소는 2.1.3 글로벌 속성에 서술된 속성들과 다음 속성을 받을 수 있습니다:

레이아웃 알고리즘은 mtext 요소와 동일합니다. user agent 스타일시트4.2 The math-auto transform에서 도입된 text-transform 값을 통한 자동 이탤릭 구현을 위해 다음 속성을 포함해야 합니다:

mi {
  text-transform: math-auto;
}

mathvariant 속성이 존재하는 경우, ASCII 대소문자 구분 없이 normal과 일치해야 합니다. 이 경우, user agent는 이 속성을 프레젠테이션 힌트로 처리하여 요소의 text-transform 속성을 none으로 설정해야 합니다. 그렇지 않으면 아무런 효과가 없습니다.

참고

[MathML3] 에서 mathvariant 속성은 토큰 요소의 논리적 클래스를 정의하는 데 사용되었으며, 각 클래스는 주어진 수학 표현식 내에서 특정 의미를 가지는 타이포그래피적으로 관련된 기호 토큰 집합을 제공합니다.

MathML Core에서는 이 속성이 mi 요소의 자동 이탤릭을 해제하는 데만 사용됩니다. 다른 용도의 경우, 적절한 수학 영문자 기호 [UNICODE]를 대신 사용해야 합니다. 또한 C. Mathematical Alphanumeric Symbols도 참조하세요.

다음 예에서는 mi 를 변수 및 함수 이름으로 렌더링하는 데 사용했습니다. 4.2 The math-auto transform에 따라 기본 스타일 text-transform: math-auto는 첫 번째 <mi>에는 효과가 없고("cos"는 세 개의 문자로 이루어짐), 두 번째 <mi>는 수학 이탤릭으로 렌더링됩니다("c"는 U+0063 라틴 소문자 C 단일 문자로, italic 표에 따라 U+1D450 Mathematical Italic Small C로 매핑됨), 세 번째 <mi>(mathvariant="normal"로 오버라이드되어 text-transform이 none이 됨)와 네 번째 <mi>(italic 표에 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 속성에 대해 특정하게 관찰 가능한 동작을 정의하지 않습니다.

Note
작성자는 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이면 underscript는 실제로 subscript로 렌더링되며, 역시 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

연산자는 펜스, 악센트, 화살표 등과 같은 늘어나는(stretchy) 기호에도 사용됩니다. 다음 예제에서, 세로 화살표는 mspace 요소의 높이에 맞게 늘어납니다. 기본 stretch 동작은 stretchy 속성으로 오버라이드할 수 있습니다 (예: stretch되지 않은 화살표로 강제). symmetric 속성은 연산자가 수학 축(분수 막대) 위아래로 대칭적으로 stretch되어야 하는지 설정합니다. 마지막으로 minsizemaxsize 속성으로 stretch 크기에 추가 제약을 둘 수 있습니다.

<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 사전 기반 속성에서 설명된 것처럼 사전 기반입니다. 예를 들어, 이항 연산자는 기본적으로 양측 대칭 간격을 가지며, 펜스는 일반적으로 기본적으로 늘어납니다.

3.2.4.1 장식 연산자(Embellished operators)

MathML Core 요소장식 연산자(embellished operator)가 되려면 다음 중 하나여야 합니다:

  1. mo 요소
  2. 첫 번째 in-flow 자식이 존재하고 그 자식이 장식 연산자스크립트 요소(scripted element) 또는 mfrac 요소
  3. 장식 연산자 1개와 space-like 요소 0개 이상으로 (순서 무관) in-flow 자식을 가지는 그룹화 요소(grouping element) 또는 mpadded 요소

장식 연산자코어 연산자(core operator)는 재귀적으로 아래와 같이 정의되는 <mo> 요소입니다:

  1. mo 요소의 코어 연산자는 그 요소 자체입니다.
  2. 장식된 스크립트 요소 또는 mfrac 요소의 코어 연산자는 그 첫 번째 in-flow 자식의 코어 연산자입니다.
  3. 장식된 그룹화 요소 또는 mpadded 요소의 코어 연산자는 그 고유 장식 연산자 in-flow 자식의 코어 연산자입니다.

장식 연산자스토레치 축(stretch axis)은, 그 코어 연산자가 한 글자의 텍스트만을 포함하고 그 글자가 인라인 고유 스토레치 축을 가진 경우 inline이 됩니다. 그렇지 않으면 block이 됩니다.

동일한 정의가 시각적 포맷 모델에서, 익명 <mrow> 박스그룹화 요소로 처리되는 경우에도 적용됩니다.

3.2.4.2 사전 기반 속성(Dictionary-based attributes)

장식 연산자form 속성은 infix, prefix, postfix 중 하나입니다. 해당 mo 요소의 form 속성이 존재하는 경우, 반드시 이 중 하나와 ASCII 대소문자 구분 없이 일치해야 합니다.

장식 연산자의 form을 결정하는 알고리즘(algorithm for determining the form of an embellished operator)은 다음과 같습니다:

  1. 코어 연산자form 속성이 있고 유효한 경우 ASCII 소문자화된 값을 사용합니다.
  2. 장식 연산자가, 2개 이상의 in-flow 자식을 가진 그룹화 요소, mpadded, msqrt의 첫 번째 in-flow 자식(단, space-like는 제외)이면 prefix 형입니다.
  3. 장식 연산자가, 2개 이상의 in-flow 자식을 가진 그룹화 요소, mpadded, msqrt의 마지막 in-flow 자식(단, space-like는 제외)이면 postfix 형입니다.
  4. 장식 연산자가 스크립트 요소의 첫 번째 in-flow 자식이 아니라면 postfix 형입니다.
  5. 그 외는 infix 형입니다.

장식 연산자stretchy, symmetric, largeop, movablelimits 속성은 false 또는 true입니다. true이면, 해당 장식 연산자가 그 속성을 갖는다고 합니다. 해당 mo 요소의 stretchy, symmetric, largeop, movablelimits 속성이 존재할 경우, 반드시 boolean이어야 합니다.

장식 연산자lspace, rspace, minsize 속성은 <length-percentage>입니다. 장식 연산자maxsize 속성은 <length-percentage> 또는 ∞입니다. mo 요소의 lspace, rspace, minsize, maxsize 속성은 존재할 경우 반드시 <length-percentage>여야 합니다.

장식 연산자의 속성을 결정하는 알고리즘(algorithm for determining the properties of an embellished operator)은 다음과 같습니다:

  1. 해당 stretchy, symmetric, largeop, movablelimits, lspace, rspace, maxsize, minsize 속성이 코어 연산자에 존재하고 유효한 경우, 해당 속성의 ASCII 소문자화 값 사용
  2. 그렇지 않은 경우 장식 연산자의 form을 결정하는 알고리즘 수행
  3. 코어 연산자가 텍스트 콘텐츠 Content만 포함하면, 연산자 카테고리 결정 알고리즘(Content, Form) 결과를 Category에 설정. (Form은 직전 단계에서 계산된 값)
  4. CategoryDefault이고, form 속성이 명시적으로 지정되지 않았다면:
    1. Forminfix일 때 연산자 카테고리 결정 알고리즘 재실행해 Category 설정
    2. 여전히 Default라면 postfix로 재실행
    3. 그래도 Default라면 prefix로 재실행
  5. 카테고리로부터 연산자 속성 설정 알고리즘 실행

레이아웃 중 사용할 때 stretchy, symmetric, largeop, movablelimits, lspace, rspace, minsize 값은, 장식 연산자 속성 결정 알고리즘에서 다음 보정 규칙을 거쳐 획득합니다:

  • lspace, rspace의 백분율 값은 사전에서 얻은 값(또는 fallback 값)을 기준으로 해석함
  • minsizemaxsize의 백분율 해석은 3.2.4.3 Layout of operators에서 기술함
  • lspace, rspace, minsize, maxsize의 폰트 상대 길이는 장식 연산자가 아니라 코어 연산자의 폰트 스타일에 따름
3.2.4.3 연산자 레이아웃

<mo> 요소의 계산된 display 속성이 block math 또는 inline math와 같지 않으면, 해당 값이 설명된 CSS 명세에 따라 레이아웃됩니다. 그렇지 않으면 아래의 레이아웃이 적용됩니다.

연산자의 텍스트는 <mo> 요소의 visibility 값이 visible일 때만 그려져야 합니다. 이 경우, <mo> 요소의 color로 그려져야 합니다.

연산자는 다음과 같이 레이아웃됩니다:

  1. <mo> 요소의 내용이 단일 문자 c가 아니면, 3.2.1.1 <mtext>의 레이아웃 알고리즘을 따릅니다.
  2. 연산자가 stretchy 속성을 가진 경우:
  3. 연산자가 largeop 속성을 가지고, <mo> 요소의 math-stylenormal이면:
    1. MathVariants 테이블을 사용하여 DisplayOperatorMinHeight 이상의 높이를 가진 글리프를 찾습니다. 찾지 못하면 base가 아닌 가장 큰 글리프로, 이것도 없으면 3.2.1.1 <mtext>의 레이아웃 알고리즘을 따릅니다.

    2. 해당 글리프의 min-content inline size, max-content inline size, inline size, 블록 메트릭이 수식 내용에 적용됩니다.
    3. 글리프를 그립니다.
    Figure 8 합 기호의 Base 및 displaystyle 크기
  4. 그 외에는 3.2.1.1 <mtext>의 레이아웃 알고리즘을 따릅니다.

펼쳐지는 글리프 조형 알고리즘이 위 단계 중 하나에 사용된 경우, 수식 내용의 italic correction은 해당 알고리즘이 반환한 값으로 설정됩니다.

3.2.5 띄어쓰기 <mspace>

mspace 빈 요소는 설정된 속성에 따라 원하는 크기의 공백을 나타냅니다.

<mspace> 요소는 2.1.3 글로벌 속성과 다음 속성을 받을 수 있습니다:

width, height, depth 속성이 존재한다면, 값은 유효한 <length-percentage>이어야 합니다.

  • width 속성이 존재하고, 유효하며, 퍼센트가 아닐 때 이 속성은 프레젠테이션 힌트로 사용되어 요소의 width 속성에 해당 값이 설정됩니다.
  • height 속성이 없거나, 유효하지 않거나, 퍼센트이면 요청된 line-ascent는 0입니다. 그렇지 않으면 요청된 line-ascent는 height 속성의 해석된 값(음수는 0으로 clamp)입니다.
  • heightdepth 속성이 모두 존재하면서 유효하고 퍼센트가 아닌 경우 "calc(", height 속성 값, " + ", depth 속성 값, ")"를 이어 붙인 문자열이 요소의 height 속성에 프레젠테이션 힌트로 설정됩니다. 이 중 하나만 존재하고 유효하며 퍼센트가 아니면 해당 값만 프레젠테이션 힌트로 height에 설정됩니다.

다음 예제에서, mspace 는 수식 내에 강제로 공백을 넣는 데 사용되었습니다(공백 확인을 위해 1px 블루 테두리를 추가함):

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

<mspace> 요소의 계산된 display 속성이 block math 또는 inline math와 같지 않다면 CSS 명세에 따라 배치됩니다. 그렇지 않으면 <mspace> 요소는 그림 9와 같이 레이아웃됩니다. 수식 내용의 min-content inline size, max-content inline size, inline sizewidth의 해석된 값과 같습니다. block sizeheight의 해석된 값과 같습니다. 수식 내용의 line-ascent는 위에서 결정한 요청된 line-ascent와 같습니다.

그림 9 <mspace> 요소에 대한 박스 모델
참고
height/depth 용어는 [MATHML3]에서 유래되었고, [TEXBOOK]에서도 영감을 받았습니다.
3.2.5.1 space-like 요소의 정의

여러 MathML 프레젠테이션 요소는 "space-like" 즉, 일반적으로 공백으로 렌더링되며 나타나는 수식의 수학적 의미에 영향을 주지 않습니다. 따라서 이러한 요소들은 다른 MathML 수식 내에서 다소 예외적으로 동작하는 경우가 많습니다.

MathML Core 요소space-like 요소가 되려면 다음 중 하나에 해당해야 합니다:

  1. mtext 또는 mspace
  2. 그룹화 요소 또는 mpadded이고, 모든 in-flow 자식이 space-like

동일한 정의가 시각적 포맷팅 모델에서 익명 <mrow> 박스그룹화 요소로 처리될 때 적용됩니다.

참고
mphantom 은 그 내용이 space-like일 때만 자동으로 space-like로 정의되지 않습니다. 이는 연산자 간격이 인접 요소가 space-like인지에 따라 달라지기 때문입니다. <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 규칙을 추가할 수 있습니다. 예를 들어 LTR 방향에서는:
ms:before, ms:after {
  content: "\0022";
}
ms[lquote]:before {
  content: attr(lquote);
}
ms[rquote]:after {
  content: attr(rquote);
}

3.3 일반 레이아웃 도식

토큰 이외에도 몇 가지 MathML 표현 요소의 가족이 있다. 한 가족의 요소들은 첨자와 윗첨자 등 다양한 "스크립트" 표기와 관련이 있다. 또 다른 가족은 행렬과 테이블에 관련되어 있다. 이 섹션에서 다루는 나머지 요소들은 분수와 근호 같은 기본 표기법 또는 스타일 속성 설정과 오류 처리와 같은 일반 함수와 관련이 있다.

3.3.1 하위 표현식 그룹화 <mrow>

mrow 요소는 여러 하위 표현식을 함께 그룹화하는 데 사용되며, 일반적으로 하나 이상의 <mo> 요소가 "연산자"로 작동하여 한 개 이상의 다른 표현식(피연산자)에 적용된다.

다음 예제에서 mrow 는 합 "1 + 2/3"을 분수의 분자로(첫 번째 자식 mfrac) 그룹화하고, 괄호 친 표현식을 만들며(첫 번째 자식 msup) 5제곱으로 올린다. mrow 만으로는 그룹화된 내용에 시각적 괄호가 추가되지 않으므로, mo 요소를 명시적으로 사용해야 한다.

mrow 요소 안에서는 자식들의 수직 정렬( 알파벳 기준선 혹은 수학 기준선 기준)이 제대로 수행되며, 괄호 등이 수직 방향으로 늘어나고, 이항 연산자인 + 주위 간격도 자동으로 계산된다.

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

<mrow> 요소는 2.1.3 글로벌 속성에 설명된 속성을 허용한다. <mrow> 요소에 in-flow 자식이 child1, child2, …, childN 있다면, 그림 10과 같이 레이아웃된다. 자식 박스들은 한 줄로 나란히 배치되고 모든 알파벳 기준선 이 정렬된다.

그림 10 <mrow> 요소의 박스 모델
참고
박스 모델이 알파벳 기준선 정렬을 보장하기 때문에, 분수 막대나 대칭 늘어나는 연산자도 수학축에 맞게 정렬된다. 이는 모든 in-flow 자식의 AxisHeight가 같을 때 일반적이다.
3.3.1.1 블록 축을 따라 연산자 늘이기 알고리즘
그림 11 블록 축을 따라 연산자의 대칭/비대칭 수직 늘이기

블록 축을 따라 연산자 늘이기 알고리즘 은 다음 단계로 구성된다:

  1. 블록 늘이기 크기 제약 또는 인라인 늘이기 크기 제약 이 있으면, 레이아웃되는 요소는 수식된 연산자이다. 하나의 in-flow 자식(수식된 연산자)을 같은 늘이기 크기 제약으로 레이아웃하고 나머지 in-flow 자식은 크기 제약 없이 레이아웃하고 종료한다.
  2. 그 외의 경우, in-flow 자식 목록을 두 개의 리스트로 분할: LToStretch: 수식된 연산자이자 stretchy 속성과 블록 stretch axis를 가진 요소들. LNotToStretch: 나머지.
  3. LNotToStretch의 모든 항목은 늘이기 크기 제약 없이 레이아웃. LToStretch가 비었다면 종료. LNotToStretch가 비었다면, (0, 0) 블록 크기 제약을 모든 LToStretch에 레이아웃.
  4. 제약 없는 목표 크기 Uascent, Udescent를 각각 이전 단계에서 레이아웃한 in-flow 자식의 margin boxes의 최대 ink ascent, descent로 계산.
  5. LToStretch의 모든 요소를 (Uascent, Udescent) 블록 크기 제약으로 레이아웃 또는 재배치.
3.3.1.2 <mrow>의 레이아웃

박스가 익명 <mrow> 박스가 아니고 연결된 요소의 계산된 display 속성이 block math 또는 inline math가 아니면 CSS 명세에 따라 레이아웃된다. 그렇지 않으면 아래와 같이 레이아웃된다.

자식 박스가 기울어진(slanted) 경우는, 수식된 연산자가 아니고 이탤릭 보정이 0이 아닐 때다.

참고
대형 연산자는 이탤릭 보정이 0이 아닐 수 있으나 이는 첨자 붙일 때 사용된다. 일반적으로 모든 수식된 연산자는 비기울어진 것으로 간주하며, 그 주위 여백은 lspacerspace에 따라 계산된다.

min-content 인라인 크기 (또는 max-content 인라인 크기)는 다음 알고리즘으로 계산된다:

  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에 자식 margin boxmin-content 인라인 크기 (또는 max-content 인라인 크기)를 더한다.
    4. 자식이 기울어졌다면 previous-italic-correction을 그 자식의 이탤릭 보정 값으로, 아니면 0으로 설정.
    5. 자식이 수식된 연산자이고 add-space가 true면 inline-offsetrspace 값을 더한다.
  5. inline-offsetprevious-italic-correction을 더한다.
  6. inline-offset을 반환한다.

in-flow 자식들은 블록 축 연산자 늘이기 알고리즘 으로 레이아웃된다.

수학 콘텐츠의 inline sizemin-content inline sizemax-content inline size와 동일하게, 각 in-flow 자식 margin boxinline size를 이용해 계산된다.

수학 콘텐츠의 잉크 라인 상승선(또는 라인 상승선)은 모든 in-flow 자식 margin box잉크 라인 상승선(또는 라인 상승선)의 최대값이다. 마찬가지로 잉크 라인 하강선(또는 라인 하강선)도 모든 in-flow 자식 margin box잉크 라인 하강선 (또는 잉크 라인 상승선) 의 최대값이다.

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 offsetinline-offset로, block offset은 자식의 알파벳 기준선이 줄의 알파벳 기준선과 맞춰지도록 설정.
    4. inline-offset에 자식 margin boxinline size를 더한다.
    5. 자식이 기울어졌다면 previous-italic-correction을 그 자식의 이탤릭 보정 값으로, 아니면 0으로 설정.
    6. 자식이 수식된 연산자이고 add-space가 true면 inline-offsetrspace 값을 더한다.

이탤릭 보정값은 마지막 in-flow 자식의 값을(즉 previous-italic-correction의 마지막 값) 갖는다.

3.3.2 분수 <mfrac>

mfrac 요소는 분수에 사용된다. 이 요소는 이항계수나 르장드르 기호와 같은 분수와 유사한 객체의 마크업에도 사용할 수 있다.

<mfrac> 요소의 계산된 display 속성이 block math 또는 inline math 가 아니면, CSS 명세에서 해당 값에 따라 레이아웃된다. 그렇지 않으면, 아래 레이아웃이 적용된다.

<mfrac> 요소는 2.1.3 글로벌 속성 과, 다음 속성을 허용한다:

linethickness 속성은 분수 막대의 분수선 두께 를 지정한다. 있으면 <length-percentage> 타입의 유효한 값을 가져야 한다. 속성이 없거나 값이 유효하지 않으면, FractionRuleThickness가 기본값으로 사용된다. 백분율은 이 기본값을 기준으로 해석된다. 음수 값은 0으로 해석된다.

다음은 네 개의 linethickness 값이 다른 분수 예시이다. 분수선은 항상 플러스와 마이너스 기호의 가운데에 맞춰진다. 분자와 분모는 수평 가운데에 정렬된다. displaystyle 이 아닌 분수는 더 작은 간격과 글꼴 크기를 사용한다.

<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픽셀의 여백이 추가된다. user agent stylesheet 에는 다음 규칙이 포함되어야 한다:

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 자식을 분자(numerator), 두 번째 in-flow 자식을 분모(denominator)라 하고 레이아웃 알고리즘을 아래에 설명한다.

참고
실제로 <mfrac> 요소에는 두 개의 in-flow 자식이 있다. 그러므로 CSS 규칙은 기본적으로 scriptlevel, displaystyle 그리고 math-shift분자분모에 대해 적용한다.
3.3.2.1 분수선 두께가 0이 아닌 분수

분수선 두께가 0이 아니면 <mfrac> 요소는 그림 12와 같이 레이아웃된다. 분수선은 visibilityvisible일 때만 그려져야 한다. 이 경우, 분수선은 요소의 color로 그려져야 한다.

그림 12 <mfrac> 요소의 박스 모델

수학 내용의 min-content 인라인 크기 (또는 max-content 인라인 크기)는 분자margin box분모margin boxmin-content 인라인 크기 (또는 max-content 인라인 크기) 중 최대값이다.

인라인 늘이기 크기 제약 또는 블록 늘이기 크기 제약이 있으면, 분자도 같은 크기 제약으로 레이아웃되고, 없으면 크기 제약 없이 레이아웃된다. 분모는 항상 크기 제약 없이 레이아웃된다.

수학 콘텐츠의 inline size분자margin box분모margin boxinline size 중 최대값이다.

NumeratorShift는 다음 중 최대값이다:

DenominatorShift는 다음 중 최대값이다:

수학 내용의 라인 상승선은 다음 중 최대값이다:

수학 내용의 라인 하강선은 다음 중 최대값이다:

분자 (또는 분모) 의 inline offset은 수학 내용의 inline size의 1/2 − 분자 margin boxinline size의 1/2 (또는 분모 margin boxinline size의 1/2)로 계산된다.

분자(또는 분모)의 알파벳 기준선알파벳 기준선으로부터 NumeratorShift(또는 DenominatorShift)만큼 line-over(또는 line-under) 방향으로 이동된다.

수학 콘텐츠 박스content box 내에 블록-스타트(edge)가 정렬되고 그 중간이 같은 위치에 오도록 배치된다.

분수선의 inline sizecontent boxinline size이고, 그 inline-start(edge)는 content box의 edge와 정렬된다. 분수선의 중심은 수학 콘텐츠 박스알파벳 기준선에서 AxisHeight만큼 line-over 방향으로 이동된다. 분수선의 block size분수선 두께다.

3.3.2.2 분수선 두께가 0인 분수

분수선 두께가 0이면, <mfrac> 요소는 대신 그림 13처럼 레이아웃된다.

그림 13 <mfrac> 요소(막대 없음)의 박스 모델

min-content 인라인 크기, max-content 인라인 크기 및 수학 콘텐츠의 inline size3.3.2.1 분수선 두께가 0이 아닌 분수와 동일하게 계산된다.

인라인 늘이기 크기 제약 또는 블록 늘이기 크기 제약이 있으면, 분자도 같은 크기 제약으로 레이아웃되고, 없으면 크기 제약 없이 레이아웃된다. 분모는 항상 크기 제약 없이 레이아웃된다.

math-stylecompact이면 TopShiftBottomShift는 각각 StackTopShiftUpStackBottomShiftDown으로 지정된다. 아니면 math-stylenormal이고 각각 StackTopDisplayStyleShiftUp , StackBottomDisplayStyleShiftDown로 지정된다.

Gap은 (BottomShift분모 margin box잉크 라인 상승선) + (TopShift분자 margin box잉크 라인 하강선) 으로 정의된다. math-stylecompact이면 GapMinStackGapMin이고, 아니면 math-stylenormal 인 경우 StackDisplayStyleGapMin이다. Δ = GapMinGap가 양수이면 TopShiftBottomShift는 각각 Δ/2와 Δ − Δ/2만큼 증가된다.

수학 내용의 라인 상승선은 다음 중 최대값이다:

수학 내용의 라인 하강선은 다음 중 최대값이다:

inline offset3.3.2.1 분수선 두께가 0이 아닌 분수와 동일하게 계산된다.

분자(또는 분모)의 알파벳 기준선알파벳 기준선으로부터 TopShift(또는 − BottomShift)만큼 line-over(또는 line-under) 방향으로 이동된다.

수학 콘텐츠 박스content box 내에 블록-스타트(edge)가 정렬되고 그 중간이 같은 위치에 오도록 배치된다.

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-shiftcompact로 설정한다. <mroot> 요소는 scriptlevel을 2 올리고, 첫 번째 자식을 제외하고 displaystyle을 "false"로 설정한다. user agent stylesheet 에는 이 동작을 구현하기 위해 다음 규칙이 포함되어야 한다:

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

<msqrt> 또는 <mroot> 요소의 계산된 display 속성이 block math 또는 inline math 가 아니면, CSS 명세에서 해당 값에 따라 레이아웃된다. 그렇지 않으면, 아래 레이아웃이 적용된다.

<mroot> 요소가 in-flow 자식을 두 개보다 적거나 많게 가지면 레이아웃 알고리즘은 mrow 요소의 것과 같다. 그렇지 않으면, 첫 번째 in-flow 자식을 mroot base , 두 번째 in-flow 자식을 mroot index 라 하고, 레이아웃 알고리즘을 아래에 설명한다.

참고
실제로 <mroot> 요소엔 두 개의 in-flow 자식이 있다. 그러므로 CSS 규칙은 기본적으로 scriptleveldisplaystyle 변경을 인덱스에 적용한다.

<msqrt> 요소는 익명 <mrow> 박스를 생성하는데, 이를 msqrt base라 한다.

3.3.3.1 근호 기호

근호 기호는 visibilityvisible일 때만 <msqrt> 또는 <mroot> 요소에 그려져야 한다. 이 경우 근호 기호는 해당 요소의 color로 그려진다.

근호 글리프는 문자 U+221A 제곱근의 글리프다.

근호 간격(radical gap)math-stylecompactRadicalVerticalGap이고, math-stylenormal이면 RadicalDisplayStyleVerticalGap이다.

늘어나기 가능한 근호 글리프의 목표 크기는 RadicalRuleThickness, 근호 간격, 그리고 base의 잉크 높이를 합한 값이다.

근호 글리프의 박스 메트릭스루트(써드, surd) 그리기(painting)늘어나는 글리프 셰이핑 알고리즘을 통해 근호 기호의 target size로 block dimension을 만든다.

3.3.3.2 제곱근

<msqrt> 요소는 그림 14처럼 레이아웃된다.

그림 14 <msqrt> 요소의 박스 모델

수학 내용의 min-content 인라인 크기 (또는 max-content 인라인 크기)는 근호 글리프에 대한 블록 축 방향 스트레칭 글리프의 선호 인라인 크기msqrt basemargin boxmin-content 인라인 크기 (또는 max-content 인라인 크기)를 더한 값이다.

수학 내용의 inline size근호 글리프 메트릭스의 advance widthmsqrt base margin boxinline size를 합한 값이다.

수학 내용의 라인 상승선은 다음 중 최대값이다:

수학 내용의 라인 하강선은 다음 중 최대값이다:

overbar의 inline sizemsqrt base margin boxinline size다. msqrt base와 overbar의 inline offset도 동일하며, 근호 글리프의 width로 한다.

msqrt base알파벳 기준선은 줄의 알파벳 기준선과 맞춘다. overbar의 block sizeRadicalRuleThickness이고, 수직 중심은 알파벳 기준선에서 line-over 방향으로, 수식 내용의 라인 상승선에서 RadicalExtraAscender를 빼고 RadicalRuleThickness의 절반을 빼서 이동한다.

마지막으로 루트(써드) 그리기를 수행한다:

3.3.3.3 지수 근

<mroot> 요소는 그림 15와 같이 레이아웃된다. mroot index는 일단 무시되고 mroot base 와 근호 글리프는 그림 14의 알고리즘대로 레이아웃되어 margin box B(녹색으로 표시)에 들어간다.

그림 15 <mroot> 요소의 박스 모델

수학 내용의 min-content 인라인 크기 (또는 max-content 인라인 크기)는 다음의 합이다: max(0, RadicalKernBeforeDegree), mroot indexmargin box min-content 인라인 크기 (또는 max-content 인라인 크기), max(−min-content 인라인 크기, RadicalKernAfterDegree) (또는 max(−max-content 인라인 크기 mroot index margin box, RadicalKernAfterDegree)), 그리고 B의 min-content 인라인 크기 (또는 max-content 인라인 크기).

같은 방식으로, AdjustedRadicalKernBeforeDegreeAdjustedRadicalKernAfterDegree는 각각 max(0, RadicalKernBeforeDegree) 와 max(−인덱스 margin box inline size, RadicalKernAfterDegree)로 정의된다.

수학 내용의 inline sizeAdjustedRadicalKernBeforeDegree, 인덱스의 margin box inline size, AdjustedRadicalKernAfterDegree, B의 inline size를 합한 값이다.

수학 내용의 라인 상승선은 다음 중 최대값이다:

수학 내용의 라인 하강선은 다음 중 최대값이다:

인덱스의 inline offsetAdjustedRadicalKernBeforeDegree이다. mroot base의 inline offset은 거기서 인덱스 margin boxinline size를 더한 값이다.

B의 알파벳 기준선은 줄의 알파벳 기준선과 맞춘다. 인덱스의 알파벳 기준선line-under edge에서 RadicalDegreeBottomRaisePercent × B의 block size + 인덱스 margin box라인 하강선만큼 떨어진다.

참고
일반적으로 근 인덱스 앞 커닝은 양수, 뒤 커닝은 음수이므로 근 요소엔 inline-start 여백이 생기고 인덱스가 근호와 겹친다.

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 요소와 같다. user agent stylesheet 에 오류 메시지를 시각적으로 강조하기 위해 다음 규칙이 포함되어야 한다:

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

3.3.6 콘텐츠 주변 간격 조정 <mpadded>

mpadded 요소는 in-flow 자식 콘텐츠와 동일하게 렌더링되지만, <mpadded>의 속성에 따라 콘텐츠의 크기와 상대적 위치 기준점이 수정된다.

<mpadded> 요소는 2.1.3 글로벌 속성에 명시된 속성뿐만 아니라 다음 속성도 허용한다:

width, height, depth, lspacevoffset 가 있을 경우, <length-percentage> 타입의 유효한 값을 가져야 한다.

아래 예제에서, mpadded 는 분수 주위의 간격을 조정하는 데 사용되었다 (파란색 배경은 시각화를 위한 것). 속성이 없으면 mrow 와 같지만, 속성을 사용하면 박스의 크기(width, height, depth)와 그 안에서 분수 위치(lspace, voffset)를 지정할 수 있다.

<math>
  <mrow>
    <mn>1</mn>
    <mpadded style="background: lightblue;">
      <mfrac>
        <mn>23456</mn>
        <mn>78</mn>
      </mfrac>
    </mpadded>
    <mn>9</mn>
  </mrow>
  <mo>+</mo>
  <mrow>
    <mn>1</mn>
    <mpadded lspace="2em" voffset="-1em" height="1em" depth="3em" width="7em"
             style="background: lightblue;">
      <mfrac>
        <mn>23456</mn>
        <mn>78</mn>
      </mfrac>
    </mpadded>
    <mn>9</mn>
  </mrow>
</math>
mpadded example
3.3.6.1 내부 박스 및 요청 파라미터

mpadded 요소는 익명 <mrow> 박스를 생성하며, 이것을 mpadded 내부 박스라고 한다. 이 안에는 inner inline size, inner line-ascent, inner line-descent 파라미터가 있다.

요청된 <mpadded> 파라미터는 다음과 같이 결정된다:

  • 요청된 width는 width 속성의 해석된 값이다. width 속성이 존재하고 유효하며 백분율이 아니면 해당 속성을 presentational hint로 활용해 요소의 width 속성을 설정한다.
  • height 속성이 없거나 유효하지 않거나 백분율이면 요청된 height는 inner line-ascent다. 그렇지 않으면 height 속성의 해석값(음수는 0으로 clamp)을 쓴다.
  • depth 속성이 없거나 유효하지 않거나 백분율이면 요청된 depth는 inner line-ascent다. 그렇지 않으면 depth 속성의 해석값(음수는 0으로 clamp)을 쓴다.
  • lspace 속성이 없거나 유효하지 않거나 백분율이면 요청된 lspace는 0이다. 그렇지 않으면 lspace 속성의 해석값(음수는 0으로 clamp)을 쓴다.
  • voffset 속성이 없거나 유효하지 않거나 백분율이면 요청된 voffset는 0이다. 그렇지 않으면 voffset 속성의 해석값을 쓴다.
    참고
    음수 voffset 값은 0으로 clamp되지 않는다.
3.3.6.2 <mpadded>의 레이아웃

<mpadded> 요소의 계산된 display 속성이 block math 또는 inline math가 아니면 CSS 명세에 따라 레이아웃한다. 그렇지 않으면, 그림 16처럼 레이아웃된다.

그림 16 <mpadded> 요소의 박스 모델

수학 내용의 min-content 인라인 크기 (또는 max-content 인라인 크기)는 3.3.6.1 내부 박스 및 요청 파라미터에서 계산한 요청된 width인데, 그때 "inner inline size" 대신 mpadded 내부 박스min-content 인라인 크기 (또는 max-content 인라인 크기)를 쓴다.

수학 내용의 inline size3.3.6.1 내부 박스 및 요청 파라미터에서 계산한 요청된 width이다.

수학 내용의 line-ascent는 요청된 height이다. 수학 내용의 line-descent는 요청된 depth이다.

mpadded 내부 박스알파벳 기준선알파벳 기준선에서 요청된 voffset만큼 line-over 방향으로 이동된 위치에 놓는다.

3.3.7 하위 식을 보이지 않게 만들기 <mphantom>

과거에 mphantom 요소는 내용을 보이지 않게 렌더링하지만, 그 내용이 정상적으로 렌더링되었을 경우와 동일한 메트릭 크기 및 기타 치수, 알파벳 기준선 위치를 포함하여 유지하기 위해 도입되었다.

아래 예제에서, mphantom 은 분수의 분자와 분모의 대응 부분이 정렬되도록 보장하기 위해 사용되었다:

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

<mphantom> 요소는 2.1.3 글로벌 속성에 명시된 속성을 허용한다. 그 레이아웃 알고리즘은 mrow 요소와 같다. user agent stylesheet 에는 아래 규칙이 포함되어야 하며, 이를 통해 내용을 숨긴다:

mphantom {
  visibility: hidden;
}
참고
<mphantom>은 전체 MathML과의 호환성을 위해 도입되었다. 오직 MathML Core만 대상으로 하는 저자는 스타일링에 CSS 사용을 권장한다.

3.4 스크립트 및 리밋 도식

본 절에서 설명하는 요소들은 하나 이상의 스크립트를 베이스 주위에 배치한다. 다양한 형태의 스크립트와 장식을 기호에 부착하는 것은 수학에서 매우 흔한 표기 장치이다. 순전히 시각적 레이아웃만을 고려한다면, 한 개의 범용 요소만으로도 주어진 베이스를 중심으로 전통적인 스크립트 위치 어디에나 스크립트와 장식을 배치할 수 있다. 하지만 보편적 표기의 추상 구조를 더 잘 나타내기 위해 MathML은 좀 더 특화된 스크립트 요소들을 제공한다.

아래/위 첨자 요소 외에도 MathML은 베이스의 위에 또는 아래에 스크립트를 배치할 수 있는 over/underscript 요소를 가지고 있다. 이 요소들은 대형 연산자의 리밋(limit) 위치 지정이나, 베이스 위/아래에 악센트 및 선을 배치할 때 사용할 수 있다.

3.4.1 아래/위첨자 <msub>, <msup>, <msubsup>

msub, msupmsubsup 요소는 MathML 수식에 아래/위첨자를 붙이는 데 쓴다. 이들은 2.1.3 글로벌 속성에 명시된 속성을 받을 수 있다.

아래 예제는 기본적인 아래/위첨자 사용 예시를 보여준다. 스크립트 내에서는 글자 크기가 자동으로 축소된다.

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

<msub>, <msup> 또는 <msubsup> 요소가 계산된 display 속성이 block math 또는 inline math가 아닐 경우, CSS 명세에 따라 레이아웃된다. 그렇지 않으면 아래 레이아웃을 따른다.

3.4.1.1 <msub>, <msup>, <msubsup>의 자식

<msub> 요소가 in-flow 자식을 두 개보다 적게 또는 많이 가지면 레이아웃 알고리즘은 mrow 요소와 같다. 그렇지 않으면, 첫 번째 in-flow 자식은 msub base, 두 번째 in-flow 자식은 msub subscript라 하며, 레이아웃 알고리즘은 3.4.1.2 아래첨자 베이스에 설명되어 있다.

<msup> 요소가 in-flow 자식을 두 개보다 적게 또는 많이 가지면 레이아웃 알고리즘은 mrow 요소와 같다. 그렇지 않으면, 첫 번째 in-flow 자식은 msup base, 두 번째 in-flow 자식은 msup superscript라 하며, 레이아웃 알고리즘은 3.4.1.3 위첨자 베이스에 설명되어 있다.

<msubsup> 요소가 in-flow 자식을 세 개보다 적게 또는 많이 가지면 레이아웃 알고리즘은 mrow 요소와 같다. 그렇지 않으면 첫 번째 in-flow 자식은 msubsup base, 두 번째 in-flow 자식은 msubsup subscript, 세 번째 in-flow 자식은 msubsup superscript라 하며, 레이아웃 알고리즘은 3.4.1.4 아래/위첨자 베이스에 명시되어 있다.

3.4.1.2 아래첨자 베이스

<msub> 요소는 그림 17과 같이 레이아웃된다. LargeOpItalicCorrectionmsub base수식된 연산자이고 largeop 속성일 때는 이탤릭 보정이고, 그 외에는 0이다.

그림 17 <msub> 요소의 박스 모델

수식 내용의 min-content 인라인 크기 (또는 max-content 인라인 크기)는 msub base margin boxmin-content 인라인 크기(또는 max-content 인라인 크기) − LargeOpItalicCorrection + msub subscript margin boxmin-content 인라인 크기(또는 max-content 인라인 크기) + SpaceAfterScript 이다.

인라인 스트레치 크기 제약 또는 블록 스트레치 크기 제약 이 있다면 msub base도 동일한 크기 제약으로 레이아웃되고, 없다면 크기 제약 없이 레이아웃된다. 스크립트는 항상 크기 제약 없이 레이아웃된다.

수식 내용의 inline sizemsub base margin boxinline sizeLargeOpItalicCorrection + msub subscript margin boxinline size + SpaceAfterScript 이다.

SubShift는 다음 중 최대값이다:

수식 내용의 라인 상승선은 다음 중 최대값이다:

수식 내용의 라인 하강선은 다음 중 최대값이다:

msub baseinline offset은 0이고 msub subscriptinline offsetmsub base margin boxinline sizeLargeOpItalicCorrection 이다.

msub base알파벳 기준선은 줄의 알파벳 기준선과 맞추고, msub subscript알파벳 기준선알파벳 기준선에서 SubShift만큼 line-under 방향으로 이동시킨다.

3.4.1.3 위첨자 베이스

<msup> 요소는 그림 18과 같이 레이아웃된다. ItalicCorrectionmsup base수식된 연산자이며 largeop 속성이 아니면 이탤릭 보정이고, 그 외에는 0이다.

그림 18 <msup> 요소의 박스 모델

수식 내용의 min-content 인라인 크기 (또는 max-content 인라인 크기)는 msup base margin boxmin-content 인라인 크기(또는 max-content 인라인 크기) + ItalicCorrection + msup superscript margin boxmin-content 인라인 크기(또는 max-content 인라인 크기) + SpaceAfterScript이다.

인라인 스트레치 크기 제약 또는 블록 스트레치 크기 제약 이 있다면 msup base도 동일한 크기 제약으로 레이아웃되고, 없다면 크기 제약 없이 레이아웃된다. 스크립트는 항상 크기 제약 없이 레이아웃된다.

수식 내용의 inline sizemsup base margin boxinline size + ItalicCorrection + msup superscript margin boxinline size + SpaceAfterScript이다.

SuperShift는 다음 중 최대값이다:

수식 내용의 라인 상승선은 다음 중 최대값이다:

수식 내용의 라인 하강선은 다음 중 최대값이다:

msup baseinline offset은 0이고, msup superscriptinline offsetmsup base margin boxinline size + ItalicCorrection이다.

msup base알파벳 기준선은 줄의 알파벳 기준선에 맞추고, msup superscript알파벳 기준선알파벳 기준선에서 SuperShift만큼 line-over 방향으로 이동시킨다.

3.4.1.4 아래/위첨자 베이스

<msubsup> 요소는 그림 18과 같이 레이아웃된다. LargeOpItalicCorrectionSubShift3.4.1.2 아래첨자 베이스와 같다. ItalicCorrectionSuperShift3.4.1.3 위첨자 베이스와 같다.

그림 19 <msubsup> 요소의 박스 모델

수식 내용의 min-content 인라인 크기 (또는 max-content 인라인 크기, inline size)는 3.4.1.2 아래첨자 베이스3.4.1.3 위첨자 베이스에서 계산된 값 중 최대값이다.

인라인 스트레치 크기 제약 또는 블록 스트레치 크기 제약 이 있다면 msubsup base도 동일한 크기 제약으로 레이아웃되고, 없다면 크기 제약 없이 레이아웃된다. 스크립트는 항상 크기 제약 없이 레이아웃된다.

인라인 스트레치 크기 제약 또는 블록 스트레치 크기 제약 이 있다면 msubsup base도 동일 제약으로 레이아웃되고, 아니면 제약 없이 레이아웃. 스크립트는 항상 크기 제약 없이 레이아웃된다.

SubSuperGap은 두 스크립트의 block axis 간격이며, (SubShiftmsubsup subscript margin box잉크 라인 상승선) + (SuperShiftmsubsup superscript margin box잉크 라인 하강선)로 정의된다. 만약 SubSuperGapSubSuperscriptGapMin 미만이면 아래 과정을 수행한다:

  1. Δ를 SuperscriptBottomMaxWithSubscript − (SuperShiftmsubsup superscript margin box잉크 라인 하강선)로 하는데, Δ>0이면 Δ를 Δ와 SubSuperscriptGapMinSubSuperGap 중 작은 값으로 하고, SuperShift(및 SubSuperGap)를 Δ만큼 증가시킨다.
  2. Δ를 SubSuperscriptGapMinSubSuperGap로 두고, Δ>0이면 SubscriptShift(및 SubSuperGap)를 Δ만큼 증가시킨다.

수식 내용의 잉크 라인 상승선 (또는 라인 상승선, 잉크 라인 하강선, 라인 하강선)은 3.4.1.2 아래첨자 베이스3.4.1.3 위첨자 베이스에서 계산된 값(위 SubShiftSuperShift 반영)을 최대값으로 갖는다.

msubsup base 및 스크립트의 inline offsetblock offset3.4.1.2 아래첨자 베이스3.4.1.3 위첨자 베이스의 설명과 동일하게 수행된다.

참고

msubsup subscript (또는 msubsup superscript)가 빈 박스라 해도, <msubsup>3.4.1.3 위첨자 베이스 (또는 3.4.1.2 아래첨자 베이스) 와 일반적으로 동일하지 않다. 그 이유는 SubSuperGap의 추가 제약 때문이다. 또한 빈 msubsup subscript (또는 msubsup superscript)의 배치도 전체 크기에 영향을 줄 수 있다.

알고리즘의 단순성을 위해, 빈 스크립트는 별도로 다루지 않는다.

3.4.2 아래 스크립트 및 위 스크립트 <munder>, <mover>, <munderover>

munder, movermunderover 요소는 수식의 아래 또는 위에 악센트나 리밋을 붙이는 데 사용된다.

<munderover> 요소는 2.1.3 글로벌 속성에 설명된 속성뿐만 아니라 다음 속성들도 허용한다:

마찬가지로, <mover> 요소(각각 <munder> 요소)는 2.1.3 글로벌 속성에 설명된 속성뿐만 아니라 accent 속성(각각 accentunder 속성)을 허용한다.

accent, accentunder 속성은, 존재할 경우 booleans 값을 가져야 한다. 이 속성들이 없거나 유효하지 않으면 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 math 또는 inline 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이고, 그들의 베이스가 embellished operator이며 movablelimits 속성을 가지고 있다면, 이들의 레이아웃 알고리즘은 각각 <msub>, <msup>, <msubsup>에 대해 3.4.1.2 아래첨자 베이스, 3.4.1.3 위첨자 베이스, 3.4.1.4 아래/위첨자 베이스에 설명된 것과 동일하다.

그렇지 않으면, <munder>, <mover><munderover>의 레이아웃 알고리즘은 각각 3.4.2.3 아래스크립트 베이스, 3.4.2.4 위스크립트 베이스3.4.2.5 아래스크립트 및 위스크립트 베이스에 설명된 대로이다.

3.4.2.2 인라인 축을 따라 연산자 늘이기 알고리즘

인라인 축을 따라 연산자 늘이기 알고리즘 은 다음과 같다.

  1. 인라인 스트레치 크기 제약 또는

    블록 스트레치 크기 제약 이 있으면 레이아웃되는 요소는 embellished operator이다. 베이스를 동일한 크기 제약으로 레이아웃한다.

  2. 아직 레이아웃되지 않은 in-flow 자식 목록을, LToStretch (inline stretchy 속성과 인라인 stretch axis을 가진 embellished operators)과 LNotToStretch으로 분할한다.

  3. LNotToStretch의 모든 항목을 스트레치 크기 제약 없이 레이아웃한다. LToStretch가 비어 있으면 종료한다. LNotToStretch가 비어 있으면, LToStretch의 모든 항목에 대해 인라인 스트레치 크기 제약 0으로 레이아웃한다.

  4. 이전 단계에서 레이아웃된 자식 박스들의 margin boxes의 최대 inline size를 목표 크기 T로 계산한다.

  5. LToStretch의 모든 요소를 인라인 스트레치 크기 제약 T로 레이아웃하거나 재레이아웃한다.

3.4.2.3 아래스크립트 베이스

<munder> 요소는 그림 20과 같이 레이아웃된다. LargeOpItalicCorrection이탤릭 보정으로, munder baseembellished operator이며 largeop 속성을 가질 때 해당 값이고, 그렇지 않으면 0이다.

그림 20 <munder> 요소의 박스 모델

수학 내용의 min-content 인라인 크기 (또는 max-content 인라인 크기)는 아래에 설명된 inline size 계산과 유사하게 계산되며, 다만 munder basemargin boxmunder underscriptmargin box 대신, 각각의 min-content inline size (또는 max-content inline size)를 사용한다.

in-flow 자식들은 인라인 축을 따라 연산자 늘이기 알고리즘을 사용하여 레이아웃된다.

수학 내용의 inline size는 다음의 절대값 차이로 계산된다:

위 두 번째 항목에서 계산된 최소값을 m이라 하면, inline offsetmunder base의 값은 −m − 베이스의 margin box의 절반이다. munder underscriptinline offset은 −m − munder underscriptmargin box의 절반 − LargeOpItalicCorrection의 절반이다.

파라미터 UnderShiftUnderExtraDescender는 다음의 세 가지 경우를 고려하여 순서대로 결정된다:

  1. munder baseembellished operator이며 largeop 속성을 가질 때, UnderShift는 다음의 최대값이다:

    UnderExtraDescender는 0이다.

  2. munder baseembellished operator이며 stretchy 속성과 인라인 stretch axis를 가질 때, UnderShift는 다음의 최대값이다:

    UnderExtraDescender는 0이다.

  3. 그렇지 않으면, UnderShiftUnderbarVerticalGap이고, accentunder 속성이 ASCII 대소문자 구분 없이 true와 일치하지 않을 때 해당 값이며, 그렇지 않으면 0이다. UnderExtraAscenderUnderbarExtraDescender이다.

수학 내용의 line-ascent은 다음 중 최대값이다:

수학 내용의 line-descent은 다음 중 최대값이다:

alphabetic baselinemunder base의 알파벳 기준선이 줄의 알파벳 기준선과 정렬된다. munder underscript의 알파벳 기준선은 기본 알파벳 기준선에서 떨어져 line-under 방향으로, munder base잉크 라인 하강선 + UnderShift 만큼 이동된다.

math content boxcontent box 내에 배치되어 블록-스타트 가장자리가 정렬되고 이 가장자리들의 중간점이 동일한 위치에 오도록 한다.

3.4.2.4 위스크립트 베이스

<mover> 요소는 그림 21과 같이 레이아웃된다. LargeOpItalicCorrection이탤릭 보정으로, mover baseembellished operator이며 largeop 속성을 가질 때 해당 값이고, 그렇지 않으면 0이다.

그림 21 <mover> 요소의 박스 모델

수학 내용의 min-content 인라인 크기 (또는 max-content 인라인 크기)는 아래에 설명된 inline size 계산과 유사하게 계산되며, 다만 mover basemargin boxmover overscriptmargin box 대신, 각각의 min-content inline size (또는 max-content inline size)를 사용한다.

in-flow 자식들은 인라인 축을 따라 연산자 늘이기 알고리즘을 사용하여 레이아웃된다.

TopAccentAttachmentmover overscripttop accent attachment 값이며, 정의되지 않은 경우에는 mover overscriptmargin box의 절반을 사용한다.

수학 내용의 inline size인라인 축을 따라 연산자 늘이기 알고리즘을 적용한 후, 다음의 절대값 차이로 결정된다:

위 두 번째 항목에서 계산된 최소값을 m이라 하면, inline offsetmover base의 값은 −m − 베이스의 margin box의 절반이다. mover overscriptinline offset은 −m − mover overscriptmargin box의 절반 + LargeOpItalicCorrection의 절반이다.

파라미터 OverShiftOverExtraDescender는 다음 세 경우를 순서대로 고려하여 결정된다:

  1. mover baseembellished operator이며 largeop 속성을 가질 때, OverShift는 다음의 최대값이다:

    OverExtraAscender는 0이다.

  2. mover baseembellished operator이며 stretchy 속성과 인라인 stretch axis를 가질 때, OverShift는 다음의 최대값이다:

    OverExtraDescender는 0이다.

  3. 그렇지 않으면, OverShift는 다음 중 하나이다:

    1. OverbarVerticalGapaccent 속성이 ASCII 대소문자 무시true가 아닐 때 사용한다.
    2. 또는 AccentBaseHeight에서 line-ascent (해당 mover basemargin box 기준)을 뺀 값이 0 이상이면 그 값을 사용한다.
    3. 그렇지 않으면 0을 사용한다.

    OverExtraAscenderOverbarExtraAscender이다.

Note

악센트 오버스크립트와 베이스의 line-ascentAccentBaseHeight 이하일 때, [OPEN-FONT-FORMAT] 및 [TEXBOOK]의 규칙은 오버스크립트와 베이스의 알파벳 기준선을 정렬하는 것이다. 이는 악센트 글리프의 잉크 하단이 알파벳 기준선에서 대략 AccentBaseHeight 만큼 위에 설계되어 있다고 가정하기 때문이다. 따라서 이전 규칙은 모든 오버스크립트 하단을 정렬하면서 베이스와의 충돌을 피하도록 보장한다. 그러나 MathML은 임의의 악센트 오버스크립트를 허용하므로, 더 일반적이고 단순한 규칙을 위에 제공한다: 오버스크립트 바닥이 베이스의 알파벳 기준선에서 최소한 AccentBaseHeight 만큼 위에 있도록 보장한다.

수학 내용의 line-ascent은 다음 중 최대값이다:

수학 내용의 line-descent은 다음 중 최대값이다:

alphabetic baselinemover base의 알파벳 기준선이 줄의 알파벳 기준선과 정렬된다. mover overscript의 알파벳 기준선은 기본 알파벳 기준선에서 떨어져 line-over 방향으로, 베이스의 잉크 라인 상승선 + OverShift 만큼 이동된다.

math content boxcontent box 내에 배치되어 블록-스타트 가장자리가 정렬되고 이 가장자리들의 중간점이 동일한 위치에 오도록 한다.

3.4.2.5 아래스크립트 및 위스크립트 베이스

<munderover>의 일반적인 레이아웃은 그림 22에 나와 있다. LargeOpItalicCorrection, UnderShift, UnderExtraDescender, OverShift, OverExtraDescender 파라미터들은 3.4.2.3 아래스크립트 베이스3.4.2.4 위스크립트 베이스에서와 동일하게 계산된다.

그림 22 <munderover> 요소의 박스 모델

수학 내용의 min-content 인라인 크기, max-content 인라인 크기inline size는 최대 inline offset과 최소 inline offset의 절대값 차이로 계산된다. 이러한 극값들은 3.4.2.3 아래스크립트 베이스3.4.2.4 위스크립트 베이스에서 계산된 대응 극값들의 극값을 취하여 계산된다. inline offsets은 이 섹션들에서와 동일하게 계산되지만 새로 계산된 최소값 m(해당 최소값들의 최소)을 사용한다.

이 섹션들처럼, in-flow 자식들은 인라인 축을 따라 연산자 늘이기 알고리즘을 사용하여 레이아웃된다.

수학 내용의 line-ascentline-descent3.4.2.3 아래스크립트 베이스3.4.2.4 위스크립트 베이스에서 계산된 극값들의 극값을 취하여 계산된다.

마지막으로, alphabetic baselinesmunderover base, munderover underscriptmunderover overscript에 대해 위의 섹션들에서와 동일하게 계산된다.

math content boxcontent box 내에 배치되어 블록-스타트 가장자리가 정렬되고 이 가장자리들의 중간점이 동일한 위치에 오도록 한다.

Note

underscript(또는 overscript)가 빈 박스인 경우, 베이스와 overscript(또는 underscript)는 3.4.2.4 위스크립트 베이스 (또는 3.4.2.3 아래스크립트 베이스)와 유사하게 레이아웃되지만, 빈 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 math 또는 inline math가 아니면, CSS 명세에서 해당 값에 따라 레이아웃된다. 그렇지 않으면 아래의 레이아웃이 적용된다.

<mprescripts> 요소는 mrow 요소와 같이 레이아웃된다.

유효한 <mmultiscripts> 요소는 다음 in-flow 자식을 갖는다:

  • 첫 번째 in-flow 자식은 mmultiscripts base라 하며, mprescripts 요소가 아니어야 한다.
  • 그 다음에 오는 짝수 개의 in-flow 자식들은 mmultiscripts postscripts라 하며, 이들 역시 mprescripts 요소가 아니어야 한다. 이 스크립트들은 아래첨자, 위첨자, 아래첨자, 위첨자, ... 들로 이루어진 (비어 있을 수도 있는) 목록을 이룬다. 각 연속된 아래첨자-위첨자 자식 쌍을 아래/위첨자 쌍이라고 부른다.
  • 선택적으로 mprescripts 요소와, 짝수 개의 in-flow 자식 mmultiscripts prescripts (이 역시 mprescripts 요소가 아님) 로 이어진다. 이 스크립트들은 (비어있을 수 있는) 아래/위첨자 쌍들의 목록을 이룬다.

<mmultiscripts> 요소가 유효하지 않은 경우 mrow 요소와 동일하게 레이아웃된다. 유효하다면 레이아웃 알고리즘은 3.4.3.1 프리스크립트 및 포스트스크립트 베이스에서 설명한 대로 수행된다.

3.4.3.1 프리스크립트 및 포스트스크립트 베이스

<mmultiscripts> 요소는 그림 23과 같이 레이아웃된다. mmultiscripts postscripts의 각 아래/위첨자 쌍마다, ItalicCorrectionLargeOpItalicCorrection 값은 3.4.1.2 아래첨자 베이스3.4.1.3 위첨자 베이스에서 정의된 대로이다.

그림 23 <mmultiscripts> 요소의 박스 모델

수식 내용의 min-content 인라인 크기 (또는 max-content 인라인 크기)는 아래 설명하는 inline size 계산과 동일하게 계산하되, "inline size" 대신 mmultiscripts basemargin box 및 스크립트의 margin box에 대해 "min-content inline size" (또는 "max-content inline size")를 사용한다.

인라인 스트레치 크기 제약 또는 블록 스트레치 크기 제약 이 있다면 mmultiscripts base도 동일한 제약으로 레이아웃되고, 아니면 크기 제약 없이 레이아웃된다. 다른 요소들은 항상 크기 제약 없이 레이아웃된다.

수식 내용의 inline size는 다음 알고리즘으로 계산된다:

  1. inline-offset를 0으로 설정한다.
  2. mmultiscripts prescripts의 각 아래/위첨자 쌍마다, inline-offsetSpaceAfterScript와 다음 중 최대값만큼 증가시킨다.

  3. inline-offsetmmultiscripts base margin boxinline size를 더하고, 이 값을 inline-size로 설정한다.
  4. mmultiscripts postscripts의 각 아래/위첨자 쌍마다, inline-size가 다음 값 이상이 되도록 갱신한다:

    inline-offset를 다음 중 최대값으로 갱신한다:

    inline-offsetSpaceAfterScript를 더한다.

  5. inline-size를 반환한다.

SubShift(아래첨자 위치) 및 SuperShift(위첨자 위치)는 3.4.1.4 아래/위첨자 베이스에서 설명된 대로 각 쌍의 모든 subshift(또는 supershift) 중 최대값을 취해 계산한다.

수식 내용의 line-ascent3.4.1.4 아래/위첨자 베이스에서 설명된 대로 각 쌍의 모든 line-ascent의 최대값을 SubShiftSuperShift 반영하여 계산한다.

수식 내용의 line-descent는 위와 동일하지만 line-descent(하강선)의 최대값으로 계산한다.

마지막으로 in-flow 자식 배치는 다음 알고리즘으로 수행된다:

  1. inline-offset을 0으로 한다.
  2. mmultiscripts prescripts의 각 아래/위첨자 쌍에 대해:

    1. inline-offsetSpaceAfterScript를 더한다.
    2. pair-inline-size를 아래 중 최대값으로 지정:
    3. 아래첨자를 인라인 시작점 위치 inline-offset + pair-inline-size − 아래첨자 margin boxinline size에 배치한다.
    4. 위첨자를 인라인 시작점 위치 inline-offset + pair-inline-size − 위첨자 margin boxinline size에 배치한다.
    5. 아래첨자(또는 위첨자)는 알파벳 기준선에서 SubShift (또는 SuperShift) 만큼 line-under (또는 line-over) 방향으로 이동시켜 놓는다.
    6. inline-offsetpair-inline-size를 더한다.
  3. mmultiscripts base<mprescripts> 박스를 inline offset 위치에 배치하며, 각 알파벳 기준선은 줄의 알파벳 기준선에 맞춘다.
  4. mmultiscripts postscripts의 각 아래/위첨자 쌍에 대해:

    1. pair-inline-size를 아래첨자/위첨자 margin boxinline size 중 최대값으로 한다.
    2. 아래첨자는 inline-offsetLargeOpItalicCorrection 위치에 배치.
    3. 위첨자는 inline-offset + ItalicCorrection 위치에 배치.
    4. 각각의 알파벳 기준선은 SubShift (또는 SuperShift) 만큼 line-under (또는 line-over) 방향으로 이동시켜 놓는다.
    5. inline-offsetpair-inline-size를 더한다.
    6. inline-offsetSpaceAfterScript를 더한다.
참고

mmultiscripts postscripts아래/위첨자 쌍이 하나만 있는 <mmultiscripts>는 동일한 in-flow 자식인 <msubsup>과 동일하게 레이아웃된다. 그러나 (<msubsup> 참고)와 같이, 만약 추가로 아래첨자(또는 위첨자)가 빈 박스라면 반드시 <msub> (또는 <msup>) 요소와 동일하게 렌더링되는 것은 아니다. 알고리즘의 단순성을 위해 빈 스크립트는 별도로 다루지 않는다.

3.4.4 스크립트에서의 Displaystyle, scriptlevel 및 math-shift

모든 스크립트 요소에 대해, 원칙적으로 displaystylefalse로 설정하고 첫 번째 자식을 제외한 모든 자식 요소의 scriptlevel을 증가시킨다. 그러나 mover (또는 munderover) 요소가 accent 속성을 가지고 있고, ASCII 대소문자 구분 없이 true와 일치하면, 그 두 번째 자식(각각 세 번째 자식)에서는 scriptlevel을 증가시키지 않는다. 마찬가지로, movermunderover 요소가 accentunder 속성을 가지고 있고, ASCII 대소문자 구분 없이 true와 일치하면 두 번째 자식에서 scriptlevel을 증가시키지 않는다.

<mmultiscripts>math-shiftcompact으로 설정한다. 이때 mprescripts 앞에 있는 짝수 위치 자식과, mprescripts 뒤의 홀수 위치 자식이 대상이다. <msub><msubsup> 요소는 두 번째 자식에서 math-shiftcompact으로 설정한다. movermunderover 요소는 accent 속성이 ASCII 대소문자 구분 없이 true와 일치하면 첫 번째 자식에서 math-shiftcompact으로 설정한다.

A. User Agent Stylesheet에는 이 동작을 구현하기 위해 아래 스타일이 포함되어야 한다:

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 요소로 마크업한다. 이 요소들은 table, tr , td 요소([HTML])와 유사하다.

아래 예제는 행렬을 표 레이아웃으로 작성하는 방법을 보여준다. 이는 분수선 및 등호의 가운데에 세로 정렬됨에 유의하라.

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

3.5.1 표 또는 행렬 <mtable>

mtableinline-table로 레이아웃되고, displaystylefalse로 설정한다. user agent stylesheet에는 다음 규칙이 포함되어야 한다:

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

mtable 요소는 CSS table 처럼 동작하며, min-content inline size, max-content inline size, inline size, block size, first baseline set, last baseline set 속성도 여기에 맞게 결정된다. 테이블의 중심은 수학축(math axis)과 정렬된다.

<mtable>2.1.3 글로벌 속성에 설명된 속성을 허용한다.

3.5.2 표 또는 행렬의 행 <mtr>

mtrtable-row로 레이아웃된다. user agent stylesheet에는 다음 규칙이 포함되어야 한다:

mtr {
  display: table-row;
}

<mtr>2.1.3 글로벌 속성에 설명된 속성을 허용한다.

3.5.3 표 또는 행렬의 개별 항목 <mtd>

mtdtable-cell로 레이아웃되며, 내용이 셀 가운데 정렬되고 기본 패딩이 적용된다. user agent stylesheet에는 다음 규칙이 포함되어야 한다:

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) 속성과 동일한 문법과 의미를 가진다. 특히, 이 속성의 파싱은 행 처리 알고리즘에 따라, 항상 "colspan"을 "columnspan"로 읽는다.

참고
[MathML3] 및 그 이전 버전에서 열 병합 속성 이름은 columnspan이며, 하위 호환 목적으로 유지됨.

<mtd> 요소는 익명 <mrow> box를 생성한다.

3.6 수식에 동작 추가하기

과거에 maction 요소는 수식에 동작을 바인딩하는 메커니즘을 제공하였다.

<maction> 요소는 2.1.3 글로벌 속성에 더해 다음 속성도 허용한다:

본 명세는 actiontypeselection 속성에 대해 특별한 동작을 정의하지 않는다.

다음 예제는 [MathML3]의 "toggle" actiontype을 보여준다. 렌더러는 선택된 부분수식에서 시작해 클릭 시 순차적으로(“4분의1”, “2분의1”, “3분의1” 등) 바꿔 가며 표시한다. 이는 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>와 같다. user agent stylesheet 에는 레거시 actiontype의 기본 동작(첫 번째 자식만 보이도록) 구현을 위해 다음 규칙이 포함되어야 한다:

maction > :not(:first-child) {
  display: none;
}
참고
<maction>은 전체 MathML과의 호환을 위해 구현되어 있다. 오직 MathML Core만 대상으로 한다면, 커스텀 액션은 HTML, CSS, JavaScript 메커니즘을 사용할 것을 권장한다. 저자는 [MathML3]에서 정의한 maction 속성에 의존할 수도 있다.

3.7 의미와 프레젠테이션

semantics 요소는 MathML 식과 주석(annotation)을 연결하는 컨테이너 요소이다. 일반적으로 <semantics> 요소의 첫 번째 자식은 주석 대상으로 삼을 MathML 수식이고, 그 뒤의 자식들은 annotation 요소와 같은 텍스트 주석이나, annotation-xml 요소와 같은 더 복잡한 마크업 주석을 나타낸다.

아래 예제는 “2분의1”을 텍스트 주석(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 과 같다. user agent stylesheet 에는 오직 주석이 달린 수식만 렌더링하도록 아래 규칙을 포함해야 한다:

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

<annotation-xml><annotation> 요소는 2.1.3 글로벌 속성에 더해 다음 속성을 허용한다:

본 명세는 encoding 속성에 대해 특별한 동작을 정의하지 않는다.

<annotation-xml><annotation> 요소의 레이아웃 알고리즘은 mtext 와 같다.

참고
저자는 encoding 속성을 이용해 HTML 통합 포인트, 클립보드 복사, 대체 렌더링 등에서 주석을 구분할 수 있다. 특히 CSS로 대체 주석을 렌더링할 수 있다. 예:
/* Hide the annotated child. */
semantics > :first-child { display: none; }
 /* Show all text annotations. */
semantics > annotation { display: inline; }
/* Show all HTML annotations. */
semantics > annotation-xml[encoding="text/html" i],
semantics > annotation-xml[encoding="application/xhtml+xml" i] {
  display: inline-block;
}

4. 수학 레이아웃을 위한 CSS 확장

4.1 display: block mathdisplay: inline math

display 속성은 CSS Display Module Level 3에서 확장되어 새로운 inner display 타입을 제공한다:

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

MathML 요소가 아닌 요소에 대해 display의 지정값이 block math 또는 inline math일 경우 계산값은 각각 block flow, inline flow가 된다. mtable 요소는 계산값이 block tableinline table이 된다. mtr 요소는 계산값이 table-row가 된다. mtd 요소는 계산값이 table-cell이 된다.

MathML 요소가 계산된 display 값이 block math 또는 inline math와 같을 경우, 관련 절에 명시된 대로 태그 이름에 따라 box 생성 및 레이아웃을 제어한다. 알 수 없는 MathML 요소mrow 요소와 동일하게 동작한다.

참고
display: block mathdisplay: inline math 값은 MathML 요소에 디폴트 레이아웃을 제공하면서도 본래 display 값이나 커스텀 값으로 오버라이드가 가능하다. 이는 저자나 polyfill이 MathML Core을 세밀하게 확장/조정할 수 있음을 의미한다.

아래 예제에서는 MathML mrow 요소의 디폴트 레이아웃이 그리드 렌더링으로 오버라이드 되었다.

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

4.2 math-auto 변환

text-transform 속성은 CSS Text Module Level 4에 새 값 math-auto가 추가되었다. 한글자로 이루어진 텍스트 노드에서 계산값이 math-auto이고 그 글자가 C.1 italic 매핑의 "Original" 열에 있으면 해당하는 "italic" 열의 글자로 변환된다.

관습적으로 함수 이름 등 여러 글자로 된 식별자(예: "exp")는 일반 스타일로, 한 글자로 된 변수(예: "n")는 이탤릭 스타일로 나타낸다. math-auto 속성은 이러한 기본 동작을 구현하며 필요시 저자가 오버라이드 할 수 있다. 수학용 서체에는 유니코드 C.1 italic 매핑 영역에 별도의 수학용 이탤릭 글리프가 있으므로 일반 이탤릭 스타일과는 다르다. 아래 수식은 Latin Modern Math 폰트로 font-style: italic(왼쪽)과 text-transform: math-auto(오른쪽)으로 렌더된 예시다:

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

4.3 math-style 속성

Name: math-style
Value: normal | compact
Initial: normal
Applies to: 모든 요소
Inherited: yes
Percentages: n/a
Computed value: 지정 keyword
Canonical order: n/a
Animation type: 애니메이션 불가
Media: visual

math-stylecompact일 때, 하위 요소의 수식 레이아웃은 논리 높이를 최소화하도록 아래 규칙을 적용한다:

다음 예제는 수학 공식이 math-style: compact(왼쪽), math-style: normal(오른쪽) 상태로 각각 렌더된 모습을 보여준다. compact는 분수 내 글꼴 크기가 줄어들고, ∑ 기호는 아래/위첨자로 한정되고, normal에서는 ∑가 더욱 커지고 분수 안의 세로 간격이 넓어짐을 알 수 있다.

math-style example

이 두 math-style 값은 보통 respectively 인라인 및 디스플레이 수식 모드에 대응한다(TeXBook). 디스플레이 모드 수식도 일부 하위 수식(첨자, 행렬 요소, 분수 분자/분모 등)은 인라인 모드로 자동 전환되기에, 기본 동작의 오버라이드가 필요할 수 있다. math-style 속성은 user agent stylesheet에서의 구현 및 displaystyle 어트리뷰트에 적용할 수 있으며, polyfill 구현에도 제공된다.

4.4 math-shift 속성

Name: math-shift
Value: normal | compact
Initial: normal
Applies to: 모든 요소
Inherited: yes
Percentages: n/a
Computed value: 지정 keyword
Canonical order: n/a
Animation type: 애니메이션 불가
Media: visual

math-shiftcompact일 때 하위 수식의 layout은 superscriptShiftUpCramped 값을 사용해 위첨자를 배치한다. normal이면 대신 superscriptShiftUp를 사용한다.

이 속성은 MathML 스크립트 요소의 위첨자 위치에 사용된다. 자세한 내용은 § 3.4.1 아래/위첨자 <msub>, <msup>, <msubsup>, 3.4.3 프리/포스트스크립트 <mmultiscripts>3.4.2 아래/위스크립트 <munder>, <mover>, <munderover> 참고.

아래 예제에서 두 "x 제곱"은 둘 다 math-style이 compact이고 font-size는 같다. 하지만 하나는 제곱근 안에 들어가 compact math-shift로 렌더링되고, 다른 하나는 normal math-shift로 렌더링되어, 위첨자 "2"의 미세한 차이를 보인다.

math-shift example

[TeXBook]에 따라 수식의 기본은 normal 스타일이지만, 일부 하위 수식(근, 분모 등)에선 compact("cramped"라고도 부름)로 변한다. math-shift 속성은 user agent stylesheet에서 이러한 규칙을 쉽게 구현할 수 있다. 페이지 저자나 polyfill 개발자도 기본 구현을 조절하는 데 사용할 수 있다.

4.5 math-depth 속성

math-depth라는 새로운 속성이 도입되어 수식의 각 요소가 수식 상위 컨테이너 대비 어느 "깊이"에 있는지를 표시한다. 이는 font-size의 지정값이 math일 때, 계산값 산출에 사용된다.

Name: math-depth
Value: auto-add | add(<integer>) | <integer>
Initial: 0
Applies to: 모든 요소
Inherited: yes
Percentages: n/a
Computed value: 아래 설명된 정수
Canonical order: n/a
Animation type: 애니메이션 불가
Media: visual

math-depth 계산값 산정 알고리즘:

font-size 지정값이 math인 경우, font-size 계산값은, 상속된 font-size에 다음 공식으로 산출한 nonzero scale factor를 곱해 얻는다:

  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. 상속된 first available font가 OpenType MATH 테이블을 갖는 경우:
  4. S × CE를 곱한다.
  5. InvertScaleFactor가 false면 S, 아니면 1/S를 반환.

아래 예제는 math-style normal 상태로 Latin Modern Math 폰트에서 렌더된 예를 보여준다. 서브 수식(첨자, 분수 진입 등)에 들어가면 해당 폰트의 MATH 테이블 기준 글꼴 크기가 자동 축소된다. 슈퍼스크립트 진입 시 글꼴이 축소되고 뿌리의 프리스크립트 진입 때는 더 두드러진 축소, 내부 분수 진입 시엔 축소가 되고 바깥쪽 분수 진입 땐 그렇지 않다(분수 내부에서 math-style이 바뀜).

font-size-scriptlevel example

[TeXBook]에 정의된 이 규칙들은 미묘하기 때문에 별도의 math-depth 메커니즘으로 표현·처리한다. MathML의 경우 user agent stylesheet로 구현 가능하다. 저자나 polyfill 개발자는 이 속성을 직접 사용해 구현을 미세조정할 수 있다. 특히 MathML의 scriptlevel 속성으로도 math-depth 변경이 가능하다.

5. OpenType MATH 테이블

본 장에서는 OpenType 폰트의 MATH 테이블에 포함된 기능을 설명한다 [OPEN-FONT-FORMAT]. 본 장 전체에서 C 스타일 표기인 Table.Subtable1[index].Subtable2.Parameter를 사용해 OpenType 파라미터를 표기한다. 이런 파라미터가 없는 경우(예: 폰트에 해당 서브테이블이 없거나, 오프셋이 무효인 경우 등)에는 대체(fallback) 옵션이 제공된다.

참고
MathML은 적절한 OpenType 기능이 있는 수학용 폰트로 렌더링할 것이 강력히 권장된다. 여기서 제공하는 대체값만으로는 충분한 품질의 렌더링을 보장하지 않는다.

디자인 단위로 표현된 OpenType 값(혹은 MathValueRecord 엔트리를 통한 간접값)은 레이아웃 목적에 맞게 적절히 스케일된다. 이때 head.unitsPerEm, CSS font-size 또는 확대/축소(zoom) 레벨을 고려한다.

5.1 레이아웃 상수 (MathConstants)

다음은 first available font의 전역 레이아웃 상수이다:

기본 fallback 상수
0
기본 rule 두께
post.underlineThickness 또는 상수가 없는 경우 기본 fallback 상수.
scriptPercentScaleDown
MATH.MathConstants.scriptPercentScaleDown / 100 또는 MATH.MathConstants.scriptPercentScaleDown이 없거나 null이면 0.71.
scriptScriptPercentScaleDown
MATH.MathConstants.scriptScriptPercentScaleDown / 100 또는 MATH.MathConstants.scriptScriptPercentScaleDown이 없거나 null이면 0.5041.
displayOperatorMinHeight
MATH.MathConstants.displayOperatorMinHeight 또는 상수가 없으면 기본 fallback 상수.
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 또는 없으면 기본 fallback 상수.
superscriptShiftUp
MATH.MathConstants.superscriptShiftUp 또는 값이 없으면 OS/2.ySuperscriptYOffset
superscriptShiftUpCramped
MATH.MathConstants.superscriptShiftUpCramped 또는 없으면 기본 fallback 상수.
superscriptBottomMin
MATH.MathConstants.superscriptBottomMin 또는 없으면 ¼ × OS/2.sxHeight
superscriptBaselineDropMax
MATH.MathConstants.superscriptBaselineDropMax 또는 없으면 기본 fallback 상수.
subSuperscriptGapMin
MATH.MathConstants.subSuperscriptGapMin 또는 없으면 4 × 기본 rule 두께
superscriptBottomMaxWithSubscript
MATH.MathConstants.superscriptBottomMaxWithSubscript 또는 없으면 ⅘ × OS/2.sxHeight
spaceAfterScript
MATH.MathConstants.spaceAfterScript 또는 없으면 1/24em
upperLimitGapMin
MATH.MathConstants.upperLimitGapMin 또는 없으면 기본 fallback 상수.
upperLimitBaselineRiseMin
MATH.MathConstants.upperLimitBaselineRiseMin 또는 없으면 기본 fallback 상수
lowerLimitGapMin
MATH.MathConstants.lowerLimitGapMin 또는 없으면 기본 fallback 상수
lowerLimitBaselineDropMin
MATH.MathConstants.lowerLimitBaselineDropMin 또는 없으면 기본 fallback 상수
stackTopShiftUp
MATH.MathConstants.stackTopShiftUp 또는 없으면 기본 fallback 상수
stackTopDisplayStyleShiftUp
MATH.MathConstants.stackTopDisplayStyleShiftUp 또는 없으면 기본 fallback 상수
stackBottomShiftDown
MATH.MathConstants.stackBottomShiftDown 또는 없으면 기본 fallback 상수
stackBottomDisplayStyleShiftDown
MATH.MathConstants.stackBottomDisplayStyleShiftDown 또는 없으면 기본 fallback 상수
stackGapMin
MATH.MathConstants.stackGapMin 또는 없으면 3 × 기본 rule 두께
stackDisplayStyleGapMin
MATH.MathConstants.stackDisplayStyleGapMin 또는 없으면 7 × 기본 rule 두께
stretchStackTopShiftUp
MATH.MathConstants.stretchStackTopShiftUp 또는 없으면 기본 fallback 상수
stretchStackBottomShiftDown
MATH.MathConstants.stretchStackBottomShiftDown 또는 없으면 기본 fallback 상수
stretchStackGapAboveMin
MATH.MathConstants.stretchStackGapAboveMin 또는 없으면 기본 fallback 상수
stretchStackGapBelowMin
MATH.MathConstants.stretchStackGapBelowMin 또는 없으면 기본 fallback 상수
fractionNumeratorShiftUp
MATH.MathConstants.fractionNumeratorShiftUp 또는 없으면 기본 fallback 상수
fractionNumeratorDisplayStyleShiftUp
MATH.MathConstants.fractionNumeratorDisplayStyleShiftUp 또는 없으면 기본 fallback 상수
fractionDenominatorShiftDown
MATH.MathConstants.fractionDenominatorShiftDown 또는 없으면 기본 fallback 상수
fractionDenominatorDisplayStyleShiftDown
MATH.MathConstants.fractionDenominatorDisplayStyleShiftDown 또는 없으면 기본 fallback 상수
fractionNumeratorGapMin
MATH.MathConstants.fractionNumeratorGapMin 또는 없으면 기본 rule 두께
fractionNumDisplayStyleGapMin
MATH.MathConstants.fractionNumDisplayStyleGapMin 또는 없으면 3 × 기본 rule 두께
fractionRuleThickness
MATH.MathConstants.fractionRuleThickness 또는 없으면 기본 rule 두께
fractionDenominatorGapMin
MATH.MathConstants.fractionDenominatorGapMin 또는 없으면 기본 rule 두께
fractionDenomDisplayStyleGapMin
MATH.MathConstants.fractionDenomDisplayStyleGapMin 또는 없으면 3 × 기본 rule 두께
overbarVerticalGap
MATH.MathConstants.overbarVerticalGap 또는 없으면 3 × 기본 rule 두께
overbarExtraAscender
MATH.MathConstants.overbarExtraAscender 또는 없으면 기본 rule 두께
underbarVerticalGap
MATH.MathConstants.underbarVerticalGap 또는 없으면 3 × 기본 rule 두께
underbarExtraDescender
MATH.MathConstants.underbarExtraDescender 또는 없으면 기본 rule 두께
radicalVerticalGap
MATH.MathConstants.radicalVerticalGap 또는 없으면 1¼ × 기본 rule 두께
radicalDisplayStyleVerticalGap
MATH.MathConstants.radicalDisplayStyleVerticalGap 또는 없으면 기본 rule 두께 + ¼ OS/2.sxHeight
radicalRuleThickness
MATH.MathConstants.radicalRuleThickness 또는 없으면 기본 rule 두께
radicalExtraAscender
MATH.MathConstants.radicalExtraAscender 또는 없으면 기본 rule 두께
radicalKernBeforeDegree
MATH.MathConstants.radicalKernBeforeDegree 또는 없으면 5/18em
radicalKernAfterDegree
MATH.MathConstants.radicalKernAfterDegree 또는 없으면 −10/18em
radicalDegreeBottomRaisePercent
MATH.MathConstants.radicalDegreeBottomRaisePercent / 100.0 또는 값이 없으면 0.6

5.2 글리프 정보 (MathGlyphInfo)

참고
MathTopAccentAttachment는 변경(제거)될 수 있음.

다음은 first available font의 개별 글리프별 테이블이다:

MathItalicsCorrectionInfo
MATH.MathGlyphInfo.MathItalicsCorrectionInfo 서브테이블. 요청된 글리프에 값이 있으면 MATH.MathGlyphInfo.MathItalicsCorrectionInfo.italicsCorrection를 사용, 없으면 0을 사용.
MathTopAccentAttachment
MATH.MathGlyphInfo.MathTopAccentAttachment 서브테이블. inline axis를 따라 math accent의 위치 지정에 사용. 요청된 글리프에 값이 있으면 MATH.MathGlyphInfo.MathTopAccentAttachment.topAccentAttachment를 사용, 없으면 해당 글리프의 advance width의 절반을 사용.

5.3 연산자의 사이즈 변형(MathVariants)

이 절은 MATH.MathVariants 테이블을 이용해 임의 크기로 늘어나는(stretchy) 글리프 처리 방법을 다룬다.

5.3.1 GlyphAssembly 테이블

본 절은 [OPEN-TYPE-MATH-IN-HARFBUZZ]를 참고했다. 편의를 위해 아래 용어를 사용한다:

  • omin : MATH.MathVariant.minConnectorOverlap
  • GlyphPartRecordGlyphPartRecord.partFlagsfExtender 플래그가 있으면 extender다.
  • MathVariant.horizGlyphConstructionOffsets에서 생성된 경우 horizontal, 아니면 vertical (MathVariant.vertGlyphConstructionOffsets).
  • GlyphAssembly 테이블에 대해 NExt (extender 개수), NNonExt (non-extender 개수): GlyphAssembly.partRecords 내부 각각 extender/non-extender의 개수.
  • GlyphAssembly 테이블에 대해 SExt (extender의 fullAdvance 합), SNonExt (non-extender의 fullAdvance 합).
  • SExt,NonOverlapping = SExtomin NExt : extender의 최대 non-overlapping 부분 합.

User agent는 GlyphAssembly가 아래 조건을 모두 만족하지 않으면 이를 무효로 취급해야 한다:

  • NExt > 0: extender 반복이 없으면 assembly는 커질 수 없다.
  • SExt,NonOverlapping > 0: extender 결합시 크기가 증가하지 않는 경우.
  • GlyphAssembly.partRecords의 각 GlyphPartRecord에서 startConnectorLengthendConnectorLength 값은 반드시 omin 이상이어야 한다.

본 명세에서 글리프 assembly의 extender는 r번 반복되고 overlap o를 사용한다. 이때 글리프 수는 AssemblyGlyphCount(r) = NNonExt + r NExt, stretch size는 AssembySize(o, r) = SNonExt + r SExt − o (AssemblyGlyphCount(r) − 1).

rmin은 size가 최소 T 이상이 되기 위한 최소 반복 횟수. 즉 가장 작은 r로 AssembySize(omin, r) ≥ T. 구체적으로는 max(0, ceil((T − SNonExt + omin(NNonExt-1)) / SExt,NonOverlapping)).

omax,theorical = (AssembySize(0, rmin) − T) / (AssemblyGlyphCount(rmin) − 1) : overlap 없는 상태에서 추가 크기를 균등 분할할 경우의 이론상 최대 overlap.

omax은 각 extender를 rmin씩 반복하며 최소 T 크기 assembly를 만들 수 있는 최대 overlap. AssemblyGlyphCount(rmin) ≤ 1이면 overlap 값은 중요치 않다. 그 외에는 omax := 아래 중 최소값:

  • omax,theorical
  • GlyphAssembly.partRecords 내부 각 엔트리의 startConnectorLength (단, non-extender가 맨 끝이면 그 항목은 제외)
  • GlyphAssembly.partRecords 내부 각 엔트리의 endConnectorLength (단, non-extender가 맨 앞이면 그 항목은 제외)

target size T에서의 glyph assembly stretch sizeAssembySize(omax, rmin)이다.

glyph assembly width, glyph assembly ascent, glyph assembly descent을 아래와 같이 정의한다:

  • vertical인 경우, width는 GlyphAssembly.partRecords 각 엔트리의 glyphID에 해당하는 advance width 의 최대값. ascent는 주어진 target size T에서의 glyph assembly stretch size, descent는 0.
  • horizontal인 경우, width는 T에서의 glyph assembly stretch size, ascent/descent는 GlyphAssembly.partRecords 각 엔트리 glyphID에 해당하는 ascent/descent 중 최대값.

glyph assembly heightglyph assembly ascentglyph assembly descent의 합이다.

참고
vertical(세로) glyph assembly의 horizontal(가로) 메트릭(및 그 반대)은 target size T와 관계 없다.

The 글리프 assembly shaping 은 다음 알고리즘으로 수행됨:

  1. rminomax를 계산.
  2. (x, y)(0, 0)으로, RepetitionCounter를 0, PartIndex를 -1로 설정.
  3. 다음 단계를 반복:
    1. RepetitionCounter가 0이면:
      1. PartIndex 증가
      2. PartIndexGlyphAssembly.partCount라면 종료
      3. 그 외엔 Part := GlyphAssembly.partRecords[PartIndex], RepetitionCounter := 해당 파트가 extender면 rmin, 아니면 1.
      • horizontal assembly면 Part.glyphID 해당 글리프를 (x, y)에 그린다. x := x + Part.fullAdvance − omax
      • vertical assembly면 Part.glyphID를 (x, y)에 그린다. y := y − Part.fullAdvance + omax
    2. RepetitionCounter 감소

5.3.2 글리프 늘이기 알고리즘

글리프를 block 축으로 늘렸을 때의 선호 인라인 크기 는 아래 알고리즘을 통해 계산한다:

  1. S를 해당 글리프의 advance width로 설정
  2. MathGlyphConstruction 테이블이 MathVariants.vertGlyphConstructionOffsets에 있다면:
    1. MathGlyphVariantRecord들에 대해 S가 해당 variantGlyph의 advance width 이상이 되게 한다.
    2. 유효한 GlyphAssembly가 있으면, glyph assembly width만큼 S가 충분한지 보장.
  3. S를 반환
참고
block 축으로 늘린 글리프의 선호 인라인 크기 는 해당 글리프의 모든 vertical 구성의 width 최대값이다. 실제로 수학용 폰트의 vertical construction은 거의 일정 너비여서 width 과추정의 영향은 미미함.

Stretchy 글리프 shaping 알고리즘(목표 인라인/블록 치수 T로):

  1. MathGlyphConstruction 테이블이 MathVariants.horizGlyphConstructionOffsets (또는 MathVariants.vertGlyphConstructionOffsets)에 없으면 실패 반환.
  2. 해당 글리프의 advance width(또는 height)가 이미 T 이상이면 normal shaping/bounding box(italic 보정 포함)로 사용, 성공 반환.
  3. MathGlyphConstruction.mathGlyphVariantRecord 리스트에서 advanceMeasurement가 T 이상인 variantGlyph가 있으면, 이 glyph에 대해 normal shaping/bounding box(italic 보정 포함)로 사용, 성공 반환.
  4. 유효한 GlyphAssembly가 있으면, glyph assembly width, glyph assembly height, glyph assembly ascent, glyph assembly descent와, GlyphAssembly.italicsCorrection를 italic 보정으로 사용, 글리프 assembly shaping을 수행, 성공 반환.
  5. 상기 stretch 옵션으로도 목표 T를 못 채웠으면, 마지막 시도 키를 그대로 사용하며 성공 반환.
참고
폰트가 stretch 테이블을 제공하지 않을 때 User Agent는 B.4 Unicode 기반 Glyph Assembly 등 내부 알고리즘으로 대체 구현할 수 있다.

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가 surrogate pair로서 U+1EEF0(ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL) 또는 U+1EEF1(ARABIC MATHEMATICAL OPERATOR HAH WITH DAL)이고 FormpostfixI 카테고리로 종료.
    • 두 번째 글자가 U+0338 COMBINING LONG SOLIDUS OVERLAY 또는 U+20D2 COMBINING LONG VERTICAL LINE OVERLAY이면, Content를 첫 글자로 변경 후 3단계로 이동.
    • 그 외 ContentOperators_2_ascii_chars 에 있으면, Content를 "U+0320 + 인덱스"로 대체 후 3단계로 이동.
    • 그 외엔 Default 카테고리로 종료.
  3. Form이 infix이고 Content가 U+007C 또는 U+223C이면 ForceDefault로 종료. (Content, Form)의 카테고리 값이 그림 25에서 그림 26 기준 N/A면(카테고리 L 또는 M), 해당 카테고리로 종료. 그 외는:
    • Content가 U+0000–U+03FF면 그대로 Key로, U+2000–U+2BFF면 Key = Content − 0x1C00으로, 그 외 Default 카테고리로 종료.
    • Form이 infix/prefix/postfix면 각각 Key에 0x0000, 0x1000, 0x2000 더함.
    • Assert: Key ≤ 0x2FFF.
    • 그림 27에서 Entry % 0x4000 = KeyEntry를 찾으면, 그림 26의 인코딩으로 카테고리 반환, 아니면 Default 반환.
특수 테이블 엔트리
Operators_2_ascii_chars 18개 엔트리(2자 ASCII 문자열): '!!', '!=', '&&', '**', '*=', '++', '+=', '--', '-=', '->', '//', '/=', ':=', '<=', '<>', '==', '>=', '||',
Operators_fence 61개 엔트리(16개 유니코드 범위): [U+0028–U+0029], {U+005B}, {U+005D}, [U+007B–U+007D], {U+0331}, {U+2016}, [U+2018–U+2019], [U+201C–U+201D], [U+2308–U+230B], [U+2329–U+232A], [U+2772–U+2773], [U+27E6–U+27EF], {U+2980}, [U+2983–U+2999], [U+29D8–U+29DB], [U+29FC–U+29FD],
Operators_separator 3개 엔트리: U+002C, U+003B, U+2063,
그림 24 연산자 사전용 특수 테이블.
총 82개 엔트리, 90바이트
(UTF-16 및 1바이트 범위 길이 가정).
(Content, Form) 키 카테고리
313개 엔트리(35개 유니코드 범위) 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개 범위) 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개 범위) 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개 범위) 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개 범위) 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개 범위) prefix: [U+222B–U+2233], [U+2A0B–U+2A1C], H
22개 엔트리(13개 범위) 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개 범위) prefix: [U+220F–U+2211], [U+22C0–U+22C3], [U+2A00–U+2A0A], [U+2A1D–U+2A1E], {U+2AFC}, {U+2AFF}, J
8개 엔트리(5개 범위) infix: {U+002F}, {U+005C}, {U+005F}, [U+2061–U+2064], {U+2206}, K
6개 엔트리(3개 범위) 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 Encoding 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 카테고리별 연산자 값.
3번째 열은 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 = Entry % 0x4000, 카테고리 인코딩 = Entry / 0x1000.
총 716개 엔트리, 590바이트
(4비트 범위길이 가정).
참고
  • 그림 25그림 27의 테이블은 유니코드 연속 코드블록 활용을 위해 범위로 인코딩됨.
  • 이 테이블에서 엔트리를 빠르게 찾으려면 범위 시작점 이진탐색 후 범위 길이 체크를 추가로 한다.
  • log가 볼록 함수이므로, 그림 27 전체에서 단일 이진탐색이 그림 25 서브테이블별 이진탐색보다 효율적이다.

유니코드 문자 c고유 stretch axis는 아래 목록에 있으면 inline이다. 없으면 고유 stretch axis는 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 inline stretch axis를 가지는 연산자에 대응하는 유니코드 코드 포인트 정렬 목록.
총 246개 엔트리, 492바이트(비-BMP 제외 16비트 가정).
참고
고유 stretch axis는 연산자 사전의 불린 속성으로 포함할 수도 있으나, 폼(form)에 따라 바뀌지 않고 inline 축으로 확장(stretch) 가능한 연산자가 극히 적으므로 별도 정렬 배열로 관리하는 것이 효율적이다. 각 엔트리는 U+1EEF0, U+1EEF1만 별도 처리하면 16바이트로 인코딩 가능하다.

B.2 연산자 사전 (사람이 읽기 쉬운 형식)

이 절은 비규범적입니다.

다음 사전은 B.1 연산자 사전의 사람이 읽기 쉬운 버전을 제공합니다. 사전 사용법과 ContentForm 값을 어떻게 사전의 인덱스로 사용하는지에 대한 설명은 3.2.4.2 사전 기반 속성을 참조하세요.

rspacelspace의 값은 각 열에 표시되어 있습니다. stretchy, symmetric, largeop, movablelimits 값은 "properties" 열에 목록이 있다면 true입니다.

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

B.3 결합 문자 등가

이 절은 비규범적입니다.

다음 표는 MathML 악센트 구성에서 사용될 때 간격(비결합) 문자와 결합 문자 간의 매핑을 제공합니다.

결합 (Combining)

비결합 위치 결합
U+002B 더하기 기호 below U+031F 결합 더하기 기호 아래
U+002D 하이픈-마이너스 above U+0305 결합 오버라인
U+002D 하이픈-마이너스 below U+0320 결합 마이너스 기호 아래
U+002D 하이픈-마이너스 below U+0332 결합 밑줄
U+002E 마침표 above U+0307 결합 위 점
U+002E 마침표 below U+0323 결합 아래 점
U+005E 서컴플렉스 악센트 above U+0302 결합 서컴플렉스 악센트
U+005E 서컴플렉스 악센트 below U+032D 결합 서컴플렉스 악센트 아래
U+005F 밑줄 below U+0332 결합 밑줄
U+0060 그래이브 악센트 above U+0300 결합 그래이브 악센트
U+0060 그래이브 악센트 below U+0316 결합 그래이브 악센트 아래
U+007E 틸드 above U+0303 결합 틸드
U+007E 틸드 below U+0330 결합 틸드 아래
U+00A8 분음 부호 above U+0308 결합 분음 부호
U+00A8 분음 부호 below U+0324 결합 분음 부호 아래
U+00AF 마크론 above U+0304 결합 마크론
U+00AF 마크론 above U+0305 결합 오버라인
U+00B4 아큐트 악센트 above U+0301 결합 아큐트 악센트
U+00B4 아큐트 악센트 below U+0317 결합 아큐트 악센트 아래
U+00B8 세디야 below U+0327 결합 세디야
U+02C6 수정자 문자 서컴플렉스 악센트 above U+0302 결합 서컴플렉스 악센트
U+02C7 카론 above U+030C 결합 카론
U+02C7 카론 below U+032C 결합 카론 아래
U+02D8 브레브 above U+0306 결합 브레브
U+02D8 브레브 below U+032E 결합 브레브 아래
U+02D9 위 점 above U+0307 결합 위 점
U+02D9 위 점 below U+0323 결합 아래 점
U+02DB 오고넥 below U+0328 결합 오고넥
U+02DC 스몰 틸드 above U+0303 결합 틸드
U+02DC 스몰 틸드 below U+0330 결합 틸드 아래
U+02DD 겹 아큐트 악센트 above U+030B 결합 겹 아큐트 악센트
U+203E 오버라인 above U+0305 결합 오버라인
U+2190 왼쪽 화살표 above U+20D6
U+2192 오른쪽 화살표 above U+20D7 결합 오른쪽 화살표 위
U+2192 오른쪽 화살표 above U+20EF 결합 오른쪽 화살표 아래
U+2212 마이너스 기호 above U+0305 결합 오버라인
U+2212 마이너스 기호 below U+0332 결합 밑줄
U+27F6 긴 오른쪽 화살표 above U+20D7 결합 오른쪽 화살표 위
U+27F6 긴 오른쪽 화살표 above U+20EF 결합 오른쪽 화살표 아래

비결합 (Non Combining)

결합 위치 비결합
U+0300 결합 그래이브 악센트 above U+0060 그래이브 악센트
U+0301 결합 아큐트 악센트 above U+00B4 아큐트 악센트
U+0302 결합 서컴플렉스 악센트 above U+005E 서컴플렉스 악센트
U+0302 결합 서컴플렉스 악센트 above U+02C6 수정자 서컴플렉스 악센트
U+0303 결합 틸드 above U+007E 틸드
U+0303 결합 틸드 above U+02DC 스몰 틸드
U+0304 결합 마크론 above U+00AF 마크론
U+0305 결합 오버라인 above U+002D 하이픈-마이너스
U+0305 결합 오버라인 above U+00AF 마크론
U+0305 결합 오버라인 above U+203E 오버라인
U+0305 결합 오버라인 above U+2212 마이너스 기호
U+0306 결합 브레브 above U+02D8 브레브
U+0307 결합 위 점 above U+02E
U+0307 결합 위 점 above U+002E 마침표
U+0307 결합 위 점 above U+02D9 위 점
U+0308 결합 분음 부호 above U+00A8 분음 부호
U+030B 결합 겹 아큐트 악센트 above U+02DD 겹 아큐트 악센트
U+030C 결합 카론 above U+02C7 카론
U+0312 결합 뒤집힌 쉼표 위 above U+0B8
U+0316 결합 그래이브 악센트 아래 below U+0060 그래이브 악센트
U+0317 결합 아큐트 악센트 아래 below U+00B4 아큐트 악센트
U+031F 결합 더하기 기호 아래 below U+002B 더하기 기호
U+0320 결합 마이너스 기호 아래 below U+002D 하이픈-마이너스
U+0323 결합 아래 점 below U+002E 마침표
U+0323 결합 아래 점 below U+02D9 위 점
U+0324 결합 분음 부호 아래 below U+00A8 분음 부호
U+0327 결합 세디야 below U+00B8 세디야
U+0328 결합 오고넥 below U+02DB 오고넥
U+032C 결합 카론 아래 below U+02C7 카론
U+032D 결합 서컴플렉스 악센트 아래 below U+005E 서컴플렉스 악센트
U+032E 결합 브레브 아래 below U+02D8 브레브
U+0330 결합 틸드 아래 below U+007E 틸드
U+0330 결합 틸드 아래 below U+02DC 스몰 틸드
U+0332 결합 밑줄 below U+002D 하이픈-마이너스
U+0332 결합 밑줄 below U+005F 밑줄
U+0332 결합 밑줄 below U+2212 마이너스 기호
U+0338 결합 긴 솔리더스 오버레이 over U+02F
U+20D7 결합 오른쪽 화살표 위 above U+2192 오른쪽 화살표
U+20D7 결합 오른쪽 화살표 위 above U+27F6 긴 오른쪽 화살표
U+20EF 결합 오른쪽 화살표 아래 above U+2192 오른쪽 화살표
U+20EF 결합 오른쪽 화살표 아래 above U+27F6 긴 오른쪽 화살표

B.4 유니코드 기반 글리프 어셈블리

이 절은 비규범적입니다.

다음 표는 폰트가 MATH.MathVariants 테이블을 제공하지 않을 때, 주어진 기본 문자(base character)를 늘리기 위해 사용자 에이전트가 사용할 수 있는 폴백을 제공합니다. 5.3 연산자에 대한 사이즈 변형(MathVariants) 의 알고리즘은 몇 가지 조정만 제외하고 동일하게 동작합니다:

기본 문자 (Base Character) 글리프 구성 (Glyph Construction) 익스텐더 문자 (Extender Character) 아래/왼쪽 문자 (Bottom/Left Character) 중간 문자 (Middle Character) 위/오른쪽 문자 (Top/Right Character)
U+0028 ( Vertical U+239C ⎜ U+239D ⎝ N/A U+239B ⎛
U+0029 ) Vertical U+239F ⎟ U+23A0 ⎠ N/A U+239E ⎞
U+003D = Horizontal U+003D = U+003D = N/A N/A
U+005B [ Vertical U+23A2 ⎢ U+23A3 ⎣ N/A U+23A1 ⎡
U+005D ] Vertical U+23A5 ⎥ U+23A6 ⎦ N/A U+23A4 ⎤
U+005F _ Horizontal U+005F _ U+005F _ N/A N/A
U+007B { Vertical U+23AA ⎪ U+23A9 ⎩ U+23A8 ⎨ U+23A7 ⎧
U+007C | Vertical U+007C | U+007C | N/A N/A
U+007D } Vertical U+23AA ⎪ U+23AD ⎭ U+23AC ⎬ U+23AB ⎫
U+00AF ¯ Horizontal U+00AF ¯ U+00AF ¯ N/A N/A
U+2016 ‖ Vertical U+2016 ‖ U+2016 ‖ N/A N/A
U+203E ‾ Horizontal U+203E ‾ U+203E ‾ N/A N/A
U+2190 ← Horizontal U+23AF ⎯ U+2190 ← N/A U+23AF ⎯
U+2191 ↑ Vertical U+23D0 ⏐ U+23D0 ⏐ N/A U+2191 ↑
U+2192 → Horizontal U+23AF ⎯ U+23AF ⎯ N/A U+2192 →
U+2193 ↓ Vertical U+23D0 ⏐ U+2193 ↓ N/A U+23D0 ⏐
U+2194 ↔ Horizontal U+23AF ⎯ U+2190 ← N/A U+2192 →
U+2195 ↕ Vertical U+23D0 ⏐ U+2193 ↓ N/A U+2191 ↑
U+21A4 ↤ Horizontal U+23AF ⎯ U+2190 ← N/A U+22A3 ⊣
U+21A6 ↦ Horizontal U+23AF ⎯ U+22A2 ⊢ N/A U+2192 →
U+21BC ↼ Horizontal U+23AF ⎯ U+21BC ↼ N/A U+23AF ⎯
U+21BD ↽ Horizontal U+23AF ⎯ U+21BD ↽ N/A U+23AF ⎯
U+21C0 ⇀ Horizontal U+23AF ⎯ U+23AF ⎯ N/A U+21C0 ⇀
U+21C1 ⇁ Horizontal U+23AF ⎯ U+23AF ⎯ N/A U+21C1 ⇁
U+2223 ∣ Vertical U+2223 ∣ U+2223 ∣ N/A N/A
U+2225 ∥ Vertical U+2225 ∥ U+2225 ∥ N/A N/A
U+2308 ⌈ Vertical U+23A2 ⎢ U+23A2 ⎢ N/A U+23A1 ⎡
U+2309 ⌉ Vertical U+23A5 ⎥ U+23A5 ⎥ N/A U+23A4 ⎤
U+230A ⌊ Vertical U+23A2 ⎢ U+23A3 ⎣ N/A N/A
U+230B ⌋ Vertical U+23A5 ⎥ U+23A6 ⎦ N/A N/A
U+23B0 ⎰ Vertical U+23AA ⎪ U+23AD ⎭ N/A U+23A7 ⎧
U+23B1 ⎱ Vertical U+23AA ⎪ U+23A9 ⎩ N/A U+23AB ⎫
U+27F5 ⟵ Horizontal U+23AF ⎯ U+2190 ← N/A U+23AF ⎯
U+27F6 ⟶ Horizontal U+23AF ⎯ U+23AF ⎯ N/A U+2192 →
U+27F7 ⟷ Horizontal U+23AF ⎯ U+2190 ← N/A U+2192 →
U+294E ⥎ Horizontal U+23AF ⎯ U+21BC ↼ N/A U+21C0 ⇀
U+2950 ⥐ Horizontal U+23AF ⎯ U+21BD ↽ N/A U+21C1 ⇁
U+295A ⥚ Horizontal U+23AF ⎯ U+21BC ↼ N/A U+22A3 ⊣
U+295B ⥛ Horizontal U+23AF ⎯ U+22A2 ⊢ N/A U+21C0 ⇀
U+295E ⥞ Horizontal U+23AF ⎯ U+21BD ↽ N/A U+22A3 ⊣
U+295F ⥟ Horizontal U+23AF ⎯ U+22A2 ⊢ N/A U+21C1 ⇁

C. 수학용 영숫자 기호

이 절은 비규범적입니다.

[xml-entity-names]에 자세히 설명된 바와 같이, 굵게(bold), 이탤릭(italic), 프락투어(fraktur), 모노스페이스(monospace), 더블스트럭(double-struck) 등 형태의 수학용 영숫자 기호는 유니코드에 수록되어 있습니다.

이러한 영숫자 기호들은 유니코드 코드 포인트로 접근해야 합니다. MATHEMATICAL SCRIPT 문자에 대해 Chancery 스타일과 Roundhand 스타일을 구분해야 할 때가 있습니다. 이는 LaTeX의 \mathcal\mathscr 명령에서 특히 사용됩니다. 이를 구현하는 한 방법은 특정 글리프 변형 선택을 지정하는 방법을 설명하는 유니코드의 23.4절 Variation Selectors를 활용하는 것입니다 [UNICODE]. 실제로 Unicode Character Database의 StandardizedVariants.txt 파일은 대문자 스크립트에 대해 변형 선택자 U+FE00 및 U+FE01을 각각 Chancery와 Roundhand 지정에 사용할 수 있음을 나타냅니다.

대안으로, 일부 수학용 폰트는 양쪽 스타일을 제공하기 위해 [OPEN-FONT-FORMAT]의 salt 또는 ssXY 속성에 의존합니다. 페이지 저자는 해당 OpenType 폰트 기능과 함께 font-variant-alternates 속성을 사용해 이러한 글리프에 접근할 수 있습니다.

또한, italic 수학 영숫자 문자는 위에서 설명한 방식으로 접근할 수 있으며, CSS의 text-transform: math-auto 변환은 기본적으로 단일 문자 <mi> 요소에 적용됩니다. 편의를 위해 수학 이탤릭으로의 매핑을 아래에 표시합니다.

C.1 italic 매핑

원본 italic Δcode point
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]의 appendix E를 참고하세요.

MathML Core는 처음에는 MathML Community Group에 의해 개발되었으며, 이후 Math Working Group에 의해 발전되었습니다. 이 명세를 개발하는 과정에서 MathML Core 회의에 정기적으로 참여한 Working Group 또는 Community Group 멤버들은 다음과 같습니다: Brian Kardell, Bruce Miller, Daniel Marques, David Carlisle, David Farmer, Deyan Ginev, Frédéric Wang, Louis Mahler, Moritz Schubotz, Murray Sargent, Neil Soiffer, Patrick Ion, Rob Buis, Steve Noble and 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: 실행으로 연결(link)할 수 있었습니다. 이러한 속성은 MathML Core에는 없습니다. 단, 2.2.1 HTML과 SVG에 설명된 대로, MathML 내에 HTML 또는 SVG 콘텐츠(링크 포함)를 삽입할 수 있습니다.

참고

[MathML3]에서는 maction 요소를 actiontype 값이 "statusline"일 때 브라우저 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 컨테이너에 스타일만 추가한 것과 같습니다.

공격자는 매우 큰 stretch 연산자를 삽입하여 UA를 마비시키려 할 수 있습니다. 이 경우 글리프 어셈블리 shaping 알고리즘이 초대량 글리프를 다루도록 만들 수 있습니다. UA는 rminGlyphAssembly.partCount에 최대값을 둘 수 있습니다.

CSS Fonts Module에 설명된 대로, 공격자는 결함이 있거나 악의적인 폰트를 통해 브라우저 보안 취약점을 노릴 수도 있습니다. 본 명세에서는 OpenType MATH 테이블을 광범위하게 사용하므로, UA는 폰트 sanitize가 반드시 이 테이블을 지원할 수 있도록 해야 합니다.

마지막으로, 공격 표면을 줄이기 위해 일부 UA는 웹 플랫폼의 일부 기능을 런타임 옵션으로 끌 수 있습니다. MathML 레이아웃을 비활성화하는 것은 DOM 트리 내 요소를 HTML 네임스페이스로 강제하고, 4. 수학 레이아웃을 위한 CSS 확장을 끄는 방식으로 달성할 수 있습니다.

F. 개인정보 보호 고려사항

이 절은 비규범적입니다.

2.2.1 HTML과 SVG에 설명된 대로, MathML은 <foreignObject> 요소를 통해 SVG 이미지에 임베드될 수 있으며, canvas 요소로도 사용할 수 있습니다. UA는 잠재적 정보 유출을 방지하기 위해 canvas를 오염시키거나 자바스크립트 API로 canvas 내용을 접근할 때 "SecurityError" 를 반환하는 등의 조치를 취할 수 있습니다.

아래 예는 canvas 이미지에 HTML 링크(https://example.org/)가 포함된 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 레이아웃과 마찬가지로, 자바스크립트 API(예: context.getImageData(), getBoundingClientRect() 등)로 박스 크기·위치를 측정하여 시스템 폰트로부터 정보를 유추할 수 있습니다. 이런 방식과 알려진 폰트와의 비교 측정을 조합함으로써 공격자가 사용자의 기본 폰트를 알아낼 수 있습니다.

아래 HTML+CSS+JavaScript 문서는 이례적으로 폭이 넓은 웹폰트(metrics)로 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-thicknessfrom-font1em(여기서는 100픽셀)로 렌더링합니다. 두 밑줄 높이를 비교하여, PostScript Table의 underlineThickness 값을 근사할 수 있습니다 [OPEN-FONT-FORMAT].

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

본 명세는 5. OpenType MATH 테이블 정보를 사용해 MathML 콘텐츠를 렌더링합니다. 대부분의 레이아웃 파라미터는, 위에서 보인 HTML+CSS+자바스크립트와 유사한 측정법을 이용해 MathConstantsMathGlyphInfo로부터 근사 가능합니다. MathML 렌더링 시 MathVariants 테이블 사용은 크기가 다른 stretch 연산자를 canvas로 배치해 관찰할 수 있습니다.

이러한 파라미터 각각은 개인정보와 직접 관련은 없으나, 본 명세의 구현은 폰트 정보 노출이 늘어나 공격자가 핑거프린팅(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"로 본문과 구분됩니다:

참고

참고, 이것은 비규범적 노트입니다.

권고(advisement)는 강조된 주의가 필요한 규범 부분으로, <strong class="advisement">처럼 본문과 구별됩니다: UA는 MUST 접근성 대안을 제공해야 한다.

H. 참고 문헌

H.1 규범 참고문헌

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

H.2 참고용 참고문헌

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