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 (풀 리퀘스트, 새 이슈, 열린 이슈)

초록

이 명세는 브라우저 구현에 적합한 Mathematical Markup Language, 즉 MathML의 핵심 하위 집합을 정의합니다. MathML은 수학 표기법을 설명하고 그 구조와 내용을 모두 포착하기 위한 마크업 언어입니다. MathML의 목표는 HTML이 텍스트에 대해 이러한 기능을 가능하게 한 것처럼 World Wide Web에서 수학을 제공하고, 수신하고, 처리할 수 있도록 하는 것입니다.

이 문서의 상태

이 절에서는 이 문서가 게시된 시점의 상태를 설명합니다. 현재 W3C 간행물 목록과 이 기술 보고서의 최신 개정판은 다음의 W3C 표준 및 초안 색인에서 확인할 수 있습니다: https://www.w3.org/TR/.

이 문서는 Math 작업 그룹에서 권고안 트랙을 사용하여 후보 권고안 스냅샷으로 게시했습니다.

후보 권고안으로 게시되었다고 해서 W3C와 그 회원이 이를 승인한다는 의미는 아닙니다. 후보 권고안 스냅샷은 광범위한 검토를 거쳤으며, 구현 경험을 수집하기 위한 것이며, 작업 그룹 회원으로부터 구현을 위한 로열티 없는 라이선스 제공 약속을 받았습니다.

이 후보 권고안은 2025년 9월 30일 이전에는 제안 권고안으로 진전되지 않을 것으로 예상됩니다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성했습니다. W3C는 해당 그룹의 결과물과 관련하여 이루어진 모든 특허 공개의 공개 목록을 유지 관리하며, 해당 페이지에는 특허를 공개하는 방법에 대한 지침도 포함되어 있습니다. 자신이 필수 청구항을 포함한다고 믿는 특허를 실제로 알고 있는 사람은 W3C 특허 정책의 제6절에 따라 해당 정보를 공개해야 합니다.

이 문서는 2023년 11월 3일 W3C 프로세스 문서의 적용을 받습니다.

1. 소개

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

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

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

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

구현 세부 사항의 수준을 높이고, 실제로 구현 가능한 하위 집합에 집중하며, 브라우저 중심 설계를 따르고 자동화된 웹 플랫폼 테스트를 활용함으로써 이 명세는 MathML 상호 운용성을 크게 개선할 것으로 기대됩니다. 또한 MathML 계층화 작업을 통해 사용자가 MathML 4 명세의 나머지 부분을 구현하거나, 더 일반적으로는 섀도 트리, 사용자 정의 요소 또는 [HOUDINI]의 API와 같은 최신 웹 기술을 사용하여 MathML Core를 확장할 수 있습니다.

2. MathML 기본 사항

2.1 요소와 속성

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

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

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

스크립트 요소는 mmultiscripts, mover, msub, msubsup, msup, munder 및 munderover입니다.

근호 요소는 mroot 및 msqrt입니다.

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

2.1.1 최상위 <math> 요소

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

<math> 요소는 2.1.3 전역 속성에 설명된 속성과 다음 속성을 허용합니다:

display 속성이 존재하는 경우 그 값은 block 또는 inline과 ASCII 대소문자를 구분하지 않고 일치해야 합니다. A. 사용자 에이전트 스타일시트에 설명된 사용자 에이전트 스타일시트에는 display (block math 또는 inline math) 및 math-style (normal 또는 compact) 속성의 기본값에 영향을 미치는 이 속성에 대한 규칙이 포함되어 있습니다. display 속성이 없거나 유효하지 않은 값을 가지면 사용자 에이전트 스타일시트는 이를 inline과 동일하게 처리합니다.

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

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

<math> 요소의 계산된 display 속성이 block math 또는 inline math와 같지 않으면 해당 값이 설명된 CSS 명세에 따라 레이아웃됩니다. 그렇지 않으면 mrow 요소의 레이아웃 알고리즘을 사용하여 수학 콘텐츠 박스를 생성합니다. 해당 수학 콘텐츠 박스는 CSS에서 display: block에 대해 설명한 요소 레이아웃의 콘텐츠로 사용됩니다 (계산된 값이 block math인 경우). 또는 display: inline에 대해 설명한 요소 레이아웃의 콘텐츠로 사용됩니다 (계산된 값이 inline math인 경우). 또한 계산된 display 속성이 block math와 같으면 해당 수학 콘텐츠 박스는 콘텐츠 박스 내에서 가로 방향으로 중앙 정렬되어 렌더링됩니다.

참고
TEX의 디스플레이 모드 $$...$$와 인라인 모드 $...$는 각각 display="block" 및 display="inline"에 대응합니다.

다음 예에서는 math 수식이 새 줄의 디스플레이 모드로 전체 너비를 차지하도록 렌더링되며, 수학 콘텐츠는 컨테이너 안에서 중앙 정렬됩니다:

<div style="width: 15em;">
  큰 합 기호와 원주율 숫자가 포함된 이 수학 수식은
  <math display="block" style="border: 1px dotted black;">
    <mrow>
      <munderover>
        <mo>∑</mo>
        <mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow>
        <mrow><mo>+</mo><mn>∞</mn></mrow>
      </munderover>
      <mfrac>
        <mn>1</mn>
        <msup><mi>n</mi><mn>2</mn></msup>
      </mfrac>
    </mrow>
    <mo>=</mo>
    <mfrac>
      <msup><mi>π</mi><mn>2</mn></msup>
      <mn>6</mn>
    </mfrac>
  </math>
  쉽게 증명할 수 있습니다.
</div>
수학 예제 (디스플레이)

비교를 위해 동일한 수식을 인라인 모드로 표시하면 다음과 같습니다. 수식은 강제 줄 바꿈 없이 텍스트 단락 안에 포함됩니다. mrow 레이아웃 알고리즘에서 지정하는 기준선이 세로 정렬에 사용됩니다. 합 기호와 등호 또는 분수의 가운데는 모두 정렬되지만, 주변 텍스트의 알파벳 기준선과는 정렬되지 않는다는 점에 유의하십시오.

수학 예제 (인라인)

수학을 올바르게 렌더링하려면 수학 글꼴을 사용해야 하므로 사용자 에이전트 스타일시트는 <math> 요소에서 font-family를 상속하는 대신 math 값으로 설정해야 합니다. 또한 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 고유 유형을 사용합니다:

부호 없는 정수
[CSS-VALUES-4]에 정의된 <integer> 값으로, 첫 번째 문자가 U+002D HYPHEN-MINUS 문자 (-)도 U+002B PLUS SIGN (+)도 아닌 값입니다.
불리언
true 또는 false와 ASCII 대소문자를 구분하지 않고 일치하는 문자열입니다.

2.1.3 전역 속성

다음 속성은 모든 MathML 요소에 공통이며 지정할 수 있습니다:

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

id, class, style, data-*, autofocus, nonce 및 tabindex 속성은 HTML 요소의 id, class, style, data-*, autofocus, nonce 및 tabindex 속성에 정의된 것과 동일한 구문 및 의미를 갖습니다.

dir 속성이 존재하는 경우 그 값은 ltr 또는 rtl과 ASCII 대소문자를 구분하지 않고 일치해야 합니다. 이 경우 사용자 에이전트는 이 속성을 요소의 direction 속성을 해당 값으로 설정하는 프레젠테이션 힌트로 처리해야 합니다. 더 정확히 말하면 rtl과 ASCII 대소문자를 구분하지 않고 일치하면 rtl로 매핑되고, ltr과 ASCII 대소문자를 구분하지 않고 일치하면 ltr로 매핑됩니다.

참고
dir 속성은 수학 수식의 방향성을 설정하는 데 사용되며, 아랍어권에서는 흔히 rtl입니다. 그러나 오른쪽에서 왼쪽으로 쓰는 언어에서도 수학은 흔히 왼쪽에서 오른쪽으로 작성되므로 사용자 에이전트 스타일시트는 math 요소에서 direction 속성을 그에 맞게 재설정합니다.

다음 예에서는 dir 속성을 사용하여 "𞸎 더하기 𞸑의 (٢ 나누기 𞸟 더하기 ١) 제곱"을 오른쪽에서 왼쪽으로 렌더링합니다.

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

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

HTML에서 모든 HTMLElement가 지원한다고 명시한 모든 이벤트 핸들러 콘텐츠 속성은 MathMLElement IDL에 정의된 것처럼 모든 MathML 요소에서도 지원됩니다.

2.1.5 레거시 MathML 스타일 속성

mathcolor 및 mathbackground 속성이 존재하는 경우 그 값은 <color>여야 합니다. 이 경우 사용자 에이전트는 이러한 속성을 요소의 color 및 background-color 속성을 해당 값으로 설정하는 프레젠테이션 힌트로 처리해야 합니다. mathcolor 속성은 MathML 텍스트, 막대 등의 전경 채우기 색상을 설명하고, mathbackground 속성은 요소의 배경색을 설명합니다.

mathsize 속성이 존재하는 경우 그 값은 유효한 <length-percentage>여야 합니다. 이 경우 사용자 에이전트는 이 속성을 요소의 font-size 속성을 해당 값으로 설정하는 프레젠테이션 힌트로 처리해야 합니다. mathsize 속성은 수학 수식에서 글리프의 원하는 높이를 나타내며, 그에 따라 다른 부분(간격, 이동, 막대의 선 두께 등)도 조정합니다.

참고
위 속성은 전체 MathML과의 호환성을 위해 구현됩니다. MathML Core만을 대상으로 하는 작성자는 스타일링에 CSS를 사용하는 것이 권장됩니다.

2.1.6 displaystyle 및 scriptlevel 속성

displaystyle 속성이 존재하는 경우 그 값은 불리언이어야 합니다. 이 경우 사용자 에이전트는 이 속성을 요소의 math-style 속성을 해당 값으로 설정하는 프레젠테이션 힌트로 처리해야 합니다. 더 정확히 말하면 true와 ASCII 대소문자를 구분하지 않고 일치하면 normal로 매핑되고, false와 ASCII 대소문자를 구분하지 않고 일치하면 compact로 매핑됩니다. 이 속성은 예를 들어 콘텐츠의 크기나 스크립트 레이아웃을 변경하여 수식이 논리적 높이를 최소화해야 하는지 (값이 false) 또는 그렇지 않은지 (값이 true)를 나타냅니다.

scriptlevel 속성이 존재하는 경우 그 값은 +<U>, -<U> 또는 <U>여야 하며, 여기서 <U>는 부호 없는 정수입니다. 이 경우 사용자 에이전트는 scriptlevel 속성을 요소의 math-depth 속성을 해당 값으로 설정하는 프레젠테이션 힌트로 처리해야 합니다. 더 정확히 말하면 +<U>, -<U> 및 <U>는 각각 add(<U>) add(<-U>) 및 <U>로 매핑됩니다.

displaystyle 및 scriptlevel 값은 MathML 요소 내에서 자동으로 조정됩니다. 이러한 속성을 완전히 구현하려면 A. 사용자 에이전트 스타일시트에 설명된 것처럼 사용자 에이전트 스타일시트에 추가 CSS 속성을 지정해야 합니다. 특히 모든 MathML 요소에는 기본 font-size: math가 지정되어 scriptlevel 변경 사항이 반영되도록 합니다.

이 예에서는 munder 요소를 사용하여 밑 "∑"에 스크립트 "A"를 붙입니다. 기본적으로 합 기호는 부모로부터 상속된 글꼴 크기로 렌더링되고 A는 축소된 아래 첨자로 렌더링됩니다. displaystyle이 true이면 합 기호가 더 크게 그려지고 "A"는 아래 스크립트가 됩니다. "A"의 scriptlevel을 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 예제
참고
TEX의 \displaystyle, \textstyle, \scriptstyle 및 \scriptscriptstyle은 각각 displaystyle 및 scriptlevel의 true와 0, false와 0, false와 1, 그리고 false와 2에 대응합니다.

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

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

이 명세는 intent 및 arg 속성에 고유한 관찰 가능한 동작을 정의하지 않습니다.

참고
이러한 속성은 [MATHML4]에 설명되어 있으며, 이 명세의 향후 버전에서 이를 정의할 수도 있고 정의하지 않을 수도 있습니다. 작성자는 이러한 속성이 현재 개발 중이며 변경될 수 있다는 점에 유의해야 합니다.

2.2 웹 플랫폼과의 통합

2.2.1 HTML과 SVG

MathML은 관련 명세 [HTML] [SVG]에 설명된 대로 HTML 및 SVG와 혼합할 수 있습니다.

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

이 예에서는 인라인 MathML 및 SVG 요소를 HTML 문서 안에서 사용합니다. SVG 요소 <switch> 및 <foreignObject>를 (적절한 <requiredExtensions>와 함께) 사용하여 다이어그램 안에 텍스트 대체 콘텐츠가 있는 MathML 수식을 포함합니다. HTML input 요소는 mtext 내부에서 사용하여 수학 수식 안에 대화형 입력 필드를 포함합니다. 또한 annotation-xml 요소 내부의 SVG 및 HTML 예제는 3.7 의미론 및 프레젠테이션을 참조하십시오.

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

<p>
  빈칸을 채우십시오:
  <math>
    <msqrt>
      <mn>2</mn>
      <mtext><input onchange="..." size="2" type="text"></mtext>
      <mo>−</mo>
      <mn>1</mn>
    </msqrt>
    <mo>=</mo>
    <mn>3</mn>
  </math>
</p>
html-svg 예제

2.2.2 CSS 스타일링

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

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

<div style="width: 15em; color: blue">
  큰 합 기호와 원주율 숫자가 포함된 이 수학 수식은
  <math display="block" style="font-family: STIX Two Math">
    <mrow>
      <munderover>
        <mo>∑</mo>
        <mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow>
        <mrow><mo>+</mo><mn>∞</mn></mrow>
      </munderover>
      <mfrac>
        <mn>1</mn>
        <msup><mi>n</mi><mn>2</mn></msup>
      </mfrac>
    </mrow>
    <mo>=</mo>
    <mfrac>
      <msup><mi>π</mi><mn>2</mn></msup>
      <mn>6</mn>
    </mfrac>
  </math>
  쉽게 증명할 수 있습니다.
</div>
스타일 예제

MathML Core 요소를 포함하는 모든 문서는 사용자 에이전트 수준 스타일시트의 기본값 일부로 A. 사용자 에이전트 스타일시트에 설명된 CSS 규칙을 포함해야 합니다. 특히 모든 MathML 요소에서 쓰기 모드를 horizontal-lr로 강제하기 위한 !important 규칙이 추가됩니다.

float 속성은 부모의 계산된 display 값이 block math 또는 inline math인 요소를 플로팅하지 않으며, 해당 요소를 일반 흐름에서 벗어나게 하지도 않습니다.

::first-line 및 ::first-letter 의사 요소는 계산된 display 값이 block math 또는 inline math인 요소에는 적용되지 않으며, 이러한 요소는 조상 요소의 첫 번째 서식 지정 줄 또는 첫 번째 문자에 기여하지 않습니다.

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

  • 수학 수식 내부의 줄 바꿈: 모든 MathML 요소에서 white-space는 nowrap으로 처리됩니다.
  • 정렬 속성: align-content, justify-content, align-self, justify-self는 MathML 요소에 영향을 주지 않습니다.
참고
이러한 기능은 이 문서의 향후 버전에서 처리될 수 있습니다. 현재로서는 이러한 속성에 다른 값을 설정하면 이전 버전과의 호환성 문제가 발생할 수 있으므로 작성자는 그렇게 하지 않는 것이 권장됩니다.

2.2.3 DOM과 JavaScript

웹 애플리케이션 API를 지원하는 사용자 에이전트는 MathML의 시각적 렌더링이 [DOM] 트리와 동기화된 상태로 유지되도록 해야 하며, 특히 MathML 속성이 동적으로 수정될 때 필요한 업데이트를 수행해야 합니다.

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

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

GlobalEventHandlers 및 HTMLOrForeignElement 인터페이스는 [HTML]에 정의되어 있습니다.

다음 예에서는 MathML 수식을 사용하여 "α 나누기 2"라는 분수를 렌더링합니다. 빨간색 α를 클릭하면 파란색 β로 변경됩니다.

<script>
  function ModifyMath(mi) {
      mi.style.color = 'blue';
      mi.textContent = 'β';
  }
</script>
<math>
  <mrow>
    <mfrac>
      <mi style="color: red" onclick="ModifyMath(this)">α</mi>
      <mn>2</mn>
    </mfrac>
  </mrow>
</math>
dom-idl 예제
이슈
HTMLOrSVGElement의 이름을 변경하고 [HTML]에서 MathMLElement를 정의합니다.

2.2.4 텍스트 레이아웃

수학 글꼴에는 일반적으로 큰 적분 기호와 같이 매우 높은 글리프가 포함되므로 텍스트의 과도한 줄 간격을 피하려면 타이포그래피 메트릭을 사용하는 것이 중요합니다. 따라서 사용자 에이전트는 텍스트 레이아웃을 수행할 때 OS/2 테이블 [OPEN-FONT-FORMAT]의 USE_TYPO_METRICS 플래그를 고려해야 합니다.

2.2.5 포커스

MathML은 대화형 사용자 에이전트를 지원할 때 작성자가 상호작용성을 제공할 수 있도록 하며, HTML에 설명된 포커스와 동일한 개념, 접근 방식 및 지침을 사용하되, 이 섹션에서 설명하는 MathML 적용에 관한 수정 또는 명확화를 따릅니다.

요소에 포커스가 있으면 Selectors Level 3에 정의된 적용 가능한 모든 CSS 포커스 관련 의사 클래스가 해당 명세에 정의된 대로 적용됩니다.

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

3. 프레젠테이션 마크업

3.1 시각적 서식 모델

3.1.1 박스 모델

기본 display 속성은 A. 사용자 에이전트 스타일시트에 설명되어 있습니다:

  • <math> 루트의 경우, display 속성의 값에 따라 inline math 또는 block math와 같습니다.
  • 표 형식 MathML 요소 mtable, mtr, mtd의 경우 각각 inline-table, table-row 및 table-cell과 같습니다.
  • maction 및 semantics 요소의 첫 번째 자식을 제외한 모든 자식의 경우 none과 같습니다.
  • 그 밖의 모든 MathML 요소의 경우 block math와 같습니다.

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

참고
별도로 지정하지 않는 한, 이 명세의 그림에서는 horizontal-lr 및 ltr 쓰기 모드를 사용합니다. 예를 들어 아랍어 수학에서 사용할 수 있는 horizontal-tb 및 rtl 쓰기 모드의 박스 모델은 그림 4, 예를 들어 몽골어 수학에서 사용할 수 있는 vertical-lr 및 ltr 쓰기 모드의 박스 모델은 그림 5, 그리고 예를 들어 일본어 수학에서 사용할 수 있는 vertical-rl 및 ltr 쓰기 모드의 박스 모델은 그림 6을 참조하십시오.

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

  1. 인라인 메트릭. CSS의 최소 콘텐츠 인라인 크기, 최대 콘텐츠 인라인 크기 및 인라인 크기입니다. 그림 1을 참조하십시오.
    그림 1 MathML 요소의 일반 박스 모델
  2. 블록 메트릭. 블록 크기, 첫 번째 기준선 집합 및 마지막 기준선 집합입니다. MathML 박스에는 다음 기준선이 정의됩니다:

    1. 일반적으로 대문자 라틴 글리프의 아래쪽에 맞춰지는 알파벳 기준선입니다. 알파벳 기준선에서 박스의 라인 위쪽 가장자리까지의 대수적 거리를 라인 상승이라고 합니다. 박스의 라인 아래쪽 가장자리에서 알파벳 기준선까지의 대수적 거리를 라인 하강이라고 합니다.
    2. 일반적으로 분수선, 구분 기호의 중앙 및 이항 연산자에 맞춰지는 수학 기준선이며, 수학 축이라고도 합니다. 이는 알파벳 기준선에서 AxisHeight만큼 라인 위쪽 방향으로 이동합니다.
    3. 여분의 공간을 제외하고 그려지는 수학 콘텐츠의 라인 위쪽 이론적 한계를 나타내는 잉크 위쪽 기준선입니다. 지정되지 않으면 라인 위쪽 가장자리에 맞춰집니다. 알파벳 기준선에서 잉크 위쪽 기준선까지의 대수적 거리를 잉크 라인 상승이라고 합니다.
    4. 여분의 공간을 제외하고 그려지는 수학 콘텐츠의 라인 아래쪽 이론적 한계를 나타내는 잉크 아래쪽 기준선입니다. 지정되지 않으면 라인 아래쪽 가장자리에 맞춰집니다. 잉크 아래쪽 기준선에서 박스의 알파벳 기준선까지의 대수적 거리를 잉크 라인 하강이라고 합니다.
    참고
    수학 레이아웃에서는 텍스트의 위치를 지정할 때 잉크 영역을 사용하는 것이 매우 중요합니다. 더 복잡한 표기법(예: 제곱근)의 경우에는 그렇지 않습니다. 잉크 상승과 잉크 하강은 모든 MathML 요소에 대해 정의되지만 실제로는 토큰 요소에만 사용됩니다. 다른 경우에는 일반 상승 및 하강과 동일합니다.
    별도로 지정하지 않는 한 MathML 박스의 마지막 기준선 집합은 첫 번째 기준선 집합과 같습니다.
  3. 박스의 텍스트가 인라인 축을 따라 얼마나 기울어졌는지를 나타내는 선택적 이탤릭 보정입니다. 그림 2를 참조하십시오.
    그림 2 이탤릭 f와 큰 적분 기호의 이탤릭 보정 예
    최소 콘텐츠 인라인 크기 및 최대 콘텐츠 인라인 크기 계산 중이나 레이아웃 중에 요청되면 대체 값으로 0을 사용합니다.
  4. 박스를 악센트로 배치할 때 사용해야 하는 박스의 인라인 축상 기준 오프셋을 제공하는 선택적 상단 악센트 연결점입니다. 그림 3을 참조하십시오.
    그림 3 곡절 악센트의 상단 악센트 연결점 예
    최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)를 계산하는 동안 요청되면 최소 콘텐츠 인라인 크기의 절반(각각 최대 콘텐츠 인라인 크기의 절반)을 대체 값으로 사용합니다. 레이아웃 중에 요청되면 박스 인라인 크기의 절반을 대체 값으로 사용합니다.

MathML 박스가 주어지면 다음 오프셋이 정의됩니다:

  • 자식 박스의 인라인 오프셋은 부모 박스의 인라인 시작 가장자리와 자식 박스의 인라인 시작 가장자리 사이의 오프셋입니다.
  • 자식 박스의 블록 오프셋은 부모 박스의 블록 시작 가장자리와 자식 박스의 블록 시작 가장자리 사이의 오프셋입니다.
  • 자식 박스의 라인 왼쪽 오프셋은 부모 박스의 라인 왼쪽 가장자리와 자식 박스의 라인 왼쪽 가장자리 사이의 오프셋입니다.
그림 4 예를 들어 아랍어 수학에서 사용할 수 있는 horizontal-tb 및 rtl 쓰기 모드의 박스 모델입니다.
그림 5 예를 들어 몽골어 수학에서 사용할 수 있는 vertical-lr 및 ltr 쓰기 모드의 박스 모델입니다.
그림 6 예를 들어 일본어 수학에서 사용할 수 있는 vertical-rl 및 ltr 쓰기 모드의 박스 모델입니다.
참고
MathML 박스 내부의 자식 박스와 그래픽 항목의 위치는 인라인 오프셋 및 블록 오프셋을 사용하여 표현합니다. 편의를 위해 레이아웃 알고리즘은 흐름 상대 방향, 라인 상대 방향 또는 알파벳 기준선을 사용하여 오프셋을 설명할 수 있습니다. 자식 박스의 위치 지정은 항상 박스와 해당 자식 박스의 메트릭을 계산한 후 수행되므로 한 설명에서 다른 설명으로 항상 변환할 수 있습니다.

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

이슈 78: 잉크 상승/하강 opentype/texneeds-tests
잉크 상승/하강의 정의를 개선하시겠습니까?

3.1.2 레이아웃 알고리즘

각 MathML 요소에는 연결된 수학 콘텐츠 박스가 있으며, 다음 구조를 사용하여 이 장의 레이아웃 알고리즘에 설명된 대로 계산됩니다:

  1. 수학 콘텐츠의 최소 콘텐츠 인라인 크기 및 최대 콘텐츠 인라인 크기를 계산합니다.
  2. 박스 레이아웃:
    1. 흐름 내 자식 박스를 레이아웃합니다.
    2. 수학 콘텐츠의 인라인 크기, 잉크 라인 상승, 잉크 라인 하강, 라인 상승 및 라인 상승을 계산합니다.
    3. 수학 콘텐츠 박스 내 자식 박스의 오프셋과 추가 그래픽 항목 (막대, 근호 기호 등)의 크기 및 오프셋을 계산합니다.
    4. [CSS-POSITION-3]에 설명된 대로 절대 위치 지정 및 고정 위치 지정 박스를 레이아웃하고 배치합니다.

다음 추가 단계를 수행해야 합니다:

참고
위 설명에 따라 여백 상쇄는 MathML 요소에 적용되지 않습니다.

박스 레이아웃 중에는 선택적 인라인 늘이기 크기 제약 및 블록 늘이기 크기 제약 매개변수를 장식된 연산자에 사용할 수 있습니다. 전자는 인라인 축을 따라 늘어난 핵심 연산자가 포괄해야 하는 목표 크기를 나타냅니다. 후자는 블록 축을 따라 늘어난 핵심 연산자가 포괄해야 하는 잉크 라인 상승 및 잉크 라인 하강을 나타냅니다. 별도로 지정하지 않는 한 이러한 매개변수는 박스 레이아웃 중 무시되며 자식 박스는 늘이기 크기 제약 없이 레이아웃됩니다.

이슈 76: 인라인 백분율이 무엇을 기준으로 해석되는지 정의합니다. css/html5need specification updateneeds-tests
인라인 백분율이 무엇을 기준으로 해석되는지 정의합니다
이슈 77: 블록 백분율이 무엇을 기준으로 해석되는지 정의합니다. css/html5need specification updateneeds-tests
블록 백분율이 무엇을 기준으로 해석되는지 정의합니다

3.1.3 익명 <mrow> 박스

익명 박스는 DOM 트리의 어떤 요소와도 연결되지 않으며 레이아웃 목적으로만 생성되는 박스입니다. 익명 박스의 속성은 이를 둘러싼 비익명 박스에서 상속되며, 상속되지 않는 속성은 초기값을 갖습니다. 익명 <mrow> 박스는 display가 block math와 같은 익명 박스이며, 3.3.1.2 <mrow>의 레이아웃 절에 설명된 대로 레이아웃됩니다.

MathML 요소가 익명 <mrow> 박스를 생성하면 해당 요소는 자식을 익명 <mrow> 박스로 감쌉니다. 즉, 시각적 서식 모델에서 해당 하위 트리는 이 MathML 요소의 자식에 연결된 박스를 자체적으로 포함하는 익명 <mrow> 박스로 구성됩니다.

다음 예에서 math 및 mrow 요소는 3.3.1.2 <mrow>의 레이아웃 절에 설명된 대로 레이아웃됩니다. 특히 <math> 요소는 <mo>≠</mo> 자식 주변에 적절한 간격을 추가하고 <mrow> 요소는 <mo>|</mo> 자식을 세로 방향으로 늘입니다.

mtd 요소는 display: table-cell을 가지며 msqrt 요소는 자식 주변에 근호 기호를 표시합니다. 그러나 이 요소들도 3.3.1.2 <mrow>의 레이아웃 절에 설명된 것과 비슷한 방식으로 자식을 배치합니다: <msqrt> 요소는 <mo>+</mo> 자식 주변에 적절한 간격을 추가하는 반면 <mtd> 요소는 <mo> 자식을 세로 방향으로 늘입니다. 이를 가능하게 하기 위해 이 두 요소 각각은 익명 <mrow> 박스를 생성합니다.

<math>
  <mrow>
    <mo>|</mo>
    <mtable>
      <mtr>
        <mtd>
          <mi>x</mi>
        </mtd>
        <mtd>
          <mo>(</mo>
          <mfrac linethickness="0">
            <mn>5</mn>
            <mn>3</mn>
          </mfrac>
          <mo>)</mo>
        </mtd>
      </mtr>
      <mtr>
        <mtd>
          <msqrt>
            <mn>7</mn>
            <mo>+</mo>
            <mn>2</mn>
          </msqrt>
        </mtd>
        <mtd>
          <mi>y</mi>
        </mtd>
      </mtr>
    </mtable>
    <mo>|</mo>
  </mrow>
  <mo>≠</mo>
  <mn>0</mn>
</math>
수학 예제 (디스플레이)

3.1.4 스태킹 컨텍스트

MathML 요소는 다양한 간격 규칙으로 인해 서로 겹칠 수 있습니다. 또한 추가 그래픽 항목 (막대, 근호 기호 등)을 포함할 수도 있습니다. 계산된 스타일이 display: block math 또는 display: inline math인 MathML 요소는 새로운 스태킹 컨텍스트를 생성합니다. 이러한 MathML 요소의 흐름 내 자식의 페인팅 순서는 블록 요소와 정확히 같습니다. 추가 그래픽 항목은 텍스트와 배경 다음에 페인팅됩니다( display: inline math의 경우 7.2.4단계 바로 다음, display: block math의 경우 7.2단계 바로 다음).

3.2 토큰 요소

프레젠테이션 마크업의 토큰 요소는 일반적으로 의미를 지니는 수학 표기법의 가장 작은 단위를 나타내기 위한 것입니다. 토큰은 대략 텍스트의 단어와 유사합니다. 그러나 수학 표기법의 정확하고 기호적인 특성 때문에 토큰 요소의 다양한 범주와 속성은 MathML 마크업에서 중요한 역할을 합니다. 반면 텍스트 데이터에서는 개별 단어를 특별히 마크업하거나 스타일링해야 하는 경우가 드뭅니다.

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

3.2.1 텍스트 <mtext>

mtext 요소는 그대로 렌더링해야 하는 임의의 텍스트를 나타내는 데 사용됩니다. 일반적으로 <mtext> 요소는 설명 텍스트를 나타내기 위한 것입니다.

<mtext> 요소는 2.1.3 전역 속성에 설명된 속성을 허용합니다.

다음 예에서는 mtext를 사용하여 정의에 조건을 나타내는 단어를 넣습니다:

<math>
  <mi>y</mi>
  <mo>=</mo>
  <mrow>
    <msup>
      <mi>x</mi>
      <mn>2</mn>
    </msup>
    <mtext>&nbsp;일 때&nbsp;</mtext>
    <mrow>
      <mi>x</mi>
      <mo>≥</mo>
      <mn>1</mn>
    </mrow>
    <mtext>&nbsp;그리고&nbsp;</mtext>
    <mn>2</mn>
    <mtext>&nbsp;그 밖의 경우.</mtext>
  </mrow>
</math>
mtext 예제
3.2.1.1 <mtext>의 레이아웃

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

<mtext> 요소가 강제 줄 바꿈이나 소프트 줄 바꿈 기회가 없는 텍스트 콘텐츠만 포함하는 경우, 해당 텍스트에 대해 생성된 익명 자식 노드는 관련 CSS 명세에 정의된 대로 레이아웃되며:

그렇지 않으면 mtext 요소는 블록 박스로 레이아웃되며 해당 최소 콘텐츠 인라인 크기, 최대 콘텐츠 인라인 크기, 인라인 크기, 블록 크기, 첫 번째 기준선 집합 및 마지막 기준선 집합이 수학 콘텐츠 박스에 사용됩니다.

3.2.2 식별자 <mi>

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

<mi> 요소는 2.1.3 전역 속성에 설명된 속성뿐만 아니라 다음 속성도 허용합니다:

레이아웃 알고리즘은 mtext 요소와 같습니다. 사용자 에이전트 스타일시트는 4.2 math-auto 변환에서 도입된 text-transform 값을 통해 자동 이탤릭을 구현하기 위해 다음 속성을 포함해야 합니다:

mi {
  text-transform: math-auto;
}

mathvariant 속성이 존재하는 경우, normal과 ASCII 대소문자를 구분하지 않고 일치해야 합니다. 이 경우 사용자 에이전트는 이 속성을 요소의 text-transform 속성을 none으로 설정하는 프레젠테이션 힌트로 처리해야 합니다. 그렇지 않으면 아무런 영향을 주지 않습니다.

참고

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

MathML Core에서는 이 속성을 mi 요소의 자동 이탤릭을 취소하는 데만 사용합니다. 다른 사용 사례에는 적절한 Mathematical Alphanumeric Symbols [UNICODE]를 대신 사용해야 합니다. C. 수학 영숫자 기호 절도 참조하십시오.

다음 예에서는 mi를 사용하여 변수와 함수 이름을 렌더링합니다. 4.2 math-auto 변환에 따라 기본 스타일 text-transform: math-auto는 첫 번째 <mi>에는 영향을 주지 않습니다("cos"는 세 문자로 구성됨). 두 번째 <mi>는 수학 이탤릭으로 렌더링됩니다("c"는 단일 문자 U+0063 Latin Small Letter C로 구성되며, italic 테이블에 따라 U+1D450 Mathematical Italic Small C로 매핑됨). 세 번째 <mi>에는 영향을 주지 않으며( mathvariant="normal"로 재정의되어 text-transform이 none으로 설정됨), 네 번째 <mi>에도 영향을 주지 않습니다( italic 테이블에 U+221E Infinity에 대한 매핑이 정의되어 있지 않음).

<math>
  <mi>cos</mi>
  <mo>,</mo>
  <mi>c</mi>
  <mo>,</mo>
  <mi mathvariant="normal">c</mi>
  <mo>,</mo>
  <mi>∞</mi>
</math>
mi 예제

3.2.3 숫자 <mn>

mn 요소는 "숫자 리터럴" 또는 숫자 리터럴로 렌더링해야 하는 기타 데이터를 나타냅니다. 일반적으로 숫자 리터럴은 부호 없는 정수나 실수를 나타내며, 소수점을 포함할 수도 있는 숫자 시퀀스입니다.

<mn> 요소는 2.1.3 전역 속성에 설명된 속성을 허용합니다. 레이아웃 알고리즘은 mtext 요소와 같습니다.

다음 예에서는 mn을 사용하여 십진수를 작성합니다.

<math>
  <mn>3.141592653589793</mn>
</math>
mn 예제

3.2.4 연산자, 구분 기호, 분리자 또는 악센트 <mo>

mo 요소는 연산자 또는 연산자로 렌더링해야 하는 모든 것을 나타냅니다. 일반적으로 수학 연산자의 표기 관례는 상당히 복잡하므로 MathML은 <mo> 요소의 렌더링 동작을 지정하기 위한 비교적 정교한 메커니즘을 제공합니다.

따라서 MathML에서 "연산자로 렌더링해야 하는" 항목의 목록에는 일반적인 의미에서는 수학 연산자가 아닌 여러 표기법도 포함됩니다. 중위, 전위 또는 후위 형식의 일반 연산자 외에도 중괄호, 괄호, "절댓값" 막대와 같은 구분 문자, 쉼표와 세미콜론 같은 분리자, 그리고 기호 위의 막대나 물결표 같은 수학적 악센트가 포함됩니다. 이 장에서는 이러한 넓은 의미의 연산자를 가리키는 데 "연산자"라는 용어를 사용합니다.

<mo> 요소는 2.1.3 전역 속성에 설명된 속성뿐만 아니라 다음 속성도 허용합니다:

이 명세는 fence 및 separator 속성에 고유한 관찰 가능한 동작을 정의하지 않습니다.

참고
작성자는 fence 및 separator를 사용하여 연산자의 특정 의미를 설명할 수 있습니다. 기본값은 Operators_fence 및 Operators_separator 테이블에서 결정할 수 있으며, 또는 이와 동등하게 연산자 사전의 사람이 읽을 수 있는 버전에서 결정할 수 있습니다.

다음 예에서는 mo 요소를 이항 연산자 +에 사용합니다. 기본 간격은 해당 연산자 주위에서 대칭입니다. form 속성을 사용하여 전위 연산자로 처리되도록 강제하면 더 좁은 간격이 사용됩니다. lspace 및 rspace 속성을 사용하여 간격을 명시적으로 지정할 수도 있습니다.

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

또 다른 사용 사례는 합 기호와 같은 큰 연산자입니다. displaystyle이 true이면 이러한 연산자는 더 크게 그려지지만 largeop 속성을 사용하여 이를 변경할 수 있습니다. displaystyle이 false이면 아래 스크립트는 실제로 아래 첨자로 렌더링되지만 movablelimits 속성을 사용하여 이를 변경할 수 있습니다.

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

연산자는 구분 기호, 악센트, 화살표 등과 같이 늘일 수 있는 기호에도 사용됩니다. 다음 예에서 세로 화살표는 mspace 요소의 높이까지 늘어납니다. 예를 들어 늘어나지 않는 화살표를 강제하기 위해 stretchy 속성을 사용하여 기본 늘이기 동작을 재정의할 수 있습니다. symmetric 속성은 연산자를 수학 축(분수선)의 위아래로 대칭적으로 늘여야 하는지를 나타낼 수 있게 합니다. 마지막으로 minsize 및 maxsize 속성은 늘이기 크기에 추가 제약을 더합니다.

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

연산자의 기본 속성은 3.2.4.2 사전 기반 속성에 설명된 대로 사전을 기반으로 한다는 점에 유의하십시오. 예를 들어 이항 연산자는 일반적으로 주변에 기본 대칭 간격이 있는 반면, 구분 기호는 일반적으로 기본적으로 늘일 수 있습니다.

3.2.4.1 장식된 연산자

MathML Core 요소는 다음 중 하나인 경우 장식된 연산자입니다:

  1. mo 요소인 경우;
  2. 스크립트 요소 또는 mfrac이며, 첫 번째 흐름 내 자식이 존재하고 장식된 연산자인 경우;
  3. 그룹화 요소 또는 mpadded이며, 흐름 내 자식이 순서와 관계없이 하나의 장식된 연산자와 0개 이상의 공백 유사 요소로 구성된 경우.

장식된 연산자의 핵심 연산자는 다음과 같이 재귀적으로 정의되는 <mo> 요소입니다:

  1. mo 요소의 핵심 연산자는 해당 요소 자체입니다.
  2. 장식된 스크립트 요소 또는 mfrac 요소의 핵심 연산자는 첫 번째 흐름 내 자식의 핵심 연산자입니다.
  3. 장식된 그룹화 요소 또는 mpadded의 핵심 연산자는 유일한 장식된 연산자 흐름 내 자식의 핵심 연산자입니다.

장식된 연산자의 늘이기 축은 해당 핵심 연산자가 단일 문자 c로 이루어진 텍스트 콘텐츠만 포함하고, 해당 문자가 인라인 고유 늘이기 축을 가지면 inline입니다. 그렇지 않으면 장식된 연산자의 늘이기 축은 block입니다.

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

3.2.4.2 사전 기반 속성

장식된 연산자의 form 속성은 infix, prefix 또는 postfix 중 하나입니다. mo 요소의 해당 form 속성이 존재하는 경우 이 값 중 하나와 ASCII 대소문자를 구분하지 않고 일치해야 합니다.

장식된 연산자의 form을 결정하는 알고리즘은 다음과 같습니다:

  1. 핵심 연산자에 form 속성이 존재하고 유효하면 해당 ASCII 소문자 값을 사용합니다.
  2. 장식된 연산자가 그룹화 요소, mpadded 또는 msqrt의 첫 번째 흐름 내 자식이고, 해당 요소에 흐름 내 자식이 둘 이상이면 (모든 공백 유사 자식은 무시) prefix 형식을 가집니다.
  3. 또는 장식된 연산자가 그룹화 요소, mpadded 또는 msqrt의 마지막 흐름 내 자식이고, 해당 요소에 흐름 내 자식이 둘 이상이면 (모든 공백 유사 자식은 무시) postfix 형식을 가집니다.
  4. 또는 장식된 연산자가 스크립트 요소의 첫 번째 흐름 내 자식이 아닌 다른 흐름 내 자식이면 postfix 형식을 가집니다.
  5. 그렇지 않으면 장식된 연산자는 infix 형식을 가집니다.

장식된 연산자의 stretchy, symmetric, largeop, movablelimits 속성은 false 또는 true 중 하나입니다. 후자의 경우 장식된 연산자가 해당 속성을 가진다고 합니다. mo 요소의 해당 stretchy, symmetric, largeop, movablelimits 속성이 존재하는 경우 불리언이어야 합니다.

장식된 연산자의 lspace, rspace, minsize 속성은 <length-percentage>입니다. 장식된 연산자의 maxsize 속성은 <length-percentage> 또는 ∞입니다. mo 요소의 lspace, rspace, minsize 및 maxsize 속성이 존재하는 경우 유효한 <length-percentage>여야 합니다.

장식된 연산자의 속성을 결정하는 알고리즘은 다음과 같습니다:

  1. 해당 stretchy, symmetric, largeop, movablelimits, lspace, rspace, maxsize 또는 minsize 속성이 핵심 연산자에 존재하고 유효하면 이 속성의 ASCII 소문자 값을 사용합니다.
  2. 그렇지 않으면 장식된 연산자의 form을 결정하는 알고리즘을 실행합니다.
  3. 핵심 연산자가 텍스트 콘텐츠 Content만 포함하면 Category를 연산자의 범주를 결정하는 알고리즘 (Content, Form)의 결과로 설정합니다. 여기서 Form은 이전 단계에서 계산한 form입니다.
  4. Category가 Default이고 장식된 연산자의 form이 해당 핵심 연산자의 속성으로 명시적으로 지정되지 않은 경우:
    1. Category를 연산자의 범주를 결정하는 알고리즘 (Content, Form)의 결과로 설정합니다. 여기서 Form은 infix입니다.
    2. Category가 Default이면 Form을 postfix로 설정하고 알고리즘을 다시 실행합니다.
    3. Category가 Default이면 Form을 prefix로 설정하고 알고리즘을 다시 실행합니다.
  5. 연산자의 범주에서 해당 속성을 설정하는 알고리즘을 Category에 대해 실행합니다.

레이아웃 중에 사용할 때, stretchy, symmetric, largeop, movablelimits, lspace, rspace, minsize의 값은 다음 추가 해석을 적용하여 장식된 연산자의 속성을 결정하는 알고리즘으로 얻습니다:

  • lspace, rspace의 백분율 값은 사전에서 읽은 값 또는 위의 대체 값을 기준으로 해석합니다.
  • minsize 및 maxsize의 백분율 값 해석은 3.2.4.3 연산자의 레이아웃에 설명되어 있습니다.
  • lspace, rspace, minsize 및 maxsize의 글꼴 상대 길이는 장식된 연산자의 글꼴 스타일이 아니라 핵심 연산자의 글꼴 스타일을 사용합니다.
3.2.4.3 연산자의 레이아웃

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

연산자의 텍스트는 <mo> 요소의 visibility가 visible인 경우에만 페인팅해야 합니다. 이 경우 <mo> 요소의 color로 페인팅해야 합니다.

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

  1. <mo> 요소의 콘텐츠가 단일 문자 c로 이루어져 있지 않으면 3.2.1.1 <mtext>의 레이아웃 알고리즘으로 대체합니다.
  2. 연산자가 stretchy 속성을 가지는 경우:
  3. 연산자가 largeop 속성을 가지며 <mo> 요소의 math-style이 normal이면:
    1. MathVariants 테이블을 사용하여 높이가 DisplayOperatorMinHeight 이상인 글리프를 찾습니다. 찾을 수 없으면 가장 큰 비기본 글리프로 대체합니다. 이 또한 찾을 수 없으면 3.2.1.1 <mtext>의 레이아웃 알고리즘으로 대체합니다.

    2. 수학 콘텐츠의 최소 콘텐츠 인라인 크기, 최대 콘텐츠 인라인 크기, 인라인 크기 및 블록 메트릭은 찾은 글리프에서 제공합니다.
    3. 글리프를 페인팅합니다.
    그림 8 합 기호의 기본 크기 및 displaystyle 크기
  4. 그렇지 않으면 3.2.1.1 <mtext>의 레이아웃 알고리즘으로 대체합니다.

위 단계 중 하나에서 늘일 수 있는 글리프를 셰이핑하는 알고리즘을 사용했다면 수학 콘텐츠의 이탤릭 보정을 해당 알고리즘이 반환한 값으로 설정합니다.

3.2.5 공백 <mspace>

빈 요소 mspace는 해당 속성으로 설정된 원하는 크기의 빈 공간을 나타냅니다.

<mspace> 요소는 2.1.3 전역 속성에 설명된 속성뿐만 아니라 다음 속성도 허용합니다:

width, height, depth가 존재하는 경우 유효한 <length-percentage> 값을 가져야 합니다.

  • width 속성이 존재하고 유효하며 백분율이 아니면 이 속성을 요소의 width 속성을 해당 값으로 설정하는 프레젠테이션 힌트로 사용합니다.
  • height 속성이 없거나 유효하지 않거나 백분율이면 요청된 라인 상승은 0입니다. 그렇지 않으면 요청된 라인 상승은 height 속성의 해석된 값이며, 음수 값은 0으로 제한합니다.
  • height 및 depth 속성이 모두 존재하고 유효하며 백분율이 아니면 이를 요소의 height 속성을 문자열 "calc(", height 속성 값, " + ", depth 속성 값, 그리고 ")"을 연결한 값으로 설정하는 프레젠테이션 힌트로 사용합니다. 이러한 속성 중 하나만 존재하고 유효하며 백분율이 아니면 해당 속성을 요소의 height 속성을 해당 값으로 설정하는 프레젠테이션 힌트로 처리합니다.

다음 예에서는 mspace를 사용하여 수식 내 간격을 강제합니다(공백을 쉽게 시각화하기 위해 1px 파란색 테두리가 추가됨):

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

<mspace> 요소의 계산된 display 속성이 block math 또는 inline math와 같지 않으면 해당 값이 설명된 CSS 명세에 따라 레이아웃됩니다. 그렇지 않으면 <mspace> 요소는 그림 9에 표시된 대로 레이아웃됩니다. 수학 콘텐츠의 최소 콘텐츠 인라인 크기, 최대 콘텐츠 인라인 크기 및 인라인 크기는 width 속성의 해석된 값과 같습니다. 수학 콘텐츠의 블록 크기는 height 속성의 해석된 값과 같습니다. 수학 콘텐츠의 라인 상승은 위에서 결정한 요청된 라인 상승과 같습니다.

그림 9 <mspace> 요소의 박스 모델
참고
height/depth라는 용어는 [MATHML3]에서 유래했으며, 이는 다시 [TEXBOOK]에서 영감을 받은 것입니다.
3.2.5.1 공백 유사 요소의 정의

여러 MathML 프레젠테이션 요소는 일반적으로 공백으로 렌더링되고, 해당 요소가 나타나는 표현식의 수학적 의미에 영향을 주지 않는다는 의미에서 "공백 유사"입니다. 따라서 이러한 요소는 다른 MathML 표현식에서 다소 예외적인 방식으로 동작하는 경우가 많습니다.

MathML Core 요소는 다음 중 하나인 경우 공백 유사 요소입니다:

  1. mtext 또는 mspace인 경우;
  2. 또는 그룹화 요소 또는 mpadded이며, 모든 흐름 내 자식이 공백 유사인 경우.

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

참고
mphantom은 콘텐츠가 공백 유사가 아닌 한 자동으로 공백 유사로 정의되지 않는다는 점에 유의하십시오. 이는 인접한 요소가 공백 유사인지 여부가 연산자 간격에 영향을 주기 때문입니다. <mphantom> 요소는 주로 표현식을 정렬하기 위한 보조 수단으로 사용되므로, <mphantom>에 인접한 연산자는 동일한 크기의 공백 영역에 인접한 것처럼 동작하는 대신 <mphantom>의 콘텐츠에 인접한 것처럼 동작해야 합니다.

3.2.6 문자열 리터럴 <ms>

ms 요소는 컴퓨터 대수 시스템이나 "프로그래밍 언어"를 포함하는 다른 시스템에서 해석하기 위한 표현식의 "문자열 리터럴"을 나타내는 데 사용됩니다.

<ms> 요소는 2.1.3 전역 속성에 설명된 속성을 허용합니다. 레이아웃 알고리즘은 mtext 요소와 같습니다.

다음 예에서는 ms를 사용하여 리터럴 문자열을 작성합니다:

<math>
  <mi>s</mi>
  <mo>=</mo>
  <ms>"안녕하세요 세계"</ms>
</math>
ms 예제
참고
MathML3에서는 lquote 및 rquote 속성을 사용하여 각각 여는 따옴표와 닫는 따옴표로 사용할 문자열을 지정할 수 있었습니다. 이제 이러한 속성은 더 이상 지원되지 않으며, 대신 따옴표를 <ms> 요소의 텍스트 일부로 지정해야 합니다. 시각적 렌더링을 유지하기 위해 레거시 문서에 CSS 규칙을 추가할 수 있습니다. 예를 들어 왼쪽에서 오른쪽 방향에서는:
ms:before, ms:after {
  content: "\0022";
}
ms[lquote]:before {
  content: attr(lquote);
}
ms[rquote]:after {
  content: attr(rquote);
}

3.3 일반 레이아웃 스키마

토큰 외에도 여러 종류의 MathML 프레젠테이션 요소가 있습니다. 한 종류의 요소는 아래 첨자와 위 첨자 같은 다양한 "스크립트" 표기법을 다룹니다. 또 다른 종류는 행렬과 표를 다룹니다. 이 절에서 설명하는 나머지 요소는 분수와 근호 같은 다른 기본 표기법을 설명하거나 스타일 속성 설정 및 오류 처리와 같은 일반적인 기능을 다룹니다.

3.3.1 부분 표현식 그룹화 <mrow>

mrow 요소는 임의 개수의 부분 표현식을 함께 그룹화하는 데 사용되며, 일반적으로 하나 이상의 다른 표현식에 "연산자"로 작용하는 하나 이상의 <mo> 요소와, 그 "피연산자"인 하나 이상의 다른 표현식으로 구성됩니다.

다음 예에서는 mrow를 사용하여 합 "1 + 2/3"을 분수의 분자( mfrac의 첫 번째 자식)로 그룹화하고, 5제곱되는 구분 기호가 있는 표현식( msup의 첫 번째 자식)을 구성합니다. mrow 자체는 그룹화된 콘텐츠 주위에 시각적 구분 기호를 추가하지 않으며, mo 요소를 사용하여 이를 명시적으로 지정해야 한다는 점에 유의하십시오.

mrow 요소 내에서는 자식의 세로 정렬( 알파벳 기준선 또는 수학 기준선에 따라)이 올바르게 수행되고, 구분 기호가 세로로 늘어나며, 이항 + 연산자 주위의 간격이 자동으로 계산되는 것을 확인할 수 있습니다.

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

<mrow> 요소는 2.1.3 전역 속성에 설명된 속성을 허용합니다. 흐름 내 자식 child1, child2, …, childN을 갖는 <mrow> 요소는 그림 10에 표시된 대로 레이아웃됩니다. 자식 박스는 모든 알파벳 기준선이 정렬된 상태로 한 줄에 차례대로 배치됩니다.

그림 10 <mrow> 요소의 박스 모델
참고
박스 모델이 알파벳 기준선의 정렬을 보장하므로, 모든 흐름 내 자식에서 AxisHeight가 동일한 일반적인 경우 분수선이나 대칭적으로 늘어나는 연산자도 수학 축을 따라 정렬됩니다.
3.3.1.1 블록 축을 따라 연산자를 늘이는 알고리즘
그림 11 블록 축을 따라 연산자를 대칭 및 비대칭으로 늘이기

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

  1. 블록 늘이기 크기 제약 또는 인라인 늘이기 크기 제약이 있으면 레이아웃 중인 요소는 장식된 연산자입니다. 장식된 연산자인 하나의 흐름 내 자식은 동일한 늘이기 크기 제약으로 레이아웃하고, 그 밖의 모든 흐름 내 자식은 늘이기 크기 제약 없이 레이아웃한 후 중지합니다.
  2. 그렇지 않으면 흐름 내 자식 목록을 첫 번째 목록 LToStretch와 두 번째 목록 LNotToStretch로 나눕니다. 첫 번째 목록에는 장식된 연산자 중 stretchy 속성과 블록 늘이기 축을 가진 항목이 포함됩니다; 그리고 두 번째 목록은 LNotToStretch입니다.
  3. LNotToStretch의 모든 항목을 늘이기 크기 제약 없이 레이아웃합니다. LToStretch가 비어 있으면 중지합니다. LNotToStretch가 비어 있으면 LToStretch의 모든 항목을 블록 늘이기 크기 제약 (0, 0)으로 레이아웃합니다.
  4. 이전 단계에서 레이아웃된 흐름 내 자식의 여백 박스에서 최대 잉크 상승과 최대 잉크 하강을 각각 제약 없는 목표 크기 Uascent 및 Udescent로 계산합니다.
  5. LToStretch의 모든 요소를 블록 늘이기 크기 제약 (Uascent, Udescent)으로 레이아웃하거나 다시 레이아웃합니다.
3.3.1.2 <mrow>의 레이아웃

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

자식 박스가 장식된 연산자가 아니며 0이 아닌 이탤릭 보정을 가지면 기울어진 것으로 간주합니다.

참고
큰 연산자는 0이 아닌 이탤릭 보정을 가질 수 있지만, 이는 스크립트를 연결할 때 사용됩니다. 더 일반적으로 모든 장식된 연산자는 주변 간격이 lspace 및 rspace에서 지정한 대로 계산되므로 기울어지지 않은 것으로 처리합니다.

최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)는 다음 알고리즘을 사용하여 계산합니다:

  1. 박스가 math 요소에 해당하거나 장식된 연산자가 아니면 add-space를 true로 설정하고, 그렇지 않으면 false로 설정합니다.
  2. inline-offset을 0으로 설정합니다.
  3. previous-italic-correction을 0으로 설정합니다.
  4. 각 흐름 내 자식에 대해:
    1. 자식이 기울어져 있지 않으면 inline-offset을 previous-italic-correction만큼 증가시킵니다.
    2. 자식이 장식된 연산자이고 add-space가 true이면 inline-offset을 해당 lspace 속성만큼 증가시킵니다.
    3. inline-offset을 자식 여백 박스의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)만큼 증가시킵니다.
    4. 자식이 기울어져 있으면 previous-italic-correction을 해당 이탤릭 보정으로 설정합니다. 그렇지 않으면 0으로 설정합니다.
    5. 자식이 장식된 연산자이고 add-space가 true이면 inline-offset을 해당 rspace 속성만큼 증가시킵니다.
  5. inline-offset을 previous-italic-correction만큼 증가시킵니다.
  6. inline-offset을 반환합니다.

흐름 내 자식은 블록 축을 따라 연산자를 늘이는 알고리즘을 사용하여 레이아웃합니다.

수학 콘텐츠의 인라인 크기는 수학 콘텐츠의 최소 콘텐츠 인라인 크기 및 최대 콘텐츠 인라인 크기와 같은 방식으로 계산하지만, 대신 흐름 내 자식 여백 박스의 인라인 크기를 사용합니다.

수학 콘텐츠의 잉크 라인 상승 (각각 라인 상승)은 모든 흐름 내 자식 여백 박스의 잉크 라인 상승 (각각 라인 상승) 중 최댓값입니다. 마찬가지로 수학 콘텐츠의 잉크 라인 하강 (각각 라인 하강)은 모든 흐름 내 자식 여백 박스의 잉크 라인 하강 (각각 잉크 라인 상승) 중 최댓값입니다.

흐름 내 자식은 다음 알고리즘을 사용하여 배치합니다:

  1. 박스가 math 요소에 해당하거나 장식된 연산자가 아니면 add-space를 true로 설정하고, 그렇지 않으면 false로 설정합니다.
  2. inline-offset을 0으로 설정합니다.
  3. previous-italic-correction을 0으로 설정합니다.
  4. 각 흐름 내 자식에 대해:
    1. 자식이 기울어져 있지 않으면 inline-offset을 previous-italic-correction만큼 증가시킵니다.
    2. 자식이 장식된 연산자이고 add-space가 true이면 inline-offset을 해당 lspace 속성만큼 증가시킵니다.
    3. 자식의 인라인 오프셋을 inline-offset으로 설정하고, 자식의 알파벳 기준선이 알파벳 기준선과 정렬되도록 블록 오프셋을 설정합니다.
    4. inline-offset을 자식 여백 박스의 인라인 크기만큼 증가시킵니다.
    5. 자식이 기울어져 있으면 previous-italic-correction을 해당 이탤릭 보정으로 설정합니다. 그렇지 않으면 0으로 설정합니다.
    6. 자식이 장식된 연산자이고 add-space가 true이면 inline-offset을 해당 rspace 속성만큼 증가시킵니다.

수학 콘텐츠의 이탤릭 보정은 마지막 흐름 내 자식의 이탤릭 보정, 즉 previous-italic-correction의 최종 값으로 설정합니다.

3.3.2 분수 <mfrac>

mfrac 요소는 분수에 사용됩니다. 이항 계수 및 르장드르 기호와 같은 분수와 유사한 객체를 마크업하는 데도 사용할 수 있습니다.

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

<mfrac> 요소는 2.1.3 전역 속성에 설명된 속성뿐만 아니라 다음 속성도 허용합니다:

linethickness 속성은 분수선에 사용할 분수선 두께를 나타냅니다. 존재하는 경우 유효한 <length-percentage> 값을 가져야 합니다. 속성이 없거나 유효하지 않은 값을 가지면 FractionRuleThickness를 기본값으로 사용합니다. 백분율은 해당 기본값을 기준으로 해석합니다. 음수 값은 0으로 해석합니다.

다음 예에는 서로 다른 linethickness 값을 가진 네 개의 분수가 있습니다. 분수선은 항상 더하기 및 빼기 기호의 중앙과 정렬됩니다. 분자와 분모는 가로 방향으로 중앙 정렬됩니다. displaystyle이 아닌 분수는 더 작은 간격과 글꼴 크기를 사용합니다.

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

<mfrac> 요소는 자식 내에서 displaystyle을 false로 설정하거나, 이미 false이면 scriptlevel을 1 증가시킵니다. 두 번째 자식 내에서는 math-shift를 compact로 설정합니다. 분수선과 다른 인접한 항목(예: 빼기 기호 또는 다른 분수의 분수선) 사이의 시각적 혼동을 피하기 위해 요소 주위에 기본 1픽셀 공백을 추가합니다. 사용자 에이전트 스타일시트에는 다음 규칙이 포함되어야 합니다:

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

<mfrac> 요소에 흐름 내 자식이 둘보다 적거나 많으면 레이아웃 알고리즘은 mrow 요소와 같습니다. 그렇지 않으면 첫 번째 흐름 내 자식을 분자, 두 번째 흐름 내 자식을 분모라고 하며 레이아웃 알고리즘은 아래에서 설명합니다.

참고
실제로 <mfrac> 요소에는 흐름 내인 두 자식이 있습니다. 따라서 CSS 규칙은 기본적으로 분자와 분모에 대해 scriptlevel, displaystyle 및 math-shift 변경을 수행합니다.
3.3.2.1 선 두께가 0이 아닌 분수

분수선 두께가 0이 아니면 <mfrac> 요소는 그림 12에 표시된 대로 레이아웃됩니다. 분수선은 <mfrac> 요소의 visibility가 visible인 경우에만 페인팅해야 합니다. 이 경우 분수선은 <mfrac> 요소의 color로 페인팅해야 합니다.

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

콘텐츠의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)는 분자 여백 박스의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)와 분모 여백 박스의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기) 중 최댓값입니다.

인라인 늘이기 크기 제약 또는 블록 늘이기 크기 제약이 있으면 분자도 동일한 늘이기 크기 제약으로 레이아웃하고, 그렇지 않으면 늘이기 크기 제약 없이 레이아웃합니다. 분모는 항상 늘이기 크기 제약 없이 레이아웃합니다.

수학 콘텐츠의 인라인 크기는 분자 여백 박스의 인라인 크기와 분모 여백 박스의 인라인 크기 중 최댓값입니다.

NumeratorShift는 다음 중 최댓값입니다:

DenominatorShift는 다음 중 최댓값입니다:

수학 콘텐츠의 라인 상승은 다음 중 최댓값입니다:

수학 콘텐츠의 라인 하강은 다음 중 최댓값입니다:

분자 (각각 분모)의 인라인 오프셋은 수학 콘텐츠의 인라인 크기의 절반 − 분자 여백 박스의 인라인 크기의 절반 (각각 분모 여백 박스의 인라인 크기의 절반)입니다.

분자 (각각 분모)의 알파벳 기준선은 알파벳 기준선에서 NumeratorShift (각각 DenominatorShift) 거리만큼 라인 위쪽 (각각 라인 아래쪽) 방향으로 이동합니다.

수학 콘텐츠 박스는 콘텐츠 박스 안에 두 박스의 블록 시작 가장자리가 정렬되고 해당 가장자리의 중앙이 같은 위치에 오도록 배치합니다.

분수선의 인라인 크기는 콘텐츠 박스의 인라인 크기이며, 해당 인라인 시작 가장자리는 콘텐츠 박스의 인라인 시작 가장자리와 정렬됩니다. 분수선의 중앙은 수학 콘텐츠 박스의 알파벳 기준선에서 AxisHeight 거리만큼 라인 위쪽 방향으로 이동합니다. 해당 블록 크기는 분수선 두께입니다.

3.3.2.2 선 두께가 0인 분수

분수선 두께가 0이면 <mfrac> 요소는 대신 그림 13에 표시된 대로 레이아웃됩니다.

그림 13 분수선이 없는 <mfrac> 요소의 박스 모델

수학 콘텐츠의 최소 콘텐츠 인라인 크기, 최대 콘텐츠 인라인 크기 및 인라인 크기는 3.3.2.1 선 두께가 0이 아닌 분수와 동일하게 계산합니다.

인라인 늘이기 크기 제약 또는 블록 늘이기 크기 제약이 있으면 분자도 동일한 늘이기 크기 제약으로 레이아웃하고, 그렇지 않으면 늘이기 크기 제약 없이 레이아웃합니다. 분모는 항상 늘이기 크기 제약 없이 레이아웃합니다.

math-style이 compact이면 TopShift 및 BottomShift를 각각 StackTopShiftUp 및 StackBottomShiftDown으로 설정합니다. 그렇지 않으면 math-style은 normal이며 각각 StackTopDisplayStyleShiftUp 및 StackBottomDisplayStyleShiftDown으로 설정합니다.

Gap은 (BottomShift − 분모 여백 박스의 잉크 라인 상승) + (TopShift − 분자 여백 박스의 잉크 라인 하강)으로 정의됩니다. math-style이 compact이면 GapMin은 StackGapMin이고, 그렇지 않으면 math-style은 normal이며 StackDisplayStyleGapMin입니다. Δ = GapMin − Gap이 양수이면 TopShift 및 BottomShift를 각각 Δ/2 및 Δ − Δ/2만큼 증가시킵니다.

수학 콘텐츠의 라인 상승은 다음 중 최댓값입니다:

수학 콘텐츠의 라인 하강은 다음 중 최댓값입니다:

분자와 분모의 인라인 오프셋은 3.3.2.1 선 두께가 0이 아닌 분수와 동일하게 계산합니다.

분자 (각각 분모)의 알파벳 기준선은 알파벳 기준선에서 TopShift (각각 −BottomShift) 거리만큼 라인 위쪽 (각각 라인 아래쪽) 방향으로 이동합니다.

수학 콘텐츠 박스는 콘텐츠 박스 안에 두 박스의 블록 시작 가장자리가 정렬되고 해당 가장자리의 중앙이 같은 위치에 오도록 배치합니다.

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

<msqrt> 및 <mroot> 요소는 math-shift를 compact로 설정합니다. <mroot> 요소는 첫 번째 자식을 제외한 모든 자식에서 scriptlevel을 2 증가시키고, displaystyle을 "false"로 설정합니다. 이 동작을 구현하기 위해 사용자 에이전트 스타일시트에는 다음 규칙이 포함되어야 합니다:

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

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

<mroot>에 흐름 내 자식이 둘보다 적거나 많으면 레이아웃 알고리즘은 mrow 요소와 같습니다. 그렇지 않으면 첫 번째 흐름 내 자식을 mroot 밑, 두 번째 흐름 내 자식을 mroot 지수라고 하며 레이아웃 알고리즘은 아래에서 설명합니다.

참고
실제로 <mroot> 요소에는 흐름 내인 두 자식이 있습니다. 따라서 CSS 규칙은 기본적으로 지수에 대해 scriptlevel 및 displaystyle 변경을 수행합니다.

<msqrt> 요소는 익명 <mrow> 박스를 생성하며, 이를 msqrt 밑이라고 합니다.

3.3.3.1 근호 기호

근호 기호는 <msqrt> 또는 <mroot> 요소의 visibility가 visible인 경우에만 페인팅해야 합니다. 이 경우 근호 기호는 해당 요소의 color로 페인팅해야 합니다.

근호 글리프는 문자 U+221A SQUARE ROOT에 대해 얻은 글리프입니다.

근호 간격은 math-style이 compact이면 RadicalVerticalGap이고, math-style이 normal이면 RadicalDisplayStyleVerticalGap입니다.

늘일 수 있는 근호 글리프의 목표 크기는 RadicalRuleThickness, 근호 간격 및 밑의 잉크 높이의 합입니다.

근호 글리프의 박스 메트릭과 근호 본체의 페인팅은 근호 글리프의 목표 크기에 해당하는 블록 차원으로 늘일 수 있는 글리프를 셰이핑하는 알고리즘에서 제공합니다.

3.3.3.2 제곱근

<msqrt> 요소는 그림 14에 표시된 대로 레이아웃됩니다.

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

수학 콘텐츠의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)는 근호 글리프에 대한 블록 축을 따라 늘어난 글리프의 선호 인라인 크기와 msqrt 밑 여백 박스의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)의 합입니다.

수학 콘텐츠의 인라인 크기는 근호 글리프의 박스 메트릭의 어드밴스 너비와 msqrt 밑 여백 박스의 인라인 크기의 합입니다.

수학 콘텐츠의 라인 상승은 다음 중 최댓값입니다:

수학 콘텐츠의 라인 하강은 다음 중 최댓값입니다:

윗줄의 인라인 크기는 msqrt 밑 여백 박스의 인라인 크기입니다. msqrt 밑과 윗줄의 인라인 오프셋도 서로 같으며, 근호 글리프의 박스 메트릭의 너비와 같습니다.

msqrt 밑의 알파벳 기준선은 알파벳 기준선과 정렬됩니다. 윗줄의 블록 크기는 RadicalRuleThickness입니다. 해당 세로 중앙은 알파벳 기준선에서 라인 위쪽 방향으로 수학 콘텐츠의 라인 상승 − RadicalExtraAscender − RadicalRuleThickness의 절반만큼 이동합니다.

마지막으로 근호 본체의 페인팅은 다음과 같이 수행합니다:

3.3.3.3 지수가 있는 근

<mroot> 요소는 그림 15에 표시된 대로 레이아웃됩니다. 먼저 mroot 지수를 무시하고, mroot 밑과 근호 글리프를 3.3.3.2 제곱근과 동일한 알고리즘을 사용하여 그림 14에 표시된 대로 레이아웃하여 여백 박스 B(녹색으로 표시)를 생성합니다.

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

수학 콘텐츠의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)는 max(0, RadicalKernBeforeDegree), mroot 지수 여백 박스의 최소 콘텐츠 인라인 크기 (각각 mroot 지수의 최대 콘텐츠 인라인 크기), max(−최소 콘텐츠 인라인 크기, RadicalKernAfterDegree) (각각 max(−mroot 지수 여백 박스의 최대 콘텐츠 인라인 크기, RadicalKernAfterDegree)), 그리고 B의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)의 합입니다.

동일한 제한을 사용하여 AdjustedRadicalKernBeforeDegree 및 AdjustedRadicalKernAfterDegree는 각각 max(0, RadicalKernBeforeDegree)와 max(−지수 여백 박스의 인라인 크기, RadicalKernAfterDegree)로 정의됩니다.

수학 콘텐츠의 인라인 크기는 AdjustedRadicalKernBeforeDegree, 지수 여백 박스의 인라인 크기, AdjustedRadicalKernAfterDegree 및 B의 인라인 크기의 합입니다.

수학 콘텐츠의 라인 상승은 다음 중 최댓값입니다:

수학 콘텐츠의 라인 하강은 다음 중 최댓값입니다:

지수의 인라인 오프셋은 AdjustedRadicalKernBeforeDegree입니다. mroot 밑의 inline-offset은 이 값 + 지수 여백 박스의 인라인 크기입니다.

B의 알파벳 기준선은 알파벳 기준선과 정렬됩니다. 지수의 알파벳 기준선은 라인 아래쪽 가장자리에서 RadicalDegreeBottomRaisePercent × B의 블록 크기 + 지수 여백 박스의 라인 하강 거리만큼 떨어져 있습니다.

참고
일반적으로 근의 지수 앞의 커닝은 양수이고 그 뒤의 커닝은 음수입니다. 즉 근 요소에는 약간의 인라인 시작 공백이 생기고 근의 지수는 근호 본체와 겹칩니다.

3.3.4 스타일 변경 <mstyle>

역사적으로 mstyle 요소는 콘텐츠의 렌더링에 영향을 주는 스타일 변경을 수행하기 위해 도입되었습니다.

<mstyle> 요소는 2.1.3 전역 속성에 설명된 속성을 허용합니다. 레이아웃 알고리즘은 mrow 요소와 같습니다.

참고
<mstyle>은 전체 MathML과의 호환성을 위해 구현됩니다. MathML Core만을 대상으로 하는 작성자는 스타일링에 CSS를 사용하는 것이 권장됩니다.

다음 예에서는 mstyle을 사용하여 scriptlevel 및 displaystyle을 설정합니다. 이것이 각각 자손의 글꼴 크기 및 아래 첨자 배치에 영향을 주는 것을 확인할 수 있습니다. MathML Core에서는 대신 mrow 요소를 사용해도 됩니다.

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

3.3.5 오류 메시지 <merror>

merror 요소는 콘텐츠를 ”오류 메시지”로 표시합니다. 이 요소의 목적은 다른 입력으로부터 MathML을 생성하는 프로그램이 입력의 구문 오류를 보고할 수 있는 표준 방법을 제공하는 것입니다.

다음 예에서는 merror를 사용하여 일부 LaTeX와 유사한 입력의 구문 분석 오류를 나타냅니다:

<math>
  <mfrac>
    <merror>
      <mtext>구문 오류: \frac{1}</mtext>
    </merror>
    <mn>3</mn>
  </mfrac>
</math>
merror 예제

<merror> 요소는 2.1.3 전역 속성에 설명된 속성을 허용합니다. 레이아웃 알고리즘은 mrow 요소와 같습니다. 오류 메시지를 시각적으로 강조하기 위해 사용자 에이전트 스타일시트에는 다음 규칙이 포함되어야 합니다:

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

3.3.6 콘텐츠 주변 공백 조정 <mpadded>

mpadded 요소는 흐름 내 자식 콘텐츠와 동일하게 렌더링되지만, <mpadded>의 속성에 따라 콘텐츠의 크기와 상대적 배치 지점이 수정됩니다.

<mpadded> 요소는 2.1.3 전역 속성에 설명된 속성뿐만 아니라 다음 속성도 허용합니다:

width, height, depth, lspace 및 voffset이 존재하는 경우 유효한 <length-percentage> 값을 가져야 합니다.

다음 예에서는 mpadded를 사용하여 분수 주위의 간격을 조정합니다 (이를 시각화하기 위해 파란색 배경을 사용합니다). 속성이 없으면 mrow처럼 동작하지만, 속성을 사용하면 박스의 크기 (width, height, depth)와 해당 박스 내 분수의 위치 (lspace 및 voffset)를 지정할 수 있습니다.

<math>
  <mrow>
    <mn>1</mn>
    <mpadded style="background: lightblue;">
      <mfrac>
        <mn>23456</mn>
        <mn>78</mn>
      </mfrac>
    </mpadded>
    <mn>9</mn>
  </mrow>
  <mo>+</mo>
  <mrow>
    <mn>1</mn>
    <mpadded lspace="2em" voffset="-1em" height="1em" depth="3em" width="7em"
             style="background: lightblue;">
      <mfrac>
        <mn>23456</mn>
        <mn>78</mn>
      </mfrac>
    </mpadded>
    <mn>9</mn>
  </mrow>
</math>
mpadded 예제
3.3.6.1 내부 박스 및 요청된 매개변수

mpadded 요소는 익명 <mrow> 박스를 생성하며, 이를 mpadded 내부 박스라고 합니다. 이 박스에는 내부 인라인 크기, 내부 라인 상승 및 내부 라인 하강이라는 매개변수가 있습니다.

요청된 <mpadded> 매개변수는 다음과 같이 결정합니다:

  • 요청된 width는 width 속성의 해석된 값입니다. width 속성이 존재하고 유효하며 백분율이 아니면 해당 속성을 요소의 width 속성을 해당 값으로 설정하는 프레젠테이션 힌트로 사용합니다.
  • height 속성이 없거나 유효하지 않거나 백분율이면 요청된 height는 내부 라인 상승입니다. 그렇지 않으면 요청된 height는 height 속성의 해석된 값이며, 음수 값은 0으로 제한합니다.
  • depth 속성이 없거나 유효하지 않거나 백분율이면 요청된 depth는 내부 라인 상승입니다. 그렇지 않으면 요청된 depth는 depth 속성의 해석된 값이며, 음수 값은 0으로 제한합니다.
  • lspace 속성이 없거나 유효하지 않거나 백분율이면 요청된 lspace는 0입니다. 그렇지 않으면 요청된 lspace는 lspace 속성의 해석된 값이며, 음수 값은 0으로 제한합니다.
  • voffset 속성이 없거나 유효하지 않거나 백분율이면 요청된 voffset은 0입니다. 그렇지 않으면 요청된 voffset은 voffset 속성의 해석된 값입니다.
    참고
    음수 voffset 값은 0으로 제한하지 않습니다.
3.3.6.2 <mpadded>의 레이아웃

<mpadded> 요소의 계산된 display 속성이 block math 또는 inline math와 같지 않으면 해당 값이 설명된 CSS 명세에 따라 레이아웃됩니다. 그렇지 않으면 그림 16에 표시된 대로 레이아웃됩니다.

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

수학 콘텐츠의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)는 3.3.6.1 내부 박스 및 요청된 매개변수에서 계산한 요청된 width이지만, "내부 인라인 크기" 대신 mpadded 내부 박스의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)를 사용합니다.

수학 콘텐츠의 인라인 크기는 3.3.6.1 내부 박스 및 요청된 매개변수에서 계산한 요청된 width입니다.

수학 콘텐츠의 라인 상승은 요청된 height입니다. 수학 콘텐츠의 라인 하강은 요청된 depth입니다.

mpadded 내부 박스는 해당 알파벳 기준선이 알파벳 기준선에서 요청된 voffset만큼 라인 위쪽 방향으로 이동하도록 배치합니다.

3.3.7 부분 표현식을 보이지 않게 하기 <mphantom>

역사적으로 mphantom 요소는 콘텐츠를 보이지 않게 렌더링하되, 콘텐츠가 정상적으로 렌더링되었을 때 갖게 될 알파벳 기준선 위치를 포함하여 동일한 메트릭 크기와 기타 치수를 유지하도록 하기 위해 도입되었습니다.

다음 예에서는 mphantom을 사용하여 분수의 분자와 분모에서 서로 대응하는 부분이 정렬되도록 합니다:

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

<mphantom> 요소는 2.1.3 전역 속성에 설명된 속성을 허용합니다. 레이아웃 알고리즘은 mrow 요소와 같습니다. 콘텐츠를 숨기기 위해 사용자 에이전트 스타일시트에는 다음 규칙이 포함되어야 합니다:

mphantom {
  visibility: hidden;
}
참고
<mphantom>은 전체 MathML과의 호환성을 위해 구현됩니다. MathML Core만을 대상으로 하는 작성자는 스타일링에 CSS를 사용하는 것이 권장됩니다.

3.4 스크립트 및 극한 스키마

이 절에서 설명하는 요소는 밑 주위에 하나 이상의 스크립트를 배치합니다. 기호에 다양한 종류의 스크립트와 장식을 부착하는 것은 수학에서 매우 일반적인 표기 방식입니다. 순수하게 시각적인 레이아웃만을 위해서라면, 하나의 범용 요소만으로도 주어진 밑 주위의 전통적인 모든 스크립트 위치에 스크립트와 장식을 배치하기에 충분할 수 있습니다. 그러나 일반적인 표기법의 추상 구조를 더 잘 표현하기 위해 MathML은 보다 특수화된 여러 스크립트 요소를 제공합니다.

아래 첨자/위 첨자 요소 외에도 MathML에는 밑의 위와 아래에 스크립트를 배치하는 위 스크립트 및 아래 스크립트 요소가 있습니다. 이러한 요소는 큰 연산자에 극한을 배치하거나 밑의 위나 아래에 악센트와 선을 배치하는 데 사용할 수 있습니다.

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

msub, msup 및 msubsup 요소는 MathML 표현식에 아래 첨자와 위 첨자를 부착하는 데 사용됩니다. 이 요소들은 2.1.3 전역 속성에 설명된 속성을 허용합니다.

다음 예에서는 아래 첨자와 위 첨자의 기본적인 사용법을 보여 줍니다. 스크립트 내에서는 글꼴 크기가 자동으로 축소됩니다.

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

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

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

<msub> 요소에 흐름 내 자식이 둘보다 적거나 많으면 레이아웃 알고리즘은 mrow 요소와 같습니다. 그렇지 않으면 첫 번째 흐름 내 자식을 msub 밑, 두 번째 흐름 내 자식을 msub 아래 첨자라고 하며 레이아웃 알고리즘은 3.4.1.2 아래 첨자가 있는 밑에 설명되어 있습니다.

<msup> 요소에 흐름 내 자식이 둘보다 적거나 많으면 레이아웃 알고리즘은 mrow 요소와 같습니다. 그렇지 않으면 첫 번째 흐름 내 자식을 msup 밑, 두 번째 흐름 내 자식을 msup 위 첨자라고 하며 레이아웃 알고리즘은 3.4.1.3 위 첨자가 있는 밑에 설명되어 있습니다.

<msubsup> 요소에 흐름 내 자식이 셋보다 적거나 많으면 레이아웃 알고리즘은 mrow 요소와 같습니다. 그렇지 않으면 첫 번째 흐름 내 자식을 msubsup 밑, 두 번째 흐름 내 자식을 msubsup 아래 첨자, 세 번째 흐름 내 자식을 msubsup 위 첨자라고 하며 레이아웃 알고리즘은 3.4.1.4 아래 첨자와 위 첨자가 있는 밑에 설명되어 있습니다.

3.4.1.2 아래 첨자가 있는 밑

<msub> 요소는 그림 17에 표시된 대로 레이아웃됩니다. LargeOpItalicCorrection은 msub 밑이 largeop 속성을 가진 장식된 연산자이면 해당 이탤릭 보정이고, 그렇지 않으면 0입니다.

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

수학 콘텐츠의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)는 msub 밑 여백 박스의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기) − LargeOpItalicCorrection + msub 아래 첨자 여백 박스의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기) + SpaceAfterScript입니다.

인라인 늘이기 크기 제약 또는 블록 늘이기 크기 제약이 있으면 msub 밑도 동일한 늘이기 크기 제약으로 레이아웃하고, 그렇지 않으면 늘이기 크기 제약 없이 레이아웃합니다. 스크립트는 항상 늘이기 크기 제약 없이 레이아웃합니다.

수학 콘텐츠의 인라인 크기는 msub 밑 여백 박스의 인라인 크기 − LargeOpItalicCorrection + msub 아래 첨자 여백 박스의 인라인 크기 + SpaceAfterScript입니다.

SubShift는 다음 중 최댓값입니다:

수학 콘텐츠의 라인 상승은 다음 중 최댓값입니다:

수학 콘텐츠의 라인 하강은 다음 중 최댓값입니다:

msub 밑의 인라인 오프셋은 0이고, msub 아래 첨자의 인라인 오프셋은 msub 밑 여백 박스의 인라인 크기 − LargeOpItalicCorrection입니다.

msub 밑은 해당 알파벳 기준선이 알파벳 기준선과 일치하도록 배치합니다. msub 아래 첨자는 해당 알파벳 기준선이 알파벳 기준선에서 SubShift만큼 라인 아래쪽 방향으로 이동하도록 배치합니다.

3.4.1.3 위 첨자가 있는 밑

<msup> 요소는 그림 18에 표시된 대로 레이아웃됩니다. ItalicCorrection은 msup 밑이 largeop 속성을 가진 장식된 연산자가 아니면 해당 이탤릭 보정이고, 그렇지 않으면 0입니다.

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

수학 콘텐츠의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)는 msup 밑 여백 박스의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기) + ItalicCorrection + msup 위 첨자 여백 박스의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기) + SpaceAfterScript입니다.

인라인 늘이기 크기 제약 또는 블록 늘이기 크기 제약이 있으면 msup 밑도 동일한 늘이기 크기 제약으로 레이아웃하고, 그렇지 않으면 늘이기 크기 제약 없이 레이아웃합니다. 스크립트는 항상 늘이기 크기 제약 없이 레이아웃합니다.

수학 콘텐츠의 인라인 크기는 msup 밑 여백 박스의 인라인 크기 + ItalicCorrection + msup 위 첨자 여백 박스의 인라인 크기 + SpaceAfterScript입니다.

SuperShift는 다음 중 최댓값입니다:

수학 콘텐츠의 라인 상승은 다음 중 최댓값입니다:

수학 콘텐츠의 라인 하강은 다음 중 최댓값입니다:

msup 밑의 인라인 오프셋은 0이고, msup 위 첨자의 인라인 오프셋은 msup 밑 여백 박스의 인라인 크기 + ItalicCorrection입니다.

msup 밑은 해당 알파벳 기준선이 알파벳 기준선과 일치하도록 배치합니다. msup 위 첨자는 해당 알파벳 기준선이 알파벳 기준선에서 SuperShift만큼 라인 위쪽 방향으로 이동하도록 배치합니다.

3.4.1.4 아래 첨자와 위 첨자가 있는 밑

<msubsup> 요소는 그림 18에 표시된 대로 레이아웃됩니다. LargeOpItalicCorrection 및 SubShift는 3.4.1.2 아래 첨자가 있는 밑에서와 같이 설정합니다. ItalicCorrection 및 SuperShift는 3.4.1.3 위 첨자가 있는 밑에서와 같이 설정합니다.

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

수학 콘텐츠의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기 및 인라인 크기)는 3.4.1.2 아래 첨자가 있는 밑 및 3.4.1.3 위 첨자가 있는 밑에서 계산된 수학 콘텐츠의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기 및 인라인 크기) 중 최댓값입니다.

인라인 늘이기 크기 제약 또는 블록 늘이기 크기 제약이 있으면 msubsup 밑도 동일한 늘이기 크기 제약으로 레이아웃하고, 그렇지 않으면 늘이기 크기 제약 없이 레이아웃합니다. 스크립트는 항상 늘이기 크기 제약 없이 레이아웃합니다.

인라인 늘이기 크기 제약 또는 블록 늘이기 크기 제약이 있으면 msubsup 밑도 동일한 늘이기 크기 제약으로 레이아웃하고, 그렇지 않으면 늘이기 크기 제약 없이 레이아웃합니다. 스크립트는 항상 늘이기 크기 제약 없이 레이아웃합니다.

SubSuperGap은 두 스크립트 사이의 블록 축 방향 간격이며, (SubShift − msubsup 아래 첨자 여백 박스의 잉크 라인 상승) + (SuperShift − msubsup 위 첨자 여백 박스의 잉크 라인 하강)으로 정의됩니다. SubSuperGap이 최소한 SubSuperscriptGapMin 이상이 아니면 이 조건을 충족하도록 다음 단계를 수행합니다:

  1. Δ를 SuperscriptBottomMaxWithSubscript − (SuperShift − msubsup 위 첨자 여백 박스의 잉크 라인 하강)으로 둡니다. Δ > 0이면 Δ를 Δ와 SubSuperscriptGapMin − SubSuperGap 중 최솟값으로 설정하고 SuperShift(따라서 SubSuperGap도)를 Δ만큼 증가시킵니다.
  2. Δ를 SubSuperscriptGapMin − SubSuperGap으로 둡니다. Δ > 0이면 SubscriptShift(따라서 SubSuperGap도)를 Δ만큼 증가시킵니다.

수학 콘텐츠의 잉크 라인 상승 (각각 라인 상승, 잉크 라인 하강, 라인 하강)은 위에서 조정된 SubShift 및 SuperShift 값을 사용하여 3.4.1.2 아래 첨자가 있는 밑과 3.4.1.3 위 첨자가 있는 밑에서 계산된 수학 콘텐츠의 잉크 라인 상승 (각각 라인 상승, 잉크 라인 하강, 라인 하강) 중 최댓값으로 설정합니다.

msubsup 밑과 스크립트의 인라인 오프셋 및 블록 오프셋은 3.4.1.2 아래 첨자가 있는 밑과 3.4.1.3 위 첨자가 있는 밑에 설명된 것과 동일하게 배치합니다.

참고

msubsup 아래 첨자 (각각 msubsup 위 첨자)가 빈 박스인 경우에도 <msubsup>은 SubSuperGap에 대한 추가 제약 때문에 일반적으로 3.4.1.3 위 첨자가 있는 밑 (각각 3.4.1.2 아래 첨자가 있는 밑)과 동일하게 렌더링되지 않습니다. 또한 빈 msubsup 아래 첨자 (각각 msubsup 위 첨자)를 배치하면 전체 크기도 변경될 수 있습니다.

알고리즘을 단순하게 유지하기 위해 빈 스크립트를 특별한 방식으로 처리하지 않습니다.

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

munder, mover 및 munderover 요소는 MathML 표현식의 아래나 위에 배치되는 악센트 또는 극한을 부착하는 데 사용됩니다.

<munderover> 요소는 2.1.3 전역 속성에 설명된 속성뿐만 아니라 다음 속성도 허용합니다:

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

accent, accentunder 속성이 존재하는 경우 그 값은 불리언이어야 합니다. 이러한 속성이 없거나 유효하지 않으면 false와 같은 것으로 처리합니다. 사용자 에이전트는 3.4.4 스크립트에서의 displaystyle, scriptlevel 및 math-shift에 설명된 대로 이를 구현해야 합니다.

다음 예에서는 아래 스크립트 및 위 스크립트의 기본 사용법을 보여 줍니다. 악센트로 사용되는 경우를 제외하면 스크립트 내에서 글꼴 크기가 자동으로 축소됩니다.

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

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

3.4.2.1 <munder>, <mover>, <munderover>의 자식

<munder> 요소에 흐름 내 자식이 둘보다 적거나 많으면 레이아웃 알고리즘은 mrow 요소와 같습니다. 그렇지 않으면 첫 번째 흐름 내 자식을 munder 밑, 두 번째 흐름 내 자식을 munder 아래 스크립트라고 합니다.

<mover> 요소에 흐름 내 자식이 둘보다 적거나 많으면 레이아웃 알고리즘은 mrow 요소와 같습니다. 그렇지 않으면 첫 번째 흐름 내 자식을 mover 밑, 두 번째 흐름 내 자식을 mover 위 스크립트라고 합니다.

<munderover> 요소에 흐름 내 자식이 셋보다 적거나 많으면 레이아웃 알고리즘은 mrow 요소와 같습니다. 그렇지 않으면 첫 번째 흐름 내 자식을 munderover 밑, 두 번째 흐름 내 자식을 munderover 아래 스크립트, 세 번째 흐름 내 자식을 munderover 위 스크립트라고 합니다.

<munder>, <mover> 또는 <munderover> 요소의 계산된 math-style 속성이 compact이고, 해당 밑이 movablelimits 속성을 가진 장식된 연산자이면, 각각의 레이아웃 알고리즘은 3.4.1.2 아래 첨자가 있는 밑, 3.4.1.3 위 첨자가 있는 밑 및 3.4.1.4 아래 첨자와 위 첨자가 있는 밑에서 <msub>, <msup> 및 <msubsup>에 대해 설명한 것과 같습니다.

그렇지 않으면 <munder>, <mover> 및 <munderover>의 레이아웃 알고리즘은 각각 3.4.2.3 아래 스크립트가 있는 밑, 3.4.2.4 위 스크립트가 있는 밑 및 3.4.2.5 아래 스크립트와 위 스크립트가 있는 밑에 설명되어 있습니다.

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

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

  1. 인라인 늘이기 크기 제약 또는 블록 늘이기 크기 제약이 있으면 레이아웃 중인 요소는 장식된 연산자입니다. 밑을 동일한 늘이기 크기 제약으로 레이아웃합니다.
  2. 아직 레이아웃되지 않은 흐름 내 자식 목록을 stretchy 속성과 인라인 늘이기 축을 가진 장식된 연산자를 포함하는 첫 번째 목록 LToStretch와 두 번째 목록 LNotToStretch로 나눕니다.
  3. LNotToStretch의 모든 항목을 늘이기 크기 제약 없이 레이아웃합니다. LToStretch가 비어 있으면 중지합니다. LNotToStretch가 비어 있으면 LToStretch의 모든 항목을 인라인 늘이기 크기 제약 0으로 레이아웃합니다.
  4. 목표 크기 T를 이전 단계에서 레이아웃된 자식 박스의 여백 박스 중 최대 인라인 크기로 계산합니다.
  5. LToStretch의 모든 요소를 인라인 늘이기 크기 제약 T로 레이아웃하거나 다시 레이아웃합니다.
3.4.2.3 아래 스크립트가 있는 밑

<munder> 요소는 그림 20에 표시된 대로 레이아웃됩니다. LargeOpItalicCorrection은 munder 밑이 largeop 속성을 가진 장식된 연산자이면 해당 이탤릭 보정이고, 그렇지 않으면 0입니다.

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

수학 콘텐츠의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)는 아래의 수학 콘텐츠 인라인 크기와 같은 방식으로 계산하되, munder 밑 여백 박스와 munder 아래 스크립트 여백 박스의 인라인 크기를 각각 munder 밑 여백 박스와 munder 아래 스크립트 여백 박스의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)로 바꿉니다.

흐름 내 자식은 인라인 축을 따라 연산자를 늘이는 알고리즘을 사용하여 레이아웃합니다.

수학 콘텐츠의 인라인 크기는 다음 두 값 사이의 절댓값 차이를 구하여 계산합니다:

위 두 번째 항목에서 계산된 최솟값이 m이면 munder 밑의 인라인 오프셋은 −m − 밑 여백 박스 인라인 크기의 절반입니다. munder 아래 스크립트의 인라인 오프셋은 −m − munder 아래 스크립트 여백 박스 인라인 크기의 절반 − LargeOpItalicCorrection의 절반입니다.

매개변수 UnderShift 및 UnderExtraDescender는 다음 세 경우를 순서대로 고려하여 결정합니다:

  1. munder 밑이 largeop 속성을 가진 장식된 연산자입니다. UnderShift는 다음 중 최댓값입니다:

    UnderExtraDescender는 0입니다.

  2. munder 밑이 stretchy 속성과 인라인 늘이기 축을 가진 장식된 연산자입니다. UnderShift는 다음 중 최댓값입니다:

    UnderExtraDescender는 0입니다.
  3. 그렇지 않으면 accentunder 속성이 true와 ASCII 대소문자를 구분하지 않고 일치하지 않으면 UnderShift는 UnderbarVerticalGap과 같고, 그렇지 않으면 0입니다. UnderExtraAscender는 UnderbarExtraDescender입니다.

수학 콘텐츠의 라인 상승은 다음 중 최댓값입니다:

수학 콘텐츠의 라인 하강은 다음 중 최댓값입니다:

munder 밑의 알파벳 기준선은 알파벳 기준선과 정렬됩니다. munder 아래 스크립트의 알파벳 기준선은 알파벳 기준선에서 라인 아래쪽 방향으로 munder 밑 여백 박스의 잉크 라인 하강 + UnderShift만큼 이동합니다.

수학 콘텐츠 박스는 콘텐츠 박스 안에 두 박스의 블록 시작 가장자리가 정렬되고 해당 가장자리의 중앙이 같은 위치에 오도록 배치합니다.

3.4.2.4 위 스크립트가 있는 밑

<mover> 요소는 그림 21에 표시된 대로 레이아웃됩니다. LargeOpItalicCorrection은 mover 밑이 largeop 속성을 가진 장식된 연산자이면 해당 이탤릭 보정이고, 그렇지 않으면 0입니다.

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

수학 콘텐츠의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)는 아래의 수학 콘텐츠 인라인 크기와 같은 방식으로 계산하되, mover 밑 여백 박스와 mover 위 스크립트 여백 박스의 인라인 크기를 각각 mover 밑 여백 박스와 mover 위 스크립트 여백 박스의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)로 바꿉니다.

흐름 내 자식은 인라인 축을 따라 연산자를 늘이는 알고리즘을 사용하여 레이아웃합니다.

TopAccentAttachment는 mover 위 스크립트의 상단 악센트 연결점이며, 정의되지 않은 경우 mover 위 스크립트 여백 박스 인라인 크기의 절반입니다.

수학 콘텐츠의 인라인 크기는 레이아웃에 인라인 축을 따라 연산자를 늘이는 알고리즘을 적용하고, 다음 두 값 사이의 절댓값 차이를 구하여 계산합니다:

위 두 번째 항목에서 계산된 최솟값이 m이면 mover 밑의 인라인 오프셋은 −m − 밑 여백 인라인 크기의 절반입니다. mover 위 스크립트의 인라인 오프셋은 −m − mover 위 스크립트 여백 박스의 인라인 크기 절반 + LargeOpItalicCorrection의 절반입니다.

매개변수 OverShift 및 OverExtraDescender는 다음 세 경우를 순서대로 고려하여 결정합니다:

  1. mover 밑이 largeop 속성을 가진 장식된 연산자입니다. OverShift는 다음 중 최댓값입니다:

    OverExtraAscender는 0입니다.

  2. mover 밑이 stretchy 속성과 인라인 늘이기 축을 가진 장식된 연산자입니다. OverShift는 다음 중 최댓값입니다:

    OverExtraDescender는 0입니다.
  3. 그렇지 않으면 OverShift는 다음과 같습니다:

    1. accent 속성이 true와 ASCII 대소문자를 구분하지 않고 일치하지 않으면 OverbarVerticalGap.
    2. 또는 AccentBaseHeight − mover 밑 여백 박스의 라인 상승이 음수가 아니면 이 차이.
    3. 그렇지 않으면 0.

    OverExtraAscender는 OverbarExtraAscender입니다.

참고
악센트 위 스크립트와 라인 상승이 AccentBaseHeight 이하인 밑의 경우, [OPEN-FONT-FORMAT] [TEXBOOK]의 규칙은 실제로 위 스크립트와 밑의 알파벳 기준선을 정렬하는 것입니다. 이는 악센트 글리프의 잉크 아래쪽이 해당 알파벳 기준선보다 대략 AccentBaseHeight만큼 위에 오도록 설계되었다고 가정합니다. 따라서 이전 규칙은 밑과의 충돌을 피하면서도 모든 위 스크립트의 아래쪽이 정렬되도록 보장합니다. 그러나 MathML에서는 임의의 악센트 위 스크립트를 사용할 수 있으므로 위에서는 더 일반적이고 단순한 규칙을 제공합니다: 위 스크립트의 아래쪽이 밑의 알파벳 기준선보다 최소한 AccentBaseHeight만큼 위에 오도록 합니다.

수학 콘텐츠의 라인 상승은 다음 중 최댓값입니다:

수학 콘텐츠의 라인 하강은 다음 중 최댓값입니다:

mover 밑의 알파벳 기준선은 알파벳 기준선과 정렬됩니다. mover 위 스크립트의 알파벳 기준선은 알파벳 기준선에서 라인 위쪽 방향으로 밑의 잉크 라인 상승 + OverShift만큼 이동합니다.

수학 콘텐츠 박스는 콘텐츠 박스 안에 두 박스의 블록 시작 가장자리가 정렬되고 해당 가장자리의 중앙이 같은 위치에 오도록 배치합니다.

3.4.2.5 아래 스크립트와 위 스크립트가 있는 밑

<munderover>의 일반적인 레이아웃은 그림 22에 표시되어 있습니다. LargeOpItalicCorrection, UnderShift, UnderExtraDescender, OverShift, OverExtraDescender 매개변수는 3.4.2.3 아래 스크립트가 있는 밑 및 3.4.2.4 위 스크립트가 있는 밑에서와 동일하게 계산합니다.

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

수학 콘텐츠의 최소 콘텐츠 인라인 크기, 최대 콘텐츠 인라인 크기 및 인라인 크기는 최대 인라인 오프셋과 최소 인라인 오프셋의 절댓값 차이로 계산합니다. 이러한 극값은 3.4.2.3 아래 스크립트가 있는 밑 및 3.4.2.4 위 스크립트가 있는 밑에서 계산한 해당 극값 중 극값을 취하여 계산합니다. munderover 밑, munderover 아래 스크립트 및 munderover 위 스크립트의 인라인 오프셋은 이 절들에서와 같이 계산하되, 새로운 최솟값 m(해당 최솟값들의 최솟값)을 사용합니다.

이 절들과 마찬가지로 흐름 내 자식은 인라인 축을 따라 연산자를 늘이는 알고리즘을 사용하여 레이아웃합니다.

수학 콘텐츠의 라인 상승 및 라인 하강도 3.4.2.3 아래 스크립트가 있는 밑 및 3.4.2.4 위 스크립트가 있는 밑에서 계산한 극값 중 극값을 취하여 계산합니다.

마지막으로 munderover 밑, munderover 아래 스크립트 및 munderover 위 스크립트의 알파벳 기준선은 3.4.2.3 아래 스크립트가 있는 밑 및 3.4.2.4 위 스크립트가 있는 밑에서와 같이 계산합니다.

수학 콘텐츠 박스는 콘텐츠 박스 안에 두 박스의 블록 시작 가장자리가 정렬되고 해당 가장자리의 중앙이 같은 위치에 오도록 배치합니다.

참고

아래 스크립트(각각 위 스크립트)가 빈 박스이면 밑과 위 스크립트(각각 아래 스크립트)는 3.4.2.4 위 스크립트가 있는 밑 (각각 3.4.2.3 아래 스크립트가 있는 밑)과 유사하게 레이아웃되지만, 빈 아래 스크립트 (각각 위 스크립트)의 위치 때문에 추가 공간이 생길 수 있습니다. 알고리즘을 단순하게 유지하기 위해 빈 스크립트를 특별한 방식으로 처리하지 않습니다.

3.4.3 앞 스크립트 및 텐서 인덱스 <mmultiscripts>

앞 아래 첨자와 텐서 표기법은 mmultiscripts 요소로 나타냅니다. mprescripts 요소는 뒤 스크립트와 앞 스크립트 사이의 분리자로 사용됩니다. 이 두 요소는 2.1.3 전역 속성에 설명된 속성을 허용합니다.

다음 예에서는 mprescripts가 포함된 앞 스크립트와 뒤 스크립트의 기본 사용법을 보여 줍니다. 스크립트가 렌더링되지 않는 위치에는 빈 mrow 요소를 사용합니다. 스크립트 내에서는 글꼴 크기가 자동으로 축소됩니다.

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

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

<mprescripts> 요소는 mrow 요소로 레이아웃됩니다.

유효한 <mmultiscripts> 요소에는 다음 흐름 내 자식이 포함됩니다:

  • 첫 번째 흐름 내 자식은 mmultiscripts 밑이라고 하며, mprescripts 요소가 아닙니다.
  • 그 뒤에 짝수 개의 흐름 내 자식이 이어지며, 이를 mmultiscripts 뒤 스크립트라고 합니다. 이들 중 어느 것도 mprescripts 요소가 아닙니다. 이러한 스크립트는 아래 첨자, 위 첨자, 아래 첨자, 위 첨자, 아래 첨자, 위 첨자 등의 (비어 있을 수도 있는) 목록을 구성합니다. 연속된 각 아래 첨자, 위 첨자 자식 쌍을 아래 첨자/위 첨자 쌍이라고 합니다.
  • 선택적으로 그 뒤에 mprescripts 요소와 짝수 개의 흐름 내 자식이 이어질 수 있으며, 이를 mmultiscripts 앞 스크립트라고 합니다. 이들 중 어느 것도 mprescripts 요소가 아닙니다. 이러한 스크립트는 아래 첨자/위 첨자 쌍의 (비어 있을 수도 있는) 목록을 구성합니다.

<mmultiscripts> 요소가 유효하지 않으면 mrow 요소와 동일하게 레이아웃됩니다. 그렇지 않으면 3.4.3.1 앞 스크립트와 뒤 스크립트가 있는 밑에서와 같이 레이아웃 알고리즘을 수행합니다.

3.4.3.1 앞 스크립트와 뒤 스크립트가 있는 밑

<mmultiscripts> 요소는 그림 23에 표시된 대로 레이아웃됩니다. mmultiscripts 뒤 스크립트의 각 아래 첨자/위 첨자 쌍에 대해 ItalicCorrection과 LargeOpItalicCorrection은 3.4.1.2 아래 첨자가 있는 밑 및 3.4.1.3 위 첨자가 있는 밑에서와 같이 정의합니다.

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

수학 콘텐츠의 최소 콘텐츠 인라인 크기 (각각 최대 콘텐츠 인라인 크기)는 아래의 수학 콘텐츠 인라인 크기와 동일하게 계산하되, mmultiscripts 밑 여백 박스와 스크립트 여백 박스에 대해 "인라인 크기"를 "최소 콘텐츠 인라인 크기" (각각 "최대 콘텐츠 인라인 크기")로 바꿉니다.

인라인 늘이기 크기 제약 또는 블록 늘이기 크기 제약이 있으면 mmultiscripts 밑도 동일한 늘이기 크기 제약으로 레이아웃합니다. 그렇지 않으면 늘이기 크기 제약 없이 레이아웃합니다. 다른 요소는 항상 늘이기 크기 제약 없이 레이아웃합니다.

수학 콘텐츠의 인라인 크기는 다음 알고리즘으로 계산합니다:

  1. inline-offset을 0으로 설정합니다.
  2. mmultiscripts 앞 스크립트의 각 아래 첨자/위 첨자 쌍에 대해 inline-offset을 SpaceAfterScript + 다음 중 최댓값만큼 증가시킵니다:

  3. inline-offset을 mmultiscripts 밑 여백 박스의 인라인 크기만큼 증가시키고 inline-size를 inline-offset으로 설정합니다.
  4. mmultiscripts 뒤 스크립트의 각 아래 첨자/위 첨자 쌍에 대해 inline-size를 최소한 다음 값 이상이 되도록 수정합니다:

    inline-offset을 다음 중 최댓값만큼 증가시킵니다:

    inline-offset을 SpaceAfterScript만큼 증가시킵니다.

  5. inline-size를 반환합니다.

SubShift(각각 SuperShift)는 3.4.1.4 아래 첨자와 위 첨자가 있는 밑에 설명된 대로 각 아래 첨자/위 첨자 쌍의 모든 아래 첨자 이동량(각각 위 첨자 이동량) 중 최댓값을 취하여 계산합니다.

수학 콘텐츠의 라인 상승은 위에서 계산한 SubShift 및 SuperShift 값을 사용하여 3.4.1.4 아래 첨자와 위 첨자가 있는 밑에 설명된 대로 각 아래 첨자/위 첨자 쌍의 모든 라인 상승 중 최댓값을 취하여 계산합니다.

수학 콘텐츠의 라인 하강은 위에서 계산한 SubShift 및 SuperShift 값을 사용하여 3.4.1.4 아래 첨자와 위 첨자가 있는 밑에 설명된 대로 각 아래 첨자/위 첨자 쌍의 모든 라인 하강 중 최댓값을 취하여 계산합니다.

마지막으로 흐름 내 자식은 다음 알고리즘을 사용하여 배치합니다:

  1. inline-offset을 0으로 설정합니다.
  2. mmultiscripts 앞 스크립트의 각 아래 첨자/위 첨자 쌍에 대해:

    1. inline-offset을 SpaceAfterScript만큼 증가시킵니다.
    2. pair-inline-size를 다음 중 최댓값으로 설정합니다:
    3. 아래 첨자를 인라인 시작 위치 inline-offset + pair-inline-size − 아래 첨자 여백 박스의 인라인 크기에 배치합니다.
    4. 위 첨자를 인라인 시작 위치 inline-offset + pair-inline-size − 위 첨자 여백 박스의 인라인 크기에 배치합니다.
    5. 아래 첨자(각각 위 첨자)의 알파벳 기준선이 알파벳 기준선에서 SubShift(각각 SuperShift)만큼 라인 아래쪽(각각 라인 위쪽) 방향으로 이동하도록 배치합니다.
    6. inline-offset을 pair-inline-size만큼 증가시킵니다.
  3. mmultiscripts 밑과 <mprescripts> 박스를 인라인 오프셋 inline-offset에 배치하고, 해당 알파벳 기준선이 알파벳 기준선과 정렬되도록 합니다.
  4. mmultiscripts 뒤 스크립트의 각 아래 첨자/위 첨자 쌍에 대해:

    1. pair-inline-size를 다음 중 최댓값으로 설정합니다:
    2. 아래 첨자를 인라인 시작 위치 inline-offset − LargeOpItalicCorrection에 배치합니다.
    3. 위 첨자를 인라인 시작 위치 inline-offset + ItalicCorrection에 배치합니다.
    4. 아래 첨자(위 첨자)의 알파벳 기준선이 알파벳 기준선에서 SubShift(각각 SuperShift)만큼 라인 아래쪽(각각 라인 위쪽) 방향으로 이동하도록 배치합니다.
    5. inline-offset을 pair-inline-size만큼 증가시킵니다.
    6. inline-offset을 SpaceAfterScript만큼 증가시킵니다.
참고

mmultiscripts 뒤 스크립트의 아래 첨자/위 첨자 쌍이 하나뿐인 <mmultiscripts>는 동일한 흐름 내 자식을 가진 <msubsup>과 동일하게 레이아웃됩니다. 그러나 <msubsup>에 대해 언급했듯이, 추가로 아래 첨자(각각 위 첨자)가 빈 박스이면 <msub> (각각 <msup>) 요소와 반드시 동일하게 레이아웃되는 것은 아닙니다. 알고리즘을 단순하게 유지하기 위해 빈 스크립트를 특별한 방식으로 처리하지 않습니다.

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

모든 스크립트 요소에서 일반적인 원칙은 첫 번째 자식을 제외한 모든 자식 요소에서 displaystyle을 false로 설정하고 scriptlevel을 증가시키는 것입니다. 그러나 mover (각각 munderover) 요소의 accent 속성이 true와 ASCII 대소문자를 구분하지 않고 일치하면 두 번째 자식(각각 세 번째 자식) 내에서는 scriptlevel을 증가시키지 않습니다. 마찬가지로 mover 및 munderover 요소의 accentunder 속성이 true와 ASCII 대소문자를 구분하지 않고 일치하면 두 번째 자식 내에서는 scriptlevel을 증가시키지 않습니다.

<mmultiscripts>는 mprescripts 앞에 있는 짝수 위치의 자식과 mprescripts 뒤에 있는 홀수 위치의 자식에서 math-shift를 compact로 설정합니다. <msub> 및 <msubsup> 요소는 두 번째 자식에서 math-shift를 compact로 설정합니다. mover 및 munderover 요소의 accent 속성이 true와 ASCII 대소문자를 구분하지 않고 일치하면 첫 번째 자식 내에서도 math-shift를 compact로 설정합니다.

이 동작을 구현하기 위해 A. 사용자 에이전트 스타일시트에는 다음 스타일이 포함되어야 합니다:

msub > :not(:first-child),
msup > :not(:first-child),
msubsup > :not(:first-child),
mmultiscripts > :not(:first-child),
munder > :not(:first-child),
mover > :not(:first-child),
munderover > :not(:first-child) {
  math-depth: add(1);
  math-style: compact;
}
munder[accentunder="true" i] > :nth-child(2),
mover[accent="true" i] > :nth-child(2),
munderover[accentunder="true" i] > :nth-child(2),
munderover[accent="true" i] > :nth-child(3) {
  font-size: inherit;
}
msub > :nth-child(2),
msubsup > :nth-child(2),
mmultiscripts > :nth-child(even),
mmultiscripts > mprescripts ~ :nth-child(odd),
mover[accent="true" i] > :first-child,
munderover[accent="true" i] > :first-child {
  math-shift: compact;
}
mmultiscripts > mprescripts ~ :nth-child(even) {
  math-shift: inherit;
}
참고
실제로 이 절에서 설명한 MathML 요소의 모든 자식은 흐름 내에 있으며 <mprescripts>는 비어 있습니다. 따라서 CSS 규칙은 본질적으로 스크립트에 대해 displaystyle 및 scriptlevel을 자동으로 변경하고, 아래 첨자와 경우에 따라 밑에 대해 math-shift를 변경합니다.

3.5 표 형식 수학

행렬, 배열 및 기타 표와 유사한 수학 표기법은 mtable mtr mtd 요소를 사용하여 마크업합니다. 이러한 요소는 [HTML]의 table, tr 및 td 요소와 유사합니다.

다음 예에서는 표 형식 레이아웃을 사용하여 행렬을 작성하는 방법을 보여 줍니다. 행렬이 분수선과 등호의 중앙에 맞춰 세로로 중앙 정렬된다는 점에 유의하십시오.

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

3.5.1 표 또는 행렬 <mtable>

mtable은 inline-table로 레이아웃되며 displaystyle을 false로 설정합니다. 이러한 속성을 구현하기 위해 사용자 에이전트 스타일시트에는 다음 규칙이 포함되어야 합니다:

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

mtable 요소는 CSS table로 취급되며, 최소 콘텐츠 인라인 크기, 최대 콘텐츠 인라인 크기, 인라인 크기, 블록 크기, 첫 번째 기준선 집합 및 마지막 기준선 집합은 그에 따라 결정됩니다. 표의 중앙은 수학 축과 정렬됩니다.

<mtable>은 2.1.3 전역 속성에 설명된 속성을 허용합니다.

3.5.2 표 또는 행렬의 행 <mtr>

mtr은 table-row로 레이아웃됩니다. 이 동작을 구현하기 위해 사용자 에이전트 스타일시트에는 다음 규칙이 포함되어야 합니다:

mtr {
  display: table-row;
}

<mtr>은 2.1.3 전역 속성에 설명된 속성을 허용합니다.

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

mtd은 콘텐츠가 셀 안에서 중앙 정렬되고 기본 패딩이 적용된 table-cell로 레이아웃됩니다. 사용자 에이전트 스타일시트에는 다음 규칙이 포함되어야 합니다:

mtd {
  display: table-cell;
  /* 표 셀 내부의 중앙 정렬은 박스 정렬 속성에 의존해야 합니다.
     https://github.com/w3c/mathml-core/issues/156 참조 */
  text-align: center;
  padding: 0.5ex 0.4em;
}

<mtd>은 2.1.3 전역 속성에 설명된 속성뿐만 아니라 다음 속성도 허용합니다:

columnspan (각각 rowspan) 속성은 [HTML]의 <td> 요소에 있는 colspan (각각 rowspan) 속성과 동일한 구문 및 의미를 갖습니다. 특히 이러한 속성의 구문 분석은 행 처리 알고리즘에 설명된 대로 처리하되, 항상 "colspan"을 "columnspan"으로 읽습니다.

참고
[MathML3] 및 이전 버전에서 열 병합 속성의 이름은 columnspan이며, 하위 호환성을 위해 유지됩니다.

<mtd> 요소는 익명 <mrow> 박스를 생성합니다.

3.6 표현식 활성화

역사적으로 maction 요소는 동작을 표현식에 바인딩하기 위한 메커니즘을 제공합니다.

<maction> 요소는 2.1.3 전역 속성에 설명된 속성뿐만 아니라 다음 속성도 허용합니다:

이 명세는 actiontype 및 selection 속성에 고유한 관찰 가능한 동작을 정의하지 않습니다.

다음 예에서는 [MathML3]의 "toggle" 동작 유형을 보여 줍니다. 렌더러는 선택된 부분 표현식을 "3분의 1"부터 표시하기 시작하고, 선택된 부분 표현식을 클릭할 때마다 ("4분의 1", "2분의 1", "3분의 1" 등) 순환하여 표시합니다. 이는 MathML Core의 일부가 아니지만 JavaScript 및 CSS 폴리필을 사용하여 구현할 수 있습니다. 기본 동작은 단순히 첫 번째 자식을 렌더링하는 것입니다.

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

<maction> 요소의 레이아웃 알고리즘은 <mrow> 요소와 같습니다. 레거시 actiontype 값의 기본 동작인 첫 번째 자식 요소를 제외한 모든 자식 요소를 숨기기 위해 사용자 에이전트 스타일시트에는 다음 규칙이 포함되어야 합니다:

maction > :not(:first-child) {
  display: none;
}
참고
<maction>은 전체 MathML과의 호환성을 위해 구현됩니다. MathML Core만을 대상으로 하는 작성자는 사용자 정의 동작을 구현하기 위해 다른 HTML, CSS 및 JavaScript 메커니즘을 사용하는 것이 권장됩니다. 작성자는 [MathML3]에 정의된 maction 속성을 사용할 수 있습니다.

3.7 의미론 및 프레젠테이션

semantics 요소는 MathML 표현식에 주석을 연결하는 컨테이너 요소입니다. 일반적으로 <semantics> 요소의 첫 번째 자식 요소는 주석을 달 MathML 표현식이며, 이후의 자식 요소는 annotation 요소 안의 텍스트 주석 또는 annotation-xml 요소 안의 더 복잡한 마크업 주석을 나타냅니다.

다음 예에서는 분수 "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 예제

<semantics> 요소는 2.1.3 전역 속성에 설명된 속성을 허용합니다. 레이아웃 알고리즘은 mrow 요소와 같습니다. 주석이 달린 MathML 표현식만 렌더링하기 위해 사용자 에이전트 스타일시트에는 다음 규칙이 포함되어야 합니다:

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

<annotation-xml> 및 <annotation> 요소는 2.1.3 전역 속성에 설명된 속성뿐만 아니라 다음 속성도 허용합니다:

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

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

참고
작성자는 encoding 속성을 사용하여 HTML 통합 지점, 클립보드 복사, 대체 렌더링 등을 위한 주석을 구분할 수 있습니다. 특히 CSS를 사용하여 대체 주석을 렌더링할 수 있습니다. 예:
/* 주석이 달린 자식을 숨깁니다. */
semantics > :first-child { display: none; }
 /* 모든 텍스트 주석을 표시합니다. */
semantics > annotation { display: inline; }
/* 모든 HTML 주석을 표시합니다. */
semantics > annotation-xml[encoding="text/html" i],
semantics > annotation-xml[encoding="application/xhtml+xml" i] {
  display: inline-block;
}

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

4.1 display: block math 및 display: inline math 값

CSS 디스플레이 모듈 레벨 3의 display 속성은 새로운 내부 디스플레이 유형으로 확장됩니다:

이름: display
새 값: <display-outside> || [ <display-inside> | math ]

MathML 요소가 아닌 요소에서 display의 지정된 값이 block math 또는 inline math이면 계산된 값은 각각 block flow 및 inline flow입니다. mtable 요소의 경우 계산된 값은 각각 block table 및 inline table입니다. mtr 요소의 경우 계산된 값은 table-row입니다. mtd 요소의 경우 계산된 값은 table-cell입니다.

계산된 display 값이 block math 또는 inline math와 같은 MathML 요소는 관련 절에 설명된 대로 태그 이름에 따라 박스 생성 및 레이아웃을 제어합니다. 알 수 없는 MathML 요소는 mrow 요소와 동일하게 동작합니다.

참고
display: block math 및 display: inline math 값은 MathML 요소에 기본 레이아웃을 제공하는 동시에 네이티브 디스플레이 값이나 사용자 정의 값으로 이를 재정의할 수 있도록 합니다. 이를 통해 작성자 또는 폴리필은 자체 사용자 정의 표기법을 정의하여 MathML Core를 조정하거나 확장할 수 있습니다.

다음 예에서는 MathML mrow 요소의 기본 레이아웃을 재정의하여 해당 콘텐츠를 그리드로 렌더링합니다.

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

4.2 math-auto 변환

CSS 텍스트 모듈 레벨 4의 text-transform 속성에는 새로운 값 math-auto가 있습니다. 단일 문자를 포함하는 텍스트 노드에서 계산된 값이 math-auto이고 해당 문자가 C.1 italic 매핑의 "Original" 열에 있으면 "italic" 열의 해당 문자로 변환됩니다.

일반적인 스타일 관례는 여러 글자로 된 식별자(예: 함수 이름 "exp")를 보통 스타일로, 단일 글자로 된 식별자 (예: 변수 "n")를 이탤릭 스타일로 렌더링하는 것입니다. math-auto 속성은 이러한 기본 동작을 구현하기 위한 것이며, 필요하면 작성자가 재정의할 수 있습니다. 수학 글꼴은 C.1 italic 매핑의 Unicode 위치에 배치된 특수한 종류의 이탤릭 글리프로 설계되며, 이는 이탤릭 글꼴 스타일을 통해 얻은 셰이핑과 다르다는 점에 유의하십시오. Latin Modern Math 글꼴을 사용하여 font-style: italic(왼쪽) 및 text-transform: math-auto(오른쪽)로 렌더링한 이 수학 수식을 비교하십시오:

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

4.3 math-style 속성

이름: math-style
값: normal | compact
초깃값: normal
적용 대상: 모든 요소
상속: 예
백분율: 해당 없음
계산값: 지정된 키워드
정규 순서: 해당 없음
애니메이션 유형: 애니메이션할 수 없음
미디어: 시각

math-style이 compact이면 자손의 수학 레이아웃은 다음 규칙을 적용하여 논리적 높이를 최소화하려고 합니다:

다음 예에서는 math 루트에 math-style: compact(왼쪽) 및 math-style: normal(오른쪽) 스타일을 적용해 렌더링한 수학 수식을 보여 줍니다. 전자의 경우 분수 안에서 글꼴 크기가 자동으로 축소되고 합 기호의 극한은 ∑의 아래 첨자와 위 첨자로 렌더링됩니다. 후자의 경우 ∑는 일반 텍스트보다 더 크게 그려지고 분수 내 세로 간격은 (현재 글꼴 크기에 상대적인 경우에도) 더 큽니다.

math-style 예제

이 두 math-style 값은 일반적으로 각각 인라인 모드와 디스플레이 모드의 수학 표현식에 대응합니다 [TeXBook]. 디스플레이 모드의 수학 수식은 일부 부분 수식 (예: 스크립트, 행렬 요소, 분자와 분모 등) 내에서 자동으로 인라인 모드로 전환될 수 있으며, 때로는 이러한 기본 동작을 재정의하는 것이 바람직합니다. math-style 속성을 사용하면 사용자 에이전트 스타일시트와 displaystyle 속성을 통해 MathML에서 이러한 기능을 쉽게 구현할 수 있으며, 폴리필에도 이를 노출할 수 있습니다.

4.4 math-shift 속성

이름: math-shift
값: normal | compact
초깃값: normal
적용 대상: 모든 요소
상속: 예
백분율: 해당 없음
계산값: 지정된 키워드
정규 순서: 해당 없음
애니메이션 유형: 애니메이션할 수 없음
미디어: 시각

math-shift 값이 compact이면 자손의 수학 레이아웃은 위 첨자를 배치하는 데 superscriptShiftUpCramped 매개변수를 사용합니다. math-shift 값이 normal이면 수학 레이아웃은 대신 superscriptShiftUp 매개변수를 사용합니다.

이 속성은 MathML 스크립트 요소의 레이아웃 중 위 첨자를 배치하는 데 사용됩니다. § 3.4.1 아래 첨자 및 위 첨자 <msub>, <msup>, <msubsup>, 3.4.3 앞 스크립트 및 텐서 인덱스 <mmultiscripts> 및 3.4.2 아래 스크립트 및 위 스크립트 <munder>, <mover>, <munderover>을 참조하십시오.

다음 예에서 두 개의 "x 제곱"은 compact math-style과 동일한 font-size로 렌더링됩니다. 그러나 제곱근 안에 있는 것은 compact math-shift로 렌더링되는 반면, 다른 하나는 normal math-shift로 렌더링되어 위 첨자 "2"의 이동량에 미묘한 차이가 생깁니다.

math-shift 예제

[TeXBook]에 따르면 수학 수식은 기본적으로 normal 스타일을 사용하지만 일부 부분 수식 (예: 근호, 분수의 분모 등) 안에서는 compact 스타일(TeX 용어로 "cramped")로 전환될 수 있습니다. math-shift 속성을 사용하면 사용자 에이전트 스타일시트에서 MathML에 이러한 규칙을 쉽게 구현할 수 있습니다. 페이지 작성자나 폴리필 개발자도 이 속성에 접근하여 기본 구현을 조정하거나 개선할 수 있습니다.

4.5 math-depth 속성

수학 수식의 최상위 컨테이너를 기준으로 각 요소의 "깊이" 개념을 설명하기 위해 새로운 math-depth 속성이 도입됩니다. 구체적으로 이는 지정된 값이 math일 때 font-size 속성의 계산된 값을 결정하는 데 사용됩니다.

이름: math-depth
값: auto-add | add(<integer>) | <integer>
초깃값: 0
적용 대상: 모든 요소
상속: 예
백분율: 해당 없음
계산값: 정수, 아래 참조
정규 순서: 해당 없음
애니메이션 유형: 애니메이션할 수 없음
미디어: 시각

math-depth 값의 계산된 값은 다음과 같이 결정합니다:

font-size의 지정된 값이 math이면 font-size의 계산된 값은 상속된 font-size 값에 다음 절차로 계산한 0이 아닌 배율을 곱하여 얻습니다:

  1. A를 상속된 math-depth 값, B를 계산된 math-depth 값, C를 0.71, S를 1.0으로 둡니다.
    • A = B이면 S를 반환합니다.
    • B < A이면 A와 B를 서로 바꾸고 InvertScaleFactor를 true로 설정합니다.
    • 그렇지 않으면 B > A이며 InvertScaleFactor를 false로 설정합니다.
  2. E를 B - A > 0으로 둡니다.
  3. 상속된 첫 번째 사용 가능한 글꼴에 OpenType MATH 테이블이 있으면:
  4. S에 CE를 곱합니다.
  5. InvertScaleFactor가 false이면 S를 반환하고, 그렇지 않으면 1/S를 반환합니다.

다음 예에서는 Latin Modern Math 글꼴로 렌더링된 normal math-style의 수학 수식을 보여 줍니다. 스크립트나 분수 같은 부분 표현식에 들어가면 해당 글꼴에 포함된 MATH 테이블의 값에 따라 글꼴 크기가 자동으로 축소됩니다. 위 첨자에 들어갈 때 글꼴 크기가 축소되지만 근의 앞 스크립트에 들어갈 때는 훨씬 더 빠르게 축소된다는 점에 유의하십시오. 또한 내부 분수에 들어갈 때는 축소되지만 외부 분수에 들어갈 때는 분수에서 math-style이 자동으로 변경되기 때문에 축소되지 않습니다.

font-size-scriptlevel 예제

[TeXBook]의 이러한 규칙은 미묘하므로 이를 표현하고 처리하기 위해 별도의 math-depth 메커니즘을 두는 것이 유용합니다. 이러한 규칙은 사용자 에이전트 스타일시트를 사용하여 MathML에서 구현할 수 있습니다. 페이지 작성자나 폴리필 개발자도 이 속성에 접근하여 기본 구현을 조정하거나 개선할 수 있습니다. 특히 MathML의 scriptlevel 속성은 math-depth 변경을 수행하는 방법을 제공합니다.

5. OpenType MATH 테이블

이 장에서는 OpenType 글꼴의 MATH 테이블이 제공하는 기능을 설명합니다 [OPEN-FONT-FORMAT]. 이 장 전체에서 C와 유사한 표기법 Table.Subtable1[index].Subtable2.Parameter를 사용하여 OpenType 매개변수를 나타냅니다. 이러한 매개변수는 사용할 수 없을 수도 있으므로(예: 글꼴에 하위 테이블 중 하나가 없거나, 오프셋이 유효하지 않은 경우 등) 대체 옵션을 제공합니다.

참고
적절한 OpenType 기능을 갖춘 수학 글꼴로 MathML을 렌더링하는 것을 강력히 권장합니다. 제공된 대체 옵션이 충분히 좋은 렌더링을 제공한다는 보장은 없습니다.

디자인 단위로 표현된 OpenType 값(MathValueRecord 항목을 통해 간접적으로 표현된 경우도 포함)은 head.unitsPerEm, CSS font-size 또는 확대/축소 수준을 고려하여 레이아웃에 적합한 값으로 스케일링됩니다.

5.1 레이아웃 상수 (MathConstants)

다음은 첫 번째 사용 가능한 글꼴의 전역 레이아웃 상수입니다:

기본 대체 상수
0
기본 선 두께
post.underlineThickness 또는 상수를 사용할 수 없으면 기본 대체 상수.
scriptPercentScaleDown
MATH.MathConstants.scriptPercentScaleDown / 100 또는 MATH.MathConstants.scriptPercentScaleDown이 null이거나 사용할 수 없으면 0.71.
scriptScriptPercentScaleDown
MATH.MathConstants.scriptScriptPercentScaleDown / 100 또는 MATH.MathConstants.scriptScriptPercentScaleDown이 null이거나 사용할 수 없으면 0.5041.
displayOperatorMinHeight
MATH.MathConstants.displayOperatorMinHeight 또는 상수를 사용할 수 없으면 기본 대체 상수.
axisHeight
MATH.MathConstants.axisHeight 또는 상수를 사용할 수 없으면 OS/2.sxHeight의 절반.
accentBaseHeight
MATH.MathConstants.accentBaseHeight 또는 상수를 사용할 수 없으면 OS/2.sxHeight.
subscriptShiftDown
MATH.MathConstants.subscriptShiftDown 또는 상수를 사용할 수 없으면 OS/2.ySubscriptYOffset.
subscriptTopMax
MATH.MathConstants.subscriptTopMax 또는 상수를 사용할 수 없으면 ⅘ × OS/2.sxHeight.
subscriptBaselineDropMin
MATH.MathConstants.subscriptBaselineDropMin 또는 상수를 사용할 수 없으면 기본 대체 상수.
superscriptShiftUp
MATH.MathConstants.superscriptShiftUp 또는 상수를 사용할 수 없으면 OS/2.ySuperscriptYOffset.
superscriptShiftUpCramped
MATH.MathConstants.superscriptShiftUpCramped 또는 상수를 사용할 수 없으면 기본 대체 상수.
superscriptBottomMin
MATH.MathConstants.superscriptBottomMin 또는 상수를 사용할 수 없으면 ¼ × OS/2.sxHeight.
superscriptBaselineDropMax
MATH.MathConstants.superscriptBaselineDropMax 또는 상수를 사용할 수 없으면 기본 대체 상수.
subSuperscriptGapMin
MATH.MathConstants.subSuperscriptGapMin 또는 상수를 사용할 수 없으면 기본 선 두께의 4배.
superscriptBottomMaxWithSubscript
MATH.MathConstants.superscriptBottomMaxWithSubscript 또는 상수를 사용할 수 없으면 ⅘ × OS/2.sxHeight.
spaceAfterScript
MATH.MathConstants.spaceAfterScript 또는 상수를 사용할 수 없으면 1/24em.
upperLimitGapMin
MATH.MathConstants.upperLimitGapMin 또는 상수를 사용할 수 없으면 기본 대체 상수.
upperLimitBaselineRiseMin
MATH.MathConstants.upperLimitBaselineRiseMin 또는 상수를 사용할 수 없으면 기본 대체 상수.
lowerLimitGapMin
MATH.MathConstants.lowerLimitGapMin 또는 상수를 사용할 수 없으면 기본 대체 상수.
lowerLimitBaselineDropMin
MATH.MathConstants.lowerLimitBaselineDropMin 또는 상수를 사용할 수 없으면 기본 대체 상수.
stackTopShiftUp
MATH.MathConstants.stackTopShiftUp 또는 상수를 사용할 수 없으면 기본 대체 상수.
stackTopDisplayStyleShiftUp
MATH.MathConstants.stackTopDisplayStyleShiftUp 또는 상수를 사용할 수 없으면 기본 대체 상수.
stackBottomShiftDown
MATH.MathConstants.stackBottomShiftDown 또는 상수를 사용할 수 없으면 기본 대체 상수.
stackBottomDisplayStyleShiftDown
MATH.MathConstants.stackBottomDisplayStyleShiftDown 또는 상수를 사용할 수 없으면 기본 대체 상수.
stackGapMin
MATH.MathConstants.stackGapMin 또는 상수를 사용할 수 없으면 기본 선 두께의 3배.
stackDisplayStyleGapMin
MATH.MathConstants.stackDisplayStyleGapMin 또는 상수를 사용할 수 없으면 기본 선 두께의 7배.
stretchStackTopShiftUp
MATH.MathConstants.stretchStackTopShiftUp 또는 상수를 사용할 수 없으면 기본 대체 상수.
stretchStackBottomShiftDown
MATH.MathConstants.stretchStackBottomShiftDown 또는 상수를 사용할 수 없으면 기본 대체 상수.
stretchStackGapAboveMin
MATH.MathConstants.stretchStackGapAboveMin 또는 상수를 사용할 수 없으면 기본 대체 상수.
stretchStackGapBelowMin
MATH.MathConstants.stretchStackGapBelowMin 또는 상수를 사용할 수 없으면 기본 대체 상수.
fractionNumeratorShiftUp
MATH.MathConstants.fractionNumeratorShiftUp 또는 상수를 사용할 수 없으면 기본 대체 상수.
fractionNumeratorDisplayStyleShiftUp
MATH.MathConstants.fractionNumeratorDisplayStyleShiftUp 또는 상수를 사용할 수 없으면 기본 대체 상수.
fractionDenominatorShiftDown
MATH.MathConstants.fractionDenominatorShiftDown 또는 상수를 사용할 수 없으면 기본 대체 상수.
fractionDenominatorDisplayStyleShiftDown
MATH.MathConstants.fractionDenominatorDisplayStyleShiftDown 또는 상수를 사용할 수 없으면 기본 대체 상수.
fractionNumeratorGapMin
MATH.MathConstants.fractionNumeratorGapMin 또는 상수를 사용할 수 없으면 기본 선 두께.
fractionNumDisplayStyleGapMin
MATH.MathConstants.fractionNumDisplayStyleGapMin 또는 상수를 사용할 수 없으면 기본 선 두께의 3배.
fractionRuleThickness
MATH.MathConstants.fractionRuleThickness 또는 상수를 사용할 수 없으면 기본 선 두께.
fractionDenominatorGapMin
MATH.MathConstants.fractionDenominatorGapMin 또는 상수를 사용할 수 없으면 기본 선 두께.
fractionDenomDisplayStyleGapMin
MATH.MathConstants.fractionDenomDisplayStyleGapMin 또는 상수를 사용할 수 없으면 기본 선 두께의 3배.
overbarVerticalGap
MATH.MathConstants.overbarVerticalGap 또는 상수를 사용할 수 없으면 기본 선 두께의 3배.
overbarExtraAscender
MATH.MathConstants.overbarExtraAscender 또는 상수를 사용할 수 없으면 기본 선 두께.
underbarVerticalGap
MATH.MathConstants.underbarVerticalGap 또는 상수를 사용할 수 없으면 기본 선 두께의 3배.
underbarExtraDescender
MATH.MathConstants.underbarExtraDescender 또는 상수를 사용할 수 없으면 기본 선 두께.
radicalVerticalGap
MATH.MathConstants.radicalVerticalGap 또는 상수를 사용할 수 없으면 기본 선 두께의 1¼배.
radicalDisplayStyleVerticalGap
MATH.MathConstants.radicalDisplayStyleVerticalGap 또는 상수를 사용할 수 없으면 기본 선 두께 + ¼ OS/2.sxHeight.
radicalRuleThickness
MATH.MathConstants.radicalRuleThickness 또는 상수를 사용할 수 없으면 기본 선 두께.
radicalExtraAscender
MATH.MathConstants.radicalExtraAscender 또는 상수를 사용할 수 없으면 기본 선 두께.
radicalKernBeforeDegree
MATH.MathConstants.radicalKernBeforeDegree 또는 상수를 사용할 수 없으면 5/18em.
radicalKernAfterDegree
MATH.MathConstants.radicalKernAfterDegree 또는 상수를 사용할 수 없으면 −10/18em.
radicalDegreeBottomRaisePercent
MATH.MathConstants.radicalDegreeBottomRaisePercent / 100.0 또는 상수를 사용할 수 없으면 0.6.

5.2 글리프 정보 (MathGlyphInfo)

참고
MathTopAccentAttachment는 삭제될 위험이 있습니다.

다음은 첫 번째 사용 가능한 글꼴에 대한 글리프별 테이블입니다:

MathItalicsCorrectionInfo
이탤릭 보정 값의 하위 테이블 MATH.MathGlyphInfo.MathItalicsCorrectionInfo입니다. 요청된 글리프에 대응하는 값이 있으면 MATH.MathGlyphInfo.MathItalicsCorrectionInfo.italicsCorrection의 해당 값을 사용하고, 그렇지 않으면 0을 사용합니다.
MathTopAccentAttachment
인라인 축을 따라 상단 수학 악센트를 배치하기 위한 하위 테이블 MATH.MathGlyphInfo.MathTopAccentAttachment입니다. 요청된 글리프에 대응하는 값이 있으면 MATH.MathGlyphInfo.MathTopAccentAttachment.topAccentAttachment의 해당 값을 사용하고, 그렇지 않으면 글리프 어드밴스 너비의 절반을 사용합니다.

5.3 연산자의 크기 변형 (MathVariants)

이 절에서는 MATH.MathVariants 테이블을 사용하여 임의 크기의 늘일 수 있는 글리프를 처리하는 방법을 설명합니다.

5.3.1 GlyphAssembly 테이블

이 절은 [OPEN-TYPE-MATH-IN-HARFBUZZ]를 기반으로 합니다. 편의를 위해 다음 정의를 사용합니다:

  • omin 은 MATH.MathVariant.minConnectorOverlap입니다.
  • GlyphPartRecord.partFlags에 fExtender 플래그가 설정된 경우에만 GlyphPartRecord는 확장자입니다.
  • GlyphAssembly가 MathVariant.horizGlyphConstructionOffsets에서 얻어진 경우 가로입니다. 그렇지 않으면 세로입니다(그리고 MathVariant.vertGlyphConstructionOffsets에서 얻어집니다).
  • 주어진 GlyphAssembly 테이블에 대해, NExt (각각 NNonExt)는 GlyphAssembly.partRecords에 있는 확장자 (각각 비확장자)의 수입니다.
  • 주어진 GlyphAssembly 테이블에 대해, SExt (각각 SNonExt)는 GlyphAssembly.partRecords의 모든 확장자 (각각 비확장자)에 대한 GlyphPartRecord.fullAdvance의 합입니다.
  • SExt,NonOverlapping = SExt − omin NExt 는 확장자의 겹치지 않는 최대 부분의 합입니다.

다음 조건이 충족되지 않으면 사용자 에이전트는 GlyphAssembly를 유효하지 않은 것으로 처리해야 합니다:

  • NExt > 0. 그렇지 않으면 확장자를 반복하여 조립을 늘일 수 없습니다.
  • SExt,NonOverlapping > 0. 그렇지 않으면 확장자를 연결할 때 조립이 늘어나지 않습니다.
  • GlyphAssembly.partRecords의 각 GlyphPartRecord에 대해 GlyphPartRecord.startConnectorLength 및 GlyphPartRecord.endConnectorLength의 값은 최소한 omin이어야 합니다. 그렇지 않으면 MathVariant.minConnectorOverlap 조건을 충족할 수 없습니다.

이 명세에서 글리프 조립은 각 확장자를 r번 반복하고 각 글리프 사이에 동일한 겹침 값 o를 사용하여 구성합니다. 이러한 조립의 글리프 수는 AssemblyGlyphCount(r) = NNonExt + r NExt이고, 늘이기 크기는 AssembySize(o, r) = SNonExt + r SExt − o (AssemblyGlyphCount(r) − 1)입니다.

rmin은 크기가 최소한 T인 조립을 얻는 데 필요한 최소 반복 횟수, 즉 AssembySize(omin, r) ≥ T가 되는 최소 r입니다. 이는 0과 ((T − SNonExt + omin (NNonExt − 1)) / SExt,NonOverlapping)의 올림값 중 최댓값으로 정의됩니다.

omax,theorical = (AssembySize(0, rmin) − T) / (AssemblyGlyphCount(rmin) − 1) 은 겹침이 0인 조립의 초과 크기를 균등하게 나누어 얻는 이론적 겹침입니다.

omax는 각 확장자를 rmin번 반복하여 크기가 최소한 T인 조립을 구성할 수 있는 최대 겹침입니다. AssemblyGlyphCount(rmin) ≤ 1이면 실제 겹침 값은 중요하지 않습니다. 그렇지 않으면 omax는 다음 중 최솟값으로 정의됩니다:

  • omax,theorical.
  • GlyphAssembly.partRecords의 모든 항목에 대한 GlyphPartRecord.startConnectorLength. 단, 마지막 항목이 확장자가 아니면 제외합니다.
  • GlyphAssembly.partRecords의 모든 항목에 대한 GlyphPartRecord.endConnectorLength. 단, 첫 번째 항목이 확장자가 아니면 제외합니다.

목표 크기 T에 대한 글리프 조립 늘이기 크기는 AssembySize(omax, rmin)입니다.

글리프 조립 너비, 글리프 조립 상승 및 글리프 조립 하강은 다음과 같이 정의됩니다:

  • GlyphAssembly가 세로이면, 너비는 GlyphAssembly.partRecords의 모든 GlyphPartRecord에 대해 ID가 GlyphPartRecord.glyphID인 글리프의 최대 어드밴스 너비이고, 상승은 주어진 목표 크기 T에 대한 글리프 조립 늘이기 크기이며, 하강은 0입니다.
  • 그렇지 않으면 GlyphAssembly는 가로이고, 너비는 주어진 목표 크기 T에 대한 글리프 조립 늘이기 크기이며, 상승(각각 하강)은 GlyphAssembly.partRecords의 모든 GlyphPartRecord에 대해 ID가 GlyphPartRecord.glyphID인 글리프의 최대 상승(각각 하강)입니다.

글리프 조립 높이는 글리프 조립 상승과 글리프 조립 하강의 합입니다.

참고
세로 글리프 조립의 가로 메트릭(각각 가로 글리프 조립의 세로 메트릭)은 목표 크기 T에 의존하지 않습니다.

글리프 조립의 셰이핑은 다음 알고리즘으로 수행합니다:

  1. rmin과 omax를 계산합니다.
  2. (x, y)를 (0, 0)으로, RepetitionCounter를 0으로, PartIndex를 -1로 설정합니다.
  3. 다음 단계를 반복합니다:
    1. RepetitionCounter가 0이면:
      1. PartIndex를 증가시킵니다.
      2. PartIndex가 GlyphAssembly.partCount이면 중지합니다.
      3. 그렇지 않으면 Part를 GlyphAssembly.partRecords[PartIndex]로 설정합니다. Part가 확장자이면 RepetitionCounter를 rmin으로 설정하고, 그렇지 않으면 1로 설정합니다.
      • 글리프 조립이 가로이면 ID가 Part.glyphID인 글리프의 (왼쪽, 기준선) 좌표가 (x, y) 위치에 오도록 그립니다. x를 x + Part.fullAdvance − omax.로 설정합니다.
      • 그렇지 않으면(글리프 조립이 세로이면) ID가 Part.glyphID인 글리프의 (왼쪽, 아래쪽) 좌표가 (x, y) 위치에 오도록 그립니다. y를 y − Part.fullAdvance + omax.로 설정합니다.
    2. RepetitionCounter를 감소시킵니다.

5.3.2 글리프 늘이기 알고리즘

블록 축을 따라 늘어난 글리프의 선호 인라인 크기는 다음 알고리즘을 사용하여 계산합니다:

  1. S를 글리프의 어드밴스 너비로 설정합니다.
  2. 주어진 글리프에 대해 MathVariants.vertGlyphConstructionOffsets 테이블에 MathGlyphConstruction 테이블이 있으면:
    1. MathGlyphConstruction.mathGlyphVariantRecord의 각 MathGlyphVariantRecord에 대해 S가 적어도 ID가 MathGlyphVariantRecord.variantGlyph인 글리프의 어드밴스 너비 이상이 되도록 합니다.
    2. 유효한 GlyphAssembly 하위 테이블이 있으면 S가 적어도 글리프 조립 너비 이상이 되도록 합니다.
  3. S를 반환합니다.
참고
블록 축을 따라 늘어난 글리프의 선호 인라인 크기는 해당 글리프에 대해 가능한 모든 세로 구성의 최대 너비를 반환합니다. 실제로 수학 글꼴은 세로 구성의 너비가 거의 일정하도록 설계되므로 실제 너비가 과대 추정될 가능성은 작습니다.

글리프를 인라인 (각각 블록) 차원 T에 맞게 늘일 수 있는 글리프를 셰이핑하는 알고리즘은 다음과 같습니다:

  1. 주어진 글리프에 대해 MathVariants.horizGlyphConstructionOffsets 테이블(각각 MathVariants.vertGlyphConstructionOffsets 테이블)에 MathGlyphConstruction 테이블이 없으면 실패로 종료합니다.
  2. 글리프의 어드밴스 너비 (각각 높이)가 적어도 T 이상이면 해당 글리프에 대해 일반 셰이핑과 경계 박스를 사용하고, 해당 글리프의 MathItalicsCorrectionInfo를 이탤릭 보정으로 사용한 후 성공으로 종료합니다.
  3. MathGlyphConstruction.mathGlyphVariantRecord의 MathGlyphVariantRecord 목록을 탐색합니다. MathGlyphVariantRecord.advanceMeasurement 중 하나가 적어도 T 이상이면 MathGlyphVariantRecord.variantGlyph에 대해 일반 셰이핑과 경계 박스를 사용하고, 해당 글리프의 MathItalicsCorrectionInfo를 이탤릭 보정으로 사용한 후 성공으로 종료합니다.
  4. 유효한 GlyphAssembly 하위 테이블이 있으면 글리프 조립 너비, 글리프 조립 높이, 글리프 조립 상승, 글리프 조립 하강으로 주어진 경계 박스와 GlyphAssembly.italicsCorrection 값을 이탤릭 보정으로 사용하고, 글리프 조립의 셰이핑을 수행한 후 성공으로 종료합니다.
  5. 위의 늘이기 옵션 중 어느 것도 목표 크기 T를 포괄할 수 없으면 마지막으로 시도한 옵션을 선택하고 성공으로 종료합니다.
참고
글꼴이 늘일 수 있는 구성을 위한 테이블을 제공하지 않으면 사용자 에이전트는 B.4 Unicode 기반 글리프 조립에서 제안한 것과 같은 자체 내부 구성을 대체 수단으로 사용할 수 있습니다.

A. 사용자 에이전트 스타일시트

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

/* 범용 규칙 */
* {
  font-size: math;
  display: block math;
  writing-mode: horizontal-tb !important;
}

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

/* <mrow>와 유사한 요소 */
semantics > :not(:first-child) {
  display: none;
}
maction > :not(:first-child) {
  display: none;
}
merror {
  border: 1px solid red;
  background-color: lightYellow;
}
mphantom {
  visibility: hidden;
}

/* 토큰 요소 */
mi {
  text-transform: math-auto;
}

/* 표 */
mtable {
  display: inline-table;
  math-style: compact;
}
mtr {
  display: table-row;
}
mtd {
  display: table-cell;
  /* 표 셀 내부의 중앙 정렬은 박스 정렬 속성에 의존해야 합니다.
     https://github.com/w3c/mathml-core/issues/156 참조 */
  text-align: center;
  padding: 0.5ex 0.4em;
}

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

/* scriptlevel, displaystyle 및 math-shift에 대한 기타 규칙 */
mroot > :not(:first-child) {
  math-depth: add(2);
  math-style: compact;
}
mroot, msqrt {
  math-shift: compact;
}
msub > :not(:first-child),
msup > :not(:first-child),
msubsup > :not(:first-child),
mmultiscripts > :not(:first-child),
munder > :not(:first-child),
mover > :not(:first-child),
munderover > :not(:first-child) {
  math-depth: add(1);
  math-style: compact;
}
munder[accentunder="true" i] > :nth-child(2),
mover[accent="true" i] > :nth-child(2),
munderover[accentunder="true" i] > :nth-child(2),
munderover[accent="true" i] > :nth-child(3) {
  font-size: inherit;
}
msub > :nth-child(2),
msubsup > :nth-child(2),
mmultiscripts > :nth-child(even),
mmultiscripts > mprescripts ~ :nth-child(odd),
mover[accent="true" i] > :first-child,
munderover[accent="true" i] > :first-child {
  math-shift: compact;
}
mmultiscripts > mprescripts ~ :nth-child(even) {
  math-shift: inherit;
}

B. 연산자 테이블

B.1 연산자 사전

참고
이 절에서는 3.2.4.2 사전 기반 속성의 값과 연산자의 늘이기 축을 결정하는 방법을 설명합니다. 아래의 압축 테이블은 컴퓨터 처리에 적합하며, 대체 표현은 B.2 연산자 사전(사람이 읽을 수 있는 형식)을 참조하십시오.

연산자의 범주에서 해당 속성을 설정하는 알고리즘은 다음과 같습니다:

연산자의 범주를 결정하는 알고리즘 (Content, Form)은 다음과 같습니다:

  1. UTF-16 문자열인 Content의 길이가 1 또는 2가 아니면 범주 Default로 종료합니다.
  2. Content가 U+0320–U+03FF 범위의 단일 문자이면 범주 Default로 종료합니다. 그렇지 않고 문자가 두 개이면:
    • Content가 U+1EEF0 ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL 또는 U+1EEF1 ARABIC MATHEMATICAL OPERATOR HAH WITH DAL에 해당하는 서로게이트 쌍이고 Form이 postfix이면 범주 I로 종료합니다.
    • 두 번째 문자가 U+0338 COMBINING LONG SOLIDUS OVERLAY 또는 U+20D2 COMBINING LONG VERTICAL LINE OVERLAY이면 Content를 첫 번째 문자로 바꾸고 3단계로 이동합니다.
    • 그렇지 않고 Content가 Operators_2_ascii_chars에 나열되어 있으면 Content를 "U+0320에 Operators_2_ascii_chars에서 Content의 인덱스를 더한" Unicode 문자로 바꾸고 3단계로 이동합니다.
    • 그렇지 않으면 범주 Default로 종료합니다.
  3. Form이 infix이고 Content가 U+007C VERTICAL LINE 또는 U+223C TILDE OPERATOR 중 하나에 해당하면 범주 ForceDefault로 종료합니다. 테이블 그림 25에서 제공하는 (Content, Form)의 범주가 테이블 그림 26에서 N/A 인코딩을 가지면 (즉 범주가 L 또는 M이면) 해당 범주로 종료합니다. 그렇지 않으면:
    • Content가 U+0000–U+03FF 범위에 있으면 Key를 Content로 설정하고, U+2000–U+2BFF 범위에 있으면 Content − 0x1C00으로 설정합니다. 그렇지 않으면 범주 Default로 종료합니다.
    • Form이 각각 infix, prefix, postfix인지에 따라 Key에 0x0000, 0x1000, 0x2000을 더합니다.
    • 단언: Key는 최대 0x2FFF입니다.
    • 테이블 그림 27에서 Entry % 0x4000이 Key와 같은 Entry를 찾습니다. 찾으면 그림 26의 Entry / 0x1000 인코딩에 해당하는 범주를 반환합니다. 그렇지 않으면 범주 Default를 반환합니다.
특수 테이블 항목
Operators_2_ascii_chars 18개 항목(2문자 ASCII 문자열): '!!', '!=', '&&', '**', '*=', '++', '+=', '--', '-=', '->', '//', '/=', ':=', '<=', '<>', '==', '>=', '||',
Operators_fence 61개 항목(16개 Unicode 범위): [U+0028–U+0029], {U+005B}, {U+005D}, [U+007B–U+007D], {U+0331}, {U+2016}, [U+2018–U+2019], [U+201C–U+201D], [U+2308–U+230B], [U+2329–U+232A], [U+2772–U+2773], [U+27E6–U+27EF], {U+2980}, [U+2983–U+2999], [U+29D8–U+29DB], [U+29FC–U+29FD],
Operators_separator 3개 항목: U+002C, U+003B, U+2063,
그림 24 연산자 사전을 위한 특수 테이블입니다.
총 크기: 82개 항목, 90바이트
(문자가 UTF-16이고 범위 길이가 1바이트라고 가정).
(Content, Form) 키 범주
infix 형식의 313개 항목(35개 Unicode 범위): [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
infix 형식의 108개 항목(31개 Unicode 범위): {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
infix 형식의 64개 항목(33개 Unicode 범위): {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
prefix 형식의 52개 항목(22개 Unicode 범위): {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
postfix 형식의 40개 항목(21개 Unicode 범위): [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
prefix 형식의 30개 항목: 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
postfix 형식의 30개 항목: 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
prefix 형식의 27개 항목(2개 Unicode 범위): [U+222B–U+2233], [U+2A0B–U+2A1C], H
postfix 형식의 22개 항목(13개 Unicode 범위): [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
prefix 형식의 22개 항목(6개 Unicode 범위): [U+220F–U+2211], [U+22C0–U+22C3], [U+2A00–U+2A0A], [U+2A1D–U+2A1E], {U+2AFC}, {U+2AFF}, J
infix 형식의 8개 항목(5개 Unicode 범위): {U+002F}, {U+005C}, {U+005F}, [U+2061–U+2064], {U+2206}, K
prefix 형식의 6개 항목(3개 Unicode 범위): [U+2145–U+2146], {U+2202}, [U+221A–U+221C], L
infix 형식의 3개 항목: U+002C, U+003A, U+003B, M
그림 25 연산자 (Content, Form)에서 범주로의 매핑입니다.
총 크기: 725개 항목, 639바이트
(문자가 UTF-16이고 범위 길이가 1바이트라고 가정).
범주 형식 인코딩 lspace rspace 속성
Default N/A N/A 0.2777777777777778em 0.2777777777777778em N/A
ForceDefault N/A N/A 0.2777777777777778em 0.2777777777777778em N/A
A infix 0x0 0.2777777777777778em 0.2777777777777778em stretchy
B infix 0x4 0.2222222222222222em 0.2222222222222222em N/A
C infix 0x8 0.16666666666666666em 0.16666666666666666em N/A
D prefix 0x1 0 0 N/A
E postfix 0x2 0 0 N/A
F prefix 0x5 0 0 stretchy symmetric
G postfix 0x6 0 0 stretchy symmetric
H prefix 0x9 0.16666666666666666em 0.16666666666666666em symmetric largeop
I postfix 0xA 0 0 stretchy
J prefix 0xD 0.16666666666666666em 0.16666666666666666em symmetric largeop movablelimits
K infix 0xC 0 0 N/A
L prefix N/A 0.16666666666666666em 0 N/A
M infix N/A 0 0.16666666666666666em N/A
그림 26 각 범주에 대한 연산자 값입니다.
세 번째 열은 범주의 4비트 인코딩을 제공합니다.
최하위 2비트는 infix (0), prefix (1) 및 postfix (2) 형식을 인코딩합니다.
716개 항목(길이가 최대 16인 236개 범위): {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의 테이블은 연속된 Unicode 블록이 많이 존재한다는 점을 활용하기 위해 범위로 인코딩되어 있습니다.
  • 이러한 테이블에서 항목을 빠르게 찾으려면 범위 시작점에 대해 이진 검색을 수행한 다음 범위 길이를 추가로 검사할 수 있습니다.
  • log는 오목 함수이므로 그림 25의 각 큰 하위 테이블에서 이진 검색을 수행하는 것보다 그림 27의 전체 테이블에서 한 번의 이진 검색을 수행하는 것이 더 효율적입니다.

Unicode 문자 c가 아래 목록에 속하면 해당 문자의 고유 늘이기 축은 inline입니다. 그렇지 않으면 c의 고유 늘이기 축은 block입니다.

U+003D, U+005E, U+005F, U+007E, U+00AF, U+02C6, U+02C7, U+02C9, U+02CD, U+02DC, U+02F7, U+0302, U+0332, U+203E, U+20D0, U+20D1, U+20D6, U+20D7, U+20E1, U+2190, U+2192, U+2194, U+2198, U+2199, U+219A, U+219B, U+219C, U+219D, U+219E, U+21A0, U+21A2, U+21A3, U+21A4, U+21A6, U+21A9, U+21AA, U+21AB, U+21AC, U+21AD, U+21AE, U+21B4, U+21B9, U+21BC, U+21BD, U+21C0, U+21C1, U+21C4, U+21C6, U+21C7, U+21C9, U+21CB, U+21CC, U+21CD, U+21CE, U+21CF, U+21D0, U+21D2, U+21D4, U+21DA, U+21DB, U+21DC, U+21DD, U+21E0, U+21E2, U+21E4, U+21E5, U+21E6, U+21E8, U+21F0, U+21F4, U+21F6, U+21F7, U+21F8, U+21F9, U+21FA, U+21FB, U+21FC, U+21FD, U+21FE, U+21FF, U+2322, U+2323, U+23B4, U+23B5, U+23DC, U+23DD, U+23DE, U+23DF, U+23E0, U+23E1, U+2500, U+2794, U+2799, U+279B, U+279C, U+279D, U+279E, U+279F, U+27A0, U+27A1, U+27A5, U+27A6, U+27A8, U+27A9, U+27AA, U+27AB, U+27AC, U+27AD, U+27AE, U+27AF, U+27B1, U+27B3, U+27B5, U+27B8, U+27BA, U+27BB, U+27BC, U+27BD, U+27BE, U+27F4, U+27F5, U+27F6, U+27F7, U+27F8, U+27F9, U+27FA, U+27FB, U+27FC, U+27FD, U+27FE, U+27FF, U+2900, U+2901, U+2902, U+2903, U+2904, U+2905, U+2906, U+2907, U+290C, U+290D, U+290E, U+290F, U+2910, U+2911, U+2914, U+2915, U+2916, U+2917, U+2918, U+2919, U+291A, U+291B, U+291C, U+291D, U+291E, U+291F, U+2920, U+2942, U+2943, U+2944, U+2945, U+2946, U+2947, U+2948, U+294A, U+294B, U+294E, U+2950, U+2952, U+2953, U+2956, U+2957, U+295A, U+295B, U+295E, U+295F, U+2962, U+2964, U+2966, U+2967, U+2968, U+2969, U+296A, U+296B, U+296C, U+296D, U+2970, U+2971, U+2972, U+2973, U+2974, U+2975, U+297C, U+297D, U+2B04, U+2B05, U+2B0C, U+2B30, U+2B31, U+2B32, U+2B33, U+2B34, U+2B35, U+2B36, U+2B37, U+2B38, U+2B39, U+2B3A, U+2B3B, U+2B3C, U+2B3D, U+2B3E, U+2B40, U+2B41, U+2B42, U+2B43, U+2B44, U+2B45, U+2B46, U+2B47, U+2B48, U+2B49, U+2B4A, U+2B4B, U+2B4C, U+2B60, U+2B62, U+2B64, U+2B6A, U+2B6C, U+2B70, U+2B72, U+2B7A, U+2B7C, U+2B80, U+2B82, U+2B84, U+2B86, U+2B95, U+FE35, U+FE36, U+FE37, U+FE38, U+1EEF0, U+1EEF1,
그림 28 인라인 늘이기 축을 가진 연산자에 해당하는 Unicode 코드 포인트의 정렬된 목록입니다.
총 크기: 246개 항목, 492바이트(BMP가 아닌 항목을 제외하고 모두 16비트라고 가정).
참고
고유 늘이기 축을 연산자 사전의 불리언 속성으로 포함할 수도 있습니다. 그러나 형식에 의존하지 않고 인라인 축을 따라 늘일 수 있는 연산자가 매우 적기 때문에 별도의 정렬된 배열로 구현하는 것이 더 좋습니다. U+1EEF0 ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL 및 U+1EEF1 ARABIC MATHEMATICAL OPERATOR HAH WITH DAL을 별도로 검사하면 각 항목을 16바이트로 인코딩할 수 있습니다.

B.2 연산자 사전 (사람이 읽을 수 있는 형식)

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

다음 사전은 B.1 연산자 사전을 사람이 읽을 수 있는 형식으로 제공합니다. 이 사전을 사용하는 방법과 사전의 인덱스로 함께 사용되는 Content 및 Form 값을 결정하는 방법에 대한 설명은 3.2.4.2 사전 기반 속성을 참조하십시오.

rspace 및 lspace의 값은 해당 열에 표시됩니다. stretchy, symmetric, largeop, movablelimits의 값은 "properties" 열에 나열되어 있으면 true입니다.

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

B.3 결합 문자 동등 관계

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

다음 표는 MathML 악센트 구성에 사용될 때 공백 문자와 비공백 문자 사이의 매핑을 제공합니다.

결합

비결합 스타일 결합
U+002B 더하기 기호 아래 U+031F 아래쪽 결합 더하기 기호
U+002D 하이픈-빼기 위 U+0305 결합 윗줄
U+002D 하이픈-빼기 아래 U+0320 아래쪽 결합 빼기 기호
U+002D 하이픈-빼기 아래 U+0332 결합 아랫줄
U+002E 마침표 위 U+0307 위쪽 결합 점
U+002E 마침표 아래 U+0323 아래쪽 결합 점
U+005E 곡절 악센트 위 U+0302 결합 곡절 악센트
U+005E 곡절 악센트 아래 U+032D 아래쪽 결합 곡절 악센트
U+005F 아랫줄 아래 U+0332 결합 아랫줄
U+0060 억음 악센트 위 U+0300 결합 억음 악센트
U+0060 억음 악센트 아래 U+0316 아래쪽 결합 억음 악센트
U+007E 물결표 위 U+0303 결합 물결표
U+007E 물결표 아래 U+0330 아래쪽 결합 물결표
U+00A8 분음 기호 위 U+0308 결합 분음 기호
U+00A8 분음 기호 아래 U+0324 아래쪽 결합 분음 기호
U+00AF 장음 기호 위 U+0304 결합 장음 기호
U+00AF 장음 기호 위 U+0305 결합 윗줄
U+00B4 양음 악센트 위 U+0301 결합 양음 악센트
U+00B4 양음 악센트 아래 U+0317 아래쪽 결합 양음 악센트
U+00B8 세디유 아래 U+0327 결합 세디유
U+02C6 수식 문자 곡절 악센트 위 U+0302 결합 곡절 악센트
U+02C7 하체크 위 U+030C 결합 하체크
U+02C7 하체크 아래 U+032C 아래쪽 결합 하체크
U+02D8 브리브 위 U+0306 결합 브리브
U+02D8 브리브 아래 U+032E 아래쪽 결합 브리브
U+02D9 위쪽 점 위 U+0307 위쪽 결합 점
U+02D9 위쪽 점 아래 U+0323 아래쪽 결합 점
U+02DB 오고네크 아래 U+0328 결합 오고네크
U+02DC 작은 물결표 위 U+0303 결합 물결표
U+02DC 작은 물결표 아래 U+0330 아래쪽 결합 물결표
U+02DD 이중 양음 악센트 위 U+030B 결합 이중 양음 악센트
U+203E 윗줄 위 U+0305 결합 윗줄
U+2190 왼쪽 화살표 위 U+20D6
U+2192 오른쪽 화살표 위 U+20D7 위쪽 결합 오른쪽 화살표
U+2192 오른쪽 화살표 위 U+20EF 아래쪽 결합 오른쪽 화살표
U+2212 빼기 기호 위 U+0305 결합 윗줄
U+2212 빼기 기호 아래 U+0332 결합 아랫줄
U+27F6 긴 오른쪽 화살표 위 U+20D7 위쪽 결합 오른쪽 화살표
U+27F6 긴 오른쪽 화살표 위 U+20EF 아래쪽 결합 오른쪽 화살표

비결합

결합 스타일 비결합
U+0300 결합 억음 악센트 위 U+0060 억음 악센트
U+0301 결합 양음 악센트 위 U+00B4 양음 악센트
U+0302 결합 곡절 악센트 위 U+005E 곡절 악센트
U+0302 결합 곡절 악센트 위 U+02C6 수식 문자 곡절 악센트
U+0303 결합 물결표 위 U+007E 물결표
U+0303 결합 물결표 위 U+02DC 작은 물결표
U+0304 결합 장음 기호 위 U+00AF 장음 기호
U+0305 결합 윗줄 위 U+002D 하이픈-빼기
U+0305 결합 윗줄 위 U+00AF 장음 기호
U+0305 결합 윗줄 위 U+203E 윗줄
U+0305 결합 윗줄 위 U+2212 빼기 기호
U+0306 결합 브리브 위 U+02D8 브리브
U+0307 위쪽 결합 점 위 U+02E
U+0307 위쪽 결합 점 위 U+002E 마침표
U+0307 위쪽 결합 점 위 U+02D9 위쪽 점
U+0308 결합 분음 기호 위 U+00A8 분음 기호
U+030B 결합 이중 양음 악센트 위 U+02DD 이중 양음 악센트
U+030C 결합 하체크 위 U+02C7 하체크
U+0312 위쪽 결합 뒤집힌 쉼표 위 U+0B8
U+0316 아래쪽 결합 억음 악센트 아래 U+0060 억음 악센트
U+0317 아래쪽 결합 양음 악센트 아래 U+00B4 양음 악센트
U+031F 아래쪽 결합 더하기 기호 아래 U+002B 더하기 기호
U+0320 아래쪽 결합 빼기 기호 아래 U+002D 하이픈-빼기
U+0323 아래쪽 결합 점 아래 U+002E 마침표
U+0323 아래쪽 결합 점 아래 U+02D9 위쪽 점
U+0324 아래쪽 결합 분음 기호 아래 U+00A8 분음 기호
U+0327 결합 세디유 아래 U+00B8 세디유
U+0328 결합 오고네크 아래 U+02DB 오고네크
U+032C 아래쪽 결합 하체크 아래 U+02C7 하체크
U+032D 아래쪽 결합 곡절 악센트 아래 U+005E 곡절 악센트
U+032E 아래쪽 결합 브리브 아래 U+02D8 브리브
U+0330 아래쪽 결합 물결표 아래 U+007E 물결표
U+0330 아래쪽 결합 물결표 아래 U+02DC 작은 물결표
U+0332 결합 아랫줄 아래 U+002D 하이픈-빼기
U+0332 결합 아랫줄 아래 U+005F 아랫줄
U+0332 결합 아랫줄 아래 U+2212 빼기 기호
U+0338 결합 긴 빗금 오버레이 겹침 U+02F
U+20D7 위쪽 결합 오른쪽 화살표 위 U+2192 오른쪽 화살표
U+20D7 위쪽 결합 오른쪽 화살표 위 U+27F6 긴 오른쪽 화살표
U+20EF 아래쪽 결합 오른쪽 화살표 위 U+2192 오른쪽 화살표
U+20EF 아래쪽 결합 오른쪽 화살표 위 U+27F6 긴 오른쪽 화살표

B.4 Unicode 기반 글리프 조립

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

다음 표는 글꼴이 MATH.MathVariants 테이블을 제공하지 않을 때 사용자 에이전트가 주어진 기본 문자를 늘이는 데 사용할 수 있는 대체 수단을 제공합니다. 5.3 연산자의 크기 변형 (MathVariants)의 알고리즘은 몇 가지 조정을 제외하면 동일하게 작동합니다:

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

C. 수학 영숫자 기호

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

[xml-entity-names]에 자세히 설명된 대로 굵게, 이탤릭, 프락투어, 고정폭, 이중선 등의 형식을 가진 수학 영숫자 기호를 Unicode에서 사용할 수 있습니다.

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

또는 일부 수학 글꼴은 두 스타일을 모두 제공하기 위해 [OPEN-FONT-FORMAT]의 salt 또는 ssXY 속성에 의존합니다. 페이지 작성자는 해당 OpenType 글꼴 기능과 함께 font-variant-alternates 속성을 사용하여 이러한 글리프에 접근할 수 있습니다.

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

C.1 italic 매핑

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

D. 감사의 말

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

MathML Core는 MathML3을 기반으로 합니다. 해당 명세에 기여한 사람들은 [MathML3]의 부록 E를 참조하십시오.

MathML Core는 처음에 MathML 커뮤니티 그룹에서 개발되었으며, 이후 Math 작업 그룹에서 개발되었습니다. 이 명세를 개발하는 동안 MathML Core 회의에 정기적으로 참여한 작업 그룹 또는 커뮤니티 그룹 구성원은 다음과 같습니다: Brian Kardell, Bruce Miller, Daniel Marques, David Carlisle, David Farmer, Deyan Ginev, Frédéric Wang, Louis Mahler, Moritz Schubotz, Murray Sargent, Neil Soiffer, Patrick Ion, Rob Buis, Steve Noble 및 Sam Dooley.

또한 편집을 도와주신 Brian Kardell, Neil Soiffer 및 Rob Buis에게 특별히 감사드립니다.

테스트 스위트를 도와주신 다음 분들께도 깊이 감사드립니다: Brian Kardell, Frédéric Wang, Neil Soiffer 및 Rob Buis. 여러 테스트는 브라우저 저장소의 MathML 테스트를 기반으로 하며, Mozilla 및 WebKit 기여자들에게 감사드립니다.

공개 커뮤니케이션 채널을 통해 의견과 피드백을 제공하여 이 명세를 만드는 데 도움을 주신 다음 분들께 감사드립니다: André Greiner-Petter, Anne van Kesteren, Boris Zbarsky, Brian Smith, Elika Etemad, Emilio Cobos Álvarez, ExE Boss, Ian Kilpatrick, Koji Ishii, L. David Baron, Michael Kohlhase, Michael Smith, Ryosuke Niwa, Sergey Malkin, Tab Atkins Jr., Viktor Yaffle 및 frankvel.

E. 보안 고려 사항

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

이 명세는 2.1.3 전역 속성에 설명된 MathML 이벤트 핸들러 속성을 통해 스크립트 실행 메커니즘을 추가합니다. UA는 HTML 또는 SVG 요소에 적용되는 것과 동일한 보안 제한에 따라 이러한 속성에 지정된 스크립트의 실행을 차단하도록 결정할 수 있습니다.

참고

[MathML3]에서는 href 또는 xlink:href 속성을 통해 모든 요소를 링크할 수 있었으며, 신뢰할 수 없는 리소스를 가리키거나 심지어 javascript:를 실행하는 URL도 사용할 수 있었습니다. 이러한 속성은 MathML Core에서 사용할 수 없습니다. 그러나 2.2.1 HTML 및 SVG에 설명된 대로 HTML 또는 SVG 링크를 포함하여 MathML 내부에 HTML 또는 SVG 콘텐츠를 삽입할 수 있습니다.

참고

[MathML3]에서는 브라우저 상태 표시줄의 텍스트를 재정의하기 위해 maction 요소의 actiontype 값을 "statusline"으로 설정하여 사용할 수 있었습니다. 특히 공격자는 이를 이용해 신뢰할 수 없는 링크의 URL 텍스트를 숨길 수 있었습니다. 예:

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

이 기능은 MathML Core에서 사용할 수 없으며, 여기서 maction 요소는 본질적으로 추가 스타일이 적용된 mrow 컨테이너처럼 동작합니다.

공격자는 매우 큰 늘일 수 있는 연산자를 삽입하여 UA를 멈추게 하려고 시도할 수 있으며, 이는 사실상 글리프 조립의 셰이핑 알고리즘이 매우 많은 글리프를 처리하도록 만듭니다. UA는 rmin 및 GlyphAssembly.partCount를 최댓값으로 제한하여 이 문제를 우회할 수 있습니다.

CSS Fonts 모듈에 설명된 대로, 공격자는 잘못 구성되거나 악의적인 글꼴을 이용하여 브라우저 구현의 잠재적인 보안 결함을 악용하려고 시도할 수 있습니다. 이 명세에서는 OpenType MATH 테이블을 광범위하게 사용하므로 UA는 글꼴 정제 메커니즘이 해당 테이블을 처리할 수 있도록 해야 합니다.

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

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

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

2.2.1 HTML 및 SVG에 설명된 대로, MathML은 <foreignObject> 요소를 통해 SVG 이미지에 삽입할 수 있으며, 따라서 canvas 요소에서 사용할 수 있습니다. UA는 캔버스를 오염시키고 JavaScript API를 통해 캔버스 콘텐츠에 접근하려 할 때 "SecurityError"를 반환하는 것과 같은 잠재적인 정보 유출을 방지하기 위한 모든 조치를 구현하도록 결정할 수 있습니다.

다음 예에서 캔버스 이미지는 https://example.org/에 대한 HTML 링크가 포함된 일부 MathML 콘텐츠의 이미지로 설정됩니다. 공격자가 context.getImageData()를 통해 픽셀을 읽어 해당 링크의 방문 여부를 판별할 수 없어야 합니다. MathML의 링크에 대한 자세한 내용은 E. 보안 고려 사항을 참조하십시오.

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

이 명세는 시스템 글꼴이 관련될 수 있는 DOM 요소의 레이아웃을 설명합니다. 따라서 HTML/CSS 레이아웃과 마찬가지로 JavaScript API (예: 캔버스 컨텍스트에 삽입된 콘텐츠의 context.getImageData() 또는 단순히 getBoundingClientRect())를 사용하여 박스 크기와 위치를 측정하고 시스템 글꼴에서 데이터를 추론할 수 있습니다. 이러한 글꼴에 대한 다양한 테스트를 조합하고 측정값을 잘 알려진 글꼴의 결과와 비교함으로써 공격자는 사용자의 기본 글꼴을 판별하려고 시도할 수 있습니다.

다음 HTML+CSS+JavaScript 문서는 특이한 메트릭을 가진 웹 글꼴을 이용하여 A Well Known System Font를 기본적으로 사용할 수 있는지 확인하려고 시도합니다.

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

다음 HTML+CSS+JavaScript 문서는 UI 세리프 글꼴이 아시아권 글리프를 제공하는지 확인하려고 시도합니다:

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

다음 HTML+CSS 문서는 동일한 텍스트를 text-decoration-thickness가 각각 from-font 및 1em(여기서는 100픽셀)로 설정된 상태로 렌더링합니다. 두 밑줄의 높이를 비교하면 PostScript 테이블의 underlineThickness 값을 상당히 정확하게 근사하여 계산할 수 있습니다 [OPEN-FONT-FORMAT].

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

이 명세는 MathML 콘텐츠를 렌더링하기 위해 5. OpenType MATH 테이블의 정보에 의존합니다. 위에서 HTML+CSS+JavaScript 문서에 대해 설명한 것과 유사한 측정 기법을 사용하면 MathConstants 및 MathGlyphInfo에서 대부분의 레이아웃 매개변수를 상당히 정확하게 근사할 수 있습니다. MathML 렌더링에 MathVariants 테이블을 사용하는 것도 서로 다른 크기의 늘일 수 있는 연산자를 canvas 컨텍스트 안에 배치하여 관찰할 수 있습니다.

이러한 매개변수 각각은 그 자체로는 개인 정보가 아니지만, 이 명세를 구현하면 공격자가 핑거프린팅 기법을 구현하는 데 사용할 수 있는 노출된 글꼴 정보의 집합이 증가합니다. 일반적으로 이러한 정보는 사용자가 사용할 수 있고 선호하는 수학 글꼴을 판별하는 데 도움이 될 수 있습니다.

G. 적합성

적합성 요구 사항은 설명적 단언과 RFC 2119 용어의 조합으로 표현됩니다. 이 문서의 규범적 부분에서 사용하는 “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY” 및 “OPTIONAL”이라는 핵심 단어는 RFC 2119에 설명된 대로 해석해야 합니다. 그러나 가독성을 위해 이 명세에서는 이러한 단어가 모두 대문자로 표시되지는 않습니다.

명시적으로 비규범적이라고 표시된 절, 예제 및 참고를 제외한 이 명세의 모든 텍스트는 규범적입니다. [RFC2119]

이 명세의 예제는 “예를 들어”라는 말로 시작하거나 다음과 같이 class="example"을 사용하여 규범적 텍스트와 구분됩니다:

이것은 정보 제공용 예제의 예입니다.

정보 제공용 참고는 “참고”라는 단어로 시작하고 다음과 같이 class="note"를 사용하여 규범적 텍스트와 구분됩니다:

참고

참고로, 이것은 정보 제공용 참고입니다.

권고 사항은 특별한 주의를 환기하도록 스타일링된 규범적 절이며, 다음과 같이 <strong class="advisement">을 사용하여 다른 규범적 텍스트와 구분됩니다: UA는 접근 가능한 대안을 MUST 제공해야 합니다.

H. 참고 문헌

H.1 규범적 참고 문헌

[CSS-CASCADE-4]
CSS 캐스케이딩 및 상속 레벨 4. Elika Etemad; Tab Atkins Jr. W3C. 2022년 1월 13일. W3C 후보 권고안. URL: https://www.w3.org/TR/css-cascade-4/
[CSS-DISPLAY-3]
CSS 디스플레이 모듈 레벨 3. Elika Etemad; Tab Atkins Jr. W3C. 2023년 3월 30일. W3C 후보 권고안. URL: https://www.w3.org/TR/css-display-3/
[CSS-POSITION-3]
CSS 위치 지정 레이아웃 모듈 레벨 3. Elika Etemad; Tab Atkins Jr. W3C. 2025년 3월 11일. W3C 작업 초안. URL: https://www.w3.org/TR/css-position-3/
[CSS-TEXT-4]
CSS 텍스트 모듈 레벨 4. Elika Etemad; Koji Ishii; Alan Stearns; Florian Rivoal. W3C. 2024년 5월 29일. W3C 작업 초안. URL: https://www.w3.org/TR/css-text-4/
[CSS-VALUES-4]
CSS 값 및 단위 모듈 레벨 4. Tab Atkins Jr.; Elika Etemad. W3C. 2024년 3월 12일. W3C 작업 초안. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-4]
CSS 쓰기 모드 레벨 4. Elika Etemad; Koji Ishii. W3C. 2019년 7월 30일. W3C 후보 권고안. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
캐스케이딩 스타일 시트 레벨 2 개정판 1(CSS 2.1) 명세. Bert Bos; Tantek Çelik; Ian Hickson; Håkon Wium Lie. W3C. 2011년 6월 7일. W3C 권고안. URL: https://www.w3.org/TR/CSS2/
[DOM]
DOM 표준. Anne van Kesteren. WHATWG. 현행 표준. URL: https://dom.spec.whatwg.org/
[HTML]
HTML 표준. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. 현행 표준. URL: https://html.spec.whatwg.org/multipage/
[OPEN-FONT-FORMAT]
정보 기술 — 시청각 객체의 코딩 — 제22부: Open Font Format. ISO/IEC. 2019년 1월. 게시됨. URL: https://www.iso.org/standard/74461.html
[RFC2119]
요구 수준을 나타내기 위해 RFC에서 사용하는 핵심 단어. S. Bradner. IETF. 1997년 3월. 현행 모범 사례. URL: https://www.rfc-editor.org/rfc/rfc2119
[SELECT]
선택자 레벨 3. Tantek Çelik; Elika Etemad; Daniel Glazman; Ian Hickson; Peter Linss; John Williams. W3C. 2018년 11월 6일. W3C 권고안. URL: https://www.w3.org/TR/selectors-3/
[SVG]
확장 가능한 벡터 그래픽(SVG) 1.0 명세. Jon Ferraiolo. W3C. 2001년 9월 4일. W3C 권고안. URL: https://www.w3.org/TR/SVG/

H.2 정보 제공용 참고 문헌

[CSS-FONTS-4]
CSS 글꼴 모듈 레벨 4. Chris Lilley. W3C. 2024년 2월 1일. W3C 작업 초안. URL: https://www.w3.org/TR/css-fonts-4/
[CSS-LAYOUT-API-1]
CSS 레이아웃 API 레벨 1. Greg Whitworth; Ian Kilpatrick; Tab Atkins Jr.; Shane Stephens; Robert O'Callahan; Rossen Atanassov. W3C. 2018년 4월 12일. FPWD. URL: https://www.w3.org/TR/css-layout-api-1/
[HOUDINI]
CSS-TAG Houdini 편집자 초안. URL: https://drafts.css-houdini.org/
[MATHML3]
Mathematical Markup Language (MathML) 버전 3.0 제2 판. David Carlisle; Patrick D F Ion; Robert R Miner. W3C. 2014년 4월 10일. W3C 권고안. URL: https://www.w3.org/TR/MathML3/
[MATHML4]
Mathematical Markup Language (MathML) 버전 4.0. David Carlisle et al.W3C 편집자 초안. URL: https://w3c.github.io/mathml/
[OPEN-TYPE-MATH-ILLUMINATED]
OpenType Math 해설. Ulrik Vieth. 2009. URL: https://www.tug.org/TUGboat/tb30-1/tb94vieth.pdf
[OPEN-TYPE-MATH-IN-HARFBUZZ]
HarfBuzz의 OpenType MATH. Frédéric Wang. URL: https://frederic-wang.fr/2016/04/16/opentype-math-in-harfbuzz/
[TEXBOOK]
The TeXBook. Knuth, Donald E. Addison-Wesley Professional. 1984.
[UNICODE]
Unicode 표준. Unicode Consortium. URL: https://www.unicode.org/versions/latest/
[webidl]
Web IDL 표준. Edgar Chen; Timothy Gu. WHATWG. 현행 표준. URL: https://webidl.spec.whatwg.org/
[xml-entity-names]
문자에 대한 XML 엔터티 정의(제3 판). Patrick D F Ion; David Carlisle. W3C. 2023년 3월 7일. W3C 권고안. URL: https://www.w3.org/TR/xml-entity-names/