Copyright © 1998-2026 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
이 명세서는 수학 마크업 언어(MathML)를 정의합니다. MathML은 수학 표기법을 기술하고 그 구조와 내용을 모두 포착하기 위한 마크업 언어입니다. MathML의 목표는 [HTML]이 텍스트에 대해 이 기능을 가능하게 했던 것처럼 월드와이드웹에서 수학을 제공하고 수신하며 처리할 수 있게 하는 것입니다.
이 명세서는 주로 이를 사용하여 렌더러나 편집기를 개발하거나 구현할 사람들, 또는 입력 또는 출력을 위한 프로토콜로서 MathML을 사용하여 통신할 소프트웨어를 대상으로 합니다. 이것은 사용자 안내서가 아닙니다 대신 참고 문서입니다.
MathML은 수학 표기법과 수학 내용을 모두 인코딩하는 데 사용할 수 있습니다. 약 38개의 MathML 태그는 추상적 표기 구조를 설명하고, 약 170개는 표현식의 의도한 의미를 모호하지 않게 지정하는 방법을 제공합니다. 추가 장에서는 MathML의 콘텐츠 요소와 표현 요소가 어떻게 상호작용하는지, MathML 렌더러가 어떻게 구현될 수 있으며 브라우저와 어떻게 상호작용해야 하는지를 논의합니다. 마지막으로 이 문서는 수학에 사용되는 특수 문자, MathML에서의 처리 방식, 유니코드에서의 존재, 그리고 글꼴과의 관계 문제를 다룹니다.
MathML은 사람이 읽을 수 있지만, 저자들은 일반적으로 수식 편집기, 변환 프로그램 및 기타 전문 소프트웨어 도구를 사용하여 MathML을 생성합니다. 이러한 MathML 도구의 여러 버전이 존재하며, 무료 소프트웨어와 상용 제품 모두 있으며 더 많은 도구가 개발 중입니다.
MathML은 원래 XML 애플리케이션으로 명세되었고 이 명세서의 대부분 예제는 그 문법을 가정합니다. 다른 문법도 가능하며, 특히 [HTML] 은 HTML에서의 MathML 문법을 지정합니다. 명시적으로 언급되지 않는 한, 이 명세서의 예제는 또한 유효한 HTML 문법입니다.
이 섹션은 이 문서가 발행될 당시의 상태를 설명합니다. 현재의 W3C 출판물 목록과 이 기술 보고서의 최신 개정판은 W3C 표준 및 초안 색인에서 찾을 수 있습니다.
MathML 및 웹에서의 수학 지원 문제에 대한 공개 토론은 Math Working Group의 공개 메일링 리스트 (리스트 아카이브)에서 이루어집니다.
가입하려면 제목 줄에 subscribe를 넣어 www-math-request@w3.org로
이메일을 보내십시오.
또는 이 명세서의 GitHub 리포지토리에 이슈를 보고하십시오.
문서의 발전에 대한 더 상세한 논의는 I. 변경 사항에서 찾을 수 있습니다.
일부 섹션은 축소되어 있으며 더 많은 세부정보를 보려면 확장할 수 있습니다. 다음 버튼은 그러한 모든 섹션을 확장하는 데 사용될 수 있습니다.
이 문서는 Math Working Group이 권고안 경로(Recommendation track)를 사용하여 작업 초안으로 발행한 문서입니다.
작업 초안으로의 발행은 W3C 및 그 회원들의 승인(endorsement)을 의미하지 않습니다.
이 문서는 초안이며 언제든지 다른 문서로 업데이트, 교체 또는 폐기될 수 있습니다. 이 문서를 진행 중인 작업 이외의 것으로 인용하는 것은 부적절합니다.
이 문서는 W3C 특허 정책 하에서 운영되는 그룹에 의해 작성되었습니다. W3C는 그룹의 산출물과 관련하여 이루어진 모든 특허 공개의 공개 목록을 유지합니다; 해당 페이지에는 특허 공개 절차에 대한 지침도 포함되어 있습니다. 개인이 특정 특허가 필수 청구항(Essential Claim(s))을 포함한다고 믿는 실제 지식을 가지고 있는 경우, 그 개인은 W3C 특허 정책의 섹션 6에 따라 정보를 공개해야 합니다.
이 문서는 2025년 8월 18일자 W3C 절차 문서의 적용을 받습니다.
이 절은 비규범적입니다.
수학과 그 표기법은 수세기, 심지어 수천 년에 걸쳐 발전해 왔습니다. 숙련된 독자에게 수학 표기법은 많은 정보를 빠르고 간결하게 전달합니다. 그러나 기호와 배열이 표현되는 수학의 의미 구조와 깊은 대응관계를 갖고 있음에도 불구하고, 표기법과 의미(시맨틱)는 동일하지 않습니다. 의미적 기호와 구조는 표기법의 그것과 미묘하게 구별됩니다.
따라서 전통적인 수학의 표시 표기뿐만 아니라 그 의미적 내용을 모두 표현할 수 있는 마크업 언어가 필요합니다. 전통적인 렌더링은 시각 독자에게 유용하지만, 마크업 언어는 접근성도 지원해야 합니다. 의미적 형태는 다양한 계산 목적을 지원해야 합니다. 두 형태 모두 초등 교육부터 연구 수준까지 모든 교육 단계에 적합해야 합니다.
MathML은 수학을 기술하기 위한 마크업 언어입니다. 독립적으로 사용되거나 다른 XML 내에서 사용될 때는 XML 문법을 사용하고, HTML 문서 내에서 사용될 때는 HTML 문법을 사용합니다. 개념적으로 MathML은 두 가지 주요 계열의 마크업으로 구성됩니다: Presentation(표현) 마크업은 수학식을 화면에 표시하는 데 사용되고; Content(콘텐츠) 마크업은 수학적 의미를 전달하는 데 사용됩니다. 이 두 계열은 병렬 마크업을 사용하여 다른 외부 표현들과 결합될 수 있습니다.
이 명세서는 다음과 같이 구성됩니다: 2. MathML 기초는 Presentation과 Content 마크업에 공통적인 기초를 논의하고; 3. 표현 마크업과 4. 콘텐츠 마크업은 각각 표현 및 콘텐츠 마크업을 다룹니다; 5. MathML 주석: 의도(intent)는 접근성을 위해 마크업에 주석을 다는 방법을 논의하고; 6. MathML 주석: 의미(semantics)는 Presentation, Content 및 다른 형식들을 결합할 수 있도록 마크업에 주석을 다는 방법을 논의합니다; 7. 호스트 환경과의 상호작용은 MathML이 응용 프로그램과 어떻게 상호작용하는지를 다루며; 마지막으로 특수 기호 및 문자, 엔티티와 글꼴에 관한 논의는 8. 문자, 엔티티 및 글꼴에 제공됩니다.
MathML의 명세는 두 계층으로 개발됩니다. MathML Core ([MathML-Core])는 (대부분의) Presentation 마크업을 다루며, 웹 브라우저에서 수학을 표시하는 정확한 세부사항에 초점을 맞춥니다. MathML Full, 즉 이 명세서는 MathML Core를 확장하여 주로 4. 콘텐츠 마크업에서 Content MathML을 정의합니다. 또한 추가 속성, 요소 또는 향상된 속성 문법으로 구성된 Presentation MathML의 확장도 정의합니다. 이러한 확장은 레거시 MathML과의 호환성 및 3.1.7 수식의 줄바꿈, 3.6 기본 수학 등 MathML Core의 레벨 1에 포함되지 않았지만 향후 버전의 MathML Core에 통합될 수 있는 사항을 다룹니다.
이 명세서는 MathML Core와 그 확장을 모두 포함합니다; 공통 기능은 로 표시되고, 확장은 로 표시됩니다.
MathML Full은 MathML Core의 적절한 상위 집합이 되도록 의도됩니다. 또한 유효한 Core 마크업은 Full 마크업으로 간주되어야 합니다. MathML Core의 구현체가 MathML Full의 확장 일부 또는 전부를 구현하는 경우에도, 해당 구현체는 계속해서 MathML Core의 준수 구현으로 간주되어야 합니다.
이 두 명세 외에도, Math WG 그룹은 비규범적인 Notes on MathML를 개발했으며, 이 문서는 MathML 사용 시 모범 사례를 이해하는 데 도움이 되는 추가 예제와 정보를 포함합니다.
MathML의 기본 '구문'은 XML 문법을 사용하여 정의되지만, 라벨된 트리를 인코딩할 수 있는 다른 문법들도 가능합니다. 특히 HTML 파서도 MathML과 함께 사용될 수 있습니다. 이러한 위에 '문법'—허용되는 요소들, 요소들이 나타날 수 있는 순서, 서로 어떻게 포함될 수 있는지, 및 속성 값에 대한 추가 문법 규칙들—을 겹쳐 정의합니다. 이러한 규칙들은 이 명세서에서 정의되며, A. MathML 파싱의 RELAXNG 스키마 [RELAXNG-SCHEMA]로 형식화되어 있습니다. 파생된 다른 형식의 스키마들(DTD 및 XML Schema [XMLSchemas])도 제공됩니다.
MathML의 문자 집합은 사용 중인 문법에서 허용하는 모든 유니코드 문자[Unicode]로 구성됩니다. (예: [XML] 또는 [HTML] 참조.) 수학을 위한 유니코드 문자 사용은 8. 문자, 엔티티 및 글꼴에서 논의됩니다.
다음 섹션들은 MathML 문법의 일반적인 측면과 속성 값에 사용되는 문법들을 설명합니다.
XML 네임스페이스[Namespaces]는 URI로 식별되는 이름들의 모음입니다. MathML 네임스페이스의 URI는 다음과 같습니다:
http://www.w3.org/1998/Math/MathML
MathML의 XML 직렬화(Serialisation)를 사용할 때 네임스페이스를 선언하려면,
xmlns 속성이나 xmlns 접두사가 있는 속성을 사용합니다.
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>...</mrow>
</math>
xmlns 속성이 접두사로 사용될 때, 이는 접두사를 선언하여 이후에 다른
요소나 속성을 특정 네임스페이스와 명시적으로 연관시키는 데 사용할 수 있습니다.
XML 문법을 사용하는 HTML에 MathML을 포함할 때는 다음과 같이 사용할 수 있습니다:
<body xmlns:m="http://www.w3.org/1998/Math/MathML">
...
<m:math><m:mrow>...</m:mrow></m:math>
...
</body>
HTML은 동일한 방식으로 네임스페이스 확장을 지원하지 않습니다. HTML 파서는 HTML, SVG 및 MathML 네임스페이스에 대한 내장 지식을 가지고 있습니다. xmlns 속성은
단지 일반 속성으로 처리됩니다. 따라서 HTML 직렬화(Serialisation)에서 MathML을 사용할 때는 접두사가 있는 요소 이름을 사용하면 안 됩니다. xmlns=http://www.w3.org/1998/Math/MathML
는 math 요소에 사용할 수 있지만, HTML 파서에서는 무시됩니다.
MathML 표현식이 XML 파서 또는 HTML 파서에 의해 파싱될 가능성이 있는 문맥에 있을 경우,
최대한의 호환성을 보장하기 위해 다음 형태를 사용할 것을 권장(SHOULD)합니다:
<math xmlns="http://www.w3.org/1998/Math/MathML">
...
</math>
개념적으로 하나의 인수만 받는 것으로 여겨지는 표현 요소들 중에는
편의를 위해 임의 개수의 자식을 받도록 작성된 것들이 있습니다;
그런 경우 해당 자식들을 포함하는 mrow를 추론하여,
그것이 해당 요소의 인수로 간주됩니다; 자세한 내용은 3.1.3.1 추론된 <mrow>들을 보십시오.
MathML 사양 전반에 걸쳐 각 요소의 문법을 상세히 논의할 때, 요구되는 인수의 수와 그 순서, 그리고 내용에 대한 다른 제약들이 명시됩니다. 이 정보는 표현 요소들에 대해 3.1.3 필수 인수에 표로도 정리되어 있습니다.
웹 플랫폼 구현체는 [MathML-Core]에 명시된 상세한 레이아웃 규칙을 따라야 합니다.
이 문서는 Presentation MathML을 렌더링하는 특정한 방법들을 권고(즉, 요구하지는 않음)만 합니다; 이는 매체에 종속적인 렌더링이나 CSS 기반 Web Platform을 사용하지 않는 구현체들을 허용하기 위한 것입니다.
MathML 요소들은 요소의 의미나 효과를 더 구체화하는 값을 가지는 속성들을 사용합니다. 속성 이름은 이 문서 전반에서
monospaced 글꼴로 표시됩니다. 속성의 의미와 허용 값들은 각 요소의 명세 내에서 설명됩니다.
이 섹션에서 설명된 문법 표기법은 허용되는 값들을 지정할 때 사용됩니다.
속성 값의 MathML 고유 문법을 설명하기 위해, 현재 문서의 대부분 속성에 대해 다음 관습과 표기법이 사용됩니다.
| 표기 | 일치 대상 |
|---|---|
| boolean | [MathML-Core]에 정의된 대로,
true 또는 false에 대해 ASCII 대소문자 구분 없이 일치하는 문자열입니다.
|
| unsigned-integer | [MathML-Core]에 정의된 대로, integer이며,
첫 문자로 U+002D HYPHEN-MINUS 문자(-) 또는 U+002B PLUS SIGN (+)가 아닌 것입니다. |
| positive-integer | unsigned-integer로서 모두 "0"(U+0030)만으로 구성되지 않은 것, 즉 양의 정수를 나타냅니다 |
| integer | 선택적 "-" (U+002D) 뒤에 unsigned-integer가 오며, 정수를 나타냅니다 |
| number | 선택적 접두사 "-" (U+002D)가 있을 수 있고, 이어서 unsigned-number가 오는, 종결되는 소수 숫자를 나타냅니다 (유리수의 한 종류) |
| unsigned-number |
[CSS-VALUES-3]에 정의된
number와 같은
값이며,
첫 문자가 U+002D HYPHEN-MINUS (-) 또는 U+002B PLUS SIGN (+)가 아닌,
비음수의 종결 소수 숫자를 나타냅니다
|
| character | 단일의 비공백 문자 |
| string | 임의의, 비어 있지 않고 유한한, character들의 문자열 |
| length | 아래에 설명된 길이, 2.1.5.2 길이값 속성 |
| namedspace | 명명된 length, namedspace, 이는 2.1.5.2 길이값 속성에 설명된 바와 같습니다 |
| color | [CSS-Color-3]에서 지정한 문법을 사용하는 색상 |
| id | 문서 내에서 유일한 식별자; XML 권고안의 NAME 문법을 만족해야 합니다 [XML] |
| idref | 문서 내 다른 요소를 참조하는 식별자; XML 권고안의 NAME 문법을 만족해야 합니다 [XML] |
| URI | 일반적인 문법을 갖는 통일 자원 식별자(Uniform Resource Identifier) [RFC3986]. 속성 값은 스키마에서 anyURI로 타입되어 있어 XML 문자의 어떤 시퀀스도 허용합니다. 시스템이 이 문자열을 URI로 사용해야 할 경우, URI에서 허용되지 않는 문자의 UTF-8 바이트들을 %HH 형식으로 인코딩해야 합니다. 이는 해당 속성 값이 IRI 또는 더 일반적으로 LEIRI로 해석될 수 있도록 보장합니다; [IRI] 참조. |
| 기울임꼴 단어 | 각 속성에 대해 본문에서 설명된 값들; 2.1.5.3 속성의 기본값 참조 |
| "literal" | 따옴표로 감싸진 기호, 속성 값에 문자 그대로 존재하는 기호 (예: "+" 또는 '+') |
위에서 설명한 '타입'들(단, string 제외)은 다음 연산자를 사용하여 복합 패턴으로 결합될 수 있습니다. 전체 속성 값은 마크업 문서에서 단일 인용부(') 또는 이중 인용부(")로 둘러싸여야 합니다. 이 명세서에서는 종종 "-"와 같은 리터럴 표현을 표기하기 위해 이중 인용부를 사용합니다(위 표의 5행 예 참조).
아래 표에서 형식 f는 위 표에 설명된 타입의 인스턴스를 의미합니다. 결합 연산자들은 우선순위가 높음에서 낮음으로 나열되어 있습니다:
| 표기 | 일치 대상 |
|---|---|
| 같은 | |
| 의 선택적 인스턴스 | |
| 구분 공백 문자를 갖는 의 0개 이상 인스턴스 | |
| 구분 공백 문자를 갖는 의 1개 이상 인스턴스 | |
| 각 형식 의 한 인스턴스가 순서대로 존재하며, 구분 공백이 없습니다 | |
| 각 형식 의 한 인스턴스가 순서대로 존재하며, 구분 공백 문자(콤마는 없음)가 있습니다 | |
| 지정된 형식들 중 임의의 하나 |
우리가 선택한 표기법은 MathML의 기본 스키마에 사용된 RelaxNG의 구문 표기 스타일과 유사합니다. A. MathML 파싱 참조.
일부 응용 프로그램이 공백 정규화에 대해 일관되지 않기 때문에, 최대 상호운용성을 위해 값의 부분을 구분할 때는 단일 공백 문자만 사용하는 것이 권장됩니다. 또한 속성 값의 선행 및 후행 공백은 피해야 합니다.
HTML과의 호환성을 위해, 열거된 문자열 값 목록으로 정의된 속성들은 ASCII 대소문자 구분 없음으로 비교해야 합니다.
대부분의 수치 속성에 대해 표현 가능한 값들의 부분집합만 합리적이며; 이 부분집합 밖의 값들은, 달리 명시되지 않는 한, 오류가 아니라 렌더러의 재량으로 허용 가능한 가장 근접한 값으로 반올림됩니다. 허용되는 값들의 집합은 렌더러에 따라 달라질 수 있으며, MathML에서 지정하지 않습니다.
속성 값 문법 설명에서 음수 부호('-')를 허용한다고 선언된 경우(예: number 또는
integer), 음수 값이 합리적이지 않은 경우에도 음수 부호가 제공되면 문법 오류는 아닙니다. 대신 그 값은 앞서
설명한 대로 처리 응용 프로그램에 의해 처리되어야 합니다. 명시적 '+' 기호는 문법에서 구체적으로 나열된 경우(따옴표로 감싼 '+' 또는 "+")를 제외하고는 수치 값의
일부로 허용되지 않으며, 그 존재는 속성 값의 의미를 변경할 수 있습니다(허용되는 경우 각 속성 설명에 기록됨).
대부분의 표현 요소들은 크기, 간격 또는 유사한 속성에 사용할 길이 값을 허용하는 속성을 가집니다.
[MathML-Core]는 길이를
[CSS-VALUES-3]에 정의된
<length-percentage>
문법으로만 허용합니다.
MathML Full은 길이 문법을 확장하여 또한 namedspace를 허용하는데,
이는 다음 중 하나와 ASCII 대소문자 구분 없이 일치합니다:
| 양의 공백 | 음의 공백 | 값 |
|---|---|---|
veryverythinmathspace
|
negativeveryverythinmathspace |
±1/18 em |
verythinmathspace
|
negativeverythinmathspace |
±2/18 em |
thinmathspace |
negativethinmathspace
|
±3/18 em |
mediummathspace |
negativemediummathspace |
±4/18 em |
thickmathspace |
negativethickmathspace |
±5/18 em |
verythickmathspace
|
negativeverythickmathspace |
±6/18 em |
veryverythickmathspace |
negativeveryverythickmathspace |
±7/18 em |
MathML 3에서는 mpadded의 속성이 콘텐츠의 원래 치수를 나타내는
세 개의 의사 단위(pseudo-units)인 height,
depth, 및 width를 허용했습니다(이는 일반적인 CSS 단위 중 하나를 대신함).
또한 단위 없이 숫자로만 지정된 길이를 기준값의 배수로 해석하는 사용(권장 중단)이 허용되었는데,
이러한 형태들은 MathML 4에서 유효하지 않은 것으로 간주됩니다.
그러나 상대 단위에 대한 두 가지 추가적인 측면을 명확히 해야 합니다.
첫째, 3.4
스크립트 및 한계 스키마 또는 mfrac와 같은 일부 요소들은
암묵적으로 일부 인수에 대해 더 작은 글꼴 크기로 전환합니다.
유사하게, mstyle는 현재 글꼴 크기를 명시적으로 변경하는 데 사용될 수 있습니다. 이러한 경우,
해당 문맥 내부에서의 em 또는 ex의 유효 값은 외부와 다를 수 있습니다.
둘째, 속성 값에 사용된 em 또는 ex의 유효 값은 현재 글꼴 크기 변경의 영향을 받을 수 있습니다.
따라서 mathsize 및 scriptlevel와 같이
현재 글꼴 크기에 영향을 주는 속성들은 다른 길이값 속성들을 평가하기 전에 처리되어야 합니다.
MathML 속성의 기본값은 일반적으로 특정 요소의 상세 설명과 함께 본문에 제공됩니다. 속성 표에 평문으로 표시된 기본값은 문자 그대로이고, 이탤릭체로 표시된 경우에는 기본값을 계산하는 방법에 대한 설명입니다.
상속됨(inherited)으로 설명된 기본값은 3.3.4 스타일 변경 <mstyle>에 설명된 대로
렌더링 환경에서 가져옵니다; 또는 경우에 따라(개별적으로 설명된 경우) 둘러싼 요소의 다른 속성 값이나 해당 값의 일부에서 가져옵니다.
사용되는 값은 항상 명시적으로 지정될 수 있었을 값이며; 동일 요소의 내용이나 속성에 의존하지 않고 오직 그 환경에만 의존합니다.
(사용될 때의 의미는 이러한 속성이나 내용에 의해 달라질 수 있습니다.)
자동(automatic)으로 설명된 기본값은 MathML 렌더러가 높은 품질의 렌더링을 생성하도록 계산해야 합니다; 이 계산 방법은 보통 MathML 명세에서 지정되지 않습니다. 계산된 값은 항상 명시적으로 지정될 수 있었을 값이며, 보통 요소 내용과 렌더링되는 문맥에 따라 달라집니다.
속성 표에 나타나는 다른 이탤릭체 설명의 기본값들은 각 속성마다 개별적으로 설명됩니다.
XML 시작 태그에서 속성 값 주위에 요구되는 단일 또는 이중 인용부는 각 요소의 속성 값 문법 표에는 표시되지 않지만, 본문 예제에서는 속성 값이 올바르게 표시되도록 인용부가 포함되어 있습니다.
일반적으로 MathML에는 상속됨 또는 자동인 속성을 지정하지 않은 상태의 효과를 시뮬레이트하는 메커니즘이 없습니다. "inherited"나
"automatic"이라는 단어를 명시적으로 주는 것은 동작하지 않으며 일반적으로 허용되지 않습니다. 또한 mstyle
요소(3.3.4 스타일 변경 <mstyle>)는 자식의 표현 속성 기본값을 변경하는 데 사용할
수도 있습니다.
또한 이러한 기본값들은 속성이 제공되지 않았을 때 MathML 응용 프로그램의 동작을 설명하며; DTD 기반 명세에서 때때로 요구되는 것처럼 XML 파서가 값을 채워 넣는 것을 의미하지 않습니다.
일반적으로 MathML 렌더링의 특성 중 문서 전체 또는 큰 문서의 섹션에 대한 전반적 속성으로 생각할 수 있는 것들이 있습니다. 예를 들어 mathsize (수학 글꼴 크기: 3.2.2 토큰 요소에 공통인 수학 스타일 속성 참조)이나 적분 또는 합과 같은 연산자의 한계 설정 동작(예:
movablelimits 또는 displaystyle), 또는
수식의 줄 바꿈 동작(예: linebreakstyle) 등이 있습니다; 이러한 속성들은 여러 토큰 요소에서 볼 수
있습니다.
이러한 것들은 포함하는 범위로부터 상속된다고 생각할 수 있습니다. 위에서 우리는 MathML 속성의 기본값 설정을 상속됨 또는 자동으로
언급했습니다; 세 번째 전역 기본값 소스는 MathML 연산자 사전(operator dictionary)입니다. 기본 예시는 B. 연산자 사전에 제공됩니다.
이는 또한 3.2.5.6.1 연산자 사전에서
논의되며 예제는 3.2.5.2.1 사전 기반
속성에 제시됩니다.
MathML에서, XML과 마찬가지로 공백(whitespace)
은 단순한 공백, 탭, 개행 또는 캐리지 리턴을 의미합니다. 즉, 16진수 유니코드 코드 U+0020,
U+0009, U+000A 또는 U+000D 문자를 말합니다; 또한 [XML]의 섹션 2.3의 공백 논의도
참조하십시오.
MathML은 토큰 요소 외부에 발생하는 공백을 무시합니다.
그곳에는 비공백 문자가 허용되지 않습니다. 토큰 요소의 내용 내에서 발생하는 공백(단, <cs>는 예외)은 다음과 같이 정규화됩니다.
내용의 시작과 끝에 있는 모든 공백은 제거되며, 요소 내용 내부의 공백은 정식으로 축약되어,
하나 이상의 공백 문자 시퀀스는 하나의 공백 문자(U+0020, 때때로 공백 문자라고 함)로 대체됩니다.
예를 들어, <mo> ( </mo>는 <mo>(</mo>와 동등하며,
<mtext>
Theorem
1:
</mtext>
는 다음과 동등합니다:
<mtext>Theorem 1:</mtext>
또는
<mtext>Theorem 1:</mtext>.
토큰의 내용 시작 또는 끝에 공백 문자를 인코딩하거나,
단일 공백이 아닌 연속된 공백을 인코딩하려는 저자는,
그것들이 무시되지 않도록 비분리 공백 U+00A0(또는 nbsp)나
트림되지 않는 다른 비표기 문자들을 사용해야 합니다.
예를 들어 위의 mtext 사용을 다음과 비교하십시오.
<mtext>
 <!--nbsp-->Theorem  <!--nbsp-->1:
</mtext>
첫 번째 예가 렌더링될 때, Theorem
앞에는 아무것도 없고,
Theorem
과 1:
사이에는 하나의 유니코드 공백 문자가 있으며,
1:
뒤에는 아무것도 없습니다. 두 번째 예에서는 Theorem
앞에 단일 공백 문자가 렌더되고;
1:
앞에는 유니코드 공백 문자 하나와 유니코드 비분리 공백 문자 하나, 두 개의 공백이 렌더되며;
1:
뒤에는 아무것도 없습니다.
xml:space 속성의 값은 이 상황에서 관련이 없음을 주의하십시오. XML 처리기는 토큰의 공백을 MathML 처리기로
전달하므로,
공백이 잘리고 축약되는 것은 MathML 처리 요구사항에 의해 지정됩니다.
토큰 요소 mi, mn, mo,
ms, mtext,
ci, cn, cs,
csymbol 및 annotation의 내용 외부에서 발생하는 공백은,
공백 문자만을 포함하는 mtext 요소 대신 mspace 요소를 사용해야
합니다.
MathML은 문서 내 각 MathML 마크업 인스턴스를 캡슐화하는 단일 최상위 또는 루트 math 요소를 지정합니다. 모든 다른
MathML 내용은
math 요소에 포함되어야 합니다; 다시 말해,
모든 유효한 MathML 표현식은 바깥쪽 <math> 태그로 래핑됩니다. math
요소는 항상 MathML 표현식의 가장 바깥 요소여야 하며;
한 math 요소가 다른 math 요소를 포함하는 것은 오류입니다. 이러한
고려사항은 잘라내기-붙여넣기와 같이 하위 표현식이 응용 프로그램 간에 전달되는 경우에도 적용됩니다;
7.3 MathML 전송 참조.
math 요소는 임의 개수의 자식 요소를 포함할 수 있습니다. 기본적으로 이들은
mrow 요소 안에 포함된 것처럼 렌더링됩니다.
math 요소는
표현 요소에 공통인 수학 속성에 지정된 일반적인 표현 속성들과,
2.1.6 모든 MathML 요소에 공통인 속성을 모두
허용합니다.
특히, 전체 방향성을 설정하기 위한 dir 속성을 허용합니다; math
요소는 일반적으로 방향성을 지정하기에 가장 유용한 위치입니다
(자세한 논의는 3.1.5 방향성 참조).
dir 속성은 math 요소에서 기본값이 ltr이며(다른 dir 속성을 허용하는 모든 다른 요소에서는
상속됨이 기본입니다);
이는 방향성 개념이 없었던 MathML 2.0과의 하위 호환성을 제공합니다.
또한, mstyle 및 다른 표현 요소들과 동일한 방식으로 경계 상자의 배경색을 설정하기 위한 mathbackground 속성을 허용합니다(속성의 기본값을 지정하는 대신).
(자세한 내용은 3.1.9 표현 요소에 공통인 속성
참조).
이들 속성들 외에도 math 요소는 다음을 허용합니다:
| 이름 | 값들 | 기본값 |
|---|---|---|
| display | "block" | "inline" | inline |
포함된 MathML 표현식을 별도의 수직 블록(디스플레이 스타일)으로 렌더링할지,
또는 인라인으로 인접 텍스트에 맞춰 렌더링할지를 지정합니다.
display=block일 때,
displaystyle은 true로
초기화되며,
반면 display=inline일 때는
displaystyle이 false로
초기화됩니다;
두 경우 모두 scriptlevel은 0으로 초기화됩니다
(자세한 내용은 3.1.6
Displaystyle 및 Scriptlevel 참조).
또한 수학 요소가 더 큰 문서에 포함될 때,
블록 수학 요소는 문서 유형에 적합한 블록 요소로 처리되어야 하고(일반적으로 새로운 수직 블록으로),
인라인 수학 요소는 인라인으로 처리되어야 합니다(일반 텍스트 단어 시퀀스인 것처럼).
특히, 이는 공백 및 줄바꿈에 적용됩니다: 예를 들어 인라인 수학과 즉시 뒤따르는 문장부호 사이에 공백이나 줄 바꿈이 삽입되어서는 안 됩니다.
display 속성이 없을 때, 렌더링 에이전트는 문맥에 적합하도록 초기화할 자유가 있습니다.
비교는 ASCII 대소문자 구분 없음으로 수행되며, 모든 일치 문자열이 값으로 허용됩니다. |
||
| maxwidth | length | 사용 가능한 너비 |
| 줄바꿈에 사용될 최대 너비를 지정합니다. 기본값은 주변 환경에서 사용 가능한 최대 너비입니다. 해당 값을 결정할 수 없을 경우, 렌더러는 무한한 렌더링 너비를 가정해야 합니다. | ||
| overflow | "linebreak" | "scroll" | "elide" | "truncate" | "scale" | linebreak |
|
표현식이 허용된 너비에 맞지 않을 때 선호되는 처리 방법을 지정합니다. 아래의 논의를 참조하십시오.
비교는 ASCII 대소문자 구분 없음으로 수행되며, 모든 일치 문자열이 값으로 허용됩니다. |
||
| altimg | URI | 없음 |
| 내장 MathML을 지원하지 않는 사용자 에이전트를 위한 대체로 표시할 이미지에 대한 URI를 제공합니다. | ||
| altimg-width | length | altimg의 너비 |
altimg을 표시할 너비를 지정하며, 필요하면 이미지를 스케일합니다;
altimg-height를 참조하십시오.
|
||
| altimg-height | length | altimg의 높이 |
altimg을 표시할 높이를 지정하며, 필요하면 이미지를 스케일합니다;
altimg-width와 altimg-height 중 하나만 주어지면,
이미지의 종횡비를 보존하도록 스케일해야 합니다;
둘 다 주어지지 않으면 이미지를 자연 크기로 보여야 합니다.
|
||
| altimg-valign | length | "top" | "middle" | "bottom" | 0ex |
인라인 인접 자료에 대한 이미지의 수직 정렬을 지정합니다.
altimg-valign의 양수 값은 이미지의 하단을 현재 기준선 위로 이동시키고, 음수 값은 그것을
내립니다.
키워드 "top"은 이미지의 상단을 인접 인라인 자료의 상단에 정렬합니다;
"center"는 이미지의 중앙을 인접 자료의 중앙에 정렬합니다;
"bottom"은 이미지의 하단을 인접 자료의 하단에 정렬합니다(반드시 기준선은 아님). 이 속성은 display=inline일 때만 효과가
있습니다.
기본적으로 이미지는 하단이 기준선에 맞춰 정렬됩니다.
비교는 ASCII 대소문자 구분 없음으로 수행되며, 모든 일치 문자열이 값으로 허용됩니다. |
||
| alttext | string | 없음 |
| 내장 MathML 또는 이미지를 지원하지 않는 사용자 에이전트를 위한 텍스트 대체를 제공합니다. | ||
| cdgroup | URI | 없음 |
이 math 요소 내에서 csymbol, annotation, 및
annotation-xml 요소의 OpenMath 콘텐츠 사전을 찾기 위한 CD 베이스들의 카탈로그 역할을
하는 CD 그룹 파일을 지정합니다; 4.2.3 콘텐츠 기호 참조. 명시적으로 cdgroup 속성이 지정되지 않은 경우,
이 math 요소를 포함하는 문서 형식은 CD 베이스를 결정하기 위한 방법을 제공할 수 있습니다.
그렇지 않으면 시스템은 CD 베이스를 결정해야 합니다; 특정 정보가 없을 때는 모든 csymbol,
annotation, 및 annotation-xml
요소에 대해 http://www.openmath.org/cd가 CD 베이스로 가정됩니다.
이는 OpenMath Society가 유지하는 표준 CD 모음의 CD 베이스입니다.
|
||
크기 협상이 불가능하거나 실패하는 경우(예: 표현식이 허용된 너비에 맞지 않을 때),
overflow 속성은 렌더러에게 처리 방법을 제안하기 위해 제공됩니다.
허용되는 값들은 다음과 같습니다:
| 값 | 의미 |
|---|---|
| "linebreak" | 표현식이 여러 줄에 걸쳐 나뉘어 표시됩니다. 자세한 논의는 3.1.7 수식의 줄바꿈을 보십시오. |
| "scroll" | 창은 수학 표현식의 전체 표시에 대한 뷰포트를 제공합니다. 필요에 따라 수평 또는 수직 스크롤 막대가 창에 추가되어 뷰포트를 다른 위치로 이동할 수 있게 합니다. |
| "elide" | 화면을 줄이기 위해 일부를 제거하여 나머지가 창에 들어가도록 표시를 축약합니다. 예를 들어 큰 다항식은 첫 항과 마지막 항만 표시하고 그 사이에 + ... +를 넣을 수 있습니다. 고급 렌더러는 축약된 영역을 확대하여 볼 수 있는 기능을 제공할 수 있습니다. |
| "truncate" | 표시를 오른쪽 및 아래 경계에서 단순히 잘라서 축약합니다. 시청자에게 약간의 잘림 표시를 제공하는 것이 권장됩니다. |
| "scale" | 수학 표현식을 표시하는 데 사용되는 글꼴이 선택되어 전체 표현식이 창에 맞도록 합니다. 이는 표현식이 너무 큰 경우에만 발생합니다. 창이 필요 이상으로 큰 경우에는 표현식이 정상 크기로 큰 창 내에 표시됩니다. |
이 장에서는 수학 표기법의 레이아웃 구조를 설명하는 데 사용할 수 있는 MathML의 presentation
요소들을 규정합니다.
대부분의 Presentation Markup은 [MathML-Core]에 포함되어 있습니다. 해당 명세서는 웹 브라우저에서 핵심에 속하는 요소와 속성들을 표시할 때의 정확한 세부사항을 참조해야 합니다. 웹 브라우저 밖에서는 MathML 표현 요소들이 특정한 렌더링 방식을 제시(요구하지 않음)할 뿐이며, 매체에 따라 달라지는 렌더링과 개별적인 스타일 선호를 허용하기 위함입니다. 브라우저 기반이 아닌 렌더러는 렌더링이 이해 가능하다는 조건 하에 자체 레이아웃 규칙을 자유롭게 사용할 수 있습니다.
presentation 요소들의 이름은 시각적 레이아웃을 암시합니다.
그러나 수학 표기법은 새로운 개념이 개발됨에 따라 오랫동안 재활용되어 왔습니다.
이 때문에 mfrac와 같은 요소가 실제로는 분수로 해석되지 않을 수 있으며,
청각적 렌더링을 위해 intent 속성을 사용하여 정보를 제공해야 합니다.
이 장에서는 사용법을 명확히 할 수 있는 예제들과 함께 MathML의 모든 presentation 요소와 속성을 설명합니다.
presentation 요소들은 수학 표기법의 구문적 구조를 나타내도록 설계되었으며, 이는 제목·절·단락이 텍스트 문서의 상위 수준 구문 구조를 포착하는 방식과 유사합니다. 이러한
이유로, 식별자와 연산자 한 줄이 단일 mrow 요소로 표현되기보다 여러 중첩된 mrow 요소로 표현되는 경우가 많습니다. 예를 들어,
는 일반적으로 다음과 같이 표현됩니다:
<mrow>
<mi> x </mi>
<mo> + </mo>
<mrow>
<mi> a </mi>
<mo> / </mo>
<mi> b </mi>
</mrow>
</mrow>
유사하게, 위첨자는 바로 앞의 문자에만 붙지 않고 그 밑(base)을 구성하는 전체 표현식에 붙습니다. 이러한 구조는 특히 문서 작성자가 표시 환경(예: 표시 너비)을 미리 알 수 없는 경우 수학을 더 높은 품질로 렌더링할 수 있게 하고, 표현된 수학 구조의 자동 해석을 훨씬 쉽게 합니다.
전통적 표기에서 다른 기호와 같게 렌더링되거나 보이지 않게 렌더링되는 식별자나 연산자를 명명하기 위해 특정 문자가 사용됩니다. 예를 들어, 문자 U+2146, U+2147 및 U+2148은 각각 미분 기호 d, 지수 기호 e, 허수 단위 i를 나타내며, 단순 변수로 사용되는 동일 문자와 의미적으로 구별됩니다. 마찬가지로 문자 U+2061, U+2062, U+2063 및 U+2064는 함수 적용, 보이지 않는 곱, 보이지 않는 콤마 및 보이지 않는 더하기를 나타냅니다. 이들은 보통 보이지 않게 렌더링되지만 시각적 간격 및 줄바꿈에 영향을 줄 수 있는 중요한 정보를 나타내며, 음성 렌더링에서 별도의 표기를 가질 수 있습니다. 따라서 저자들은 해당되는 경우 이러한 문자(또는 해당 엔티티)를 사용하는 것이 좋습니다.
MathML 엔티티의 전체 목록은 [Entities]에 설명되어 있습니다.
presentation 요소들은 두 클래스로 나뉩니다. Token elements는 개별 기호, 이름, 숫자, 레이블 등을 나타내고, Layout schemata는 부분들로부터 표현식을 구성하며 내용으로는 요소만 가질 수 있습니다. 이것들은 General Layout, Script and Limit, Tabular Math 및 Elementary Math 스키마로 세분됩니다. 또한 특정 레이아웃 스키마와 함께만 사용되는 몇몇 빈 요소들이 있습니다.
수학 표현식 내의 모든 개별 기호
는 MathML 토큰 요소로 표현되어야 합니다(예: <mn>24</mn>).
주요 MathML 토큰 요소 유형은 식별자(mi, 예: 변수나 함수 이름), 숫자(mn), 연산자(mo, 괄호(펜스)나
구분자(예: 콤마) 포함)입니다. 또한 텍스트나 미학적 목적의 공백을 표현하기 위한 토큰 요소들과 컴퓨터 대수 시스템과의 호환을 위한 문자열 리터럴
을 나타내는 다른
요소들도 있습니다.
레이아웃 스키마는 부분 표현식들이 분수나 스크립트 표현식과 같은 더 큰 표현식으로 어떻게 구성되는지를 지정합니다. 레이아웃 스키마는 자식의 수와/또는 위치에 특별한 의미를 부여합니다. 레이아웃 스키마의 자식은 그 요소의 인수(argument)라고도 불립니다. 위 정의의 결과로, 레이아웃 스키마의 내용은 정확히 그 인수들인 0개 이상의 요소들의 시퀀스로 구성됩니다.
여기에 설명된 많은 요소들은 특정 개수의 인수(항상 1, 2 또는 3)를 필요로 합니다. 아래에 주어진 요소 문법의 상세 설명에서는 다양한 위치에서 인수의 이름을 제시함으로써 요구되는 인수 수가 암묵적으로 표시됩니다. 몇몇 요소는 인수의 수나 유형에 추가 요구사항이 있으며 이는 개별 요소 설명에서 다뤄집니다. 예를 들어, 일부 요소는 0개 이상의 인수 시퀀스를 허용하여 인수가 전혀 없어도 될 수 있습니다.
렌더된 공백을 인코딩하는 MathML 요소들은 포함되는 요소의 인수로 실제로 계산된다는 점에 유의하십시오.
이러한 공백 유사 요소의 적절한 사용에 대해서는 3.2.7
Space <mspace/>를 참조하십시오.
다음 표에 1* 인수(예: msqrt, mstyle, merror,
mpadded, mphantom, menclose,
mtd, mscarry,
및 math)가 필요하다고 나열된 요소들은 개념적으로는 단일 인수를 받지만 실제로는 임의 개수의 자식을 허용합니다.
자식의 수가 0이거나 1보다 많으면, 그 내용 전체로부터 형성된 단일 추론된 mrow로 간주하고, 그
mrow를 인수로 처리합니다.
예를 들어,
<msqrt>
<mo> - </mo>
<mn> 1 </mn>
</msqrt>
는 다음과 같이 처리됩니다
<msqrt>
<mrow>
<mo> - </mo>
<mn> 1 </mn>
</mrow>
</msqrt>
이 기능은 MathML 데이터가 그렇지 않으면 필요할 많은 mrow 요소들을 포함하지 않아도 되게 해줍니다.
편의를 위해, 각 요소의 인수 수 요구사항과 위치에 따라 구별되는 개별 인수의 역할을 정리한 표를 제시합니다. 인수 수가 1*인 경우 위에서 설명한 추론된 mrow를 의미합니다.
math 요소는 presentation 요소는 아니지만 완전성을 위해 아래에 나열되어 있습니다.
| 요소 | 필수 인수 수 | 인수 역할(위치에 따라 달라질 경우) |
mrow |
0개 이상 | |
mfrac |
2 | 분자 분모 |
msqrt |
1* | |
mroot |
2 | 밑(base) 지수(index) |
mstyle |
1* | |
merror |
1* | |
mpadded
|
1* | |
mphantom
|
1* | |
mfenced
|
0개 이상 | |
menclose
|
1* | |
msub |
2 | 밑 아래첨자 |
msup |
2 | 밑 윗첨자 |
msubsup
|
3 | 밑 아래첨자 윗첨자 |
munder |
2 | 밑 언더스크립트 |
mover |
2 | 밑 오버스크립트 |
munderover |
3 | 밑 언더스크립트 오버스크립트 |
mmultiscripts |
1개 이상 | 밑
(아래첨자 윗첨자)*
[<mprescripts/>
(프리아래첨자 프리윗첨자)*] |
mtable |
0개 이상의 행 | 0개 이상의 mtr 요소 |
mtr |
0개 이상 | 0개 이상의 mtd 요소 |
mtd |
1* | |
mstack |
0개 이상 | |
mlongdiv
|
3개 이상 | 제수(divisor) 결과(result) 피제수(dividend) (msrow | msgroup | mscarries | msline)* |
msgroup
|
0개 이상 | |
msrow |
0개 이상 | |
mscarries
|
0개 이상 | |
mscarry
|
1* | |
maction
|
1개 이상 | actiontype 속성에 따라 다름 |
math |
1* |
특정 MathML presentation 요소들은 특정 문맥에서 특수한 동작을 보입니다. 이러한 특수 동작들은 아래의 상세한 요소 설명에서 논의됩니다. 편의를 위해 가장 중요한 특수 동작 클래스 일부를 여기에도 나열합니다.
일부 요소들은 공백 유사(space-like)로 간주되며, 이는 3.2.7
Space <mspace/>에서 정의됩니다. 이 정의는
mo 요소들에 대한 일부 권장 렌더링 규칙에 영향을 미칩니다(3.2.5 Operator, Fence, Separator or Accent
<mo> 참조).
예를 들어 msup와 같은 일부 요소들은 첫 번째 인수가 연산자인 경우 그 연산자를 꾸밀(embellish) 수 있습니다. 이러한
요소들은 3.2.5 Operator, Fence,
Separator or Accent
<mo>에 나열되어 있으며, 그곳에서 꾸며진
연산자(embellished operator)
를 정확히 정의하고 신장 가능한(stretchy) 연산자에 대한 권장 렌더링 규칙에 어떤 영향을 미치는지 설명합니다.
대부분 독자에게 익숙한 표기법에서 전체 레이아웃과 텍스트 기호는 왼쪽에서 오른쪽(LTR)으로 배열됩니다. 그러나 서두에서 언급한 바와 같이 히브리어나 모로코, 페르시아와 같은 지역에서는 전체 레이아웃은 변경되지 않고 포함된 기호들(종종 히브리어나 아랍어)이 오른쪽에서 왼쪽(RTL)으로 쓰입니다. 또한 아랍어 사용권에서는 표기법 자체가 전적으로 RTL로 배열되는 경우가 많아, 위첨자는 여전히 위로 올라가지만 밑의 오른쪽이 아니라 왼쪽에 따라옵니다.
따라서 MathML 3.0은 텍스트 및 기호의 방향성과 레이아웃 스키마로 표시되는 전체 방향성의 두 가지 뚜렷한 방향성을 인식합니다. 이 두 측면은 아래에서 논의됩니다.
여기에 세로 언어와(및 현재 지원 부족)에 대한 약간의 논의를 추가해야 할 필요가 있습니다
식의 전체 방향성, 기본적으로 레이아웃 스키마의 방향성은 포함하는 math 요소의 dir 속성으로 지정됩니다(see 2.2 The Top-Level
<math> Element). 기본값은 ltr입니다. dir=rtl를 사용하면 레이아웃은 유럽식 관습의 단순한 거울 이미지가 됩니다. 즉 위아래로의 이동은 변경되지 않지만,
배치의 진행은 오른쪽에서 왼쪽으로 이루어집니다.
예를 들어 RTL 레이아웃에서는 아래첨자와 위첨자가 밑의 왼쪽에 나타납니다; 루트의 근호는 오른쪽에 나타나고 막대는 왼쪽의 밑 위로 이어집니다. 방향성에 따라 동작이 달라지는 요소들의 레이아웃 세부사항은 해당 요소의 설명에서 제공됩니다. 그러한 논의에서 leading과 trailing이라는 용어는 방향성에 따라 어느 쪽을 사용할지 결정될 때 객체의 한쪽을 지정하는 데 사용됩니다; 즉 leading은 LTR에서는 왼쪽을, RTL에서는 오른쪽을 의미합니다. left와 right는 다른 경우에는 안전하게 왼쪽과 오른쪽을 의미한다고 가정할 수 있습니다.
전체 방향성은 보통 math에 설정되지만 mrow 또는 mstyle 요소의 dir 속성을 사용하여 개별 하위 표현식에 대해
전환할 수도 있습니다.
지정되지 않은 경우 모든 요소는 컨테이너의 방향성을 상속합니다.
dir 비교가 수행되며, 모든 일치 문자열이 값으로
허용됩니다.
텍스트 방향성은 텍스트를 포함할 수 있는 MathML 토큰 요소(mtext, mo,
mi, mn
그리고 ms)에 대해 적용되며, 해당 텍스트의 유니코드 속성에 의해 결정됩니다.
토큰 요소가 LTR 또는 RTL 문자만을 포함하는 경우에는
지정된 방향으로 바로 표시됩니다.
RTL 아랍어와 LTR 숫자처럼 방향이 혼합된 경우에는
유니코드 양방향 알고리즘[Bidi]을
적용해야 합니다. 이 알고리즘은 동일 방향의 문자 집합이 어떻게 처리되고,
그 집합이 어떻게 (재)정렬되는지를 지정합니다.
기본 또는 초기 방향은 위에서 설명한 전체 방향성(3.1.5.1
수학식의 전체 방향성)에 의해 주어지며,
약한 방향성을 가진 문자가 어떻게 처리되는지와 집합의 중첩 방식에 영향을 줍니다.
(dir 속성은 드물게 필요한 경우,
토큰 요소에 초기 방향성을 명시하기 위해 허용됩니다.)
토큰 요소 내에 나타나는 모든 mglyph 요소는
실질적으로 중립적이며, 정렬에 영향을 주지 않습니다.
중요한 점은 양방향 알고리즘이 각 토큰 요소의 내용에 독립적으로 적용된다는 것입니다; 각 토큰 요소는 독립된 문자 런으로 처리됩니다.
유니코드와 스크립트에서 존중해야 할 다른 특징들은 ‘미러링(mirroring)’과 ‘글리프 쉐이핑(glyph shaping)’입니다. 일부 유니코드 문자는 RTL 문맥에서 미러링으로 표시되도록 표시되어 있는데, 즉 해당 문자는 미러링되거나 대응 문자를 대신 그려서 표시됩니다. 따라서 여는 괄호 ‘(’는 RTL에서 ‘)’로 표시됩니다. 반대로 solidus(/ U+002F)는 미러링 표시가 되어 있지 않습니다. 따라서 인라인 분수에서 슬래시를 반대로 보이게 하려면 역슬래시(\ U+005C)나 미러링 DIVISION SLASH (U+2215) 같은 대체 문자를 명시적으로 사용해야 합니다.
또한 아랍어 같은 서예적 스크립트는 문자들의 연속을 연결하여 모양을 바꿉니다. 이는 가독성과 미학에 큰 영향을 미칠 수 있으므로 가능하면 그러한 셰이핑을 적용하는 것이 중요합니다. 글리프 셰이핑은 방향성처럼 각 토큰 요소 내용에 개별적으로 적용됩니다.
히브리 문자로 표현되는 초한수(transfinite cardinals)의 경우, 알파벳 유사 코드 포인트가 아니라 U+2135-U+2138 (ALEF SYMBOL, BET SYMBOL, GIMEL SYMBOL, DALET SYMBOL) 코드 포인트를 MathML에서 사용해야 합니다. 이 코드 포인트들은 강한 좌→우(LTR) 특성을 가집니다.
이른바 ‘디스플레이된(displayed)’ 수식(한 줄에 독립적으로 나타나는 수식)은 일반적으로 인라인 수식보다 더 많은 수직 공간을 사용해야 하며, 인라인 수식은 인접 텍스트에
자연스럽게 어우러져 이웃하는 줄에 간섭하지 않아야 합니다. 예를 들어 디스플레이된 합(sum)에서는 한계가 합 기호 위와 아래에 배치되지만, 인라인으로 나타날 때는 한계가
아래/위첨자 위치에 나타납니다. 유사한 이유로 아래첨자·위첨자, 중첩된 분수 및 기타 구조는 일반적으로 수식의 주요 부분보다 작은 크기로 표시됩니다.
MathML은 각 presentation 노드에 대해 더 넓은 수직 레이아웃이 적용되는지와 현재 문맥의 스크립팅 수준을 반영하는 displaystyle 및 scriptlevel을 암묵적으로 연결합니다.
이 값들은 math 요소가 display 속성에 따라 초기화합니다.
다양한 script and limit schemata 요소들과 일반적으로 mfrac 및
mroot 요소들은 일부 또는 모든 인수에 대해
displaystyle을 false로 설정하고 scriptlevel을
증가시키는 방식으로 자동 조정합니다.
(각 요소에 대해 사용되는 구체적인 규칙은 해당 요소 설명을 참조하십시오.)
또한 모든 presentation 요소에서 허용되는 displaystyle 및 scriptlevel 속성을 통해 명시적으로 설정할 수 있습니다(자세한 내용은 3.1.9 Attributes common to presentation elements
참조).
명시적으로 설정된 경우 해당 설정은 현재 요소에 적용되며 추가 규칙 적용이 없으면 자식 요소의 기본값으로 사용됩니다.
scriptlevel이 '+' 또는 '-' 기호와 함께 사용되면 유효한 scriptlevel이 그 값만큼 증가하거나 감소합니다.
부호 없는 정수와 함께 사용되면 유효한 scriptlevel은 그 값으로 설정됩니다.
그 외의 경우에는 값이 부모 노드로부터 상속됩니다.
displaystyle는 수식을 배치하는 데 사용되는 수직 공간의 양에 영향을 미칩니다:
true이면 디스플레이 수식의 더 넉넉한 레이아웃이 사용되고,
false이면 인라인 수식의 더 압축된 레이아웃이 사용됩니다.
이는 주로 mo 요소의 largeop 및 movablelimits 속성의 해석에 영향을 줍니다.
그러나 보다 정교한 렌더러는 이 속성을 사용하여 더 또는 덜 압축된 방식으로 렌더링할 수 있습니다.
scriptlevel의 주요 효과는 글꼴 크기를 제어하는 것입니다.
일반적으로 scriptlevel이 높을수록 글꼴 크기는 작아집니다.
(비시각적 렌더러는 매체에 맞게 글꼴 크기에 유사하게 반응할 수 있습니다.)
scriptlevel이 자동 또는 명시적으로 변경될 때마다,
현재 글꼴 크기는 scriptsizemultiplier의 값의 변화 제곱승만큼 곱해집니다.
그러나 글꼴 크기가 너무 작아져서 읽기 어려워지지 않도록 이러한 변경은 scriptminsize보다 작아지지 않게 해야
합니다.
기본 scriptsizemultiplier는 대략 1/2의 제곱근이고
scriptminsize는 기본적으로 8포인트입니다;
이 값들은 어떤 presentation 요소에서도 변경될 수 있습니다; 자세한 내용은 MathML Core
Attributes">를 참조하십시오.
또한 scriptlevel 속성은 음수 값을 포함한 임의의 값을 허용하여 글꼴 크기를 증가시키는 결과를 초래할 수도
있습니다.
scriptlevel로 인한 글꼴 크기 변경은 노드 '외부'에서 강제되는 것으로 간주되어야 합니다.
즉, mfrac의 토큰 자식에 대한 명시적 mathsize(3.2.2 Mathematics style
attributes common to token
elements 참조)보다 먼저 scriptlevel의 효과가 적용됩니다.
따라서 mathsize는 사실상 scriptlevel의 효과를
무효화합니다.
그러나 그 scriptlevel 변경은 현재 글꼴 크기를 변경하여 em 길이의 의미에 영향을 미치므로(2.1.5.2 Length Valued Attributes 참조) scriptlevel은 여전히 그러한 경우에 영향을 미칠 수 있습니다.
또한 mathsize는 scriptminsize로 제한되지 않으므로,
글꼴 크기를 직접 변경하면 scriptminsize보다 작은 스크립트가 발생할 수 있습니다.
직접적인 글꼴 크기 변경(예: CSS 또는 mathsize 속성에 의한)은 scriptlevel 값에는 영향을 주지 않습니다.
TeX의 \displaystyle, \textstyle, \scriptstyle, \scriptscriptstyle는 각각 displaystyle 및 scriptlevel과 대응하며,
true 및 0,
false 및 0,
false 및 1,
false 및 2에 해당합니다.
따라서 math의
display=block은 \displaystyle에,
display=inline은 \textstyle에
대응합니다.
MathML은 과도하게 긴 표현식을 여러 줄로 분할하기 위한 자동 및 수동(강제) 줄바꿈 모두를 지원합니다.
모든 이러한 줄바꿈은 mrow (추론된 mrow 포함; 3.1.3.1 Inferred <mrow>s) 또는 mfenced 내에서
발생합니다.
줄바꿈은 일반적으로 mo 요소에서 발생하며, 이전 버전 호환을 위해 mspace에서도 발생합니다.
렌더러는 또한 인접한 mi 요소 사이 또는 매우 긴 mn과
같은 토큰 요소 내부에서 자동 줄바꿈을 선택할 수도 있습니다. MathML은 이러한 줄바꿈을 지정하는 수단을 제공하지 않지만, 렌더러가 그런 지점에서 줄바꿈을
선택하는 경우에는 그 지점에서 적용되는 들여쓰기 속성에 따라 다음 줄을
들여써야 합니다.
자동 줄바꿈은 포함하는 math 요소에 overflow=linebreak가 설정되어 있고 표시 엔진이 전체 수식을 표시할 충분한 공간이 없다고 판단할 때 발생합니다.
따라서 사용 가능한 너비는 렌더러가 알아야 합니다. 글꼴 속성처럼 이 값은 MathML 요소가 속한 환경에서 상속된다고 가정됩니다. 너비를 결정할 수 없으면 무한한 너비가
가정되어야 합니다. mtable 내부에서는 각 열에 너비가 있습니다. 이 너비는 속성으로 지정되거나 내용으로 결정될 수
있습니다. 이 너비는 줄 바꿈 너비로 사용되어 각 mtable의 항목은 필요에 따라 줄바꿈됩니다.
강제 줄바꿈은 mo 또는 mspace 요소에 linebreak=newline을 사용하여 지정합니다.
자동 및 수동 줄바꿈은 동일한 수식 내에서 모두 발생할 수 있습니다.
mfrac, msqrt, mroot,
menclose 및 다양한 스크립트 요소들의 하위 표현식에 대한 자동 줄바꿈은 필수가 아닙니다.
렌더러는 원하면 이러한 요소 내부의 강제 줄바꿈을 무시할 수 있습니다.
mo 및 경우에 따라 mspace 요소의 속성들은 줄바꿈과 다음 줄의
들여쓰기를 제어합니다. 제어할 수 있는 줄바꿈의 측면은 다음과 같습니다:
어디에서(Where) — 속성들은 특정 연산자나 공백에서 줄바꿈의 바람직함을 결정하며, 특히 줄바꿈이 요구되는지 억제되는지를 지정합니다. 이러한
속성들은 mo와 mspace 요소에서만 설정할 수
있습니다. (자세한 내용은 3.2.5.2.2
Linebreaking attributes 참조.)
연산자 표시/위치(Operator Display/Position) — 줄바꿈이 발생할 때 연산자가 줄 끝에 나타날지 다음 줄의 시작에 나타날지
또는 양쪽에 모두 나타날지와 줄바꿈 후 얼마만큼의 수직 공간을 추가할지를 결정합니다.
이러한 속성들은 mo 요소에 설정되거나 mstyle
또는 math 요소에서 상속될 수 있습니다.
(자세한 내용은 3.2.5.2.2
Linebreaking attributes 참조.)
들여쓰기(Indentation) — 줄바꿈 후 다음 줄의 들여쓰기를 결정하며, 다음 줄이 이전 줄의 어떤 지점에 맞춰 정렬되도록 들여쓰는 것도
포함합니다.
이러한 속성들은 mo 요소에 설정되거나 mstyle
또는 math 요소에서 상속될 수 있습니다.
(자세한 내용은 3.2.5.2.3
Indentation attributes 참조.)
수학 요소가 인라인 문맥에 나타날 때, 문서의 텍스트 렌더링 엔진이 사용하는 단락 흐름 규칙을 따를 수 있습니다.
이러한 규칙들은 본 명세서의 범위를 벗어납니다.
또는 math 요소의 overflow 속성 값을 사용할 수 있습니다.
(자세한 내용은 2.2.1
Attributes 참조.)
다음 예제는 강제 줄바꿈과 강제 정렬을 보여줍니다:
<mrow>
<mrow>
<mi>f</mi><mo>⁡<!--ApplyFunction--></mo><mo>(</mo><mi>x</mi><mo>)</mo>
</mrow>
<mo id='eq1-equals'>=</mo>
<mrow>
<msup>
<mrow><mo>(</mo><mrow><mi>x</mi><mo>+</mo><mn>1</mn></mrow><mo>)</mo></mrow>
<mn>4</mn>
</msup>
<mo linebreak='newline' linebreakstyle='before'
indentalign='id' indenttarget='eq1-equals'>=</mo>
<mrow>
<msup><mi>x</mi><mn>4</mn></msup>
<mo id='eq1-plus'>+</mo>
<mrow>
<mn>4</mn><mo>⁢<!--InvisibleTimes--></mo><msup><mi>x</mi><mn>3</mn></msup>
</mrow>
<mo>+</mo>
<mrow>
<mn>6</mn><mo>⁢<!--InvisibleTimes--></mo><msup><mi>x</mi><mn>2</mn></msup>
</mrow>
<mo linebreak='newline' linebreakstyle='before'
indentalignlast='id' indenttarget='eq1-plus'>+</mo>
<mrow>
<mn>4</mn><mo>⁢<!--InvisibleTimes--></mo><mi>x</mi>
</mrow>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mrow>
</mrow>
이 예는 다음과 같이 표시됩니다
참고로 indentalignlast은 기본값이 indentalign이므로, 위 예에서 indentalign을 indentalignlast 대신
사용할 수 있었습니다. 또한 linebreakstyle='before'를 지정하는 것은 기본값이기 때문에 필요하지 않습니다.
mi |
식별자 |
mn |
숫자 |
mo |
연산자, 괄호(펜스) 또는 구분자 |
mtext |
텍스트 |
mspace |
공백 |
ms |
문자열 리터럴 |
또한 비표준 기호를 이미지로 표현하기 위해 토큰 요소 내에서 mglyph 요소를 사용할 수 있습니다.
mrow
and
a
|
하위 표현식들을 가로 방향으로 아무 개수나 그룹화 |
mfrac |
두 하위 표현식으로 분수 형성 |
msqrt |
제곱근(지수가 없는 근호) 형성 |
mroot |
지수가 지정된 근호 형성 |
mstyle |
스타일 변경 |
merror |
전처리기에서의 구문 오류 메시지 둘러싸기 |
mpadded
|
내용 주변 여백 조정 |
mphantom
|
내용을 보이지 않게 만들되 그 크기는 보존 |
mfenced
|
쌍 펜스로 내용을 둘러싸기 |
menclose
|
긴 나눗셈 기호와 같은 신장 가능한 기호로 내용을 둘러싸기 |
msub |
밑에 아래첨자 붙이기 |
msup |
밑에 윗첨자 붙이기 |
msubsup
|
밑에 아래첨자-윗첨자 쌍 붙이기 |
munder |
밑에 언더스크립트 붙이기 |
mover |
밑에 오버스크립트 붙이기 |
munderover |
밑에 언더스크립트-오버스크립트 쌍 붙이기 |
mmultiscripts |
프리스크립트 및 텐서 지수 붙이기 |
mtable |
테이블 또는 행렬 |
mtr |
테이블 또는 행렬의 행 |
mtd |
테이블 또는 행렬의 한 항목 |
maligngroup
and
malignmark
|
정렬 마커 |
mstack |
정렬된 문자 열 |
mlongdiv
|
mscroup와 유사하며 제수와 결과가 추가됨 |
msgroup
|
유사한 위치로 이동된 mstack의 행 그룹 |
msrow |
mstack의 한 행 |
mscarries
|
올림수나 빌림을 나타내는 mstack 내의 행 |
mscarry
|
mscarries의 한 항목 |
msline |
mstack 내부의 수평선 |
maction
|
부분 표현식에 동작 바인딩 |
2.1.6 모든 MathML 요소에 공통인 속성에 나열된
속성들 외에도,
모든 MathML presentation 요소들은 다음 범주의 속성들을 허용합니다.
MathML 3에서는 이러한 속성들을 mstyle 요소에만 설정하도록 제한했지만,
MathML-Core와의 정합성을 높이기 위해(해당 문서가 mstyle의 특수 처리를 제거함),
이제 이 속성들은 모든 presentation 요소에 허용됩니다.
presentation 요소들은 또한 [MathML-Core]에 명시된 모든 Global Attributes를 허용합니다.
이들 속성에는 주로 시각 매체용으로 의도된 다음 속성들이 포함됩니다.
이들은 표시된 표현식의 의도된 의미에 영향을 주는 것으로 기대되지는 않습니다. 처음 두 속성은 영향을 받은 하위 표현식을 강조하거나 주의를 끌기 위한 용도입니다. 예를 들어
빨간색 "x"가 검은색 "x"와 의미적으로 다르다고 가정하지는 않습니다. 반면 서로 다른 mathvariant 값은
의미적으로 다른 변수를 나타낼 수 있습니다(자세한 내용은 3.2.2 Mathematics style attributes common to token elements 참조).
나머지 두 속성은 표현식 레이아웃의 일부 기본 규칙을 재정의합니다.
자세한 내용은 3.1.6 Displaystyle
and
Scriptlevel을 참조하십시오.
| Name | values | default |
| mathcolor | color | 상속됨 |
이 요소의 구성 요소(토큰 요소의 내용이나 선, 근호, 기타 장식 등)를 그릴 때 사용할 전경색을 지정합니다.
또한 레이아웃 요소에 사용될 때 자식 요소들을 위한 기본 mathcolor를 설정합니다.
|
||
| mathbackground | color | "transparent" | transparent |
| 요소와 그 자식의 경계 상자를 채우는 데 사용할 배경색을 지정합니다. 기본값 "transparent"는 현재 렌더링 문맥에서 사용되는 배경색이 비쳐 보이도록 합니다. | ||
| scriptlevel | ( "+" | "-" )? unsigned-integer | 상속됨 |
자식 요소에 적용될 displaystyle을 변경합니다.
자세한 내용은 3.1.6
Displaystyle and Scriptlevel를 참조하십시오.
|
||
| displaystyle | "true" | "false" | 상속됨 |
자식에 적용될 displaystyle을 변경합니다.
자세한 내용은 3.1.6
Displaystyle and Scriptlevel를 참조하십시오.
비교는 ASCII case-insensitive로 수행되며, 모든 일치 문자열이 값으로 허용됩니다. |
||
이 속성들도 모든 MathML Presentation 요소에 설정할 수 있습니다.
| Name | values | default |
| scriptsizemultiplier | number | 0.71 |
scriptlevel 변경으로 인한 글꼴 크기 조정에 사용할 배율을 지정합니다.
자세한 내용은 3.1.6
Displaystyle and Scriptlevel을 참조하십시오.
|
||
| scriptminsize | length | 8pt |
scriptlevel 변경으로 인한 최소 허용 글꼴 크기를 지정합니다.
이는 mathsize 변경으로 인한 글꼴 크기를 제한하지는 않습니다.
자세한 내용은 3.1.6
Displaystyle and Scriptlevel을 참조하십시오.
|
||
| infixlinebreakstyle | "before" | "after" | "duplicate" | before |
|
중위 연산자에 사용할 기본 linebreakstyle을 지정합니다;
자세한 내용은 3.2.5.2.2
Linebreaking attributes를 참조하십시오.
비교는 ASCII case-insensitive로 수행되며, 모든 일치 문자열이 값으로 허용됩니다. |
||
| decimalcharacter | character | . |
"decimalpoint" 정렬 값을 사용할 때 mstack 내에서 정렬 기준점을 결정하는 데 사용되는 문자를 지정합니다.
기본값인 "."은 많은 국가에서 소수점 구분자로 사용되는 문자입니다.
(자세한 내용은 3.6
Elementary Math 및 3.5.4 Alignment Markers
<maligngroup/>, <malignmark/>를 참조하십시오).
|
||
만약 어떤 요소가 scriptlevel을 증분 방식으로 변경하면서 동시에 다른 특정 속성들도 설정하는 경우,
변경의 전체 효과는 처리 순서에 따라 달라질 수 있습니다. 이런 경우에는 다음 목록에 있는 속성들을 XML 시작 태그의 속성 목록에 나타나는 순서와 관계없이 다음
순서로 처리해야 합니다:
scriptsizemultiplier, scriptminsize,
scriptlevel, mathsize.
MathML 표현식은 종종 HTML과 같은 텍스트 데이터 형식에 임베드되므로, MathML 렌더러는 MathML이 나타나는 문맥에서 사용되는 전경색을 상속받아야 합니다. 다만 MathML은( MathML-Core와 달리) 렌더링 환경으로부터 스타일 정보를 상속받는 메커니즘을 규정하지는 않습니다. 자세한 내용은 3.2.2 Mathematics style attributes common to token elements를 참조하십시오.
권장되는 MathML 시각적 렌더링 규칙은 mathbackground 속성에 의해 영향을 받는 영역의 정확한 범위를
정의하지 않습니다. 단, 내용이 음수 치수를 가지지 않고 주변의 음수 간격으로 인해 다른 렌더링과 겹치지 않아야 하며, 내용 렌더링을 위해 수행되는 모든 그리기 뒤에 놓여야
하고 주변 표현식을 렌더링하기 위해 수행되는 그리기 중 어느 것의 뒤에 있어서는 안 됩니다. 음수 간격으로 인해 그리기 영역이 겹치는 경우 mathbackground 속성이 영향을 미치는 영역의 범위에 대한 효과는 본 규칙에서 정의되지 않습니다.
표현 마크업의 토큰 요소는 의미를 지니는 수학 표기법의 가장 작은 단위를 나타내도록 의도되었습니다. 토큰은 대략적으로 텍스트의 단어에 해당합니다. 하지만 수학 표기법의 정확하고 상징적인 특성 때문에 다양한 범주와 속성이 MathML 마크업에서 두드러지게 작용합니다. 반대로 텍스트 데이터에서는 개별 단어가 특별히 마크업되거나 스타일링될 필요가 드뭅니다.
토큰 요소는
식별자(mi),
숫자(mn),
연산자(mo),
텍스트(mtext),
문자열(ms)
그리고 공백(mspace)을 나타냅니다.
mglyph 요소는
토큰 요소 내부에서 비표준 기호를 이미지로 표현하는 데 사용할 수 있습니다.
개별 요소에 대한 자세한 논의에 앞서 다음 두 하위 절에서는
토큰 요소의 허용 가능한 내용과 공통 속성에 대해 설명합니다.
MathML 마크업의 문자 데이터는 토큰 요소의 내용 부분에서만 허용됩니다.
요소 사이의 공백은 무시됩니다.
빈 mspace 요소를 제외하고,
토큰 요소는 0개 이상의 유니코드 문자 시퀀스나 mglyph 요소를 포함할 수 있습니다.
mglyph 요소는
이미지로 비표준 문자나 기호를 표현하는 데 사용됩니다.
문자 는 직접 유니코드 문자 데이터로 표현할 수도 있고, 숫자 또는 문자 엔티티 참조를 통해 간접적으로 표현할 수도 있습니다. 유니코드에는 여러 유사 문자들이 포함되어 있습니다. 어떤 상황에서 어떤 문자가 적절한지에 대한 논의는 [MathML-Notes]를 참조하십시오.
토큰 요소(mspace 제외)는 내용이 있다면 그것을 그대로(즉, 시각적 경우에는 표준 글리프들로 가깝게 배열된 수평 행 또는
mglyph의 이미지를) 렌더링해야 합니다. mspace 요소는 속성에 의해
결정된 폭만큼의 빈칸으로 렌더링됩니다.
렌더링 알고리즘은 아래에 설명된 수학 스타일 속성도 고려하고, 각 토큰 유형별로 특정 규칙이나 속성에 따라 주변 간격도 수정해야 합니다. 내용의 방향성 특성 역시 반드시 준수되어야
합니다(3.1.5.2
토큰 요소의 양방향 레이아웃 참조).
mglyph는 [MathML-Core]에서 지원되지 않습니다.
웹 플랫폼 문맥에서는 HTML img
요소의 사용이 권장됩니다. MathML이 (X)HTML에 임베드될 때 토큰 요소 내에서 이것이 허용됩니다.
기존의 mglyph를 사용하는 MathML의 경우
JavaScript polyfill이 제공되며,
이는 웹 문서에서 mglyph를 img로 구현합니다.
mglyph 요소는 비표준 기호를 표현하기 위해 이미지를 표시하는 메커니즘을 제공합니다.
이는 토큰 요소
mi, mn, mo, mtext, ms의
내용 내에서 사용될 수 있습니다. 기존 유니코드 문자가 적합하지 않은 경우 활용할 수 있습니다.
유니코드는 수학에서 사용되는 매우 많은 문자를 정의하며 그리고 대부분의 경우 이러한 문자를 나타내는 글리프는 다양한 폰트에서 널리 사용 가능합니다. 이런 문자들은 거의 모든 사용자의 요구를 충족하지만, MathML은 수학이 고정되어 있지 않고 새로운 문자와 기호가 필요에 따라 추가된다는 점을 인식합니다. 널리 받아들여진 문자는 결국 유니코드 협회나 기타 표준 기관에 채택될 가능성이 높지만, 그 과정은 대체로 오래 걸립니다.
글리프의 src 속성은 mglyph를 고유하게 식별함에
유의하십시오.
src 값이 같은 두 mglyph는
두 문자/글리프가 동일한지 판단해야 하는 응용 프로그램에서 동일한 것으로 간주되어야 합니다.
mglyph 요소는
3.1.9 presentation 요소에 공통인
속성에 나열된 속성을 허용하지만, mathcolor는 효과가 없습니다.
배경색 mathbackground는 지정된 이미지에 투명성이 있을 때 투명하게 표시되어야 합니다.
mglyph는 또한 여기에 나열된 추가 속성들을 허용합니다.
| 이름 | 값 | 기본값 |
| src | URI | 필수 |
| 이미지 리소스의 위치를 지정합니다; 이는 MathML 소스의 base-URI에 상대적인 URI일 수 있습니다(있는 경우). | ||
| width | 길이 | 이미지로부터 |
글리프의 원하는 너비를 지정합니다; height 참조.
|
||
| height | 길이 | 이미지로부터 |
글리프의 원하는 높이를 지정합니다.
width와 height 중
하나만 주어진 경우
이미지는 종횡비를 유지하도록 스케일되어야 합니다;
둘 다 주어지지 않으면 이미지는 자연 크기로 표시되어야 합니다.
|
||
| valign | 길이 | 0ex |
| 이미지의 기준선 정렬 지점을 현재 기준선에 대해 지정합니다. 양수 값은 이미지를 위로, 음수 값은 아래로 이동시킵니다. 0(기본값)이면 이미지는 하단이 기준선에 맞춰집니다. | ||
| alt | 문자열 | 필수 |
| 글리프의 대체 이름을 지정합니다. 지정된 이미지를 찾거나 표시할 수 없는 경우 렌더러는 경고 메시지나 알 수 없는 글리프 표기에 이 이름을 사용할 수 있습니다. 이 이름은 오디오 렌더러나 기호 처리 시스템에서 사용될 수도 있으므로 설명적으로 지정해야 합니다. | ||
다음 예시는 연구자가 mglyph를 이미지 집합과 함께 꼬임군(braid group) 표기법 작업에 어떻게
사용할 수 있는지 보여줍니다.
<mrow>
<mi><mglyph src="my-braid-23" alt="2 3 braid"/></mi>
<mo>+</mo>
<mi><mglyph src="my-braid-132" alt="1 3 2 braid"/></mi>
<mo>=</mo>
<mi><mglyph src="my-braid-13" alt="1 3 braid"/></mi>
</mrow>
이 예는 다음과 같이 렌더링될 수 있습니다:
모든 표현 요소에 대해 정의된 속성(3.1.9 표현 요소에
공통된 속성) 외에도, MathML은 두 개의 수학 스타일 속성과 모든 표현 토큰 요소에 유효한 방향성 속성을 포함합니다,
그리고 math 및 mstyle 요소에도 유효합니다;
dir은 mrow 요소에도 유효합니다.
해당 속성은 다음과 같습니다:
| 이름 | 값 | 기본값 |
| mathvariant | "normal" | "bold" | "italic" | "bold-italic" | "double-struck" | "bold-fraktur" | "script" | "bold-script" | "fraktur" | "sans-serif" | "bold-sans-serif" | "sans-serif-italic" | "sans-serif-bold-italic" | "monospace" | "initial" | "tailed" | "looped" | "stretched" | normal (<mi>에서는 예외) |
|
토큰의 논리적 클래스를 지정합니다. 이 클래스는 스타일 이상으로, 보통 의미적 의도를 전달합니다; 아래의 논의 참조.
비교는 ASCII 대소문자 구분 없이 수행되며, 모든 일치 문자열이 값으로 허용됩니다. |
||
| mathsize | "small" | "normal" | "big" | 길이 | 상속됨 |
토큰 내용을 표시할 크기를 지정합니다.
small과 big 값은
현재 글꼴 크기보다 작거나 큰 크기를 선택하지만, 정확한 비율은 지정하지 않습니다; normal은 완전성을 위해 허용되지만,
100% 또는 1em과
동등하기 때문에 효과가 없습니다.
비교는 ASCII 대소문자 구분 없이 수행되며, 모든 일치 문자열이 값으로 허용됩니다. |
||
| dir | "ltr" | "rtl" | 상속됨 |
토큰 내 텍스트의 초기 방향성을 지정합니다:
ltr(좌→우) 또는 rtl(우→좌).
이 속성은 약하거나 중립적인 문자가 포함된 드문 경우에만 필요합니다;
추가 논의는 3.1.5.1 수식 전체
방향성 참조.
mspace에는 영향이 없습니다.
비교는 ASCII 대소문자 구분 없이 수행되며, 모든 일치 문자열이 값으로 허용됩니다. |
||
mathvariant 속성은 토큰 요소의 논리적 클래스를 정의합니다. 각 클래스는 글꼴적으로 관련된 심볼릭 토큰들의 집합을
제공합니다. 각 토큰은 주어진 수학 표현식 내에서 특수한 의미를 가지므로 의미를 바꿀 수 있는 문서 전체 스타일 변경으로부터 시각적으로 구별되어 보호되어야 합니다. 각 토큰은
mathvariant 속성 값과 토큰 요소의 문자 데이터의 조합으로 식별됩니다.
MathML 렌더링이 CSS 가용 환경에서 이루어질 때, 수학 스타일 속성은 CSS 스타일 규칙을 위한 미리 정의된 선택자로 볼 수 있습니다.
MathML과 CSS의 상호작용 논의는 7.5
MathML과 CSS 함께 사용을 참고하십시오.
또한 MathML을 CSS로 렌더링하는 논의와 샘플 스타일시트는 [MathMLforCSS]를 참고하십시오.
CSS가 가용하지 않을 때는 렌더링 애플리케이션의 내부 스타일 메커니즘이 다양한 논리적 클래스를 시각적으로 구별하는 역할을 하게 됩니다.
대부분의 MathML 렌더러는 추가적이고 내부적인 스타일 처리 알고리즘에 어느 정도 의존하고자 할 것입니다.
특히 mathvariant 속성은 CSS 상속 모델을 따르지 않습니다;
모든 토큰의 기본값은 normal(기울어지지 않음)이고, 단일 문자를 가지는 mi에만 예외입니다.
자세한 사항은 3.2.3 식별자 <mi>를 참고하십시오.
렌더러는 수학 스타일 속성을 특정 렌더링 속성에 매핑함에 있어 완전한 자유를 가집니다. 그러나 실제로 수학 스타일 속성 이름과 값은 분명한 타이포그래피적
특성을 암시하므로, 렌더러는 가능한 한 이러한 자연스러운 해석을 존중하려 노력해야 합니다. 예를 들어 mathvariant
속성이 sans-serif로 된 토큰은 Helvetica나 Arial로 렌더링하는 것이 합리적입니다. 반면에
Times Roman 폰트로 렌더링하는 것은 혼란을 줄 수 있으므로 피해야 합니다.
원칙적으로 임의의 mathvariant 값을 임의의 문자 데이터와 함께 사용해 특정 기호 토큰을 정의할 수 있습니다. 실제로는
문자 데이터와 mathvariant 값의 특정 조합만이 주어진 렌더러에 의해 시각적으로 구별됩니다. 예를 들어
"fraktur alpha"나 "bold italic Kanji" 문자는 뚜렷한 렌더링이 없습니다. "initial", "tailed", "looped", "stretched"
값은 아랍 문자인 경우에만 적합합니다.
일부 문자 데이터와 mathvariant 값 조합은 수학 알파벳 기호를 인코딩하는 할당된 유니코드 코드 포인트와 동등합니다.
이 유니코드 코드 포인트는 아랍 수학 알파벳 기호 블록
U+1EE00~U+1EEFF, 수학 알파벳 심볼 블록
U+1D400~U+1D7FF, 유니코드 표준에 나열된 것, 그리고
Letterlike Symbols 범위 U+2100~U+214F(이는 SMP
알파벳의 "홀"을 나타냄, 8.2 수학 알파벳 기호
참조).
이러한 문자는 UTR #25의 2.2절에서 자세히 설명되어 있습니다.
유니코드 표준에서 각 문자 설명은 스타일 없는 문자와, 단순히 서체 변경에 대응하는 mathvariant 값만이 다름을
명시합니다. 스타일 없는 문자를 mathvariant 속성과 함께 사용한 토큰 요소는, mathvariant 속성이 없는 수학 알파벳 기호 문자를 사용한 토큰 요소와 동등합니다. 수학 알파벳 기호 문자의 외형은
주변의 mathvariant나 기타 스타일 선언에 의해 변경되어서는 안 됩니다.
렌더러는 유니코드 문자에 대응하고, 사용 가능한 폰트 문자를 통해 시각적으로 구별할 수 있는 문자 데이터와 mathvariant 값 조합을 지원해야 합니다.
할당된 유니코드 코드 포인트에 해당하지 않는 조합은 렌더러가 무시하거나 지원할 수 있으며, 저자는 그러한 기호 지원이 렌더러마다 매우 다를 수 있음을 인식해야 합니다.
MathML 수식은 종종 HTML과 같은 텍스트 데이터 형식에 임베드되므로,
주변 텍스트와 MathML은 글꼴 크기 같은 렌더링 속성을 공유해야 스타일상 호환적인 렌더링이 이루어집니다. 이런 이유로, 텍스트 렌더링에 영향을 미치는 대부분의 속성 값이 위
표의 기본값
열에 나온 대로 렌더링 환경에서 상속됩니다. (주변 텍스트와 MathML이 별도의 소프트웨어(예: 브라우저와 플러그인)로 렌더링될 때, 렌더링 환경은 주변
텍스트의 기준선 위치와 같이 MathML 속성으로 지정되지 않은 정보를 MathML 렌더러에 제공하는 것도 중요합니다.)
다만, MathML은 스타일 정보를 렌더링 환경에서 어떻게 상속받는지에 관한 메커니즘을 규정하지 않습니다.
현재 글꼴의 요청된 mathsize가 사용 불가능한 경우, 렌더러는 가장 이해하기 쉽고 품질이 높은 렌더링이 되도록 적절히
근사해야 합니다.
많은 MathML 요소가 자식의 글꼴 크기를 자동 변경한다는 점에 유의해야 하며,
자세한 논의는 3.1.6 displaystyle 및
scriptlevel을 참고하십시오.
MathML은 7.4 MathML과 타
형식 결합에서 설명된 대로 다른 형식과 결합될 수 있습니다.
권장 방식은 MathML 스키마를 확장하여 mtext 요소나 표현 내에서 역할에 적합한 다른 리프 요소의 자식으로 추가
요소를 허용하여, MathML에 다른 형식을 임베딩하는 것입니다
(3.2.3 식별자 <mi>, 3.2.4 숫자 <mn>, 3.2.5 연산자, 펜스, 구분자, 악센트
<mo> 참조).
방향성, 글꼴 크기, 기타 글꼴 속성은 포함하는 리프 요소에서 사용된 속성 값에서 상속되어야 합니다
(3.2.2 토큰 요소에 공통된 수학 스타일
속성 참조).
다음은 HTML 문맥에서 mtext 내부에 SVG를 임베딩하는 예제입니다:
<mtable>
<mtr>
<mtd>
<mtext><input type="text" placeholder="what shape is this?"/></mtext>
</mtd>
</mtr>
<mtr>
<mtd>
<mtext>
<svg xmlns="http://www.w3.org/2000/svg" width="4cm" height="4cm" viewBox="0 0 400 400">
<rect x="1" y="1" width="398" height="398" style="fill:none; stroke:blue"/>
<path d="M 100 100 L 300 100 L 200 300 z" style="fill:red; stroke:blue; stroke-width:3"/>
</svg>
</mtext>
</mtd>
</mtr>
</mtable>
<mi>mi 요소는 식별자로 렌더링되어야 하는 기호적 이름 또는 임의의 텍스트를 나타냅니다. 식별자에는 변수, 함수 이름, 그리고
기호 상수 등이 포함될 수 있습니다.
일반적인 그래픽 렌더러는 mi 요소를 그 내용 그대로 렌더링합니다(3.2.1
토큰 요소 내용 문자, <mglyph/>),
추가적인 간격 없이(인접 요소와 연관된 간격 제외) 표시합니다.
모든 수학 식별자
가 mi 요소로 표현되는 것은 아닙니다 — 예를 들어, 아래첨자나 프라임이 붙은 변수는 각각
msub 또는
msup를 사용해 표현해야 합니다. 반대로, 합계 시퀀스에서 생략 부호와 같은 용어(term)
역할의 임의
텍스트는 mi 요소로 표현해야 합니다.
mi는 표현 요소이며, 그 내용이 식별자로 렌더링되어야 함만을 의미한다는 점을 강조해야 합니다. 대부분의 경우 mi의 내용은 실제로 변수나 함수 이름과 같은 수학 식별자를 나타냅니다. 하지만 앞 단락에서 설명한 대로, 식별자로
렌더링되어야 하는 표기와 실제로 수학 식별자를 의미하는 표기의 일치가 완벽하지는 않습니다. 의미가 식별자임이 보장된 요소의 경우 4. 콘텐츠 마크업의 ci 설명을
참조하십시오.
mi 요소는 3.2.2 토큰 요소에 공통된 수학 스타일 속성에 나열된 속성들을 허용하지만, 한 가지는 기본값이 다릅니다:
| 이름 | 값 | 기본값 |
| mathvariant | "normal" | "bold" | "italic" | "bold-italic" | "double-struck" | "bold-fraktur" | "script" | "bold-script" | "fraktur" | "sans-serif" | "bold-sans-serif" | "sans-serif-italic" | "sans-serif-bold-italic" | "monospace" | "initial" | "tailed" | "looped" | "stretched" | (내용에 따라 다름; 아래 설명) |
토큰의 논리적 클래스를 지정합니다.
내용이 한 글자인 경우 italic, 그 외는 normal이 기본값입니다.
비교는 ASCII 대소문자 구분 없이 수행되며, 모든 일치 문자열이 값으로 허용됩니다. |
||
수학 알파벳 심볼(see 8.2
수학 알파벳 기호)의 동등성 판단을 위해서는,
위에서 설명한 특수 기본값 처리도 포함하여 mathvariant 속성 값을 우선적으로 결정해야 합니다.
<mi>x</mi>
<mi>D</mi>
<mi>sin</mi>
<mi mathvariant='script'>L</mi>
<mi></mi>
내용이 없는 mi 요소도 허용됩니다;
<mi></mi>는 예를 들어,
수식 편집기(expression editor)
가 아직 용어가 담기지 않은 용어(term)
필요 위치를 표시하는 데 사용할 수 있습니다.
식별자에는 sin
과 같은 함수 이름도 포함됩니다. sin x
와 같은 표현은 아래처럼 문자 U+2061
(엔티티 af 또는 ApplyFunction)을 사용해 작성해야
하며,
보이지 않는 연산자에 대한 논의는 3.2.5 연산자,
펜스, 구분자, 악센트
<mo>를 참조하십시오.
<mrow>
<mi> sin </mi>
<mo> ⁡<!--ApplyFunction--> </mo>
<mi> x </mi>
</mrow>
용어(term)
로 처리되어야 하는 다양한 텍스트도 다음과 같이 mi 요소로 표현할 수 있습니다:
<mrow>
<mn> 1 </mn>
<mo> + </mo>
<mi> … </mi>
<mo> + </mo>
<mi> n </mi>
</mrow>
이처럼 예외적 상황에서 mi를 사용할 때는 mathvariant 속성을 명시적으로 지정하면 일부 렌더러에서 기본 동작보다 더 나은 결과를 얻을 수 있습니다.
기호 상수의 이름은 mi 요소로 표현해야 합니다:
<mi> π </mi>
<mi> ⅈ </mi>
<mi> ⅇ </mi>
<mn>mn 요소는 숫자 리터럴
또는 숫자 리터럴로 렌더링되어야 하는 기타 데이터를 나타냅니다. 일반적으로 숫자
리터럴은, 십진수점을 포함할 수 있는, 자리수의 시퀀스로, 부호 없는 정수 또는 실수를 나타냅니다.
일반적인 그래픽 렌더러는 mn 요소를 그 내용 그대로 렌더링합니다(3.2.1
토큰 요소 내용 문자, <mglyph/>), 별도의 여백 없이 (단, mo와 같은 인접 요소에서 오는 간격은 제외).
mn 요소는 보통 기울어지지 않은 글꼴로 렌더링됩니다.
숫자
의 수학적 개념은 문맥에 따라 매우 미묘하고 복잡할 수 있습니다. 따라서 모든 수학적 숫자가 mn을 사용해
표현되어야 하는 건 아닙니다; 아래에 다르게 표현해야 하는 예시가 있으며, 복소수, 분수로 나타내는 숫자의 비, 그리고 수치 상수의 이름이 이에 해당합니다.
반대로 mn은 표현(Presentation) 요소이므로, 때로는 임의의 텍스트를 mn의 내용에 포함하는 것이 바람직할 수 있습니다. 이는 해당 내용이 숫자에 대한 특정 문자 시퀀스 인코딩 표준에 따라
애매하지 않은 숫자로 해석되지 않는다 하더라도, 단지 숫자 리터럴처럼 렌더링되길 원하는 경우입니다. 그러나 일반적으로 mn 요소는 그 내용이 실제로 어떤 방식으로든 수치적 양(Quantity)을 나타내고자 할 때로 제한해야 합니다. 의미가
특정 종류의 수학적 숫자임이 보장된 요소는 4. 콘텐츠
마크업의 cn 설명을 참고하십시오.
mn 요소는 3.2.2 토큰 요소에 공통된 수학 스타일 속성에 나열된 속성들을 허용합니다.
<mn> 2 </mn>
<mn> 0.123 </mn>
<mn> 1,000,000 </mn>
<mn> 2.1e10 </mn>
<mn> 0xFFEF </mn>
<mn> MCMLXIX </mn>
<mn> twenty-one </mn>
많은 수학적 숫자는 mn만 단독으로 사용해서 표현해서는 안 되며, 이는 복소수, 음수, 분수로 표기된 숫자의 비율, 수치 상수의 이름을 포함합니다.
<mrow>
<mn> 2 </mn>
<mo> + </mo>
<mrow>
<mn> 3 </mn>
<mo> ⁢<!--InvisibleTimes--> </mo>
<mi> ⅈ </mi>
</mrow>
</mrow>
<mfrac> <mn> 1 </mn> <mn> 2 </mn> </mfrac>
<mrow><mo>-</mo><mn>2</mn></mrow>
<mi> π </mi>
<mi> ⅇ </mi>
<mo>
mo 요소는 연산자 또는 연산자처럼 렌더링되어야 하는 모든 것을 나타냅니다. 일반적으로 수학 연산자에 대한 표기 관습은
매우 복잡하므로, MathML은 mo 요소의 렌더링 동작을 지정하기 위한 비교적 정교한 메커니즘을 제공합니다. 결과적으로
MathML에서 "연산자로 렌더링되어야 하는" 것들의 목록에는 일반적인 의미의 수학적 연산자가 아닌 여러 표기법도 포함됩니다. 중위, 접두, 접미 형태의 일반적인 연산자
외에도 중괄호·소괄호·절댓값 막대와 같은 펜스 문자, 쉼표·세미콜론 같은 구분자, 기호 위의 막대나 물결표 같은 수학적 악센트 등이 있습니다. 이 장에서는 이러한 넓은
의미에서 "연산자"라는 용어를 사용하겠습니다.
일반적인 그래픽 렌더러는 모든 mo 요소를 그 내용으로 표시합니다(자세한 내용은 3.2.1
토큰 요소 내용 문자, <mglyph/> 참조),
요소 주변에 추가되는 간격은 속성에 의해 결정되며 아래에서 더 자세히 설명됩니다.
MathML 문자 집합에 대한 완전한 글꼴에 접근할 수 없는 렌더러는 일부 경우에 mo 요소를 콘텐츠의 문자와 정확히
동일하게 렌더링하지 않을 수 있습니다. 예를 들어 <mo> ≤ </mo>를 터미널에서는 <=로
렌더링할 수 있습니다. 그러나 일반적으로 렌더러는 mo 요소의 내용을 가능한 한 문자 그대로 렌더링하려고 시도해야
합니다. 즉, <mo> ≤ </mo>와 <mo> <= </mo>는
다르게 렌더링되어야 합니다. 첫 번째는 ≤ 단일 문자로, 두 번째는 두 글자 시퀀스 <=로 렌더링되어야 합니다.
mo 요소의 핵심 기능 중 하나는 기본 속성 값들이 아래에서 설명하는 바와 같이 경우에 따라 "연산자 사전"에서 설정된다는
점입니다. 특히 stretch, symmetric, accent의 기본값은 보통 연산자 사전에서 찾을 수 있으므로 각 mo 요소에 매번 명시할 필요가 없습니다.
또한 일부 수학 연산자는 단독의 mo 요소로 표현되지 않고 주변의 윗첨자·아랫첨자 등으로 "장식된(embellished)"
mo 요소로 표현되는 경우가 있습니다. 이 점은 아래에서 더 자세히 설명합니다. 반대로 표현(presentation)
요소로서 mo 요소는 표준적인 연산자 해석이 없는 임의의 텍스트를 포함할 수 있습니다. 예로는 3.2.6 텍스트 <mtext>의 "텍스트와 수학의 혼합" 논의를 보십시오. 또한
특정한 수학적 연산자의 의미를 보장하는 MathML 콘텐츠 요소에 대해서는 4.
콘텐츠 마크업을 참조하십시오.
또한 3.1.7 표현식의 줄바꿈에서
논의된 바와 같이 줄바꿈은 일반적으로 연산자에서(앞 또는 뒤, 지역 관습에 따라) 발생합니다. 따라서 mo 요소는 특정
연산자에서의 줄바꿈 바람직함을 인코딩하는 속성과 줄바꿈이 발생할 경우 연산자 처리 및 들여쓰기를 설명하는 속성을 허용합니다.
mo 요소는 3.2.2
토큰 요소에 공통된 수학 스타일 속성에 나열된 속성과 여기에 나열된 추가 속성을 허용합니다. 연산자의 표시가 수학에서 매우 중요하기 때문에
mo 요소는 많은 수의 속성을 허용하며, 이들은 다음 세 개의 하위절에서 설명됩니다.
대부분의 속성은 둘러싼 mstyle 요소, math 요소,
문서의 컨텍스트 또는
3.2.5.6.1 연산자 사전에서 기본값을
가져옵니다.
상속된 것으로 표시된 값이 mo, mstyle, math 요소에 명시적으로 주어지지 않고 해당 mo 요소의 연산자
사전에도 없으면, 표에 괄호로 표시된 기본값이 사용됩니다.
| Name | values | default |
| form | "prefix" | "infix" | "postfix" | mrow 내에서 연산자의 위치에 의해 설정
|
포함된 표현식에서 연산자의 역할을 지정합니다. 이 역할과 연산자 내용은 연산자 사전의 조회에 영향을 미치며, 이는 간격 및 기타 기본 속성에
영향을 줍니다; 자세한 내용은 3.2.5.6.2
form 속성의 기본값를 보십시오.
비교는 ASCII 대소문자 구분 없이 수행됩니다. |
||
| lspace | length | 사전에 의해 설정 (thickmathspace) |
| 연산자 앞에 나타나는 선행 공백을 지정합니다; 자세한 내용은 3.2.5.6.4 연산자 주변의 간격을 보십시오. (RTL 문맥에서는 "before"가 오른쪽임에 유의하십시오; 3.1.5 방향성 참조.) | ||
| rspace | length | 사전에 의해 설정 (thickmathspace) |
| 연산자 뒤에 나타나는 후행 공백을 지정합니다; 자세한 내용은 3.2.5.6.4 연산자 주변의 간격을 보십시오. (RTL 문맥에서는 "after"가 왼쪽임에 유의하십시오; 3.1.5 방향성 참조.) | ||
| stretchy | boolean | 사전에 의해 설정 (false) |
| 연산자가 인접한 자료의 크기에 맞춰 늘어나야 하는지를 지정합니다; 자세한 내용은 3.2.5.7 연산자·펜스·악센트의 신장을 보십시오. | ||
| symmetric | boolean | 사전에 의해 설정 (false) |
| 연산자가 신장될 때 수학 축(axis)을 기준으로 대칭을 유지해야 하는지를 지정합니다. 이 속성은 수직으로 신장되는 기호에만 적용됩니다. 자세한 내용은 3.2.5.7 연산자·펜스·악센트의 신장을 보십시오. | ||
| maxsize | length | 사전에 의해 설정 (무제한) |
| 연산자가 신장될 때의 최대 크기를 지정합니다; 자세한 내용은 3.2.5.7 연산자·펜스·악센트의 신장을 보십시오. 지정하지 않으면 최대 크기는 무제한입니다. 단위가 없거나 백분율 값은 참조 크기(비신장 글리프의 크기)의 배수를 나타냅니다. MathML 4에서는 "infinity" 값은 제공하지 않는 것과 같으므로 더 이상 권장되지 않습니다. | ||
| minsize | length | 사전에 의해 설정 (100%) |
| 연산자가 신장될 때의 최소 크기를 지정합니다; 자세한 내용은 3.2.5.7 연산자·펜스·악센트의 신장을 보십시오. 단위가 없거나 백분율 값은 참조 크기(비신장 글리프의 크기)의 배수를 나타냅니다. | ||
| largeop | boolean | 사전에 의해 설정 (false) |
연산자가 '큰' 연산자로 간주되는지를 지정합니다; 즉 displaystyle=true일 때 일반보다 크게 그려져야 하는지 여부입니다(TeX의
\displaystyle와 유사).
예로는 U+222B와 U+220F(엔티티 int, prod)가 있습니다.
자세한 논의는 3.1.6
Displaystyle 및 Scriptlevel를 참조하십시오.
|
||
| movablelimits | boolean | 사전에 의해 설정 (false) |
이 연산자에 붙은 언더/오버스크립트가 displaystyle이 false일 때 더 작게
정렬된 아래/위첨자 위치로 '이동'하는지를 지정합니다.
예로는 U+2211, U+220F(엔티티 sum, prod)와 lim 등이 있습니다.
자세한 논의는 3.1.6
Displaystyle 및 Scriptlevel를 참조하십시오.
|
||
| accent | boolean | 사전에 의해 설정 (false) |
이 연산자가 언더스크립트나 오버스크립트로 사용될 때 악센트(발음 기호와 유사한 표식)로 처리되어야 하는지를 지정합니다; munder,
mover 및
munderover를 참조하십시오.
참고: MathML Core와의 호환을 위해, 이 속성 대신 둘러싼 mover 및 munderover에 accent=true를
사용하는 것이 권장됩니다.
|
||
다음 속성들은 줄바꿈이 발생하거나 발생하지 않는 시점과, 줄바꿈이 발생했을 때의 표시 양식에 영향을 줍니다.
| 이름 | 값 | 기본값 |
| linebreak | "auto" | "newline" | "nobreak" | "goodbreak" | "badbreak" | auto |
이 연산자에서 줄바꿈이 발생하는 것이 얼마나 바람직한지를 지정합니다:
기본값 auto는 렌더러가 기본 줄바꿈 알고리즘을 사용해야 함을 나타냅니다;
newline은 줄바꿈을 강제합니다;
자동 줄바꿈의 경우 nobreak는 줄바꿈을 금지합니다;
goodbreak는 좋은 위치를 제안하고;
badbreak는 부적절한 위치를 제안합니다.
비교는 ASCII 대소문자 구분 없이 수행됩니다. |
||
| lineleading | length | 상속됨 (100%) |
| 줄바꿈 후 사용할 수직 공간의 양을 지정합니다. 키 큰 줄의 경우 줄바꿈에서 더 많은 행간을 사용하는 것이 더 명확할 수 있습니다. 렌더링 에이전트는 적절한 기본값을 선택할 자유가 있습니다. | ||
| linebreakstyle | "before" | "after" | "duplicate" | "infixlinebreakstyle" | 사전에 의해 설정 (before) |
이 연산자에서 줄바꿈이 발생할 때 연산자가 줄의 '앞(before)' 또는 '뒤(after)'에 나타날지, 혹은 복제되는지를 지정합니다.
before는 연산자가 새 줄의 시작에 나타나게 하고(단, 들여쓰기될 수
있음);
after는 줄바꿈 전의 줄 끝에 나타나게 합니다.
duplicate는 연산자를 두 위치에 모두 둡니다.
infixlinebreakstyle은 중위 연산자에 대해 지정된 값을
사용합니다; 이 값(하나의 값: before, after 또는 duplicate)은 애플리케이션에 의해 지정될 수 있거나 mstyle에
의해 바인딩될 수 있습니다.
비교는 ASCII 대소문자 구분 없이 수행됩니다. |
||
| linebreakmultchar | string | 상속됨 (⁢) |
줄바꿈에서 ⁢ 연산자를 보이게 하기 위해 사용할 문자를 지정합니다.
예를 들어 linebreakmultchar="·"은 곱셈을 중앙 점으로 표시하게 합니다.
|
||
인접한 mo 및 mspace 요소의 linebreak 값은 서로 상호작용하지 않습니다; linebreak=nobreak가 mo에 설정되어 있다고 해서, 그 자체로 앞이나 뒤에 있는(중첩되었을 수 있는) mo 또는 mspace 요소에서의 줄바꿈을 억제하지 않으며, 선행
또는 후행 mo 요소의 linebreakstyle와도
상호작용하지 않습니다. 다만 다른 상황에서는 해당 mo 요소 양쪽에서의 줄바꿈이 발생하지 않도록 합니다.
다음 속성들은 수식의 줄 들여쓰기에 영향을 줍니다. 주로 이러한 속성들은 자동 또는 수동 줄바꿈 후의 새 줄의 위치를 제어합니다. 그러나 indentalignfirst 및 indentshiftfirst는 줄바꿈이 없는 단일 줄 수식의 위치도 제어합니다. 이 속성들이 mo 또는 mspace에 나타나면 해당 요소에서 줄바꿈이 발생할
때 적용됩니다. mstyle 또는 math 요소에 나타나면,
그 안에서 발생하는 줄바꿈의 스타일에 대한 기본값을 결정합니다. 대체로 수동 줄바꿈을 많이 사용하지 않는 한, 이러한 속성의 대부분은 mstyle 또는 math에 바인딩하여 사용하는 것이 더
유용합니다.
렌더링 문맥(예: 사용 가능한 너비 및 현재 글꼴)이 항상 작성자에게 알려지지 않기 때문에, 이러한 속성 값이 남은 너비가 수식을 유용하게 표시하기에 너무 작아지거나 남은 너비가 줄바꿈 너비를 초과하는 경우 렌더러가 이러한 속성 값을 무시할 수 있다는 점에 유의하십시오.
| 이름 | 값 | 기본값 |
| indentalign | "left" | "center" | "right" | "auto" | "id" | 상속됨 (auto) |
mrow 내에서 줄바꿈이 발생할 때 줄의 위치를 지정합니다; 값들에 대한 논의는 아래를
참조하십시오.
비교는 ASCII 대소문자 구분 없이 수행됩니다. |
||
| indentshift | length | 상속됨 (0) |
indentalign로 결정된 위치에 대한 추가 들여쓰기 오프셋을 지정합니다.
값이 백분율인 경우, 값은 MathML 렌더러가 사용할 수 있는 수평 공간(줄바꿈에 사용되는 현재 대상 너비)에 대한 백분율을 나타냅니다(자세한
내용은 3.1.7
표현식의 줄바꿈 참조).
참고: 단위 없는 숫자는 MathML 3에서 허용되어 백분율 값과 유사하게 해석되었으나, 단위 없는 숫자는 MathML 4에서 사용
중단(deprecated)되었습니다.
|
||
| indenttarget | idref | 상속됨 (없음) |
indentalign=id일 때 들여쓰기된 줄의 수평 위치를 결정하는 다른 요소의 id를 지정합니다.
참조된 요소는 현재 math 요소의 외부에 있을 수 있어 표현식 간 정렬을 허용하거나,
mphantom 같은 보이지 않는 내용 내부에 있을 수 있습니다; 그러나 참조되기 전에
등장해야 합니다. 이로 인해 일부 렌더러에서 id를 사용할 수 없거나 정렬에 적합하지 않은 위치에 있을 수 있습니다. 그런 경우 indentalign은 auto로 되돌아가야 합니다.
|
||
| indentalignfirst | "left" | "center" | "right" | "auto" | "id" | "indentalign" | 상속됨 (indentalign) |
수식의 첫 번째 줄에 사용할 들여쓰기 스타일을 지정합니다; 기본값인 indentalign은 일반 줄과 동일한 들여쓰기를 사용함을 의미합니다.
비교는 ASCII 대소문자 구분 없이 수행됩니다. |
||
| indentshiftfirst | length | "indentshift" | 상속됨 (indentshift) |
수식의 첫 번째 줄에 사용할 오프셋을 지정합니다; 기본값 indentshift은
일반 줄과 동일한 오프셋을 사용함을 의미합니다. 비교는 ASCII
대소문자 구분 없이 수행됩니다.
백분율 값과 단위 없는 숫자는 indentshift의 설명과 동일하게
해석됩니다.
|
||
| indentalignlast | "left" | "center" | "right" | "auto" | "id" | "indentalign" | 상속됨 (indentalign) |
주어진 mrow 내에서 줄바꿈이 발생할 때 마지막 줄에 사용할 들여쓰기 스타일을 지정합니다;
기본값 indentalign은 일반 줄과 동일한 들여쓰기를 사용함을 의미합니다.
줄이 정확히 두 개인 경우, 이 속성의 값이 두 번째 줄에 대해 indentalign보다
우선적으로 사용되어야 합니다.
비교는 ASCII 대소문자 구분 없이 수행됩니다. |
||
| indentshiftlast | length | "indentshift" | 상속됨 (indentshift) |
주어진 mrow 내에서 줄바꿈이 발생할 때 마지막 줄에 사용할 오프셋을 지정합니다; 기본값
indentshift은 일반 줄과 동일한 오프셋을 사용함을 의미합니다. 비교는
ASCII
대소문자 구분 없이 수행됩니다.
줄이 정확히 두 개인 경우, 이 속성의 값이 두 번째 줄에 대해 indentshift보다
우선적으로 사용되어야 합니다.
백분율 값과 단위 없는 숫자는 indentshift 설명과 동일하게
해석됩니다.
|
||
indentalign의 허용 값들은 다음과 같습니다:
| 값 | 의미 |
| left | 다음 줄의 왼쪽을 줄바꿈 너비의 왼쪽에 맞춥니다. |
| center | 다음 줄의 중앙을 줄바꿈 너비의 중앙에 맞춥니다. |
| right | 다음 줄의 오른쪽을 줄바꿈 너비의 오른쪽에 맞춥니다. |
| auto | (기본값) 렌더러의 기본 들여쓰기 스타일을 사용하여 들여쓰기합니다; 이는 고정값일 수도 있고 mrow 중첩 깊이에 따라 달라지거나 유사한 방법일 수 있습니다. |
| id | 다음 줄의 왼쪽을 indenttarget로 지정된 요소의 왼쪽에 맞춥니다; 해당 요소가
없으면 auto를 사용합니다.
|
<mo>+</mo>
<mo><</mo>
<mo>≤</mo>
<mo><=</mo>
<mo>++</mo>
<mo>∑</mo>
<mo>.NOT.</mo>
<mo>and</mo>
<mo>⁢<!--InvisibleTimes--></mo>
다음 예제의 mo 요소들은 stretchy 또는 symmetric 속성을 명시할 필요가 없습니다. 이러한 속성들은 아래에서 설명하는 연산자 사전에서 찾을 수 있기
때문입니다. 이들 예제 중 일부는 3.3.8 쌍
펜스 내부의 표현식 <mfenced>로 인코딩할 수도 있습니다.
(a+b)
<mrow>
<mo> ( </mo>
<mrow>
<mi> a </mi>
<mo> + </mo>
<mi> b </mi>
</mrow>
<mo> ) </mo>
</mrow>
[0,1)
<mrow>
<mo> [ </mo>
<mrow>
<mn> 0 </mn>
<mo> , </mo>
<mn> 1 </mn>
</mrow>
<mo> ) </mo>
</mrow>
f(x,y)
<mrow>
<mi> f </mi>
<mo> ⁡<!--ApplyFunction--> </mo>
<mrow>
<mo> ( </mo>
<mrow>
<mi> x </mi>
<mo> , </mo>
<mi> y </mi>
</mrow>
<mo> ) </mo>
</mrow>
</mrow>
전통적 수학 표기에서 "보이지 않는" 연산자로 취급되는 특정 연산자들은 아무 것도 없음으로 표현하지 말고 mo 요소 내에서
특정 문자(또는 엔티티 참조)로 표현해야 합니다. 이러한 "보이지 않는 연산자"에 사용되는 문자는 다음과 같습니다:
| 문자 | 엔티티 이름 | 짧은 이름 |
| U+2061 | ApplyFunction |
af |
| U+2062 | InvisibleTimes |
it |
| U+2063 | InvisibleComma |
ic |
| U+2064 |
위 표의 예제들에 대한 MathML 표현은 다음과 같습니다:
<mrow>
<mi> f </mi>
<mo> ⁡<!--ApplyFunction--> </mo>
<mrow>
<mo> ( </mo>
<mi> x </mi>
<mo> ) </mo>
</mrow>
</mrow>
<mrow>
<mi> sin </mi>
<mo> ⁡<!--ApplyFunction--> </mo>
<mi> x </mi>
</mrow>
<mrow>
<mi> x </mi>
<mo> ⁢<!--InvisibleTimes--> </mo>
<mi> y </mi>
</mrow>
<msub>
<mi> m </mi>
<mrow>
<mn> 1 </mn>
<mo> ⁣<!--InvisibleComma--> </mo>
<mn> 2 </mn>
</mrow>
</msub>
<mrow>
<mn> 2 </mn>
<mo> ⁤ </mo>
<mfrac>
<mn> 3 </mn>
<mn> 4 </mn>
</mfrac>
</mrow>
mo 요소에 대한 전형적인 시각적 렌더링 동작은 다른 MathML 토큰 요소보다 더 복잡하므로, 이들의 렌더링 규칙은
별도의 하위절에서 설명됩니다.
이 규칙들은 다른 MathML 렌더링 규칙과 마찬가지로 권장사항이며 요구사항이 아니라는 점에 유의하십시오. 아래 설명은 여러 렌더링 속성의 의도된 효과를 가능한 한 명확히 하기 위해 제공됩니다. 브라우저 구현을 위한 연산자에 대한 상세 레이아웃 규칙은 MathML Core에 주어져 있습니다.
적분 기호, 더하기 기호, 괄호 등 많은 수학 기호는 잘 확립된 예측 가능한 전통적 표기 사용법을 가집니다. 보통 이러한 사용법은 특정 내용과 특정 form 속성을 가지는 mo 요소에 대한 기본 속성 값들과
일치합니다. 이러한 기본값이 기호마다 다르기 때문에, MathML은 렌더러가 각 mo 요소의 내용과 form 속성으로 색인화된 연산자 속성의 기본값 사전("연산자 사전")을 가지리라 예상합니다(자세한 내용은 B. 연산자 사전 참조). 만약 mo 요소가 사전에 나열되어 있지 않다면, mo 속성 표에서
괄호로 제시된 기본값을 사용해야 합니다. 이러한 값들은 일반적인 연산자에 대해 대체로 적절합니다.
일부 연산자는 오버로드(overloaded)되어 접두·중위·접미 등 여러 형태로 나타날 수 있으며, 각 형태에 대해 렌더링 속성이 다를 수 있습니다. 예로 '+'는
접두 연산자 또는 중위 연산자가 될 수 있습니다. 일반적으로 시각적 렌더러는 중위 연산자 양쪽에 공백을 추가하지만 접두 연산자 앞에만 공백을 추가합니다. 연산자
사전과 기본값 규칙으로 여러 형태가 가능할 때 사용할 형태를 지정하기 위해 form 속성을 사용할 수
있습니다.
form 속성은 보통 명시적으로 지정할 필요가 없습니다. 왜냐하면 문맥에서 form 값을 추론하는 효과적인 휴리스틱 규칙들이 있기 때문입니다. 만약 지정되지 않았고, 주어진 콘텐츠에 대해
사전에 가능한 형태가 둘 이상 있으면, 렌더러는 다음 규칙에 따라 사용할 형태를 선택해야 합니다(단, 후술하는 장식된 연산자(embellished operators)에 대한 예외를
보십시오):
연산자가 (공백 유사 인수는 무시하고) 인수가 둘 이상 있는 mrow에서 첫 번째 인수라면
접두(prefix) 형태 사용;
연산자가 (공백 유사 인수는 무시하고) 인수가 둘 이상 있는 mrow에서 마지막 인수라면
접미(postfix) 형태 사용;
연산자가 암시적이거나 명시적인 mrow의 유일한 요소이고, 그 mrow가 3.4 Script and Limit Schemata에 나열된 요소의 스크립트 위치에 있다면
접미(postfix) 형태 사용;
그 외의 모든 경우(연산자가 mrow의 일부가 아닐 때 포함)에는 중위(infix) 형태 사용.
위에서 말한 mrow는 추론된 mrow일 수
있습니다; 3.1.3.1 추론된
<mrow> 참조.
여는 펜스는 form="prefix"을, 닫는 펜스는 form="postfix"을 가져야 합니다. 구분자는 보통 중위(infix)이지만 주변에 따라 항상 그런 것은
아닙니다. 일반 연산자와 마찬가지로 이러한 값들은 보통 명시할 필요가 없습니다.
만약 사전에 지정된 형태로 연산자가 존재하지 않으면, 렌더러는 사전에서 가능한 형태 중 하나를 우선 순위(중위, 접미, 접두)로 선택해야 합니다; 만약 주어진
mo 요소 콘텐츠에 대해 가능한 형태가 전혀 없다면, 렌더러는 mo 속성 표에 괄호로 표시된 기본값을 사용해야 합니다.
위의 form 기본값 선택 규칙에는 하나의 예외가 있습니다. 하나 이상의 중첩된 아래첨자·윗첨자, 주변 텍스트나
공백, 스타일 변경으로 "장식된(embellished)" mo 요소는 다르게 동작합니다. 장식된 연산자 전체(아래
정의됨)의 위치가 위 규칙에 의해 검사되며, 그 전체의 주변 간격은 그 형태에 의해 영향을 받습니다. 다만 주변 간격에 영향을 주는 속성 값들은 중심에 있는
mo 요소(또는 그 요소의 사전 항목)에서 가져옵니다.
예를 들어, 가
와 같이 놓여 있을 때, 전체로서 중간에 위치하므로 중위 연산자로 간주되어야 하지만, 렌더링 속성은 <mo>+를 나타내는 중심
mo 요소에서 가져와야 합니다. 또는 명시적으로 지정되지 않은 경우
<mo form="infix"> + </mo>에 대한 연산자 사전 항목에서 가져와야 합니다.
아래에서 정확한 장식된 연산자(embellished
operator)
의 정의가 주어집니다:
하나의 mo 요소;
또는 첫 번째 인수가 존재하고 그 인수가 장식된 연산자인 다음 요소들 중 하나:
msub, msup,
msubsup, munder,
mover, munderover,
mmultiscripts, mfrac, 또는
semantics
(6.5
<semantics> 요소);
또는 동일한 인수들을 가진 mrow가 장식된 연산자가 되는 mstyle, mphantom, 또는 mpadded 중 하나;
또는 선택된 하위 표현식이 장식된 연산자인 maction 요소;
또는 인수가(임의의 순서로) 하나의 장식된 연산자와 0개 이상의 공백 유사 요소로 구성된 mrow.
이 정의는 중첩된 장식이 있을 때 그 중간에 다른 둘러싼 요소가 끼어들지 않는 경우에만 허용된다는 점을 유의하십시오.
위의 연산자 형태 선택 규칙과 장식된 연산자 정의는 대부분의 일반적인 경우에 작성자가 form 속성을 명시할
필요가 없도록 선택되었습니다.
mrow에 나타날 때 연산자(또는 장식된 연산자) 주변에 추가되는 수평 간격의 양은 lspace와 rspace 속성으로 직접 지정할 수
있습니다. RTL 방향의 경우 lspace와 rspace는 앞쪽과 뒤쪽 공백으로 해석되어야 합니다. 관례적으로 인수에 밀착하는 연산자들은
덜 밀착하는 연산자들보다 작은 간격 값을 갖습니다. 이러한 관례는 MathML 렌더러와 함께 제공되는 연산자 사전에서 따라야 합니다.
일부 렌더러는 TeX과 같이 아래첨자나 윗첨자 내의 대부분 연산자 주변에 공백을 사용하지 않기로 선택할 수 있습니다.
비시각적 렌더러는 간격 속성 및 여기에 설명된 다른 렌더링 속성들을 그들의 매체에 알맞은 방식으로 처리해야 합니다. 예를 들어 오디오 렌더링에서는 더 큰 간격이 더 긴 일시정지로 번역될 수 있습니다.
연산자(장식되었을 수 있음)가 다른 요소의 크기와 일치하도록 신장되는지와 어떻게 신장되는지를 제어하는 네 가지 속성이 있습니다: stretchy, symmetric, maxsize, 그리고 minsize. 연산자에 stretchy=true가 설정되어 있으면(즉, 콘텐츠의
각 문자에 대해) 글꼴 및 글꼴 렌더링 시스템이 허용하는 범위 내에서 아래의 신장 규칙을 따릅니다. 현실적으로 전형적인 렌더러는 소수의 문자만 신장할 수 있고, 아마도
이산적인 글자 크기 집합만 생성할 수 있을 것입니다.
MathML에는 특정 문자나 연산자를 어떤 방향(수평 또는 수직)으로 신장할지 지정하는 수단이 없습니다. 대신 stretchy=true일 때 해당 문자를 신장할 수
있고 그 문자에 대해 합리적인 모든 방향으로 신장해야 합니다. 어떤 방향으로 신장하는 것이 합리적인지는 렌더러가 결정할 책임이 있습니다. 대부분의 문자는 전형적인 렌더러에
의해 최대 한 방향으로만 신장될 수 있지만, 일부 렌더러는 대각선 화살표 같은 문자를 양 방향으로 독립적으로 신장할 수 있을지도 모릅니다.
minsize와 maxsize는 신장의 양을 제한합니다(양 방향
모두). 이 두 속성은 신장되는 방향의 연산자의 정상 크기에 대한 배수로 주어지거나 단위가 있는 절대 크기로 주어집니다. 예를 들어 어떤 문자가 maxsize=300%이면 그 문자는 정상(비신장)
크기의 최대 3배까지 커질 수 있습니다.
symmetric 속성은 문자의 축(axis)을 기준으로 위와 아래의 높이와 깊이를 같게 강제할지를 결정합니다(두 값
중 큰 값으로 둘 다 설정). 예를 들어 행렬 주위의 괄호가 축에 정렬되지 않은 경우(axis 참조)에는 symmetric=false를 설정해야 할 수 있습니다.
이 속성은 수직으로 신장되는 문자에만 적용됩니다(그렇지 않으면 무시됨).
장식된 신장 연산자의 경우(이 절에서 앞서 정의한 바), 중심에 있는 mo 요소는 장식된 연산자 전체의 문맥에 따라 신장
크기가 결정됩니다. 즉 장식이 없었을 때와 동일한 크기로 신장됩니다. 예를 들어 다음 예제의 괄호들은(연산자 사전에서 기본적으로 신장하도록 설정되는 경우) 서로 같은 크기로
신장되며, 밑줄·덧줄이 있었더라도 동일한 수직 구간을 커버하도록 신장됩니다:
<mrow>
<munder>
<mo> ( </mo>
<mo> _ </mo>
</munder>
<mfrac>
<mi> a </mi>
<mi> b </mi>
</mfrac>
<mover>
<mo> ) </mo>
<mo> ‾ </mo>
</mover>
</mrow>
이는 신장 규칙이 장식된 연산자 전체의 문맥을 참조해야 함을 의미합니다; 단지 중심의 mo만을 참조해서는 안 됩니다.
다음은 괄호의 최대 크기를 설정하여 기본적으로 stretchy=true인 경우에도 커지지 않게 하는 한 가지 방법을 보여줍니다.
<mrow>
<mo maxsize="100%">(</mo>
<mfrac>
<msup><mi>a</mi><mn>2</mn></msup>
<msup><mi>b</mi><mn>2</mn></msup>
</mfrac>
<mo maxsize="100%">)</mo>
</mrow>
위는
와 같이 렌더링되어야 하며, 기본 렌더링인
와는 다릅니다.
각 괄호는 독립적으로 크기 조정된다는 점에 유의하십시오; 만약 한쪽 괄호에만 maxsize=100%가 설정되면 서로 다른 크기로 렌더링될 것입니다.
신장 가능한 연산자를 지배하는 일반 규칙은 다음과 같습니다:
신장 가능한 연산자가 mrow의 직접 하위식이거나 표의 어떤 행에서 mtd 요소의 유일한 직접 하위식이면, 해당 연산자는 mrow 요소나 표 행의 비신장 직접 하위식들의 높이와 깊이(축 위아래)를 덮도록 신장되어야 합니다.
단, minsize 또는 maxsize에
의해 제약이 있는 경우는 예외입니다.
장식된 신장 연산자의 경우 앞의 규칙은 중심의 신장 연산자에 적용됩니다.
위 규칙은 mrow가 추론된 경우에도 적용됩니다.
대칭 신장 규칙은 symmetric=true이고 신장이 mrow 또는 그
mtr의 rowalign 값이 baseline 또는 axis인 경우에만 적용됩니다.
다음 알고리즘은 수직으로 신장된 문자들의 높이와 깊이를 지정합니다:
같은 mrow 또는 mtr 내의 비신장 형제들의
최대 높이와 최대 깊이를 각각 maxheight와 maxdepth라 하자. axis는 수학 축이 기준선
위에 있는 높이이다.
참고: minsize 또는 maxsize
값이 신장 연산자에 설정되어 있더라도, 이는 mrow의 최대 높이와 깊이의 초기 계산에는 사용되지
않습니다.
만약 symmetric=true이면, 신장 연산자의 계산된 높이와 깊이는 다음과 같습니다:
height=max(maxheight-axis, maxdepth+axis) + axis
depth =max(maxheight-axis, maxdepth+axis) - axis
그렇지 않으면 높이와 깊이는:
height= maxheight
depth = maxdepth
만약 전체 크기 = height+depth가 minsize보다 작거나 maxsize보다 크면, 전체 크기가 제약을 만족하도록 높이와 깊이를 비례적으로 증가시키거나
감소시킵니다.
기본적으로 대부분의 수직 화살표와 대부분의 여닫는 펜스는 연산자 사전에서 기본적으로 신장되도록 정의되어 있습니다.
표 셀(즉 mtd) 안의 신장 연산자의 경우 위 규칙은 연산자의 셀을 포함하는 표 행의 각 셀이 정확히 한 행을
차지한다고 가정합니다. (동등하게, 표 행의 모든 표 셀에 대해 rowspan 값이 1이라고 가정합니다.)
만약 그렇지 않은 경우에는, 연산자는 연산자의 셀이 덮는 표 행 집합에 완전히 포함된 표 셀들만 수직으로 덮도록 신장되어야 합니다. 연산자의 셀이 덮지 않는 행으로
확장된 표 셀들은 무시되어야 합니다. 3.5.3.2
속성에서 rowspan 속성에 대해 자세히 설명합니다.
신장 가능한 연산자(또는 장식된 신장 연산자)가 munder, mover, 또는 munderover의 직접
하위식이거나 어떤 표의 열에서 mtd 요소의 유일한 직접 하위식이면, 그 연산자(또는 중심의
mo)는 주어진 요소(또는 동일한 표 열) 내의 다른 직접 하위식들의 너비를 덮도록 신장되어야
합니다(위에서 언급한 제약을 준수하면서).
장식된 신장 연산자의 경우 앞의 규칙은 중심의 신장 연산자에 적용됩니다.
기본적으로 대부분의 수평 화살표와 일부 악센트는 수평으로 신장됩니다.
표 셀(즉 mtd) 안의 신장 연산자의 경우 위 규칙은 연산자의 셀을 포함하는 표 열의 각 셀이 정확히 한 열을
차지한다고 가정합니다. (동등하게, 표의 모든 셀에 대해 columnspan 값이 1이라고 가정.) 만약
그렇지 않은 경우에는 연산자는 연산자의 셀이 덮는 표 열 집합에 완전히 포함된 표 셀들만 수평으로 덮도록 신장되어야 합니다. 연산자의 셀이 덮지 않는 열로 확장된 표
셀들은 무시되어야 합니다. 3.5.3.2
속성에서 rowspan 속성에 대해 자세히 설명합니다.
수평 신장 규칙은 mtd 요소들을 포함하는데, 이는 mtables을 사용하여 배치된 가환 다이어그램에서 화살표가
늘어나도록 허용하기 위함입니다. 수평 신장 규칙에는 스크립트도 포함되어 다음과 같은 예제가 작동하도록 합니다:
<mrow>
<mi> x </mi>
<munder>
<mo> → </mo>
<mtext> maps to </mtext>
</munder>
<mi> y </mi>
</mrow>
신장 가능한 연산자가 신장할 필요가 없는 경우(즉 위에서 언급한 위치에 있지 않거나 신장해야 할 다른 표현이 없는 경우)에는, 해당 연산자는 글꼴과 현재 mathsize에 의해 결정된 표준(비신장) 크기를 가집니다.
신장 가능한 연산자가 신장해야 하는데 포함된 요소들(위에서 설명한 것처럼)이 모두 신장 가능한 경우, 신장할 수 있는 모든 요소는 포함 객체 내의 모든 요소들의 정상
비신장 크기의 최대값으로 성장해야 합니다(가능한 경우). 만약 minsize 또는 maxsize가 이를 방해하면 지정된(최소 또는 최대) 크기가 사용됩니다.
예를 들어, 수직으로 신장 가능한 연산자들만 포함된 mrow에서는 각 연산자가 어떤 속성도 이 동작을 무시하게
설정하지 않는 한, 그들 모두가 정상 비신장 크기들의 최대값으로 신장되어야 합니다. 물론 글꼴이나 글꼴 렌더링의 제약으로 인해 최종 신장 크기가 대략적으로만 같을 수
있습니다.
<mtext>mtext 요소는 자체로 렌더링되어야 하는 임의의 텍스트를 표현하는 데 사용됩니다. 일반적으로 mtext 요소는 설명 텍스트를 표시하는 용도입니다.
표기적 역할이 명확히 정의된 텍스트는 mi 또는 mo를 사용하는 것이 더 적합할 수 있습니다.
mtext 요소는 렌더링 가능한 공백(renderable whitespace)
도 포함할 수 있으며, 이는 주변
요소의 위치를 변경하기 위해 삽입된 보이지 않는 문자입니다. 비시각적 매체에서는 이러한 문자가 오디오 렌더러 등에서 긍정적 또는 부정적 시간 지연을 도입하거나 리듬에 영향을
주는 등 유사한 효과를 내도록 설계되어 있습니다. 그러나 자세한 내용은 2.1.7
입력에서의 공백 축소를 참조하세요.
mtext 요소는 3.2.2 토큰 요소에 공통된 수학 스타일 속성에 나열된 속성을 허용합니다.
공백 유사(space-like) 요소의 적법한 그룹화에 대한 경고는 3.2.7 공백 <mspace/>, 그리고 이러한 요소의
조정(tweaking)
사용에 관한 경고는 [MathML-Notes]를 참조하세요.
<mrow>
<mtext> Theorem 1: </mtext>
<mtext>  <!--ThinSpace--> </mtext>
<mtext>  <!--ThickSpace--> <!--ThickSpace--> </mtext>
<mtext> /* a comment */ </mtext>
</mrow>
<mspace/>mspace 빈 요소는 속성에 의해 결정되는 임의 크기의 빈칸을 나타냅니다. 또한 시각적 렌더러에 줄바꿈 제안을 하기 위해
사용할 수도 있습니다.
속성의 기본값은 대체로 렌더링에 아무런 영향을 주지 않도록 선택되었습니다. 따라서 mspace 요소는 일반적으로 하나
이상의 속성을 명시적으로 지정하여 사용합니다.
아래에 제시된 공백 유사(space-like) 요소의 적법한 그룹화에 대한 경고와, 이러한 요소의 조정(tweaking)
용도에 관한 경고는 [MathML-Notes]를 참조하세요.
또한 공백으로 렌더링될 수 있는 기타 요소로 mtext, mphantom, maligngroup가 있습니다.
아래에 나열된 속성 외에도,
mspace 요소는 3.2.2 토큰 요소에 공통된 수학 스타일 속성에 설명된 속성을 허용합니다.
다만 mathvariant와 mathcolor는 아무런 효과가
없고, mathsize는 크기 지정 속성의 단위 해석에만 영향을 줍니다(자세한 내용은 2.1.5.2 길이 값 속성 참조).
mspace는 또한 3.2.5.2.3 들여쓰기 속성에 설명된 들여쓰기 속성도 허용합니다.
| 이름 | 값 | 기본값 |
| width | 길이 | 0em |
| 빈칸의 원하는 너비를 지정합니다. | ||
| height | 길이 | 0ex |
| 빈칸의 원하는 높이(기준선 위)를 지정합니다. | ||
| depth | 길이 | 0ex |
| 빈칸의 원하는 깊이(기준선 아래)를 지정합니다. | ||
줄바꿈은 원래 MathML2에서 mspace에 지정되었으나,
줄바꿈 및 들여쓰기를 훨씬 더 세밀하게 제어하기 위해 MathML 3의 mo에 추가되었습니다.
MathML 4에서는 mspace에서의 줄바꿈 지정이 사용 중단(deprecated)되었습니다.
<mspace height="3ex" depth="2ex"/>
여러 MathML 표현 요소는 전형적으로 공백으로 렌더링되며, 해당 표현식의 수학적 의미에는 영향을 미치지 않는다는 점에서 공백 유사(space-like)
로
정의됩니다. 이로 인해 이러한 요소들은 다른 MathML 표현식에서 다소 예외적인 방식으로 동작할 수 있습니다. 예를 들어 공백 유사 요소들은 3.2.5 연산자, 괄호, 구분자, 악센트
<mo>에서 제시된 렌더링 권장 규칙에서 특별히 처리됩니다.
다음의 MathML 요소가 공백 유사
로 정의됩니다:
빈 요소이거나 모든 문자가 유니코드 공백 문자인 mtext 요소;
mspace,
maligngroup, malignmark 요소;
모든 직접 하위 표현식이 공백 유사인
mstyle, mphantom, mpadded 요소;
첫 번째 인수가 존재하며 공백 유사인 semantics 요소;
선택된 하위 표현식이 공백 유사인 maction 요소;
모든 직접 하위 표현식이 공백 유사인 mrow 요소.
mphantom은 내용이 공백 유사일 때만 공백 유사로 정의되는 점에 유의하십시오. 이는 연산자 간격이
인접한 요소가 공백 유사인지 여부에 따라 달라지기 때문입니다. mphantom 요소는 주로 표현식 정렬 보조를 위해
사용되므로, mphantom에 인접한 연산자는 내용에 인접하는 것처럼 동작해야 하며, 동등 크기의 공백에
인접한 것처럼 간주하면 안 됩니다.
기존 MathML 표현식에 공백 유사 요소나 mphantom 요소를 삽입하는 저자는, 이러한 요소가 특정 개수의 인수를
필요로 하거나 위치별로 역할이 달라지는 요소에 인수로 계산됨을 유의해야 합니다.
따라서 이런 MathML 요소에 공백 유사 요소를 삽입할 때는 그 요소의 인접 인수와 함께 mrow를 도입해 그룹화해야
합니다. 예를 들어 밑의 오른쪽에 수식 윗첨자(base)의 정렬을 맞추기 위해 아래와 같은 표현은
<msup>
<mi> x </mi>
<malignmark edge="right"/>
<mn> 2 </mn>
</msup>
적법하지 않은데, msup은 반드시 인수가 2개여야 하기 때문입니다;
올바른 표현은 다음과 같습니다:
<msup>
<mrow>
<mi> x </mi>
<malignmark edge="right"/>
</mrow>
<mn> 2 </mn>
</msup>
또한 조정(tweaking)
에 관한 경고는 [MathML-Notes]를 참조하세요.
<ms>ms 요소는 컴퓨터 대수 시스템이나 프로그래밍 언어
를 포함하는 기타 시스템에서 해석되도록 의도된 표현식 내의
문자열 리터럴
을 표현하는 데 사용됩니다. 기본적으로 문자열 리터럴은 큰따옴표로 둘러싸여 표시되며, 문자열 주위에 추가적인 간격이 없습니다.
3.2.6 텍스트 <mtext>에서 설명한 바와 같이, 수학적 표현식에 포함되는 일반
텍스트는 mtext로 마크업하거나, 경우에 따라 mo 또는 mi를 사용하지만 ms는 절대 사용하지 않아야 합니다.
문자열 리터럴(ms에 의해 인코딩됨)은 ASCII 문자열
이 아니라 문자와 mglyph들로 구성되어 있음을 유의하세요. 예를 들어
<ms>&</ms>는 하나의 문자(&)를 포함하는 문자열 리터럴을 나타내며,
<ms>&amp;</ms>는 다섯 개의 문자로 이루어진 문자열 리터럴을 나타내는데, 첫 번째 문자는
&입니다.
ms 요소의 내용은, 내용 중 적어도 왼쪽·오른쪽 따옴표 문자 및 개별 공백 이외의 공백 등 특정
문자에 대해 보이는 이스케이프(escaping)
가 적용되어 렌더링되어야 합니다. 이는 해당 표현이 문자열 리터럴임을 사용자에게 명확히 알리고, 문자열 내용을
이루는 정확한 문자를 보여주기 위한 것입니다. 예를 들어 <ms>double quote is "</ms>는 "double
quote is \""로 렌더링될 수 있습니다.
모든 토큰 요소와 마찬가지로, ms 내용도 2.1.7 입력에서의 공백 축소 규칙에 따라 공백이 트리밍 및 축소되니, 내용으로
남아야 할 공백은 해당 절에 설명된 대로 인코딩해야 합니다.
ms 요소는 3.2.2 토큰 요소에 공통된 수학 스타일 속성에 나열된 속성과, 아래의 추가 속성들을 허용합니다:
| 이름 | 값 | 기본값 |
| lquote | 문자열 | U+0022 (엔티티 quot) |
| 내용의 앞쪽에 올 따옴표를 지정합니다(RTL 문맥에서도 ‘왼쪽 따옴표’일 필요는 없음). | ||
| rquote | 문자열 | U+0022 (엔티티 quot) |
| 내용의 뒤쪽에 올 따옴표를 지정합니다(RTL 문맥에서도 ‘오른쪽 따옴표’일 필요는 없음). | ||
토큰 이외에도 여러 계열의 MathML 프레젠테이션 요소가 있습니다. 한 계열은 아래첨자·윗첨자와 같은 다양한 스크립팅
표기법을 다루고, 다른 계열은 행렬과 표를 다룹니다. 이
절에서 논의되는 나머지 요소들은 분수와 근호 같은 다른 기본 표기법을 설명하거나 스타일 속성 설정 및 오류 처리와 같은 일반적 기능을 다룹니다.
mrow 또는 a 요소는 여러 개의 하위 표현식을 함께 그룹화하는 데
사용됩니다. 보통 하나 이상의 mo 요소가 하나 이상의 다른 표현식에 대해 연산자
로 작용하고, 이들에 대해
피연산자
로 작용하는 인수들로 구성됩니다.
몇몇 요소는 인수를 마치 mrow 요소에 포함된 것처럼 자동으로 처리합니다. 추론된 mrow에 대한 논의는 3.1.3 필수 인수를 참조하십시오. 또한 mfenced (3.3.8 쌍 괄호 내부의 표현식
<mfenced>)은 쉼표로 구분된
인수를 포함하는 mrow를 효과적으로 형성할 수 있습니다.
mrow 요소는 일반적으로 그 인수들을 가로 행으로 시각적으로 렌더링합니다. LTR 방향 컨텍스트에서는 왼쪽에서
오른쪽으로, RTL 방향 컨텍스트에서는 오른쪽에서 왼쪽으로 인수의 발생 순서대로 배치됩니다. 특정 mrow에 대해
방향성을 지정하려면 dir 속성을 사용할 수 있으며, 지정하지 않으면 컨텍스트에서 상속됩니다. 청각 에이전트의 경우
인수들의 렌더링 순으로 순차적으로 재생될 것입니다. 3.2.5
연산자, 펜스, 구분자 또는 악센트
<mo>에 제안된 mo 요소의 렌더링 규칙 설명은 연산자와 피연산자 사이의 모든 가로 간격이 mrow가 아니라 mo 요소(또는 더 일반적으로 장식된 연산자)의
렌더링에 의해 추가된다고 가정합니다.
MathML은 표현식의 자동 및 수동 줄바꿈(너무 긴 표현식을 여러 줄로 분할하는 것)을 지원합니다. 모든 그러한 줄바꿈은 문서에 명시적으로 표기되었든 추론되었든(see 3.1.3.1 추론된 <mrow>s) mrow 내부에서 발생합니다.
줄바꿈 제어는 다른 요소들의 속성을 통해 이뤄집니다(see 3.1.7
표현식의 줄바꿈).
MathML 4에서 mrow와
a는 동일하게 동작하지만,
a는 MathML Core와의 호환성을 위해 추가되었습니다.
MathML Core에서는 a 이외의 요소에는
href 속성을 지원하지 않습니다.
mrow와 a
요소는 HTML의 해당 요소에서 지정된 속성과,
3.1.9 표현 요소에 공통된 속성에 나열된
속성도 모두 허용합니다.
하위 표현식은 수학적 해석에서 그룹화되는 방식과 동일하게 문서 작성자가 그룹화해야 합니다. 즉 표현식의 기저 구문 트리
에 따라 그룹화해야 합니다. 구체적으로
연산자와 해당 수학적 인수들은 단일 mrow에 있어야 하며, 서로 다른 연산자들이 직접 하나의 mrow에 함께 나타나는 것은 그들이 구문적 의미에서 서로 결합하여 중첩된 인수들에 함께 작용할 수 있는 경우에
한합니다(예: 한 괄호로 묶인 항과 그 괄호들, 관계 연산자의 체인, 또는 +와 -로 구분된 항들의 열 등). 아래에 정밀한
규칙이 주어집니다.
적절한 그룹화는 여러 목적에 유익합니다: 간격에 영향을 주어 표시를 개선할 수 있고, 보다 지능적인 줄바꿈 및 들여쓰기를 가능하게 하며, 컴퓨터 대수 시스템이나 오디오 렌더러에 의한 프레젠테이션 요소의 의미론적 해석을 단순화합니다.
부적절한 그룹화는 때때로 최적이 아닌 렌더링을 초래하고, 시각적 렌더링 이외의 해석을 어렵거나 불가능하게 만들 수 있지만, MathML 구문에서는 mrow를 사용한 어떤 그룹화도 허용됩니다. 즉 렌더러는 적절한 그룹화 규칙이 항상 준수될 것이라고 가정해서는 안 됩니다.
MathML 렌더러는 정확히 하나의 인수를 포함하는 mrow 요소를 그 단일 인수가 단독으로 발생하는 경우와 모든
면에서 동등하게 처리해야 합니다. 단, mrow 요소에 속성이 있는 경우에는 동등성 요구가 부과되지 않습니다. 이
동등성 조건은 장식된 연산자와 공백 유사 요소의 정의 및 mo 요소의 form 속성의 기본값을 결정하는 규칙에 직접적으로 영향을 미칩니다; 자세한 내용은 3.2.5 연산자, 펜스, 구분자 또는 악센트
<mo> 및 3.2.7 공백 <mspace/>를 참조하십시오. 또한 MathML 표현식의
동등성에 대한 논의는 D.1
MathML 적합성을 참조하십시오.
하위 표현식을 언제 어떻게 mrow로 중첩할지에 대한 정밀한 규칙은, TeX과 같이 하위 표현식의 중첩 방식을 항상
명시하지 않는 다른 포맷에서 자동으로 MathML을 생성할 때 특히 유용합니다. 그룹화를 위한 정확한 규칙이 필요할 때는 다음 규칙을 사용해야 합니다:
두 개의 인접한 연산자(장식된 경우일 수도 있음)가 피연산자들(즉 연산자가 아닌 무엇이든)로 구분되어 있을 수 있을 때, 선행 연산자가 중위(infix) 또는
접두(prefix) 형태(추론될 수도 있음)를 가지며 뒤따르는 연산자가 중위(infix) 또는 접미(postfix) 형태를 가지며, 그리고 연산자 사전에서 동일한
우선순위를 가지는 경우에만 이들 연산자는 동일한 mrow에 나타나야 합니다(B.
연산자 사전). 그 외의 모든 경우에는 중첩된 mrow를 사용해야 합니다.
위에서 언급한 형태들 중 하나만을 포함하는 중첩된 mrow를 형성할 때(이는 이론적으로 어느 연산자든 중간의
피연산자들에 작용할 수 있음을 의미함), 어느 연산자가 그 피연산자들에 직접 작용하는지 결정해야 합니다. 이상적으로는 이는 원래 표현식에서 결정되어야 하며, 예를
들어 연산자 우선순위 기반 포맷에서 변환하는 경우 우선순위가 높은 연산자가 그 역할을 하게 됩니다.
위 규칙은 어떤 MathML 표현식의 유효성에 영향을 미치지 않으며, 단지 다른 포맷에서 표시 수학(Math display)용 MathML을 생성하거나 기입된 표기에서 직접 MathML을 생성할 때 권장되는 생성 방식을 제시합니다.
(위 규칙을 서술할 때 사용된 일부 용어는 3.2.5
연산자, 펜스, 구분자 또는 악센트
<mo>에 정의되어 있습니다.)
예를 들어 2x+y-z는 다음과 같이 작성되어야 합니다:
<mrow>
<mrow>
<mn> 2 </mn>
<mo> ⁢<!--InvisibleTimes--> </mo>
<mi> x </mi>
</mrow>
<mo> + </mo>
<mi> y </mi>
<mo> - </mo>
<mi> z </mi>
</mrow>
(x, y)의 올바른 인코딩은 중첩된 mrow의
덜 명백한 예를 제공합니다:
<mrow>
<mo> ( </mo>
<mrow>
<mi> x </mi>
<mo> , </mo>
<mi> y </mi>
</mrow>
<mo> ) </mo>
</mrow>
이 경우 괄호와 쉼표는 펜스와 구분자 연산자로 생각되므로 인수들에 대해 함께 작용하지 않으므로 괄호 내부에 중첩된 mrow가 필요합니다.
MathML Core와 호환되는 하이퍼링크는 <a> 요소를 <mrow> 대신 사용하여 지정할 수 있습니다:
<a href="https://openmath.org/cd/transc1.html#arccsch">
<mi>arccsch</mi>
<mrow>
<mo>(</mo>
<mi>z</mi>
<mo>)</mo>
</mrow>
</a>
<mfrac>mfrac 요소는 분수에 사용됩니다. 이 요소는 이항 계수나 르장드르 기호와 같은 분수 유사 객체를 표기하는 데에도 사용할
수 있습니다. mfrac의 문법은 다음과 같습니다.
<mfrac> numerator denominator </mfrac>
mfrac 요소는 numerator와 denominator 내부에서 displaystyle를 false로 설정하거나, 이미
false인 경우에는 scriptlevel을 1만큼 증가시킵니다. (자세한 내용은 3.1.6 Displaystyle 및
Scriptlevel를 참조하십시오.)
mfrac 요소는 아래에 나열된 속성들을 3.1.9
프레젠테이션 요소에 공통적인 속성 외에 허용합니다. 분수선이 있는 경우 그 선은 mathcolor로 지정된 색으로 그려져야 합니다.
| 이름 | 값 | 기본값 |
| linethickness | 길이 | "thin" | "medium" | "thick" | medium |
수평 분수선또는 룰의 두께를 지정합니다. 기본값은 medium이며,
thin은 더 얇지만 가시적이고, thick은 더 두껍습니다.
정확한 두께는 렌더러가 결정합니다. 그러나 OpenType Math 글꼴이 사용 가능한 경우 렌더러는 medium을
MATH.MathConstants.fractionRuleThickness 값으로 설정해야
합니다(MathML-Core의 기본값).
비교는 ASCII 대소문자 구분 없이 수행됩니다. 참고: MathML Core는 <length-percentage>
값만 허용합니다.
|
||
| numalign | "left" | "center" | "right" | center |
|
분자(numerator)의 정렬을 지정합니다.
비교는 ASCII 대소문자 구분 없이 수행됩니다. |
||
| denomalign | "left" | "center" | "right" | center |
|
분모(denominator)의 정렬을 지정합니다.
비교는 ASCII 대소문자 구분 없이 수행됩니다. |
||
| bevelled | boolean | false |
| 분수를 베벨(bevelled) 스타일(분자는 약간 올려지고 분모는 약간 내려가며 둘 사이가 슬래시로 분리되는 방식)로 표시할지 여부를 지정합니다. 수직으로 쌓이는 방식("build up") 대신 이 스타일을 사용할 수 있습니다. 아래 예제를 참조하십시오. | ||
중첩된 분수에는 두꺼운 선(linethickness="thick")이 사용될 수 있습니다. 값이 "0"이면 이항 계수
등에서처럼 막대 없이 렌더링됩니다.
RTL 방향 컨텍스트에서는 분자가 선두(오른쪽)에 위치하고, 분모가 그 뒤(왼쪽)에 위치하며 대각선 선이 오른쪽에서 왼쪽으로 올라가는 방향으로 기울어집니다(3.1.5.1
수학식의 전체 방향성 참조). 이 형식은 관습으로 확립되어 있지만 항상 따르지는 않습니다. RTL 컨텍스트에서 순방향 슬래시를 원할 경우,
mrow 내부의 mo와 같은 대체 표기를 사용해야 합니다.
다양한 linethickness 값을 사용하는 예는 다음과 같습니다:
<mfrac linethickness="3px">
<mrow>
<mo> ( </mo>
<mfrac linethickness="0">
<mi> a </mi>
<mi> b </mi>
</mfrac>
<mo> ) </mo>
<mfrac>
<mi> a </mi>
<mi> b </mi>
</mfrac>
</mrow>
<mfrac>
<mi> c </mi>
<mi> d </mi>
</mfrac>
</mfrac>
다음 예는 베벨 분수를 보여줍니다:
<mfrac>
<mn> 1 </mn>
<mrow>
<msup>
<mi> x </mi>
<mn> 3 </mn>
</msup>
<mo> + </mo>
<mfrac>
<mi> x </mi>
<mn> 3 </mn>
</mfrac>
</mrow>
</mfrac>
<mo> = </mo>
<mfrac bevelled="true">
<mn> 1 </mn>
<mrow>
<msup>
<mi> x </mi>
<mn> 3 </mn>
</msup>
<mo> + </mo>
<mfrac>
<mi> x </mi>
<mn> 3 </mn>
</mfrac>
</mrow>
</mfrac>
좀 더 일반적인 예는 다음과 같습니다:
<mfrac>
<mrow>
<mn> 1 </mn>
<mo> + </mo>
<msqrt>
<mn> 5 </mn>
</msqrt>
</mrow>
<mn> 2 </mn>
</mfrac>
이들 요소는 근호를 구성합니다. msqrt 요소는 제곱근에 사용되고, mroot 요소는 지수가 있는 근호(예: 세제곱근)를 그리는 데 사용됩니다. 이들 요소의 문법은 다음과 같습니다:
<msqrt> base </msqrt>
<mroot> base index </mroot>
mroot 요소는 정확히 2개의 인수를 필요로 합니다. 그러나 msqrt는 단일 인수를 허용하며, 그 인수는 다수의 자식을 가진 추론된 mrow일 수 있습니다(자세한 내용은 3.1.3 필수 인수 참조).
mroot 요소는 index 내부에서 scriptlevel을 2만큼 증가시키고 displaystyle를
false로 설정하지만 base 내부에서는 이들 속성을 변경하지 않습니다. msqrt 요소는 그 인수 내부에서 두 속성을 변경하지 않습니다.
(자세한 내용은 3.1.6
Displaystyle 및 Scriptlevel 참조.)
RTL 방향성에서는 mroot의 경우 지수와 함께 근호의 시작이 오른쪽에서 시작한다는 점에 유의하십시오.
msqrt 및 mroot 요소는 3.1.9 프레젠테이션 요소에 공통적인 속성에
나열된 속성을 허용합니다. 수학색(mathcolor)으로 서드(surd)와 오버바를 그려야 합니다.
제곱근 및 세제곱근
<mrow>
<mrow>
<msqrt>
<mi>x</mi>
</msqrt>
<mroot>
<mi>x</mi>
<mn>3</mn>
</mroot>
</mrow>
<mo>=</mo>
<msup>
<mi>x</mi>
<mrow>
<mrow>
<mn>1</mn>
<mo>/</mo>
<mn>2</mn>
</mrow>
<mo>+</mo>
<mrow>
<mn>1</mn>
<mo>/</mo>
<mn>3</mn>
</mrow>
</mrow>
</msup>
</mrow>
<mstyle>mstyle 요소는 그 내용의 렌더링에 영향을 주는 스타일 변경을 수행하는 데 사용됩니다.
프레젠테이션 요소로서 mstyle은 3.1.9
프레젠테이션 요소에 공통적인 속성에 설명된 속성들을 허용합니다.
추가로, 아래에 설명된 속성을 제외한 모든 다른 프레젠테이션 요소가 허용하는 속성을 가질 수 있습니다.
mstyle 요소는 하나의 인수를 허용하며, 이는 다수의 자식을 가진 추론된 mrow일 수 있습니다(자세한 내용은 3.1.3 필수 인수 참조).
느슨하게 말하면, mstyle 요소의 효과는 그 내부 요소들에 대한 속성의 기본값을 변경하는 것입니다. 스타일 변경은
속성의 기본값이 지정되는 방식에 따라 여러 방식으로 동작합니다. 경우는 다음과 같습니다:
일부 속성(예: displaystyle 또는 scriptlevel)은 명시적으로 설정되지 않을 때 주변 컨텍스트로부터 상속됩니다. mstyle 요소에 이러한 속성을 지정하면 그 값이 자식 요소들이 상속하는 값으로 설정됩니다. 자식 요소가 이
상속 값을 재정의하지 않으면, 그 자식은 그 값을 자신의 자식에게 전달하고, 그 자식들은 다시 전달하는 식으로 이어집니다. 그러나 자식 요소가 명시적 속성
설정이나 자동 변경(예: scriptlevel의 일반적 동작)을 통해 이를 재정의하면,
새로운(재정의된) 값이 그 요소의 자식들에게 전달됩니다.
다른 속성들(예: mfrac의 linethickness)은 보통 상속되지 않는 기본값을 가집니다. 즉, 상위 mfrac가 이 속성을 다른 값으로 설정하더라도, 하위 mfrac가 해당 속성을 설정하지 않으면 보통 기본값인 medium을 사용합니다. 이러한 속성들에 대해 mstyle로 값을 지정하면 그 범위 내 모든 요소의 기본값을 변경하는 효과가 있습니다. 결과적으로 mstyle로 속성 값을 설정하면 그 안의 모든 요소에 직접적·간접적으로 전파되며, 단 개별 요소들이 그 값을
재정의하는 경우에는 예외입니다. 상속 속성과 달리, 이러한 속성을 명시적으로 재정의하는 요소들은 그 자식들에 대해 이 속성 값에 영향을 주지 않습니다.
이러한 속성의 설정은 [MathML-Core]에서는 지원되지 않는다는 점에 유의하십시오.
또 다른 그룹의 속성들(예: stretchy, form)은 연산자 사전 정보, 둘러싼 mrow 내
위치 등으로부터 계산됩니다. 이러한 속성들에 대해 둘러싼 mstyle가 지정한 값은 보통 계산될 값보다
우선합니다.
이들 속성의 설정 또한 [MathML-Core]에서는 지원되지 않습니다.
속성 값이 어떠한 방식으로든 mstyle에서 상속된 경우, 해당 속성은 mstyle의 콘텐츠 내 하위 요소에 대해, 그 속성이 하위 요소에서 값이
지정되지 않은 경우에만 영향을 미칩니다. 해당 요소에서 속성이 명시적으로 설정된 경우, 명시된 값이 상속된 값을 덮어씁니다. 이 규칙의 유일한 예외는
속성 값이 그 요소의 컨텍스트나 렌더링 환경에서 상속된 값에 증분적으로 변화를 주도록 문서화된 경우입니다.
상속된 속성과 비상속 속성이 위에서 설명한 대로 mstyle에 의해 설정될 때의 차이는, 속성이 mstyle의 콘텐츠에 포함된 어떤 요소에서 설정되고, 그 요소의 하위 요소들도 속성을 설정하는
경우에만 의미가 있습니다. 따라서 mathsize와 같이 토큰 요소(혹은 mstyle 자체)에서만 설정될 수 있는 속성에는 해당하지 않습니다.
여러 MathML 요소는 다른 요소들과 동일한 속성 이름을 가지고 있습니다. 이러한 요소들에 대해서는 다음 규칙이 적용됩니다:
height, depth, width
속성이 mstyle 요소에 지정된 경우, 이 속성들은 mspace 요소에만 적용되며,
mglyph, mpadded, mtable의 동일한 속성에는 적용되지 않습니다;
rowalign, columnalign 속성이
mstyle 요소에 지정된 경우,
이 속성들은 mtable 요소에만 적용되며, mtr와
mtd 요소에는 적용되지 않습니다;
lspace 속성이 mstyle에서 설정된 경우,
이는 mo 요소에만 적용되며 mpadded에는 적용되지
않습니다.
일관성을 위해 mpadded 요소의 voffset 속성은
mstyle에서 설정할 수 없습니다;
align 속성이 mstyle에서 설정된 경우,
이는 munder, mover, munderover
요소에만 적용되며, mtable 및 mstack 요소에는
적용되지 않습니다.
src와 같이 기본값이 없는 속성들은 mstyle에 설정할 수 없습니다.
표현(element)로서 mstyle은 mathcolor와
mathbackground
속성을 직접 허용합니다.
즉, mathbackground는 mstyle 요소의 경계 박스에
채울 색상을 지정하며;
기본 배경색을 지정하지 않습니다.
연속 분수에서 중첩된 분수는 축소되지 않고 동일한 크기를 유지해야 합니다.
이는 각 mfrac의 자식들에 대해 displaystyle와 scriptlevel을 mstyle로 재설정하여 달성할 수 있습니다. 예시는 아래와 같습니다.
<mrow>
<mi>π</mi>
<mo>=</mo>
<mfrac>
<mstyle displaystyle="true" scriptlevel="0"> <mn>4</mn> </mstyle>
<mstyle displaystyle="true" scriptlevel="0">
<mn>1</mn>
<mo>+</mo>
<mfrac>
<mstyle displaystyle="true" scriptlevel="0">
<msup> <mn>1</mn> <mn>2</mn> </msup>
</mstyle>
<mstyle displaystyle="true" scriptlevel="0">
<mn>2</mn>
<mo>+</mo>
<mfrac>
<mstyle displaystyle="true" scriptlevel="0">
<msup> <mn>3</mn> <mn>2</mn> </msup>
</mstyle>
<mstyle displaystyle="true" scriptlevel="0">
<mn>2</mn>
<mo>+</mo>
<mfrac>
<mstyle displaystyle="true" scriptlevel="0">
<msup> <mn>5</mn> <mn>2</mn> </msup>
</mstyle>
<mstyle displaystyle="true" scriptlevel="0">
<mn>2</mn>
<mo>+</mo>
<mfrac>
<mstyle displaystyle="true" scriptlevel="0">
<msup> <mn>7</mn> <mn>2</mn> </msup>
</mstyle>
<mstyle displaystyle="true" scriptlevel="0">
<mn>2</mn>
<mo>+</mo>
<mo>⋱</mo>
</mstyle>
</mfrac>
</mstyle>
</mfrac>
</mstyle>
</mfrac>
</mstyle>
</mfrac>
</mstyle>
</mfrac>
</mrow>
<merror>merror 요소는 그 내용을 오류 메시지
로 표시합니다. 예를 들어 내용을 빨간색으로 표시하거나 깜박이게
하거나 배경색을 변경하여 표시할 수 있습니다. 내용은 어떤 표현식이나 표현식 시퀀스라도 될 수 있습니다.
merror는 하나의 인수를 허용하며 이는 다수의 자식을 가진 추론된 mrow일 수 있습니다; 자세한 내용은 3.1.3 필수 인수를 참조하십시오.
이 요소의 의도는 다른 입력으로부터 MathML을 생성하는 프로그램들이 그 입력의 구문 오류를 보고하는 표준적인 방법을 제공하는 것입니다. 손쉽게 수동 입력을 위해 설계된 구문을 파싱하는 전처리기가 MathML을 생성하도록 개발될 것으로 예상되므로, 이들이 특정 지점에서 구문 오류가 발생했음을 나타낼 수 있어야 하는 것이 중요합니다. 자세한 내용은 D.2 오류 처리를 보십시오.
merror를 구문 오류 보고에 사용하는 제안된 방식은 전처리기가 잘못된 입력 부분을 오류 설명을 포함한 merror 요소로 대체하고, 주변 표현식은 가능한 한 정상적으로 처리하는 것입니다. 이렇게 하면 오류 메시지가 잘못된
입력이 올바른 경우 나타났을 위치에 렌더링되어 작성자가 렌더된 출력만 보고도 입력의 어느 부분이 잘못되었는지 파악하기 쉽습니다.
여기서는 특정한 오류 메시지 형식을 제안하지 않지만, 다른 프로그램의 오류 메시지와 마찬가지로 렌더된 오류 메시지를 본 사람이 입력의 무엇이 잘못되었고 어떻게 고칠 수
있는지를 가능한 한 명확히 알 수 있도록 형식을 설계해야 합니다. 잘못된 입력이 올바르게 형식화된 하위 섹션을 포함한다면, 전처리기가 이들 하위 섹션을 정상적으로 전처리하여
오류 메시지(즉 merror 요소의 내용) 내에 포함시키는 것이 유용할 수 있습니다. merror는 텍스트뿐 아니라 임의의 MathML 표현식을 포함할 수 있기 때문입니다.
merror 요소는 3.1.9 프레젠테이션 요소에 공통적인 속성에 나열된 속성을 허용합니다.
만약 MathML 구문 검사 전처리기가 다음과 같은 입력을 받았다면
<mfraction>
<mrow> <mn> 1 </mn> <mo> + </mo> <msqrt> <mn> 5 </mn> </msqrt> </mrow>
<mn> 2 </mn>
</mfraction>
여기에는 비-MathML 요소인 mfraction(아마도
MathML의 mfrac 대신 사용됨)가 포함되어 있으므로, 전처리기는 다음과 같은 오류 메시지를 생성할 수
있습니다.
<merror>
<mtext> Unrecognized element: mfraction; arguments were: </mtext>
<mrow> <mn> 1 </mn> <mo> + </mo> <msqrt> <mn> 5 </mn> </msqrt> </mrow>
<mtext> and </mtext>
<mn> 2 </mn>
</merror>
전처리기의 입력은 이 경우 유효한 MathML이 아니지만, 전처리기가 출력하는 오류 메시지는 유효한 MathML이라는 점에 유의하십시오.
<mpadded>
mpadded 요소는 자식 내용과 동일하게 렌더링되지만, 자식의 경계 상자 크기와 내용의 상대적 위치 지점을 mpadded의 속성에 따라 수정합니다. 내용 자체를 재스케일(늘리거나 줄이기)하지는 않습니다. 이 요소의 이름은 일반적으로
mpadded가 내용 주위에 패딩(여분의 공간)을 추가하는 데 사용되는 전형적 용도를 반영합니다. 그러나 mpadded는 크기와 위치를 보다 일반적으로 조정하는 데 사용될 수 있으며, 일부 조합(예: 음수 패딩)은 mpadded의 내용이 이웃 내용의 렌더링과 겹치게 만들 수 있습니다. 이러한 효과의 몇몇 잠재적 함정에 대한 경고는
[MathML-Notes]를 참조하십시오.
mpadded 요소는 하나의 인수를 허용하며, 이는 다수의 자식을 가진 추론된 mrow일 수 있습니다(자세한 내용은 3.1.3 필수 인수 참조).
수평 공간을 나타내는 속성(width와 lspace)에 기반하여
오디오 렌더러가 시간 지연을 추가하거나 단축하도록 권장합니다.
mpadded 요소는 아래에 나열된 속성들을 3.1.9 프레젠테이션 요소에 공통적인 속성 외에도 허용합니다.
| 이름 | 값 | 기본값 |
| height | 길이 | 내용과 동일 |
mpadded 요소의 높이를 설정하거나 증가시킵니다. 아래 설명을 참조하십시오.
|
||
| depth | 길이 | 내용과 동일 |
mpadded 요소의 깊이(depth)를 설정하거나 증가시킵니다. 아래 설명을 참조하십시오.
|
||
| width | 길이 | 내용과 동일 |
mpadded 요소의 너비를 설정하거나 증가시킵니다. 아래 설명을 참조하십시오.
|
||
| lspace | 길이 | 0em |
| 자식 내용의 수평 위치를 설정합니다. 아래 설명을 참조하십시오. | ||
| voffset | 길이 | 0em |
| 자식 내용의 수직 위치를 설정합니다. 아래 설명을 참조하십시오. | ||
[MathML-Core]는 위 속성들을 지원하지만 값으로 유효한
<length-percentage>만
허용합니다. 길이에서 설명한 바와 같이 MathML 4는 이 구문을
확장하여 namedspace를 허용합니다.
MathML 3는 또한 추가 확장을 허용했습니다:
height,
depth, width를 지정했습니다. 이는 MathML 4에서는 지원되지 않습니다.
이들 속성은 mpadded 요소의 경계 상자 크기를 자식 내용의 경계 상자 크기에 대해 상대적으로 지정하고, mpadded 요소의 자연적 위치에 대해 자식 내용의 위치를 지정합니다. 타이포그라피적 레이아웃 매개변수는 다음 하위절에서
설명됩니다. 속성 값의 형태에 따라 치수는 새 값으로 설정되거나 자식 내용의 해당 치수에 대해 상대적으로 지정될 수 있습니다. 값은 소위 의사단위를 사용하여 자식 내용의 정상 렌더링 치수들의 배수 또는 백분율로 줄 수 있으며, 표준 단위를
사용하여 직접 설정할 수도 있습니다(자세한 내용은 2.1.5.2
길이 값 속성 참조).
해당 치수는 다음 길이 값으로 설정됩니다. 네거티브 값을 만들어 내는 길이를 지정하는 것은 해당 속성을 0으로 설정하는 것과 동일한 효과를 가집니다. 다시 말해, mpadded 요소의 유효한 경계 상자 치수는 항상 0 이상입니다. 그러나 상대 위치 지정 속성인 lspace와 voffset에는 음수 값이 허용됩니다.
mpadded 요소의 내용은 문자, 분수 또는 표현식과 같은 수학 표기의 조각을 정의하며, 이는 자연스러운 경계 상자에
대한 자연 위치 지점을 가진 단일 타이포그래피 요소로 고려될 수 있습니다.
mpadded 요소의 경계 상자 크기는 자식 내용의 경계 상자 크기로 정의되며, 단 mpadded의 height, depth, width 속성에 의해 수정된 경우는 예외입니다.
mpadded 요소의 자식 내용의 자연 위치 지점은 기본적으로 mpadded 요소의 자연 위치 지점과 일치하지만 lspace 및
voffset 속성에 의해 수정될 수 있습니다. 따라서 mpadded의 크기 속성은 내용의 겉보기 경계 상자를 확장하거나 축소하는 데 사용될 수 있고, 위치 속성은 내용의 위치를
경계 상자(따라서 이웃 요소)와 상대적으로 이동시키는 데 사용될 수 있습니다. MathML은 "잉크"(ink), 경계 상자 및 위치 지점 간의 정확한 관계를 정의하지
않으며, 이는 구현에 따라 다릅니다. 따라서 mpadded 속성의 절대값은 구현 간에 이식성이 없을 수 있습니다.
height 속성은 mpadded 요소의 기준선 위의 경계 상자
수직 범위를 지정합니다. height를 증가시키면 mpadded
요소의 기준선과 위쪽 내용 사이의 공간이 증가하여 자식 내용 위의 여백이 생깁니다. height를 감소시키면 기준선과
위쪽 내용 사이의 공간이 줄어들고 위의 여백이 제거됩니다. height를 감소시키면 mpadded 요소 위의 내용이 자식 내용의 렌더링과 겹칠 수 있으므로 일반적으로 피해야 합니다.
depth 속성은 mpadded 요소의 기준선 아래의 경계 상자
수직 범위를 지정합니다. depth를 증가시키면 기준선과 아래 내용 사이의 공간이 증가하여 자식 내용 아래에 패딩이
생깁니다. 감소시키면 아래 여백이 줄어들며, 감소로 인해 아래의 내용이 자식 내용의 렌더링과 겹칠 수 있으므로 일반적으로 피해야 합니다.
width 속성은 mpadded 요소의 위치 지점과 다음 내용의
위치 지점 사이의 수평 거리를 지정합니다. width를 증가시키면 mpadded 요소의 위치 지점과 이후 내용 사이의 간격이 늘어나며, 자식 내용 뒤에 패딩이 생깁니다. 감소시키면 이 간격이
줄어들며, width를 0으로 설정하면 이후 내용이 mpadded
요소의 위치 지점에 배치됩니다. width를 감소시키는 것은 이후 내용의 과잉 인쇄(overprinting)를 초래할
수 있으므로 일반적으로 피해야 합니다.
lspace 속성("선행" 공백; 자세한 내용은 3.1.5.1 수학식의 전체 방향성 참조)은 자식 내용의 위치
지점이 mpadded 요소의 위치 지점에 대해 수평으로 어디에 놓일지를 지정합니다. 기본적으로 이들은 일치하므로
lspace의 절대값은 상대값과 동일한 효과를 가집니다. lspace의 양수 값은 앞선 내용과 자식 내용 사이의 간격을 증가시키고 자식 내용 앞에 패딩을 도입합니다. 음수 값은
앞선 내용과 자식 내용 사이의 간격을 줄이며 앞선 내용의 과잉 인쇄를 초래할 수 있으므로 일반적으로 피해야 합니다. 또한 lspace는 mpadded 요소의 width에 영향을 주지 않으므로, lspace는 자식 내용과
이후 내용 사이의 간격에도 영향을 주며 width가 적절히 조정되지 않으면 이후 내용과의 과잉 인쇄를 초래할 수
있습니다.
voffset 속성은 자식 내용의 위치 지점이 mpadded 요소의
위치 지점에 대해 수직으로 어디에 놓일지를 지정합니다. voffset의 양수 값은 자식 내용의 렌더링을 기준선 위로
올리고, 음수 값은 기준선 아래로 내립니다. 어느 경우든 voffset는 이웃 내용과의 과잉 인쇄를 초래할 수
있으므로 일반적으로 피해야 합니다. 또한 voffset는 mpadded의 height나 depth에 영향을 주지 않으므로, 이로 인해 이웃 내용과의 간격이 변경될 수 있으며, 필요한 경우 height 또는 depth를 적절히 조정해야 합니다.
MathML 렌더러는 속성의 효과를 제외하고는 mpadded 요소를 동일한 내용의 mrow로 교체했을 때 이웃 MathML 요소들과의 상대적 간격이 변경되지 않도록 보장해야 합니다. 이는 mpadded 요소 내부에서 줄바꿈이 발생하더라도 적용됩니다. MathML은 mpadded 요소의 비기본 속성 값이 줄바꿈 알고리즘과 어떻게 상호작용하는지 정의하지 않습니다.
size 및 position 속성의 효과는 아래에 설명되어 있습니다.
다음 다이어그램은 lspace와
voffset를 사용하여 mpadded의 경계 상자를
수정하지 않고
자식 콘텐츠의 위치를 이동시키는 방법을 보여줍니다.
아래 예시에서 y의 자연스러운 크기는 높이 1ex,
깊이 0.45ex 그리고 너비 0.47em로 가정합니다.
해당 MathML은 다음과 같습니다:
<mrow>
<mi>x</mi>
<mpadded lspace="0.2em" voffset="0.3ex">
<mi>y</mi>
</mpadded>
<mi>z</mi>
</mrow>
다음 도식은 width, height, depth를 사용하여 자식 내용의 상대적 위치를 변경하지 않고 mpadded 경계 상자를 수정하는 예를 보여줍니다.
해당 MathML은 다음과 같습니다:
<mrow>
<mi>x</mi>
<mpadded width="0.9em" height="1.3ex" depth=".75ex">
<mi>y</mi>
</mpadded>
<mi>z</mi>
</mrow>
마지막 도식은 자식 내용의 경계 상자와 상대적 위치를 모두 수정하기 위한 일반적인 mpadded의 사용 예를
보여줍니다.
해당 MathML은 다음과 같습니다:
<mrow>
<mi>x</mi>
<mpadded lspace="0.3em" width="1.07em">
<mi>y</mi>
</mpadded>
<mi>z</mi>
</mrow>
<mphantom>mphantom 요소는 보이지 않게 렌더링되지만, 그 내용이 정상적으로 렌더링되었을 때 가질 크기 및 다른 치수(기준선
위치 포함)는 유지합니다. mphantom는 하위 표현식을 보이지 않게 복제하여 표현식의 일부 정렬을 맞추는 데 사용할
수 있습니다.
mphantom 요소는 하나의 인수를 허용하며 이는 다수의 자식을 가진 추론된 mrow일 수 있습니다; 자세한 내용은 3.1.3 필수 인수를 참조하십시오.
위에서 언급한 이유로 한 MathML 표현식을 둘러싸는 mphantom와 mpadded 요소를 같이 사용할 수 있습니다. 예: <mphantom><mpadded attribute-settings>
... </mpadded></mphantom> — 이렇게 하면 크기를 변경하면서 동시에 보이지 않게 만들 수 있습니다.
MathML 렌더러는 mphantom 요소의 내용과 주변 MathML 요소들 간의 상대적 간격이 동일 내용의 mrow로 대체했을 때와 동일하도록 보장해야 합니다. 이 규칙은 mphantom 내부에서 줄바꿈이 발생하더라도 적용됩니다.
위 이유로 mphantom는 그 내용이 공백 유사(space-like)인 경우가 아니면 공백 유사로
간주되지 않습니다(3.2.7 공백 <mspace/>). 이는 연산자 렌더링 규칙이 인접한 요소가 공백
유사인지 여부에 의해 영향을 받기 때문입니다. 그럼에도 불구하고 공백 유사 요소의 적법한 그룹화에 대한 경고는 mphantom의 사용에 적용될 수 있습니다.
mphantom 요소는 3.1.9 프레젠테이션 요소에 공통적인 속성에 나열된 속성을 허용합니다(단, mathcolor는 효과가 없습니다).
앞서 제시된 mphantom 렌더링 규칙이 원하는 효과를 주지 못하는 상황이 하나 있습니다. mphantom이 mrow의 인수 서열의 부분 시퀀스를 둘러싸는
경우, 그 부분 서열 내부의 mo 요소에 대한 form
속성의 기본 결정이 변경될 수 있습니다(3.2.5
연산자, 펜스, 구분자 또는 악센트의 form 기본값 설명 참조). 이러한 경우 해당
mo 요소에 명시적인 form 속성을 추가해야 할 수
있습니다. 다음 예제가 이를 보여줍니다.
다음 예에서 mphantom은 분수의 분자와 분모의 해당 부분들의 정렬을 보장하기 위해 사용됩니다:
<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>
이것은 다음과 같이 렌더링될 것입니다
다음과 같이 렌더링되는 대신:
mphantom 내부의 mo 요소에 대한 명시적 속성 설정
form="infix"은 주변 mphantom이 없었을 때 가질 form 값을 설정합니다.
그렇지 않으면 + 기호가 접두 연산자로 해석되어 약간 다른 간격을 가질 수 있기 때문에 필요합니다.
대안으로, 각 인수 <mo>+</mo> 및 <mi>y</mi>를 각각 자신의
mphantom 요소로 감싸는 방법으로 명시적 속성 설정 없이도 이 문제를 피할 수 있습니다. 예시는 다음과
같습니다.
<mfrac>
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
<mo> + </mo>
<mi> z </mi>
</mrow>
<mrow>
<mi> x </mi>
<mphantom>
<mo> + </mo>
</mphantom>
<mphantom>
<mi> y </mi>
</mphantom>
<mo> + </mo>
<mi> z </mi>
</mrow>
</mfrac>
mfenced 요소는 괄호(중괄호, 대괄호, 소괄호 등)와 선택적으로 인수들 사이의 구분자(예: 쉼표)를 포함하는 일반적인
구성을 표현하기 위한 편리한 형태를 제공합니다.
예를 들어 <mfenced> <mi>x</mi> </mfenced>는 (x)
로 렌더링되며 다음과 동등합니다.
<mrow> <mo> ( </mo> <mi>x</mi> <mo> ) </mo> </mrow>
또한 <mfenced> <mi>x</mi> <mi>y</mi> </mfenced>는
(x, y)
로 렌더링되며 다음과 동등합니다.
<mrow>
<mo> ( </mo>
<mrow> <mi>x</mi> <mo>,</mo> <mi>y</mi> </mrow>
<mo> ) </mo>
</mrow>
개별 괄호나 구분자는 3.2.5 연산자, 펜스, 구분자 또는
악센트
<mo>에서 설명된 것처럼 mo 요소로 표현됩니다. 따라서 어떤 mfenced 요소도 아래에 설명된
확장된 형태와 완전히 동등합니다.
이 권고를 지원하는 렌더러는 이 두 형태를 정확히 동일하게 렌더링해야 합니다. mfenced는 작성자나 저작 도구에 더
편리할 수 있지만, 확장된 형태(mrow를 사용한)는 [MathML-Core]에서만 지원된다는 점에 유의하십시오.
일반적으로 mfenced 요소는 0개 이상 인수를 가질 수 있으며, 이들을 괄호로 둘러싼 mrow를 생성합니다. 인수가 둘 이상이면 인수들 사이에 구분자를 삽입하고 적절한 그룹화를 위해 인수와 구분자 주위에 추가
중첩된 mrow를 삽입합니다(3.3.1
하위 표현식의 가로 그룹화
<mrow>,
<a>). 일반적인 확장된 형태는 아래에 표시됩니다. 괄호와
구분자는 기본적으로 소괄호와 쉼표이지만 아래 표에 표시된 것처럼 속성으로 변경할 수 있습니다.
mfenced 요소는 아래에 나열된 속성들을 3.1.9 프레젠테이션 요소에 공통적인 속성 외에 허용합니다. 구분자 및 괄호는
mathcolor로 지정된 색으로 그려져야 합니다.
| 이름 | 값 | 기본값 |
| open | 문자열 | ( |
여는 구분자를 지정합니다. 이 값은 mo 요소의 내용으로 사용되므로, 어떤 공백도 2.1.7 입력에서의 공백
축소에 따라 잘려서 축소된다는 점에 유의하십시오.
|
||
| close | 문자열 | ) |
닫는 구분자를 지정합니다. 이 값도 mo 요소의 내용으로 사용되므로 공백은 2.1.7 입력에서의 공백
축소에 따라 잘리고 축소됩니다.
|
||
| separators | 문자열 | , |
공백으로 구분될 수 있는 0개 이상의 구분 문자들의 시퀀스를 지정합니다. 각 인수 쌍은 해당하는 구분자로 구분되어 표시됩니다(마지막 인수 뒤에는
구분자가 나타나지 않습니다). 구분자가 너무 많으면 초과분은 무시되고, 너무 적으면 마지막 구분자가 반복됩니다. separators 내부의 공백은 무시됩니다.
|
||
모든 속성이 명시된 일반적인 mfenced는 다음과 같습니다:
<mfenced open="opening-fence"
close="closing-fence"
separators="sep#1 sep#2 ... sep#(n-1)" >
arg#1
...
arg#n
</mfenced>
RTL 방향 컨텍스트에서는 초기 텍스트 방향이 RTL이므로 open 및 close 속성의 문자 중 미러링 대응 문자가 있으면 그 미러된 형태로 렌더링됩니다. 특히 기본값은 LTR과 RTL
모두에서 괄호로 둘러싸인 시퀀스로 올바르게 렌더링됩니다.
위에 보인 일반적인 mfenced 요소는 다음의 확장된 형태와 동등합니다:
<mrow>
<mo fence="true"> opening-fence </mo>
<mrow>
arg#1
<mo separator="true"> sep#1 </mo>
...
<mo separator="true"> sep#(n-1) </mo>
arg#n
</mrow>
<mo fence="true"> closing-fence </mo>
</mrow>
각 인수(마지막 인수 제외) 뒤에는 구분자가 옵니다. 내부 mrow는 적절한 그룹화를 위해 추가됩니다(3.3.1 하위 표현식의 가로 그룹화
<mrow>,
<a> 참조).
인수가 하나뿐인 경우 위 형태는 구분자가 없으며, <mrow> arg#1 </mrow>는 arg#1와
동등하므로(3.3.1 하위 표현식의 가로 그룹화
<mrow>,
<a> 참조) 다음과 같이도 표현할 수 있습니다:
<mrow>
<mo fence="true"> opening-fence </mo>
arg#1
<mo fence="true"> closing-fence </mo>
</mrow>
구분자 문자가 너무 많으면 초과분은 무시됩니다. 구분자 문자가 제공되었지만 너무 적으면 마지막 문자가 필요한 만큼 반복됩니다. 따라서 기본값 separators=","는 separators=",,",
separators=",,," 등과 동등합니다. 구분자 문자가 제공되지 않았지만 여러 인수가 필요한 경우(예:
separators=" " 또는 "" 이고 인수가 둘 이상인 경우) 구분자 요소는 전혀 삽입되지 않습니다—즉
<mo separator="true"> sep#i </mo> 요소들이 완전히 생략됩니다. 이는 빈 내용을 가진 mo 요소를 삽입하는 것과는 다릅니다.
마지막으로 인수가 전혀 없는 경우, 예:
<mfenced open="opening-fence"
close="closing-fence"
separators="anything" >
</mfenced>
동일한 확장된 형태는 단지 괄호만 포함하는 mrow로 정의됩니다:
<mrow>
<mo fence="true"> opening-fence </mo>
<mo fence="true"> closing-fence </mo>
</mrow>
모든 괄호로 둘러싼 표현식
이 mfenced로 인코딩될 수 있는 것은 아닙니다. 예외적 표현식에는
장식된(separator 또는 fence가 장식된) 구분자나 괄호, mstyle로 둘러싸인 것, 누락되거나 추가된
구분자나 괄호, 또는 다중 문자 구분자가 포함된 경우가 포함됩니다. 이러한 경우에는 적절히 수정된 확장된 형태를 사용하여 표현식을 인코딩해야 합니다. 위에서 논의한 바와
같이 확장된 형태를 직접 사용하는 것은 언제나 허용됩니다. 특히 작성자는 MathML 전처리기가 mfenced를 등가
확장 형태로 대체할 수 있음을 보장할 수 없습니다.
위에 보인 확장된 형태들은 mo 요소에 펜스 또는 구분자임을 식별하는 속성들을 포함하고 있다는 점에 유의하십시오. 가장
흔한 괄호와 구분자들은 이미 연산자 사전에서 해당 속성들과 함께 정의되어 있으므로, 작성자는 확장 형태를 직접 사용할 때 보통 그 속성들을 명시할 필요가 없습니다. 또한
form 속성의 기본값 규칙(3.2.5 연산자, 펜스, 구분자 또는 악센트)은 여는 괄호와 닫는 괄호에 각각 form="prefix"와 form="postfix"를 사실상 부여하고, 구분자에는 form="infix"를 부여합니다.
예를 들어 구분자로 '+'를 사용하는 mfenced를 일반 연산자 '+'의 약식으로 사용하는 것은 잘못입니다. 예:
<mrow>
<mi>x</mi> <mo>+</mo> <mi>y</mi> <mo>+</mo> <mi>z</mi>
</mrow>
이는 '+' 기호들이 구분자(separator)로 처리되기 때문에 잘못된 사용입니다. 즉 마크업된 형태는
<mo separator="true">+</mo>와 같이 처리되어 부적절하게 렌더링될 수 있습니다.
<mfenced>
<mrow>
<mi> a </mi>
<mo> + </mo>
<mi> b </mi>
</mrow>
</mfenced>
위의 mrow는 mfenced가 정확히 하나의 인수를 갖도록
필요합니다. 이것이 없으면 잘못 렌더링되어 (a, +, b)
처럼 보일 수 있습니다.
<mfenced open="[">
<mn> 0 </mn>
<mn> 1 </mn>
</mfenced>
<mrow>
<mi> f </mi>
<mo> ⁡<!--ApplyFunction--> </mo>
<mfenced>
<mi> x </mi>
<mi> y </mi>
</mfenced>
</mrow>
menclose 요소는 notation 속성으로 지정된 둘러싸기
표기법 내부에 그 내용을 렌더링합니다. menclose는 단일 인수를 허용하며, 이는 다수의 자식을 가진 추론된
mrow일 수 있습니다; 자세한 내용은 3.1.3 필수 인수를 참조하십시오.
menclose 요소는 아래에 나열된 속성들을 3.1.9 프레젠테이션 요소에 공통적인 속성 외에 허용합니다. 표기법들은 mathcolor로 지정된 색으로 그려져야 합니다.
notation에 허용되는 값은 개방형입니다. 적합한 렌더러는 처리하지 못하는 값들은 무시할 수 있지만, 가능한 많이
렌더링하도록 권장됩니다.
| 이름 | 값 | 기본값 |
| notation | (actuarial | phasorangle | box | roundedbox | circle |
left | right
| top | bottom |
updiagonalstrike | downdiagonalstrike | verticalstrike | horizontalstrike | northeastarrow
| madruwb | text ) +
|
아무 동작도 하지 않음 |
자식들을 둘러싸는 데 사용할 공백으로 구분된 표기 목록을 지정합니다. 각 표기 유형에 대한 설명은 아래를 참조하십시오. MathML 4는 longdiv 및 radical의 사용을 더 이상 권장하지 않습니다. 이 표기들은 각각 mlongdiv 및 msqrt가 제공하는 기능을
중복하므로, 해당 요소들을 대신 사용해야 합니다. 기본값은 notation이 주어지지 않았거나 빈
문자열일 경우 menclose가 아무 것도 그리지 않도록 변경되었습니다.
비교는 ASCII 대소문자 구분 없이 수행됩니다. |
||
notation에 대해 공백으로 구분된 임의 개수의 값을 줄 수 있으며, 렌더러가 이해하는 모든 값들은 렌더링되어야
합니다. 각각은 다른 값들이 없는 것처럼 렌더링되어야 하며 서로 중첩되어서는 안 됩니다. 예를 들어 notation="circle box"는 내용 주위에
원과 상자를 그려야 하며, 원과 상자가 겹칠 수 있습니다. 정의된 표기 중 phasorangle만 방향성의
영향을 받습니다(자세한 내용은 3.1.5.1
수학식의 전체 방향성 참조).
notation이 actuarial로 지정되면 내용은
연금 계산 표기(actuarial symbol)로 둘러싸여 그려집니다. 유사한 결과는 top right
값으로도 얻을 수 있습니다.
box, roundedbox, circle 값은 내용 주위를 해당 형태로 둘러싸야 합니다. 박스와 원과 내용 사이의 간격은 MathML에서
명시하지 않으며 렌더러에 맡깁니다. 실무적으로 수평 방향의 양쪽 패딩은 0.4em, 수직 방향은 0.5ex 정도가 적절합니다.
left, right, top, bottom 값은 내용의 해당 측면에
선을 그려야 합니다. northeastarrow, updiagonalstrike, downdiagonalstrike, verticalstrike, horizontalstrike 값은 내용 위에 해당하는 취소선/대각선 등을 겹쳐 그려야 합니다(예: updiagonalstrike는 왼쪽 아래 모서리에서 오른쪽 위 모서리로의 대각선 취소선을 의미).
northeastarrow 값은 TeX의 \cancelto 명령을 구현하는 데 유용하므로 구현을 권장합니다.
렌더러가 menclose에 대해 다른 화살표들을 구현하는 경우, 일관성과 표준화를 위해 다음 전체 이름 집합에서
선택하도록 권장합니다:
uparrow
rightarrow
downarrow
leftarrow
northwestarrow
southwestarrow
southeastarrow
northeastarrow
updownarrow
leftrightarrow
northwestsoutheastarrow
northeastsouthwestarrow
madruwb 값은 아랍식 팩토리얼 표기(enclosure representing an Arabic
factorial)를 생성해야 합니다(‘madruwb’는 아랍어 مضروب의 음역어입니다). 이는 아래 세 번째 예제에서 보여집니다.
menclose 요소의 기준선은 그 자식(암시된 mrow일 수 있음)의
기준선입니다.
여러 속성을 사용하는 예는 다음과 같습니다
<menclose notation='circle box'>
<mi> x </mi><mo> + </mo><mi> y </mi>
</menclose>
연금 표기법(actuarial notation)에 menclose를 사용하는 예는 다음과 같습니다
<msub>
<mi>a</mi>
<mrow>
<menclose notation='actuarial'>
<mi>n</mi>
</menclose>
<mo>⁣<!--InvisibleComma--></mo>
<mi>i</mi>
</mrow>
</msub>
회로 분석에서 사용되는 phasorangle의 예는 다음과 같습니다:
<mi>C</mi>
<mrow>
<menclose notation='phasorangle'>
<mrow>
<mo>−</mo>
<mfrac>
<mi>π</mi>
<mn>2</mn>
</mfrac>
</mrow>
</menclose>
</mrow>
madruwb의 예는 다음과 같습니다:
<menclose notation="madruwb">
<mn>12</mn>
</menclose>
이 절에서 설명하는 요소들은 하나 이상의 스크립트를 기준(base) 주위에 배치합니다. 기호에 다양한 종류의 스크립트와 장식을 붙이는 것은 수학 표기에서 매우 흔한 표기 장치입니다. 순수하게 시각적 배치를 위해서는 주어진 기준 주위의 전통적인 모든 스크립트 위치에 스크립트와 장식을 배치할 수 있는 범용 요소 하나로 충분할 수 있습니다. 그러나 일반적인 표기를 추상 구조로 더 잘 포착하기 위해 MathML은 더 전문화된 여러 스크립팅 요소들을 제공합니다.
아래첨자/위첨자 요소 외에도, MathML에는 기준 위와 아래에 스크립트를 배치하는 오버스크립트 및 언더스크립트 요소가 있습니다. 이러한 요소들은 큰 연산자에 대한 리밋을 배치하거나 기준
위/아래에 악센트나 선을 배치하는 데 사용할 수 있습니다. 악센트 렌더링 규칙은 오버스크립트 및 언더스크립트와 다르며, 이 차이는 아래 적절한 섹션에서 설명된 accent 및 accentunder 속성으로 제어할 수 있습니다.
스크립트의 렌더링은 모든 MathML 표현식의 렌더링 프로세스가 상속하는 환경의 일부인 scriptlevel 및 displaystyle 속성의 영향을 받으며, 이는 3.1.6 Displaystyle and Scriptlevel에서 설명됩니다.
MathML은 텐서 지수를 첨부하기 위한 요소도 제공합니다. 텐서 지수는 일반적인 아래첨자/위첨자와 달리 수직 열로 정렬되어야 한다는 점에서 구별됩니다. 또한 모든 위 스크립트는 기준선 정렬되어야 하고 모든 아래 스크립트도 기준선 정렬되어야 합니다. 텐서 지수는 프리스크립트 위치에도 나타날 수 있습니다. 일반 스크립트는 기준 뒤에 따릅니다(LTR 문맥에서는 오른쪽, RTL 문맥에서는 왼쪽). 반면 프리스크립트는 기준 앞에 옵니다(LTR(RTL) 문맥에서는 왼쪽(오른쪽)에 위치).
프레젠테이션 요소는 표현식의 추상적 표기 구조를 설명하는 데 사용되어야 하므로, 모든 스크립팅
요소(즉 첫 번째 인수 표현식)에서 기준 표현식은 스크립트가 붙는 전체
표현식이어야 하며 단지 마지막 글자만이 되어서는 안 됩니다. 예를 들어,
는 다음과 같이 작성되어야 합니다:
<msup>
<mrow>
<mo> ( </mo>
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
</mrow>
<mo> ) </mo>
</mrow>
<mn> 2 </mn>
</msup>
<msub>msub 요소는 다음 문법을 사용하여 기준에 아래첨자를 첨부합니다
<msub> base subscript </msub>
이는 subscript 내부에서 scriptlevel을 1만큼 증가시키고 displaystyle를 false로 설정하지만,
base 내부에서는 두 속성 모두 변경하지 않습니다. (참조: 3.1.6 Displaystyle and Scriptlevel.)
msub 요소는 3.1.9 프레젠테이션 요소에 공통된 속성에 명시된 것들 외에 아래에 나열된 속성들을 허용합니다.
| 이름 | 값 | 기본값 |
| subscriptshift | length | 자동 |
| subscript의 기준선을 아래로 이동시키는 최소량을 지정합니다; 기본적으로 렌더링 에이전트는 자체의 위치 규칙을 사용합니다. | ||
<msup>msup 요소는 다음 문법을 사용하여 기준에 위첨자를 첨부합니다
<msup> base superscript </msup>
이는 superscript 내부에서 scriptlevel을 1만큼 증가시키고 displaystyle를 false로 설정하지만,
base 내부에서는 두 속성 모두 변경하지 않습니다. (참조: 3.1.6
Displaystyle and Scriptlevel.)
msup 요소는 3.1.9 프레젠테이션 요소에 공통된 속성에 명시된 것들 외에 아래에 나열된 속성들을 허용합니다.
| 이름 | 값 | 기본값 |
| superscriptshift | length | 자동 |
| superscript의 기준선을 위로 이동시키는 최소량을 지정합니다; 기본적으로 렌더링 에이전트는 자체의 위치 규칙을 사용합니다. | ||
<msubsup>msubsup 요소는 기준 표현식에 아래첨자와 위첨자 둘 다를 첨부하는 데 사용됩니다.
<msubsup> base subscript superscript </msubsup>
이는 subscript와 superscript 내부에서 scriptlevel을 1만큼
증가시키고 displaystyle를 false로
설정하지만, base 내부에서는 두 속성 모두 변경하지 않습니다.
(참조: 3.1.6 Displaystyle
and Scriptlevel.)
둘 다 기준에 밀착되어 배치된다는 점에 유의하십시오. 예:
와 중첩된 스크립트의 계단식 배치(다음)
의 차이를 비교하십시오; 후자는 msub을 msup 내부에 중첩시켜
얻을 수 있습니다.
msubsup 요소는 3.1.9 프레젠테이션 요소에 공통된 속성에 명시된 것들 외에 아래에 나열된 속성들을 허용합니다.
| 이름 | 값 | 기본값 |
| subscriptshift | length | 자동 |
| subscript의 기준선을 아래로 이동시키는 최소량을 지정합니다; 기본적으로 렌더링 에이전트는 자체의 위치 규칙을 사용합니다. | ||
| superscriptshift | length | 자동 |
| superscript의 기준선을 위로 이동시키는 최소량을 지정합니다; 기본적으로 렌더링 에이전트는 자체의 위치 규칙을 사용합니다. | ||
msubsup는 식별자에 아래/위첨자 쌍을 추가하는 데 가장 일반적으로 사용됩니다. 그러나 다른 중요한 용도는
전통적으로 디스플레이 스타일에서도 스크립트 위치에 리밋이 표시되는 특정 큰 연산자에 리밋을 배치하는 것입니다. 가장 일반적인 예는 적분입니다. 예를 들어,
는 다음과 같이 표현됩니다
<mrow>
<msubsup>
<mo> ∫ </mo>
<mn> 0 </mn>
<mn> 1 </mn>
</msubsup>
<mrow>
<msup>
<mi> ⅇ </mi>
<mi> x </mi>
</msup>
<mo> ⁢<!--InvisibleTimes--> </mo>
<mrow>
<mo> ⅆ </mo>
<mi> x </mi>
</mrow>
</mrow>
</mrow>
<munder>munder 요소는 기준 아래에 배치된 악센트 또는 리밋을 첨부하는데 다음 문법을 사용합니다
<munder> base underscript </munder>
이는 underscript 내부에서 항상 displaystyle를 false로 설정하지만, accentunder이
false일 때에만 scriptlevel을 1만큼
증가시킵니다. base 내부에서는 두 속성 모두 변경하지 않습니다. (참조: 3.1.6 Displaystyle and Scriptlevel.)
만약 base가 movablelimits=true인 연산자이거나 (혹은 그 핵심의 mo 요소가 그러한
속성을 가진 장식된 연산자라면), 그리고 displaystyle=false인 경우, underscript은 아래첨자 위치(subscript position)로
그려집니다. 이 경우 accentunder 속성은 무시됩니다. 이는 U+2211 (entity sum) 같은 기호의 리밋에 자주 사용됩니다.
munder 요소는 3.1.9 프레젠테이션 요소에 공통된 속성에 명시된 것들 외에 아래에 나열된 속성들을 허용합니다.
| 이름 | 값 | 기본값 |
| accentunder | boolean | 자동 |
underscript을 악센트로 그릴지 아니면 리밋으로 그릴지를 지정합니다. 악센트는 기준과 동일한 크기로(즉 scriptlevel을 증가시키지 않고) 그려지며 기준에 더 가깝게 그려집니다.
|
||
| align | "left" | "right" | "center" | center |
|
스크립트가 기준 아래/위에서 왼쪽, 가운데 또는 오른쪽 중 어디에 정렬될지를 지정합니다.
3.2.5.7.3 Horizontal Stretching Rules에 지정된 바와
같이, 장식된 연산자의 언더스크립트 핵심은 기준을 덮도록 늘어나야 하지만 정렬은 전체 underscript에 기반합니다.
비교는 ASCII 대소문자 구분 없이 수행되며, 모든 일치 문자열이 값으로 허용됩니다. |
||
accentunder의 기본값은 underscript이 mo 요소이거나 장식된 연산자인 경우가 아니면 false입니다(자세한 내용은 3.2.5
Operator, Fence, Separator or Accent
<mo> 참조). 만약 underscript이
mo 요소라면, 그 mo의 accent 속성 값이 accentunder의 기본값으로
사용됩니다. 만약 underscript이 장식된 연산자라면, 그 핵심의 mo 요소의 accent 속성이 기본값으로 사용됩니다. 모든 속성과 마찬가지로 명시적으로 주어진 값이 기본값을 덮어씁니다.
[MathML-Core]는 3.2.5 Operator, Fence, Separator or Accent
<mo>에 대해 accent 속성을 지원하지 않습니다.
MathML Core와의 호환성을 위해, accentunder는 munder에 설정되어야 합니다.
accentunder가 렌더링에 어떻게 영향을 주는지 보여주는 예:
<mrow>
<munder accentunder="true">
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
<mo> + </mo>
<mi> z </mi>
</mrow>
<mo> ⏟ </mo>
</munder>
<mtext> <!--nbsp-->versus <!--nbsp--></mtext>
<munder accentunder="false">
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
<mo> + </mo>
<mi> z </mi>
</mrow>
<mo> ⏟ </mo>
</munder>
</mrow>
<mover>mover 요소는 기준 위에 배치된 악센트 또는 리밋을 첨부하는데 다음 문법을 사용합니다
<mover> base overscript </mover>
이는 overscript 내부에서 항상 displaystyle를 false로 설정하지만, accent이 false일 때에만 scriptlevel을 1만큼
증가시킵니다. base 내부에서는 두 속성 모두 변경하지 않습니다. (참조: 3.1.6 Displaystyle and Scriptlevel.)
만약 base가 movablelimits=true인 연산자이거나 (혹은 그 핵심의 mo 요소가 그러한
속성을 가진 장식된 연산자라면), 그리고 displaystyle=false인 경우, overscript은 위첨자 위치(superscript position)로
그려집니다. 이 경우 accent 속성은 무시됩니다. 이는 U+2211 (entity sum) 같은 기호의 리밋에 자주 사용됩니다.
mover 요소는 3.1.9 프레젠테이션 요소에 공통된 속성에 명시된 것들 외에 아래에 나열된 속성들을 허용합니다.
| 이름 | 값 | 기본값 |
| accent | boolean | 자동 |
overscript을 악센트로 그릴지 아니면 리밋으로 그릴지를 지정합니다. 악센트는 기준과 동일한 크기로(즉 scriptlevel을 증가시키지 않고) 그려지며 기준에 더 가깝게 그려집니다.
|
||
| align | "left" | "right" | "center" | center |
|
스크립트가 기준 아래/위에서 왼쪽, 가운데 또는 오른쪽 중 어디에 정렬될지를 지정합니다.
3.2.5.7.3 Horizontal Stretching Rules에 지정된 바와
같이, 장식된 연산자의 오버스크립트 핵심은 기준을 덮도록 늘어나야 하지만 정렬은 전체 overscript에 기반합니다.
비교는 ASCII 대소문자 구분 없이 수행되며, 모든 일치 문자열이 값으로 허용됩니다. |
||
악센트와 리밋의 차이는 예제에서 보여집니다.
accent의 기본값은 false이며, 단 overscript가 mo 요소이거나 장식된
연산자인 경우에는 예외입니다(자세한 내용은 3.2.5
Operator, Fence, Separator or Accent
<mo> 참조). 만약 overscript가
mo 요소라면, 그 mo의 accent 속성 값이 mover의 accent 기본값으로 사용됩니다. 만약 overscript이 장식된 연산자라면, 그 핵심의 mo 요소의 accent 속성이 기본값으로 사용됩니다.
[MathML-Core]는 3.2.5 Operator, Fence, Separator or Accent
<mo>에 대해 accent 속성을 지원하지 않습니다. MathML Core와의 호환성을 위해, accentunder는 munder에 설정되어야 합니다.
accent가 렌더링에 어떻게 영향을 주는지 보여주는 두 예:
<mrow>
<mover accent="true">
<mi> x </mi>
<mo> ^ </mo>
</mover>
<mtext> <!--nbsp-->versus <!--nbsp--></mtext>
<mover accent="false">
<mi> x </mi>
<mo> ^ </mo>
</mover>
</mrow>
<mrow>
<mover accent="true">
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
<mo> + </mo>
<mi> z </mi>
</mrow>
<mo> ⏞ </mo>
</mover>
<mtext> <!--nbsp-->versus <!--nbsp--></mtext>
<mover accent="false">
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
<mo> + </mo>
<mi> z </mi>
</mrow>
<mo> ⏞ </mo>
</mover>
</mrow>
<munderover>
munderover 요소는 기준의 위와 아래에 모두 배치된 악센트 또는 리밋을 첨부하는데 다음 문법을 사용합니다
<munderover> base underscript overscript </munderover>
이는 underscript과 overscript 내부에서 항상 displaystyle를
false로 설정하지만, 각각의 accentunder
또는 accent이 false인 경우에만 scriptlevel을 1만큼 증가시킵니다. base 내부에서는 두 속성 모두 변경하지 않습니다.
(참조: 3.1.6 Displaystyle
and Scriptlevel.)
만약 base가 movablelimits=true인 연산자이거나 (혹은 그 핵심의 mo 요소가 그러한
속성을 가진 장식된 연산자라면), 그리고 displaystyle=false인 경우, underscript과 overscript은 각각 아래첨자
및 위첨자 위치로 그려집니다. 이 경우 accentunder와 accent 속성들은 무시됩니다. 이는 U+2211 (entity sum) 같은 기호의 리밋에 자주 사용됩니다.
munderover 요소는 3.1.9 프레젠테이션 요소에 공통된 속성에 명시된 것들 외에 아래에 나열된 속성들을 허용합니다.
| 이름 | 값 | 기본값 |
| accent | boolean | 자동 |
overscript을 악센트로 그릴지 아니면 리밋으로 그릴지를 지정합니다. 악센트는 기준과 동일한 크기로(즉 scriptlevel을 증가시키지 않고) 그려지며 기준에 더 가깝게 그려집니다.
|
||
| accentunder | boolean | 자동 |
underscript을 악센트로 그릴지 아니면 리밋으로 그릴지를 지정합니다. 악센트는 기준과 동일한 크기로(즉 scriptlevel을 증가시키지 않고) 그려지며 기준에 더 가깝게 그려집니다.
|
||
| align | "left" | "right" | "center" | center |
|
스크립트들이 기준 아래/위에서 왼쪽, 가운데 또는 오른쪽 중 어디에 정렬될지를 지정합니다.
3.2.5.7.3 Horizontal Stretching Rules에 지정된 바와
같이, 장식된 연산자의 언더스크립트와 오버스크립트 핵심은 기준을 덮도록 늘어나야 하지만 정렬은 전체 underscript 또는
overscript에 기반합니다.
비교는 ASCII 대소문자 구분 없이 수행되며, 모든 일치 문자열이 값으로 허용됩니다. |
||
munderover 요소는 별도의 munder 및 mover 요소 대신 사용되며, 이는 언더스크립트와 오버스크립트가 기준에 대해 수직적으로 동일하게 간격을 유지하고 기준의
기울기를 따르도록 하기 위함입니다(예제 참조).
accent 및 accentunder의 기본값은 각각 munder 및 mover에 대해 계산되는 방식과 동일하게
계산됩니다.
이 예제는 movablelimits=true이고
displaystyle일 때 munder을 mover 안에 중첩시키는 것과 munderover을 사용하는
것의 차이를 보여줍니다(이는 msubsup와 동일하게 렌더링됩니다).
<mstyle displaystyle="false">
<mover>
<munder>
<mo>∑</mo>
<mi>i</mi>
</munder>
<mi>n</mi>
</mover>
<mo>+</mo>
<munderover>
<mo>∑</mo>
<mi>i</mi>
<mi>n</mi>
</munderover>
</mstyle>
<mmultiscripts>,
<mprescripts/>
프리서브스크립트(presubscript)와 텐서 표기법은 단일 요소 mmultiscripts로 다음 문법을 사용하여
표현됩니다:
<mmultiscripts>
base
(subscript superscript)*
[ <mprescripts/> (presubscript presuperscript)* ]
</mmultiscripts>
이 요소는 하나의 기준 표현식에 첨부된 임의 개수의 수직 정렬된 아래첨자/위첨자 쌍을 표현할 수 있습니다. 포스트스크립트와 프리스크립트를 모두 지원합니다.
렌더링되어야 할 스크립트가 없는 위치는 빈 부분을 나타내는 유효한 빈 요소(예: <mrow/>)로 표현되어야
합니다.
(이전 MathML 버전에서는 <none/>가 사용되었으나 이는 빈 <mrow/>와 동일했습니다.)
모든 위 스크립트는 기준선 정렬되어야 하고 모든 아래 스크립트도 기준선 정렬되어야 합니다.
프리스크립트는 선택적이며, 존재할 경우 포스트스크립트 뒤에 제공됩니다. 이 순서는 프리스크립트가 텐서 표기법에 비해 상대적으로 드물기 때문에 선택되었습니다.
인수 시퀀스는 기준 다음에 포스트스크립트 전체를 나타내는 0개 이상의 수직 정렬된 아래/위첨자 쌍(그 순서대로)이 옵니다. 이 목록은 선택적으로 빈 요소 mprescripts와 프리스크립트 전체를 나타내는 0개 이상의 프리 아래/위첨자 쌍으로 이어집니다. 포스트스크립트와
프리스크립트의 쌍 목록은 방향 컨텍스트과 동일한 순서(즉 LTR 컨텍스트에서는 왼쪽-오른쪽 순서)로 표시됩니다. 특정 위치에 렌더링될 아래첨자나
위첨자가 없다면 해당 위치에 빈 요소 <mrow/>를 사용해야 합니다.
각 아래/위첨자 쌍마다 쌍 내 요소들의 수평 정렬은 mmultiscripts의
기준 쪽을 향해야 합니다. 즉, 프리스크립트는 오른쪽 정렬되어야 하고 포스트스크립트는 왼쪽 정렬되어야 합니다.
기준, 아래첨자, 위첨자, 선택적 구분 요소 mprescripts, 프리아래첨자 및 프리위첨자는 모두 mmultiscripts 요소의 직접 하위 표현식입니다. 즉 표현식 트리에서 모두 같은 수준에 있습니다. 어떤 스크립트
인수가 아래첨자인지 위첨자인지, 또는 프리인지 포스트인지 여부는 빈 요소 mprescripts 자체를 위치 결정에서
무시했을 때 짝수/홀수 인수 위치에 나타나는지에 따라 결정됩니다. 첫 번째 인수(기준)는 위치 1에 있다고 간주됩니다. mprescripts가 주어지지 않은 경우 인수의 총수는 홀수여야 하고, 주어진 경우에는 짝수여야 합니다.
빈 요소 mprescripts는 mmultiscripts의 직접 하위
표현식으로만 허용됩니다.
mmultiscripts의 속성은 msubsup의 속성과 동일합니다.
참조 3.4.3.2
Attributes.
mmultiscripts 요소는 기준을 제외한 각 인수 내에서 scriptlevel을 1만큼 증가시키고 displaystyle를
false로 설정하지만, base 내부에서는 두 속성 모두 변경하지 않습니다. (참조: 3.1.6 Displaystyle and
Scriptlevel.)
이 하이퍼지오메트릭 함수 예제는 프리 및 포스트 아래첨자 사용을 보여줍니다:
<mrow>
<mmultiscripts>
<mi> F </mi>
<mn> 1 </mn>
<mrow/>
<mprescripts/>
<mn> 0 </mn>
<mrow/>
</mmultiscripts>
<mo> ⁡<!--ApplyFunction--> </mo>
<mrow>
<mo> ( </mo>
<mrow>
<mo> ; </mo>
<mi> a </mi>
<mo> ; </mo>
<mi> z </mi>
</mrow>
<mo> ) </mo>
</mrow>
</mrow>
다음 예제는 텐서를 보여줍니다. 예에서 k와 l은 서로 다른 지수입니다
<mmultiscripts>
<mi> R </mi>
<mi> i </mi>
<mrow/>
<mrow/>
<mi> j </mi>
<mi> k </mi>
<mrow/>
<mi> l </mi>
<mrow/>
</mmultiscripts>
다음 예제는 스크립트가 기준 쪽으로 정렬되는 것을 보여줍니다:
<mmultiscripts>
<mi> X </mi>
<mn> 123 </mn>
<mn> 1 </mn>
<mprescripts/>
<mn> 123 </mn>
<mn> 1 </mn>
</mmultiscripts>
마지막 예제는 mmultiscripts로 아랍식 스타일의 이항계수를 표시하는 방법을 보여줍니다
<mstyle dir="rtl">
<mmultiscripts><mo>ل</mo>
<mn>12</mn><mrow/>
<mprescripts/>
<mrow/><mn>5</mn>
</mmultiscripts>
</mstyle>
행렬, 배열 및 기타 표와 유사한 수학 표기법은 mtable,
mtr 및
mtd 요소를 사용하여 마크업됩니다. 이러한 요소들은 HTML의
table, tr 및 td 요소와 유사하지만,
가환 다이어그램, 블록 행렬 등에서 필요한 정밀한 레이아웃 제어를 위한
특수 속성을 제공합니다.
덧셈이나 곱셈 같은 초등 수학에 사용되는 2차원 레이아웃은 표와 다소 유사하지만
중요한 방식으로 다릅니다.
레이아웃과 접근성 이유로, mstack 및 mlongdiv 요소는 3.6 초등 수학에서 논의된 바와 같이
초등 수학 표기법에 사용되어야 합니다.
<mtable>
행렬 또는 표는 mtable 요소를 사용하여 지정합니다. mtable
요소 내부에는 mtr 요소만 나타날 수 있습니다.
같은 표의 다른 행보다 열 수가 적은 표 행(다른 행이 앞서거나 뒤따르는 경우 포함)은
해당 행의 오른쪽(또는 RTL 문맥에서는 왼쪽)에 빈 mtd 요소를 추가하여 패딩된 것으로 간주되어,
각 행의 열 수가 표의 어떤 행의 최대 열 수와 같아지도록 합니다. rowspan 또는 columnspan 속성에 기본값이 아닌 값이 사용된 mtd 요소는
이후의 mtr 요소들에 제공되어야 하는 mtd 요소 수에 영향을 줄
수 있다는 점에 유의하세요.
MathML은 표 레이아웃 알고리즘을 명시하지 않습니다. 특히, width 속성과 columnwidth 속성에 대한 명시적 값과 표 셀 콘텐츠의 최소 크기 같은 표의 너비에 대한 다른 제약들 사이의
충돌을 해결하는 것은 MathML 렌더러의 책임입니다. 표 레이아웃 알고리즘에 대한 논의는 Cascading Style Sheets, level
2를 참조하세요.
mtable 요소는 3.1.9 표현 요소에 공통인 속성에서 지정된 것들 이외에 아래에 나열된 속성들을 허용합니다.
mtable의 일부로 그려지는 모든 선은 mathcolor로
지정된 색으로 그려져야 합니다.
| 이름 | 값 | 기본값 |
| align | ("top" | "bottom" | "center" | "baseline" | "axis"), rownumber? | axis |
표가 환경에 대해 수직으로 정렬되는 방식을 지정합니다.
axis는 표의 수직 중심을
환경의 axis에 맞추는 것을 의미합니다.
(axis는 조판자들이 사용하는 정렬선입니다.
이는 대개 마이너스 기호가 위치하는 선입니다.)
center와 baseline은 모두 표의 중심을
환경의 기준선(baseline)에 맞추는 것을 의미합니다.
top 또는 bottom은 표의 위쪽이나 아래쪽을
환경의 기준선에 맞춥니다.
align 속성 값이
rownumber로 끝날 경우,
위에서 설명한 방식에 따라 표 전체가 아니라 지정된 행(상단 행부터 1로 계산됨)이 정렬됩니다. 단, 아래 예외가 있습니다.
rownumber가 음수일 경우, 아래쪽에서부터 행을 셉니다.
rownumber의 값이 범위를 벗어나거나 정수가 아니면 무시됩니다.
행 번호가 지정되고 정렬 값이 baseline 또는 axis인 경우,
해당 행의 baseline 또는 axis를 정렬에 사용합니다. 이는
rowalign
값이 baseline 또는 axis일 때만 명확히 정의됩니다. MathML은
baseline 또는 axis 정렬이 rowalign의 다른 값에 대해 어떻게 동작하는지
지정하지 않습니다.
비교는 ASCII 대소문자 구분 없이 이루어지며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
| rowalign | ("top" | "bottom" | "center" | "baseline" | "axis") + | baseline |
동일한 행 내의 다른 셀들과의 수직 정렬을 지정합니다:
top은 행 전체에서 각 항목의 상단을 정렬합니다;
bottom은 셀의 하단을 정렬합니다;
center는 셀을 가운데로 정렬합니다;
baseline은 셀의 기준선을 정렬합니다;
axis는 각 셀의 축을 정렬합니다.
(다중 값에 대한 주석을 아래를 참조하세요.)
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
| columnalign | ("left" | "center" | "right") + | center |
동일한 열 내의 다른 셀들과의 수평 정렬을 지정합니다:
left는 셀의 왼쪽을 정렬합니다;
center는 각 셀을 가운데로 정렬합니다;
right는 셀의 오른쪽을 정렬합니다.
(다중 값에 대한 주석을 아래를 참조하세요.)
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
[이 속성은 정렬 요소인 maligngroup 및 malignmark와 함께 3.5.4 정렬 마커
<maligngroup/>, <malignmark/>에서 설명됩니다.]
|
||
| columnwidth | ("auto" | length | "fit") + | auto |
열의 너비를 어떻게 할지 지정합니다:
auto는 열이 필요한 만큼의 너비를 갖도록 합니다;
명시적 길이는 열이 정확히 그 너비를 갖도록 하며, 해당 열의 내용은 렌더러의 재량으로 줄바꿈하거나 잘라내어 맞춥니다;
fit은 auto 또는
고정 너비 열을 뺀 후 남은 페이지 너비를 fit 열들 사이에 균등하게 나눈다는
의미입니다.
충분한 공간이 남아있지 않아 비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
| width | "auto" | length | auto |
전체 표의 원하는 너비를 지정하며 시각적 사용자 에이전트를 위한 것입니다.
값이 퍼센트 값인 경우, 그 값은 MathML 렌더러가 사용 가능한 가로 공간에 대한 비율입니다. 이는 3.1.7 식의 줄
나누기에서 지정된 현재 대상 너비로, 예를 들어 표를 표시 영역의 전체 너비로 지정할 수 있게 합니다.
값이 ASCII 대소문자 구분
없음으로 auto와 일치하는 경우, MathML 렌더러는 선택한 레이아웃
알고리즘을 사용하여 내용으로부터 표 너비를 계산해야 합니다.
참고: 단위 없는 숫자는 MathML 3에서 허용되어 백분율 값과 유사하게 처리되었지만, 단위 없는 숫자는 MathML 4에서 사용 중단되었습니다.
|
||
| rowspacing | (length) + | 1.0ex |
| 행 사이에 추가할 간격의 양을 지정합니다. (다중 값에 대한 주석을 아래를 참조하세요.) | ||
| columnspacing | (length) + | 0.8em |
| 열 사이에 추가할 간격의 양을 지정합니다. (다중 값에 대한 주석을 아래를 참조하세요.) | ||
| rowlines | ("none" | "solid" | "dashed") + | none |
각 행 사이에 어떤 종류의 선을 추가할지 지정합니다:
none은 선이 없음을 의미합니다;
solid은 실선;
dashed은 점선(대시의 간격은 구현에 따라 다름)을 의미합니다.
(다중 값에 대한 주석을 아래를 참조하세요.)
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
| columnlines | ("none" | "solid" | "dashed") + | none |
각 열 사이에 어떤 종류의 선을 추가할지 지정합니다:
none은 선이 없음을 의미합니다;
solid은 실선;
dashed은 점선(대시의 간격은 구현에 따라 다름)을 의미합니다.
(다중 값에 대한 주석을 아래를 참조하세요.)
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
| frame | "none" | "solid" | "dashed" | none |
표 주위에 어떤 종류의 선을 그릴지 지정합니다.
none은 선이 없음을 의미합니다;
solid은 실선;
dashed은 점선(대시 간격은 구현에 따라 다름)을 의미합니다.
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
| framespacing | length, length | 0.4em 0.5ex |
frame이 none이 아닐
때,
표와 프레임 사이에 추가되는 간격을 지정합니다.
첫 번째 값은 오른쪽과 왼쪽의 간격을 지정하고,
두 번째 값은 위와 아래의 간격을 지정합니다.
|
||
| equalrows | boolean | false |
| 모든 행의 총 높이를 동일하게 강제할지 여부를 지정합니다. | ||
| equalcolumns | boolean | false |
| 모든 열의 총 너비를 동일하게 강제할지 여부를 지정합니다. | ||
| displaystyle | boolean | false |
각 셀 내에서의 displaystyle 값을 지정합니다
(scriptlevel은 변경되지 않음);
자세한 내용은 3.1.6
Displaystyle 및 Scriptlevel을 참조하세요.
|
||
위의 행(또는 열, 또는 행/열 사이의 간격)에 영향을 주는 속성들의 명세에서,
표기 (...)+는 속성에 대해 공백으로 구분된 목록으로 여러 값을 줄 수 있음을 의미합니다 (자세한 내용은 2.1.5
MathML 속성 값를 참조하세요).
이 문맥에서 단일 값은 모든 행(또는 열 또는 간격)에 대해 사용될 값을 지정합니다.
값 목록은 위에서부터(행의 경우) 또는 방향성에 따라 왼쪽 또는 오른쪽에서 시작하는 첫 번째 열(열의 경우)에 해당하는 행(또는 열 또는 간격)에 순서대로 적용됩니다.
제공된 값보다 행(또는 열 또는 간격)이 더 많은 경우, 마지막 값이 필요에 따라 반복됩니다.
너무 많은 값이 제공되면 초과된 값은 무시됩니다.
선(frame, rowlines, columnlines)이 차지하는 어느 영역도,
또는 간격(framespacing, rowspacing 또는
columnspacing)도 행이나 열로 계산되지 않습니다.
displaystyle 속성은 상속 값을 설정하기 위해 mtable
요소에 허용됩니다. 속성이 없으면, mtable 요소는 표 요소 내에서 displaystyle을
false로 설정합니다.
(자세한 내용은 3.1.6
Displaystyle 및 Scriptlevel을 참조하세요.)
3x3 단위 행렬은 다음과 같이 표현할 수 있습니다:
<mrow>
<mo> ( </mo>
<mtable>
<mtr>
<mtd> <mn>1</mn> </mtd>
<mtd> <mn>0</mn> </mtd>
<mtd> <mn>0</mn> </mtd>
</mtr>
<mtr>
<mtd> <mn>0</mn> </mtd>
<mtd> <mn>1</mn> </mtd>
<mtd> <mn>0</mn> </mtd>
</mtr>
<mtr>
<mtd> <mn>0</mn> </mtd>
<mtd> <mn>0</mn> </mtd>
<mtd> <mn>1</mn> </mtd>
</mtr>
</mtable>
<mo> ) </mo>
</mrow>
괄호는 mtable 요소의 렌더링의 일부가 아니므로 괄호는 명시적으로 표현되어야 합니다. 이렇게 하면 대괄호나
다른 둘러싸는 펜스를 사용하거나 전혀 사용하지 않는 것도 가능합니다.
<mtr>mtr 요소는 표나 행렬의 한 행을 나타냅니다. mtr 요소는
mtable 요소의 직접 하위 표현식으로만 허용되며, 그 내용이 표의 한 행을 구성하도록 지정합니다. mtr의 각 인수는 표의 서로 다른 열에 배치되며, LTR 문맥에서는 왼쪽에서 시작하고 RTL 문맥에서는 오른쪽에서
시작합니다.
3.5.1 테이블 또는 행렬
<mtable>에서 설명한 바와 같이,
mtr 요소는 표에서 더 짧은 경우 mtd 요소로 실질적으로
패딩됩니다.
mtr 요소는 3.1.9 표현 요소에 공통인 속성에서 지정된 것들 이외에 아래에 나열된 속성들을 허용합니다.
| 이름 | 값 | 기본값 |
| rowalign | "top" | "bottom" | "center" | "baseline" | "axis" | 상속됨 |
이 행에 대해 rowalign 속성이 mtable에 의해 지정한 수직 정렬을 오버라이드합니다.
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
| columnalign | ("left" | "center" | "right") + | 상속됨 |
이 행에 대해 columnalign 속성이 mtable에 의해 지정한 수평 정렬을 오버라이드합니다.
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
이전 버전의 MathML은 번호가 매겨진 방정식을 위해 mlabeledtr 요소를 명시했습니다. mlabeledtr에서는 첫 번째 mtd가 방정식 번호를 나타내고, 행의
나머지 요소들이 번호가 매겨지는 방정식을 나타냅니다. mtable의 side 및 minlabelspacing 속성은 방정식 번호의
배치를 결정합니다.
이 요소는 널리 구현되지 않았고 현재 버전에서는 명세에 포함되지 않지만 레거시 스키마에서는 여전히 유효합니다.
많은 번호가 매겨진 방정식이 있는 큰 문서에서는 자동 번호 매기기가 중요합니다. 자동 방정식 번호 매기기와 방정식 번호에 대한 자동 참조 해결은 MathML의 범위를
벗어나지만, 스타일 시트 또는 다른 수단을 사용하여 해결할 수 있습니다. CSS 문맥에서는 비어 있는 mtd를 mtr의 첫 번째 자식으로 사용하고 CSS 카운터와 생성된 콘텐츠를 사용하여 아래 예시와 같은 CSS 스타일로 방정식 번호를
채울 수 있습니다.
body {counter-reset: eqnum;}
mtd.eqnum {counter-increment: eqnum;}
mtd.eqnum:before {content: "(" counter(eqnum) ")"}
<mtd>mtd 요소는 표나 행렬의 하나의 항목(셀)을 나타냅니다. mtd
요소는 mtr 요소의 직접 하위 표현식으로만 허용됩니다.
mtd 요소는 단일 인수를 허용하며, 이는 여러 자식을 가진 추론된 mrow일 수 있습니다; 3.1.3 필수 인수를 참조하세요.
mtd 요소는 3.1.9 표현 요소에 공통인 속성에서 지정된 것들 이외에 아래에 나열된 속성들을 허용합니다.
| 이름 | 값 | 기본값 |
| rowspan | positive-integer | 1 |
셀이 지정한 수의 행을 차지하는 것처럼 취급되게 합니다.
다음의 rowspan-1 행들에 해당하는 mtd는 생략되어야 합니다.
이 해석은 HTML 표의 유사한 속성과 일치합니다.
|
||
| columnspan | positive-integer | 1 |
셀이 지정한 수의 열을 차지하는 것처럼 취급되게 합니다.
다음의 rowspan-1 mtd들은
생략되어야 합니다.
이 해석은 HTML 표의 유사한 속성과 일치합니다.
|
||
| rowalign | "top" | "bottom" | "center" | "baseline" | "axis" | 상속됨 |
이 셀의 수직 정렬을 지정하여 포함하는 mrow 및 mtable에서 지정된 값을 오버라이드합니다.
rowalign 속성을 참조하세요.
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
| columnalign | "left" | "center" | "right" | 상속됨 |
이 셀의 수평 정렬을 지정하여 포함하는 mrow 및 mtable에서 지정된 값을 오버라이드합니다.
columnalign 속성을 참조하세요.
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
malignmark와 maligngroup은 [MathML-Core]에서 지원되지 않습니다.
대부분의 경우, 정렬은 mtable 열을 직접 사용하여 구현하는 것이 권장됩니다.
기존 MathML에서 malignmark를 사용하는 경우, Javascript polyfill이 제공됩니다.
<maligngroup/>와 <malignmark/> 요소는 이전 MathML 버전과 비교해 간단해졌습니다:
<maligngroup/>와 <malignmark/>에 대한 속성이 제거되었습니다.mtable, mtr, mlabeledtr에서 허용되던 groupalign
속성이 제거되었습니다<malignmark/>는 이전에는 토큰 요소 내부를 포함하여 어디에서나 허용되었지만,
이제는 <maligngroup/>이 허용되는 위치에만 허용됩니다 (아래 참조)정렬 마커는 공간 유사 요소(참조 3.2.7 공백
<mspace/>)로,
MathML 식의 열에서 지정한 위치에 필요한 만큼의 가로 공간을 자동으로 삽입하여, 소표현들 사이를 수평으로 정렬하는 데 사용할 수 있습니다.
부분 정렬이 필요한 식은(이 절 마지막 예시의 각 방정식) 반드시 테이블의 열 요소(즉, mtd 요소)로 제공되어야 하며,
mtable의 한 열로 구성되어야 합니다. 혼동을 피하기 위해, 이 절의 나머지에서는 테이블 셀
이라는 용어를
사용합니다.
정렬 요소 간의 모든 상호작용은 발생한 mtable 열로 한정됩니다. 즉,
mtable 요소로 지정된 테이블의 각 열은 정렬 범위
로 동작하며,
그 안의 모든 정렬의 효과를 포함합니다. 또한, 해당 범위 내의 정렬 요소와,
그 안에 중첩된 다른 정렬 범위 내의 정렬 요소 사이 상호작용은 배제됩니다.
정렬할 식의 각 부분은 정렬 그룹에 포함되어야 합니다.
정렬 포인트는 maligngroup 요소 다음에 오는 요소의 좌측(오른쪽, RTL의 경우) 경계입니다.
단, maligngroup 요소 사이에 malignmark 요소가
있으면,
해당 malignmark 다음에 오는 요소의 좌측(오른쪽, RTL의 경우) 경계가 해당 그룹의 정렬 포인트가 됩니다.
maligngroup 또는 maligngroup이
mtable 외부에서 사용될 경우, 0 너비로 렌더링됩니다.
일반적으로, n
개의 maligngroup 요소를 포함하는 테이블 셀은 n
개의 정렬 그룹을 가지며, i번째 그룹은 i번째
maligngroup 요소 이후부터 (i+1)-번째 전에까지의
요소들로 구성됩니다. 테이블 셀의 내용 내에 있는 어떤 요소도 첫 번째
maligngroup 요소 이전에 완전히 위치해서는 안 됩니다.
정렬 그룹의 구분은 MathML 표현식의 중첩 구조와 반드시 일치하지는 않습니다 —
즉, 한 정렬 그룹이 한 mrow의 끝 부분, 다른 하나의 전체, 또 다른 하나의 시작 부분으로 이루어질 수도 있습니다.
이는 이 절 마지막에 주어진 예시의 MathML 마크업에서 확인할 수 있습니다.
정렬 그룹이 반드시 레이아웃 스키마의 중첩 구조와 일치할 필요는 없지만,
테이블 셀 내에서는 maligngroup, malignmark 요소의
허용 위치에 제한이 있습니다. 이들 요소는 아래 목록의 타입 요소(직접 또는 간접적으로)에만 포함될 수 있습니다
(이들 요소도 테이블 셀에 포함됨):
mrow 또는 mstyle 요소,
다수 자식이 있는 mtd 요소에 의해 만들어진 추론된
mrow 포함, 단 dir 속성으로
방향이 변경되는 mrow는 제외;
mphantom 요소;
mfenced 요소;
maction 요소(단, 선택된 하위 표현식만 검사됨);
이런 제한은 정렬을 명확히 지정할 수 있도록 하며, overscript, 급진기호, 분수선 등 복잡한 상황을 피할 수 있도록 합니다. 그리고 단순한 알고리즘으로 원하는 정렬을 구현할 수 있게 해줍니다.
정렬 그룹으로 구분된 테이블 셀의 경우, 내용 내 모든 요소는 단 하나의 정렬 그룹에만 포함되어야 하며,
단, 위 목록에 포함된 요소가 내부에 maligngroup 요소를 포함하거나,
maligngroup 요소 자체는 예외입니다.
즉, 정렬 그룹을 포함하는 테이블 셀 내에서는 첫 번째 완전한 요소는 maligngroup 요소여야 하며,
이는 다른 요소의 시작 태그가 앞에 올 수 있습니다.
이 요구사항은 첫 maligngroup 요소 이전에 요소를 어떻게 처리할지에 대한 혼란을 제거하고,
전체적으로 테이블 셀이 열의 정렬 과정에서 제외되는 경우를 쉽게 식별할 수 있게 합니다.
열의 테이블 셀들이 동일한 수의 정렬 그룹을 포함할 필요는 없습니다. 동일 열의 테이블 셀 중 그룹 수가 적은 셀의 오른쪽(RTL이면 왼쪽)에 0 너비 정렬 그룹이 효과적으로 추가됩니다.
열의 식 중 정렬 그룹이 없어야 하는 경우,
maligngroup 또는 malignmark
요소를 포함하지 않아야 합니다.
정렬 그룹이 없는 식은 해당 columnalign 속성
또는 CSS 등을 통해 열 전체로 정렬됩니다.
malignmark 요소가 정렬 그룹(해당 그룹에 완전히 포함된 별도의 정렬 범위 제외) 내 어디서든 존재하면,
maligngroup 요소 시작에 대한 정렬이 무시됩니다.
malignmark 요소는
뒤따르는 요소의 좌측(또는 RTL에서는 우측) 경계에서 정렬 포인트가 잡혀야 함을 표시합니다.
정렬 그룹 내에서 malignmark 요소를 사용할 경우,
반드시 maligngroup 허용 위치 내에서만 등장해야 하며(참조 3.5.4.2
정렬 그룹 지정),
해당 그룹 내에는 최대 하나의 malignmark 요소만 있어야 합니다.
maligngroup으로 표시된 정렬은
mtable의 추가 열을 사용하여 maligngroup 없이 동등하게
변환할 수 있습니다.
Javascript polyfill이
[MathML-Core] 환경에서 이런 변환을 구현하는 데 유용합니다.
변환 상세는 구현에 따라 다르지만, polyfill이 명시적 예시를 제공합니다.
기본 아이디어는 각 정렬 그룹당 두 개의 추가 열을 만들어
첫 번째 열은 정렬 포인트로 우측 정렬(또는 RTL에서는 좌측),
두 번째 열은 좌측 정렬(또는 RTL에서는 우측)하는 것입니다.
정렬 포인트는 malignmark로 명시하거나 위 설명과 같이 정렬 그룹 시작에 암묵적으로 둘 수 있습니다.
테이블 헤딩 등 정렬 범위를 넘는 셀에 대한 명확한 규칙은 여기서 상세히 다루지 않지만, polyfill에서 한 구현을 제공합니다.
위의 규칙들로 아래 예시의 MathML 표현을 충분히 설명할 수 있습니다.
<mtable>
<mtr>
<mtd>
<mrow>
<maligngroup/>
<mn>8</mn>
<mo><!--InvisibleTimes--></mo>
<malignmark/>
<mi>x</mi>
</mrow>
<maligngroup/>
<mo>+</mo>
<mrow>
<maligngroup/>
<mn>55</mn>
<mo><!--InvisibleTimes--></mo>
<malignmark/>
<mi>y</mi>
</mrow>
<maligngroup/>
<mo>=</mo>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/>
<mn>3</mn>
<mo><!--InvisibleTimes--></mo>
<malignmark/>
<mi>x</mi>
</mrow>
<maligngroup/>
<mo>-</mo>
<mrow>
<maligngroup/>
<mn>7</mn>
<mo><!--InvisibleTimes--></mo>
<malignmark/>
<mi>y</mi>
</mrow>
<maligngroup/>
<mo>=</mo>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mtd>
</mtr>
</mtable>
2차원 덧셈, 곱셈, 그리고 긴 나눗셈과 같이 저학년에서 사용되는 수학 표기법은 표 형태인 경우가 많습니다. 그러나 사용되는 구체적인 표기법은 고등 수학보다 국가별로 훨씬 다양합니다. 또한 초등 수학에서는 중간 과정 상태의 예시나 일부 고의로 생략된 부분 형태를 제시하는 경우가 많아, MathML은 이러한 중간 형태 또는 의도적으로 비어 있는 부분들을 표현할 수 있어야 합니다. 실제로 이러한 구성은 '수학'이자 동시에 기억 보조나 절차 안내로서의 역할을 합니다.
초등 수학에서 기본 정렬에 사용되는 요소들은 다음과 같습니다:
mstack숫자 자리와 연산자를 행별로 정렬
msgroup유사한 정렬을 가진 행들을 그룹화
msrow숫자와 연산자를 하나의 행으로 그룹화
msline스택의 행들 사이에 선을 그림
mscarries다음 행에 대한 선택적 받내림/올림 및/또는 취소선을 주석으로 표시
mscarry단일 자리의 받내림/올림 및/또는 취소선
mlongdiv긴 나눗셈에서 나누는 수와 몫, 그리고 중간 계산의 스택을 지정
mstack 및 mlongdiv는 모든 초등 수학 레이아웃의 부모 요소입니다.
mstack, mlongdiv, 그리고 msgroup의 자식들 중에서 msrow, msgroup, mscarries 및 msline를 제외한 다른 모든 요소들은 암묵적으로 msrow로 둘러싸인 것처럼
처리됩니다
(행에 대한 자세한 내용은 3.6.4 초등 수학의 행 <msrow>를 참조).
이들 스택 구성의 주된 용도가 자리별로 정렬된 숫자 행을 쌓는 것이고,
숫자는 항상 왼쪽에서 오른쪽으로 포맷되므로,
mstack의 열은 항상 왼쪽에서 오른쪽으로 처리됩니다;
현재 적용 중인 전체 방향성(예: dir 속성)은 열이나 행 내의 받음/올림의 표시 순서에 영향을 주지 않으며,
특히 행 내의 연산자들의 순서에도 영향을 주지 않습니다(자세한 내용은 3.1.5
방향성 참조).
이 요소들은 이 절에서 설명되고 그 사용 예가 뒤따릅니다. 2차원 덧셈, 뺄셈, 곱셈 및 긴 나눗셈 외에도, 이 요소들은 순환 소수 표기에 사용되는 여러 표기법을 표현하는 데 사용될 수 있습니다.
아래는 매우 간단한 2차원 덧셈의 예입니다:
<mstack>
<mn>424</mn>
<msrow> <mo>+</mo> <mn>33</mn> </msrow>
<msline/>
</mstack>
더 많은 예시는 3.6.8 초등 수학 예제에 나와 있습니다.
mstack는 각 자리수에 맞춰 정렬된 숫자 행을 배치하는 데 사용됩니다.
이는 2차원 덧셈, 뺄셈, 곱셈과 같은 많은 초등 수학 표기에서 일반적입니다.
mstack의 자식들은 각각 위의 행 아래에 쌓이는 행 또는 행의 그룹을 나타내며; 행의 수는 임의입니다.
msrow는 한 행을 나타내고;
msgroup는 여러 행을 그룹화하여 그들의 수평 정렬을 함께 조정할 수 있게 하며;
mscarries는 다음 행에 적용될 일련의 올림/받음 등을 나타내고;
msline은 행을 구분하는 선을 나타냅니다.
다른 모든 요소는 암묵적으로 msrow로 둘러싸인 것으로 처리됩니다.
각 행은 열에 배치되는 '자리들'을 포함합니다.
(자세한 내용은 3.6.4 초등 수학의 행 <msrow> 참조).
stackalign 속성과 position, shift 속성들(이는 msgroup, mscarries, 및 msrow에 적용됨)이 어떤 문자가 어느 열에
속하는지를 결정합니다.
열의 너비는 그 열에 있는 각 '자리'의 너비 중 최대값입니다 — 받음/올림은 너비 계산에 참여하지 않으며 0 너비로 처리됩니다.
요소가 열에 맞지 않을 만큼 넓으면, charalign 속성에 따라 인접한 열로 넘칩니다.
열에 문자가 없으면 그 열의 너비는 현재 언어에서의 0 문자 너비로 간주됩니다(많은 글꼴에서 모든 숫자 자릿수는 동일한 너비를 가짐).
mstack 레이아웃 방법은 다음과 같습니다:
행의 '자리들'이 결정됩니다.
행의 모든 자리들은 처음에 stackalign 값에 따라 정렬됩니다.
각 행은 그 행을 제어하는 position 속성(있다면)에 기반하여 그 정렬에 대해 위치가 정해집니다.
각 열의 자리들의 최대 너비가 결정되며, 그 열의 더 짧거나 더 넓은 항목들은 charalign 속성에
따라 정렬됩니다.
행과 열을 기반으로 mstack 요소의 너비와 높이가 계산됩니다.
열의 넘침은 이 계산의 일부로 사용되지 않습니다.
align 속성에 의해 mstack 요소의 기준선이 결정됩니다.
mstack 요소는 3.1.9 표현 요소에 공통인 속성에서 지정된 것들 외에 아래에 나열된 속성들을 허용합니다.
| 이름 | 값 | 기본값 |
| align | ("top" | "bottom" | "center" | "baseline" | "axis"), rownumber? | baseline |
mstack의 수직 정렬을 주변 환경에 대해 지정합니다.
허용되는 값과 의미는 mtable의 align 속성과 동일합니다.
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
| stackalign | "left" | "center" | "right" | "decimalpoint" | decimalpoint |
행들을 수평으로 정렬할 때 어떤 열을 기준으로 할지 지정합니다.
left이면 행들이 왼쪽에 정렬되고;
right이면 오른쪽에 정렬되며;
center이면 가운데 열(열 수가 짝수인 경우 가운데의 오른쪽 열)을 기준으로
정렬됩니다.
position이 0이 아닌 행이나 shift의 영향을 받는 행들은 필요한 빈 열을 적절한 쪽에 추가한 것처럼 처리됩니다;
자세한 내용은 3.6.3 유사한
위치의 행 그룹화 <msgroup> 및 3.6.4 초등 수학의 행
<msrow>를 참조하세요.
decimalpoint의 경우, 정렬에 사용되는 열은 mstyle의 decimalcharacter
속성(기본값 ".")으로 지정된 소수점 문자를 포함하는 각 행에서 가장 왼쪽에 있는 열입니다.
행에 소수점 문자가 없으면, 행의 첫 숫자 오른쪽에 암묵적인 소수점 문자가 있다고 가정합니다.
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
| charalign | "left" | "center" | "right" | right |
열 내의 자리(문자)의 수평 정렬을 지정합니다.
내용이 열 너비보다 크면, 정렬과 반대 쪽으로 넘칩니다.
예를 들어 right이면 내용은 왼쪽으로 넘치고; center이면 양쪽으로 넘칩니다.
이 넘침은 열 너비 계산이나 mstack의 전체 너비 계산에 포함되지 않습니다.
이런 경우 작성자는 열 넘침 간의 충돌을 피하도록 주의해야 합니다.
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
| charspacing | length | "loose" | "medium" | "tight" | medium |
각 열 사이에 넣을 간격의 양을 지정합니다.
올림이 자리 위에 놓이지 않거나 특히 넓은 경우 더 큰 간격이 유용할 수 있습니다.
키워드 loose, medium, 및 tight는 올림이나 다른 열 항목이 넓을 때 간격을 자동으로 조정합니다.
이 세 값은 작성자가 레이아웃이 어떻게 보일지에 대해 어느 정도 유연성을 갖게 해 줍니다.
모든 경우에 열 사이의 간격은 고정된 양이며 열마다 달라지지 않습니다.
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
긴 나눗셈 표기법은 전 세계적으로 상당히 다양하지만, 표기의 핵심은 종종 유사합니다.
mlongdiv는 mstack와 유사하며 긴 나눗셈을 레이아웃하는 데
사용됩니다.
mlongdiv의 처음 두 자식은 차례대로 나누는 수(divisor)와 나눗셈 결과(quotient)입니다.
나머지 자식들은 mstack의 자식인 것처럼 처리됩니다.
긴 나눗셈을 표시하기 위해 사용되는 선과 구분자들의 배치 방식은 longdivstyle 속성에 의해 제어됩니다.
결과나 나누는 수는 초등 수학 요소일 수도 있고, 빈 <mrow/>일 수도 있습니다
(MathML 3에서 사용되던 특정 빈 요소 <none/>는 이 명세에서 사용되지 않습니다).
특히, msgroup가 사용되는 경우, 그 그룹의 요소들은 mstack을 자체적으로 형성할 수도 있고 배당(dividend)의 mstack의 일부일 수도 있으며,
이는 longdivstyle 속성의 값에 따라 달라집니다.
예를 들어 미국식 표기에서는 결과가 배당의 mstack의 일부로 처리되지만, 나누는 수는 그렇지 않습니다.
MathML은 언제 결과와 나누는 수가 자체적인 mstack을 형성해야 하는지, 또는 결과나 나누는 수에 대해 msline이나 다른 초등 수학 요소가 사용되었을 때 그것들이 배당의 mstack 레이아웃에 참여하지 않을 경우 무엇이 발생해야 하는지를 규정하지 않습니다.
이 절의 나머지 부분에서 mstack에 대해 언급한 내용은 특별히 달리 명시하지 않는 한 mlongdiv에도 적용됩니다.
mlongdiv 요소는 mstack 요소가 허용하는 모든 속성(표현
요소에 공통인 속성 포함)을 수용하며, 아래에 나열된 속성도 추가로 허용합니다.
longdivstyle에 허용되는 값들은 개방형입니다.
준수하는 렌더러는 처리하지 못하는 값은 무시할 수 있지만, 렌더러는 아래 나열된 값들 중 가능한 한 많은 것을 렌더링하도록 권장됩니다.
나눗셈 레이아웃의 일부로 그려지는 모든 선은 mathcolor로 지정된 색으로 그려져야 합니다.
| 이름 | 값 | 기본값 |
| longdivstyle | "lefttop" | "stackedrightright" | "mediumstackedrightright" | "shortstackedrightright" | "righttop" | "left/\right" | "left)(right" | ":right=right" | "stackedleftleft" | "stackedleftlinetop" | lefttop |
|
긴 나눗셈 레이아웃의 스타일을 제어합니다. 이름은 나누는 수와 몫이 배당과 어떤 관계에 있는지를 대략적으로 기억하기 쉽게 표현한 것입니다.
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
이 표기들이 어떻게 그려지는지에 대한 예는 3.6.8.3 긴 나눗셈을 참조하세요. 위에 나열된 값들은 전 세계의 다양한 국가에서 사용되는 긴 나눗셈 표기들을 나타냅니다:
lefttop미국, 영국 등에서 흔히 사용되는 표기
stackedrightright프랑스 등에서 흔히 사용되는 표기
mediumrightright러시아 등에서 흔히 사용되는 표기
shortstackedrightright브라질 등에서 흔히 사용되는 표기
righttop중국, 스웨덴 등에서 흔히 사용되는 표기
left/\right네덜란드에서 흔히 사용되는 표기
left)(right인도에서 흔히 사용되는 표기
:right=right독일에서 흔히 사용되는 표기
stackedleftleft아랍권 국가들에서 흔히 사용되는 표기
stackedleftlinetop아랍권 국가들에서 흔히 사용되는 표기
msgroup는 mstack 및 mlongdiv 요소 안에서
스택 정렬에 대해 유사한 위치 관계를 가지는 행들을 그룹화하는 데 사용됩니다.
명시적으로 주어지지 않으면, mstack 및 mlongdiv의 스택을
나타내는 자식들은 암묵적으로 msgroup로 둘러싸인 것으로 처리됩니다.
msgroup 요소는 3.1.9 표현 요소에 공통인 속성에서 지정된 것들 외에 아래에 나열된 속성들을 허용합니다.
| 이름 | 값 | 기본값 |
| position | integer | 0 |
이 그룹 내에서의 행들의 수평 위치를 포함하는 msgroup에 의해 결정된 위치에 대해 상대적으로
지정합니다
(그 msgroup의 position 및
shift 속성에 따름).
결과 위치 값은 포함하는 mstack 또는 mlongdiv의 stackalign으로 지정된
열을 기준으로 합니다.
양수 값은 각 행을 십의 자리 쪽으로 이동시키며(10의 거듭제곱을 곱하는 것과 유사), 오른쪽에 빈 열을 채워 넣는 효과를 냅니다;
음수 값은 일의 자리 쪽으로 이동하여 왼쪽에 패딩을 추가하는 효과를 냅니다.
소수점은 열로 계산되며 음수 값에 대해 고려되어야 합니다.
|
||
| shift | integer | 0 |
| 이 그룹 내의 연속 자식들(행 또는 그룹)에 대해 위치의 점진적 이동을 지정합니다. 값의 해석은 position과 동일하지만, 그룹 내의 각 자식(첫 번째 제외)의 위치가 이전 자식에 대해 어떻게 정해지는지를 지정합니다. | ||
msrow는 mstack의 한 행을 나타냅니다.
대부분의 경우 맥락상 암묵적이지만, 연산자 "+" 또는 "-"를 숫자 옆에 배치할 때처럼 한 행에 여러 요소를 넣기 위해 명시적으로 유용합니다.
mn 요소가 msrow의 자식이라면(암묵적이든 아니든), 그 숫자는
자릿수로 분할되고 각 자릿수는 연속된 열에 배치됩니다.
mstyle를 제외한 다른 모든 요소는 사실상 다음 열을 차지하는 단일 자리로 처리됩니다.
mstyle는 그 자식들이 마치 msrow의 직접 자식인 것처럼
처리되지만, 그들의 스타일은 mstyle의 속성에 의해 영향을 받습니다.
빈 요소 <mrow/>는 빈 열을 만들 때 사용할 수 있습니다.
행은 주로 숫자인 것처럼 취급된다는 점에 유의하세요.
숫자는 항상 왼쪽에서 오른쪽으로 표시되므로, 열을 표시하는 데 사용되는 방향성은 항상 왼쪽에서 오른쪽입니다;
토큰 요소들(단, mn 제외) 내의 텍스트 양방향성은 계속 적용되며,
msrow의 자식들(단일 자리로 처리되는)의 내부에서는 전체 방향성도 적용됩니다;
자세한 내용은 3.1.5 방향성을 참조하세요.
msrow 요소는 3.1.9 표현 요소에 공통인 속성에서 지정된 것들 외에 아래에 나열된 속성들을 허용합니다.
| 이름 | 값 | 기본값 |
| position | integer | 0 |
이 그룹 내에서의 행들의 수평 위치를 포함하는 msgroup에 의해 결정된 위치에 대해 상대적으로
지정합니다
(그 msgroup의 position 및
shift 속성에 따름).
결과 위치 값은 포함하는 mstack 또는 mlongdiv의 stackalign으로 지정된
열을 기준으로 합니다.
양수 값은 각 행을 십의 자리 쪽으로 이동시키며(10의 거듭제곱을 곱하는 것과 유사), 오른쪽에 빈 열을 추가하는 효과를 냅니다;
음수 값은 일의 자리 쪽으로 이동하여 왼쪽에 패딩을 추가하는 효과를 냅니다.
소수점은 열로 계산되며 음수 값에 대해 고려되어야 합니다.
|
||
mscarries 요소는 초등 수학에서 발생하는 올림, 받아내림, 취소선 등 다양한 주석에 사용됩니다.
그 자식들은 mstack의 다음 행의 요소들과 연관됩니다.
mscarries가 mstack 또는 mlongdiv의 마지막 요소인 것은 오류입니다.
mscarries의 각 자식은 다음 행의 동일한 열에 적용됩니다.
이러한 주석들은 숫자로 취급되는 항목들을 장식하기 위해 사용되므로, 올림의 첨부는 왼쪽에서 오른쪽으로 진행됩니다;
전체 방향성은 올림의 순서에 적용되지 않지만, 각 올림의 내용에는 적용될 수 있습니다;
자세한 내용은 3.1.5 방향성을 참조하세요.
mscarries의 각 자식 중 mscarry 또는 <mrow/>가 아닌 것은 암묵적으로 mscarry로 둘러싸여 있는 것처럼 처리됩니다;
빈 요소로는 특정 열에 대한 올림이 필요 없음을 나타내기 위해 <mrow/>를 사용합니다.
이전 MathML 릴리스에서는 <none/>가 사용되었으나 이는 빈 <mrow/>와 동등했습니다.
mscarries 요소는 displaystyle를 false로 설정하고,
scriptlevel을 1 증가시켜 자식들이 일반적으로 더 작은 글꼴로 표시되게 합니다. (자세한 내용은 3.1.6 Displaystyle 및
Scriptlevel 참조.)
또한 scriptsizemultiplier의 기본값을 변경합니다.
그 효과는 scriptsizemultiplier의 상속된 값이 기본값을 여전히 재정의해야 하지만,
mscarries 내부의 기본값은 0.6가 되어야 한다는
것입니다.
scriptsizemultiplier는 mscarries 요소에서
설정될 수 있으며,
그 값은 평소처럼 상속된 값을 재정의해야 합니다.
두 행의 올림이 서로 인접해 있을 경우,
첫 번째 올림 행은 두 번째(다음) 행을 마치 두 번째 행이 location=n을 가진 것처럼 주석합니다.
이는 두 번째 행이 실질적으로 표시될 때(이 명세에서 정의되지 않은) 일정량의 공간을 시각적으로 사용함을 의미합니다.
mscarries 요소는 3.1.9 표현 요소에 공통인 속성에서 지정된 것들 외에 아래에 나열된 속성들을 허용합니다.
| 이름 | 값 | 기본값 |
| position | integer | 0 |
이 그룹 내에서의 행들의 수평 위치를 포함하는 msgroup에 의해 결정된 위치에 대해 상대적으로
지정합니다
(그 msgroup의 position 및
shift 속성에 따름).
결과 위치 값은 포함하는 mstack 또는 mlongdiv의 stackalign으로 지정된
열을 기준으로 합니다.
이 값의 해석은 msgroup 또는 msrow의
position과 동일하지만,
이는 각 올림이 아래의 열과 어떻게 연관되는지를 변경합니다.
예를 들어 position=1이면 가장 오른쪽 올림이 오른쪽에서 두 번째 자리 열과 연관됩니다.
|
||
| location | "w" | "nw" | "n" | "ne" | "e" | "se" | "s" | "sw" | n |
|
해당 열에 있는 아래 문자에 대해 올림 또는 받아내림의 위치를 지정합니다.
값에는 나침반 방향을 사용하며; 기본값은 올림을 문자 위에 배치하는 것입니다.
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
| crossout | ("none" | "updiagonalstrike" | "downdiagonalstrike" | "verticalstrike" | "horizontalstrike")* | none |
각 올림 아래의 해당 열 내용이 어떻게 "취소선" 처리될지를 지정합니다;
하나 이상의 값을 줄 수 있으며 모든 값이 그려집니다.
만약 none이 다른 값들과 함께 주어지면 무시됩니다.
다양한 값들의 예는 3.6.8
초등 수학 예제를 참조하세요.
취소선은 해당 열에 대응하는 mscarry가 있는 경우에만 적용됩니다.
취소선은 mathcolor로 지정된 색으로 그려져야 합니다.
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
| scriptsizemultiplier | number | 상속됨 (0.6) |
글꼴 크기를 변경할 배율을 지정합니다.
이 값이 scriptsize 속성과 어떻게 작동하는지에 대한 설명은 3.1.6
Displaystyle 및 Scriptlevel을 참조하세요.
|
||
mscarry는 mscarries 내부에서 개별 열의 올림을 표현하는
데 사용됩니다.
올림은 너비가 0인 것처럼 처리되며; 해당 열의 너비 계산에 참여하지 않으므로 열 경계를 넘어 확장될 수 있습니다.
일반적으로 암묵적이지만, 이 요소는 포함하는 mscarries의 location 및/또는 crossout 속성을 재정의하기 위해
명시적으로 사용될 수 있습니다.
또한 내용으로 빈 요소(<mrow/>)를 사용하여 실제 올림을 표시하지 않으면서도 둘러싸는
mscarries에 의해 해당 열에 대해 crossout을 그리게
할 때 유용할 수 있습니다.
mscarry 요소는 3.1.9 표현 요소에 공통인 속성에서 지정된 것들 외에 아래에 나열된 속성들을 허용합니다.
| 이름 | 값 | 기본값 |
| location | "w" | "nw" | "n" | "ne" | "e" | "se" | "s" | "sw" | 상속됨 |
|
해당 열의 아래에 있는 문자에 대해 올림 또는 받아내림의 위치를 지정합니다.
값에는 나침반 방향을 사용합니다.
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
| crossout | ("none" | "updiagonalstrike" | "downdiagonalstrike" | "verticalstrike" | "horizontalstrike")* | 상속됨 |
해당 올림과 연관된 열 내용이 어떻게 "취소선" 처리될지를 지정합니다;
하나 이상의 값을 줄 수 있으며 모든 값이 그려집니다.
만약 none이 다른 값들과 함께 주어지면 사실상 무시됩니다.
취소선은 mathcolor로 지정된 색으로 그려져야 합니다.
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
msline은 mstack 요소 내부에 수평선을 그립니다.
선의 위치, 길이 및 두께는 속성으로 지정됩니다.
길이가 지정되면, 선은 주어진 자리 수(숫자 자리 수)를 가진 숫자처럼 위치하고 그려집니다.
msline 요소는 3.1.9 표현 요소에 공통인 속성에서 지정된 것들 외에 아래에 나열된 속성들을 허용합니다.
선은 mathcolor로 지정된 색으로 그려져야 합니다.
| 이름 | 값 | 기본값 |
| position | integer | 0 |
이 그룹 내에서의 행들의 수평 위치를 포함하는 msgroup에 의해 결정된 위치에 대해 상대적으로
지정합니다
(그 msgroup의 position 및
shift 속성에 따름).
결과 위치 값은 포함하는 mstack 또는 mlongdiv의 stackalign으로 지정된
열을 기준으로 합니다.
양수 값은 십의 자리 쪽으로 이동(10의 거듭제곱을 곱하는 것과 유사)하고,
음수 값은 일의 자리 쪽으로 이동합니다.
소수점은 열로 계산되며 음수 값에 대해 고려되어야 합니다.
기본 선 길이는 전체 mstack을 가로지르므로,
length가 0이 아닌 값으로 지정되지 않으면 position은 효과가 없습니다.
|
||
| length | unsigned-integer | 0 |
선이 걸쳐야 할 열의 수를 지정합니다.
'0' 값(기본값)은 행의 모든 열을 가로지름을 의미하며(이 경우 position 및 stackalign은
효과가 없습니다).
|
||
| leftoverhang | length | 0 |
| 선이 걸치는 가장 왼쪽 열의 왼쪽에 추가로 얼마만큼 돌출(overhang)할지를 지정합니다. | ||
| rightoverhang | length | 0 |
| 선이 걸치는 가장 오른쪽 열의 오른쪽에 추가로 얼마만큼 돌출할지를 지정합니다. | ||
| mslinethickness | length | "thin" | "medium" | "thick" | medium |
선의 두께를 지정합니다.
선은 높이(height)=0, 깊이(depth)=mslinethickness를 가져야 하며, 이로써 msline의 상단이 주변 문맥(있다면)의 기준선에 위치하게 됩니다.
(두께 키워드 medium, thin 및 thick에
대한 논의는 3.3.2 분수
<mfrac>를 참조하세요.)
비교는 ASCII 대소문자 구분 없음이며, 일치하는 모든 문자열이 값으로 허용됩니다. |
||
2차원 덧셈, 뺄셈, 곱셈은 일반적으로 숫자, 올림/받음, 선, 그리고 연산 기호를 포함합니다.
아래는 이 절의 시작 부분에 제시된 예입니다:
mn 요소 내부의 각 숫자는 각각 하나의 열을 차지하며 "+"도 열을 차지합니다.
<mrow/>는 "4" 아래의 열을 채우고 "+"가 모든 피연산자 왼쪽에 나타나도록
하는 데 사용됩니다.
msline에 속성이 주어지지 않아 그 선이 모든 열을 가로지르도록 한 점에 주의하세요.
<mstack>
<mn>424</mn>
<msrow> <mo>+</mo> <mrow/> <mn>33</mn> </msrow>
<msline/>
</mstack>
다음 예는 연산자를 오른쪽에 배치하는 방법을 보여줍니다. 연산자를 오른쪽에 두는 표기는 네덜란드 및 일부 다른 국가에서 표준입니다. 이 예에서는 총 네 개의 열이 있지만, 기본 정렬이 숫자 오른쪽의 암묵적 소수점에 맞춰져 있으므로 어떤 행도 패딩하거나 이동할 필요가 없습니다.
<mstack>
<mn>123</mn>
<msrow> <mn>456</mn> <mo>+</mo> </msrow>
<msline/>
<mn>579</mn>
</mstack>
다음 두 예는 mscarries, mscarry 및 열을 채우기
위해 <mrow/>를 사용하는 방법을 보여줍니다.
또한 두 가지 다른 받아내림 표시 방법을 보여줍니다.
<mstack>
<mscarries crossout='updiagonalstrike'>
<mn>2</mn> <mn>12</mn> <mscarry crossout='none'> <mrow/> </mscarry>
</mscarries>
<mn>2,327</mn>
<msrow> <mo>-</mo> <mn> 1,156</mn> </msrow>
<msline/>
<mn>1,171</mn>
</mstack>
<mstack>
<mscarries location='nw'>
<mrow/>
<mscarry crossout='updiagonalstrike' location='n'> <mn>2</mn> </mscarry>
<mn>1</mn>
<mrow/>
</mscarries>
<mn>2,327</mn>
<msrow> <mo>-</mo> <mn> 1,156</mn> </msrow>
<msline/>
<mn>1,171</mn>
</mstack>
두 번째 예의 MathML은 취소선이 단일 열에만 적용되어야 하기 때문에 mscarry를 사용합니다:
다음 뺄셈 예시는 밑줄 친 받아내림을 보여줍니다(예제 출처: 스웨덴 자료).
주목할 점은 두 가지입니다:
올림 안에 menclose가 사용되었고, 빈 요소로 <mrow/>가 사용되어 mscarry가 취소선을 생성할 수 있도록 했습니다.
<mstack>
<mscarries>
<mscarry crossout='updiagonalstrike'><mrow/></mscarry>
<menclose notation='bottom'> <mn>10</mn> </menclose>
</mscarries>
<mn>52</mn>
<msrow> <mo>-</mo> <mn> 7</mn> </msrow>
<msline/>
<mn>45</mn>
</mstack>
아래는 msgroup와 shift 속성의 사용을 보여주는
간단한 곱셈 예입니다.
첫 번째 msgroup는 암묵적이며 레이아웃을 변경하지 않습니다.
두 번째 msgroup는 제거할 수도 있지만 마지막 두 자식에 대해 msrow가 필요합니다.
그 msrow들은 position 또는 shift 속성을 설정하거나,
오른쪽 자릿수를 채우기 위해 <mrow/> 요소를 추가해야 합니다.
<mstack>
<msgroup>
<mn>123</mn>
<msrow><mo>×</mo><mn>321</mn></msrow>
</msgroup>
<msline/>
<msgroup shift="1">
<mn>123</mn>
<mn>246</mn>
<mn>369</mn>
</msgroup>
<msline/>
</mstack>
다음은 여러 행의 올림이 있는 보다 복잡한 곱셈 예입니다. 또한 (약간 인위적으로) 쉼표(",")를 자릿수 구분자로 포함합니다. 인코딩은 이러한 구분자를 공백 속성 값에 포함시키며, 비-ASCII 값들과 함께 사용합니다.
<mstack>
<mscarries><mn>1</mn><mn>1</mn><mrow/></mscarries>
<mscarries><mn>1</mn><mn>1</mn><mrow/></mscarries>
<mn>1,234</mn>
<msrow><mo>×</mo><mn>4,321</mn></msrow>
<msline/>
<mscarries position='2'>
<mn>1</mn>
<mrow/>
<mn>1</mn>
<mn>1</mn>
<mn>1</mn>
<mrow/>
<mn>1</mn>
</mscarries>
<msgroup shift="1">
<mn>1,234</mn>
<mn>24,68</mn>
<mn>369,2</mn>
<msrow position="1"> <mn>4,936</mn> </msrow>
</msgroup>
<msline/>
<mn>5,332,114</mn>
</mstack>
긴 나눗셈에 사용되는 표기법은 국가별로 크게 다릅니다. 대부분의 표기법은 중간 결과를 정렬하고 피연산자를 빼기 위해 선을 그리는 공통 특성을 가집니다. 중간 계산에 마이너스 기호를 표시하는 경우도 있고 그렇지 않은 경우도 있습니다. 그려지는 선의 길이는 표기법에 따라 달라집니다. 표기법 간의 가장 뚜렷한 차이는 나누는 수의 위치와 몫, 나머지 및 중간 항들의 위치가 다르다는 점입니다.
사용되는 레이아웃은 longdivstyle 속성으로 제어됩니다.
아래는 3.6.2.2 속성에
나열된 값들에 대한 예입니다.
lefttop |
stackedrightright |
mediumstackedrightright |
shortstackedrightright |
righttop |
|
|
|
|
|
|
left/\right |
left)(right |
:right=right |
stackedleftleft |
stackedleftlinetop |
|
|
|
|
|
|
첫 번째 예의 MathML이 아래에 표시되어 있습니다. 이 예는 중첩된 msgroup의 사용과 그 사용에서
position이 어떻게 계산되는지를 보여줍니다.
<mlongdiv longdivstyle="lefttop">
<mn> 3 </mn>
<mn> 435.3</mn>
<mn> 1306</mn>
<msgroup position="2" shift="-1">
<msgroup>
<mn> 12</mn>
<msline length="2"/>
</msgroup>
<msgroup>
<mn> 10</mn>
<mn> 9</mn>
<msline length="2"/>
</msgroup>
<msgroup>
<mn> 16</mn>
<mn> 15</mn>
<msline length="2"/>
<mn> 1.0</mn> <!-- aligns on '.', not the right edge ('0') -->
</msgroup>
<msgroup position='-1'> <!-- extra shift to move to the right of the "." -->
<mn> 9</mn>
<msline length="3"/>
<mn> 1</mn>
</msgroup>
</msgroup>
</mlongdiv>
마지막 예를 제외하고, 다른 예제들의 인코딩은 longdivstyle 값이 다르고 소수점으로 "." 대신
","를 사용하는 것 외에는 동일합니다.
마지막 예에서는 다른 예들과의 유일한 차이점은 longdivstyle의 다른 값뿐만 아니라 라틴 숫자 대신
아라비아 숫자가 사용되었다는 점입니다.
<mstyle decimalpoint="٫">
<mlongdiv longdivstyle="stackedleftlinetop">
<mn> ٣ </mn>
<mn> ٤٣٥٫٣</mn>
<mn> ١٣٠٦</mn>
<msgroup position="2" shift="-1">
<msgroup>
<mn> ١٢</mn>
<msline length="2"/>
</msgroup>
<msgroup>
<mn> ١٠</mn>
<mn> ٩</mn>
<msline length="2"/>
</msgroup>
<msgroup>
<mn> ١٦</mn>
<mn> ١٥</mn>
<msline length="2"/>
<mn> ١٫٠</mn>
</msgroup>
<msgroup position='-1'>
<mn> ٩</mn>
<msline length="3"/>
<mn> ١</mn>
</msgroup>
</msgroup>
</mlongdiv>
</mstyle>
1/3(.3333...)처럼 무한히 반복되는 자리들을 가진 소수는 여러 표기법으로 표현됩니다. 한 가지 일반적인 표기법은 반복되는 숫자들 위에 수평선을 긋는
것이고(포르투갈에서는 밑줄을 사용),
다른 표기법은 반복되는 숫자들 위에 점을 찍는 것입니다.
이러한 MathML 표현은 mstack, msrow, 및
msline을 직관적으로 사용하여 나타낼 수 있습니다.
아래에 몇 가지 표기법을 보여줍니다:
<mstack stackalign="right">
<msline length="1"/>
<mn> 0.3333 </mn>
</mstack>
<mstack stackalign="right">
<msline length="6"/>
<mn> 0.142857 </mn>
</mstack>
<mstack stackalign="right">
<mn> 0.142857 </mn>
<msline length="6"/>
</mstack>
<mstack stackalign="right">
<msrow> <mo>.</mo> <mrow/><mrow/><mrow/><mrow/> <mo>.</mo> </msrow>
<mn> 0.142857 </mn>
</mstack>
maction 요소는 표현식에 동작을 바인딩하는 메커니즘을 제공합니다.
이 요소는 임의의 수의 하위 표현식을 인수로 허용하며 어떤 종류의 동작이 일어날지는 actiontype 속성으로 제어됩니다.
MathML 3는 네 가지 동작을 미리 정의했습니다:
toggle,
statusline,
statusline, 및
input.
그러나 어떤 동작을 구현할 수 있는 능력은 플랫폼에 강하게 의존하기 때문에
MathML 4에서는 이러한 동작들이 실제로 무엇을 하는지 더 이상 미리 정의하지 않습니다.
또한 웹 환경에서는 자바스크립트에 연결된 이벤트로 동작을 수행하는 것이 더 강력한 해결책이지만,
maction은 그러한 이벤트를 연결하기 위한 편리한 래퍼 요소를 제공합니다.
로컬하게 math 요소 내의 다른 요소로 연결하거나 어떤 URL로 연결하는 작업은 maction에서 처리되지 않습니다.
대신, 이는 7.4.4 링크에 명시된 대로 MathML
요소에 직접 링크를 추가함으로써 처리됩니다.
maction 요소는 3.1.9 표현 요소에 공통인 속성에서 지정된 것들 이외에 아래에 나열된 속성들을 허용합니다.
기본적으로, 지정된 actiontype을 인식하지 못하는 MathML 애플리케이션이나 actiontype 속성이 존재하지 않는 경우에는 아래에 정의된 대로 선택된 하위 표현식을 렌더링해야 합니다. 선택된
하위 표현식이 존재하지 않으면 이는 MathML 오류이며; 그 경우의 적절한 렌더링은 D.2 오류 처리에 설명된 대로입니다.
| Name | values | default |
| actiontype | string | |
| 이 요소에 대해 어떤 일이 일어나야 하는지를 지정합니다. 허용되는 값은 개방적입니다. 규정 준수하는 렌더러는 처리하지 못하는 값을 무시할 수 있습니다. | ||
| selection | positive-integer | 1 |
어떤 자식이 보기용으로 사용되어야 하는지를 지정합니다. 그 값은 1부터 요소의 자식 수 사이여야 합니다.
지정된 자식은 maction 요소의 "선택된 하위 표현식"이라고 합니다.
지정된 값이 범위를 벗어나면 이는 오류입니다. selection 속성이 지정되지 않은
경우(의미가 없는 동작 유형의 경우도 포함), 기본값은 1이며 선택된 하위 표현식은 첫 번째 하위 표현식이 됩니다.
|
||
MathML 애플리케이션이 MathML 하위 표현식을 환경의 "클립보드"로 복사하라는 사용자 명령에 응답할 경우(참조: 7.3 MathML 전송),
복사되는 내용에 포함된 모든 maction 요소들은 복사 명령 시점의 MathML 렌더링에서의 선택 상태에 해당하는
selection 값을 가져야 합니다.
MathML 애플리케이션이 두 개 이상의 중첩된 maction 요소들에 의해 처리될 수 있는 마우스 이벤트를 수신하는 경우, 각 동작 유형에 대해 가장 안쪽의 maction 요소가 해당 이벤트에 응답해야 합니다.
actiontype 값들은 개방형입니다. 다른 값이 주어지고 그 값이 추가 속성을 필요로 하는 경우, 그 속성들은
"data-"로 시작해야 하며 XML인 경우에는 다른 네임스페이스에 있을 수 있습니다.
예에서,
비표준 데이터 속성들이 이를 지원하는 렌더러에 추가 정보를 전달하는 데 사용되고 있습니다.
data-color 속성은 표현의 문자 색을 변경할 수 있고,
data-background 속성은 문자 뒤 배경의 색을 변경할 수 있습니다.
MathML은 semantics 요소를 사용하여 표현용 MathML 요소에 의미 주석을 지정할 수 있게 합니다; 이 주석들은
content MathML이거나 다른 표기법일 수 있습니다. 따라서 semantics는 표현용 MathML과 의미용 MathML 둘
다의 일부로 고려되어야 합니다. 모든 MathML 프로세서는 비록 그들이 그 하위 집합 중 하나만 처리하더라도 semantics 요소를
처리해야 합니다.
의미 주석에서는 표현용 MathML 식이 일반적으로 semantics 요소의 첫 번째 자식으로 옵니다. 그러나 그것은 또한 semantics 요소 내부의 annotation-xml 요소 안에 주어질 수도
있습니다. 만약 그것이 annotation-xml 요소의 일부라면, encoding=application/mathml-presentation+xml 또는
encoding=MathML-Presentation
를 사용할 수 있으며 표현용 MathML 프로세서는 이 값을 표현용으로 사용해야 합니다.
더 많은 세부 사항은 6. MathML 주석: semantics를
참조하세요. 이 문서는 semantics 및 annotation-xml 요소에 대한
더 많은 정보를 제공합니다.
콘텐츠 마크업의 목적은 표현식의 특정 표기법이 아니라 그 표현식의 기저에 있는 수학적 의미을 명시적으로 인코딩하는 것입니다. 수학 표기법은 때때로 모호하거나 문맥에 의존적이며 공동체마다 다를 수 있습니다. 많은 경우 기저의 형식적 수학 객체를 직접 다루는 것이 바람직합니다. 콘텐츠 마크업은 이러한 목적을 위해 엄밀하고 확장 가능한 의미론적 프레임워크와 마크업 언어를 제공합니다.
표현 방식에 관계없이 기저의 수학적 구조를 명시적으로 인코딩함으로써 수학적 객체를 의미론적으로 처리하는 시스템들 사이에서 정보를 더 정확하게 교환할 수 있습니다. 중요한 적용 분야로는 컴퓨터 대수 시스템, 자동 추론 시스템, 산업 및 과학 응용, 다국어 번역 시스템, 수학 검색, 온라인 평가의 자동 채점, 그리고 대화형 교과서 등이 있습니다.
이 장에서는 콘텐츠 마크업을 정의하는 데 사용되는 기본 개념의 개요를 제시하고, 엄격한 콘텐츠 마크업을 구성하는 핵심 요소 집합을 설명하며, 일반적인 수학 관용구를 지원하기 위한 전체 요소 집합을 정의합니다. 엄격한 콘텐츠 마크업은 표현식을 의미론적으로 엄밀한 방식으로 인코딩하는 반면, 전체 콘텐츠 MathML 요소 집합은 이전 버전의 콘텐츠 마크업과의 하위 호환성을 제공합니다. 전체 콘텐츠 마크업과 엄격한 콘텐츠 마크업 간의 대응은 임의의 콘텐츠 마크업을 엄격한 콘텐츠 마크업으로 변환하는 알고리즘을 자세히 설명하는 F. The Strict Content MathML Transformation에 정의되어 있습니다.
콘텐츠 MathML은 수학적 객체들을 표현식 트리로 나타냅니다. 일반적으로 표현식 트리는 연산자를 일련의 하위 표현식에 적용하여 구성됩니다. 예를 들어 합 x+y
는 덧셈 연산자를 두 인수 x와 y에 적용하여 구성할 수 있으며, 표현식 cos(π)
는 코사인 함수를 숫자 π에 적용한 것으로 구성됩니다.
표현식 트리의 말단 노드는 숫자, 변수, 산술 연산 등과 같은 기본 수학 객체를 나타냅니다. 트리의 내부 노드는 함수 적용이나 복합 객체를 구성하는 다른 수학적 구성들을 나타냅니다.
MathML은 광범위한 응용에 충분하도록 선택된 상대적으로 적은 수의 일반적인 수학 구성들을 정의합니다. 또한 정의된 집합 밖의 개념을 참조할 수 있는 메커니즘을 제공하여 외부 개념도 표현할 수 있게 합니다.
정의된 콘텐츠 요소 집합은 미국의 유치원부터 대학 초년(유럽의 A-레벨 또는 바칼로레아 수준까지)에서 일반적으로 사용되는 공식을 단순하게 코딩하기에 적절하도록 설계되었습니다.
콘텐츠 MathML 요소 집합의 주요 역할은 표현에 사용된 표기법과 무관하게 표현식의 수학적 구조를 인코딩하는 것입니다. 그러나 렌더링 문제를 무시할 수는 없습니다. 콘텐츠 MathML 수식을 렌더링하는 방법에는 MathML 요소의 네이티브 구현부터 선언적 표기 정의, XSLT 스타일시트에 이르기까지 다양한 접근 방식이 있습니다. 콘텐츠 MathML에 대한 렌더링 요구사항은 매우 다양하기 때문에 MathML은 규범적인 렌더링 명세를 제공하지 않습니다. 대신, 제시 마크업을 사용한 예시를 통해 전형적인 렌더링을 제안합니다.
콘텐츠 MathML 표현식의 기본 구성 요소는 숫자, 식별자, 및 기호입니다. 이러한 구성 요소들은 함수 적용과 바인딩 연산자를 사용하여 결합됩니다.
표현식
에서,
숫자
는 고정된 값을 가지는 숫자를 나타냅니다. 콘텐츠 MathML은 수량을 나타내기 위해 cn 요소를 사용합니다. 식별자 는 미리 정해진 값이 없는, 즉 값이 미정인 수량을 나타내는 수학적 변수입니다. 콘텐츠 MathML은 변수 식별자를 나타내기 위해 ci 요소를
사용합니다.
플러스 기호는 덧셈 함수를 나타내는 고정된 외부 정의 객체인 식별자입니다. 이러한 식별자는 변수와 구별하기 위해 기호라고 불립니다. 일반적인 초등 함수와 연산자들은
이 의미에서 모두 기호입니다. 콘텐츠 MathML은 기호를 나타내기 위해 csymbol 요소를 사용합니다.
숫자, 변수, 그리고 기호를 결합하는 기본적인 방법은 함수 적용입니다. 콘텐츠 MathML은 함수 자체(예: 사인 함수 같은 기호, f 같은 변수,
또는 다른 표현식)와 그 함수를 인수에 적용한 결과를 구분합니다. apply 요소는 함수와 그 인수들을 문법적으로 그룹화하고,
함수에 인수를 적용한 결과 표현식을 나타냅니다.
표현식에서 변수는 바운드(bound) 변수 또는 프리(free) 변수로 설명될 수 있습니다. 바운드 변수는 바인딩 표현식의 범위 내에서 특별한 역할을
가지며, 그 범위 내에서는 의미를 변경하지 않고 일관되게 이름을 바꿀 수 있습니다. 프리 변수는 표현식 내에서 바운드되지 않은 변수들입니다. 콘텐츠 MathML은 자유 변수에 대한
함수 적용(e.g. f(x))과 변수 바인딩을 수행하는 연산을 구분합니다. bind 요소는 바운드 변수의
바인딩 범위를 구분하고 바인딩 연산자를 바운드 변수들과 함께 그룹화하는 데 사용되며, 바운드 변수들은 bvar 요소를 사용하여 제공됩니다.
엄격한 콘텐츠 마크업에서는 변수 바인딩을 수행하는 유일한 방법은 bind 요소를 사용하는 것입니다. 비엄격 콘텐츠 마크업에서는
합(sum)과 적분(integral) 같은 잘 알려진 관용 표기와 더 유사한 다른 마크업 요소들이 제공됩니다. 이러한 구성들은 적분 변수나 합의 인덱스 변수처럼 변수를 암묵적으로
바인딩할 수 있습니다. MathML은 이러한 구성에 필요한 보조 데이터를 표현하는 데 사용되는 요소들을 가리켜 수식 요소(qualifier element)라고
합니다.
수식 요소를 포함하는 표현식들은 몇 가지 관용적 패턴 중 하나를 따릅니다. 예를 들어 합과 곱은 동일한 패턴을 따르는 인덱스 변수를 사용하기 때문에 같은 클래스에 속합니다. 콘텐츠 MathML의 연산자 클래스는 4.3.4 연산자 클래스에 자세히 설명되어 있습니다.
MathML 3부터 엄격한 콘텐츠 MathML은 표현식의 의미를 균일한 구조로 표현하는 데 충분한 콘텐츠 MathML의 최소 부분집합으로 정의됩니다. 전체 콘텐츠 MathML 요소 집합은 MathML 2와의 하위 호환성을 유지하면서 장황함과 형식성 사이에서 실용적인 균형을 이룹니다.
콘텐츠 MathML은 비어 있는 요소로 인코딩된 상당수의 미리 정의된 함수들(e.g. sin, log 등)과 복합 객체를 형성하기 위한 다양한 구성들(e.g. set,
interval 등)을 제공합니다. 이에 비해 엄격한 콘텐츠 MathML은 모든 알려진 함수를 정의로 포인팅하는 속성을 가진
단일 요소(csymbol)를 사용하여 표현하고, 복합 표현식을 구성하기 위해 오직 apply와 bind 요소만을 사용합니다. 토큰 요소인 cn 및 ci는 엄격한 콘텐츠 MathML의 일부로 간주되지만 속성은 더
제한되고 콘텐츠는 텍스트로 제한됩니다.
콘텐츠 MathML 표현식의 형식적 의미론은 동등한 엄격한 콘텐츠 MathML 표현식을 명시함으로써 제공되며, 이들 모두는 콘텐츠 사전(content dictionaries)에 의해 정의된 형식적 의미론을 가집니다. 각 비엄격 콘텐츠 MathML 구조와 그 엄격한 콘텐츠 MathML 등가물 간의 정확한 대응은 F. The Strict Content MathML Transformation에 제공된 변환 알고리즘의 일부로 사용되는 재작성 규칙들로 기술됩니다.
F. The Strict Content MathML Transformation에 설명된 알고리즘은 모든 콘텐츠 MathML 표현식에 엄격한 콘텐츠 MathML 표현식의 구체적 의미를 부여한다는 점에서 완전합니다. 어떤 경우에는 MathML 2에서 의미가 충분히 지정되지 않았던 표현식에 대해 구체적인 엄격 해석을 제공합니다. 이 알고리즘의 목표는 자연스러운 수학적 직관에 충실한 것이지만, 특정 경계 사례에서는 알고리즘이 제공하는 특정 해석이 이전의 기대와 일치하지 않을 수 있습니다.
준수하는 MathML 프로세서는 이 알고리즘을 구현할 필요가 없습니다. 이러한 변환 규칙의 존재는 시스템이 동등한 표현식을 동일하게 처리해야 함을 의미하지 않습니다. 특히, 변환 규칙이 수학적으로 동등하다고 시사하는 표현식들에 대해 시스템들이 다른 표현 양식을 제공할 수 있습니다. 일반적으로 콘텐츠 MathML은 그것이 인코딩하는 표현식들의 계산적 동작에 대한 기대를 정의하지 않으며, 이는 특정 표현식의 동등성을 포함하되 이에 국한되지 않습니다.
엄격한 콘텐츠 MathML은 형식적 수학 객체 및 의미를 나타내기 위한 표준인 OpenMath와 호환되도록 설계되었습니다. 엄격한 콘텐츠 MathML은 [OpenMath]의 OpenMath Objects의 XML 인코딩으로 볼 수 있습니다. 다음 표는 엄격한 콘텐츠 MathML 요소와 OpenMath의 대응을 제공합니다.
| 엄격한 콘텐츠 MathML | OpenMath |
cn |
OMI, OMF |
csymbol |
OMS |
ci |
OMV |
cs |
OMSTR |
apply |
OMA |
bind |
OMBIND |
bvar |
OMBVAR |
share |
OMR |
semantics
|
OMATTR |
annotation,
annotation-xml
|
OMATP, OMFOREIGN |
cerror |
OME |
cbytes |
OMB |
수학적 표현식의 의미를 형식화하는 어떤 방법이든 확장 가능해야 합니다. 즉, 논의 영역을 확장하기 위해 새로운 함수와 기호를 정의할 수 있어야 합니다. 콘텐츠 MathML은 새로운
기호를 나타내기 위해 csymbol 요소를 사용하고, 그 수학적 의미를 설명하기 위해 콘텐츠 사전(Content
Dictionaries)을 사용합니다. 기호와 그 의미 설명 간의 연결은 csymbol 요소의 속성을 사용하여
해당 기호의 정의를 콘텐츠 사전에서 가리키는 방식으로 이루어집니다.
콘텐츠 MathML의 연산자 요소와 콘텐츠 사전의 기호 정의 간의 대응은 E.3 The Content MathML Operators에 제시되어 있습니다. 이들 미리 정의된 MathML 연산자 기호에 대한 정의는 OpenMath Society가 W3C 수학 워킹 그룹과 공동으로 개발한 콘텐츠 사전을 참조합니다. 이 정보는 권고가 아닌 참고용임을 주의해야 합니다. 일반적으로, 미리 정의된 기호의 정확한 수학적 의미는 MathML 권고안에 의해 완전히 규정되지 않으며, 기호 의미에 대한 규범적인 진술은 이 장 본문에 있는 내용들뿐입니다. OpenMath 콘텐츠 사전이 제공하는 의미 정의는 대부분의 응용에 충분하도록 의도되었고, 이 권고안에서 유사한 구성에 대해 명시된 의미들과 일반적으로 호환됩니다. 그러나 컴퓨터 대수 시스템 간의 통신이나 정리 증명기 같은 형식 시스템 내에서와 같이 매우 정밀한 의미론이 요구되는 문맥에서는 관련 관행 공동체가 OpenMath 콘텐츠 사전이 제공하는 정의를 적절히 검증, 확장 또는 대체할 책임이 있습니다.
이 절에서는 콘텐츠 MathML 표현식의 구조를 인코딩하기 위한 요소들을 제시한다. 이 요소들은 Strict Content MathML 인코딩에만 사용되는 요소들이다. 구체적으로, 우리는 다음을 가진다:
전체 Content MathML은 4.3 특정 구조를 위한 Content MathML에 제시된 추가 요소들을 허용하며, 이 절에서 제시되는 것보다 더 풍부한 콘텐츠 모델을 허용한다. Strict와 비-Strict 사용의 차이는 아래에서 각 Strict 요소를 논의할 때 강조된다.
| 스키마 단편 (엄격) | 스키마 단편 (전체) | |||
|---|---|---|---|---|
| 클래스 | Cn | Cn | ||
| 속성 | CommonAtt, type |
CommonAtt, DefEncAtt, type?, base? |
||
type 속성 값 |
integer |
real |
double |
hexdouble
|
integer |
real |
double |
hexdouble |
e-notation |
rational |
complex-cartesian |
complex-polar |
constant | text
|
기본값은 real | |
base 속성 값 |
integer
|
기본값은 10 | ||
| 내용 | 텍스트 | (text | mglyph | sep | PresentationExpression)* |
||
cn 요소는 숫자를 나타내기 위해 사용되는 Content MathML 요소이다. Strict Content MathML은 정수,
실수, 그리고 배정밀도 부동소수점 수를 지원한다. 이러한 유형의 숫자들에서 cn의 내용은 텍스트이다. 추가로, cn는 sep 요소를 사용하여 분리된 부분을 가진 유리수 및 복소수도 지원한다.
sep를 사용하는 구성은 아래에서 설명하는 대로 Strict Content MathML에서 apply를 사용하는 구성으로 다시 쓸 수 있다.
type 속성은 cn 요소가 어떤 종류의 숫자를 나타내는지를 지정한다.
기본값은 real이다. 각 타입은 내용이 특정 형태여야 함을 의미하며, 자세한 내용은 아래에 기술되어 있다.
cn의 텍스트 내용의 기본 렌더링은 Presentation 요소 mn의
렌더링과 동일하며, 속성이나 sep가 사용되는 경우에는 아래에 나열된 권장 변형이 적용된다.
엄격한 Content MathML에서 type 속성은 필수이며, 다음 값들만 가질 수 있다:
integer, real, hexdouble 또는
double:
정수는 선택적 부호 다음에 하나 이상의 십진 숫자
문자열로 표현된다.
실수는 기수 표기법으로 제시된다. 기수 표기법은 선택적 부호(+
또는 -
) 다음에 소수점을 통해 정수 부분과 소수 부분으로 구분될 수
있는 숫자 문자열로 구성된다. 예로 0.3, 1, -31.56 등이 있다.
이 타입은 IEEE 754 표준 형식으로 표현 가능한 배정밀도 부동소수점 숫자들을 표기하는 데 사용된다 [IEEE754].
여기에는 수학적 실수의 부분집합, 음의 0, 양·음의 실수 무한대 및 일부 NaN 값들이 포함된다. cn의
텍스트 내용을 IEEE double로 해석하기 위한 렉시컬 규칙은 XML Schema Part 2: Datatypes Second Edition의 섹션 3.1.2.5에 의해 지정된다 [XMLSchemaDatatypes].
예를 들어 -1E4, 1267.43233E12, 12.78e-2, 12, -0, 0 및 INF는 모두 이 형식에서 유효한 double이다.
이 타입은 IEEE 754 배정밀도 부동소수점 수의 64비트를 16자리 16진수로 직접 표현하는 데 사용된다. 따라서 이 숫자는 최소 유의 바이트 순서로 최하위
비트에서 최상위 비트로 가며 가수, 지수 및 부호를 나타낸다. 이는 0-9, A-F의 16자리 문자열로 구성된다. 다음 예는 NaN 값을 나타낸다. 어떤
IEEE double 값들은 double 타입의 렉시컬 형식으로는 표현할 수 없다는 점에
유의한다.
<cn type="hexdouble">7F800000</cn>
표현 예시
<mn>0x7F800000</mn>
base 속성은 내용이 어떻게 파싱되는지를 지정하는 데 사용된다. 속성 값은 텍스트 내용이 해석될 진수 값을 10진
정수로 제공한다. base 속성은 integer 또는
real 타입의 요소에만 사용되어야 한다. 다른 타입의 cn 요소에서의 사용은 더 이상 권장되지 않는다. base의 기본값은
10이다.
type 속성에 대해 e-표기법, 유리수, 복소수 및 일부 중요한 상수들을 지원하기 위한 추가 값들이 있다. integer, real, double 및 hexdouble 타입과
마찬가지로, 각 타입은 내용이 특정 형태여야 함을 의미한다. 만약 type 속성이 생략되면 기본값은 real이다.
정수는 10이 아닌 다른 진수로도 표현될 수 있다: 만약 base가 존재하면, 그 값(10진수로 표기)이
숫자 인코딩에 사용되는 진수를 지정한다. 따라서 base='16'은 16진수를 지정한다. base > 10인 경우 라틴 문자(A-Z, a-z)가 알파벳 순서로 숫자로 사용된다. 문자의
대소문자는 숫자로 사용할 때 중요하지 않다. 다음 예는 10진수 32736을 인코딩한 것이다.
<cn base="16">7FE0</cn>
표현 예시
<msub><mn>7FE0</mn><mn>16</mn></msub>
만약 base > 36이면, 일부 정수는 문자와 숫자만으로 표현할 수 없다. 예를 들어,
<cn base="1000">10F</cn>
는 10진수로 1,000,015를 나타낼 수 있지만, 1,000,037은 base가 1000일 때
문자와 숫자만으로 표현할 수 없다. 따라서 base > 36인 경우 어떤 추가 문자를 숫자로
사용할 수 있는지는 애플리케이션별로 정해진다.
실수는 10이 아닌 다른 진수에 대해 표현될 수 있다. 만약 base 속성이 존재하면, 숫자들은 해당
진수에 대한 숫자로 해석된다(위의 integer 타입에 대해 설명된 방식과 동일).
이 타입은 실수를 과학적 표기법으로 제시할 수 있게 한다. 이러한 숫자들은 sep 요소로 구분된 두
부분(유효숫자와 지수)을 가진다. 첫 번째 부분은 실수이고, 두 번째 부분은 기수의 거듭제곱을 나타내는 정수 지수이다.
예를 들어, <cn type="e-notation">12.3<sep/>5</cn>는 12.3 × 10^5
를 나타낸다. 이 예의 기본 표현은 12.3e5이다. 이 타입은 주로 MathML 2와의 하위 호환성에 유용하며, 대부분의 경우 표현하려는 수가 IEEE
double의 범위에 있다면 double 타입을 사용하는 것이 더 바람직하다.
유리수는 몫의 분자와 분모로 사용할 두 개의 정수로 주어집니다. 분자와 분모는 <sep/>로 구분됩니다.
<cn type="rational">22<sep/>7</cn>
예시 프리젠테이션
<mrow><mn>22</mn><mo>/</mo><mn>7</mn></mrow>
복소 카르테시안 수는 실수부와 허수부를 지정하는 두 숫자로 주어진다. 실수부와 허수부는 <sep/> 요소로 분리되며, 각
부분은 앞서 설명한 실수의 형식을 따른다.
<cn type="complex-cartesian"> 12.3 <sep/> 5 </cn>
표현 예시
<mrow>
<mn>12.3</mn><mo>+</mo><mn>5</mn><mo>⁢<!--InvisibleTimes--></mo><mi>i</mi>
</mrow>
복소 극좌표 수는 크기와 각도를 지정하는 두 숫자로 주어진다. 크기와 각도는 <sep/> 요소로 분리되며, 각
부분은 앞서 설명한 실수의 형식을 따른다.
<cn type="complex-polar"> 2 <sep/> 3.1415 </cn>
표현 예시
<mrow>
<mn>2</mn>
<mo>⁢<!--InvisibleTimes--></mo>
<msup>
<mi>e</mi>
<mrow><mi>i</mi><mo>⁢<!--InvisibleTimes--></mo><mn>3.1415</mn></mrow>
</msup>
</mrow>
<mrow>
<mi>Polar</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mn>2</mn><mo>,</mo><mn>3.1415</mn><mo>)</mo></mrow>
</mrow>
type 값이 constant이면,
내용은 잘 알려진 상수를 나타내는 유니코드 표현이어야 한다. 몇몇 중요한 상수들과 그 일반적인 유니코드 표현들이 아래에 나열되어 있다.
이 cn 타입은 주로 MathML 1.0과의 하위 호환성을 위한 것이다. MathML 2.0은 <pi/> 같은 많은 빈 요소들을 도입했고, 상수들을 나타낼 때 이러한 표현이나 엄격한
csymbol 표현을 사용하는 것이 선호된다.
타입 속성의 추가 값들 외에도, cn 요소의 내용은 (Strict Content MathML에서 허용되는 sep 요소에 더해) 유니코드에 아직 없는 문자를 참조하기 위해 mglyph 요소를 포함하거나, 렌더링을 위한 일반적인 표현 구성(3.1.8 프레젠테이션 요소 요약)을 포함할 수 있다. 이 경우 렌더링을 위해
사용된다(자세한 내용은 4.1.2 콘텐츠
표현식 참조).
만약 base 속성이 존재하면, 이는 정수의 숫자 인코딩에 사용되는 진수를 지정한다. base와 rational 타입의 결합 사용은 더 이상
권장되지 않는다.
| 스키마 단편 (엄격) | 스키마 단편 (전체) | |
|---|---|---|
| 클래스 | Ci | Ci |
| 속성 | CommonAtt, type? |
CommonAtt, DefEncAtt,
type?
|
type 속성 값 |
integer|
rational|
real|
complex|
complex-polar|
complex-cartesian|
constant|
function|
vector|
list|
set|
matrix
|
문자열 |
| 한정자 |
BvarQ,
DomainQ,
degree,
momentabout,
logbase
|
|
| 내용 | 텍스트 | 텍스트 | mglyph | PresentationExpression |
Content MathML은 변수 구성을 위해 ci 요소(‘content identifier’의 약어)를 사용한다. 콘텐츠
식별자는 고정된 값이 없는 수학적 변수
를 나타낸다. 예를 들어 표현식 x와 y는 변수이며, 변수
x는 다음과 같이 표현된다:
<ci>x</ci>
MathML에서 변수는 고정된 외부 정의를 가진 기호들과 구별되며, 그런 기호들은 csymbol 요소로 표현된다.
공백 정규화 후 ci 요소의 내용은 그것을 식별하는 이름으로 해석된다. 두 변수는 이름이 동일하고 동일한 범위에 있을 때에만
같다고 간주된다(범위에 대한 논의는 4.2.6 바인딩과 바운드
변수 <bind> 및 <bvar> 참조).
ci 요소는 그것이 나타내는 객체의 기본 타입을 지정하기 위해 type 속성을 사용한다. 엄격한 Content MathML에서 허용되는 값들은 integer, rational, real,
complex, complex-polar,
complex-cartesian, constant, function,
vector, list, set, 및 matrix이다. 이러한 값들은 다음의 심볼들과 대응한다:
integer_type,
rational_type,
real_type,
complex_polar_type,
complex_cartesian_type,
constant_type,
fn_type,
vector_type,
list_type,
set_type, 및
matrix_type이 mathmltypes Content Dictionary에
정의되어 있다. 이 관점에서 다음의 두 표현은 동등하다고 간주된다:
<ci type="integer">n</ci>
<semantics>
<ci>n</ci>
<annotation-xml cd="mathmltypes" name="type" encoding="MathML-Content">
<csymbol cd="mathmltypes">integer_type</csymbol>
</annotation-xml>
</semantics>
참고로 complex는 complex-cartesian의 별칭으로 고려되어 동일한 complex_cartesian_type
심볼로 다시 쓰여야 한다. ci에 대해 complex는 더 자연스러운 타입 이름일 수 있는데, 카르테시안과 극형식의 구분은 실제로 cn으로 인코딩된 리터럴의 해석에만 영향을 미치기 때문이다.
ci 요소는 type 속성에 대해 어떤 문자열 값도 허용한다. 특히
MathML 컨테이너 요소의 이름들이나 그들의 타입 값들 중 어떤 것이든 허용된다.
더 진보된 타입 처리에 대해서는 type 속성이 적절하지 않다. 진보된 타입은 자체적으로 상당한 구조(예: vector(complex))를 필요로 하며, 수학적 객체로 구성한 뒤 semantics 요소를 사용해 MathML 표현식과 연관시키는 것이 더 좋다. 자세한 예는 [MathML-Types]를 참조하라.
만약 ci 요소의 내용이 Presentation MathML로 태깅되어 있다면 그 표현이 사용된다. 그런 태깅이 제공되지
않으면 텍스트 내용은 mi 요소의 내용처럼 렌더링된다. 애플리케이션이 양방향 텍스트 렌더링을 지원하면 렌더링은 유니코드의
양방향 규칙을 따른다.
type 속성은 렌더링 정보를 제공하는 데 해석될 수 있다. 예를 들어
<ci type="vector">V</ci>
같은 경우 렌더러는 벡터를 나타내기 위해 굵은 V를 표시할 수 있다.
| 스키마 단편 (엄격) | 스키마 단편 (전체) | |
|---|---|---|
| 클래스 | Csymbol | Csymbol |
| 속성 | CommonAtt, cd |
CommonAtt, DefEncAtt,
type?, cd?
|
| 내용 | SymbolName |
텍스트 | mglyph | PresentationExpression |
| 한정자 | BvarQ, DomainQ, degree, momentabout,
logbase
|
csymbol은 외부 정의를 가진 구체적이고 수학적으로 정의된 개념을 참조하는 데 사용된다. 예를 들어 표현식 x+y
에서 플러스 기호는 덧셈 함수라는 특정 외부 정의를 가지므로 기호이다. MathML 3은
이러한 식별자를 기호라 부른다. 기본 함수들과 일반적인 수학 연산자들이 기호의 예이다. 여기서 '기호'라는 용어는 추상적 의미로 사용되며 화면이나 종이에 표시되는
특정 표현과는 관련이 없다.
csymbol은 속성을 통해 그것이 대표하는 특정 수학적 개념의 정의를 참조함으로써 그 의미를 식별한다. 개념적으로 외부
정의에 대한 참조는 단지 URI, 즉 정의를 유일하게 식별하는 레이블이다. 그러나 사용자 에이전트 간의 통신에 유용하려면 외부 정의는 공유되어야 한다.
이 때문에 수학적 정의의 체계적이고 공개된 저장소들이 만들어졌다. 그중 특히 OpenMath 협회의 Content Dictionary(CD) 저장소가 광범위하고 개방적이며 활발하다. MathML 3에서 OpenMath CD는 외부 정의의 선호되는 출처이다. 특히, MathML 3에서 미리 정의된 연산자와 함수의 정의는 OpenMath CD로 제공된다.
MathML 3은 외부 정의 또는 콘텐츠 사전을 참조하기 위한 두 가지 메커니즘을 제공한다. 첫 번째는 cd 속성을
사용하는 것으로, OpenMath에서 CD를 참조하기 위해 정립된 관례를 따른다. 이것이 Strict Content MathML에서 요구되는 형태다. 두 번째는 definitionURL 속성을 사용하는 것으로 MathML 2와의 하위 호환성을 위해 제공되며, CD나 URI로 식별
가능한 다른 정의 출처를 참조하는 데 사용될 수 있다. 이는 다음 섹션에서 설명된다.
OpenMath CD를 참조할 때 선호되는 방법은 cd 속성을 사용하는 것이다. 추상적으로 OpenMath 기호 정의는
세 값의 쌍: 기호 이름, CD 이름, CD 기반(cdbase, URI)으로 식별된다. 이러한 삼중항을 csymbol와
연관시키려면, csymbol의 내용은 기호 이름을 지정하고, Content Dictionary의 이름은 cd 속성으로 제공한다. CD 기반은 csymbol를 포함하는
math 요소를 포함하는 문서, 시스템 기본값, 혹은 포함된 math
요소에 선택적으로 지정된 cdgroup 속성으로부터 결정된다; 자세한 내용은 2.2.1 속성 참조. 특정
정보가 없으면 모든 csymbol, annotation, 및
annotation-xml에 대해 http://www.openmath.org/cd가 CD 기반으로
가정된다. 이는 OpenMath 협회가 유지하는 표준 CD 모음의 CD 기반이다.
cdgroup은 OpenMath CD 그룹 파일에 대한 URL을 지정한다. CD 그룹 파일 형식에 대한 자세한 설명은
[OpenMath]의 섹션 4.4.2(CDGroups)를 참조하라. 개념적으로 CD
그룹 파일은 CD 이름과 해당 CD 기반의 쌍 목록이다. csymbol가 cd 속성을 통해 CD 이름을 참조할 때, 이름은 그룹 파일에서 조회되고 연관된 CD 기반 값이 해당 csymbol에 사용된다. CD 그룹 파일이 지정되었으나 참조된 CD 이름이 그룹 파일에 없거나 그룹 파일을 가져오는 데
오류가 있으면, 참조하는 csymbol는 정의되지 않는다. 그러나 결과 오류의 처리 방법은 정의되어 있지 않으며 사용자
에이전트의 책임이다.
외부 정의는 URI이지만, CD 파일들이 URI를 URL로 해석했을 때 실제로 검색 가능할 것을 강력히 권장한다. 특히 심볼의 다른 속성들이 해당 Content Dictionary를 검사함으로써 얻어질 수 있다. 여기에는 심볼 정의뿐만 아니라 예제와 다른 형식적 속성들도 포함된다. 단, OpenMath Content Dictionary에는 여러 인코딩이 있으므로 CD를 가져올 때 사용자 에이전트가 올바른 인코딩을 결정하는 것은 사용자 에이전트의 몫이다.
위에서 설명한 형태들 외에도, csymbol 요소는 유니코드에 아직 없는 문자를 참조하기 위한 mglyph 요소나, 렌더링을 위한 일반적인 표현 구성(참조: 3.1.8 프레젠테이션 요소 요약)을 포함할 수 있다. 이 경우 Strict
Content MathML로 작성할 때 csymbol은 ci 요소로 처리되어야 하며 Rewrite: ci presentation mathml을 사용하여 다시 작성되어야 한다.
외부 정의는 definitionURL 속성을 사용하여 csymbol에 직접 지정될 수도 있다. OpenMath 기호 정의를 참조할 때는 추상적 삼중항(기호 이름, CD 이름,
CD 기반)이 다음과 같이 완전한 URI로 매핑된다:
URI = cdbase + '/' + cd-name + '#' + symbol-name
예를 들어,
(plus, arith1, http://www.openmath.org/cd)
는 다음으로 매핑된다
http://www.openmath.org/cd/arith1#plus
결과 URI는 definitionURL 속성의 값으로 지정된다.
이 참조 방식은 MathML2와의 하위 호환성을 제공하고 URI 기반 프레임워크(예: 시맨틱 웹의 RDF [RDF]
또는 OMDoc [OMDoc1.2]) 내에서 Content MathML 사용을 용이하게 한다. 또 다른 이점은 CD의 기호
이름이 csymbol 요소의 내용과 반드시 일치할 필요가 없다는 점이다. 그러나 일반적으로 이 방법은 훨씬 긴
MathML 인스턴스를 초래한다. 또한 CD가 개발 중인 상황에서는 CD 그룹 파일 사용이 CD 위치 변경을 마크업 변경 없이 가능하게 한다. definitionURL의 세 번째 단점은 cd 속성과 달리
OpenMath content dictionaries에만 국한되지 않기 때문에, 일반적인 경우 사용자 에이전트가 추가적인 컨텍스트나 실무 공동체 정보를 알지 못하면
definitionURL 값의 올바른 해석을 자동으로 결정할 수 없다는 점이다.
cd와 definitionURL 메커니즘은 단일 MathML
인스턴스 내에서 함께 사용될 수 있다. 그러나 동일한 csymbol에 cd와 definitionURL가 모두 지정되면, cd가 우선한다.
만약 csymbol 요소의 내용이 프레젠테이션 태그로 표시되어 있다면 그 표시가 사용된다. 그런 태깅이 제공되지 않으면
텍스트 내용은 mi 요소의 내용처럼 렌더링된다. 특히 애플리케이션이 양방향 텍스트 렌더링을 지원하면 렌더링은 유니코드의
양방향 규칙을 따른다.
| 스키마 단편 (엄격) | 스키마 단편 (전체) | |
|---|---|---|
| 클래스 | Cs | Cs |
| 속성 | CommonAtt |
CommonAtt, DefEncAtt
|
| 내용 | 텍스트 | 텍스트 |
cs 요소는 Content MathML 표현식에서 사용할 수 있는 문자열 리터럴
을 인코딩한다.
cs의 내용은 텍스트이다; 비-엄격 마크업에서도 프레젠테이션 MathML 구성은 허용되지 않는다. 구체적으로, cs는 mglyph 요소를 포함할 수 없고, 내용은 공백 정규화를 거치지
않는다.
Content MathML
<set>
<cs>A</cs><cs>B</cs><cs> </cs>
</set>
표현 예시
<mrow>
<mo>{</mo>
<ms>A</ms>
<mo>,</mo>
<ms>B</ms>
<mo>,</mo>
<ms>  </ms>
<mo>}</mo>
</mrow>
| 스키마 단편 (엄격) | 스키마 단편 (전체) | |
|---|---|---|
| 클래스 | Apply | Apply |
| 속성 | CommonAtt |
CommonAtt, DefEncAtt
|
| 내용 | ContExp+ |
ContExp+
|
(ContExp,
BvarQ,
Qualifier?,
ContExp*)
|
수학에서 복합 객체를 만드는 가장 기본적인 방법은 함수나 연산자를 그 인자들에 적용하는 것이다.
MathML에서 apply 요소는 연산자나 함수를 그 인자들에 적용하는 표현식 트리를 구성하는 데 사용된다. 결과 트리는
완전한 수학적 표현식에 해당한다. 대략적으로 말하면 이는 의미가 바뀌지 않고 괄호나 '논리적 괄호'로 둘러싸일 수 있는 수학적 단위라는 것을 의미한다.
예를 들어, (x + y)는 다음과 같이 인코딩될 수 있다:
<apply><csymbol cd="arith1">plus</csymbol><ci>x</ci><ci>y</ci></apply>
apply의 여는 태그와 닫는 태그는 연산자나 함수의 범위를 정확히 지정한다. 가장 전형적인 사용 방식은 간단하고
재귀적이다. 기호적으로는 내용 모델을 다음과 같이 묘사할 수 있다:
<apply> op [ a b ...] </apply>
여기서 피연산자들 a, b, ... 는 자체가 MathML 표현식 트리이고, op는 연산자나 함수를 나타내는 MathML
표현식 트리이다. apply 구성은 임의 깊이로 중첩될 수 있다.
apply는 원칙적으로 임의 개수의 피연산자를 가질 수 있다. 예를 들어, (x + y + z)는 다음과 같이 인코딩될 수 있다:
<apply><csymbol cd="arith1">plus</csymbol>
<ci>x</ci>
<ci>y</ci>
<ci>z</ci>
</apply>
MathML은 피연산자가 없는 적용도 허용한다(예: random(), current-date() 같은 함수 표현).
다양한 연산이 섞여 있는 수학 표현은 중첩된 apply 발생으로 이어진다. 예를 들어, a x + b 는 다음과 같이
인코딩된다:
<apply><csymbol cd="arith1">plus</csymbol>
<apply><csymbol cd="arith1">times</csymbol>
<ci>a</ci>
<ci>x</ci>
</apply>
<ci>b</ci>
</apply>
괄호나 연산자 우선순위에 의존할 필요가 없다. apply 태그들이 올바른 그룹화를 제공하여 표현식을 다른 구성 안에서
재사용할 수 있게 한다. apply로 둘러싸인 어떤 표현식도 명확하게 정의된 일관된 객체이며, 그 해석은 주변 문맥에
의존하지 않는다. 이는 같은 시각적 렌더링이 문맥에 따라 매우 다른 의미를 가질 수 있는 프레젠테이션 마크업과는 뚜렷한 대조를 이룬다. 예를 들어, (F+G)(x)는 곱을 나타낼 수도 있고(예: (F+G) × x),
또는 함수 F+G를 인자 x에 적용하는 것을 나타낼 수도 있다. 후자의 경우에는 합을 구성하고 그 결과를 인자 x에 적용하도록 구성한다.
위 예는 또한 apply 구성에서 함수와 인자들이 단순 식별자일 수도 있고 더 복잡한 표현식일 수도 있음을 보여준다.
apply 요소는 함수 또는 연산자와 그 사용 사례를 구별하는 데 근본적으로 필요하다. 함수를 0개 이상의 인자에 적용하여
구성된 표현식은 항상 함수의 공역(codomain)의 원소가 된다. 적절한 사용은 적용되는 연산자에 따라 달라진다. 예를 들어, plus 연산자는 0개 이상의 인자를 가질 수 있는 반면, minus
연산자는 적절히 형성되려면 하나 또는 두 개의 인자가 필요하다.
엄격한 Content MathML의 적용은 수학적 함수 적용으로 렌더링된다. 만약 <mi>F</mi>가 <ci>f</ci>의 렌더링을 나타내고, <mi>Ai</mi>가 <ci>ai</ci>의 렌더링을 나타낸다면, 간단한 적용의 샘플 렌더링은 다음과 같다:
Content MathML
<apply><ci>f</ci>
<ci>a1</ci>
<ci>a2</ci>
<ci>...</ci>
<ci>an</ci>
</apply>
표현 예시
<mrow>
<mi>F</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow>
<mo fence="true">(</mo>
<mi>A1</mi>
<mo separator="true">,</mo>
<mi>...</mi>
<mo separator="true">,</mo>
<mi>A2</mi>
<mo separator="true">,</mo>
<mi>An</mi>
<mo fence="true">)</mo>
</mrow>
</mrow>
비-엄격 MathML 적용은 한정자와 함께 사용될 수 있다. 잘 알려진 연산자들에 대한 더 구체적인 렌더링 규칙이 없을 때 렌더링은 아래 샘플 표현을 따라야 한다(아래는
sum의 전형적 표시에서 동기화됨). <mi>Op</mi>가 <ci>op</ci>의 렌더링을, <mi>X</mi>가 <ci>x</ci>의 렌더링을 나타낸다면:
Content MathML
<apply><ci>op</ci>
<bvar><ci>x</ci></bvar>
<domainofapplication><ci>d</ci></domainofapplication>
<ci>expression-in-x</ci>
</apply>
표현 예시
<mrow>
<munder>
<mi>Op</mi>
<mrow><mi>X</mi><mo>∈</mo><mi>D</mi></mrow>
</munder>
<mo>⁡<!--ApplyFunction--></mo>
<mrow>
<mo fence="true">(</mo>
<mi>Expression-in-X</mi>
<mo fence="true">)</mo>
</mrow>
</mrow>
많은 복잡한 수학 표현은 바운드 변수를 사용하여 구성되며, 바운드 변수는 논리와 형식언어에서 중요한 개념이다. 변수가 수량자(quantifier)를 통해 표현식의 범위(scope) 내에서 바운드가 된다. 비공식적으로 말하면 적분, 합, 곱, 논리적 수량자(for all, there exists) 등의 표현식에서의 '더미 변수'라고 생각할 수 있다. 바운드 변수는 범위 내에서 일관되게 이름을 바꿔도(표현식에 이미 존재하지 않는 이름으로) 표현식의 의미가 변하지 않는다는 특성을 가진다.
| 스키마 단편 (엄격) | 스키마 단편 (전체) | |
|---|---|---|
| 클래스 | Bind | Bind |
| 속성 | CommonAtt |
CommonAtt, DefEncAtt |
| 내용 |
ContExp,
BvarQ*,
ContExp
|
ContExp,
BvarQ*,
Qualifier*,
ContExp+
|
바인딩 표현식은 bind 요소를 사용한 MathML 표현식 트리로 표현된다. 그 첫 번째 자식은 바인딩 연산자(예: 적분
연산자)를 나타내는 MathML 표현식이다. 그 다음에는 바운드 변수를 나타내는 하나 이상의 bvar 요소들이 오고,
마지막 자식은 바인딩의 본문(body)이라 불리는 일반적인 Content MathML 표현식이다.
| 스키마 단편 (엄격) | 스키마 단편 (전체) | |
|---|---|---|
| 클래스 | BVar | BVar |
| 속성 | CommonAtt |
CommonAtt, DefEncAtt |
| 내용 | ci | semantics-ci
|
(ci | semantics-ci), degree? |
degree?, (ci |
semantics-ci)
|
bvar 요소는 합, 곱, 수량자 또는 사용자 정의 함수 등에서 바운드 변수를 나타내는 데 사용된다.
bvar 요소의 내용은 주석이 달린 변수(annotated variable)이다. 즉 이는 ci 요소로 표현된 콘텐츠 식별자이거나, 첫 번째 자식이 주석이 달린 변수인 semantics 요소이다. 두 번째 종류의 주석된 변수의 이름은 그 첫 번째 자식의 이름이다. 바운드 변수의 이름은
bvar 요소에 있는 주석된 변수의 이름이다.
바운드 변수는 그들의 이름을 비교하여 식별된다. 이러한 식별은 bvar 요소 내의 ci 요소에 id를 부여하고, 다른 모든 인스턴스에서 xref 속성을 사용하여 참조함으로써 명시적으로 할 수 있다. 이 접근법의 예는 다음과 같다:
<bind><csymbol cd="quant1">forall</csymbol>
<bvar><ci id="var-x">x</ci></bvar>
<apply><csymbol cd="relation1">lt</csymbol>
<ci xref="var-x">x</ci>
<cn>1</cn>
</apply>
</bind>
이 id 기반 접근법은 바운드 변수가 중첩된 구성에서 특히 유용하다.
바운드 변수와 추가 정보를 연관시키는 것이 필요할 때가 있다. 정보는 세부적인 수학적 타입, 대체 표현 또는 적용 도메인 같은 것일 수 있다. 이러한 연관은 ci 요소(심지어 bvar 요소 내부에서도)를 semantics 요소로 교체하고 그 안에 ci와 추가 정보를 함께
넣음으로써 표준 방식으로 수행된다. 바운드 변수의 인식은 여전히 실제 ci 요소에 기반하며, semantics 요소나 그 내부 내용에 기반하지 않는다. 위에서 설명한 id 기반 접근법은 여전히 사용할 수 있다.
다음 예는 를 인코딩한 것이다.
<bind><csymbol cd="quant1">forall</csymbol>
<bvar><ci>x</ci></bvar>
<apply><csymbol cd="relation1">eq</csymbol>
<apply><csymbol cd="arith1">plus</csymbol><ci>x</ci><ci>y</ci></apply>
<apply><csymbol cd="arith1">plus</csymbol><ci>y</ci><ci>x</ci></apply>
</apply>
</bind>
비-엄격한 Content 마크업에서 bvar 요소는 여러 관용적 구성에 사용된다. 이러한 것들은 4.3.3 한정자와 4.3 특정 구조를 위한
Content MathML에서 설명된다.
바운드 변수는 그 범위 내에서 일관되게 이름을 바꿀 수 있다는 것이 정의적 성질이다. 이 연산은 때때로 α-변환(α-conversion)이라고 불리며 표현식의 의미를 보존한다.
바운드 변수 를 예를 들어 로 바꿀 수 있으려면, 가 바인딩의 본문이나 바운드 변수의 주석, 바꿀 대상인 또는 이후에 바인딩되는 변수들에 자유롭게(free) 나타나지 않아야 한다.
만약 바운드 변수 가 이름을 바꾸면, 그 바운드 변수의 bvar 요소 내 주석의 자유 발생(free occurrences)들과
그 후속 bvar 자식들, 그리고 bind의 본문에 있는 표현식의
자유 발생들은 모두 바꿔야 한다.
이전 절의 예에서, 를 로 이름을 바꾸면 동등한 표현식이 생성되는 것을 주목하라. 반면에 를 로 이름을 바꿀 수는 없다. 그 이유는 가 바인딩의 본문에서 자유 변수로 존재하여 캡처되어 다음과 같은 표현식 를 만들게 되어 원래 표현식과 동등하지 않기 때문이다.
만약 <ci>b</ci>와 <ci>s</ci>가 각각 Presentation MathML에서 <mi>B</mi>와 <mi>S</mi>로 렌더링된다면, 바인딩 요소의 샘플 렌더링은 다음과 같다:
Content MathML
<bind><ci>b</ci>
<bvar><ci>x1</ci></bvar>
<bvar><ci>...</ci></bvar>
<bvar><ci>xn</ci></bvar>
<ci>s</ci>
</bind>
표현 예시
<mrow>
<mi>B</mi>
<mrow>
<mi>x1</mi>
<mo separator="true">,</mo>
<mi>...</mi>
<mo separator="true">,</mo>
<mi>xn</mi>
</mrow>
<mo separator="true">.</mo>
<mi>S</mi>
</mrow>
콘텐츠 요소들은 semantics 요소를 통해 추가 정보를 주석으로 달 수 있다. MathML은 주석된 요소와 주석 자체를
나타내는 annotation-xml 및 annotation 요소들을 감싸기
위해 semantics 요소를 사용한다. semantics, annotation 및 annotation-xml의 사용은 6. MathML 주석: semantics에서 자세히 설명된다.
semantics 요소는 프레젠테이션 MathML과 Content MathML의 일부로 간주된다. MathML은 semantics 요소가 첫 번째 자식이 (엄격한) Content MathML인 경우에만 그 semantics 요소를 (엄격한) Content MathML로 간주한다.
| 스키마 단편 (엄격) | 스키마 단편 (전체) | |
|---|---|---|
| 클래스 | Error | Error |
| 속성 | CommonAtt |
CommonAtt, DefEncAtt
|
| 내용 |
csymbol, ContExp*
|
csymbol, ContExp*
|
콘텐츠 오류 표현식은 csymbol 하나와 그 뒤를 따르는 0개 이상의 MathML 표현식들로 구성된다. 첫 번째 표현식은 오류의
종류를 나타내는 csymbol이어야 한다. 이후의 자식들(있다면)은 오류가 발생한 문맥을 나타낸다.
cerror 요소는 직접적인 수학적 의미를 가지지 않는다. 오류는 표현식 트리에 대해 수행된 어떤 동작의 결과로 발생하므로, 어떤
종류의 통신이 이루어지는 경우에만 실제로 관심의 대상이 된다. 오류는 다른 객체 안에서도, 그리고 다른 오류들 안에서도 발생할 수 있다.
예를 들어 0으로 나누기 오류를 인코딩하려면, DivisionByZero 심볼을 포함하는 가상의 aritherror Content
Dictionary를 사용할 수 있다. 다음 표현과 같다:
<cerror>
<csymbol cd="aritherror">DivisionByZero</csymbol>
<apply><csymbol cd="arith1">divide</csymbol><ci>x</ci><cn>0</cn></apply>
</cerror>
일반적으로 오류 마크업은 가장 작은 오류 하위 표현식만을 둘러싸야 한다는 점에 유의하라. 따라서 cerror는 종종 더 큰
표현식의 하위 표현식이 된다. 예:
<apply><csymbol cd="relation1">eq</csymbol>
<cerror>
<csymbol cd="aritherror">DivisionByZero</csymbol>
<apply><csymbol cd="arith1">divide</csymbol><ci>x</ci><cn>0</cn></apply>
</cerror>
<cn>0</cn>
</apply>
cerror 요소의 기본 표현은 merror 표현이며, 그 첫 번째 자식은
오류 심볼의 표현이고 이후 자식들은 cerror의 나머지 자식들에 대한 기본 표현이다. 특히, 만약 cerror의 나머지 자식들 중 하나가 Presentation MathML 표현식이라면, 해당 자식은 대응하는 merror에서 그대로 사용된다.
<cerror>
<csymbol cd="aritherror">DivisionByZero</csymbol>
<apply><csymbol cd="arith1">divide</csymbol><ci>x</ci><cn>0</cn></apply>
</cerror>
표현 예시
<merror>
<mtext>DivisionByZero: </mtext>
<mfrac><mi>x</mi><mn>0</mn></mfrac>
</merror>
오류가 발생한 문맥이 너무 비논리적이어서 기본 표현이 유용하지 않은 경우, 애플리케이션은 오류 문맥의 대체 표현을 제공할 수 있다. 예:
<cerror>
<csymbol cd="error">Illegal bound variable</csymbol>
<cs> <bvar><plus/></bvar> </cs>
</cerror>
| 스키마 단편 (엄격) | 스키마 단편 (전체) | |
|---|---|---|
| 클래스 | Cbytes | Cbytes |
| 속성 | CommonAtt |
CommonAtt, DefEncAtt
|
| 내용 | base64 |
base64 |
cbytes의 내용은 Base64 인코딩의 문자 시퀀스로서 바이트 스트림을 나타낸다. 즉 [XMLSchemaDatatypes]에 정의된
base64Binary 데이터 타입과 일치한다. 모든 공백은 무시된다.
cbytes 요소는 주로 OpenMath 호환성을 위해 사용되지만, OpenMath에서처럼 MathML로 인코딩하기 어려운 시스템
출력(시스템의 내부 상태와 관련된 이진 데이터나 이미지 데이터 등)을 캡슐화하는 데 사용할 수 있다.
cbytes의 렌더링은 내용을 나타낼 것으로 기대되지 않으며 제안된 렌더링은 빈 mrow의 렌더링이다. 일반적으로 cbytes는 annotation-xml에서 사용되거나 Presentation MathML로 주석되므로 이 기본 렌더링은 거의 사용되지 않아야
한다.
이전 절(the previous section)에서 설명된 Strict Content MathML의 요소들은 논리적 주장과 표현식 구조를 인코딩하기에 충분하며, 이는 수학의 기초를 이루는 수학적 논리의 표준 구성들을 밀접하게 모델링하는 방식으로 이루어진다. 결과적으로, Strict 마크업은 모든 수학을 표현하는 데 사용할 수 있고, 모든 Content MathML 표현식에 대해 일관된 수학적 의미를 제공하는 데 이상적이다.
동시에 수학에서 자주 사용하는 많은 표기 관용구들은 Strict Content 마크업으로 직접 표현하기가 쉽지 않다. 예를 들어 합, 적분, 집합, 분절 함수(piecewise functions) 및 기타 많은 일반적인 구성들의 표준 표기법은 엄격하게 인코딩하려면 람다 함수의 도입과 같은 명시적이지 않은 기술적 장치들을 필요로 한다. 따라서 Content MathML을 더 사용하기 쉽도록 이러한 관용적 구성을 보다 직접적으로 인코딩하기 위한 다양한 추가 요소들이 제공된다. 이 절에서는 이러한 관용적 구성들을 인코딩하는 일반적 접근법과 그것들의 Strict Content 등가물을 논의한다. 개별 구성들은 4.3 특정 구조를 위한 Content MathML에서 자세히 다뤄진다.
Content 마크업이 다루는 대부분의 관용적 구성들은 대략 열두 가지 분류로 나뉜다. 이들 분류 중 일부는 컨테이너 요소와 같이 자체 문법을 가진다. 유사하게, 소수의 비-엄격 구성은 예외적인 문법을 가진 단일 요소를
포함하는데, 예를 들면 partialdiff가 있다. 이러한 예외 요소들은 4.3 특정 구조를 위한 Content
MathML에서 사례별로 논의된다. 그러나 대부분의 구성은 특정한 한정자(qualifiers)의 사용을 공유하는 연산자 요소들의 클래스들로 이루어진다. 이러한 연산자 클래스들은
4.3.4 연산자 클래스에서 설명된다.
모든 경우에 대해, 비-엄격 표현식은 오직 Strict 마크업만을 사용하여 다시 쓸 수 있다. 대부분의 경우 이 변환은 완전히 알고리즘적이며 자동화할 수 있다. 비-엄격 구성 클래스에 대한 다시쓰기 규칙은 이 절의 후반부에서 도입되어 논의되며, 단일 연산자를 포함하는 예외적 구성에 대한 다시쓰기 규칙은 4.3 특정 구조를 위한 Content MathML에 제시된다. 임의의 Content MathML을 Strict Content 마크업으로 다시쓰는 완전한 알고리듬은 챕터 끝의 F. The Strict Content MathML Transformation에 요약되어 있다.
많은 수학적 구조는 부분 요소들이나 매개변수로부터 구성된다. 예를 들어, 집합은 원소들의 모음을 포함하는 수학적 객체이므로 집합의 마크업이 그 구성 원소들의 마크업을 포함하는 것은
자연스럽다. 집합 마크업은 원소들을 열거하여 집합을 명시적으로 정의하거나 한정자 요소들을 사용하는 규칙으로 암시적으로 정의할 수 있다. 어느 경우든 원소들의 마크업은 집합의
마크업에 포함되며, MathML에서는 이러한 표현 방식을 컨테이너 마크업이라 부른다. 반대로 Strict 마크업은 생성자(constructor symbol)에
인자를 적용한 결과로서 집합의 인스턴스를 표현한다. 이 스타일의 마크업에서는 집합 구성을 위한 마크업이 포함하는 apply 요소
내에서 집합 원소들의 마크업과 형제 관계를 갖는다.
MathML은 다음 수학적 구성들에 대해 컨테이너 마크업을 제공한다: 집합(sets), 리스트(lists), 구간(intervals), 벡터(vectors), 행렬(두 요소로 표현되는 matrices), 분절 함수(piecewise functions, 세 요소) 및 람다 함수(lambda functions). Strict 마크업에는 이들 각각에 대응하는 생성자 심볼들이 있지만, 람다 함수의 경우는 예외로 바인딩 심볼(binding symbols)에 대응한다.
컨테이너 마크업으로부터 동등한 Strict Content 마크업을 얻기 위한 다시쓰기 규칙은 관련된 특정 연산자의 연산자 클래스에 따라 달라진다. 특정 컨테이너 요소에 대한 자세한 내용은 해당 요소의 문법 표 및 논의를 E. The Content MathML Operators에서 확인하고, 그런 다음 F. The Strict Content MathML Transformation에 설명된 해당 연산자 클래스에 대한 다시쓰기 규칙을 적용하라.
생성자에 대응하는 컨테이너 요소의 인자들은 자식 요소들의 순서로 명시적으로 주어지거나 한정자들을 이용한 규칙으로 암시적으로 주어질 수 있다. 예외는 interval, piecewise, piece, 및 otherwise 요소들이다. 이들 요소의 인자들은
반드시 명시적으로 지정되어야 한다.
다음은 인자가 명시적으로 지정된 컨테이너 마크업의 예이다:
<set><ci>a</ci><ci>b</ci><ci>c</ci></set>
이는 다음의 Strict Content MathML 표현과 동등하다:
<apply><csymbol cd="set1">set</csymbol><ci>a</ci><ci>b</ci><ci>c</ci></apply>
다음은 인자 목록이 바운드 변수로 된 표현식으로 간접적으로 주어지는 컨테이너 마크업의 또 다른 예이다. 짝수 정수들의 집합에 대한 컨테이너 마크업은 다음과 같다:
<set>
<bvar><ci>x</ci></bvar>
<domainofapplication><integers/></domainofapplication>
<apply><times/><cn>2</cn><ci>x</ci></apply>
</set>
이는 Strict Content MathML에서 다음과 같이 쓸 수 있다:
<apply><csymbol cd="set1">map</csymbol>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<apply><csymbol cd="arith1">times</csymbol>
<cn>2</cn>
<ci>x</ci>
</apply>
</bind>
<csymbol cd="setname1">Z</csymbol>
</apply>
lambda 요소는 fns1의 lambda 심볼에 대응하는 컨테이너 요소이다. 그러나 앞 절의 다른
컨테이너 요소들이 단순히 인자들로부터 수학적 객체를 구성하는 것과는 달리, lambda 요소는 변수 바인딩도 수행한다.
따라서 lambda의 자식 요소들은 구별된 역할을 가진다. 특히, lambda 요소는 최소한 하나의 bvar 자식을 가져야 하며,
선택적으로 한정자 요소들가 뒤따르고, 그 다음에 Content MathML 요소가 와야
한다. 이와 같은 lambda 컨테이너와 다른 생성자 컨테이너 간의 기본적 차이는 이들이 대응하는 OpenMath
심볼들의 역할에도 반영된다. 생성자 심볼들은 OpenMath에서 application
역할을 가지는 반면, lambda 심볼은 bind
역할을
가진다.
이 예는 lambda 컨테이너 요소의 사용과 Strict Content MathML에서의 동등한 bind 사용을 보여준다
<lambda><bvar><ci>x</ci></bvar><ci>x</ci></lambda>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar><ci>x</ci>
</bind>
MathML은 비-엄격 구성에서 변수 바인딩을 수행하기 위해 bind 요소 대신 apply 요소를 사용하는 것을 허용한다. 이 사용법은 MathML 2와의 하위 호환성을 유지한다. 또한 아래에 설명된 대로
한정자를 가진 바운드 변수를 포함하는 여러 구성의 인코딩을 단순화한다.
apply 요소를 사용하여 변수를 바인딩하는 것은 두 가지 상황에서 허용된다. 첫째, 적용될 연산자 자체가 바인딩 연산자인 경우
apply 요소는 단순히 bind 요소를 대체한다. 논리적 수량자(<forall/>, <exists/>)와 컨테이너 요소
lambda가 이 유형의 주요 예이다.
둘째 상황은 적용되는 연산자가 한정자와 함께 바운드 변수를 사용하는 것을 허용할 때 발생한다. 가장 흔한 예가 합(sum)과 적분(integral)이다. 이러한 경우 대부분 표기법에서 변수 바인딩은 어느 정도 암시적이며, 동등한 Strict 표현은 형식적 정확성을 위해 람다 표현식과 같은 보조 구문의 도입을 필요로 한다.
한정자를 가진 바운드 변수를 사용하는 표현식은 관용적(idiomatic) 성격을 띠며 항상 진정한 변수 바인딩을 포함하지 않을 수 있으므로, apply로 바운드된
변수들에 대해 체계적인 이름 변경(알파 변환)이 모든 경우에 의미를 보존할 것이라고 기대할 수
없다. 이의 예가 diff 요소인데, 여기에서 bvar 항은 기술적으로 전혀
바운드되지 않을 수도 있다.
다음 예는 바인딩 연산자와 함께 apply를 사용하는 것을 보여준다. 이러한 경우 대응되는 Strict 등가는 단순히
apply 요소를 bind 요소로 교체하는 것이다:
<apply><forall/>
<bvar><ci>x</ci></bvar>
<apply><geq/><ci>x</ci><ci>x</ci></apply>
</apply>
동등한 Strict 표현은 다음과 같다:
<bind><csymbol cd="logic1">forall</csymbol>
<bvar><ci>x</ci></bvar>
<apply><csymbol cd="relation1">geq</csymbol><ci>x</ci><ci>x</ci></apply>
</bind>
이 예에서 합 연산자 자체는 바인딩 연산자가 아니지만, 표준 표기법에는 한정자를 가진 바운드 변수가 암시적으로 포함되며 이는 비-엄격 마크업에 반영된다. 동등한 Strict 표현에서는 합의 항(summand)을 람다 표현식으로 변환하고 한정자들을 인자 표현식으로 재구성해야 한다:
<apply><sum/>
<bvar><ci>i</ci></bvar>
<lowlimit><cn>0</cn></lowlimit>
<uplimit><cn>100</cn></uplimit>
<apply><power/><ci>x</ci><ci>i</ci></apply>
</apply>
동등한 Strict 표현은 다음과 같다:
<apply><csymbol cd="arith1">sum</csymbol>
<apply><csymbol cd="interval1">integer_interval</csymbol>
<cn>0</cn>
<cn>100</cn>
</apply>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>i</ci></bvar>
<apply><csymbol cd="arith1">power</csymbol>
<ci>x</ci>
<ci>i</ci>
</apply>
</bind>
</apply>
많은 일반적인 수학적 구성은 연산자와 추가 데이터를 함께 포함한다. 추가 데이터는 표준 표기에서 암시적인 경우(예: 바운드 변수)도 있고, 정해진 연산자의 일부로 간주되는 경우(예: 정적분의 상한/하한)도 있다. MathML 3은 이러한 경우 추가 데이터를 나타내기 위해 한정자(qualifier) 요소들을 사용한다.
한정자 요소들은 항상 연산자나 컨테이너 요소와 함께 사용된다. 그 의미는 관용적이며 사용되는 문맥에 따라 달라진다. 연산자와 함께 사용될 때 한정자들은 항상 연산자 다음에 나타나고
존재하는 인자들보다 앞선다. 어떤 경우든 한정자가 둘 이상인 경우 그들은 다음 순서로 나타난다: bvar, lowlimit, uplimit, interval, condition, domainofapplication, degree, momentabout, logbase.
한정자 요소들의 정확한 기능은 그것들이 수정하는 연산자나 컨테이너에 달려 있다. 사용 사례의 대부분은 아래에서 논의되는 몇몇 범주 중 하나에 속하며, 특정 연산자와 한정자에 대한 사용상의 주의사항은 4.3 특정 구조를 위한 Content MathML에서 제공된다.
| 클래스 | qualifier |
|---|---|
| 속성 | CommonAtt |
| 내용 | ContExp |
(interval의 문법은 4.3.10.3 Interval <interval>를 보라.)
domainofapplication, interval,
uplimit, lowlimit 및 condition의 주요 사용은 바운드 변수의 값을 제한하는 것이다. 가장 일반적인 한정자는 domainofapplication이다. 이는 연산이 수행될 집합(정렬이나 거리와 같은 추가 구조를 가질 수 있음)을
지정하는 데 사용된다. interval 한정자와 lowlimit 및
uplimit 쌍도 집합이 구간인 특수한 경우에 바운드 변수를 집합으로 제한한다. interval은 bvar 바로 뒤에 오는 경우에만 한정자로 해석된다는
점에 유의하라. condition 한정자는 domainofapplication처럼 일반적이며 바운드 변수를 임의의 집합으로 제한하는 데 사용할 수 있다. 그러나 다른
한정자들과 달리, 이는 바운드 변수의 불리언 값 함수를 지정하여 제한하므로, condition 한정자는 항상 바운드
변수의 인스턴스를 포함하고 따라서 앞에 bvar가 필요하다. 반면 다른 한정자들은 변수가 바운드되지 않는 경우에도 사용될
수 있으며, 예를 들어 함수의 정의역(subdomain) 제한을 나타내는 데 사용할 수 있다.
대부분의 경우 관심 있는 영역(domain)을 표현할 수 있는 한정자들은 서로 바꿔 사용할 수 있다. 가장 일반적인 한정자는 domainofapplication이므로 특권적 역할을 갖는다. 특별히 다른 한정자(예: 적분의 한계)를 사용할 관용적
이유가 없다면 이것이 선호되는 형태이다. MathML 3에서는 다른 형태들이 domainofapplication의 약식
표기(shorthand)로 취급되며, 모두 동등한 domainofapplication 구성으로 다시쓸 수 있다. 이를
위한 다시쓰기 규칙들은 아래에 주어진다. 다른 한정자 요소들은 익숙한 표기에 대응하고 표현에 더 쉽게 매핑되기 때문에 제공된다. 따라서 자연스럽게 발생하는 상황에서는
domainofapplication보다 더 편리하고 직접적일 수 있다.
이러한 아이디어들을 설명하기 위해, 정적분의 대체 표현들을 보여주는 예들을 고려하자. 구간 C를 0에서 1까지로, 그리고 로 두자. 그러면 domainofapplication은 함수 의 C 위 적분을 다음과 같이 표현할 수 있다:
<apply><int/>
<domainofapplication>
<ci type="set">C</ci>
</domainofapplication>
<ci type="function">f</ci>
</apply>
이 인코딩에서는 명시적 바운드 변수가 식별되지 않으며, 적분 피적분 함수는 함수이다. 또는 명시적 바운드 변수를 사용하여 interval 한정자를 사용할 수 있다:
<apply><int/>
<bvar><ci>x</ci></bvar>
<interval><cn>0</cn><cn>1</cn></interval>
<apply><power/><ci>x</ci><cn>2</cn></apply>
</apply>
lowlimit와 uplimit 쌍도 사용할 수 있다.
이는 아마도 이 적분의 가장 표준적인
표현일 것이다:
<apply><int/>
<bvar><ci>x</ci></bvar>
<lowlimit><cn>0</cn></lowlimit>
<uplimit><cn>1</cn></uplimit>
<apply><power/><ci>x</ci><cn>2</cn></apply>
</apply>
마지막으로, 바운드 변수에 대한 condition을 사용하여 동일한 적분을 표현한 예는 다음과 같다:
<apply><int/>
<bvar><ci>x</ci></bvar>
<condition>
<apply><and/>
<apply><leq/><cn>0</cn><ci>x</ci></apply>
<apply><leq/><ci>x</ci><cn>1</cn></apply>
</apply>
</condition>
<apply><power/><ci>x</ci><cn>2</cn></apply>
</apply>
condition 항 내에서 명시적 바운드 변수를 사용한 것을 주의하라. 또한 바운드 변수가 사용될 때 적분의 피적분
함수는 함수가 아니라 그 바운드 변수에 대한 표현식이라는 점에 유의하라.
condition 요소와 domainofapplication을 함께
사용하는 일반적인 기법은 매우 강력하다. 예를 들어 이전 예를 다변수 영역으로 확장하려면 추가 바운드 변수를 사용하고 카르테시안 곱에 해당하는 도메인 오브 애플리케이션을
사용할 수 있다:
<apply><int/>
<bvar><ci>x</ci></bvar>
<bvar><ci>y</ci></bvar>
<domainofapplication>
<set>
<bvar><ci>t</ci></bvar>
<bvar><ci>u</ci></bvar>
<condition>
<apply><and/>
<apply><leq/><cn>0</cn><ci>t</ci></apply>
<apply><leq/><ci>t</ci><cn>1</cn></apply>
<apply><leq/><cn>0</cn><ci>u</ci></apply>
<apply><leq/><ci>u</ci><cn>1</cn></apply>
</apply>
</condition>
<list><ci>t</ci><ci>u</ci></list>
</set>
</domainofapplication>
<apply><times/>
<apply><power/><ci>x</ci><cn>2</cn></apply>
<apply><power/><ci>y</ci><cn>3</cn></apply>
</apply>
</apply>
내부와 외부 바운드 변수의 순서가 중요함을 유의하라.
| 클래스 | qualifier |
|---|---|
| 속성 | CommonAtt |
| 내용 | ContExp |
degree 요소는 연산의 차수(degree)
또는 순서(order)
를 지정하는 데
사용되는 한정자이다. MathML은 이 degree 요소를 다음 세 문맥에서 사용한다: 근(root)의 차수,
모멘트(moment)의 차수, 그리고 여러 종류의 도함수에서. 각 계열을 위해 별도의 특수 요소를 도입하기보다는 MathML은 모든 경우에 단일 일반 구조인 degree 요소를 제공한다.
주의할 점은 degree 한정자는 위에서 논의한 의미에서 바운드 변수를 제한하는 데 사용되지 않는다는 것이다. 실제로
근(root)과 모멘트의 경우에는 명시적 또는 암시적 바운드 변수가 전혀 관여하지 않는다. 미분의 경우 degree
요소는 bvar과 함께 사용되지만, 이 경우들에도 그 변수가 진정으로 바운드되지 않을 수 있다.
root 및 moment 연산자와 함께 degree의 사용에 대해서는
아래의 해당 연산자 설명을 보라. 미분에서의 degree 사용은 더 복잡하다. 일반적으로 degree 요소는 해당 변수에 대한 도함수의 차수를 나타낸다. degree 요소는 도함수를 취하는 변수에 해당하는 bvar 요소의 두
번째 자식으로 허용된다. 다음은 degree 한정자를 사용한 2차 도함수의 예이다:
<apply><diff/>
<bvar>
<ci>x</ci>
<degree><cn>2</cn></degree>
</bvar>
<apply><power/><ci>x</ci><cn>4</cn></apply>
</apply>
자세한 내용은 4.3.8.2
미분 <diff/> 및
4.3.8.3 편미분
<partialdiff/>를 보라.
한정자 momentabout와 logbase는 각각 moment 및 log 연산자와 함께 특별히 사용하기 위해 설계된 전문화된
요소들이다. 이들 연산자의 사용법에 대해서는 아래의 연산자 설명을 보라.
다음 섹션에서 자세히 설명되는 Content MathML 요소들은 넓게 보면 분류로 구분될 수 있다. 각 요소의 분류는 E.3 The Content MathML Operators에 제시된 연산자 문법 표에서 나열된다. 분류는 요소의 일반적인 수학적 사용 의도를 나타내며 스키마에 의해 결정되는 사용법도 결정한다. 요소를 소개하는 섹션에는 해당 요소에 대한 연산자 문법과 스키마 분류에 대한 링크가 제공된다.
연산자 분류는 또한 Strict Content MathML로 매핑하기 위해 적용되는 다시쓰기 규칙을 결정한다. 이러한 다시쓰기 규칙은 F. The Strict Content MathML Transformation에 자세히 제시되어 있다. 이들 규칙에는 특정 연산자 분류에 적용되는 사용 사례, 개별 요소에 대한 특수 사례 다시쓰기 규칙, 그리고 거의 모든 연산자 분류의 연산자들이 사용하는 일반적인 다시쓰기 규칙인 F.8 Rewrite operators가 포함된다.
다음 섹션들은 핵심 수학 연산자, 함수 및 상수 집합을 나타내는 요소들을 제시한다. 대부분은 비어 있는(empty) 요소로, 미적분 수준까지의 표준 수학 교과 내용의 주제를 다룬다. 나머지 요소들은 집합, 구간, 벡터 등과 같은 컨테이너 요소들이다. 간결성을 위해 이 절에서 정의된 모든 요소들을 때때로 연산자 요소라고 부른다.
많은 MathML 연산자들은 임의의 개수의 인자와 함께 사용될 수 있다. 이 분류에 속한 요소들의 대응되는 OpenMath 기호들도 임의 개수의 인자를
받는다. 이러한 모든 경우에 대해, 인자들은 apply 또는 bind 요소의 자식으로 명시적으로 주어지거나, 한정자(qualifier) 요소의 사용을 통해 암시적으로 리스트가 지정될 수 있다.
plus 및 times 요소는 각각 덧셈과 곱셈 연산자를 나타낸다.
인자들은 보통 둘러싼 apply 요소 내에 명시적으로 지정된다. 교환 법칙이 성립하는 n-항 연산자로서 한정자를 사용해
인자들을 지정할 수 있으나 이는 권장되지 않으며, 그러한 표현을 나타내려면 대신 sum 또는 product 연산자를 사용하는 것이 좋다.
Content MathML
<apply><plus/><ci>x</ci><ci>y</ci><ci>z</ci></apply>
표현 샘플(Presentation)
<mrow><mi>x</mi><mo>+</mo><mi>y</mi><mo>+</mo><mi>z</mi></mrow>
gcd 및 lcm 요소는 인자들의 최대공약수 또는 최소공배수를 반환하는
n-항 연산자를 나타낸다. 인자들은 둘러싼 apply 요소 내에 명시적으로 지정되거나, 한정자(quantifier)를
통해 지정될 수 있다.
이 기본 렌더링들은 영어권 로케일에 특화되어 있다: 다른 로케일에서는 다른 기본 렌더링을 가질 수 있다.
Content MathML
<apply><gcd/><ci>a</ci><ci>b</ci><ci>c</ci></apply>
표현 샘플(Presentation)
<mrow>
<mi>gcd</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>a</mi><mo>,</mo><mi>b</mi><mo>,</mo><mi>c</mi><mo>)</mo></mrow>
</mrow>
sum 요소는 n-항 덧셈 연산자를 나타낸다. 합의 항들은 보통 한정자(qualifier)를 사용한 규칙으로 지정된다.
명시적 인자 목록으로 사용할 수는 있지만 이는 강력히 권장되지 않으며, 그런 상황에서는 대신 plus 연산자를 사용해야
한다.
sum 연산자는 명시적 바운드 변수와 함께 또는 없이 사용할 수 있다. 바운드 변수가 사용될 때, sum 요소는 인덱스 변수들을 지정하는 하나 이상의 bvar 요소 뒤에
한정자들이 따라와서 인덱스 변수들의 도메인을 제공한다. 둘러싼 apply의 최종 자식은 바운드 변수들에 대한 표현식이며,
합의 항들은 인덱스 변수들의 도메인의 각 점에서 이 표현식을 평가함으로써 얻어진다. 도메인의 구조에 따라 합의 영역은 보통 uplimit와 lowlimit를 사용하여 상한 및 하한을 지정한다.
명시적 바운드 변수가 주어지지 않을 때, 둘러싼 apply 요소의 최종 자식은 함수여야 하며, 합의 항들은 한정자들이
지정한 도메인의 각 점에서 그 함수를 평가하여 얻어진다.
Content MathML
<apply><sum/>
<bvar><ci>x</ci></bvar>
<lowlimit><ci>a</ci></lowlimit>
<uplimit><ci>b</ci></uplimit>
<apply><ci>f</ci><ci>x</ci></apply>
</apply>
<apply><sum/>
<bvar><ci>x</ci></bvar>
<condition>
<apply><in/><ci>x</ci><ci type="set">B</ci></apply>
</condition>
<apply><ci type="function">f</ci><ci>x</ci></apply>
</apply>
<apply><sum/>
<domainofapplication>
<ci type="set">B</ci>
</domainofapplication>
<ci type="function">f</ci>
</apply>
표현 샘플(Presentation)
<mrow>
<munderover>
<mo>∑</mo>
<mrow><mi>x</mi><mo>=</mo><mi>a</mi></mrow>
<mi>b</mi>
</munderover>
<mrow><mi>f</mi><mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow>
</mrow>
<mrow>
<munder>
<mo>∑</mo>
<mrow><mi>x</mi><mo>∈</mo><mi>B</mi></mrow>
</munder>
<mrow><mi>f</mi><mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow>
</mrow>
<mrow><munder><mo>∑</mo><mi>B</mi></munder><mi>f</mi></mrow>
product 요소는 n-항 곱셈 연산자를 나타낸다. 곱의 항들은 보통 한정자(qualifier)를 사용한 규칙으로
지정된다. 명시적 인자 목록으로 사용할 수는 있지만 이는 강력히 권장되지 않으며, 그런 상황에서는 대신 times
연산자를 사용해야 한다.
product 연산자는 명시적 바운드 변수와 함께 또는 없이 사용할 수 있다. 바운드 변수가 사용될 때, product 요소는 인덱스 변수를 지정하는 하나 이상의 bvar 요소
뒤에 한정자들이 따라와서 인덱스 변수들의 도메인을 제공한다. 둘러싼 apply의 최종 자식은 바운드 변수들에 대한
표현식이며, 곱의 항들은 도메인의 각 점에서 이 표현식을 평가함으로써 얻어진다. 도메인의 구조에 따라 도메인은 보통 uplimit와 lowlimit 한정자를 사용해 주어진다.
명시적 바운드 변수가 주어지지 않을 때, 둘러싼 apply 요소의 최종 자식은 함수여야 하며, 곱의 항들은 한정자들이
지정한 도메인의 각 점에서 그 함수를 평가하여 얻어진다.
Content MathML
<apply><product/>
<bvar><ci>x</ci></bvar>
<lowlimit><ci>a</ci></lowlimit>
<uplimit><ci>b</ci></uplimit>
<apply><ci type="function">f</ci>
<ci>x</ci>
</apply>
</apply>
<apply><product/>
<bvar><ci>x</ci></bvar>
<condition>
<apply><in/>
<ci>x</ci>
<ci type="set">B</ci>
</apply>
</condition>
<apply><ci>f</ci><ci>x</ci></apply>
</apply>
표현 샘플(Presentation)
<mrow>
<munderover>
<mo>∏</mo>
<mrow><mi>x</mi><mo>=</mo><mi>a</mi></mrow>
<mi>b</mi>
</munderover>
<mrow><mi>f</mi><mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow>
</mrow>
<mrow>
<munder>
<mo>∏</mo>
<mrow><mi>x</mi><mo>∈</mo><mi>B</mi></mrow>
</munder>
<mrow><mi>f</mi><mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mrow>
</mrow>
compose 요소는 함수 합성 연산자를 나타낸다. MathML은 합성에 포함된 함수들의 정의역(domain)과
공역(codomain)에 대해 어떠한 가정도 하지 않음을 유의하라; 결과 합성의 정의역이 공집합일 수 있다.
compose 요소는 가환 n-항 연산자이다. 따라서, 이 연산자는 필요에 따라 한정자 요소들을 사용하여 인덱스로 매겨진
인자들의 집합에 대해 유도된 연산자로 승격될 수 있다(이는 4.3.5.4 N-항 함수 연산자:
<compose/>에 설명된 바와 같다).
Content MathML
<apply><compose/><ci>f</ci><ci>g</ci><ci>h</ci></apply>
<apply><eq/>
<apply>
<apply><compose/><ci>f</ci><ci>g</ci></apply>
<ci>x</ci>
</apply>
<apply><ci>f</ci><apply><ci>g</ci><ci>x</ci></apply></apply>
</apply>
표현 샘플(Presentation)
<mrow>
<mi>f</mi><mo>∘</mo><mi>g</mi><mo>∘</mo><mi>h</mi>
</mrow>
<mrow>
<mrow>
<mrow><mo>(</mo><mi>f</mi><mo>∘</mo><mi>g</mi><mo>)</mo></mrow>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
</mrow>
<mo>=</mo>
<mrow>
<mi>f</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow>
<mo>(</mo>
<mrow>
<mi>g</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
</mrow>
이 요소들은 불리언 인자를 받아 불리언 값을 반환하는 n-항 함수를 나타낸다. 인자들은 둘러싼 apply 요소 내에
명시적으로 지정되거나 한정자 요소들을 통해 지정될 수 있다.
and는 모든 인자가 참일 때 참이며, 그렇지 않으면 거짓이다.
or는 어느 인자라도 참이면 참이며, 그렇지 않으면 거짓이다.
xor는 배타적 논리합(Exclusive Or) 함수로, 참인 인자의 수가 홀수이면 참이고 그렇지 않으면 거짓이다.
Content MathML
<apply><and/><ci>a</ci><ci>b</ci></apply>
<apply><and/>
<bvar><ci>i</ci></bvar>
<lowlimit><cn>0</cn></lowlimit>
<uplimit><ci>n</ci></uplimit>
<apply><gt/><apply><selector/><ci>a</ci><ci>i</ci></apply><cn>0</cn></apply>
</apply>
Strict Content MathML
<apply><csymbol cd="logic1">and</csymbol><ci>a</ci><ci>b</ci></apply>
<apply><csymbol cd="fns2">apply_to_list</csymbol>
<csymbol cd="logic1">and</csymbol>
<apply><csymbol cd="list1">map</csymbol>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>i</ci></bvar>
<apply><csymbol cd="relation1">gt</csymbol>
<apply><csymbol cd="linalg1">vector_selector</csymbol>
<ci>i</ci>
<ci>a</ci>
</apply>
<cn>0</cn>
</apply>
</bind>
<apply><csymbol cd="interval1">integer_interval</csymbol>
<cn type="integer">0</cn>
<ci>n</ci>
</apply>
</apply>
</apply>
표현 샘플(Presentation)
<mrow><mi>a</mi><mo>∧</mo><mi>b</mi></mrow>
<mrow>
<munderover>
<mo>⋀</mo>
<mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow>
<mi>n</mi>
</munderover>
<mrow>
<mo>(</mo>
<msub><mi>a</mi><mi>i</mi></msub>
<mo>></mo>
<mn>0</mn>
<mo>)</mo>
</mrow>
</mrow>
selector 요소는 벡터, 행렬 및 리스트에서 인덱싱을 수행하는 연산자이다. 하나 이상의 인자를 허용한다. 첫 번째
인자는 선택이 일어나는 벡터, 행렬 또는 리스트를 지정하고, 두 번째 및 이후의 인자들은(있다면) 어떤 종류의 선택인지 나타낸다.
selector가 단일 인수로 사용될 때, 이는 주어진 리스트, 벡터 또는 행렬의 모든 요소들의 시퀀스를 제공하는 것으로
해석되어야 합니다. 행렬의 경우 시퀀스 내 요소의 순서는 우선 열, 그 다음 행의 순으로 이해됩니다. 즉, 결과 리스트는 행렬의 각 행이 순서대로 하나씩 나열된 것입니다.
즉, 행렬 에서, 인덱스는 각각 행과 열을 나타내며, 순서는
,
, …,
,
, … 등입니다.
두 개의 인수가 주어지면, 첫 번째 인수가 벡터 또는 리스트인 경우 두 번째 인수는 리스트나 벡터에서 항목의 인덱스를 지정합니다. 첫 번째 인수가 행렬인 경우, 두 번째 인수는 행렬의 행 인덱스를 지정합니다.
세 개의 인수가 주어지면, 리스트나 벡터의 경우 마지막 인수는 무시되고, 행렬의 경우 두 번째와 세 번째 인수가 선택된 요소의 행과 열 인덱스를 지정합니다.
Content MathML
<apply><selector/><ci type="vector">V</ci><cn>1</cn></apply>
<apply><eq/>
<apply><selector/>
<matrix>
<matrixrow><cn>1</cn><cn>2</cn></matrixrow>
<matrixrow><cn>3</cn><cn>4</cn></matrixrow>
</matrix>
<cn>1</cn>
</apply>
<matrix>
<matrixrow><cn>1</cn><cn>2</cn></matrixrow>
</matrix>
</apply>
표현 샘플(Presentation)
<msub><mi>V</mi><mn>1</mn></msub>
<mrow>
<msub>
<mrow>
<mo>(</mo>
<mtable>
<mtr><mtd><mn>1</mn></mtd><mtd><mn>2</mn></mtd></mtr>
<mtr><mtd><mn>3</mn></mtd><mtd><mn>4</mn></mtd></mtr>
</mtable>
<mo>)</mo>
</mrow>
<mn>1</mn>
</msub>
<mo>=</mo>
<mrow>
<mo>(</mo>
<mtable><mtr><mtd><mn>1</mn></mtd><mtd><mn>2</mn></mtd></mtr></mtable>
<mo>)</mo>
</mrow>
</mrow>
union 요소는 집합들의 n-항 합집합을 나타내는 데 사용된다. 집합들을 인자로 받아, 그들 중 어느 하나에라도 등장하는
모든 원소를 포함하는 집합을 표시한다.
intersect 요소는 집합들의 n-항 교집합을 나타내는 데 사용된다. 집합들을 인자로 받아, 모든 집합에 공통으로
포함되는 원소들을 포함하는 집합을 표시한다.
cartesianproduct 요소는 데카르트 곱(Cartesian product) 연산자를 나타내는 데 사용된다.
인자들은 둘러싼 apply 요소 내에 명시적으로 지정되거나, 4.3.5 N-항 연산자에서 설명한 대로 한정자 요소들을 사용하여 지정될 수 있다.
Content MathML
<apply><union/><ci>A</ci><ci>B</ci></apply>
<apply><intersect/><ci>A</ci><ci>B</ci><ci>C</ci></apply>
<apply><cartesianproduct/><ci>A</ci><ci>B</ci></apply>
표현 샘플(Presentation)
<mrow><mi>A</mi><mo>∪</mo><mi>B</mi></mrow>
<mrow><mi>A</mi><mo>∩</mo><mi>B</mi><mo>∩</mo><mi>C</mi></mrow>
<mrow><mi>A</mi><mo>×</mo><mi>B</mi></mrow>
Content MathML
<apply><union/>
<bvar><ci type="set">S</ci></bvar>
<domainofapplication>
<ci type="list">L</ci>
</domainofapplication>
<ci type="set"> S</ci>
</apply>
<apply><intersect/>
<bvar><ci type="set">S</ci></bvar>
<domainofapplication>
<ci type="list">L</ci>
</domainofapplication>
<ci type="set"> S</ci>
</apply>
표현 샘플(Presentation)
<mrow><munder><mo>⋃</mo><mi>L</mi></munder><mi>S</mi></mrow>
<mrow><munder><mo>⋂</mo><mi>L</mi></munder><mi>S</mi></mrow>
벡터는 n차원 벡터 공간의 원소를 나타내는 정렬된 n-튜플이다.
행렬과의 상호작용 및 행렬 곱셈을 위해 벡터는 단일 열로 구성된 행렬과 동등한 것으로 간주되며, 벡터의 전치는 단일 행으로 구성된 행렬과 동등한 것으로 간주된다.
vector의 성분은 자식 요소로 명시적으로 주어지거나 4.3.1.1
Container Markup for Constructor
Symbols에서 설명한 규칙에 따라 규칙으로 지정될 수 있다.
Content MathML
<vector>
<apply><plus/><ci>x</ci><ci>y</ci></apply>
<cn>3</cn>
<cn>7</cn>
</vector>
표현 샘플(Presentation)
<mrow>
<mo>(</mo>
<mtable>
<mtr><mtd><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow></mtd></mtr>
<mtr><mtd><mn>3</mn></mtd></mtr>
<mtr><mtd><mn>7</mn></mtd></mtr>
</mtable>
<mo>)</mo>
</mrow>
<mrow>
<mo>(</mo>
<mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow>
<mo>,</mo>
<mn>3</mn>
<mo>,</mo>
<mn>7</mn>
<mo>)</mo>
</mrow>
행렬은 각 행(matrix row)들로 구성된 것으로 간주되며, 각 행은 특수한 유형의 벡터로 생각할 수 있다.
matrix 및 matrixrow 요소의 동작은 프리젠테이션 요소인
mtable 및 mtr와는 실질적으로 다르다는 점에 유의하라.
matrix 요소는 생성자(constructor) 요소이므로, 항목들은 자식 요소로 명시적으로 주어지거나
4.3.1.1
Container Markup for Constructor Symbols에서 설명한 규칙에 따라 규칙으로 지정될 수 있다. 후자의 경우, 항목들은
함수와 2차원 도메인 오브 애플리케이션을 제공함으로써 지정된다. 행렬의 항목들은 도메인의 점들에서 함수를 평가하여 얻은 값들에 해당한다.
matrixrow는 행렬의 문맥 밖에서는 직접 렌더링되지 않는다.
Content MathML
<matrix>
<bvar><ci type="integer">i</ci></bvar>
<bvar><ci type="integer">j</ci></bvar>
<condition>
<apply><and/>
<apply><in/>
<ci>i</ci>
<interval><ci>1</ci><ci>5</ci></interval>
</apply>
<apply><in/>
<ci>j</ci>
<interval><ci>5</ci><ci>9</ci></interval>
</apply>
</apply>
</condition>
<apply><power/><ci>i</ci><ci>j</ci></apply>
</matrix>
표현 샘플(Presentation)
<mrow>
<mo>[</mo>
<msub><mi>m</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub>
<mo>|</mo>
<mrow>
<msub><mi>m</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub>
<mo>=</mo>
<msup><mi>i</mi><mi>j</mi></msup>
</mrow>
<mo>;</mo>
<mrow>
<mrow>
<mi>i</mi>
<mo>∈</mo>
<mrow><mo>[</mo><mi>1</mi><mo>,</mo><mi>5</mi><mo>]</mo></mrow>
</mrow>
<mo>∧</mo>
<mrow>
<mi>j</mi>
<mo>∈</mo>
<mrow><mo>[</mo><mi>5</mi><mo>,</mo><mi>9</mi><mo>]</mo></mrow>
</mrow>
</mrow>
<mo>]</mo>
</mrow>
set 요소는 인자들로부터 수학적 집합을 구성하는 n-항 함수를 나타낸다. set 요소는 type 속성을 가지며 값으로 set 또는 multiset을 가질 수 있다.
구성될 집합의 원소들은 생성자의 자식 요소로 명시적으로 주어지거나 4.3.1.1 Container Markup for Constructor
Symbols에서 설명한 규칙으로 지정될 수 있다. 집합의 요소들에는 암묵적인 순서가 없다.
list 요소는 인자들로부터 리스트를 구성하는 n-항 함수를 나타낸다. 리스트는 집합과 달리 요소들에 명시적인 순서가
있다. list 요소는 order 속성을 가지며 값으로 numeric 또는 lexicographic을
가질 수 있다. 리스트의 항목과 순서는 명시적으로 주어지거나 4.3.1.1 Container Markup for Constructor Symbols에서 설명한 규칙으로 지정될
수 있다.
Content MathML
<set>
<ci>a</ci><ci>b</ci><ci>c</ci>
</set>
<list>
<ci>a</ci><ci>b</ci><ci>c</ci>
</list>
표현 샘플(Presentation)
<mrow>
<mo>{</mo><mi>a</mi><mo>,</mo><mi>b</mi><mo>,</mo><mi>c</mi><mo>}</mo>
</mrow>
<mrow>
<mo>(</mo><mi>a</mi><mo>,</mo><mi>b</mi><mo>,</mo><mi>c</mi><mo>)</mo>
</mrow>
일반적으로 집합과 리스트는 함수와 애플리케이션 도메인을 제공함으로써 구성될 수 있다. 요소들은 도메인의 점들에서 함수를 평가하여 얻어진 값들에 해당한다. 리스트에 이 방법이
사용되는 경우, 리스트 요소들의 순서가 분명하지 않을 수 있으므로 순서의 종류는 order 속성으로 지정될 수 있다.
지원되는 두 가지 순서 유형은 사전식(lexicographic)과 숫자(numeric)이다.
Content MathML
<set>
<bvar><ci>x</ci></bvar>
<condition>
<apply><lt/><ci>x</ci><cn>5</cn></apply>
</condition>
<ci>x</ci>
</set>
<list order="numeric">
<bvar><ci>x</ci></bvar>
<condition>
<apply><lt/><ci>x</ci><cn>5</cn></apply>
</condition>
</list>
<set>
<bvar><ci type="set">S</ci></bvar>
<condition>
<apply><in/><ci>S</ci><ci type="list">T</ci></apply>
</condition>
<ci>S</ci>
</set>
<set>
<bvar><ci> x </ci></bvar>
<condition>
<apply><and/>
<apply><lt/><ci>x</ci><cn>5</cn></apply>
<apply><in/><ci>x</ci><naturalnumbers/></apply>
</apply>
</condition>
<ci>x</ci>
</set>
표현 샘플(Presentation)
<mrow>
<mo>{</mo>
<mi>x</mi>
<mo>|</mo>
<mrow><mi>x</mi><mo><</mo><mn>5</mn></mrow>
<mo>}</mo>
</mrow>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>|</mo>
<mrow><mi>x</mi><mo><</mo><mn>5</mn></mrow>
<mo>)</mo>
</mrow>
<mrow>
<mo>{</mo>
<mi>S</mi>
<mo>|</mo>
<mrow><mi>S</mi><mo>∈</mo><mi>T</mi></mrow>
<mo>}</mo>
</mrow>
<mrow>
<mo>{</mo>
<mi>x</mi>
<mo>|</mo>
<mrow>
<mrow>
<mo>(</mo><mi>x</mi><mo><</mo><mn>5</mn><mo>)</mo>
</mrow>
<mo>∧</mo>
<mrow>
<mi>x</mi><mo>∈</mo><mi mathvariant="double-struck">N</mi>
</mrow>
</mrow>
<mo>}</mo>
</mrow>
MathML은 전이적 관계를 여러 인자와 함께 사용하여 a < b < c < d와 같은 관계의 체인을 자연스럽게 표현할 수 있도록 허용한다. 그러나 산술 연산자와는 달리, Strict Content MathML에서 사용되는 기본 기호들은 이진(binary)으로 분류되므로 이전 섹션에서와 같이 apply_to_list를 사용할 수는 없다. 대신 유사한 함수인 predicate_on_list가 사용되며, 그 의미는 본질적으로 도메인의 요소들에 대해 차례로 술어를 두 요소씩 적용한 결과들의 논리곱을 취하는 것이다.
요소들 eq, gt, lt, geq, leq는 각각 동치(equality)
, 보다 큼(greater than)
, 보다 앎(less
than)
, 크거나 같음(greater than or equal to)
및 작거나 같음(less than or equal to)
관계를 나타내며, 첫 번째 인자와 두 번째 인자의 관계에 따라 참 또는 거짓을 반환한다.
Content MathML
<apply><eq/>
<ci>x</ci>
<cn type="rational">2<sep/>4</cn>
<cn type="rational">1<sep/>2</cn>
</apply>
<apply><gt/><ci>x</ci><ci>y</ci></apply>
<apply><lt/><ci>y</ci><ci>x</ci></apply>
<apply><geq/><cn>4</cn><cn>3</cn><cn>3</cn></apply>
<apply><leq/><cn>3</cn><cn>3</cn><cn>4</cn></apply>
표현 샘플(Presentation)
<mrow>
<mi>x</mi>
<mo>=</mo>
<mrow><mn>2</mn><mo>/</mo><mn>4</mn></mrow>
<mo>=</mo>
<mrow><mn>1</mn><mo>/</mo><mn>2</mn></mrow>
</mrow>
<mrow><mi>x</mi><mo>></mo><mi>y</mi></mrow>
<mrow><mi>y</mi><mo><</mo><mi>x</mi></mrow>
<mrow><mn>4</mn><mo>≥</mo><mn>3</mn><mo>≥</mo><mn>3</mn></mrow>
<mrow><mn>3</mn><mo>≤</mo><mn>3</mn><mo>≤</mo><mn>4</mn></mrow>
MathML은 전이적 관계를 여러 인자와 함께 사용하여 a < b < c < d와 같은 관계의 체인을 자연스럽게 표현할 수 있도록 허용한다. 그러나 산술 연산자와는 달리, Strict Content MathML에서 사용되는 기본 기호들은 이진으로 분류되므로, 이전 섹션에서와 같이 apply_to_list를 사용할 수는 없다. 대신 유사한 함수인 predicate_on_list가 사용되며, 그 의미는 본질적으로 도메인의 요소들에 대해 차례로 술어를 두 요소씩 적용한 결과들의 논리곱을 취하는 것이다.
subset 및 prsubset 요소는 각각 부분집합(subset) 및
진부분집합(proper subset) 관계를 나타낸다. 이들은 첫 번째 인자가 두 번째 인자의 부분집합(또는 진부분집합)임을 나타내는 데 사용된다. 앞서 설명한 바와 같이,
이들 요소는 또한 n-항 연산자로 사용되어 각 인자가 이전 인자의 부분집합(또는 진부분집합)임을 표현할 수 있다.
Content MathML
<apply><subset/>
<ci type="set">A</ci>
<ci type="set">B</ci>
</apply>
<apply><prsubset/>
<ci type="set">A</ci>
<ci type="set">B</ci>
<ci type="set">C</ci>
</apply>
표현 샘플(Presentation)
<mrow><mi>A</mi><mo>⊆</mo><mi>B</mi></mrow>
<mrow><mi>A</mi><mo>⊂</mo><mi>B</mi><mo>⊂</mo><mi>C</mi></mrow>
MathML 요소 max, min 및 일부 통계 요소들(예: mean)은 앞서의 분류들처럼 n-항 함수로 사용될 수 있지만, 단일 인자가 제공되는 경우에 대해 특별한 해석이 주어진다.
만약 단일 인자가 주어지면, 함수는 그 인자가 표현하는 요소들에 적용된다.
이러한 요소들에 대응되는 Strict Content MathML의 기본 기호는 Unary이므로, MathML이 0개 또는 1개 초과의 인자와 함께 사용될 때, 함수는 명시적으로 제공된 인자들로 구성된 집합에 대해 다음 규칙에 따라 적용된다.
min 요소는 최소값 함수를 나타내며, 적용된 인자들 중 가장 작은 값을 반환한다. 인자들은 둘러싼 apply 요소 내에 명시적으로 지정되거나 4.3.5.12 N-항/단항 산술 연산자:
<min/>,
<max/>에서 설명된 한정자 요소들을 사용하여 지정될 수
있다. 무한 집합에 적용될 경우 최소 항이 존재하지 않을 수 있음을 유의하라.
max 요소는 최대값 함수를 나타내며, 적용된 인자들 중 가장 큰 값을 반환한다. 인자들은 둘러싼 apply 요소 내에 명시적으로 지정되거나 한정자 요소들을 사용하여 지정될 수 있다(위 참조). 무한 집합에 적용될 경우
최대 항이 존재하지 않을 수 있음을 유의하라.
Content MathML
<apply><min/><ci>a</ci><ci>b</ci></apply>
<apply><max/><cn>2</cn><cn>3</cn><cn>5</cn></apply>
<apply><min/>
<bvar><ci>x</ci></bvar>
<condition>
<apply><notin/><ci>x</ci><ci type="set">B</ci></apply>
</condition>
<apply><power/><ci>x</ci><cn>2</cn></apply>
</apply>
<apply><max/>
<bvar><ci>y</ci></bvar>
<condition>
<apply><in/>
<ci>y</ci>
<interval><cn>0</cn><cn>1</cn></interval>
</apply>
</condition>
<apply><power/><ci>y</ci><cn>3</cn></apply>
</apply>
표현 샘플(Presentation)
<mrow>
<mi>min</mi>
<mrow><mo>{</mo><mi>a</mi><mo>,</mo><mi>b</mi><mo>}</mo></mrow>
</mrow>
<mrow>
<mi>max</mi>
<mrow>
<mo>{</mo><mn>2</mn><mo>,</mo><mn>3</mn><mo>,</mo><mn>5</mn><mo>}</mo>
</mrow>
</mrow>
<mrow>
<mi>min</mi>
<mrow><mo>{</mo><msup><mi>x</mi><mn>2</mn></msup><mo>|</mo>
<mrow><mi>x</mi><mo>∉</mo><mi>B</mi></mrow>
<mo>}</mo>
</mrow>
</mrow>
<mrow>
<mi>max</mi>
<mrow>
<mo>{</mo><mi>y</mi><mo>|</mo>
<mrow>
<msup><mi>y</mi><mn>3</mn></msup>
<mo>∈</mo>
<mrow><mo>[</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>]</mo></mrow>
</mrow>
<mo>}</mo>
</mrow>
</mrow>
일부 통계 MathML 요소들, 예를 들어 mean 같은 요소들은 앞서의 분류들처럼 n-항 함수로 사용될 수 있으나, 단일
인자가 제공되는 경우 특별한 해석을 갖는다. 만약 단일 인자가 제공되면 함수는 그 인자가 표현하는 요소들에 적용된다.
이들 요소들에 대응되는 Strict Content MathML의 기본 기호는 Unary이므로, MathML이 0개 또는 1개 초과의 인자와 함께 사용될 때 함수는 명시적으로 제공된 인자들로 구성된 집합에 대해 다음 규칙에 따라 적용된다.
mean 요소는 데이터 집합 또는 확률변수의 산술 평균(average)을 반환하는 함수를 나타낸다.
median 요소는 인자들의 중앙값(median)을 반환하는 연산자를 나타낸다. 중앙값은 표본 값들의 하위 절반과 상위
절반을 구분하는 수이다.
mode 요소는 인자들의 최빈값(mode)을 나타내는 데 사용된다. 최빈값은 가장 빈번하게 발생하는 값이다.
sdev 요소는 데이터 집합 또는 확률변수의 표준편차(standard deviation)를 나타내는 데 사용된다.
표준편차는 분산의 제곱근으로 정의되는 산포의 통계적 측정값이다.
variance 요소는 데이터 집합 또는 확률변수의 분산(variance)을 나타낸다. 분산은 가능한 값들이 평균으로부터
벗어나는 제곱의 평균을 취하는 통계적 산포 측정값이다.
Content MathML
<apply><mean/>
<cn>3</cn><cn>4</cn><cn>3</cn><cn>7</cn><cn>4</cn>
</apply>
<apply><mean/><ci>X</ci></apply>
<apply><sdev/>
<cn>3</cn><cn>4</cn><cn>2</cn><cn>2</cn>
</apply>
<apply><sdev/>
<ci type="discrete_random_variable">X</ci>
</apply>
<apply><variance/>
<cn>3</cn><cn>4</cn><cn>2</cn><cn>2</cn>
</apply>
<apply><variance/>
<ci type="discrete_random_variable">X</ci>
</apply>
표현 샘플(Presentation)
<mrow>
<mo>⟨</mo>
<mn>3</mn><mo>,</mo><mn>4</mn><mo>,</mo><mn>3</mn>
<mo>,</mo><mn>7</mn><mo>,</mo><mn>4</mn>
<mo>⟩</mo>
</mrow>
<mrow>
<mo>⟨</mo><mi>X</mi><mo>⟩</mo>
</mrow>
<mtext> or </mtext>
<mover><mi>X</mi><mo>¯</mo></mover>
<mrow>
<mo>σ</mo>
<mo>⁡<!--ApplyFunction--></mo>
<mrow>
<mo>(</mo>
<mn>3</mn><mo>,</mo><mn>4</mn><mo>,</mo><mn>2</mn><mo>,</mo><mn>2</mn>
<mo>)</mo>
</mrow>
</mrow>
<mrow>
<mo>σ</mo>
<mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>X</mi><mo>)</mo></mrow>
</mrow>
<mrow>
<msup>
<mo>σ</mo>
<mn>2</mn>
</msup>
<mo>⁡<!--ApplyFunction--></mo>
<mrow>
<mo>(</mo>
<mn>3</mn><mo>,</mo><mn>4</mn><mo>,</mo><mn>2</mn><mo>,</mo><mn>2</mn>
<mo>)</mo>
</mrow>
</mrow>
<mrow>
<msup><mo>σ</mo><mn>2</mn></msup>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>X</mi><mo>)</mo></mrow>
</mrow>
이항 연산자는 두 개의 인수를 취하며, 특별한 재작성 규칙 없이 Rewrite: 요소를 통해 단순히 OpenMath 기호에
대응됩니다. 이항 생성자 interval는 유사하지만 인수가 요소의 자식으로 들어가는 생성자 문법을 사용하며, 사용되는 기호는
4.3.10.3 Interval <interval>에 설명된 대로 type 요소에 따라 달라집니다.
quotient 요소는 정수 나눗셈 연산자를 나타냅니다. 연산자가 정수 인수 a와 b에 적용될 때 결과는 a를 b로 나눈 몫
입니다. 즉,
정수 a와 b의 몫은 a = b *
q + r를 만족하는 정수 q이며, |r|는 |b|보다 작고 a * r가
양수입니다. 일반적으로 q는 몫이라고 하고 r는 나머지라고 합니다.
divide 요소는 수 체계에서의 나눗셈 연산자를 나타냅니다.
minus 요소는 단항 산술 연산자(예: −x를 나타내기 위해)로 사용될 수 있으며,
또는 이항 산술 연산자(예: x − y를 나타내기 위해)로 사용될 수 있습니다. 추가 예제는 4.3.7.2 단항 산술 연산자:
<factorial/>,
<abs/>,
<conjugate/>,
<arg/>,
<real/>,
<imaginary/>,
<floor/>,
<ceiling/>,
<exp/>,
<minus/>,
<root/>에 나옵니다.
power 요소는 거듭제곱 연산자를 나타냅니다. 첫 번째 인수는 두 번째 인수의 거듭제곱으로 올려집니다.
rem 요소는 첫 번째 인수를 두 번째 인수로 나눈 결과로 생기는 나머지를 반환하는 모듈로 연산자를 나타냅니다. 즉, 정수
인수 a와 b에 적용될 때 유일한 정수 r를 반환하며, 이 r는 a = b * q + r를 만족하고 |r|는 |b|보다 작고 a * r가 양수입니다.
root 요소는 근을 추출하는 데 사용됩니다. 취할 근의 종류는 degree
요소에 의해 지정되며, 이는
root 요소를 포함하는 apply 요소의 두 번째 자식으로 주어져야 합니다. 따라서 제곱근은
degree가 값 2를 포함하는 경우에 해당하고, 세제곱근은 3에 해당하며 그 외도 마찬가지입니다. 만약 degree가 없으면
기본값 2가 사용됩니다.
Content MathML
<apply><quotient/><ci>a</ci><ci>b</ci></apply>
<apply><divide/>
<ci>a</ci>
<ci>b</ci>
</apply>
<apply><minus/><ci>x</ci><ci>y</ci></apply>
<apply><power/><ci>x</ci><cn>3</cn></apply>
<apply><rem/><ci> a </ci><ci> b </ci></apply>
<apply><root/>
<degree><ci type="integer">n</ci></degree>
<ci>a</ci>
</apply>
샘플 표현
<mrow><mo>⌊</mo><mi>a</mi><mo>/</mo><mi>b</mi><mo>⌋</mo></mrow>
<mrow><mi>a</mi><mo>/</mo><mi>b</mi></mrow>
<mrow><mi>x</mi><mo>−</mo><mi>y</mi></mrow>
<msup><mi>x</mi><mn>3</mn></msup>
<mrow><mi>a</mi><mo>mod</mo><mi>b</mi></mrow>
<mroot><mi>a</mi><mi>n</mi></mroot>
implies 요소는 두 개의 불리언 표현식을 인수로 받는 논리적 함의를 나타냅니다. 첫 번째 인수가 참이고 두 번째
인수가 거짓인 경우에는 거짓으로 평가되며, 그렇지 않으면 참으로 평가됩니다.
equivalent 요소는 두 불리언 표현식이 논리적으로 동치임을 주장하는 관계를 나타냅니다. 즉, 모든 입력에 대해 같은
불리언 값을 갖는다는 것을 의미합니다.
Content MathML
<apply><implies/><ci>A</ci><ci>B</ci></apply>
<apply><equivalent/>
<ci>a</ci>
<apply><not/><apply><not/><ci>a</ci></apply></apply>
</apply>
샘플 표현
<mrow><mi>A</mi><mo>⇒</mo><mi>B</mi></mrow>
<mrow>
<mi>a</mi>
<mo>≡</mo>
<mrow><mo>¬</mo><mrow><mo>¬</mo><mi>a</mi></mrow></mrow>
</mrow>
neq 요소는 이항 부등식 관계, 즉 두 인수가 같지 않음을 나타내며 두 인수가 같지 않으면 참을 반환합니다.
approx 요소는 그 인수들이 근사적으로 같음을 주장하는 관계를 나타냅니다.
factorof 요소는 첫 번째 인수가 두 번째 인수의 인수(약수)임을 나타내는 수학적 관계를 표기하는 데 사용됩니다. 이
관계는 및 오직 그때에만 참이며, 즉 b mod a = 0일 때 참입니다.
Content MathML
<apply><neq/><cn>3</cn><cn>4</cn></apply>
<apply><approx/>
<pi/>
<cn type="rational">22<sep/>7</cn>
</apply>
<apply><factorof/><ci>a</ci><ci>b</ci></apply>
샘플 표현
<mrow><mn>3</mn><mo>≠</mo><mn>4</mn></mrow>
<mrow>
<mi>π</mi>
<mo>≃</mo>
<mrow><mn>22</mn><mo>/</mo><mn>7</mn></mrow>
</mrow>
<mrow><mi>a</mi><mo>|</mo><mi>b</mi></mrow>
tendsto 요소는 어떤 양이 특정 값으로 수렴해 간다는 관계를 표현하는 데 사용됩니다. 이는 주로 수학적 극한의
기술에서 사용되지만, 단독 구성으로도 x가 y로 수렴할 때
와 같은 수학적 진술을 캡처하거나 더 일반적인 형태의 극한을 구성하는 빌딩 블록으로 사용하기 위해
존재합니다.
tendsto 요소는 제한값이 접근되는 방향을 설정하기 위해 type 속성을 사용합니다. 이 속성은 어떤 값이라도 가질 수 있지만 일반적인 값으로는 above와 below가 있습니다.
Content MathML
<apply><tendsto type="above"/>
<apply><power/><ci>x</ci><cn>2</cn></apply>
<apply><power/><ci>a</ci><cn>2</cn></apply>
</apply>
<apply><tendsto/>
<vector><ci>x</ci><ci>y</ci></vector>
<vector>
<apply><ci type="function">f</ci><ci>x</ci><ci>y</ci></apply>
<apply><ci type="function">g</ci><ci>x</ci><ci>y</ci></apply>
</vector>
</apply>
샘플 표현
<mrow>
<msup><mi>x</mi><mn>2</mn></msup>
<mo>→</mo>
<msup><msup><mi>a</mi><mn>2</mn></msup><mo>+</mo></msup>
</mrow>
<mrow><mo>(</mo><mtable>
<mtr><mtd><mi>x</mi></mtd></mtr>
<mtr><mtd><mi>y</mi></mtd></mtr>
</mtable><mo>)</mo></mrow>
<mo>→</mo>
<mrow><mo>(</mo><mtable>
<mtr><mtd>
<mi>f</mi><mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow>
</mtd></mtr>
<mtr><mtd>
<mi>g</mi><mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow>
</mtd></mtr>
</mtable><mo>)</mo></mrow>
vectorproduct 요소는 벡터 곱(벡터적)을 나타냅니다. 이 요소는 두 개의 3차원 벡터 인수를 취하며 그 값으로
3차원 벡터를 나타냅니다.
scalarproduct 요소는 스칼라 곱(내적) 함수를 나타냅니다. 이 요소는 두 벡터 인수를 받아 스칼라 값을
반환합니다.
outerproduct 요소는 외적 함수를 나타냅니다. 이 요소는 두 벡터 인수를 받아 행렬을 반환합니다.
Content MathML
<apply><eq/>
<apply><vectorproduct/>
<ci type="vector"> A </ci>
<ci type="vector"> B </ci>
</apply>
<apply><times/>
<ci>a</ci>
<ci>b</ci>
<apply><sin/><ci>θ</ci></apply>
<ci type="vector"> N </ci>
</apply>
</apply>
<apply><eq/>
<apply><scalarproduct/>
<ci type="vector">A</ci>
<ci type="vector">B</ci>
</apply>
<apply><times/>
<ci>a</ci>
<ci>b</ci>
<apply><cos/><ci>θ</ci></apply>
</apply>
</apply>
<apply><outerproduct/>
<ci type="vector">A</ci>
<ci type="vector">B</ci>
</apply>
샘플 표현
<mrow>
<mrow><mi>A</mi><mo>×</mo><mi>B</mi></mrow>
<mo>=</mo>
<mrow>
<mi>a</mi>
<mo>⁢<!--InvisibleTimes--></mo>
<mi>b</mi>
<mo>⁢<!--InvisibleTimes--></mo>
<mrow><mi>sin</mi><mo>⁡<!--ApplyFunction--></mo><mi>θ</mi></mrow>
<mo>⁢<!--InvisibleTimes--></mo>
<mi>N</mi>
</mrow>
</mrow>
<mrow>
<mrow><mi>A</mi><mo>.</mo><mi>B</mi></mrow>
<mo>=</mo>
<mrow>
<mi>a</mi>
<mo>⁢<!--InvisibleTimes--></mo>
<mi>b</mi>
<mo>⁢<!--InvisibleTimes--></mo>
<mrow><mi>cos</mi><mo>⁡<!--ApplyFunction--></mo><mi>θ</mi></mrow>
</mrow>
</mrow>
<mrow><mi>A</mi><mo>⊗</mo><mi>B</mi></mrow>
in 요소는 집합 포함 관계를 나타냅니다. 이 요소는 요소 하나와 집합 하나의 두 인수를 가지며, 해당 요소가 주어진
집합에 속함을 나타내는 데 사용됩니다.
notin 요소는 부정된 집합 포함 관계를 나타냅니다. 이 요소는 요소 하나와 집합 하나의 두 인수를 가지며, 해당 요소가
주어진 집합에 속하지 않음을 나타내는 데 사용됩니다.
notsubset 요소는 부정된 부분집합 관계를 나타냅니다. 이는 첫 번째 인수가 두 번째 인수의 부분집합이 아님을
나타내는 데 사용됩니다.
notprsubset 요소는 부정된 진부분집합 관계를 나타냅니다. 이는 첫 번째 인수가 두 번째 인수의 진부분집합이 아님을
나타내는 데 사용됩니다.
setdiff 요소는 집합 차 연산자를 나타냅니다. 이 요소는 두 집합을 인수로 받아 첫 번째 집합에는 있지만 두 번째
집합에는 없는 모든 요소들을 포함하는 집합을 나타냅니다.
Content MathML
<apply><in/><ci>a</ci><ci type="set">A</ci></apply>
<apply><notin/><ci>a</ci><ci type="set">A</ci></apply>
<apply><notsubset/>
<ci type="set">A</ci>
<ci type="set">B</ci>
</apply>
<apply><notprsubset/>
<ci type="set">A</ci>
<ci type="set">B</ci>
</apply>
<apply><setdiff/>
<ci type="set">A</ci>
<ci type="set">B</ci>
</apply>
샘플 표현
<mrow><mi>a</mi><mo>∈</mo><mi>A</mi></mrow>
<mrow><mi>a</mi><mo>∉</mo><mi>A</mi></mrow>
<mrow><mi>A</mi><mo>⊈</mo><mi>B</mi></mrow>
<mrow><mi>A</mi><mo>⊄</mo><mi>B</mi></mrow>
<mrow><mi>A</mi><mo>∖</mo><mi>B</mi></mrow>
단항 연산자는 하나의 인수를 취하며, 특별한 재작성 규칙 없이 Rewrite: 요소를 통해 OpenMath 기호에 대응됩니다.
not 요소는 하나의 불리언 인수를 취하여 그 반대의 불리언 값을 반환하는 논리적 not 함수를
나타냅니다.
Content MathML
<apply><not/><ci>a</ci></apply>
샘플 표현
<mrow><mo>¬</mo><mi>a</mi></mrow>
<factorial/>,
<abs/>,
<conjugate/>,
<arg/>,
<real/>,
<imaginary/>,
<floor/>,
<ceiling/>,
<exp/>,
<minus/>,
<root/>
factorial 요소는 음이 아닌 정수에 대한 단항 팩토리얼 연산자를 나타냅니다.
정수 n의 팩토리얼은 n! = n×(n-1)×⋯×1로 정의됩니다.
abs 요소는 절댓값 함수를 나타냅니다. 인수는 수치적으로 값이 있어야 합니다. 인수가 복소수일 경우 절댓값은 종종
모듈러스(modulus)라고 불립니다.
conjugate 요소는 복소수에 대해 그 복소수의 켤레복소수를 반환하는 함수를 나타냅니다.
arg 요소는 복소수의 각(각도)을 반환하는 단항 함수를 나타냅니다. 즉, 수에서 0으로 그은 직선이 실수선과 이루는
각(반시계 방향으로 측정한 각)입니다.
real 요소는 복소수의 '실부'를 나타내는 표현을 구성하는 단항 연산자를 나타냅니다. 즉 x + iy에서 x 성분입니다.
imaginary 요소는 복소수의 '허수부'를 나타내는 표현을 구성하는 단항 연산자를 나타냅니다. 즉 x + iy에서 y 성분입니다.
floor 요소는 (음의 무한대로 향해) 내림(round down)하여 가장 가까운 정수로 만드는 연산을 나타냅니다. 이
함수는 하나의 실수를 인수로 취하여 정수를 반환합니다.
ceiling 요소는 (양의 무한대로 향해) 올림(round up)하여 가장 가까운 정수로 만드는 연산을 나타냅니다. 이
함수는 하나의 실수를 인수로 취하여 정수를 반환합니다.
exp 요소는 자연로그 ln의 역함수에 해당하는 지수 함수(exponential)를 나타냅니다. 하나의 인수를 가집니다.
minus 요소는 단항 산술 연산자(예: −x를 나타내기 위해)로 사용될 수 있으며,
또는 이항 산술 연산자(예: x − y를 나타내기 위해)로 사용될 수 있습니다. 추가 예제는 4.3.6.1 이항 산술 연산자:
<quotient/>,
<divide/>,
<minus/>,
<power/>,
<rem/>,
<root/>.
MathML에서 root 요소는 선택적 degree 한정자를 가지는
단항 요소로 취급되지만, 실제로는 n번째 근을 취하는 이항 연산을 나타내며 이는 4.3.6.1 이항 산술 연산자:
<quotient/>,
<divide/>,
<minus/>,
<power/>,
<rem/>,
<root/>에서 설명되어 있습니다.
Content MathML
<apply><factorial/><ci>n</ci></apply>
<apply><abs/><ci>x</ci></apply>
<apply><conjugate/>
<apply><plus/>
<ci>x</ci>
<apply><times/><cn>ⅈ</cn><ci>y</ci></apply>
</apply>
</apply>
<apply><arg/>
<apply><plus/>
<ci> x </ci>
<apply><times/><imaginaryi/><ci>y</ci></apply>
</apply>
</apply>
<apply><real/>
<apply><plus/>
<ci>x</ci>
<apply><times/><imaginaryi/><ci>y</ci></apply>
</apply>
</apply>
<apply><imaginary/>
<apply><plus/>
<ci>x</ci>
<apply><times/><imaginaryi/><ci>y</ci></apply>
</apply>
</apply>
<apply><floor/><ci>a</ci></apply>
<apply><ceiling/><ci>a</ci></apply>
<apply><exp/><ci>x</ci></apply>
<apply><minus/><cn>3</cn></apply>
샘플 표현
<mrow><mi>n</mi><mo intent="factorial">!</mo></mrow>
<mrow intent="absolute-value($x)"><mo>|</mo><mi arg="x">x</mi><mo>|</mo></mrow>
<mover intent="complex-conjugate($z)">
<mrow arg="z">
<mi>x</mi>
<mo>+</mo>
<mrow><mn>ⅈ</mn><mo>⁢<!--InvisibleTimes--></mo><mi>y</mi></mrow>
</mrow>
<mo>¯</mo>
</mover>
<mrow>
<mi intent="complex-arg">arg</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow>
<mo>(</mo>
<mrow>
<mi>x</mi>
<mo>+</mo>
<mrow><mi>i</mi><mo>⁢<!--InvisibleTimes--></mo><mi>y</mi></mrow>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
<mrow>
<mo intent="real-part">ℛ</mo>
<mo>⁡<!--ApplyFunction--></mo>
<mrow>
<mo>(</mo>
<mrow>
<mi>x</mi>
<mo>+</mo>
<mrow><mi>i</mi><mo>⁢<!--InvisibleTimes--></mo><mi>y</mi></mrow>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
<mrow>
<mo intent="imaginary-part">ℑ</mo>
<mo>⁡<!--ApplyFunction--></mo>
<mrow>
<mo>(</mo>
<mrow>
<mi>x</mi>
<mo>+</mo>
<mrow><mi>i</mi><mo>⁢<!--InvisibleTimes--></mo><mi>y</mi></mrow>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
<mrow intent="floor($x)"><mo>⌊</mo><mi arg="x">a</mi><mo>⌋</mo></mrow>
<mrow intent="ceiling($x)"><mo>⌈</mo><mi arg="x">a</mi><mo>⌉</mo></mrow>
<msup><mi>e</mi><mi>x</mi></msup>
<mrow><mo>−</mo><mn>3</mn></mrow>
determinant 요소는 인수(정방행렬)의 행렬식(determinant)을 반환하는 단항 함수에 사용됩니다.
transpose 요소는 주어진 행렬 또는 벡터의 전치(transpose)를 나타내는 단항 함수를 나타냅니다.
Content MathML
<apply><determinant/>
<ci type="matrix">A</ci>
</apply>
<apply><transpose/>
<ci type="matrix">A</ci>
</apply>
샘플 표현
<mrow><mi>det</mi><mo>⁡<!--ApplyFunction--></mo><mi>A</mi></mrow>
<msup><mi>A</mi><mi>T</mi></msup>
inverse 요소는 어떤 함수에 적용되어 그 함수의 함수적 역함수(functional inverse)를 일반적으로
표현하는 식을 구성합니다.
ident 요소는 항등 함수(identity function)를 나타냅니다. MathML은 표현된 항등 함수의 정의역과
공역에 대해 가정하지 않으며, 이는 사용되는 문맥에 따라 달라집니다.
domain 요소는 그것이 적용되는 함수의 정의역(domain)을 나타냅니다. 정의역은 함수가 정의되는 값들의 집합입니다.
codomain 요소는 적용되는 함수의 공역(codomain) 또는 치역(range)을 나타냅니다. 공역은 반드시 함수의
상(image)과 같을 필요는 없으며, 상을 포함하기만 하면 됩니다.
image 요소는 그것이 적용되는 함수의 상(image)을 나타냅니다. 함수의 상은 함수가 취하는 값들의 집합으로, 상의
모든 점은 정의역의 어떤 점에 함수를 적용하여 생성됩니다.
ln 요소는 자연로그 함수를 나타냅니다.
이 요소들은 인수에 적용되거나 단독으로 나타날 수 있으며, 단독으로 나타날 경우 다른 함수들에 작용하는 추상 연산자를 나타냅니다.
Content MathML
<apply><inverse/><ci>f</ci></apply>
<apply>
<apply><inverse/><ci type="matrix">A</ci></apply>
<ci>a</ci>
</apply>
<apply><eq/>
<apply><compose/>
<ci type="function">f</ci>
<apply><inverse/>
<ci type="function">f</ci>
</apply>
</apply>
<ident/>
</apply>
<apply><eq/>
<apply><domain/><ci>f</ci></apply>
<reals/>
</apply>
<apply><eq/>
<apply><codomain/><ci>f</ci></apply>
<rationals/>
</apply>
<apply><eq/>
<apply><image/><sin/></apply>
<interval><cn>-1</cn><cn> 1</cn></interval>
</apply>
<apply><ln/><ci>a</ci></apply>
샘플 표현
<msup><mi>f</mi><mrow><mo>(</mo><mn>-1</mn><mo>)</mo></mrow></msup>
<mrow>
<msup><mi>A</mi><mrow><mo>(</mo><mn>-1</mn><mo>)</mo></mrow></msup>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>a</mi><mo>)</mo></mrow>
</mrow>
<mrow>
<mrow>
<mi>f</mi>
<mo>∘</mo>
<msup><mi>f</mi><mrow><mo>(</mo><mn>-1</mn><mo>)</mo></mrow></msup>
</mrow>
<mo>=</mo>
<mi>id</mi>
</mrow>
<mrow>
<mrow>
<mi>domain</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>f</mi><mo>)</mo></mrow>
</mrow>
<mo>=</mo>
<mi mathvariant="double-struck">R</mi>
</mrow>
<mrow>
<mrow>
<mi>codomain</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>f</mi><mo>)</mo></mrow>
</mrow>
<mo>=</mo>
<mi mathvariant="double-struck">Q</mi>
</mrow>
<mrow>
<mrow>
<mi>image</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>sin</mi><mo>)</mo></mrow>
</mrow>
<mo>=</mo>
<mrow><mo>[</mo><mn>-1</mn><mo>,</mo><mn>1</mn><mo>]</mo></mrow>
</mrow>
<mrow><mi>ln</mi><mo>⁡<!--ApplyFunction--></mo><mi>a</mi></mrow>
card 요소는 집합을 인수로 받아 그 집합의 원소 수, 즉 기수(cardinality)를 반환하는 기수
함수(cardinality function)를 나타냅니다. 집합의 기수는 음이 아닌 정수이거나 무한 기수일 수 있습니다.
Content MathML
<apply><eq/>
<apply><card/><ci>A</ci></apply>
<cn>5</cn>
</apply>
샘플 표현
<mrow>
<mrow intent="cardinality($x)"><mo>|</mo><mi arg="x">A</mi><mo>|</mo></mrow>
<mo>=</mo>
<mn>5</mn>
</mrow>
<sin/>,
<cos/>,
<tan/>,
<sec/>,
<csc/>,
<cot/>,
<sinh/>,
<cosh/>,
<tanh/>,
<sech/>,
<csch/>,
<coth/>,
<arcsin/>,
<arccos/>,
<arctan/>,
<arccosh/>,
<arccot/>,
<arccoth/>,
<arccsc/>,
<arccsch/>,
<arcsec/>,
<arcsech/>,
<arcsinh/>,
<arctanh/>
이들 연산자 요소는 표준 삼각 함수 및 쌍곡 함수와 그 역함수를 나타냅니다. 표준적 해석이 널리 알려져 있으므로 그룹으로 다룹니다.
역함수들에 대해서는 서로 다른 정의들이 사용되므로, 상호 운용성을 최대화하기 위해 이러한 표현식을 평가하는 응용 프로그램은 [DLMF], Chapter 4: Elementary Functions의 정의를 따르는 것이 좋습니다.
Content MathML
<apply><sin/><ci>x</ci></apply>
<apply><sin/>
<apply><plus/>
<apply><cos/><ci>x</ci></apply>
<apply><power/><ci>x</ci><cn>3</cn></apply>
</apply>
</apply>
<apply><arcsin/><ci>x</ci></apply>
<apply><sinh/><ci>x</ci></apply>
<apply><arcsinh/><ci>x</ci></apply>
샘플 표현
<mrow><mi>sin</mi><mo>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
<mrow>
<mi>sin</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow>
<mo>(</mo>
<mrow><mi>cos</mi><mo>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
<mo>+</mo>
<msup><mi>x</mi><mn>3</mn></msup>
<mo>)</mo>
</mrow>
</mrow>
<mrow>
<mi>arcsin</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mi>x</mi>
</mrow>
<mtext> or </mtext>
<mrow>
<msup><mi>sin</mi><mrow><mo>-</mo><mn>1</mn></mrow></msup>
<mo>⁡<!--ApplyFunction--></mo>
<mi>x</mi>
</mrow>
<mrow><mi>sinh</mi><mo>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
<mrow>
<mi>arcsinh</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mi>x</mi>
</mrow>
<mtext> or </mtext>
<mrow>
<msup><mi>sinh</mi><mrow><mo>-</mo><mn>1</mn></mrow></msup>
<mo>⁡<!--ApplyFunction--></mo>
<mi>x</mi>
</mrow>
divergence 요소는 벡터 해석의 발산(divergence) 연산자를 나타내며 흔히 div라고 합니다. 이 함수는
벡터 값을 나타내는 스칼라 값들의 벡터를 인수로 취하여 인수의 발산을 주는 스칼라 함수를 반환합니다.
grad 요소는 벡터 해석의 그래디언트(gradient) 연산자를 나타내며 흔히 grad라고 합니다. 이 함수는 스칼라
값의 함수를 인수로 취하여 함수들의 벡터를 반환합니다.
curl 요소는 벡터 해석의 컬(curl) 함수를 나타냅니다. 이 함수는 벡터 값을 나타내는 스칼라 값들의 벡터를 인수로
취하여 함수들의 벡터를 반환합니다.
laplacian 요소는 벡터 해석의 라플라시안(Laplacian) 연산자를 나타냅니다. 라플라시안은 벡터 값을 나타내는
스칼라 값들의 벡터를 인수로 취하여 함수들의 벡터를 반환합니다.
Content MathML
<apply><divergence/><ci>a</ci></apply>
<apply><divergence/>
<ci type="vector">E</ci>
</apply>
<apply><grad/><ci type="function">f</ci></apply>
<apply><curl/><ci>a</ci></apply>
<apply><laplacian/><ci type="vector">E</ci></apply>
샘플 표현
<mrow>
<mi>div</mi><mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>a</mi><mo>)</mo></mrow>
</mrow>
<mrow>
<mi>div</mi><mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>E</mi><mo>)</mo></mrow>
</mrow>
<mtext> or </mtext>
<mrow><mo>∇</mo><mo>⋅</mo><mi>E</mi></mrow>
<mrow>
<mi>grad</mi><mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>f</mi><mo>)</mo></mrow>
</mrow>
<mtext> or </mtext>
<mrow>
<mo>∇</mo><mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>f</mi><mo>)</mo></mrow>
</mrow>
<mrow>
<mi>curl</mi><mo>⁡<!--ApplyFunction--></mo><mrow><mo>(</mo><mi>a</mi><mo>)</mo></mrow>
</mrow>
<mtext> or </mtext>
<mrow><mo>∇</mo><mo>×</mo><mi>a</mi></mrow>
<mrow>
<msup><mo>∇</mo><mn>2</mn></msup>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>E</mi><mo>)</mo></mrow>
</mrow>
좌표를 정의하는 함수들은 좌표 이름들로 정의된 표현식으로 암묵적으로 정의될 수 있으며, 이 경우 좌표 이름들은 바운드된 변수로 제공되어야 합니다.
Content MathML
<apply><divergence/>
<bvar><ci>x</ci></bvar>
<bvar><ci>y</ci></bvar>
<bvar><ci>z</ci></bvar>
<vector>
<apply><plus/><ci>x</ci><ci>y</ci></apply>
<apply><plus/><ci>x</ci><ci>z</ci></apply>
<apply><plus/><ci>z</ci><ci>y</ci></apply>
</vector>
</apply>
<apply><grad/>
<bvar><ci>x</ci></bvar>
<bvar><ci>y</ci></bvar>
<bvar><ci>z</ci></bvar>
<apply><times/><ci>x</ci><ci>y</ci><ci>z</ci></apply>
</apply>
<apply><laplacian/>
<bvar><ci>x</ci></bvar>
<bvar><ci>y</ci></bvar>
<bvar><ci>z</ci></bvar>
<apply><ci>f</ci><ci>x</ci><ci>y</ci></apply>
</apply>
샘플 표현
<mrow>
<mi>div</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mo>(</mo>
<mtable>
<mtr><mtd>
<mi>x</mi>
<mo>↦</mo>
<mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow>
</mtd></mtr>
<mtr><mtd>
<mi>y</mi>
<mo>↦</mo>
<mrow><mi>x</mi><mo>+</mo><mi>z</mi></mrow>
</mtd></mtr>
<mtr><mtd>
<mi>z</mi>
<mo>↦</mo>
<mrow><mi>z</mi><mo>+</mo><mi>y</mi></mrow>
</mtd></mtr>
</mtable>
<mo>)</mo>
</mrow>
<mrow>
<mi>grad</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow>
<mo>(</mo>
<mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>,</mo><mi>z</mi><mo>)</mo></mrow>
<mo>↦</mo>
<mrow>
<mi>x</mi>
<mo>⁢<!--InvisibleTimes--></mo>
<mi>y</mi>
<mo>⁢<!--InvisibleTimes--></mo>
<mi>z</mi>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
<mrow>
<msup><mo>∇</mo><mn>2</mn></msup>
<mo>⁡<!--ApplyFunction--></mo>
<mrow>
<mo>(</mo>
<mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>,</mo><mi>z</mi><mo>)</mo></mrow>
<mo>↦</mo>
<mrow>
<mi>f</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
moment 요소는 데이터 집합이나 확률 변수의 i번째 모멘트(i번째 moment)를 나타내는 데 사용됩니다. moment 함수는 degree 및 momentabout 한정자를 허용합니다. degree가 존재하면
모멘트의 차수(order)를 나타냅니다. 그렇지 않으면 1차 모멘트로 간주됩니다. moment와 함께 사용될 때
degree 스키마는 단일 자식을 포함하는 것으로 기대됩니다. 만약 존재하면 momentabout 스키마는 모멘트를 취하는 기준점을 나타냅니다. 그렇지 않으면 모멘트는 0에 대한 모멘트로 간주됩니다.
Content MathML
<apply><moment/>
<degree><cn>3</cn></degree>
<momentabout><mean/></momentabout>
<cn>6</cn><cn>4</cn><cn>2</cn><cn>2</cn><cn>5</cn>
</apply>
<apply><moment/>
<degree><cn>3</cn></degree>
<momentabout><ci>p</ci></momentabout>
<ci>X</ci>
</apply>
샘플 표현
<msub>
<mrow>
<mo>⟨</mo>
<msup>
<mrow>
<mo>(</mo>
<mn>6</mn><mo>,</mo>
<mn>4</mn><mo>,</mo>
<mn>2</mn><mo>,</mo>
<mn>2</mn><mo>,</mo>
<mn>5</mn>
<mo>)</mo>
</mrow>
<mn>3</mn>
</msup>
<mo>⟩</mo>
</mrow>
<mi>mean</mi>
</msub>
<msub>
<mrow>
<mo>⟨</mo>
<msup><mi>X</mi><mn>3</mn></msup>
<mo>⟩</mo>
</mrow>
<mi>p</mi>
</msub>
log 요소는 주어진 밑에 대한 로그 함수를 나타냅니다. 만약 logbase 한정자가 존재하면 그 값이 밑을 지정합니다. 그렇지 않으면 밑은 10으로 가정됩니다.
Content MathML
<apply><log/>
<logbase><cn>3</cn></logbase>
<ci>x</ci>
</apply>
<apply><log/><ci>x</ci></apply>
샘플 표현
<mrow><msub><mi>log</mi><mn>3</mn></msub><mo>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
<mrow><mi>log</mi><mo>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
int 요소는 함수에 대한 정적분 또는 부정적분, 혹은 바운드 변수를 가진 식에 대한 정적분을 나타내는 연산자 요소입니다.
콘텐츠 MathML
<apply><eq/>
<apply><int/><sin/></apply>
<cos/>
</apply>
<apply><int/>
<interval><ci>a</ci><ci>b</ci></interval>
<cos/>
</apply>
표현 예
<mrow><mrow><mi>∫</mi><mi>sin</mi></mrow><mo>=</mo><mi>cos</mi></mrow>
<mrow>
<msubsup><mi>∫</mi><mi>a</mi><mi>b</mi></msubsup><mi>cos</mi>
</mrow>
int 요소는 적분 변수로 사용되는 바운드 변수를 포함하여 사용할 수도 있습니다.
정적분은 적분 영역을 지정하는 한정자 요소를 제공함으로써 표시됩니다. lowlimit/uplimit 쌍은 아마도 정적분을 나타내는 가장 "표준적인" 표현입니다.
콘텐츠 MathML
<apply><int/>
<bvar><ci>x</ci></bvar>
<lowlimit><cn>0</cn></lowlimit>
<uplimit><cn>1</cn></uplimit>
<apply><power/><ci>x</ci><cn>2</cn></apply>
</apply>
표현 예
<mrow>
<msubsup><mi>∫</mi><mn>0</mn><mn>1</mn></msubsup>
<msup><mi>x</mi><mn>2</mn></msup>
<mi>d</mi>
<mi>x</mi>
</mrow>
diff 요소는 단일 변수의 함수나 식에 대한 미분 연산자 요소입니다. 실제 함수에 직접 적용되어 원래 함수의 도함수인
함수를 나타내거나, 단일 변수를 포함하는 식에 적용될 수 있습니다.
콘텐츠 MathML
<apply><diff/><ci>f</ci></apply>
<apply><eq/>
<apply><diff/>
<bvar><ci>x</ci></bvar>
<apply><sin/><ci>x</ci></apply>
</apply>
<apply><cos/><ci>x</ci></apply>
</apply>
표현 예
<msup><mi>f</mi><mo>′</mo></msup>
<mrow>
<mfrac>
<mrow>
<mi>d</mi><mrow><mi>sin</mi><mo>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
</mrow>
<mrow>
<mi>d</mi><mi>x</mi>
</mrow>
</mfrac>
<mo>=</mo>
<mrow><mi>cos</mi><mo>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
</mrow>
bvar 요소는 또한 취할 도함수의 차수를 지정하는 degree 요소를
포함할 수 있습니다.
콘텐츠 MathML
<apply><diff/>
<bvar><ci>x</ci><degree><cn>2</cn></degree></bvar>
<apply><power/><ci>x</ci><cn>4</cn></apply>
</apply>
표현 예
<mfrac>
<mrow>
<msup><mi>d</mi><mn>2</mn></msup>
<msup><mi>x</mi><mn>4</mn></msup>
</mrow>
<mrow><mi>d</mi><msup><mi>x</mi><mn>2</mn></msup></mrow>
</mfrac>
partialdiff 요소는 다변수 함수 또는 식에 대한 편미분 연산자 요소입니다.
함수의 편미분의 경우, 포함하는 partialdiff는 두 개의 인수를 취합니다: 첫째는 위치로서 어떤 함수 인수가 편미분
구성에 관여하는지를 나타내는 지수 목록이고, 둘째는 실제로 편미분할 함수입니다. 지수들은 반복될 수 있습니다.
콘텐츠 MathML
<apply><partialdiff/>
<list><cn>1</cn><cn>1</cn><cn>3</cn></list>
<ci type="function">f</ci>
</apply>
<apply><partialdiff/>
<list><cn>1</cn><cn>1</cn><cn>3</cn></list>
<lambda>
<bvar><ci>x</ci></bvar>
<bvar><ci>y</ci></bvar>
<bvar><ci>z</ci></bvar>
<apply><ci>f</ci><ci>x</ci><ci>y</ci><ci>z</ci></apply>
</lambda>
</apply>
표현 예
<mrow>
<msub>
<mi>D</mi>
<mrow><mn>1</mn><mo>,</mo><mn>1</mn><mo>,</mo><mn>3</mn></mrow>
</msub>
<mi>f</mi>
</mrow>
<mfrac>
<mrow>
<msup><mo>∂</mo><mn>3</mn></msup>
<mrow>
<mi>f</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>,</mo><mi>z</mi><mo>)</mo></mrow>
</mrow>
</mrow>
<mrow>
<mrow><mo>∂</mo><msup><mi>x</mi><mn>2</mn></msup></mrow>
<mrow><mo>∂</mo><mi>z</mi></mrow>
</mrow>
</mfrac>
대수식의 경우, 바운드 변수들은 포함하는 apply 요소의 자식인 bvar 요소들로 주어집니다. 이 bvar 요소들은 또한 각 변수에 대해
취할 편미분의 차수를 지정하는 degree 요소를 포함할 수 있습니다.
전체 미분 차수(total degree)를 지정해야 하는 경우, 이는 포함하는 apply 요소의 자식으로서, 특정
bvar와 연관되지 않은 최상위 수준의 degree 요소를 사용하여
표시됩니다.
콘텐츠 MathML
<apply><partialdiff/>
<bvar><ci>x</ci></bvar>
<bvar><ci>y</ci></bvar>
<apply><ci type="function">f</ci><ci>x</ci><ci>y</ci></apply>
</apply>
<apply><partialdiff/>
<bvar><ci>x</ci><degree><ci>m</ci></degree></bvar>
` <bvar><ci>y</ci><degree><ci>n</ci></degree></bvar>
<degree><ci>k</ci></degree>
<apply><ci type="function">f</ci>
<ci>x</ci>
<ci>y</ci>
</apply>
</apply>
표현 예
<mfrac>
<mrow>
<msup><mo>∂</mo><mn>2</mn></msup>
<mrow>
<mi>f</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow>
</mrow>
</mrow>
<mrow>
<mrow><mo>∂</mo><mi>x</mi></mrow>
<mrow><mo>∂</mo><mi>y</mi></mrow>
</mrow>
</mfrac>
<mfrac>
<mrow>
<msup><mo>∂</mo><mi>k</mi></msup>
<mrow>
<mi>f</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow>
</mrow>
</mrow>
<mrow>
<mrow><mo>∂</mo><msup><mi>x</mi><mi>m</mi></msup>
</mrow>
<mrow><mo>∂</mo><msup><mi>y</mi><mi>n</mi></msup></mrow>
</mrow>
</mfrac>
상수 기호는 e, true 같은 수학적 상수와 실수 집합, 정수 집합과 같은 집합의 이름을 나타냅니다. Strict Content MathML에서는 이들 요소가 Arithmetic Constants와 Set Theory Constants의 구문 표에 나열된 해당 기호로 단순히 재작성됩니다.
<exponentiale/>,
<imaginaryi/>,
<notanumber/>,
<true/>,
<false/>,
<pi/>,
<eulergamma/>,
<infinity/>
요소
<exponentiale/>,
<imaginaryi/>,
<notanumber/>,
<true/>,
<false/>,
<pi/>,
<eulergamma/>,
<infinity/>
는 각각 다음을 나타냅니다:
자연로그의 밑, 대략 2.718;
-1의 제곱근으로 보통 i로 표기됨;
not-a-number, 즉 부적절한 부동 소수점 계산의 결과 (참조 [IEEE754]);
불리언 값 true;
불리언 값 false;
원주와 지름의 비율인 파이(π), 대략 3.142;
감마 상수(γ), 대략 0.5772;
무한대 (∞).
Content MathML
<apply><eq/><apply><ln/><exponentiale/></apply><cn>1</cn></apply>
<apply><eq/><apply><power/><imaginaryi/><cn>2</cn></apply><cn>-1</cn></apply>
<apply><eq/><apply><divide/><cn>0</cn><cn>0</cn></apply><notanumber/></apply>
<apply><eq/><apply><or/><true/><ci type="boolean">P</ci></apply><true/></apply>
<apply><eq/><apply><and/><false/><ci type="boolean">P</ci></apply><false/></apply>
<apply><approx/><pi/><cn type="rational">22<sep/>7</cn></apply>
<apply><approx/><eulergamma/><cn>0.5772156649</cn></apply>
<infinity/>
표현 예
<mrow>
<mrow><mi>ln</mi><mo>⁡<!--ApplyFunction--></mo><mi>e</mi></mrow>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow><msup><mi>i</mi><mn>2</mn></msup><mo>=</mo><mn>-1</mn></mrow>
<mrow>
<mrow><mn>0</mn><mo>/</mo><mn>0</mn></mrow>
<mo>=</mo>
<mi>NaN</mi>
</mrow>
<mrow>
<mrow><mi>true</mi><mo>∨</mo><mi>P</mi></mrow>
<mo>=</mo>
<mi>true</mi>
</mrow>
<mrow>
<mrow><mi>false</mi><mo>∧</mo><mi>P</mi></mrow>
<mo>=</mo>
<mi>false</mi>
</mrow>
<mrow>
<mi>π</mi>
<mo>≃</mo>
<mrow><mn>22</mn><mo>/</mo><mn>7</mn></mrow>
</mrow>
<mrow>
<mi>γ</mi><mo>≃</mo><mn>0.5772156649</mn>
</mrow>
<mi>∞</mi>
<integers/>,
<reals/>,
<rationals/>,
<naturalnumbers/>,
<complexes/>,
<primes/>,
<emptyset/>
이 요소들은 표준적인 수의 집합인 정수, 실수, 유리수, 자연수(0 포함), 복소수, 소수 집합 및 공집합을 나타냅니다.
Content MathML
<apply><in/><cn type="integer">42</cn><integers/></apply>
<apply><in/><cn type="real">44.997</cn><reals/></apply>
<apply><in/><cn type="rational">22<sep/>7</cn><rationals/></apply>
<apply><in/><cn type="integer">1729</cn><naturalnumbers/></apply>
<apply><in/><cn type="complex-cartesian">17<sep/>29</cn><complexes/></apply>
<apply><in/><cn type="integer">17</cn><primes/></apply>
<apply><neq/><integers/><emptyset/></apply>
표현 예
<mrow>
<mn>42</mn><mo>∈</mo><mi mathvariant="double-struck">Z</mi>
</mrow>
<mrow>
<mn>44.997</mn><mo>∈</mo><mi mathvariant="double-struck">R</mi>
</mrow>
<mrow>
<mrow><mn>22</mn><mo>/</mo><mn>7</mn></mrow>
<mo>∈</mo>
<mi mathvariant="double-struck">Q</mi>
</mrow>
<mrow>
<mn>1729</mn><mo>∈</mo><mi mathvariant="double-struck">N</mi>
</mrow>
<mrow>
<mrow>
<mn>17</mn><mo>+</mo><mn>29</mn><mo>⁢<!--InvisibleTimes--></mo><mi>i</mi>
</mrow>
<mo>∈</mo>
<mi mathvariant="double-struck">C</mi>
</mrow>
<mrow>
<mn>17</mn><mo>∈</mo><mi mathvariant="double-struck">P</mi>
</mrow>
<mrow>
<mi mathvariant="double-struck">Z</mi><mo>≠</mo><mi>∅</mi>
</mrow>
forall 및 <exists/>
요소는 전체(모든
) 및 존재(존재한다
)
수량자를 나타내며, 하나 이상의 유계 변수와
수량화되는 명제를 지정하는 인수를 받습니다.
또한 condition 또는 기타 한정자를 사용하여
유계 변수의 영역을 제한할 수 있습니다.
콘텐츠 MathML
<bind><forall/>
<bvar><ci>x</ci></bvar>
<apply><eq/>
<apply><minus/><ci>x</ci><ci>x</ci></apply>
<cn>0</cn>
</apply>
</bind>
샘플 표현
<mrow>
<mo>∀</mo>
<mi>x</mi>
<mo>.</mo>
<mrow>
<mo>(</mo>
<mrow>
<mrow><mi>x</mi><mo>−</mo><mi>x</mi></mrow>
<mo>=</mo>
<mn>0</mn>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
콘텐츠 MathML
<bind><exists/>
<bvar><ci>x</ci></bvar>
<apply><eq/>
<apply><ci>f</ci><ci>x</ci></apply>
<cn>0</cn>
</apply>
</bind>
샘플 표현
<mrow>
<mo>∃</mo>
<mi>x</mi>
<mo>.</mo>
<mrow>
<mo>(</mo>
<mrow>
<mrow>
<mi>f</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
</mrow>
<mo>=</mo>
<mn>0</mn>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
콘텐츠 MathML
<apply><exists/>
<bvar><ci>x</ci></bvar>
<domainofapplication>
<integers/>
</domainofapplication>
<apply><eq/>
<apply><ci>f</ci><ci>x</ci></apply>
<cn>0</cn>
</apply>
</apply>
Strict MathML 동등식:
<bind><csymbol cd="quant1">exists</csymbol>
<bvar><ci>x</ci></bvar>
<apply><csymbol cd="logic1">and</csymbol>
<apply><csymbol cd="set1">in</csymbol>
<ci>x</ci>
<csymbol cd="setname1">Z</csymbol>
</apply>
<apply><csymbol cd="relation1">eq</csymbol>
<apply><ci>f</ci><ci>x</ci></apply>
<cn>0</cn>
</apply>
</apply>
</bind>
샘플 표현
<mrow>
<mo>∃</mo>
<mi>x</mi>
<mo>.</mo>
<mrow>
<mo>(</mo>
<mrow>
<mi>x</mi><mo>∈</mo><mi mathvariant="double-struck">Z</mi>
</mrow>
<mo>∧</mo>
<mrow>
<mrow>
<mi>f</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
</mrow>
<mo>=</mo>
<mn>0</mn>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
lambda 요소는 표현식, 유계 변수, 한정자로부터 사용자 정의 함수를 구성하는데 사용됩니다.
n (0일 수도 있음)개의 유계 변수를 가진 람다 구조에서, 처음 n개의 하위 요소는 변수들의 실제
인자값을 위한 대입 변수임을 나타내는 bvar 요소입니다.
유계 변수들은 선택적 domainofapplication 한정자나 그 약식 표기들에 의해 제한될 수 있습니다.
lambda 구조는 유계 변수들이 각 인수로 치환된 마지막 하위 요소의 식을 반환하는 n항 함수입니다.
domainofapplication 하위 요소는 생성된 함수의 인자가 될 수 있는 값을 제한합니다. 예를 들어, 다음
lambda 구조는 정수에서 정의된 함수입니다.
<lambda>
<bvar><ci> x </ci></bvar>
<domainofapplication><integers/></domainofapplication>
<apply><sin/><ci> x </ci></apply>
</lambda>
lambda 구조가 유계 변수를 포함하지 않으면, lambda 구조는
불필요하므로 제거할 수 있습니다.
단, domainofapplication 구조를 포함하는 경우에는 예외입니다.
이때 lambda 구조의 마지막 하위 요소가 함수인 경우, domainofapplication은 기존 함수 인자들에 대한 제한이 되며,
이는 위에 제시한 함수의 변형 표현입니다.
<lambda>
<domainofapplication><integers/></domainofapplication>
<sin/>
</lambda>
그 외에 lambda 구조의 마지막 자식이 함수가 아니라 예를 들어 숫자라면, lambda 구조는 함수가 아니라 해당 숫자와 같게 되며, 어떤 domainofapplication도 무시됩니다.
콘텐츠 MathML
<lambda>
<bvar><ci>x</ci></bvar>
<apply><sin/>
<apply><plus/><ci>x</ci><cn>1</cn></apply>
</apply>
</lambda>
샘플 표현
<mrow>
<mi>λ</mi>
<mi>x</mi>
<mo>.</mo>
<mrow>
<mo>(</mo>
<mrow>
<mi>sin</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow>
</mrow>
<mo>)</mo>
</mrow>
</mrow>
<mtext> 또는 </mtext>
<mrow>
<mi>x</mi>
<mo>↦</mo>
<mrow>
<mi>sin</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow>
</mrow>
</mrow>
interval 요소는 실수선의 단순한 수학적 구간을 나타내는 데 사용되는 컨테이너 요소입니다. 이 요소는 선택적 속성
closure를 가지며, 그 값으로 open,
closed, open-closed 또는
closed-open 중 하나를 취할 수 있고, 기본값은 closed입니다.
다음에서 설명한 바와 같이
4.3.3.1
<domainofapplication>, <interval>, <condition>, <lowlimit> 및
<uplimit>의 사용, interval은 bvar 바로 뒤에 오는 경우 한정자(qualifier)로 해석됩니다.
콘텐츠 MathML
<interval closure="open"><ci>x</ci><cn>1</cn></interval>
<interval closure="closed"><cn>0</cn><cn>1</cn></interval>
<interval closure="open-closed"><cn>0</cn><cn>1</cn></interval>
<interval closure="closed-open"><cn>0</cn><cn>1</cn></interval>
샘플 표현
<mrow><mo>(</mo><mi>x</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow>
<mrow><mo>[</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>]</mo></mrow>
<mrow><mo>(</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>]</mo></mrow>
<mrow><mo>[</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>)</mo></mrow>
limit 요소는 수열의 극한을 취하는 연산을 나타냅니다. 극한점은 lowlimit과 bvar를 지정함으로써 표현하거나, 하나 이상의 유계
변수에 대한 condition을 지정하여 표현할 수 있습니다.
극한값에 접근하는 방향은 Strict Content MathML의 limit 인자로 주어지며, 이를 위해 both_sides, above, 및 below 기호를 제공합니다. 이는 type 속성의 값인 all, above, 및 below에 대응합니다. null 기호는 type 속성이 없는 경우를 나타냅니다.
콘텐츠 MathML
<apply><limit/>
<bvar><ci>x</ci></bvar>
<lowlimit><cn>0</cn></lowlimit>
<apply><sin/><ci>x</ci></apply>
</apply>
<apply><limit/>
<bvar><ci>x</ci></bvar>
<condition>
<apply><tendsto/><ci>x</ci><cn>0</cn></apply>
</condition>
<apply><sin/><ci>x</ci></apply>
</apply>
<apply><limit/>
<bvar><ci>x</ci></bvar>
<condition>
<apply><tendsto type="above"/><ci>x</ci><ci>a</ci></apply>
</condition>
<apply><sin/><ci>x</ci></apply>
</apply>
샘플 표현
<mrow>
<munder>
<mi>lim</mi>
<mrow><mi>x</mi><mo>→</mo><mn>0</mn></mrow>
</munder>
<mrow><mi>sin</mi><mo>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
</mrow>
<mrow>
<munder>
<mi>lim</mi>
<mrow><mi>x</mi><mo>→</mo><mn>0</mn></mrow>
</munder>
<mrow><mi>sin</mi><mo>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
</mrow>
<mrow>
<munder>
<mi>lim</mi>
<mrow><mi>x</mi><mo>→</mo><msup><mi>a</mi><mo>+</mo></msup></mrow>
</munder>
<mrow><mi>sin</mi><mo>⁡<!--ApplyFunction--></mo><mi>x</mi></mrow>
</mrow>
참조된 piecewise, piece, 및 otherwise 요소들은 다음과 같은 형태의 '조각함수'(piecewise) 정의를 표현하는 데 사용됩니다:
H(x) = 0 if x less than 0, H(x) = 1 otherwise
.
선언은 piecewise 요소를 사용하여 구성됩니다. 이 요소는 0개 이상의 piece 요소를 포함할 수 있고, 선택적으로 하나의 otherwise
요소를 포함할 수 있습니다. 각 piece 요소는 정확히 두 개의 자식 요소를 가지며, 첫 번째 자식은 해당 piece의 두 번째 자식(조건)이 참일 때 piecewise 표현식이
취하는 값을 정의합니다. piece 요소도 없고 otherwise
요소도 없는 특수한 경우는 정의역의 모든 값에 대해 정의되지 않은 것으로 취급됩니다.
otherwise 요소는 piece 요소들의 두 번째 자식들(조건) 중
어느 것도 참이 아닐 때 piecewise 함수가 취할 값을 지정할 수 있도록 합니다. 즉 기본값을 지정합니다.
실행 순서
는 piecewise 내부의 piece 자식
요소들의 정렬 순서로부터 암시되지 않는다는 점에 유의해야 합니다. 함수 정의역의 부분집합(각 piece 요소의 두 번째
자식으로 정의된 것들)이 서로 겹치지 않도록 하거나, 겹치는 경우에는 해당 첫 번째 자식들의 값들이 일치하도록 하는 것은 작성자의 책임입니다. 그렇지 않으면 표현식의 의미는
정의되지 않습니다.
콘텐츠 MathML
<piecewise>
<piece>
<apply><minus/><ci>x</ci></apply>
<apply><lt/><ci>x</ci><cn>0</cn></apply>
</piece>
<piece>
<cn>0</cn>
<apply><eq/><ci>x</ci><cn>0</cn></apply>
</piece>
<piece>
<ci>x</ci>
<apply><gt/><ci>x</ci><cn>0</cn></apply>
</piece>
</piecewise>
샘플 표현
<mrow>
<mo>{</mo>
<mtable>
<mtr>
<mtd><mrow><mo>−</mo><mi>x</mi></mrow></mtd>
<mtd columnalign="left"><mtext>  if  </mtext></mtd>
<mtd><mrow><mi>x</mi><mo><</mo><mn>0</mn></mrow></mtd>
</mtr>
<mtr>
<mtd><mn>0</mn></mtd>
<mtd columnalign="left"><mtext>  if  </mtext></mtd>
<mtd><mrow><mi>x</mi><mo>=</mo><mn>0</mn></mrow></mtd>
</mtr>
<mtr>
<mtd><mi>x</mi></mtd>
<mtd columnalign="left"><mtext>  if  </mtext></mtd>
<mtd><mrow><mi>x</mi><mo>></mo><mn>0</mn></mrow></mtd>
</mtr>
</mtable>
</mrow>
MathML은 보조 기술(AT)에서 널리 채택되었습니다.
그러나 수학 표기법은 모호할 수 있어 일부 경우 AT가 어떻게 발화해야 하는지 추측하게 될 수 있습니다.
MathML 4에서는 작성자가 자신의 의도를 표현할 수 있는 간편한 방법을 추가했습니다: intent 속성입니다.
이 속성은 aria-label
속성과 유사하지만
중요한 차이점들이 있습니다.
접근성 측면에서 가장 큰 차이는 intent가
점자 생성에 영향을 주지 않는다는 점입니다.
대부분의 언어에는 수학에 특화된 별도의 점자 코드가 있어서,
음성에 사용되는 단어가 점자 생성에 영향을 받아서는 안 됩니다.
영어와 같은 일부 언어는 둘 이상의 수학 점자 코드를 가지고 있기 때문에
작성자가 독자가 원하는 점자 코드를 알 수 없습니다.
따라서 작성자가 그 요소의 (수학) 점자를 알고 있다 하더라도,
aria-label을
제안된 aria-braillelabel로 대체할 수 없습니다.
왜냐하면 어떤 코드를 써야 할지 알 수 없기 때문입니다.
2.1.6 모든 MathML 요소가 공유하는 속성에서 설명한 것처럼,
MathML 요소는 intent와 arg 속성을 허용하며,
용어의 intent
를 지정할 수
있습니다.
이 주석은 용어에 대한 완전한 수학적 정의를 제공하기 위한 것이 아닙니다.
주로 AT가 오디오나 점자 렌더링을 생성하는 데 도움이 되는 것입니다. 상세 내용은 C. MathML 접근성을 참고하세요.
그럼에도 불구하고 Content MathML로의 번역이나 계산 시스템의 안내에도 도움이 될 수 있습니다.
intent 속성 값은
의도한 발화(음성)를 나타내는 간단한 함수형 문법을 인코딩합니다.
아래에 형식 문법이 제시되어 있으며, 대표적인 예로
intent="power($base,$exponent)"가 다음과 같은 맥락에서 사용될 수 있습니다:
<msup intent="power($base,$exp)">
<mi arg="base">x</mi>
<mi arg="exp">n</mi>
</msup>
intent 값을 power($base,$exp)로 하면
작성자가 이 수식이 지수승(제곱)을 의미한다는 의도를 명확히 나타내게 됩니다.
power는 AT에서 지원하는 개념이기 때문에,
맥락, 인자 혹은 기타 세부 사항에 따라 서로 다른 발화 방식이 선택될 수 있습니다.
예를 들어 위의 수식은 "x의 n승"으로 읽힐 수 있고,
만약 "n" 대신 "2"가 주어진다면 "x의 제곱"이라고 할 수 있습니다.
intent 속성의 값은 아래 문법을 따라야 합니다.
intent := self-property-list | expression
self-property-list := property+ S
expression := S ( term property* ) S
term := concept-or-literal | number | reference | application
concept-or-literal := NCName
number := '-'? \d+ ( '.' \d+ )?
reference := '$' NCName
application := expression '(' arguments? S ')'
arguments := expression ( ',' expression )*
property := S ':' NCName
S := [ \t\n\r]*
여기서 NCName
는 [xml-names]에서 정의되어 있으며,
digit은 0–9 범위의 문자입니다.
세부 구성은 다음과 같습니다:
NCName 규칙에 따라야 합니다.
concept-or-literal은 concept나 literal로
해석됩니다.
concept는 수학 또는 응용분야 고유의 함수나 개념을 의미합니다. 많은 개념의 경우, 언급될 때 사용하는 단어와 개념의 이름이 유사합니다.
literal은
(U+00F5)로 시작하는 이름입니다.
이러한 이름은 Intent Concept
Dictionary에
포함되지 않습니다.
literal의 읽기 방식은 이름의
_-, _, .을
공백으로 대체한 뒤 그 문구를 그대로 읽어주는 것입니다.
2.5와 같은 값은 그 값을 그대로 나타냅니다.
$name와 같이 인자를 참조하며,
하위 요소 중 arg="name" 속성을 가진 요소를 가리킵니다.
id 속성과 달리,
arg 속성은
문서 내에서 반드시 고유할 필요는 없습니다. 일치하는 요소를 검색할 때에는,
하위 요소만을 대상으로 하며, 중간에 intent나
arg가 설정된 요소를 만나면 그 이후로는 탐색하지 않습니다.
적절한 reference를 사용하면,
수학 구조를 탐색할 때 의도를 제대로 전달할 수 있습니다. 동등한 literal을 직접 삽입하는 것보다 더 효과적입니다.
:infix처럼 직접적으로 발화 형태에 관련될 수도 있고,
:unit이나 :chemistry같이 간접적으로 발화 스타일에 영향을 줄 수도 있습니다.
각 시스템에서 지원하는 특성 목록은 개방적이지만 아래에 설명된 핵심 특성은 반드시 포함해야 합니다.
intent를 지원하는 모든 AT 시스템에는,
적어도 암묵적으로 인식하는 개념 목록이 포함됩니다.
개념 이름의 일치 및 사용 세부 사항은 5.4 의도 개념 및 속성
사용하기에서 설명됩니다.
그러한 AT는 아래에서 논의된 핵심 목록의 개념을 인식해야 합니다;
또한 오픈 목록의 개념을 포함하거나,
자체적인 개념을 포함할 수도 있습니다.
의도 개념
사전
은 개념 이름을 해당 개념의 음성, 텍스트 또는 점자에 매핑하는 추상적 구조입니다;
이는 MathML 렌더러가 사용하는 B.
연산자 사전과 유사하며, 기본값 집합을 제공하여 렌더러가 인지할 수 있게 합니다.
property는 연산자 사전의 form 사용과도 유사성이 있으며,
일치할 때 고정성 속성(prefix, infix 등)을 사용합니다.
의도 개념 이름들은 각기 두 가지 목록으로 관리되며, w3c/mathml-docs GitHub 저장소에서 유지됩니다. 이러한 개념 사전이 HTML 테이블(기반 데이터는 yaml)로 제공되지만, 시스템에서 개념과 음성 힌트의 매핑을 어떻게 구현하는지에 대한 요구 사항은 없습니다. 고정 목록 또는 해시 테이블뿐만 아니라 XPath 일치, 정규식, 적합하게 학습된 생성형 AI 또는 그 밖의 적합한 메커니즘을 사용할 수 있습니다. 유일한 요구는 핵심 개념 사전에 포함된 사례들에 대해 수용 가능한 음성 힌트를 생성해야 한다는 점입니다.
divide,
power,
greater-than등과 같은 일반적인 개념들이 포함됩니다. 수록된 항목들은 여러 AT 구현 경험과 [Concept-Lists]가 제시한 지침에 따라 Math Working Group에서 큐레이팅합니다.
NCName에 해당되는 임의의 문자열을 사용할 수 있습니다.
향후 핵심
개념 목록의 새 버전에서는
사용 현황에 따라 오픈
목록의 이름이 포함될 수 있습니다.
MathML에서 사용할 수 있는 유니코드 문자는 수천 가지입니다. 구현자에게 도움이 되도록, 같은 저장소에서 음성 템플릿 비권장 목록을 제공하며, 많은 문자에 대해 추천되는 음성 예시를 담고 있습니다.
의도 속성은
intent 속성이 생성했을 음성 또는 점자를 수정하는 역할을 합니다.
대부분의 속성은 특정 맥락에서만 정의된 효과를 갖는데,
예시로 application의 헤드나
<mtable>에 적용될 수 있습니다.
이러한 속성이 다른 맥락에서 사용되어도 오류는 아니나,
기본적으로는 무시되지만 시스템별로 효과가 있을 수도 있습니다.
개념 목록과 유사하게, Working Group은 속성 목록을 관리하며, 구현하는 속성 값들을 정리합니다.
아래에 음성 생성에 영향을 주는 주요 속성 유형을 설명합니다.
:prefix,
:infix, :postfix,
:function, :silent
함수 application에서
이러한 속성을 사용하면 이름의 읽기를 생략하거나 단어 순서를 변경할 수 있습니다.
:prefix, :infix, :postfix는
이름과 인자의 음성 단어 순서를 지정하며,
표시되는 수식의 기호 순서와는 반드시 같지 않을 수도 있습니다.
union은 핵심 목록에 "$1 union $2" 및 "union of $1 and $2" 발화 패턴을 가집니다.
intent union :prefix ($a,$b)는 후자의 스타일을 선호한다는 의미입니다.
f :prefix ($x) : f x
f :infix ($x,y) : x f y
f :postix ($x) : x f
f :function ($x, $y): f of x and y
f :silent ($x,$y) : x y
f:function($x, $y)는 f of x comma y로도 발화될 수 있습니다. 이러한 속성이 사용되지 않은 경우,
function 속성을 기본으로 적용하지만,
해당 literal이 silent(예: _)라면 :silent 속성을 기본으로 적용합니다.
예제는 5.7
literal과
property 관련 경고에서 확인하세요.
:literal, :common, :legacy이러한 속성은 전체 음성 스타일을 조정합니다. 자세한 설명은 별도의 문서에서 볼 수 있습니다.
:literal은 AT가 어떠한 의미도 추론하지 않고
요소를 있는 그대로 읽게 하며(리프 콘텐츠 포함: 예 |
는 vertical bar
등),
:common은 특정 휴리스틱을 사용하여 흔한 표기법의 의도를 추론할 수 있습니다.
:legacy는 시스템별 동작을 요청합니다.
:matrix,
:system-of-equations, :lines, :continued-row,
:equation-label
이러한 속성은 mtable 또는
참조(reference)의 mtable, mtr,
mtd에서 사용할 수 있습니다.
정렬되는 부분이 발화되는 방식을 조정합니다.
구체적 단어는 시스템별로 다를 수 있습니다.
:matrix
행렬에 적합한 스타일로 읽어야 하며, 일반적으로
열 번호가 알림됩니다.:system-of-equations는 식(및 부등식) 스타일에 맞게 읽으며,
일반적으로 열 번호는 알리지 않습니다. 각 테이블 행은
보통 "식"으로 발음되며, continued-row 속성이 있는 mtr은
이전 행에서 이어진 식임을 의미합니다.
:equation-label은 mtd에 사용하여 식 라벨이 포함된 셀임을 표시합니다.:pause-short, :pause-medium,
:pause-long, :pause-xlong
:use-argnamearg를 가질 때 셀프 속성(self-property)으로 사용하면,
사용자가 해당 자식 요소로 이동할 때 AT가 arg의 값을(필요시 번역해서) 발화하게 합니다.
특정 노드에 해당하는 intent 속성에 개념 요소가 있으면,
AT의 의도 개념 사전을 참조해야 합니다.
개념 이름은 정규화되어야 합니다
(
(U+00F5) 및 _
(U+002E)는 .
(U+002D)로),
그리고 ASCII
대소문자 구분 없이 비교해야 합니다. -intent에서 인자가 명시적으로 주어진 경우,
인자의 수는 아리티(arity)를 의미하며,
고정성(fixity)은 명시적 속성이나 개념 사전에서 기본값이 결정됩니다.
그렇지 않으면 아리티는 0으로 간주됩니다.
개념은 정규화된 이름, 고정성 속성, 아리티가
AT의 개념 사전의 항목과 모두 일치하면 지원되는 개념으로 간주됩니다.
이는 추가 개념이나 여러 아리티, 고정성, 별칭을 지원하는 구현도 배제하지 않으며,
적절하게 매핑되기만 하면 됩니다.
일치하는 항목의 음성 힌트는
특정 오디오, 대체 텍스트, 점자 렌더링을
생성하는 가이드로 사용할 수 있습니다.
인자 순서 명확화에도 도움을 줄 수 있습니다.
그러나 흔한 표기법에는 다양한 전용 발화 방식이 있으므로,
AT는 힌트 자체로만 제한되지 않습니다. 예를 들어 AT는
<mfrac>로 마크업된 분수를
삼사분의 일
또는 x분의 3
으로 읽을 수도 있고,
<mo>/</mo>로 인라인 분수를
x 나누기 3
으로 읽을 수도 있습니다.
선택은 의도 키(intent="divide($num,$denom)")의
내용과 캐리어 요소에 따라 달라질 수 있습니다.
고정성을 지정하는 속성 외에도 다양한 렌더링 방식을
나타내는 속성도 있다는 점을 유의하세요.
반대로, 개념 이름, 고정성, 아리티가 일치하지 않으면
비지원
개념으로 취급하며,
literal과 동일하게 처리합니다;
즉, 이름은 각 -, _, .를
단어 사이 공백으로 정규화한 후 그대로 읽습니다.
비지원 개념이라도 고정성 속성 및 인자가 있으면
인자에 대한 발화는 고정성에 맞게
조합되어야 합니다(가능할 경우).
향후 AT의 업데이트로 의도 개념 사전에 개념이 추가되거나 삭제될 수 있습니다. 즉, 지원하는 개념은 항상 업데이트마다 달라질 수 있습니다.
intent에 명시적 또는 추론 가능한 개념이 없는 경우
AT는 일반적으로 MathML을 :literal 속성처럼
리터럴 또는 구조적으로 읽어야 합니다.
그러나 주어진 속성은 가능하다면 존중되어야 하며,
명확한 개념 이름을
명시적으로 읽지 않고 수학적 객체 유형을 나타내는 데
도움이 될 수 있습니다.
특히 intent에 자식을 명시적으로 참조할 필요 없이
자식들을 추론할 수 있으므로 테이블과 같은 큰 구조에
유용한 방법입니다.
예를 들어, <mtable intent=":array">...는
테이블을 값의 배열로 읽을 수 있고,
<mtable intent=":system-of-equations">...는
방정식 목록에 적합한 스타일로 읽을 수 있습니다. 두 경우 모두
기본 테이블 탐색은 AT 시스템이 제공하며, 주석 없는 테이블과
동일하게 처리됩니다.
일반적으로, 리더 또는 AT에 따라
청자에게 전달을 명확히 하기 위해
추가 단어나 소리를 넣을 수 있습니다. 예를 들어,
분수가 보이지 않는 사람에게는 AT가 분수 x분의 삼 끝 분수
라고 하여
어느 부분이 분수인지 명확히 알려줄 수도 있습니다.
컨텐츠를 볼 수 있는 사람에게는 이런 추가 단어가 방해가 될 수 있습니다.
AT는 항상 자신이 속한 커뮤니티에 적합한 음성을
제공해야 합니다.
intent 표현이 생성된 음성이나 점자에 미치는 실제 효과는 시스템마다 다릅니다. 그러나 시스템은 이 섹션에서 설명한 해석과 일치하는 방식으로 동작해야 합니다.
여러 속성이 self-property-list 또는 term에 나타나면
왼쪽에서 오른쪽으로 순서대로 평가됩니다. 일반적으로 모든 속성에 효과가 있을 수 있지만
많은 경우 속성 그룹들은 모두 같은 내부 파라미터를 설정하므로
서로 상호 배타적이고 마지막 속성이 적용됩니다.
예를 들어, f:prefix:suffix는
f:suffix와 동일하게 동작하는데 두 속성이 모두 고정성 파라미터를 설정하기 때문입니다. 마찬가지로
:literal:common은 :common처럼 동작하며
두 속성이 내부 기본 해석 파라미터를 설정합니다.
반대로 f:pause-medium:prefix는
f:prefix:pause-medium과 같으며 두 속성이 모두 효과를 가집니다.
intent 표현에서
reference가 포함되면,
참조는 참조된 요소의 실질적 intent로 대체될 수 있습니다. 즉, 참조된
요소에 intent 속성과 intent
표현식이 있으면, 참조는 해당 표현식으로 대체되며,
참조 이후에 오는 속성은 결합된 표현식의 마지막에 위치하므로
참조된 요소의 속성보다 우선합니다. 참조된 요소에
intent가 없거나, intent가
self-property-list인 경우
요소의 실질적 intent와 속성 목록의 속성을
참조의 대체 형식으로 사용합니다.
명시적 intent 표현식이 없는 요소의 실질적 intent는 시스템마다 다르지만
현재 기본 intent 추론 규칙(일반적으로 common 또는
literal)과 호환되어야 합니다. 값은 추론된 intent 표현식일 수도 있고,
해당 요소에 대해 생성될 음성 용어에 해당하는 literal일 수도 있습니다.
self-property-list (즉, intent 값이
콜론(:)으로 시작) 일부인
속성은 self-property라 부릅니다. 이러한 속성의 효과는
요소(및 하위 요소)에만 한정되어 있지만, 구체적 효과는 속성의 정의에 따라 다릅니다. 예를 들면:
<mrow
intent=":pause-medium"><mi>x</mi>...</mrow>
은 mrow가 처리되기 전에 발화에 일시정지가 있어야 함을 나타냅니다
(모든 하위 요소 앞에는 일시정지가 생기지 않음).
<mrow
intent=":literal"><mi>x</mi>...</mrow>
은 기본 intent 추론 규칙에 해당하는 파라미터를 literal로 설정합니다.
이로 인해 이 mrow 및 모든 하위 요소는 명시적 intent나
다른 self-property(예: :common)가
없으면 literal 규칙을 사용해 intent를 추론합니다.
이 섹션에서는 위 해석 방식으로 intent 표현을 확장하는 예제들을 보여줍니다.
<mrow intent="$xf:prefix">
<mrow arg="xf" intent="$f:function($x)">
<mi arg="x">x</mi><mo arg="f" intent="factorial:suffix">!</mo>
</mrow>
</mrow>
모든 참조를 확장하면 다음과 같이 됩니다
<mrow intent="factorial:suffix:function:prefix(_x)">
<mrow arg="xf" intent="factorial:suffix:function(_x)">
<mi arg="x">x</mi><mo arg="f" intent="factorial:suffix">!</mo>
</mrow>
</mrow>
</mrow>
전체 표현식은 첫 번째 mrow의 intent에 따라 읽히며, 이는 factorial:prefix(_x)와
동일하므로 factorial x
로 읽힙니다.
<mrow intent=":common">
<msup><mi>x</mi><mn>2</mn></msup>
<mo>+</mo>
<mrow intent=":literal">
<msup><mi>x</mi><mn>2</mn></msup>
</mrow>
<mo>+</mo>
<msup><mi>x</mi><mn>2</mn></msup>
</mrow>
</mrow>
첫 번째 mrow에서 요소 범위의 기본 규칙을 common으로 설정하므로 intent가 없는 첫 번째 msup은 power로 추론되어 x 제곱으로 읽힙니다.
두 번째 mrow는 요소 범위의 기본 규칙을 literal로 설정하므로 intent가 없는 두 번째 msup은 x 위첨자 2로 읽힙니다.
마지막 msup은 다시 common 범위에 속해 x 제곱으로 읽힙니다.
:common 및 :literal 속성의 효과가 intent가 없는 요소의 기본 규칙을 설정하는 것임은 속성 설명에 포함된 내용이며, 별도의 속성 분류가 필요하지 않습니다. 두 속성이 동일한 내부 기본 규칙 파라미터를 설정하기 때문에 서로 상호 배타적이며, 고정성(:prefix, :suffix) 속성들도 동일한 "고정성" 파라미터를 설정하므로 한 번에 하나만 효과를 가질 수 있습니다.
<mtable intent=":system-of-equations">
<mtr>
<mtd>
<mo>(</mo>
<mtable intent=":matrix"><mtr><mtd><mn>1</mn></mtd><mtd><mn>2</mn></mtd></mtr></mtable>
<mo>)</mo>
</mtd>
<mtd>
<mo>+</mo>
</mtd>
<mtd>
<mo>(</mo>
<mtable intent=":matrix"><mtr><mtd><mn>2</mn></mtd><mtd><mn>3</mn></mtd></mtr></mtable>
<mo>)</mo>
</mtd>
<mtd>
<mo>=</mo>
</mtd>
<mtd>
<mo>(</mo>
<mtable intent=":matrix"><mtr><mtd><mn>3</mn></mtd><mtd><mn>5</mn></mtd></mtr></mtable>
<mo>)</mo>
</mtd>
</mtr>
</mtable>
첫 번째 mtable은 방정식(여기서는 이름 없는 식 하나만 있으므로 예: 하나의 식:...)으로 읽히며, :system-of-equations 속성은 현재 mtable에만 영향을 줍니다. 내부 mtable은 외부의 :system-of-equations 속성의 영향을 받지 않고 :matrix 속성으로 읽혀 전체적으로 다음과 동일합니다
1 행
the 1 by 2 행렬 1 2
plus
the 1 by 2 행렬 2 3
is equal to
the 1 by 2 행렬 3 5
<mrow intent="$op:infix($x,$y)">
<mi arg="x">x</mi>
<msup arg="op" intent="converse:postfix(L)">
<mi>R</mi>
<mi>T</mi>
</msup>
<mi arg="y">y</mi>
</mrow>
이는 다음과 동일합니다
<mrow intent="converse:postfix(L):infix(_x,_y)">
<mi arg="x">x</mi>
<msup arg="op" intent="converse:postfix(L)">
<mi>R</mi>
<mi>T</mi>
</msup>
<mi arg="y">y</mi>
</mrow>
즉 x L converse y로 읽히며(:infix가 L converse에 적용됨), 첫 intent를 제거하고 자식 요소를 순서대로 읽는 것과 동일한 읽기를 제공합니다.
<mrow>
<mrow>
<mi>a</mi><mi>b</mi>
</mrow>
<mrow intent=":pause-long">
<mi>c</mi><mi>d</mi>
</mrow>
</mrow>
이 예시는 a b 일시정지 c d로 읽힙니다
self-property인 :pause-long은 단 한 번만 동작하며, 적용된 요소의 하위 요소에는 영향을 주지 않습니다.
<mrow intent="wibble($a,$b,$c)">
<msup arg="a" intent=":common"><mi>x</mi><mn>2</mn></msup>
<mo>+</mo>
<msup arg="b" intent=":literal"><mi>x</mi><mn>2</mn></msup>
<mo>+</mo>
<msup arg="c"><mi>x</mi><mn>2</mn></msup>
</mrow>
여기서 참조된 요소들은 intent가 없거나 self-property만 있으므로 각각의 실질적 intent는 시스템별 음성 문자열이 되지만, 첫 번째는 "common" 규칙으로, 두 번째는 "literal" 규칙으로, 세 번째는 "legacy" 규칙(여기서는 legacy 읽기가 common 읽기와 동일하다고 가정)으로 제어됨 결과는 다음과 같습니다
<mrow intent="wibble(_x_squared,x_superscript_2,_x_squared)">
<msup arg="a" intent=":common"><mi>x</mi><mn>2</mn></msup>
<mo>+</mo>
<msup arg="b" intent=":literal"><mi>x</mi><mn>2</mn></msup>
<mo>+</mo>
<msup arg="c"><mi>x</mi><mn>2</mn></msup>
</mrow>
즉 다음과 같이 읽힙니다
wibble of x 제곱, 위첨자 이, x 제곱
<mrow intent=":unit">
<mi>W</mi>
<mo>/</mo>
<msup>
<mi>m</mi>
<mn>2</mn>
</msup>
</mrow>
:unit 속성이 mrow 범위의 기본 해석을 "단위 스타일"로 설정하며,
구체적 단어는 항상 시스템마다 다르지만 일반적으로 <mi>W</mi>는
와트(Watts), <mo>/</mo>는 per로 읽혀서
와트 제곱미터당
intent 처리기는 구현 방식에 따라, 생성된 텍스트로 메시지를 반환하거나, 예외(error)를 발생시키는 등 적절한 방식으로 intent 표현식 오류를 보고할 수 있습니다. 그러나 웹 플랫폼 환경에서는 소스 수정 권한이 없는 독자에게 오류를 보고하는 것이 적절하지 않은 경우가 많으므로, intent 처리기는 아래 설명한 대로 오류로부터 복구하는 모드를 제공해야 합니다.
intent
속성이 5.1 intent의 문법에 맞지 않으면,
처리기는 해당 속성이 없는 것으로 동작해야 합니다.
보통 이는 MathML 요소와 하위 요소에서 적절한 대체 텍스트가 생성되는 결과를 낳게 됩니다. 오류가 있는 속성만 무시되고, MathML 표현 내의 다른 intent 속성은 정상적으로 사용되어야 함을 유의하세요.$x와 같은 reference가 하위 요소에 값이 x인 arg 속성에 대응하지 않으면, 해당 참조를 리터럴 _dollar_x로 대체한 것으로 처리해야
합니다.literal과 property 기능은
미리 정의된 사전을 넘어 수학적 개념의 범위를 확장하고, 발화 방식 선호를 표현할 수 있게 해줍니다.
예를 들면, $x와 $y가 각각
<mi arg="x">x</mi> 와 <mi
arg="y">y</mi>를 참조한다면,
list :silent ($x,$y)는 x y로 읽힙니다
semi-factorial :postfix($x)는 x semi factorial로 읽힙니다
이러한 기능을 사용하면 생성되는 음성을 거의 완전히 제어할 수도 있습니다. 예를 들어, 아래를 비교하면:
free-algebra ($r, $x)free algebra of r and x로 읽힙니다
free-algebra-construct:silent (_free, $r, _algebra, _on, $x)free r algebra on x로 읽힙니다
_(free, _($r,algebra), on, $x)free r algebra; on x로 읽힙니다
그러나 literal이 사전에 포함되어 있지 않으므로, 표현 뒤에 의미가 불투명해지며, 이러한 기능을 과도하게 사용하면 AT가 사용자의 요구에 맞춰 적응하는 능력뿐 아니라 번역 및 로캘별 음성처리 기능도 제한하게 됩니다. 따라서 마지막 두 예시는 지양되어야 합니다.
반대로, 의미 있는 개념에 대응하지 않는 특정 발화가 반드시 필요할 때는
로 시작하는 literal 이름을 사용하는 것이
비지원 개념을 사용하는 것보다 낫습니다.
이는 개념 사전이 향후 업데이트될 때 뜻하지 않은 충돌을 방지할 수 있습니다.
즉, 마지막 예시는 특히 권장되지 않습니다.
_
intent의 주된 사용은
동일한 구문이 여러 의미에 사용될 때, 이를 명확하게 분리해 발화가 달라지도록 하기 위함입니다.
위첨자 msup는 거듭제곱, 전치, 도함수, 꾸며진 기호 등을 나타낼 수 있습니다. 아래는 각 경우를, intent가 있을 경우와 없을 경우 예상 발화로 구분하여 보여줍니다.
<msup intent="power($base,$exp)">
<mi arg="base">x</mi>
<mi arg="exp">n</mi>
</msup>
x의 n승
x 위첨자 n 끝 위첨자
intent 없이 대안 기본 렌더링은 항상 msup이 거듭제곱임을 가정하여 두 번째 발화도 x의 n승
일 수 있습니다. 이
경우 아래 예시들의 두 번째 렌더링은 잘못된 방식으로 거듭제곱 ...
식으로 읽게 됩니다.
<msup intent="$op($a)">
<mi arg="a">A</mi>
<mi arg="op" intent="transpose">T</mi>
</msup>
A의 전치
A 위첨자 T 끝 위첨자
그러나 속성을 사용하면 이 예시는 다르게 읽힐 수 있습니다.
<msup intent="$op :postfix ($a)">
<mi arg="a">A</mi>
<mi arg="op" intent="transpose">T</mi>
</msup>
A 전치
<msup intent="derivative($a)">
<mi arg="a">f</mi>
<mi>′</mi>
</msup>
f의 도함수
f 위첨자 프라임 끝 위첨자
<msup intent="x-prime">
<mi>x</mi>
<mo>′</mo>
</msup>
x 프라임
x 위첨자 프라임 끝 위첨자
작성자 선호 변수명, 연산자명을 포함한 사용자 지정 접근성 설명 역시, underscore 함수를 사용해 조합적으로 주석 처리할 수 있습니다.
위 표기는 커스텀 이름 "x-new"를 의도할 수 있고, 이를 단일 literal intent="_x-new"로 표기하거나, 두 인자의 복합 발화로 표기할 수도
있습니다:
<msup intent="_($base,$script)">
<mi arg="base">x</mi>
<mo arg="script" intent="_new">′</mo>
</msup>
x new
x 위첨자 프라임 끝 위첨자
underscore 함수를 사용하면 복합 이름의 단편들이 명확하게 지역화되었을 때 가독성을 높일 수 있습니다. 키릴 문자(불가리아어) 예시:
<msup intent="_($base,$script)">
<mi arg="base" intent="_хикс">x</mi>
<mo arg="script" intent="_прим">′</mo>
</msup>
хикс прим
x 위첨자 프라임 끝 위첨자
반대로, 복합 이름의 각 단편 발화를 AT에 완전히 맡기면서도 여전히 묶음(grouping)은 지정할 수 있습니다:
<msup intent="_($base,$script)">
<mi arg="base">x</mi>
<mo arg="script">′</mo>
</msup>
x 프라임
x 위첨자 프라임 끝 위첨자
오버바(위 막대)는 켤레(complex conjugation)나 평균(mean, average)을 나타내며, 마찬가지로 intent가 있을 때와 없을 때의 예시 발화가 아래와 같이 달라집니다:
<mover intent="conjugate($v)">
<mi arg="v">z</mi>
<mo>¯</mo>
</mover>
<mtext> <!--nbsp-->is not <!--nbsp--></mtext>
<mover intent="mean($var)">
<mi arg="var">X</mi>
<mo>¯</mo>
</mover>
z의 켤레는 X의 평균이 아니다
z 위에 바 있음; X 위에 바 있음
intent 메커니즘은 비지원 개념 이름을 활용해 확장할 수 있습니다. 예를 들어, 벨 수(Bell Number)가 사전에 없다면 다음 예시에서
<msub intent="bell-number($index)">
<mi>B</mi>
<mn arg="index">2</mn>
</msub>
예상대로 다음과 같이 읽히게 됩니다:
2번째 벨 수
MathML의 CSS 커스터마이징은 보통 AT에 전달되지 않고, 접근 가능한 발화에서 무시됩니다. 작성자가 스타일 강조나 커스텀 이름을 가진 꾸민 구조를 의미 있게 만들고자 할 때는 intent 속성을 사용하는 것이 적합합니다. 예를 들어, 덧셈식 분류에 하이라이트를 주는 것은 교육 자료에서 자주 활용됩니다:
<mn>1</mn><mo>+</mo>
<mrow style="padding:0.1em;background-color:lightyellow;"
intent="highlighted-step($step)">
<mfrac arg="step"><mn>6</mn><mn>2</mn></mfrac>
</mrow>
<mi>x</mi>
<mo>=</mo>
<mn>1</mn><mo>+</mo>
<mn style="padding:0.1em;background-color:lightgreen;"
intent="highlighted-result(3)">3</mn>
<mi>x</mi>
one plus highlighted step of six over two end highlighted step x equals one plus highlighted result of three end highlighted result x
<mtable> 요소는
행렬, 방정식 시스템, 증명 전개 단계 등 다양한 용도로 사용됩니다. 이외에도
강제 라인 브레이크나 정렬 등을 구현하는 데 활용될 수 있으며,
3.1.7 수식 줄 바꿈을 지원하지 않거나
(La)TeX 변환에서 정렬 구조가 유사하게 사용되는 시스템에서도 중요하게 사용됩니다.
어떤 종류의 표(table) 구조에 속성이 연관되어 있으면, 보통 속성만 사용하고, AT가 수식 탐색/발화를 어떻게 해야 할지 추론하도록 하는 것이 더 좋습니다. 이런 방식으로 속성을 활용하면 작성자가 발화 생성 힌트를 줄 수 있고, 행렬보다 정렬된 방정식 목록에 더 적합한 발화를 만들 수 있습니다.
핵심 속성만으로 표 레이아웃을 충분히 표현할 수 없을 때는 intent 개념 이름, 적절하다면 오픈 속성 목록의 속성을 추가해 원하는 발화 및 탐색 방식을 전달해야 합니다. 레이아웃이 복잡해질 가능성이 크므로, AT로 실제 테스트를 하여 사용자가 작성자의 의도대로 수식을 듣는지 반드시 검증해야 합니다.
행렬
<mrow intent='$m'>
<mo>(</mo>
<mtable arg='m' intent=':matrix'>
<mtr>
<mtd><mn>1</mn></mtd>
<mtd><mn>0</mn></mtd>
</mtr>
<mtr>
<mtd><mn>0</mn></mtd>
<mtd><mn>1</mn></mtd>
</mtr>
</mtable>
<mo>)</mo>
</mrow>
2×2 행렬;
1열; 1;
2열; 0;
1열; 0;
2열; 1;
행렬 끝
정렬된 방정식
<mtable intent=':equations'>
<mtr>
<mtd columnalign="right">
<mn>2</mn>
<mo>⁢<!--InvisibleTimes--></mo>
<mi>x</mi>
</mtd>
<mtd columnalign="center">
<mo>=</mo>
</mtd>
<mtd columnalign="left">
<mn>1</mn>
</mtd>
</mtr>
<mtr>
<mtd columnalign="right">
<mi>y</mi>
</mtd>
<mtd columnalign="center">
<mo>></mo>
</mtd>
<mtd columnalign="left">
<mi>x</mi>
<mo>-</mo>
<mn>3</mn>
</mtd>
</mtr>
</mtable>
2개의 방정식,
1번 방정식; 2x, 는 같다, 1;
2번 방정식; y, 는 크다, x-3;
줄 바꿈이 포함된 정렬 방정식
<mtable intent=':equations'>
<mtr>
<mtd columnalign="right">
<mi>a</mi>
</mtd>
<mtd columnalign="center">
<mo>=</mo>
</mtd>
<mtd columnalign="left">
<mi>b</mi>
<mo>+</mo>
<mi>c</mi>
<mo>-</mo>
<mi>d</mi>
</mtd>
</mtr>
<mtr intent=':continued-row'>
<mtd columnalign="right"></mtd>
<mtd columnalign="center"></mtd>
<mtd columnalign="left">
<mo form="infix">+</mo>
<mi>e</mi>
<mo>-</mo>
<mi>f</mi>
</mtd>
</mtr>
</mtable>
1개 방정식; a, 는 같다, b+c-d; +e-f;
위에서 설명한 intent 속성 외에도,
MathML은 더 일반적인 주석 프레임워크를 제공합니다. MathML 식에는
주석 종류를 표시하는 심볼(annotation key)과
관련 데이터(annotation value)로 이루어진 쌍의 시퀀스를
데코레이트할 수 있습니다.
semantics, annotation,
annotation-xml 요소는 MathML에서
주석을 나타내는 데 함께 사용됩니다. semantics 요소는
표현식과 그 주석을 위한 컨테이너 역할을 합니다.
annotation 요소는 텍스트 주석 컨테이너이고,
annotation-xml 요소는 구조화된
주석에 사용됩니다. semantics 요소는
첫 번째 자식으로 주석 대상 표현식을 가지며,
그 뒤로 0개 이상의 annotation 또는
annotation-xml 요소가 이어집니다.
semantics 요소는
표현 요소이면서 동시에 내용 요소로 간주되며,
두 가지 컨텍스트 모두에서 사용할 수 있습니다. 모든 MathML 처리기는
semantics 요소를
반드시 처리해야 하며, 두 MathML 서브셋 중 하나만 처리하거나
[MathML-Core]만 처리하더라도 마찬가지입니다.
annotation key는 표현식과 주석 사이의 관계를 명시합니다. 관계 종류는 매우 다양할 수 있습니다. 예: 대체 표현(alternate representations), 의미 명세/정확화, 타입 정보, 렌더링 힌트, 특정 처리기를 위한 사적인 데이터 등이 있습니다. annotation key는 처리기가 해당 주석을 처리할지 결정하는 주요 수단입니다.
표현식과 주석 간의 논리적 관계는 표현식의 올바른 처리를 크게 좌우할 수 있습니다. 예를 들어, 특정 주석 형태(semantic attributions라고 부름)는 일부 처리 컨텍스트에서는 주석을 무시하면 의미가 바뀝니다. 반면, 대체 표현은 표현식의 의미를 바꾸지는 않지만, 종종 렌더링 힌트로 사용되어 표현(presentation)은 변할 수 있습니다. 또 다른 주석들은 사적 데이터나 메타데이터를 담아 특정 맥락에서는 유용하지만 의미나 표현에는 영향을 주지 않습니다.
annotation key는 Content
Dictionary의 심볼로 정의할 수 있으며,
annotation, annotation-xml 요소의
cd, name 속성으로 지정합니다.
또는 cd, name 대신
definitionURL 속성으로
annotation key를 참조할 수도 있습니다.
MathML은 가장 일반적인 주석 유형에 대해 미리 정의된 annotation key 두 가지를 제공합니다: alternate-representation 및 contentequiv로, mathmlkeys content dictionary에 정의돼 있습니다. alternate-representation 키는 의미를 담은 주석 값이 다른 마크업 언어로 표현식의 대체 표현임을 나타내고, contentequiv 키는 해당 표현식의 의미적으로 등가적인 대체 표현임을 나타냅니다.
명시적으로 annotation key를 지정하지 않으면,
annotation 또는
annotation-xml 요소에 기본 annotation key는
alternate-representation
으로 처리됩니다.
annotation key는 보통 표현식과 주석 사이의 논리적 관계만 명시하고,
실제 데이터 형식은 encoding
속성으로 지정합니다. MathML 2에서는 encoding 속성이
처리기가 해당 주석을 이해할 수 있는지 확인하는 주요 정보였습니다.
하위 호환을 위해서는 annotation key와 encoding 속성 모두를
처리하는 것이 권장됩니다.
특히 MathML 2에는 미리 정의된 인코딩 값 MathML, MathML-Content,
MathML-Presentation이 있습니다.
MathML 인코딩 값은 annotation-xml 요소가
MathML 식을 담고 있음을 나타내는데 사용됩니다.
나머지 값들에 대한 활용은 아래 섹션들에서 설명합니다.
대체 표현 주석은 주로 표현식의 렌더링을 제공하거나, 다른 마크업 언어에서 등가 표현을 나타내는 데 사용됩니다. 일반적으로 대체 표현 주석은 주석 대상 표현식의 의미를 바꾸지 않으며, 표현만 바꿀 수 있습니다.
특히 중요한 케이스는
content MathML 식에 대해
presentation MathML 식을 사용해 선호하는 렌더링을 표시하는 경우입니다.
이런 경우는 encoding 속성에
application/mathml-presentation+xml 값으로
annotation에 라벨을 달아 표현할 수 있습니다.
MathML 2.0과의 호환을 위해서는 동일한 목적에
encoding 속성에 MathML-Presentation 값을 써도 됩니다.
presentation MathML 주석이 semantics 요소에 있으면,
첫 번째 자식의 기본 렌더링 대신
presentation MathML 주석이 기본 렌더링으로 사용될 수 있습니다.
아래 예시에서 semantics 요소는
content MathML 식에 대해 다양한 대체 표현을 함께 묶어줍니다.
presentation MathML 주석은
기본 렌더링으로 사용될 수 있으며, 나머지 주석들은
다른 마크업 언어에서의 표현을 제공합니다.
명시적 attribution key는 지정하지 않아
각 주석에는 기본 annotation key인
alternate-representation
이 적용됩니다.
<semantics>
<apply>
<plus/>
<apply><sin/><ci>x</ci></apply>
<cn>5</cn>
</apply>
<annotation-xml encoding="MathML-Presentation">
<mrow>
<mrow>
<mi>sin</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
</mrow>
<mo>+</mo>
<mn>5</mn>
</mrow>
</annotation-xml>
<annotation encoding="application/x-maple">sin(x) + 5</annotation>
<annotation encoding="application/vnd.wolfram.mathematica">Sin[x] + 5</annotation>
<annotation encoding="application/x-tex">\sin x + 5</annotation>
<annotation-xml encoding="application/openmath+xml">
<OMA xmlns="http://www.openmath.org/OpenMath">
<OMA>
<OMS cd="arith1" name="plus"/>
<OMA><OMS cd="transc1" name="sin"/><OMV name="x"/></OMA>
<OMI>5</OMI>
</OMA>
</OMA>
</annotation-xml>
</semantics>
이 예시는 MathML의 XML 문법에서만 제공되는 네임스페이스 확장성을 활용합니다.
만약 이 예시가 HTML 문서에 포함되면 잘못된 코드로 간주되며 OpenMath 요소가 MathML 네임스페이스의 요소로 파싱됩니다.
상세 내용은 6.7.3 HTML 문서에서 annotation-xml 사용을 참고하세요.
내용 등가(contentequiv) 주석은 표현식에 대한 추가 계산 정보를 제공합니다. contentequiv 키를 가진 주석은 표현식의 동작을 바꿀 수도 있기 때문에 무시하면 안 됩니다.
특히 presentation MathML 식의 의미 모호성을
content MathML 주석을 통해 명확히 하는 경우가 중요한 사례입니다.
이 경우 encoding 속성을
application/mathml-content+xml 값으로
annotation에 라벨링할 수 있습니다.
MathML 2의 경우에는 동일 목적에 encoding에
MathML-Content 값이 사용되므로,
하위 호환을 위해 이 사용을 지원할 것을 권장합니다.
contentequiv annotation
key로
지정해 해당 주석이 표현식의 결정적 혹은 확정된 내용 마크업 등가를 제공함을 명확히 선언해야 합니다.
아래 예시에서는 모호한 presentation MathML 식에 대해
MathML-Content 주석으로 정확한 의미를 지정하고 있습니다.
<semantics>
<mrow>
<mrow>
<mi>a</mi>
<mrow>
<mo>(</mo>
<mrow><mi>x</mi><mo>+</mo><mn>5</mn></mrow>
<mo>)</mo>
</mrow>
</mrow>
</mrow>
<annotation-xml cd="mathmlkeys" name="contentequiv" encoding="MathML-Content">
<apply>
<ci>a</ci>
<apply><plus/><ci>x</ci><cn>5</cn></apply>
</apply>
</annotation-xml>
</semantics>
일반적인 경우, 각 annotation 요소에는 문자 데이터가 포함되거나
(annotation의 경우) XML 마크업 데이터가 포함됩니다
(annotation-xml의 경우) 이는 주석 값(annotation value)을 나타냅니다.
semantics 요소 내에 등장할 수 있는 주석 종류에는
제한이 없습니다. 예를 들어, 한 주석이 TeX 인코딩, 컴퓨터 대수 시스템의 입력 값,
렌더링 이미지, 혹은 자세한 수학 타입 정보 등을 제공할 수 있습니다.
경우에 따라 semantics 요소의 대체 자식들은
주석된 표현식의 동작에 필수 요소가 아니지만,
특수 처리기에는 유용할 수 있습니다. 여러 annotation 포맷을 더 효율적으로 제공하기 위해,
semantics
요소 안에 비어있는 annotation 및 annotation-xml
요소를 사용하여 encoding과 src
속성을 지정할 수 있으며,
이는 주석에 연결된 주석 값을 외부 위치로 지정하는 기능을 갖습니다.
이와 같은 주석을 annotation reference라고 부릅니다.
<semantics>
<mfrac><mi>a</mi><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mfrac>
<annotation encoding="image/png" src="333/formula56.png"/>
<annotation encoding="application/x-maple" src="333/formula56.ms"/>
</semantics>
마크업을 내보내는 소비자가 주석에서 참조한 외부 엔티티를 검색할 수 없을 가능성이 있다고 예상하는 처리기는, 지정된 위치에서 외부 엔티티의 내용을 받아 주석을 확장된 형태로 바꿔 주시길 권장합니다.
annotation reference는 주석 값과 주석 객체 사이의 관계를 지정하는 주석 키(annotation key) 결정 규칙에서 다른 annotation과 동일한 규칙을 따릅니다.
semantics 요소는 MathML 식에 주석을 연결해 주는
컨테이너 요소입니다. semantics 요소의 첫 번째 자식은
주석 대상 표현식이며, 어떤 MathML 식이든 첫 번째 자식으로 올 수 있습니다.
이후 annotation 및
annotation-xml 자식들은 주석을 감쌉니다.
XML 형식으로 된 annotation은 annotation-xml 요소에 감싸고,
문자 데이터로 된 annotation은 annotation 요소에 담습니다.
위에서 언급한 대로 semantics 요소는
표현 요소와 내용 요소로 모두 간주하며,
내용에 따라 어느 쪽 역할이든 할 수 있습니다. 따라서 모든 MathML
처리기는 semantics 요소를 처리해야 하며,
presentation 마크업만 처리하든, content 마크업만 처리하든 예외 없이 해당됩니다.
semantics 요소의 기본 렌더링은
첫 번째 자식의 기본 렌더링입니다. 렌더러는 annotation에 담긴 정보를 활용해
주석 대상 요소의 렌더링을 사용자화할 수 있습니다.
<semantics>
<mrow>
<mrow>
<mi>sin</mi>
<mo>⁡<!--ApplyFunction--></mo>
<mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
</mrow>
<mo>+</mo>
<mn>5</mn>
</mrow>
<annotation-xml cd="mathmlkeys" name="contentequiv" encoding="MathML-Content">
<apply>
<plus/>
<apply><sin/><ci>x</ci></apply>
<cn>5</cn>
</apply>
</annotation-xml>
<annotation encoding="application/x-tex">\sin x + 5</annotation>
</semantics>
annotation 요소는 의미 주석을 위한 컨테이너 요소이며,
해당 주석은 XML이 아닌 형식으로 구문 분석되는 문자 데이터로 표현됩니다.
annotation 요소는 주석을 위한 문자 데이터만 담아야 하며,
XML 마크업 요소를 포함해서는 안 됩니다.
만약 주석 내용에 XML 예약 문자 &나 <가 들어가면,
엔티티 참조를 써서 인코딩하거나(XML 문법인 경우) XML CDATA 섹션을 활용해야 합니다.
| 이름(Name) | 값(values) | 기본(default) |
| definitionURL | URI | none |
| 주석 키 심볼의 위치 | ||
| encoding | string | none |
| annotation 내 의미 정보의 인코딩 | ||
| cd | string | mathmlkeys |
| annotation 키 심볼을 포함하는 컨텐트 딕셔너리 | ||
| name | string | alternate-representation |
| annotation 키 심볼의 이름 | ||
| src | URI | none |
| 의미 정보의 외부 소스 위치 | ||
cd와 name 속성을 함께 지정하면,
주석 키 심볼을 명시할 수 있습니다. 이는 주석 대상 요소와 annotation 간의 관계를 식별해주며,
6.5 <semantics> 요소에서 설명한 내용과 같습니다.
definitionURL 속성을 사용해 annotation 키 심볼을 하나의 속성으로 참조할 수도 있습니다.
이들 속성이 전혀 없으면 주석 키 심볼은
alternate-representation
이 되고, mathmlkeys 컨텐트 딕셔너리에 정의되어 있습니다.
encoding 속성은 annotation의 콘텐츠 타입을 명시합니다.
해당 값에는 인코딩 데이터의 데이터 형식을 식별하는 미디어 타입이 들어갈 수 있습니다.
미디어 타입이 없는 데이터 형식의 경우, 구현자는 자체 설명적인 문자열을 써서 콘텐츠 타입을 식별할 수 있습니다.
src 속성은 외부 엔티티를 MathML 식의 annotation에 연결하기 위한 메커니즘을 제공합니다.
<annotation encoding="image/png" src="333/formula56.png"/>
annotation 요소는 의미 매핑용이고, 반드시
semantics 요소의 자식으로만 사용할 수 있습니다.
annotation 요소에는 기본 렌더링이 없지만, 렌더러는 annotation에 담긴 정보를 활용해
주석 대상 요소의 렌더링을 사용자화할 수 있습니다.
annotation-xml 요소는 구조화된 마크업 형식의 의미 주석을 위한 컨테이너 요소입니다. annotation-xml 요소는 주석에 사용되는 마크업 요소, 속성, 문자 데이터를 담아야 합니다.
| 이름 | 값 | 기본값 |
| definitionURL | URI | none |
| 주석 키 심볼의 위치 | ||
| encoding | string | none |
| annotation에 담기는 의미 정보의 인코딩 | ||
| cd | string | mathmlkeys |
| annotation 키 심볼을 포함하는 컨텐트 딕셔너리 | ||
| name | string | alternate-representation |
| annotation 키 심볼의 이름 | ||
| src | URI | none |
| 의미 정보의 외부 소스 위치 | ||
cd와 name 속성을 함께 지정하면 주석 키 심볼을 지정할 수
있으며, 이는 주석 대상 요소와 annotation의 관계를 식별합니다. 6.5 <semantics> 요소에서 설명됩니다.
definitionURL 속성은 annotation 키 심볼을 하나의 속성으로 참조하는 대안 방식입니다. 이들 속성이 없으면
annotation 키 심볼은 alternate-representation이며,
mathmlkeys content dictionary에 정의되어
있습니다.
encoding 속성은 annotation의 콘텐츠 타입을 설명합니다. encoding 속성 값에는 인코딩 데이터의 데이터 포맷을 식별하는 미디어 타입이 들어갈 수 있습니다. 미디어 타입이 없는
데이터 형식의 경우, 구현자는 자체 설명 문자열을 써서 콘텐츠 타입을 정의할 수 있습니다. 특히 위 및 7.2.4 MathML 인코딩 이름에서 설명한대로, MathML은
MathML, MathML-Presentation, MathML-Content를 encoding 속성의 미리 정의된 값으로 지정합니다. 마지막으로, src 속성은 외부 XML 엔티티를 MathML 표현식의 annotation으로 연결하는 메커니즘을 제공합니다.
<annotation-xml cd="mathmlkeys" name="contentequiv" encoding="MathML-Content">
<apply>
<plus/>
<apply><sin/><ci>x</ci></apply>
<cn>5</cn>
</apply>
</annotation-xml>
<annotation-xml encoding="application/openmath+xml">
<OMA xmlns="http://www.openmath.org/OpenMath">
<OMS cd="arith1" name="plus"/>
<OMA><OMS cd="transc1" name="sin"/><OMV name="x"/></OMA>
<OMI>5</OMI>
</OMA>
</annotation-xml>
MathML이 XML로 파싱되고 annotation 값이 MathML이 아닌 XML 방언으로 표현될 때, annotation의 XML 마크업에는 네임스페이스 속성 또는 네임스페이스 접두사를 사용해 네임스페이스를 반드시 명시해야 합니다. 예시:
<annotation-xml encoding="application/xhtml+xml">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>E</title></head>
<body>
<p>The base of the natural logarithms, approximately 2.71828.</p>
</body>
</html>
</annotation-xml>
annotation-xml 요소는 의미 매핑용이며 반드시
semantics 요소의 자식으로만 사용할 수 있습니다. annotation-xml 요소에 기본 렌더링은 없지만, 렌더러는 annotation의 정보를 사용해 주석 대상 요소의 렌더링을
사용자화할 수 있습니다.
위 예시에서 사용된 네임스페이스 확장 기능은 MathML이 XML 문서로 처리되지 않으면 사용할 수 없습니다. 특히 HTML 파서는 xmlns 속성을 일반
속성처럼 처리하므로 OpenMath 예시는 HTML validator에서 잘못된 코드로 간주됩니다. OpenMath 요소들은 여전히 annotation-xml 요소의 자식으로 파싱되지만, MathML 네임스페이스로 배치됩니다. 위 예시는 이 명세의
HTML 버전에서는 렌더링되지 않으며, 문서를 HTML5로 유효하게 유지하기 위함입니다.
HTML 파서의 annotation-xml 처리에 대한 세부 내용은 [HTML] 및 7.4.3 MathML과 HTML의 혼합에서 요약되며,
XML 파서와의 주된 차이는 HTML 파서는 xmlns 속성이나 :가 들어간 요소 이름을 특별하게 다루지 않고, HTML, SVG,
MathML 등 세 가지 알려진
네임스페이스를 쓰는 내장 규칙이 있다는 점입니다.
annotation-xml 요소에 encoding
속성이(대소문자 무시) text/html 또는 annotation/xhtml+xml이면, 내용은 HTML로 파싱되어 처음에는 HTML 네임스페이스에
배치됩니다.
그 외에는 foreign content로 파싱되며, XML과 비슷하게 처리됩니다(MathML 자체가 HTML에서 처리되는 방식과 동일). 즉,
/>는 빈 요소임을 나타냅니다. 내용은 MathML 네임스페이스에 배치됩니다.
foreign content annotation에서 인식 가능한 HTML 요소가 등장하면 HTML 파서는 해당 수식 표현을 종료하고 열린 요소들을 math 요소가 닫힐 때까지 모두 닫은 뒤, 중첩된 HTML을 수학 컨텍스트 외부에 있는 것처럼 처리합니다. 이후의
MathML 요소들은 더 이상 math 컨텍스트에 있지 않으므로 올바르게 렌더링되지 않습니다.
이러한 이슈들로 인해, 아래 예시는 XML 파서든 HTML 파서든 모두 유효합니다:
<math>
<semantics>
<mi>a</mi>
<annotation-xml encoding="text/html">
<span>xxx</span>
</annotation-xml>
</semantics>
<mo>+</mo>
<mi>b</mi>
</math>
한편 encoding 속성이 생략되면 해당 표현식은 XML로 파싱될 때만 유효합니다:
<math>
<semantics>
<mi>a</mi>
<annotation-xml>
<span>xxx</span>
</annotation-xml>
</semantics>
<mo>+</mo>
<mi>b</mi>
</math>
위가 HTML 파서에서 파싱되면, 다음과 같은 잘못된 입력 결과와 동등한 결과가 됩니다. 즉 span 요소가 모든 MathML 요소를 조기에 닫게 만들었습니다. 이후의 MathML 요소들은 더 이상 <math> 내부에 있지 않아 미지의 HTML 요소로 처리되며 올바르게 렌더링되지 않습니다.
<math xmlns="http://www.w3.org/1998/Math/MathML">
<semantics>
<mi>a</mi>
<annotation-xml>
</annotation-xml>
</semantics>
</math>
<span xmlns="http://www.w3.org/1999/xhtml">xxx</span>
<mo xmlns="http://www.w3.org/1999/xhtml">+</mo>
<mi xmlns="http://www.w3.org/1999/xhtml">b</mi>
위에서 HTML span 요소가 모든 열린 MathML 요소를 조기에 닫게 만들어,
이후의 MathML 요소들은 더 이상 math의 자손이 아니므로 HTML의 미지 요소로 취급됩니다. MathML의 HTML
파싱에 대한 더 많은 내용은 7.4.3 MathML과 HTML의
혼합을 참고하세요.
MathML, SVG, HTML 외의 네임스페이스에 속한 요소(OpenMath 예시 등)는 HTML 문법에서는 모두 잘못된 코드로 간주됩니다. 엄격한 유효성이 필수
상황이 아니라면 이러한 요소도 사용할 수 있지만, 모두 MathML 네임스페이스의 요소로 파싱됩니다. 문서는 반드시 네임스페이스 접두사와
콜론(:)이 들어간 요소 이름을 사용하지 않아야 하며, HTML 파서가 이런 경우 local name이 om:OMA인
노드를 만들고, 이런 노드는 네임스페이스 지원 XML 파서로 만들 수 없습니다. 이러한 외부 annotation 대신, HTML 파서를 사용할 때는 기존 어휘로
annotation을 인코딩하는 것이 더 좋습니다. 예를 들어 4.
Content Markup에서처럼 OpenMath를 Strict Content MathML로 충실하게 인코딩하거나, RDF
annotation은 text/html annotation 또는 N3 표기법으로 annotation에
넣어야 하고, RDF/XML로 annotation-xml을 사용하는 형태는 피해야 합니다.
표현 마크업은 수식의 기호 구조(notational structure)를 인코딩합니다. 내용 마크업은 수식의 함수 구조(functional structure)를 인코딩합니다. 경우에 따라 MathML의 특정 응용에서는 표현 마크업과 내용 마크업의 결합이 필요할 수 있습니다. 본 섹션에서는 내용 마크업 내에서 표현 마크업을, 표현 마크업 내에서 내용 마크업을 사용할 때 적용되는 제약 사항을 설명합니다.
결과 수식이 모호하지 않은 함수 적용 구조를 유지하는 한, 내용 마크업 내에 표현 마크업을 삽입할 수 있습니다. 구체적으로 표현 마크업은 내용 마크업에서 아래 세 가지 경우에만 허용됩니다:
ci, cn 토큰 요소 내
csymbol 요소 내
semantics 요소 내
그 외의 표현 마크업이 내용 마크업 내에 등장하면 MathML 오류입니다. 세 가지 경우에 대한 구체적 논의는 아래에 있습니다:
ci와 cn 토큰 요소에는
모든 MathML 문자(8. 문자, 엔티티, 글꼴에서
정의)를 자유롭게 넣을 수 있고,
표현 요소도 넣을 수 있습니다. ci 또는 cn 요소에서
인접한 MathML 문자 블록은 자동으로 mi 또는 mn
요소로 래핑된 것처럼 처리되며, 결과적으로 표현 요소 묶음은 묵시적 mrow 요소로 감싸진 것처럼 렌더링됩니다.
csymbol 요소 내 표현 마크업.렌더링 규칙은 ci, cn 토큰 요소의 규칙과 동일하게
적용되어야 합니다.
semantics 요소 내 표현 마크업.semantics 요소의 주요 목적 중 하나는 임의의 MathML 식을 내용 마크업에 의미 있게 삽입할 수 있는
메커니즘을 제공하는 것입니다. 특히, 어떤 표현식도 semantics 요소의 첫 번째 자식으로 두면 내용 표현식에
임베드할 수 있습니다. 이 래핑된 표현식의 의미는 같은 semantics 요소 내 하나 이상의 annotation
요소로 표시해야 합니다.
표시 수식이 모호하지 않게 렌더링된다면, 표현 마크업 내에 내용 마크업을 삽입할 수 있습니다. 즉, 결합된 수식의 각 내용 마크업 블록마다 대응되는 표현 마크업 블록을 생성하는 것이 원칙적으로 가능해야 합니다. 각 내용 마크업 블록을 대응하는 표현 마크업으로 대체하면, 올바른 형태의 표현 수식이 만들어져야 하며, 표현 엔진도 본래 수식에 포함된 내용 마크업을 참조하지 않고 이 표현 마크업만 처리할 수 있어야 합니다.
일반적으로 이 제약은 삽입된 내용 표현식이 내용 표현식으로서 구조가 완료된 형태여야 하며, 어떤 내용 마크업 요소에 포함되어 있지 않더라도 독립적으로 존재해야 한다는 의미입니다.
결과적으로 아래 내용 요소들은 표현 요소의 즉각적인 자식으로 올 수 없습니다: annotation, annotation-xml, bvar, condition, degree, logbase, lowlimit, uplimit.
또한, 표현 마크업 내에서는 내용 마크업이 표현 토큰 요소 내에는 올 수 없습니다.
일부 응용에서는 표현 정보와 내용 정보를 모두 활용합니다. 병렬 마크업(parallel markup)은 동일한 수학 표현에 대해 두 개
이상의 마크업 트리를 함께 쓰는 방식입니다. 병렬 마크업은 semantics 요소로 구현합니다. 어떤 표현식에 대해 병렬 마크업은 단독
사용도 가능하고, 더 큰 내용/표현 트리의 일부로 등장할 수도 있습니다.
보통의 목표는 전체 수학식에 대해 표현 마크업과 내용 마크업을 모두 제공하는 것입니다.
하나의 semantics 요소에 두 개의 마크업 트리를 페어링할 수 있는데, 한 자식 요소는 표현 마크업을, 다른 자식 요소는
내용 마크업을 제공합니다.
아래 예시는 논리 연산 수식을 이 방식으로 인코딩합니다.
<semantics>
<mrow>
<mrow><mo>(</mo><mi>a</mi> <mo>+</mo> <mi>b</mi><mo>)</mo></mrow>
<mo>⁢<!--InvisibleTimes--></mo>
<mrow><mo>(</mo><mi>c</mi> <mo>+</mo> <mi>d</mi><mo>)</mo></mrow>
</mrow>
<annotation-xml encoding="MathML-Content">
<apply><and/>
<apply><xor/><ci>a</ci> <ci>b</ci></apply>
<apply><xor/><ci>c</ci> <ci>d</ci></apply>
</apply>
</annotation-xml>
</semantics>
위 마크업에서는 첫 번째 자식 요소에 표현 마크업을, annotation-xml 요소의 일부로 내용 마크업을 주석화합니다.
동일한 식에 대해 내용 마크업을 첫 번째 자식 요소로 두고, 표현 마크업을 annotation-xml 요소에 넣는 것이 동등한
방식으로 가능합니다.
대규모 객체의 하위 수식을 처리해야 하는 응용을 위해, MathML은 semantics 요소의 각 브랜치간에 교차 참조를
지원하여 대응되는 하위 구조를 식별할 수 있게 합니다. 이러한 교차 참조는 semantics 요소 내 id와 xref 속성을 써서 구현합니다.
이 사용법은 의미 대안 브랜치의 임의 하위 수식들을 선택할 수 있게 해주는 모범 사례로 간주됩니다. id와 xref 속성은 어떤 종류의 MathML 요소에도 사용할 수 있습니다.
아래 예시는 논리 연산 수식 에 대한 교차 참조 병렬 마크업입니다.
<semantics>
<mrow id="E">
<mrow id="E.1">
<mo id="E.1.1">(</mo>
<mi id="E.1.2">a</mi>
<mo id="E.1.3">+</mo>
<mi id="E.1.4">b</mi>
<mo id="E.1.5">)</mo>
</mrow>
<mo id="E.2">⁢<!--InvisibleTimes--></mo>
<mrow id="E.3">
<mo id="E.3.1">(</mo>
<mi id="E.3.2">c</mi>
<mo id="E.3.3">+</mo>
<mi id="E.3.4">d</mi>
<mo id="E.3.5">)</mo>
</mrow>
</mrow>
<annotation-xml encoding="MathML-Content">
<apply xref="E">
<and xref="E.2"/>
<apply xref="E.1">
<xor xref="E.1.3"/><ci xref="E.1.2">a</ci><ci xref="E.1.4">b</ci>
</apply>
<apply xref="E.3">
<xor xref="E.3.3"/><ci xref="E.3.2">c</ci><ci xref="E.3.4">d</ci>
</apply>
</apply>
</annotation-xml>
</semantics>
하나의 semantics 요소 내에 등장하는 id와 xref 속성은 대응되는 하위 표현식간의 교차 참조를 설정해줍니다.
병렬 마크업에서는 xref 속성으로 참조되는 모든 id 속성이 반드시
같은 브랜치 내에 있어야 합니다. 이 제한은 교차 참조가 의도치 않은 순환 참조를 유발하는 것을 방지합니다. 이는 포함된 semantics 요소의 다른 브랜치에서 id를 사용하는 것을 막지는
않지만, 같은 semantics 요소 내에서는 참조할 수 없습니다.
semantics 요소의 어느 브랜치든 목적지 id 속성을 포함할 수
있습니다. 어떤 브랜치를 사용할지는 응용에 따라 달라집니다.
일반적으로 병렬 브랜치의 노드들이 1:1 대응되지 않습니다. 예를 들어, 괄호 같은 표현 트리 요소는 내용 트리에는 대응하는 항목이 없을 수 있습니다. 따라서 id 속성은 가장 세분화된 노드 구조를 가지는 브랜치에 두는 것이 유용하며, 나머지 브랜치들은 일부 id에 xref로 연결합니다.
별다른 기준이 없다면, semantics 요소의 첫 브랜치에 id를 두는
것이 현명합니다. annotation을 추가/제거할 때 id를 새로 지정할 필요가 없습니다.
id와 xref 속성을 활용하면 하위 표현식 간의 일치 정보를
원본보다 상수 배만 더 큰 형태로 텍스트에 부여할 수 있습니다. 참조 방향은 하위 표현식 선택이 semantics 요소의 한
자식에서만 가능하다는 의미가 아닙니다. 어떤 브랜치에서든 서브트리를 선택할 수 있고, 다른 브랜치에서 해당 서브트리를 대응시킬 수 있습니다.
교차 참조 병렬 마크업은 annotation-xml 내 어떤 의미 annotation에도 활용할 수 있습니다. 예를 들면
presentation MathML 렌더링과 OpenMath annotation 간 cross referencing을 들 수 있습니다.
앞서 언급한 대로, annotation-xml 내에서 MathML, SVG, HTML 외 네임스페이스
요소는 HTML 문법에서는 유효하지 않습니다. 콜론 및 네임스페이스-접두사 요소 이름을 사용해서는 안 되며, HTML 파서가 local name
om:OMA 형태 노드를 생성하여, 이런 노드는 네임스페이스 지원 XML 파서로 생성할 수 없습니다.
효과적으로 사용되기 위해 MathML은 다양한 렌더러, 처리기, 변환기 및 편집기와 잘 작동해야 합니다. 이 장에서는 MathML을 생성하고 렌더링할 때 수반되는 몇몇 인터페이스 문제를 제기합니다. MathML이 주로 웹 문서에서 수학을 인코딩하기 위해 존재하므로, 가장 중요한 인터페이스 문제는 MathML을 [HTML] 및 [XHTML] 안에 포함시키는 것과, 새로운 HTML이 등장할 경우 그 안에 포함시키는 것과 관련된 문제일 것입니다.
다른 XML 문서에 MathML을 포함할 때 두 가지 종류의 인터페이스 문제가 발생합니다. 첫째, MathML 마크업은 유효한 임베디드 XML 콘텐츠로 인식되어야 하며 오류로 간주되어서는 안 됩니다. 이 문제는 주로 XML에서의 네임스페이스 관리 문제로 볼 수 있습니다 [Namespaces].
둘째, MathML을 생성하고 처리하는 도구들이 신뢰성 있게 통신할 수 있어야 합니다. MathML 도구에는 편집기, 변환기, 컴퓨터 대수 시스템 및 기타 과학 소프트웨어가 포함됩니다. 그러나 MathML 식은 길어지는 경향이 있고 수동 입력 시 오류가 발생하기 쉬우므로, 사용자가 친화적인 변환 및 작성 도구로 MathML을 쉽게 생성할 수 있도록 특별한 주의를 기울여야 하며, 이러한 도구들이 플랫폼 독립적이고 공급업체 독립적으로 신뢰성 있게 함께 작동하도록 해야 합니다.
이 장은 내용 마크업과 표현 마크업 모두에 적용되며, 6. Annotating
MathML: semantics에서 설명된 semantics, annotation 및 annotation-xml 요소에 대한 특정 처리 모델을
설명합니다.
네임스페이스를 지원하는 XML 문서 내에서는 [XML],
[Namespaces] MathML 마크업을 인식하는 바람직한
방법은 MathML 네임스페이스에서 math 요소를 식별하는 것으로, MathML 네임스페이스 URI
http://www.w3.org/1998/Math/MathML를 사용하는 것입니다.
MathML 네임스페이스 URI는 [XHTML] 문서 내에 MathML을 포함시키는 권장 방법입니다. 그러나 일부 사용자 에이전트는 MathML 마크업을 처리하기 위한 특정 확장을 호출할 수 있도록 보조 정보가 필요할 수 있습니다.
MathML을 포함하려는 마크업 언어 사양은 이 권고와 독립적인 MathML 마크업 인식에 대한 특별 조건을 요구할 수 있습니다. 그 조건들은 본 권고에서 표현된 것과 유사해야 하며, MathML 요소의 로컬 이름은 본 권고에서 정의된 것과 동일하게 유지되어야 합니다.
HTML은 임의의 네임스페이스를 허용하지 않지만 MathML 네임스페이스에 대한 내장 지식을 가지고 있습니다.
HTML 파서는 math 요소와 그 자손을 http://www.w3.org/1998/Math/MathML
네임스페이스에 배치하며, 입력이 이전 섹션에서와 같이 네임스페이스가 선언된 XHTML인 것처럼 응용 프로그램에 표시됩니다. MathML 처리에 대한 HTML 파서의 처리 규칙은
7.4.3
Mixing MathML and HTML를 참조하세요.
MathML 식의 렌더링은 종종 웹 브라우저에서 이루어지지만, MathML 처리 기능의 다른 부분은 다른 응용 프로그램에서 더 자연스럽게 수행됩니다. 특히 일반적인 작업은 수식 편집기나 컴퓨터 대수 시스템에서 MathML 식을 여는 것입니다. 따라서 MathML 조각을 식별하는 데 사용해야 할 인코딩 이름을 지정하는 것이 중요합니다.
XML 네임스페이스가 인식되지 않는 환경에서는 가능한 경우 미디어 타입 [RFC2045], [RFC2046] 를 사용하여 MathML 처리기의 호출을 보장해야 합니다. 미디어 타입이 적절하지 않은 환경(예: 일부 플랫폼의 클립보드 포맷)에서는 다음 섹션에 설명된 인코딩 이름을 사용해야 합니다.
MathML은 시각적 표현을 인코딩하기 위한 어휘(표현 마크업, 3. Presentation Markup)와 계산적 구조를 인코딩하기 위한 어휘(내용 마크업, 4. Content Markup)의 두 가지 구분된 어휘를 포함합니다. 일부 MathML 응용은 이 두 어휘 중 하나만을 수입/수출할 수 있고, 다른 응용은 두 어휘를 각각 다르게 생성하고 소비할 수 있으며, 또 다른 응용은 두 가지를 구분 없이 처리할 수 있습니다. 다음의 인코딩 이름들은 필요할 때 내용과 표현 MathML 마크업을 구별하는 데 사용할 수 있습니다.
MathML-Presentation: 인스턴스는 표현 MathML 마크업만을 포함합니다.
미디어 타입: application/mathml-presentation+xml
Windows 클립보드 플레버: MathML Presentation
유니버설 타입 식별자: public.mathml.presentation
MathML-Content: 인스턴스는 내용 MathML 마크업만을 포함합니다.
미디어 타입: application/mathml-content+xml
Windows 클립보드 플레버: MathML Content
유니버설 타입 식별자: public.mathml.content
MathML (일반): 인스턴스는 표현 MathML, 내용 MathML 또는 둘의 혼합을 포함할 수 있습니다.
파일 확장자: .mml
미디어 타입: application/mathml+xml
Windows 클립보드 플레버: MathML
유니버설 타입 식별자: public.mathml
각 인코딩 이름에 대한 자세한 내용은 [MathML-Media-Types]를 참조하세요.
MathML 2는 encoding 속성에 대해 미리 정의된 값 MathML,
MathML-Content, 및 MathML-Presentation을 지정했습니다. 이러한 값은 이전 버전과의 호환성을 위해 미디어
타입 대신 대체로 사용될 수 있습니다. 자세한 내용은 6.2 Alternate representations 및
6.3 Content
equivalents를 참조하세요. 또한 MathML 1.0은 미디어 타입 text/mathml을 제안했으며, 이는 [RFC7303]에 의해 대체되었습니다.
MathML 식은 종종 응용 프로그램 간에 복사-붙여넣기나 드래그 앤 드롭 패러다임을 사용해 교환되며, 파일로 저장되거나 HTTP 프로토콜을 통해 교환됩니다. 이 섹션은 이러한 전송 동안 MathML을 처리하는 권장 방법을 제공합니다.
이 섹션에 설명된 MathML 조각의 전송은 일반적으로 여러 플레버로 MathML 데이터를 제공하여 두 응용 프로그램 컨텍스트 간에 발생합니다. 이러한 플레버는 종종 미디어 타입, 클립보드 포맷, 또는 데이터 플레버라고 불립니다. 생산 응용은 이러한 플레버를 선호 순서대로 나열하고, 소비 응용은 선호 순서대로 검사합니다. 복사-붙여넣기 패러다임에서는 응용이 중앙 클립보드에 콘텐츠를 배치하며, 각 클립보드 포맷마다 하나의 데이터 스트림이 존재합니다; 소비 응용은 선호하는 포맷의 데이터를 읽도록 협상합니다. 드래그 앤 드롭 패러다임에서는 응용이 사용 가능한 포맷을 제공하고, 잠재적 수신자는 제공 목록을 기반으로 드롭을 수락하거나 거부하며, 드롭 동작은 수신 응용이 표시된 포맷 중 하나로 데이터 전송을 요청하도록 합니다. HTTP GET 전송(예: [rfc9110])은 클라이언트가 허용 가능한 미디어 타입 목록을 제출하도록 하고, 서버는 표시된 미디어 타입 중 하나를 사용해 데이터를 제공합니다. HTTP POST 전송은 클라이언트가 서버 응용이 수락 가능한 미디어 타입으로 라벨된 데이터를 제출할 수 있게 합니다.
현재 데스크탑 플랫폼은 유사한 아키텍처를 사용해 복사-붙여넣기 및 드래그 앤 드롭 전송을 제공하지만, 플랫폼에 따라 명칭 체계가 다릅니다. HTTP 전송은 모두 미디어 타입을 기반으로
합니다. 이 섹션은 응용이 제공해야 할 전송 유형, 그 명명 방식, 그리고 semantics, annotation, 및 annotation-xml 요소를 처리하는 방식을 지정합니다.
세 가지 협상 메커니즘을 요약하면, 다음 단락들은 각각 이름(문자열)과 콘텐츠(바이너리 데이터 스트림)을 가진 전송 플레버들을 설명합니다. 이러한 플레버는 제공, 수락, 및/또는 내보내기됩니다.
7.2.4 MathML 인코딩 이름에 나열된 이름들은 MathML 인코딩과 대응하는 전송 플레버를 식별하는 데 사용해야 하는 정확한 문자열입니다. 이러한 이름을 허용하는 운영체제에서는 응용이 이러한 플레버 이름에 대한 지원을 등록해야 합니다(예: Windows에서는 RegisterClipboardFormat 호출, Macintosh 플랫폼에서는 응용 설명자에 유니버설 타입 식별자 선언).
MathML을 전송할 때, 응용은 전송 데이터의 내용이 MathML 문서 유형의 잘 형성된 XML 인스턴스임을 MUST 보장해야 합니다. 구체적으로:
인스턴스는 XML 선언으로 시작할 MAY 있습니다(예: <?xml version="1.0"?>).
인스턴스는 정확히 하나의 루트 math 요소를 포함해야 합니다(MUST).
인스턴스는 루트 math 요소에 MathML 네임스페이스를 선언해야 합니다(MUST).
인스턴스는 루트 math 요소에 schemaLocation
속성을 사용하여 문서가 준수하는 MathML 스키마의 위치를 나타낼 수 있습니다(MAY). schemaLocation 속성이 존재한다고 해서 MathML 인스턴스 소비자가 참조된 스키마를 가져오거나 사용할
것을 요구하지는 않습니다.
상호 운용성을 높이기 위해 인스턴스는 문자 엔티티 이름(예: α)보다 숫자 문자 참조(예: α)를 사용하는 것이 권장됩니다(SHOULD).
인스턴스가 UTF-8이 아닌 인코딩을 사용할 경우, XML 선언에서 또는 UTF-16 데이터의 바이트 순서 표식(BOM)을 통해 문자 인코딩을 지정해야 합니다(MUST).
MathML 마크업을 전송하는 응용은 다음 관례를 준수해야 합니다(SHOULD):
순수 표현 마크업 및/또는 순수 내용 마크업을 지원하는 응용은 사용 가능한 만큼 많은 플레버를 제공해야 합니다(SHOULD).
하나의 MathML 플레버만 내보내는 응용은 더 구체적인 플레버를 결정할 수 없을 경우 이를 MathML로 명명해야 합니다(SHOULD).
응용이 더 구체적인 플레버를 결정할 수 있다면, 일반 플레버와 구체적 플레버를 모두 제공해야 하지만, 수신자가 이를 지원하는 것을 알고 있는 경우에만 구체적 플레버를
전달해야 합니다(SHOULD). 예를 들어 HTTP GET 전송의 경우, 내용 및 표현 마크업에 대한 구체적 전송 타입은
클라이언트가 보낸 HTTP Accept 헤더에 포함된 경우에만 반환해야 합니다.
두 가지 구체적 전송 플레버를 내보내는 응용은 내용 및 표현 전송 플레버뿐만 아니라 일반 플레버도 내보내야 하며, 일반 플레버는 위의 두 플레버를 최상위 MathML
semantics 요소를 사용하여 결합해야 합니다(SHOULD).
응용이 루트 요소의 유일한 자식이 semantics 요소인 MathML 조각을 내보낼 때는, 위 플레버들에 이어
해당 annotation 또는 annotation-xml 요소
각각에 대한 전송 플레버를 제공해야 합니다(SHOULD), 단 전송 플레버가 encoding 속성 값에 따라 인식되고 명명될 수 있으며, 주석 키가 기본값인 alternate-representation인
경우에 한합니다. 각 주석의 전송 내용은 지정된 인코딩의 문자 데이터( annotation 요소의 경우), 잘
형성된 XML 조각( annotation-xml 요소의 경우), 또는 src 속성이 제공하는 URL에서 요청하여 얻은 데이터(주석 참조의 경우)를 포함해야 합니다.
최종 대체 수단으로 응용은 평문 플레버(예: text/plain, CF_UNICODETEXT,
UnicodeText, 또는 NSStringPboardType)로 데이터를 내보낼 수 있습니다(MAY). 응용이 표현의 여러 버전을 가지고 있을 때는 텍스트로 내보낼 버전을 재량에 따라 선택할 수 있습니다. 일부
오래된 MathML 처리기는 평문으로 전송된 MathML 인스턴스가 math 요소로 시작하기를 기대하므로, 텍스트
버전은 일반적으로 XML 선언, DOCTYPE 선언 및 math 요소 앞에 나올 수 있는 다른 XML 서두 자료를
생략해야 합니다(SHOULD). 유니코드 텍스트 버전은 가장 구체성이 낮은 플레버이므로 항상 마지막에 내보내야
합니다(SHOULD).
MathML 인스턴스가 순수 내용 마크업인지 순수 표현 마크업인지를 판별하려면, math, semantics, annotation 및 annotation-xml 요소는 표현 및 내용 마크업 어휘 모두에 속하는 것으로 간주되어야 합니다. math 요소는 모든 MathML 전송에서 루트 요소로 요구되므로 이렇게 처리됩니다. semantics 요소와 그 자식 주석 요소들은 MathML 내의 임의의 주석 메커니즘을 구성하며 어느 쪽 어휘에도 고정되지
않습니다. 따라서 MathML을 소비하는 응용은 두 어휘 중 하나만 구현하더라도 이 네 요소를 항상 처리해야 합니다.
위 권고는 MathML을 생성하는 에이전트가 클립보드를 위해 이미지나 기타 응용 특정 포맷과 같은 바이너리 데이터를 제공하도록 허용할 수 있게 합니다. 이를 수행하는 유일한 방법은
주석의 src 속성을 사용해 바이너리 데이터를 참조하는 것입니다. XML 문자 데이터는 임의 바이트 스트림 데이터 전송을
허용하지 않기 때문입니다.
이 권고들은 이러한 전송 패러다임을 사용하는 MathML 인식 응용 간의 상호운용성을 개선하도록 의도되었지만 상호운용성을 보장하지는 않습니다. 예를 들어 MathML 데이터에서 외부 리소스(예: 스타일시트 등)에 대한 참조는 소비자가 이를 찾지 못하면 상호운용성 문제를 일으킬 수 있으며, HTML을 잘라붙이거나 다른 데이터 타입을 처리할 때 발생할 수 있습니다. 외부 리소스에 대한 참조를 사용하는 응용은 사용자에게 잠재적 문제를 알리고 참조된 리소스를 얻을 수 있는 대체 방법을 제공할 것을 권장합니다. 일반적으로 참조를 해결할 수 없거나 이해하지 못하는 소비자는 외부 참조를 무시해야 합니다.
한 e-러닝 응용이 퀴즈 문제 데이터베이스를 가지고 있으며, 일부는 MathML을 포함합니다. MathML은 여러 출처에서 오고, e-러닝 응용은 단지 표시를 위해 데이터를 전달할 뿐 정교한 MathML 분석 기능은 없습니다. 따라서 해당 응용은 주어진 MathML 인스턴스가 순수 표현인지 순수 내용인지 또는 특정 버전의 MathML 스키마에 대해 유효한지 알지 못합니다. 그러므로 클립보드에 다음과 같은 데이터 포맷을 배치합니다:
| 플레버 이름 | 플레버 내용 |
MathML |
|
Unicode Text |
|
Windows 플랫폼의 수식 편집기는 MathML 3에 대해 유효한 순수 표현 마크업을 생성할 수 있습니다. 따라서 다음과 같은 플레버를 내보냅니다:
| 플레버 이름 | 플레버 내용 |
MathML Presentation |
|
Tiff |
(렌더링 샘플) |
Unicode Text |
|
Mac OS X 플랫폼의 스키마 기반 콘텐츠 관리 시스템은 여러 MathML 표현을 포함합니다. 여기에는 저자들이 작성한 혼합 마크업, 기호 계산 엔진과 인터페이스하기 위한 순수 내용 마크업, 인쇄 출판용 순수 표현 마크업이 포함됩니다. 시스템이 스키마를 사용하므로 마크업은 네임스페이스 접두사와 함께 저장됩니다. 따라서 시스템은 다음과 같은 데이터를 전송할 수 있습니다:
| 플레버 이름 | 플레버 내용 |
public.mathml.presentation |
|
public.mathml.content |
|
public.mathml |
|
public.plain-text.tex |
|
public.plain-text |
|
유사한 콘텐츠 관리 시스템이 웹 기반으로 수학 표현의 MathML 표현을 제공합니다. 이 시스템은 MathML-Presentation, MathML-Content, TeX 및 TIFF 형식의 그림을 생성할 수 있습니다. 브라우징되는 웹 페이지에서 다음과 같은 MathML 조각을 생성할 수 있습니다:
<math xmlns="http://www.w3.org/1998/Math/MathML">
<semantics>
<mrow>...</mrow>
<annotation-xml encoding="MathML-Content">...</annotation-xml>
<annotation encoding="TeX">{1 \over x}</annotation>
<annotation encoding="image/tiff" src="formula3848.tiff"/>
</semantics>
</math>
Windows 플랫폼의 웹 브라우저가 이러한 조각을 수신하고 드래그 앤 드롭 작업의 일부로 내보내려 하면 다음과 같은 플레버를 제공할 수 있습니다:
| 플레버 이름 | 플레버 내용 |
MathML Presentation |
|
MathML Content |
|
MathML |
|
TeX |
|
CF_TIFF |
(formula3848.tiff에서 요청된 그림 파일의 내용) |
CF_UNICODETEXT |
|
MathML은 보통 다른 마크업 언어와 결합되어 사용됩니다. 가장 전형적인 경우는 문서 수준의 마크업 언어(예: HTML 또는 DocBook) 내에서 MathML을 사용하는 것입니다. 또한 복합 문서 형식에 다른 객체 수준 마크업 언어가 포함되는 경우가 흔합니다(예: HTML5에서의 MathML 및 SVG). 다른 일반적인 사용 사례로는 MathML 내에 다른 마크업을 혼합하는 것이 있습니다. 예를 들어, 저작 도구는 편집자가 중단된 위치에서 편집을 계속할 수 있도록 커서 위치나 다른 상태 정보를 나타내는 요소를 MathML 마크업 내에 삽입할 수 있습니다(중단된 부분을 가리키도록).
대부분의 문서 마크업 언어는 인라인 수식(또는 그래픽, 객체 등)의 개념을 가지고 있으므로 MathML 인스턴스를 콘텐츠 모델에 통합하는 자연스러운 방법이 있습니다. 그러나 반대로
MathML 내에 마크업을 포함시키는 것은 명확하지 않은 경우가 많습니다. 많은 MathML 요소에서 자식 요소의 역할이 위치에 의해 정의되기 때문입니다. 예를 들어, apply의 첫 번째 자식은 연산자여야 하고, mfrac의 두 번째 자식은 분모입니다.
이러한 문맥에서 외부 마크업이 등장할 때의 적절한 동작은 문제를 야기합니다. 특정 문맥에서 그러한 동작을 정의할 수 있더라도, 일반 MathML 처리기에는 구현상의 도전 과제를
제공합니다.
이러한 이유로 표준 스키마는 MathML 인스턴스 내에 외부 마크업 요소를 포함하는 것을 허용하지 않습니다.
표준 스키마에서는 다른 네임스페이스의 요소는 허용되지 않지만, 다른 네임스페이스의 속성은 허용됩니다. 알 수 없는 XML 마크업을 만나는 MathML 처리기는 다음과 같이 동작해야 합니다:
비-MathML 네임스페이스의 속성은 조용히 무시해야 합니다.
비-MathML 네임스페이스의 요소는 annotation-xml 요소를 제외하고는 오류로 처리해야 합니다. 요소가 표현
요소의 자식인 경우에는 3.3.5
Error Message <merror>에 설명된
대로 처리해야 합니다. 요소가 내용 요소의 자식인 경우에는 4.2.9
Error Markup <cerror>에 설명된
대로 처리해야 합니다.
예를 들어 mfrac 요소의 두 번째 자식이 알 수 없는 요소라면, 분모가 오류를 나타내도록 하여 분수를 렌더링해야 합니다.
복합 문서 형식에서 MathML을 포함시키도록 설계할 때, 설계자는 MathML의 콘텐츠 모델을 확장하여 추가 요소를 허용할 수 있습니다. 예를 들어, 일반적인 확장은 MathML 스키마를 확장하여 토큰 요소에는 비-MathML 네임스페이스의 요소를 허용하되 다른 요소에는 허용하지 않는 것입니다. 알 수 없는 마크업을 만나는 MathML 처리기는 다음과 같이 동작해야 합니다:
인식되지 않는 XML 속성은 조용히 무시해야 합니다.
MathML 토큰 요소의 인식되지 않는 요소는 조용히 무시해야 합니다.
비-MathML 네임스페이스의 요소는 annotation-xml 요소를 제외하고는 오류로 처리해야 합니다. 요소가 표현
요소의 자식인 경우 3.3.5
Error Message <merror>에 설명된
대로 처리하고, 요소가 내용 요소의 자식인 경우 4.2.9
Error Markup <cerror>에 설명된
대로 처리해야 합니다.
이러한 방식으로 스키마를 확장하는 것은 A. Parsing MathML에
설명된 Relax NG 스키마를 사용하여 쉽게 수행할 수 있으며, 예를 들어 mtext의 콘텐츠 모델을 재정의하는 것만으로도
가능합니다:
default namespace m = "http://www.w3.org/1998/Math/MathML"
include "mathml4.rnc" {
mtext = element mtext {mtext.attributes, (token.content|anyElement)*}
}
여기서 제시된 정의는 MathML 네임스페이스에 속하지 않는 모든 잘 형성된 XML을 mtext의 자식으로 허용합니다. 실제로는 이것이
너무 관대할 수 있습니다. 예를 들어 XHTML+MathML 스키마는 mtext의 추가 자식으로 인라인 XHTML 요소만 허용하고자 할
수 있습니다. 이는 anyElement를 호스트 문서 타입의 적절한 생산 규칙으로 대체하여 달성할 수 있습니다. 자세한 내용은 7.4.1
Mixing MathML and XHTML를 참조하세요.
복합 문서에서 마크업 어휘를 혼합할 때의 고려사항은 문서 유형이 처음 설계될 때 발생합니다. 그러나 문서 유형이 고정되면 특정 소프트웨어 도구가 그들의 필요에 맞게 콘텐츠 모델을 추가로 수정하는 것은 일반적으로 실용적이지 않습니다. 그럼에도 불구하고 이러한 도구들이 MathML 인스턴스 내에 추가 정보를 저장해야 하는 경우가 자주 있습니다. MathML은 보통 저작 도구에 의해 생성되므로, 저작 도구가 MathML 식과 함께 내부 상태에 대한 정보를 저장하여 저자가 이전 상태에서 편집을 재개할 수 있게 하는 것이 특히 흔하고 중요합니다. 예를 들어, 플레이스홀더는 표현의 불완전한 부분을 나타내거나, 표현 내의 삽입 지점을 저장해야 할 수 있습니다.
MathML 식 내에 개인 데이터를 유지해야 하는 응용은 일반적으로 기본 콘텐츠 모델을 변경하지 않고 이를 시도해야 합니다. 이를 지원하기 위해, 특정 복합 문서 형식의 콘텐츠 모델이 허용하는 것과 관계없이 MathML은 다음 전략을 통해 개인 데이터의 저장을 허용합니다:
XML 네임스페이스의 사용을 허용하는 형식에서는 소량의 데이터에 대해 비-MathML 네임스페이스의 속성을 모든 MathML 요소에 허용합니다.
더 큰 양의 데이터를 위해 응용은 semantics 요소를 사용할 수 있습니다(자세한 내용은 6. Annotating MathML:
semantics).
발작성 도구나 표현 MathML 하위 트리에 특정 동작을 연결해야 하는 다른 응용(예: 저자가 채워야 할 불완전한 표현을 표시하기 위해), maction 요소를 사용할 수 있습니다(자세한 내용은 3.7.1 Bind Action to
Sub-Expression 참조).
MathML을 XHTML에 완전히 통합하려면, XHTML에 MathML을 포함할 수 있을 뿐만 아니라 MathML 안에 XHTML을 포함할 수 있어야 합니다. W3C
HTML5 검증기에 사용되는 스키마는 mtext을 확장하여 모든 인라인(phrasing) HTML 요소(내부에 svg 포함)를 mtext 콘텐츠
내에서 사용할 수 있게 합니다. 3.2.2.1
Embedding HTML in MathML의 예를 보세요. 앞서 언급한 바와 같이, mtext
내에 XHTML 요소를 사용하는 MathML 조각은 문서에서 추출되어 단독으로 사용될 때 유효한 MathML이 아닙니다. 편집 도구는 mtext 내의 모든 HTML 마크업을 제거하고 텍스트 대체물로 바꾸는 지원을 제공할 수 있습니다.
대부분의 경우 XHTML 요소(제목, 단락, 목록 등)는 수학적 문맥에 적용되지 않거나 MathML이 이미 수학적 콘텐츠에 특화된 동등하거나 개선된 기능(표, 수학 스타일 변경 등)을 제공하므로 필요하지 않습니다.
현재 브라우저 및 기타 MathML 인식 도구에 대한 호환성과 구현 제안 사항은 W3C Math Working Group 홈페이지를 참조하세요.
수학적 표현을 위한 마크업을 요구하는 비-XML 어휘가 있을 수 있으며, 이 사양을 참조하는 것이 타당할 수 있습니다. HTML은 다음 섹션에서 논의된 중요한 예지만, 다른 예들도
존재합니다. 예를 들어 \frac{a}{b}와 같은 TeX 유사 문법을 사용해 <mfrac>
및 <mi>를 명시적으로 사용하지 않을 수 있습니다. 시스템이 지정된 문법을 파싱하고 MathML 스키마에 대해
검증 가능한 트리를 생성한다면 그 시스템은 MathML 응용으로 간주될 수 있습니다. 다만 이러한 시스템을 사용하는 문서는 유효한 MathML이 아닙니다. 가능한 경우 이러한 문법
구현체는 여기서 정의한 XML 구문으로 수학 표현을 출력하는 기능을 제공해야 합니다. 그러면 그러한 응용은 D.1 MathML Conformance에 설명된 대로 MathML-출력 준수 처리기가
됩니다.
비-XML 기반 시스템의 중요한 예는 [HTML]에서 정의됩니다. HTML 내에서 MathML을 고려할 때 두 가지 문제를 별도로 고려해야
합니다. 첫째, 스키마는 위에서 XHTML 문맥에서 설명한 것처럼 mtext에 HTML을 허용하도록 확장됩니다. 둘째, XML
파서 대신 HTML 파서를 사용합니다. HTML 파서에 의한 MathML 파싱은 [HTML]에 규범적으로 정의되어 있습니다. 해당 기술은 파서 구현자를
대상으로 하며 입력의 각 문자를 파싱할 때 파서의 상태 전이를 기준으로 작성됩니다. 아래의 비규범적 설명은 더 높은 수준의 설명과 예를 제공하는 것을 목표로 합니다.
XML 파싱은 완전히 규칙적이며, 어떤 XML 문서도 사용되는 특정 어휘를 참조하지 않고 파싱될 수 있습니다. 반면 HTML 파싱은 HTML 어휘 전용의 사용자 정의 파서로 각 요소에 대한 특정 규칙을 갖습니다. 그럼에도 불구하고 XML과 마찬가지로 HTML 파서는 파싱과 검증을 구분합니다; 일부 입력은 렌더링은 될 수 있지만 파싱 오류로 분류되어 검증기에서 보고될 수 있습니다(보통 렌더링 시스템은 이를 보고하지 않습니다).
MathML 사용에 영향을 미치는 주요 차이점은 다음과 같이 요약됩니다:
대부분의 경우 속성 값은 인용부호가 필요 없습니다: <mfenced open=(
close=)>는 올바르게 파싱됩니다.
종료 태그는 많은 경우 생략될 수 있습니다.
HTML은 HTML, MathML 및 SVG의 세 가지 내장 네임스페이스 외의 네임스페이스를 지원하지 않으며, 네임스페이스 접두사를 지원하지 않습니다. 따라서
<mml:math
xmlns:mml="http://www.w3.org/1998/Math/MathML">와 같은 접두사 형식을 사용할 수 없고, <math
xmlns="http://www.w3.org/1998/Math/MathML">는 사용할 수 있지만 네임스페이스 선언은 본질적으로 무시되며 입력은
<math>로 처리됩니다. 어느 경우든 math 요소와 그 자손은 MathML
네임스페이스에 배치됩니다. 6. Annotating
MathML: semantics에서 언급한 바와 같이 네임스페이스 지원의 부재는 HTML에서 사용될 때 다른 어휘로 MathML에 주석을 다는 가능성을
제한합니다.
XML 파서와 달리 HTML 파서는 어떤 입력 문자열이라도 받아들여 정의된 결과를 생성하도록 정의되어 있습니다(이는 비준수로 분류될 수 있음). 극단적인 예로
<math></<><z =5>는 검증기에서 파싱 오류로 표시되지만, 파서는 주석
<를 포함하는 math 요소와 속성 이름이 =5이고 값이 ""인 요소
z를 포함하는 트리를 반환할 수 있습니다.
<mtext>, <mo>, <mn>, <mi>,
<ms> 토큰 요소 내부에 있거나 <annotation-xml> 요소가 있고 그 encoding 속성 값이 text/html 또는
annotation/xhtml+xml인 경우를 제외하고, HTML 요소가 나타나면 수식 표현을
종료시키고 모든 열린 MathML 요소를 닫아 HTML 요소가 외부 HTML 문맥으로 해석되게 합니다. 이후의 MathML 요소들은 더 이상 <math>에 포함되지 않으므로 잘못된 HTML 요소로 파싱되어 MathML로 렌더링되지 않습니다. 예는
6.7.3 Using annotation-xml in HTML documents를 참조하세요.
기존 MathML 응용과의 호환성 관점에서 저자와 편집 시스템은 HTML 문서에 포함될 때에도 잘 형성된 XML인 MathML 조각을 사용해야 합니다. 또한 HTML 문서에서 MathML을 수용하는 응용은 이러한 HTML 파서 기능을 사용하는 MathML을 허용해야 하지만, MathML을 이식 가능한 XML 구문으로 내보내는 방법을 제공해야 합니다.
MathML에서 어떤 요소가 링크로 지정된다는 것은 href 속성이 존재하는 경우입니다.
MathML은 모든 요소에서 href 속성 사용을 허용합니다.
그러나 대부분의 사용자 에이전트는 중첩 링크나 표시되지 않는 요소에 대한 링크를 구현할 방법이 없으므로,
이러한 링크들은 아무 효과가 없을 수 있습니다.
시각적으로 일반적으로 렌더링되지 않아 링크 요소로 사용해서는 안 되는 표현 마크업 요소들은 아래 표에 나와 있습니다.
| 링크 요소로 사용해서는 안 되는 MathML 요소 | |
mprescripts |
none |
malignmark |
maligngroup |
[MathML-Core]에서는
모든 요소에서 href 속성 사용이 지원되지 않으며,
이를 위해 특별한 a 요소가 도입되었습니다.
MathML-Core 호환을 목표로 하는 MathML 생성기는
href 속성 사용을 a로 제한하거나,
JavaScript polyfill을 활용할 수 있습니다.
링크 메커니즘을 지원하는 복합 문서 형식에서는,
MathML 수식 내부로의 링크 위치를 지정하기 위해 id 속성을 사용해야 합니다.
id 속성은 모든 MathML 요소에 허용되며,
그 값은 문서 내 유일해야 하므로 이 목적에 적합합니다.
새 글리프 도입을 제외하면, 이미지를 사용하려 할 만한 많은 상황은 레이블이 붙은 다이어그램을 표시하는 데 해당합니다. 예: 매듭 다이어그램, 벤 다이어그램, 다이킨 다이어그램, 파인만 다이어그램 및 교환도 등이 있습니다. 이러한 내용은 구조화된 그래픽과 MathML 마크업의 조합으로 더 잘 인코딩될 수 있습니다. 그러나 이 시점에서는 W3C 수학 활동이 '레이블 달린 다이어그램' 같은 일반적인 개념을 인코딩하는 마크업 언어를 정의할 범위를 벗어납니다. 최신 W3C 수학 활동과 그래픽 활동에 대한 내용은 각각 http://www.w3.org/Math 및 http://www.w3.org/Graphics를 참조하세요.
추가 그래픽 콘텐츠를 포함하는 한 가지 메커니즘은 다음 예시와 같이 semantics 요소를 이용하는 것입니다:
<semantics>
<apply>
<intersect/>
<ci>A</ci>
<ci>B</ci>
</apply>
<annotation-xml encoding="image/svg+xml">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 290 180">
<clipPath id="a">
<circle cy="90" cx="100" r="60"/>
</clipPath>
<circle fill="#AAAAAA" cy="90" cx="190" r="60" style="clip-path:url(#a)"/>
<circle stroke="black" fill="none" cy="90" cx="100" r="60"/>
<circle stroke="black" fill="none" cy="90" cx="190" r="60"/>
</svg>
</annotation-xml>
<annotation-xml encoding="application/xhtml+xml">
<img xmlns="http://www.w3.org/1999/xhtml" src="intersect.png" alt="A intersect B"/>
</annotation-xml>
</semantics>
여기서 annotation-xml 요소들은 두 집합의 교집합을 MathML-Content로 묘사한 대체 표현을 나타냅니다. 첫
번째는 Scalable Vector Graphics(SVG) 형식이며 [SVG]를
사용합니다(수학과 SVG를 통합하는 XHTML 프로필 정의는 [XHTML-MathML-SVG] 참조). 두 번째는 XHTML 단편으로
삽입된 XHTML img 요소를 사용합니다. 이 상황에서 MathML 처리기는 표시를
위해 이러한 표현들 중 어떤 것을 사용할 수 있으며, 그림과 같은 그래픽 형식을 생성할 수도 있습니다.
이 예에서 semantics 표현은 첫 번째 자식으로 MathML-Content 마크업으로 주어집니다. 이 점에서 이는 XHTML의 img 요소의 alt 속성과 가장 유사한 표현이며, 비시각적
렌더링에 가장 적합한 선택일 것입니다.
MathML이 CSS를 지원하는 환경에서 렌더링될 때 스타일시트로 수학 스타일 속성을 제어하는 것은 바람직하지만, 수학 레이아웃 스키마의 형식이 CSS 시각적 형식 모델과 상당히 다르고 수학 레이아웃에 영향을 주는 많은 스타일 매개변수는 직접적인 텍스트 유사물이 없기 때문에 간단하지 않습니다. 유사한 속성이 있는 경우에도 해당 속성에 대한 합리적 값이 일치하지 않을 수 있습니다. 이 차이 때문에 MathML을 네이티브로 지원하는 응용은 레이아웃에 영향을 주지 않는 속성들로 CSS 속성 적용을 제한할 수 있습니다.
일반적으로 CSS와 수학 스타일 속성의 상호작용 모델은 다음과 같이 진행됩니다. CSS 스타일시트는 예를 들어 다음과 같은 규칙을 제공할 수 있습니다:
math *.[mathsize="small"] {
font-size: 80%
}
이 규칙은 math 요소의 자식 중 mathsize 속성이 small로 설정된
모든 요소에 대해 CSS font-size 속성을 설정합니다. MathML 렌더러는 스타일 엔진에 CSS 환경을 질의하고, 반환된 값을 자체 레이아웃 알고리즘에
대한 입력으로 사용합니다. MathML은 스타일 정보가 환경에서 상속되는 메커니즘을 지정하지 않습니다. 그러나 주변 스타일 환경의 속성과 MathML-특유 렌더링 규칙 간의 상호작용에
대한 제안 규칙은 3.2.2 Mathematics style
attributes common to token elements 및 더 일반적으로 3. Presentation
Markup 전반에 걸쳐 논의됩니다.
그러나 MathML에 대한 CSS 스타일시트를 작성할 때는 주의가 필요합니다. 수학 기호의 타이포그래픽 속성 변경은 방정식의 의미를 바꿀 수 있으므로, 문서 전체의 타이포그래픽 스타일 변경이 포함된 MathML 식에 영향을 주지 않도록 스타일시트를 작성해야 합니다.
또 다른 피해야 할 함정은 표현의 올바른 이해에 필요한 타이포그래픽 스타일 정보를 CSS로 제공하는 것입니다. 의미 전달을 위해 CSS에 의존하는 표현은 컴퓨터 대수 시스템과 같은 비-CSS 환경으로 이식되지 않습니다. MathML 3.0의 새로운 수학 스타일 속성의 논리적 값을 CSS 규칙의 선택자로 사용하면 표현의 의미에 필요한 스타일 정보가 MathML 내에 직접 인코딩되도록 보장할 수 있습니다.
MathML 3.0은 사용자 에이전트가 스타일 정보를 처리하는 방법을 지정하지 않습니다. 이는 많은 비-CSS MathML 환경이 존재하고, 서로 다른 사용자 에이전트와 렌더러가 CSS 정보에 접근할 수 있는 정도가 크게 다르기 때문입니다.
CSS 또는 유사한 스타일시트는 선택된 MathML 요소의 렌더링 속성 변경을 지정할 수 있습니다. 렌더링 속성은 요소의 속성이나 렌더러에 의해 자동으로 변경될 수도 있으므로, 다양한 출처에서 요청된 변경이 발생하는 순서를 지정할 필요가 있습니다. 그 순서는 [CSS21]의 캐스케이딩 순서로 정의되며, 비-CSS 표현 힌트의 우선순위를 고려합니다.
TeX에는 MathML의 mover/munder
악센트에 대응하는 여러 명령어가 있습니다. 규격은 이러한 악센트에 어떤 문자를 사용할지 명시하지 않습니다. 일부 경우에는 ASCII 문자를 사용할 수 있지만 유사한 비-ASCII 문자가
있는 경우도 있습니다. 많은 이러한 문자들은 mover/munder와
함께 사용될 때 신축(stretchy)이 되어야 합니다.
최소한 규격은 렌더러와 MathML 생성기가 어떤 문자(또는 모든 선택지)를 (신축 가능한) 악센트로 사용할지 일치하도록 하기 위해 다음 항목들 중 어느 것을 사용해야 하는지 명시해야 합니다(몇 가지 옵션이 나열됨):
\hat -- '^', U+0302, U+02C6\check -- 'v', U+0306, U+02D8\tilde -- '~', U+0303, U+223C, U+02DC\acute -- U+0027, U+00B4, U+02CA, U+0301, U+02B9, U+2032\grave -- U+0060, U+02BC, U+02CB, U+0300\dot -- '.', U+00B7, U+02D9, U+0307, and potentially others like
U+2E33\ddot -- '..', U+00A8, U+0308\breve -- U+02D8, U+0306\bar -- '_', '-', U+00AF, U+02C9, U+0304, U+0305, U+0332, U+FF3F
vec -- U+20D7, U+2192, U+27F6참고: MathPlayer 사용 경험을 바탕으로 보면, 이러한 대안들이 실제 환경에서 많이 발견되었으므로 Core 규격이 이러한 사항들을 명시하는 것이 중요합니다(사람들이 어떤 문자를 사용해야 하는지 추측해서는 안 됩니다).
\overline -- should be same as \bar \underline -- same as \bar?이 장은 MathML 내에서 사용하기 위한 문자에 대한 논의, 사용 권장사항, 그리고 유니코드[Unicode]에 규정된 범용 다중 옥텟 문자 집합(UCS) ISO-10646에 있는 해당 코드 포인트의 올바른 형태에 관한 경고를 포함합니다.
추가적인 수학적 영숫자 기호는 Unicode 3.1에서 제공되었습니다.
3.2.2 토큰 요소에 공통적인 수학 스타일 속성에서 논의된
바와 같이, MathML은 수학적 영숫자 문자를 지정하는 대안 메커니즘을 제공합니다.
즉, mi와 같은 토큰 요소에 mathvariant 속성을 사용하여 토큰
요소의 문자 데이터가 수학적 영숫자 기호를 선택함을 표시할 수 있습니다.
Plane 1의 수학적 영숫자 기호의 중요한 용도는 일반적으로 프락투어(Fraktur), 그리스 문자, 굵은체(Boldface), 스크립트(Script)와 같은 특별한 수학 글꼴로 인쇄되는 식별자에 사용되는 것입니다. 예를 들어, 수학적 프락투어 알파벳은 U+1D504("A")에서 U+1D537("z")까지입니다. 따라서 프락투어 문자를 사용하는 변수 식별자는 다음과 같이 마크업할 수 있습니다.
<mi>𝔄<!--BLACK-LETTER CAPITAL A--></mi>
mathvariant 속성을 사용하는 것입니다:
<mi mathvariant="fraktur">A</mi>
MathML 처리기는 수학적 영숫자 문자가 등장할 때(나타나면) 해당 문자를 스타일이 없는 문자와 그에 대응하는 mathvariant 속성 값의 조합과 동일하게 처리해야 합니다.
렌더러는 적어도 동등한 유니코드 코드 포인트를 가진 조합들을 구별하여 렌더링해야 하며, 할당된 유니코드 코드 포인트가 없거나 적절한 글꼴 지원이 없는 조합은 무시해도 됩니다.
일부 문자는 인쇄나 대체 렌더링의 품질에 중요하지만, 그 자체에 해당하는 글리프 표시가 직접적으로 존재하지 않을 수 있습니다. 여기서는 이러한 문자를 비표시 문자라고 부릅니다. 그 역할은 3. Presentation Markup 및 4. Content Markup에서 논의됩니다.
MathML에서 줄 바꿈 같은 페이지 구성 제어는 mo 및 mspace 요소의 적절한
속성 사용으로 처리됩니다.
아래 문자는 단순한 공백 문자가 아닙니다. 이들은 인쇄 품질을 높이는 텍스트적 단서를 제공하고, 올바른 음성 출력(오디오 렌더링)을 허용하며, 시각적으로 애매한 텍스트에서 수학적 의미를 유일하게 복원할 수 있게 해주기 때문에 UCS에 특히 중요한 새 추가 항목들입니다.
| 유니코드 코드 포인트 | 유니코드 이름 | 설명 |
| U+2061 | FUNCTION APPLICATION | 표현 태깅에서 함수 적용을 나타내는 문자
(3.2.5 연산자, 괄호, 구분자 또는 악센트
<mo>) |
| U+2062 | INVISIBLE TIMES | 표시 없이 이해되는 곱셈을 표시
(3.2.5 연산자, 괄호, 구분자 또는 악센트
<mo>) |
| U+2063 | INVISIBLE SEPARATOR | 예: 지수에서 구분자로 사용
(3.2.5 연산자, 괄호, 구분자 또는 악센트
<mo>) |
| U+2064 | INVISIBLE PLUS | 특히 1½과 같은 구성에서 덧셈을 표시
(3.2.5 연산자, 괄호, 구분자 또는 악센트
<mo>) |
수학 텍스트에서 꽤 자주 나타나고 특별한 의미를 갖지만 UCS에서 다른 유사 문자와 자주 혼동되는 문자들이 있습니다. 어떤 경우에는 일반 키보드 문자가 더 적절한 수학 문자 대신 널리 사용되어 굳어졌습니다. 다른 경우에는 문자가 공식과 텍스트 양쪽에서 정당한 용도가 있지만, 렌더링 및 글꼴 관례가 충돌합니다. 이러한 모든 문자를 여기서는 이상 문자(anomalous characters)라고 부릅니다.
일반적인 Latin-1 기반 키보드에는 중요한 수학 문자와 시각적으로 유사한 여러 문자가 포함되어 있습니다. 따라서 이러한 문자들은 더 정확한 수학적 대응물 대신 자주 대체되어 사용됩니다.
가장 흔한 일반 텍스트 문자는 U+002D [HYPHEN-MINUS]입니다. 유니코드 이름이 보여주듯이, 이는 산문 맥락에서는 하이픈으로 사용되고, 수식에서는 마이너스나 음수
부호로 사용됩니다.
텍스트 용도로는 U+2010 [HYPHEN]라는 특정 코드 포인트가 있어 산문 맥락에 의도되며 하이픈 또는 짧은 대시로 렌더링되어야 합니다.
수학적 용도로는 U+2212 [MINUS SIGN]이라는 코드 포인트가 있어 수식에 의도되며 더 긴 마이너스 또는 음수 부호로 렌더링되어야 합니다.
MathML 렌더러는 mo와 같은 수식 맥락에서 U+002D [HYPHEN-MINUS]를 U+2212 [MINUS
SIGN]과 동등하게 처리해야 하고, mtext와 같은 텍스트 맥락에서는 U+2010 [HYPHEN]과 동등하게 처리해야
합니다.
일반적인 유럽 키보드에는 아포스트로피 또는 단일 인용 부호(직립 또는 오른쪽 인용부호)로 간주되는 키가 있습니다. 따라서 하나의 키가 산문 입력에서 U+0027 [APOSTROPHE]와 U+2019 [RIGHT SINGLE QUOTATION MARK]를 동시에 입력하는 데 사용됩니다. 수학적 맥락에서는 이것이 프라임을 나타내는 데에도 자주 사용되며, 이 경우 프라임은 U+2032 [PRIME]여야 합니다. 유니코드는 이 기호의 중복 사용을 인지하고 있으며 이것이 분 또는 피트 단위를 나타낼 수 있다고 언급합니다. 일반 산문 텍스트에서는 U+0027 [APOSTROPHE]와 U+2019 [RIGHT SINGLE QUOTATION MARK]는 기준선 중앙보다 약간 작고 올라간 글리프를 가지며 적절한 글꼴이 이러한 작은 올라간 글리프를 제공합니다. 수학용 U+2032 [PRIME]도 풍부한 유니코드 글꼴에서 유사하게 처리됩니다.
MathML 렌더러는 수식 맥락에서 적절할 때 U+0027 [APOSTROPHE]를 U+2032 [PRIME]로 처리하는 것이 권장됩니다.
마지막으로 '프라임'은 키릴 문자 U+044C [CYRILLIC SMALL LETTER SOFT SIGN]의 음역에서 종종 사용된다는 점에 유의하세요. 이 프라임의 다른 용도는 수학 공식에 대한 고려사항에 포함되지 않습니다.
마이너스 및 프라임 문자가 가장 일반적이고 중요한 키보드 문자이지만, 때때로 사용되는 다른 키보드 문자 대체도 여럿 있습니다. 예를 들어 어떤 경우에는
<mo>''</mo>
를 U+2033 [DOUBLE PRIME]로 처리할 것을 기대할 수 있으며, 유사하게 U+2034 [TRIPLE PRIME] 및 U+2057 [QUADRUPLE PRIME]에 대해 대응되는 대체가 있을 수 있습니다. 비슷하게 때로는 U+007C [VERTICAL LINE]가 U+2223 [DIVIDES]로 사용되기도 합니다. MathML은 이를 응용-특정 저작 관례로 간주하며 더 나은 상호운용성을 위해 저작 도구가 더 정확한 수학 문자를 사용하여 마크업을 생성할 것을 권장합니다.
UCS에는 전통적으로 자연스러운 '스크립트' 특성을 가진 것으로 여겨져 온 여러 문자가 있습니다. 이러한 문자들의 시각적 표현은 스크립트와 유사하여 기준선에서 올라가고 기본 글꼴 크기보다 작습니다. 온도 기호(degree)와 프라임 문자가 그 예입니다. 텍스트에서 이러한 문자들은 뒤따르는 식별자와 연속으로 나타나며 보통 동일한 글꼴로 렌더링됩니다. 이러한 문자들을 여기서는 의사-스크립트(pseudo-scripts)라고 부릅니다.
거의 모든 수학적 맥락에서 의사-스크립트 문자는 명시적인 스크립트 마크업을 사용해 기본 표현에 연관되어야 합니다. 예를 들어, "x 프라임"의 선호 인코딩은
<msup><mi>x</mi><mo>′<!--PRIME--></mo></msup>
이고, 다음과 같지 않습니다
<mi>x'</mi>
또는 명시적 스크립트 구성 없이 다른 어떤 변형도 마찬가지입니다. 다만 mtext와 같은 텍스트 문맥 내에서는 의사-스크립트를
다른 문자 데이터와 연속으로 사용하는 것이 허용됩니다.
명시적 마크업이 수학적 문맥에서 바람직한 이유는 두 가지입니다. 첫째, 의사-스크립트를 첨자(identifier with subscript)와 함께 사용할 때 조판 문제가 발생합니다. 전통적으로 x'의 첨자는 프라임 아래에 쌓이는 방식으로 렌더링됩니다. 이는 스크립트 마크업으로 쉽게 달성됩니다. 예:
<mrow><msubsup><mi>x</mi><mn>0</mn><mo>′<!--PRIME--></mo></msubsup></mrow>
반면에,
<mrow><msub><mi>x'</mi><mn>0</mn></msub></mrow>
는 스크립트가 어긋난 형태로 렌더링됩니다.
이는 렌더러가 의사-스크립트를 일반적인 위첨자 위치에 있는 대부분의 다른 문자 코드와 다르게 처리해야 함을 의미합니다. 대부분 글꼴에서 의사-스크립트 글리프는 이미 작아지고 기준선에서 올라가 있습니다.
명시적 스크립트 마크업이 문자 병치보다 바람직한 두 번째 이유는 일반적으로 의도된 수학적 구조를 더 잘 반영하기 때문입니다. 예를 들어,
<msup>
<mrow><mo>(</mo><mrow><mi>f</mi><mo>+</mo><mi>g</mi></mrow><mo>)</mo></mrow>
<mo>′<!--PRIME--></mo>
</msup>
는 여기서 프라임이 전체 표현식에 작용함을 정확히 반영하며, 프라임이 오른쪽 괄호에만 작용한다고 암시하지 않습니다.
그러나 모든 MathML 토큰 요소의 데이터 모델은 유니코드 텍스트이므로 다음과 같은 구성이 유효한 MathML 마크업으로 포함될 수 있는 가능성을 배제할 수는 없습니다.
<mrow><mi>x'</mi></mrow>
및
<mrow><mi>x</mi><mo>'</mo></mrow>
첫 번째 형태는 드물게 x'라는 다문자 식별자를 미분된 함수 x와 구별하기 위해 정당하게 사용될 수 있지만, 이러한 형태는 일반적으로 피해야 합니다. 저작 및 검증 도구는 권장되는 스크립트 마크업을 생성하도록 권장됩니다:
<mrow><msup><mi>x</mi><mo>′<!--PRIME--></mo></msup></mrow>
U+2032 [PRIME] 문자는 아마도 가장 흔한 의사-스크립트이지만, 아래에 나열된 것처럼 많은 다른 문자들도 있습니다:
| 의사-스크립트 문자들 | |
| U+0022 | QUOTATION MARK |
| U+0027 | APOSTROPHE |
| U+002A | ASTERISK |
| U+0060 | GRAVE ACCENT |
| U+00AA | FEMININE ORDINAL INDICATOR |
| U+00B0 | DEGREE SIGN |
| U+00B2 | SUPERSCRIPT TWO |
| U+00B3 | SUPERSCRIPT THREE |
| U+00B4 | ACUTE ACCENT |
| U+00B9 | SUPERSCRIPT ONE |
| U+00BA | MASCULINE ORDINAL INDICATOR |
| U+2018 | LEFT SINGLE QUOTATION MARK |
| U+2019 | RIGHT SINGLE QUOTATION MARK |
| U+201A | SINGLE LOW-9 QUOTATION MARK |
| U+201B | SINGLE HIGH-REVERSED-9 QUOTATION MARK |
| U+201C | LEFT DOUBLE QUOTATION MARK |
| U+201D | RIGHT DOUBLE QUOTATION MARK |
| U+201E | DOUBLE LOW-9 QUOTATION MARK |
| U+201F | DOUBLE HIGH-REVERSED-9 QUOTATION MARK |
| U+2032 | PRIME |
| U+2033 | DOUBLE PRIME |
| U+2034 | TRIPLE PRIME |
| U+2035 | REVERSED PRIME |
| U+2036 | REVERSED DOUBLE PRIME |
| U+2037 | REVERSED TRIPLE PRIME |
| U+2057 | QUADRUPLE PRIME |
또한 Unicode의 Superscript and Subscript 블록(U+2070에서 시작)에 있는 문자들은 수학 공식에서 등장할 때 의사-스크립트로 취급되어야 합니다.
여러 문자가 키보드에서 흔히 사용된다는 점에 주의하세요. 여기에는 U+002A [ASTERISK], U+00B0 [DEGREE SIGN], U+2033 [DOUBLE PRIME], 그리고 U+2035 [REVERSED PRIME] (백 프라임으로도 알려짐)가 포함됩니다.
UCS에는 다양한 자연어의 여러 악센트에 사용되도록 의도된 많은 결합 문자가 있습니다. 그들 중 일부는 수학적 악센트에 필요한 마크업을 제공하는 것처럼 보일 수 있습니다. 그러나 수학적 마크업에서는 결합 문자를 사용해서는 안 됩니다. 위에서 논의한 것처럼 위첨자, 아래첨자, 언더스크립트, 오버스크립트 구성은 이러한 목적으로 사용되어야 합니다. 물론 결합 문자는 다문자 식별자에 필요에 따라 사용되거나 텍스트 문맥에서 사용될 수 있습니다.
결합 문자가 수학적 마크업에서 자연스럽게 등장하는 또 다른 경우가 있습니다. 예를 들어 몇몇 관계 기호들은 부정(negation)과 관련된 기호를 가집니다. 예: U+226F [NOT GREATER-THAN]은 U+003E [GREATER-THAN SIGN]의 부정입니다. U+226F의 글리프는 보통 U+003E에 슬래시가 그어진 형태입니다. 따라서 이는 결합 슬래시 U+0338 [COMBINING LONG SOLIDUS OVERLAY]를 사용해 U+003E-0338로도 표현될 수 있습니다. 이는 충분히 일반적인 수학적 사용에서 별도의 유니코드 코드 포인트를 가질 만큼 25개의 다른 문자에 해당합니다. 반대 방향으로는 [Entities]에 나열된 31개의 문자 엔티티 이름이 U+0338 [COMBINING LONG SOLIDUS OVERLAY]을 사용하여 표현되어야 한다고 명시되어 있습니다.
유사하게, 수학 문자들 중에는 수직 막대 오버레이 U+20D2 [COMBINING LONG VERTICAL LINE OVERLAY]로 부정이 주어지는 것들이 있습니다. 일부는 미리 조합된 형태로 존재하고, 일부는 명시적으로 조합으로 주어진 문자 엔티티가 있습니다. 또한 U+0333 [COMBINING DOUBLE LOW LINE], U+20E5 [COMBINING REVERSE SOLIDUS OVERLAY], 그리고 U+FE00 [VARIATION SELECTOR-1]의 사용으로 지정된 변형들도 예로 들 수 있습니다. 이러한 사례의 전체 목록은 [Entities]의 목록을 참조하세요.
일반 규칙은 기본 문자 뒤에 결합 문자들이 붙어 있는 경우, 그 조합이 만약 존재한다면 미리 합성된 문자처럼 취급해야 한다는 것입니다.
Issue 178
Relax NG 스키마는 MathML의 XML 직렬화를 검사하는 데 사용될 수 있으며, HTML 직렬화와 같은 다른 MathML 직렬화의 검증을 위한 기반으로 작동합니다.
XML 직렬화를 사용하는 경우에도, 이 스키마를 적용하기 전에 입력을 일부 정규화해야 할 수 있습니다. 특히 HTML을 따르는 경우, [MathML-Core]는
onclick과 같은 속성이 아무 대소문자 조합으로 지정되는 것을 허용합니다(예: OnClick="..."). 여기서 속성 이름이 대소문자를
구분하지 않는다고 지정하는 것은 실무적으로 불가능하므로 소문자 이름만 허용됩니다. 유사하게 data- 접두사로 시작하는 모든 속성은 유효한 것으로 간주되어야
합니다. 이 스키마는 고정된 속성 data-other만 허용하므로, 검증 전에 data 속성을 제거하도록 입력을 정규화하거나 특정 응용에서 사용하는 속성을
허용하도록 스키마를 확장해야 합니다.
MathML 문서는 MathML용 RelaxNG 스키마를 사용하여 검증되어야 합니다. XML 인코딩(http://www.w3.org/Math/RelaxNG/mathml4/mathml4.rng) 또는 축약 표기(https://www.w3.org/Math/RelaxNG/mathml4/mathml4.rnc)로 제공되며, 이 축약 표기 또한 아래에 제시되어 있습니다.
DTD와 달리 RelaxNG 스키마를 문서와 연결하는 문서 내 방법은 없습니다.
MathML Core는 MathML Core에 명세되어 있으나, 이 스키마는 MathML 4의 스키마와 함께 개발되어 여기 제시됩니다. 또한 https://www.w3.org/Math/RelaxNG/mathml4/mathml4-core.rnc에서 찾을 수 있습니다.
# MathML 4 (Core Level 1) # ####################### # Copyright 1998-2024 W3C (MIT, ERCIM, Keio, Beihang) # # Use and distribution of this code are permitted under the terms # W3C Software Notice and License # http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 default namespace m = "http://www.w3.org/1998/Math/MathML" namespace h = "http://www.w3.org/1999/xhtml" start |= math math = element math {math.attributes,ImpliedMrow} MathMLoneventAttributes = attribute onabort {text}?, attribute onauxclick {text}?, attribute onblur {text}?, attribute oncancel {text}?, attribute oncanplay {text}?, attribute oncanplaythrough {text}?, attribute onchange {text}?, attribute onclick {text}?, attribute onclose {text}?, attribute oncontextlost {text}?, attribute oncontextmenu {text}?, attribute oncontextrestored {text}?, attribute oncuechange {text}?, attribute ondblclick {text}?, attribute ondrag {text}?, attribute ondragend {text}?, attribute ondragenter {text}?, attribute ondragleave {text}?, attribute ondragover {text}?, attribute ondragstart {text}?, attribute ondrop {text}?, attribute ondurationchange {text}?, attribute onemptied {text}?, attribute onended {text}?, attribute onerror {text}?, attribute onfocus {text}?, attribute onformdata {text}?, attribute oninput {text}?, attribute oninvalid {text}?, attribute onkeydown {text}?, attribute onkeypress {text}?, attribute onkeyup {text}?, attribute onload {text}?, attribute onloadeddata {text}?, attribute onloadedmetadata {text}?, attribute onloadstart {text}?, attribute onmousedown {text}?, attribute onmouseenter {text}?, attribute onmouseleave {text}?, attribute onmousemove {text}?, attribute onmouseout {text}?, attribute onmouseover {text}?, attribute onmouseup {text}?, attribute onpause {text}?, attribute onplay {text}?, attribute onplaying {text}?, attribute onprogress {text}?, attribute onratechange {text}?, attribute onreset {text}?, attribute onresize {text}?, attribute onscroll {text}?, attribute onsecuritypolicyviolation {text}?, attribute onseeked {text}?, attribute onseeking {text}?, attribute onselect {text}?, attribute onslotchange {text}?, attribute onstalled {text}?, attribute onsubmit {text}?, attribute onsuspend {text}?, attribute ontimeupdate {text}?, attribute ontoggle {text}?, attribute onvolumechange {text}?, attribute onwaiting {text}?, attribute onwebkitanimationend {text}?, attribute onwebkitanimationiteration {text}?, attribute onwebkitanimationstart {text}?, attribute onwebkittransitionend {text}?, attribute onwheel {text}?, attribute onafterprint {text}?, attribute onbeforeprint {text}?, attribute onbeforeunload {text}?, attribute onhashchange {text}?, attribute onlanguagechange {text}?, attribute onmessage {text}?, attribute onmessageerror {text}?, attribute onoffline {text}?, attribute ononline {text}?, attribute onpagehide {text}?, attribute onpageshow {text}?, attribute onpopstate {text}?, attribute onrejectionhandled {text}?, attribute onstorage {text}?, attribute onunhandledrejection {text}?, attribute onunload {text}?, attribute oncopy {text}?, attribute oncut {text}?, attribute onpaste {text}? MathMLlink.attributes= attribute attributionsrc {text}?, attribute download {mathml-boolean}?, attribute filename {text}?, attribute href {text}?, attribute hreflang {text}?, attribute referrerpolicy {text}?, attribute rel {text}?, attribute target {text}?, attribute type {text}? # Sample set. May need preprocessing # or schema extension to allow more see MathML Core (and HTML) spec MathMLDataAttributes = attribute data-other {text}? # sample set, like data- may need preprocessing to allow more MathMLARIAattributes = attribute aria-label {text}?, attribute aria-describedby {text}?, attribute aria-description {text}?, attribute aria-details {text}? MathMLintentAttributes = attribute intent {text}?, attribute arg {xsd:NCName}? MathMLPGlobalAttributes = attribute id {xsd:ID}?, attribute class {xsd:NCName}?, attribute style {xsd:string}?, attribute dir {"ltr" | "rtl"}?, attribute mathbackground {color}?, attribute mathcolor {color}?, attribute mathsize {length-percentage}?, attribute mathvariant {xsd:string{pattern="\s*([Nn][Oo][Rr][Mm][Aa][Ll]|[Bb][Oo][Ll][Dd]|[Ii][Tt][Aa][Ll][Ii][Cc]|[Bb][Oo][Ll][Dd]-[Ii][Tt][Aa][Ll][Ii][Cc]|[Dd][Oo][Uu][Bb][Ll][Ee]-[Ss][Tt][Rr][Uu][Cc][Kk]|[Bb][Oo][Ll][Dd]-[Ff][Rr][Aa][Kk][Tt][Uu][Rr]|[Ss][Cc][Rr][Ii][Pp][Tt]|[Bb][Oo][Ll][Dd]-[Ss][Cc][Rr][Ii][Pp][Tt]|[Ff][Rr][Aa][Kk][Tt][Uu][Rr]|[Ss][Aa][Nn][Ss]-[Ss][Ee][Rr][Ii][Ff]|[Bb][Oo][Ll][Dd]-[Ss][Aa][Nn][Ss]-[Ss][Ee][Rr][Ii][Ff]|[Ss][Aa][Nn][Ss]-[Ss][Ee][Rr][Ii][Ff]-[Ii][Tt][Aa][Ll][Ii][Cc]|[Ss][Aa][Nn][Ss]-[Ss][Ee][Rr][Ii][Ff]-[Bb][Oo][Ll][Dd]-[Ii][Tt][Aa][Ll][Ii][Cc]|[Mm][Oo][Nn][Oo][Ss][Pp][Aa][Cc][Ee]|[Ii][Nn][Ii][Tt][Ii][Aa][Ll]|[Tt][Aa][Ii][Ll][Ee][Dd]|[Ll][Oo][Oo][Pp][Ee][Dd]|[Ss][Tt][Rr][Ee][Tt][Cc][Hh][Ee][Dd])\s*"}}?, attribute displaystyle {mathml-boolean}?, attribute scriptlevel {xsd:integer}?, attribute autofocus {mathml-boolean}?, attribute tabindex {xsd:integer}?, attribute nonce {text}?, MathMLoneventAttributes, # Extension attributes, no defined behavior MathMLDataAttributes, # No specified behavior in Core, see MathML4 MathMLintentAttributes, # No specified behavior in Core, see WAI-ARIA MathMLARIAattributes math.attributes = MathMLPGlobalAttributes, attribute display {"block" | "inline"}?, # No specified behavior in Core, see MathML4 attribute alttext {text}? annotation = element annotation {MathMLPGlobalAttributes,encoding?,text} anyElement = element (*) {(attribute * {text}|text| anyElement)*} annotation-xml = element annotation-xml {annotation-xml.attributes, (MathExpression*|anyElement*)} annotation-xml.attributes = MathMLPGlobalAttributes, encoding? encoding=attribute encoding {xsd:string}? semantics = element semantics {semantics.attributes, MathExpression, (annotation|annotation-xml)*} semantics.attributes = MathMLPGlobalAttributes mathml-boolean = xsd:string { pattern = '\s*([Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])\s*' } length-percentage = xsd:string { pattern = '\s*((-?[0-9]*([0-9]\.?|\.[0-9])[0-9]*(r?em|ex|in|cm|mm|p[xtc]|Q|v[hw]|vmin|vmax|%))|0)\s*' } MathExpression = TokenExpression| mrow|a|mfrac|msqrt|mroot|mstyle|merror|mpadded|mphantom| msub|msup|msubsup|munder|mover|munderover| mmultiscripts|mtable|maction| semantics MathMalignExpression = MathExpression ImpliedMrow = MathMalignExpression* TableRowExpression = mtr MultiScriptExpression = (MathExpression|none),(MathExpression|none) color = xsd:string { pattern = '\s*((#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?)|[a-zA-Z]+|[a-zA-Z]+\s*\([0-9, %.]+\))\s*'} TokenExpression = mi|mn|mo|mtext|mspace|ms textorHTML = text | element (h:*) {attribute * {text}*,textorHTML*} token.content = textorHTML mi = element mi {mi.attributes, token.content} mi.attributes = MathMLPGlobalAttributes mn = element mn {mn.attributes, token.content} mn.attributes = MathMLPGlobalAttributes mo = element mo {mo.attributes, token.content} mo.attributes = MathMLPGlobalAttributes, attribute form {"prefix" | "infix" | "postfix"}?, attribute lspace {length-percentage}?, attribute rspace {length-percentage}?, attribute stretchy {mathml-boolean}?, attribute symmetric {mathml-boolean}?, attribute maxsize {length-percentage}?, attribute minsize {length-percentage}?, attribute largeop {mathml-boolean}?, attribute movablelimits {mathml-boolean}? mtext = element mtext {mtext.attributes, token.content} mtext.attributes = MathMLPGlobalAttributes mspace = element mspace {mspace.attributes, empty} mspace.attributes = MathMLPGlobalAttributes, attribute width {length-percentage}?, attribute height {length-percentage}?, attribute depth {length-percentage}? ms = element ms {ms.attributes, token.content} ms.attributes = MathMLPGlobalAttributes none = element none {none.attributes,empty} none.attributes = MathMLPGlobalAttributes mprescripts = element mprescripts {mprescripts.attributes,empty} mprescripts.attributes = MathMLPGlobalAttributes mrow = element mrow {mrow.attributes, ImpliedMrow} mrow.attributes = MathMLPGlobalAttributes a = element a {mrow.attributes, MathMLlink.attributes, ImpliedMrow} mfrac = element mfrac {mfrac.attributes, MathExpression, MathExpression} mfrac.attributes = MathMLPGlobalAttributes, attribute linethickness {length-percentage}? msqrt = element msqrt {msqrt.attributes, ImpliedMrow} msqrt.attributes = MathMLPGlobalAttributes mroot = element mroot {mroot.attributes, MathExpression, MathExpression} mroot.attributes = MathMLPGlobalAttributes mstyle = element mstyle {mstyle.attributes, ImpliedMrow} mstyle.attributes = MathMLPGlobalAttributes merror = element merror {merror.attributes, ImpliedMrow} merror.attributes = MathMLPGlobalAttributes mpadded = element mpadded {mpadded.attributes, ImpliedMrow} mpadded.attributes = MathMLPGlobalAttributes, attribute height {mpadded-length-percentage}?, attribute depth {mpadded-length-percentage}?, attribute width {mpadded-length-percentage}?, attribute lspace {mpadded-length-percentage}?, attribute rspace {mpadded-length-percentage}?, attribute voffset {mpadded-length-percentage}? mpadded-length-percentage=length-percentage mphantom = element mphantom {mphantom.attributes, ImpliedMrow} mphantom.attributes = MathMLPGlobalAttributes msub = element msub {msub.attributes, MathExpression, MathExpression} msub.attributes = MathMLPGlobalAttributes msup = element msup {msup.attributes, MathExpression, MathExpression} msup.attributes = MathMLPGlobalAttributes msubsup = element msubsup {msubsup.attributes, MathExpression, MathExpression, MathExpression} msubsup.attributes = MathMLPGlobalAttributes munder = element munder {munder.attributes, MathExpression, MathExpression} munder.attributes = MathMLPGlobalAttributes, attribute accentunder {mathml-boolean}? mover = element mover {mover.attributes, MathExpression, MathExpression} mover.attributes = MathMLPGlobalAttributes, attribute accent {mathml-boolean}? munderover = element munderover {munderover.attributes, MathExpression, MathExpression, MathExpression} munderover.attributes = MathMLPGlobalAttributes, attribute accent {mathml-boolean}?, attribute accentunder {mathml-boolean}? mmultiscripts = element mmultiscripts {mmultiscripts.attributes, MathExpression, MultiScriptExpression*, (mprescripts,MultiScriptExpression*)?} mmultiscripts.attributes = msubsup.attributes mtable = element mtable {mtable.attributes, TableRowExpression*} mtable.attributes = MathMLPGlobalAttributes mtr = element mtr {mtr.attributes, mtd*} mtr.attributes = MathMLPGlobalAttributes mtd = element mtd {mtd.attributes, ImpliedMrow} mtd.attributes = MathMLPGlobalAttributes, attribute rowspan {xsd:positiveInteger}?, attribute columnspan {xsd:positiveInteger}? maction = element maction {maction.attributes, ImpliedMrow} maction.attributes = MathMLPGlobalAttributes, attribute actiontype {text}?, attribute selection {xsd:positiveInteger}?
Presentation MathML 4의 문법은 MathML Core 문법을 기반으로 구축되며, https://www.w3.org/Math/RelaxNG/mathml4/mathml4-presentation.rnc에서 확인할 수 있습니다.
# MathML 4 (Presentation) # ####################### # Copyright 1998-2024 W3C (MIT, ERCIM, Keio, Beihang) # # Use and distribution of this code are permitted under the terms # W3C Software Notice and License # http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 default namespace m = "http://www.w3.org/1998/Math/MathML" namespace local = "" # MathML Core include "mathml4-core.rnc" { # named lengths length-percentage = xsd:string { pattern = '\s*((-?[0-9]*([0-9]\.?|\.[0-9])[0-9]*(r?em|ex|in|cm|mm|p[xtc]|Q|v[hw]|vmin|vmax|%))|0|(negative)?((very){0,2}thi(n|ck)|medium)mathspace)\s*' } mpadded-length-percentage = xsd:string { pattern = '\s*([\+\-]?[0-9]*([0-9]\.?|\.[0-9])[0-9]*\s*((%?\s*(height|depth|width)?)|r?em|ex|in|cm|mm|p[xtc]|Q|v[hw]|vmin|vmax|%|((negative)?((very){0,2}thi(n|ck)|medium)mathspace))?)\s*' } } NonMathMLAtt = attribute (* - (local:* | m:*)) {xsd:string} MathMLPGlobalAttributes &= NonMathMLAtt*, attribute xref {text}?, attribute href {xsd:anyURI}? MathMalignExpression |= MalignExpression MathExpression |= PresentationExpression MstackExpression = MathMalignExpression|mscarries|msline|msrow|msgroup MsrowExpression = MathMalignExpression|none linestyle = "none" | "solid" | "dashed" verticalalign = "top" | "bottom" | "center" | "baseline" | "axis" columnalignstyle = "left" | "center" | "right" notationstyle = "longdiv" | "actuarial" | "radical" | "box" | "roundedbox" | "circle" | "left" | "right" | "top" | "bottom" | "updiagonalstrike" | "downdiagonalstrike" | "verticalstrike" | "horizontalstrike" | "madruwb" idref = text unsigned-integer = xsd:unsignedLong integer = xsd:integer number = xsd:decimal character = xsd:string { pattern = '\s*\S\s*'} positive-integer = xsd:positiveInteger token.content |= mglyph|text mo.attributes &= attribute linebreak {"auto" | "newline" | "nobreak" | "goodbreak" | "badbreak"}?, attribute lineleading {length-percentage}?, attribute linebreakstyle {"before" | "after" | "duplicate" | "infixlinebreakstyle"}?, attribute linebreakmultchar {text}?, attribute indentalign {"left" | "center" | "right" | "auto" | "id"}?, attribute indentshift {length-percentage}?, attribute indenttarget {idref}?, attribute indentalignfirst {"left" | "center" | "right" | "auto" | "id" | "indentalign"}?, attribute indentshiftfirst {length-percentage | "indentshift"}?, attribute indentalignlast {"left" | "center" | "right" | "auto" | "id" | "indentalign"}?, attribute indentshiftlast {length-percentage | "indentshift"}?, attribute accent {mathml-boolean}?, attribute maxsize {"infinity"}? mspace.attributes &= attribute linebreak {"auto" | "newline" | "nobreak" | "goodbreak" | "badbreak" | "indentingnewline"}?, attribute indentalign {"left" | "center" | "right" | "auto" | "id"}?, attribute indentshift {length-percentage}?, attribute indenttarget {idref}?, attribute indentalignfirst {"left" | "center" | "right" | "auto" | "id" | "indentalign"}?, attribute indentshiftfirst {length-percentage | "indentshift"}?, attribute indentalignlast {"left" | "center" | "right" | "auto" | "id" | "indentalign"}?, attribute indentshiftlast {length-percentage | "indentshift"}? ms.attributes &= attribute lquote {text}?, attribute rquote {text}? mglyph = element mglyph {mglyph.attributes,empty} mglyph.attributes = MathMLPGlobalAttributes, attribute src {xsd:anyURI}?, attribute width {length-percentage}?, attribute height {length-percentage}?, attribute valign {length-percentage}?, attribute alt {text}? msline = element msline {msline.attributes,empty} msline.attributes = MathMLPGlobalAttributes, attribute position {integer}?, attribute length {unsigned-integer}?, attribute leftoverhang {length-percentage}?, attribute rightoverhang {length-percentage}?, attribute mslinethickness {length-percentage | "thin" | "medium" | "thick"}? MalignExpression = maligngroup|malignmark malignmark = element malignmark {malignmark.attributes, empty} malignmark.attributes = MathMLPGlobalAttributes maligngroup = element maligngroup {maligngroup.attributes, empty} maligngroup.attributes = MathMLPGlobalAttributes PresentationExpression = TokenExpression| mrow|mfrac|msqrt|mroot|mstyle|merror|mpadded|mphantom| mfenced|menclose|msub|msup|msubsup|munder|mover|munderover| mmultiscripts|mtable|mstack|mlongdiv|maction mrow.attributes &= MathMLlink.attributes mfrac.attributes &= attribute numalign {"left" | "center" | "right"}?, attribute denomalign {"left" | "center" | "right"}?, attribute bevelled {mathml-boolean}? mstyle.attributes &= mstyle.specificattributes, mstyle.generalattributes mstyle.specificattributes = attribute scriptsizemultiplier {number}?, attribute scriptminsize {length-percentage}?, attribute infixlinebreakstyle {"before" | "after" | "duplicate"}?, attribute decimalpoint {character}? mstyle.generalattributes = attribute accent {mathml-boolean}?, attribute accentunder {mathml-boolean}?, attribute align {"left" | "right" | "center"}?, attribute alignmentscope {list {("true" | "false") +}}?, attribute bevelled {mathml-boolean}?, attribute charalign {"left" | "center" | "right"}?, attribute charspacing {length-percentage | "loose" | "medium" | "tight"}?, attribute close {text}?, attribute columnalign {list {columnalignstyle+} }?, attribute columnlines {list {linestyle +}}?, attribute columnspacing {list {(length-percentage) +}}?, attribute columnspan {positive-integer}?, attribute columnwidth {list {("auto" | length-percentage | "fit") +}}?, attribute crossout {list {("none" | "updiagonalstrike" | "downdiagonalstrike" | "verticalstrike" | "horizontalstrike")*}}?, attribute denomalign {"left" | "center" | "right"}?, attribute depth {length-percentage}?, attribute dir {"ltr" | "rtl"}?, attribute equalcolumns {mathml-boolean}?, attribute equalrows {mathml-boolean}?, attribute form {"prefix" | "infix" | "postfix"}?, attribute frame {linestyle}?, attribute framespacing {list {length-percentage, length-percentage}}?, attribute height {length-percentage}?, attribute indentalign {"left" | "center" | "right" | "auto" | "id"}?, attribute indentalignfirst {"left" | "center" | "right" | "auto" | "id" | "indentalign"}?, attribute indentalignlast {"left" | "center" | "right" | "auto" | "id" | "indentalign"}?, attribute indentshift {length-percentage}?, attribute indentshiftfirst {length-percentage | "indentshift"}?, attribute indentshiftlast {length-percentage | "indentshift"}?, attribute indenttarget {idref}?, attribute largeop {mathml-boolean}?, attribute leftoverhang {length-percentage}?, attribute length {unsigned-integer}?, attribute linebreak {"auto" | "newline" | "nobreak" | "goodbreak" | "badbreak"}?, attribute linebreakmultchar {text}?, attribute linebreakstyle {"before" | "after" | "duplicate" | "infixlinebreakstyle"}?, attribute lineleading {length-percentage}?, attribute linethickness {length-percentage | "thin" | "medium" | "thick"}?, attribute location {"w" | "nw" | "n" | "ne" | "e" | "se" | "s" | "sw"}?, attribute longdivstyle {"lefttop" | "stackedrightright" | "mediumstackedrightright" | "shortstackedrightright" | "righttop" | "left/\right" | "left)(right" | ":right=right" | "stackedleftleft" | "stackedleftlinetop"}?, attribute lquote {text}?, attribute lspace {length-percentage}?, attribute mathsize {"small" | "normal" | "big" | length-percentage}?, attribute mathvariant {"normal" | "bold" | "italic" | "bold-italic" | "double-struck" | "bold-fraktur" | "script" | "bold-script" | "fraktur" | "sans-serif" | "bold-sans-serif" | "sans-serif-italic" | "sans-serif-bold-italic" | "monospace" | "initial" | "tailed" | "looped" | "stretched"}?, attribute minlabelspacing {length-percentage}?, attribute minsize {length-percentage}?, attribute movablelimits {mathml-boolean}?, attribute mslinethickness {length-percentage | "thin" | "medium" | "thick"}?, attribute notation {text}?, attribute numalign {"left" | "center" | "right"}?, attribute open {text}?, attribute position {integer}?, attribute rightoverhang {length-percentage}?, attribute rowalign {list {verticalalign+} }?, attribute rowlines {list {linestyle +}}?, attribute rowspacing {list {(length-percentage) +}}?, attribute rowspan {positive-integer}?, attribute rquote {text}?, attribute rspace {length-percentage}?, attribute selection {positive-integer}?, attribute separators {text}?, attribute shift {integer}?, attribute side {"left" | "right" | "leftoverlap" | "rightoverlap"}?, attribute stackalign {"left" | "center" | "right" | "decimalpoint"}?, attribute stretchy {mathml-boolean}?, attribute subscriptshift {length-percentage}?, attribute superscriptshift {length-percentage}?, attribute symmetric {mathml-boolean}?, attribute valign {length-percentage}?, attribute width {length-percentage}? math.attributes &= mstyle.specificattributes math.attributes &= mstyle.generalattributes math.attributes &= attribute overflow {"linebreak" | "scroll" | "elide" | "truncate" | "scale"}? mfenced = element mfenced {mfenced.attributes, ImpliedMrow} mfenced.attributes = MathMLPGlobalAttributes, attribute open {text}?, attribute close {text}?, attribute separators {text}? menclose = element menclose {menclose.attributes, ImpliedMrow} menclose.attributes = MathMLPGlobalAttributes, attribute notation {text}? munder.attributes &= attribute align {"left" | "right" | "center"}? mover.attributes &= attribute align {"left" | "right" | "center"}? munderover.attributes &= attribute align {"left" | "right" | "center"}? msub.attributes &= attribute subscriptshift {length-percentage}? msup.attributes &= attribute superscriptshift {length-percentage}? msubsup.attributes &= attribute subscriptshift {length-percentage}?, attribute superscriptshift {length-percentage}? mtable.attributes &= attribute align {xsd:string { pattern ='\s*(top|bottom|center|baseline|axis)(\s+-?[0-9]+)?\s*'}}?, attribute rowalign {list {verticalalign+} }?, attribute columnalign {list {columnalignstyle+} }?, attribute columnwidth {list {("auto" | length-percentage | "fit") +}}?, attribute width {"auto" | length-percentage}?, attribute rowspacing {list {(length-percentage) +}}?, attribute columnspacing {list {(length-percentage) +}}?, attribute rowlines {list {linestyle +}}?, attribute columnlines {list {linestyle +}}?, attribute frame {linestyle}?, attribute framespacing {list {length-percentage, length-percentage}}?, attribute equalrows {mathml-boolean}?, attribute equalcolumns {mathml-boolean}?, attribute displaystyle {mathml-boolean}? mtr.attributes &= attribute rowalign {"top" | "bottom" | "center" | "baseline" | "axis"}?, attribute columnalign {list {columnalignstyle+} }? mtd.attributes &= attribute rowalign {"top" | "bottom" | "center" | "baseline" | "axis"}?, attribute columnalign {columnalignstyle}? mstack = element mstack {mstack.attributes, MstackExpression*} mstack.attributes = MathMLPGlobalAttributes, attribute align {xsd:string { pattern ='\s*(top|bottom|center|baseline|axis)(\s+-?[0-9]+)?\s*'}}?, attribute stackalign {"left" | "center" | "right" | "decimalpoint"}?, attribute charalign {"left" | "center" | "right"}?, attribute charspacing {length-percentage | "loose" | "medium" | "tight"}? mlongdiv = element mlongdiv {mlongdiv.attributes, MstackExpression,MstackExpression,MstackExpression+} mlongdiv.attributes = msgroup.attributes, attribute longdivstyle {"lefttop" | "stackedrightright" | "mediumstackedrightright" | "shortstackedrightright" | "righttop" | "left/\right" | "left)(right" | ":right=right" | "stackedleftleft" | "stackedleftlinetop"}? msgroup = element msgroup {msgroup.attributes, MstackExpression*} msgroup.attributes = MathMLPGlobalAttributes, attribute position {integer}?, attribute shift {integer}? msrow = element msrow {msrow.attributes, MsrowExpression*} msrow.attributes = MathMLPGlobalAttributes, attribute position {integer}? mscarries = element mscarries {mscarries.attributes, (MsrowExpression|mscarry)*} mscarries.attributes = MathMLPGlobalAttributes, attribute position {integer}?, attribute location {"w" | "nw" | "n" | "ne" | "e" | "se" | "s" | "sw"}?, attribute crossout {list {("none" | "updiagonalstrike" | "downdiagonalstrike" | "verticalstrike" | "horizontalstrike")*}}?, attribute scriptsizemultiplier {number}? mscarry = element mscarry {mscarry.attributes, MsrowExpression*} mscarry.attributes = MathMLPGlobalAttributes, attribute location {"w" | "nw" | "n" | "ne" | "e" | "se" | "s" | "sw"}?, attribute crossout {list {("none" | "updiagonalstrike" | "downdiagonalstrike" | "verticalstrike" | "horizontalstrike")*}}?
Strict Content MathML 4의 문법은 https://www.w3.org/Math/RelaxNG/mathml4/mathml4-strict-content.rnc에서 찾을 수 있습니다.
# MathML 4 (Strict Content) # ######################### # Copyright 1998-2024 W3C (MIT, ERCIM, Keio, Beihang) # # Use and distribution of this code are permitted under the terms # W3C Software Notice and License # http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 default namespace m = "http://www.w3.org/1998/Math/MathML" start |= math.strict CommonAtt = attribute id {xsd:ID}?, attribute xref {text}? math.strict = element math {math.attributes,ContExp*} math.attributes &= CommonAtt ContExp = semantics-contexp | cn | ci | csymbol | apply | bind | share | cerror | cbytes | cs cn = element cn {cn.attributes,cn.content} cn.content = text cn.attributes = CommonAtt, attribute type {"integer" | "real" | "double" | "hexdouble"} semantics-ci = element semantics {CommonAtt,(ci|semantics-ci), (annotation|annotation-xml)*} semantics-contexp = element semantics {CommonAtt,MathExpression, (annotation|annotation-xml)*} annotation |= element annotation {CommonAtt,text} anyElement |= element (* - m:*) {(attribute * {text}|text| anyElement)*} annotation-xml |= element annotation-xml {annotation-xml.attributes, (MathExpression*|anyElement*)} annotation-xml.attributes &= CommonAtt, cd?, encoding? encoding &= attribute encoding {xsd:string} ci = element ci {ci.attributes, ci.content} ci.attributes = CommonAtt, ci.type? ci.type = attribute type {"integer" | "rational" | "real" | "complex" | "complex-polar" | "complex-cartesian" | "constant" | "function" | "vector" | "list" | "set" | "matrix"} ci.content = text csymbol = element csymbol {csymbol.attributes,csymbol.content} SymbolName = xsd:NCName csymbol.attributes = CommonAtt, cd csymbol.content = SymbolName cd = attribute cd {xsd:NCName} name = attribute name {xsd:NCName} src = attribute src {xsd:anyURI}? BvarQ = bvar* bvar = element bvar {CommonAtt, (ci | semantics-ci)} apply = element apply {CommonAtt,apply.content} apply.content = ContExp+ bind = element bind {CommonAtt,bind.content} bind.content = ContExp,bvar*,ContExp share = element share {CommonAtt, src, empty} cerror = element cerror {cerror.attributes, csymbol, ContExp*} cerror.attributes = CommonAtt cbytes = element cbytes {cbytes.attributes, base64} cbytes.attributes = CommonAtt base64 = xsd:base64Binary cs = element cs {cs.attributes, text} cs.attributes = CommonAtt MathExpression |= ContExp
Content MathML 4의 문법은 Strict Content MathML 부분집합의 문법을 기반으로 구축되며, https://www.w3.org/Math/RelaxNG/mathml4/mathml4-content.rnc에서 확인할 수 있습니다.
# MathML 4 (Content) # ################## # Copyright 1998-2024 W3C (MIT, ERCIM, Keio, Beihang) # # Use and distribution of this code are permitted under the terms # W3C Software Notice and License # http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 default namespace m = "http://www.w3.org/1998/Math/MathML" namespace local = "" include "mathml4-strict-content.rnc"{ cn.content = (text | sep | PresentationExpression)* cn.attributes = CommonAtt, DefEncAtt, attribute type {text}?, base? ci.attributes = CommonAtt, DefEncAtt, ci.type? ci.type = attribute type {text} ci.content = (text | PresentationExpression)* csymbol.attributes = CommonAtt, DefEncAtt, attribute type {text}?,cd? csymbol.content = (text | PresentationExpression)* annotation-xml.attributes |= CommonAtt, cd?, name?, encoding? bvar = element bvar {CommonAtt, ((ci | semantics-ci) & degree?)} cbytes.attributes = CommonAtt, DefEncAtt cs.attributes = CommonAtt, DefEncAtt apply.content = ContExp+ | (ContExp, BvarQ, Qualifier*, ContExp*) bind.content = apply.content } NonMathMLAtt |= attribute (* - (local:*|m:*)) {xsd:string} math.attributes &= attribute alttext {text}? MathMLDataAttributes &= attribute data-other {text}? CommonAtt &= NonMathMLAtt*, MathMLDataAttributes, attribute class {xsd:NCName}?, attribute style {xsd:string}?, attribute href {xsd:anyURI}?, attribute intent {text}?, attribute arg {xsd:NCName}? base = attribute base {text} sep = element sep {empty} PresentationExpression |= notAllowed DefEncAtt = attribute encoding {xsd:string}?, attribute definitionURL {xsd:anyURI}? DomainQ = (domainofapplication|condition|interval|(lowlimit,uplimit?))* domainofapplication = element domainofapplication {ContExp} condition = element condition {ContExp} uplimit = element uplimit {ContExp} lowlimit = element lowlimit {ContExp} Qualifier = DomainQ|degree|momentabout|logbase degree = element degree {ContExp} momentabout = element momentabout {ContExp} logbase = element logbase {ContExp} type = attribute type {text} order = attribute order {"numeric" | "lexicographic"} closure = attribute closure {text} ContExp |= piecewise piecewise = element piecewise {CommonAtt, DefEncAtt,(piece* & otherwise?)} piece = element piece {CommonAtt, DefEncAtt, ContExp, ContExp} otherwise = element otherwise {CommonAtt, DefEncAtt, ContExp} interval.class = interval ContExp |= interval.class interval = element interval { CommonAtt, DefEncAtt,closure?, ContExp,ContExp} unary-functional.class = inverse | ident | domain | codomain | image | ln | log | moment ContExp |= unary-functional.class inverse = element inverse { CommonAtt, DefEncAtt, empty} ident = element ident { CommonAtt, DefEncAtt, empty} domain = element domain { CommonAtt, DefEncAtt, empty} codomain = element codomain { CommonAtt, DefEncAtt, empty} image = element image { CommonAtt, DefEncAtt, empty} ln = element ln { CommonAtt, DefEncAtt, empty} log = element log { CommonAtt, DefEncAtt, empty} moment = element moment { CommonAtt, DefEncAtt, empty} lambda.class = lambda ContExp |= lambda.class lambda = element lambda { CommonAtt, DefEncAtt, BvarQ, DomainQ, ContExp} nary-functional.class = compose ContExp |= nary-functional.class compose = element compose { CommonAtt, DefEncAtt, empty} binary-arith.class = quotient | divide | minus | power | rem | root ContExp |= binary-arith.class quotient = element quotient { CommonAtt, DefEncAtt, empty} divide = element divide { CommonAtt, DefEncAtt, empty} minus = element minus { CommonAtt, DefEncAtt, empty} power = element power { CommonAtt, DefEncAtt, empty} rem = element rem { CommonAtt, DefEncAtt, empty} root = element root { CommonAtt, DefEncAtt, empty} unary-arith.class = factorial | minus | root | abs | conjugate | arg | real | imaginary | floor | ceiling | exp ContExp |= unary-arith.class factorial = element factorial { CommonAtt, DefEncAtt, empty} abs = element abs { CommonAtt, DefEncAtt, empty} conjugate = element conjugate { CommonAtt, DefEncAtt, empty} arg = element arg { CommonAtt, DefEncAtt, empty} real = element real { CommonAtt, DefEncAtt, empty} imaginary = element imaginary { CommonAtt, DefEncAtt, empty} floor = element floor { CommonAtt, DefEncAtt, empty} ceiling = element ceiling { CommonAtt, DefEncAtt, empty} exp = element exp { CommonAtt, DefEncAtt, empty} nary-minmax.class = max | min ContExp |= nary-minmax.class max = element max { CommonAtt, DefEncAtt, empty} min = element min { CommonAtt, DefEncAtt, empty} nary-arith.class = plus | times | gcd | lcm ContExp |= nary-arith.class plus = element plus { CommonAtt, DefEncAtt, empty} times = element times { CommonAtt, DefEncAtt, empty} gcd = element gcd { CommonAtt, DefEncAtt, empty} lcm = element lcm { CommonAtt, DefEncAtt, empty} nary-logical.class = and | or | xor ContExp |= nary-logical.class and = element and { CommonAtt, DefEncAtt, empty} or = element or { CommonAtt, DefEncAtt, empty} xor = element xor { CommonAtt, DefEncAtt, empty} unary-logical.class = not ContExp |= unary-logical.class not = element not { CommonAtt, DefEncAtt, empty} binary-logical.class = implies | equivalent ContExp |= binary-logical.class implies = element implies { CommonAtt, DefEncAtt, empty} equivalent = element equivalent { CommonAtt, DefEncAtt, empty} quantifier.class = forall | exists ContExp |= quantifier.class forall = element forall { CommonAtt, DefEncAtt, empty} exists = element exists { CommonAtt, DefEncAtt, empty} nary-reln.class = eq | gt | lt | geq | leq ContExp |= nary-reln.class eq = element eq { CommonAtt, DefEncAtt, empty} gt = element gt { CommonAtt, DefEncAtt, empty} lt = element lt { CommonAtt, DefEncAtt, empty} geq = element geq { CommonAtt, DefEncAtt, empty} leq = element leq { CommonAtt, DefEncAtt, empty} binary-reln.class = neq | approx | factorof | tendsto ContExp |= binary-reln.class neq = element neq { CommonAtt, DefEncAtt, empty} approx = element approx { CommonAtt, DefEncAtt, empty} factorof = element factorof { CommonAtt, DefEncAtt, empty} tendsto = element tendsto { CommonAtt, DefEncAtt, type?, empty} int.class = int ContExp |= int.class int = element int { CommonAtt, DefEncAtt, empty} Differential-Operator.class = diff ContExp |= Differential-Operator.class diff = element diff { CommonAtt, DefEncAtt, empty} partialdiff.class = partialdiff ContExp |= partialdiff.class partialdiff = element partialdiff { CommonAtt, DefEncAtt, empty} unary-veccalc.class = divergence | grad | curl | laplacian ContExp |= unary-veccalc.class divergence = element divergence { CommonAtt, DefEncAtt, empty} grad = element grad { CommonAtt, DefEncAtt, empty} curl = element curl { CommonAtt, DefEncAtt, empty} laplacian = element laplacian { CommonAtt, DefEncAtt, empty} nary-setlist-constructor.class = set | \list ContExp |= nary-setlist-constructor.class set = element set { CommonAtt, DefEncAtt, type?, BvarQ*, DomainQ*, ContExp*} \list = element \list { CommonAtt, DefEncAtt, order?, BvarQ*, DomainQ*, ContExp*} nary-set.class = union | intersect | cartesianproduct ContExp |= nary-set.class union = element union { CommonAtt, DefEncAtt, empty} intersect = element intersect { CommonAtt, DefEncAtt, empty} cartesianproduct = element cartesianproduct { CommonAtt, DefEncAtt, empty} binary-set.class = in | notin | notsubset | notprsubset | setdiff ContExp |= binary-set.class in = element in { CommonAtt, DefEncAtt, empty} notin = element notin { CommonAtt, DefEncAtt, empty} notsubset = element notsubset { CommonAtt, DefEncAtt, empty} notprsubset = element notprsubset { CommonAtt, DefEncAtt, empty} setdiff = element setdiff { CommonAtt, DefEncAtt, empty} nary-set-reln.class = subset | prsubset ContExp |= nary-set-reln.class subset = element subset { CommonAtt, DefEncAtt, empty} prsubset = element prsubset { CommonAtt, DefEncAtt, empty} unary-set.class = card ContExp |= unary-set.class card = element card { CommonAtt, DefEncAtt, empty} sum.class = sum ContExp |= sum.class sum = element sum { CommonAtt, DefEncAtt, empty} product.class = product ContExp |= product.class product = element product { CommonAtt, DefEncAtt, empty} limit.class = limit ContExp |= limit.class limit = element limit { CommonAtt, DefEncAtt, empty} unary-elementary.class = sin | cos | tan | sec | csc | cot | sinh | cosh | tanh | sech | csch | coth | arcsin | arccos | arctan | arccosh | arccot | arccoth | arccsc | arccsch | arcsec | arcsech | arcsinh | arctanh ContExp |= unary-elementary.class sin = element sin { CommonAtt, DefEncAtt, empty} cos = element cos { CommonAtt, DefEncAtt, empty} tan = element tan { CommonAtt, DefEncAtt, empty} sec = element sec { CommonAtt, DefEncAtt, empty} csc = element csc { CommonAtt, DefEncAtt, empty} cot = element cot { CommonAtt, DefEncAtt, empty} sinh = element sinh { CommonAtt, DefEncAtt, empty} cosh = element cosh { CommonAtt, DefEncAtt, empty} tanh = element tanh { CommonAtt, DefEncAtt, empty} sech = element sech { CommonAtt, DefEncAtt, empty} csch = element csch { CommonAtt, DefEncAtt, empty} coth = element coth { CommonAtt, DefEncAtt, empty} arcsin = element arcsin { CommonAtt, DefEncAtt, empty} arccos = element arccos { CommonAtt, DefEncAtt, empty} arctan = element arctan { CommonAtt, DefEncAtt, empty} arccosh = element arccosh { CommonAtt, DefEncAtt, empty} arccot = element arccot { CommonAtt, DefEncAtt, empty} arccoth = element arccoth { CommonAtt, DefEncAtt, empty} arccsc = element arccsc { CommonAtt, DefEncAtt, empty} arccsch = element arccsch { CommonAtt, DefEncAtt, empty} arcsec = element arcsec { CommonAtt, DefEncAtt, empty} arcsech = element arcsech { CommonAtt, DefEncAtt, empty} arcsinh = element arcsinh { CommonAtt, DefEncAtt, empty} arctanh = element arctanh { CommonAtt, DefEncAtt, empty} nary-stats.class = mean | median | mode | sdev | variance ContExp |= nary-stats.class mean = element mean { CommonAtt, DefEncAtt, empty} median = element median { CommonAtt, DefEncAtt, empty} mode = element mode { CommonAtt, DefEncAtt, empty} sdev = element sdev { CommonAtt, DefEncAtt, empty} variance = element variance { CommonAtt, DefEncAtt, empty} nary-constructor.class = vector | matrix | matrixrow ContExp |= nary-constructor.class vector = element vector { CommonAtt, DefEncAtt, BvarQ, DomainQ, ContExp*} matrix = element matrix { CommonAtt, DefEncAtt, BvarQ, DomainQ, ContExp*} matrixrow = element matrixrow { CommonAtt, DefEncAtt, BvarQ, DomainQ, ContExp*} unary-linalg.class = determinant | transpose ContExp |= unary-linalg.class determinant = element determinant { CommonAtt, DefEncAtt, empty} transpose = element transpose { CommonAtt, DefEncAtt, empty} nary-linalg.class = selector ContExp |= nary-linalg.class selector = element selector { CommonAtt, DefEncAtt, empty} binary-linalg.class = vectorproduct | scalarproduct | outerproduct ContExp |= binary-linalg.class vectorproduct = element vectorproduct { CommonAtt, DefEncAtt, empty} scalarproduct = element scalarproduct { CommonAtt, DefEncAtt, empty} outerproduct = element outerproduct { CommonAtt, DefEncAtt, empty} constant-set.class = integers | reals | rationals | naturalnumbers | complexes | primes | emptyset ContExp |= constant-set.class integers = element integers { CommonAtt, DefEncAtt, empty} reals = element reals { CommonAtt, DefEncAtt, empty} rationals = element rationals { CommonAtt, DefEncAtt, empty} naturalnumbers = element naturalnumbers { CommonAtt, DefEncAtt, empty} complexes = element complexes { CommonAtt, DefEncAtt, empty} primes = element primes { CommonAtt, DefEncAtt, empty} emptyset = element emptyset { CommonAtt, DefEncAtt, empty} constant-arith.class = exponentiale | imaginaryi | notanumber | true | false | pi | eulergamma | infinity ContExp |= constant-arith.class exponentiale = element exponentiale { CommonAtt, DefEncAtt, empty} imaginaryi = element imaginaryi { CommonAtt, DefEncAtt, empty} notanumber = element notanumber { CommonAtt, DefEncAtt, empty} true = element true { CommonAtt, DefEncAtt, empty} false = element false { CommonAtt, DefEncAtt, empty} pi = element pi { CommonAtt, DefEncAtt, empty} eulergamma = element eulergamma { CommonAtt, DefEncAtt, empty} infinity = element infinity { CommonAtt, DefEncAtt, empty}
전체 MathML 4의 문법은 위의 문법들을 단순 합병한 것이며, https://www.w3.org/Math/RelaxNG/mathml4/mathml4.rnc에서 찾을 수 있습니다.
# MathML 4 (full) # ############## # Copyright 1998-2024 W3C (MIT, ERCIM, Keio) # # Use and distribution of this code are permitted under the terms # W3C Software Notice and License # http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 default namespace m = "http://www.w3.org/1998/Math/MathML" # Presentation MathML include "mathml4-presentation.rnc" { anyElement = element (* - m:*) {(attribute * {text}|text| anyElement)*} } # Content MathML include "mathml4-content.rnc"
MathML 3에서 더 이상 권장되지 않던 일부 요소 및 속성은 MathML 4에서 제거되었습니다. 이 스키마는 전체 MathML 4 스키마를 확장하여 이러한 구성들을 다시 추가함으로써 기존 MathML 문서의 검증을 허용합니다. 해당 스키마는 https://www.w3.org/Math/RelaxNG/mathml4/mathml4-legacy.rnc에서 찾을 수 있습니다.
# MathML 4 (legacy) # ################ # Copyright 1998-2024 W3C (MIT, ERCIM, Keio) # # Use and distribution of this code are permitted under the terms # W3C Software Notice and License # http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 default namespace m = "http://www.w3.org/1998/Math/MathML" # MathML 4 include "mathml4.rnc" { # unitless lengths length-percentage = xsd:string { pattern = '\s*((-?[0-9]*([0-9]\.?|\.[0-9])[0-9]*(e[mx]|in|cm|mm|p[xtc]|%)?)|(negative)?((very){0,2}thi(n|ck)|medium)mathspace)\s*' } } # Removed MathML 1/2/3 elements ContExp |= reln | fn | declare reln = element reln {ContExp*} fn = element fn {ContExp} declare = element declare {attribute type {xsd:string}?, attribute scope {xsd:string}?, attribute nargs {xsd:nonNegativeInteger}?, attribute occurrence {"prefix"|"infix"|"function-model"}?, DefEncAtt, ContExp+} # legacy attributes CommonAtt &= attribute other {text}? MathMLPGlobalAttributes &= attribute other {text}? mglyph.deprecatedattributes = attribute fontfamily {text}?, attribute index {integer}?, attribute mathvariant {"normal" | "bold" | "italic" | "bold-italic" | "double-struck" | "bold-fraktur" | "script" | "bold-script" | "fraktur" | "sans-serif" | "bold-sans-serif" | "sans-serif-italic" | "sans-serif-bold-italic" | "monospace" | "initial" | "tailed" | "looped" | "stretched"}?, attribute mathsize {"small" | "normal" | "big" | length-percentage}? mglyph.attributes &= mglyph.deprecatedattributes mstyle.deprecatedattributes = attribute veryverythinmathspace {length-percentage}?, attribute verythinmathspace {length-percentage}?, attribute thinmathspace {length-percentage}?, attribute mediummathspace {length-percentage}?, attribute thickmathspace {length-percentage}?, attribute verythickmathspace {length-percentage}?, attribute veryverythickmathspace {length-percentage}? mstyle.attributes &= mstyle.deprecatedattributes math.deprecatedattributes = attribute mode {xsd:string}?, attribute macros {xsd:string}? math.attributes &= math.deprecatedattributes DeprecatedTokenAtt = attribute fontfamily {text}?, attribute fontweight {"normal" | "bold"}?, attribute fontstyle {"normal" | "italic"}?, attribute fontsize {length-percentage}?, attribute color {color}?, attribute background {color}?, attribute mathsize {"small" | "normal" | "big" }? DeprecatedMoAtt = attribute fence {mathml-boolean}?, attribute separator {mathml-boolean}? mstyle.attributes &= DeprecatedTokenAtt mstyle.attributes &= DeprecatedMoAtt mglyph.attributes &= DeprecatedTokenAtt mn.attributes &= DeprecatedTokenAtt mi.attributes &= DeprecatedTokenAtt mo.attributes &= DeprecatedTokenAtt mo.attributes &= DeprecatedMoAtt mtext.attributes &= DeprecatedTokenAtt mspace.attributes &= DeprecatedTokenAtt ms.attributes &= DeprecatedTokenAtt semantics.attributes &= DefEncAtt # malignmark in tokens token.content |= malignmark # malignmark in mfrac etc MathExpression |= MalignExpression maligngroup.attributes &= attribute groupalign {"left" | "center" | "right" | "decimalpoint"}? malignmark.attributes &= attribute edge {"left" | "right"}? mstyle.generalattributes &= attribute edge {"left" | "right"}? # groupalign group-alignment = "left" | "center" | "right" | "decimalpoint" group-alignment-list = list {group-alignment+} group-alignment-list-list = xsd:string { pattern = '(\s*\{\s*(left|center|right|decimalpoint)(\s+(left|center|right|decimalpoint))*\})*\s*' } mstyle.generalattributes &= attribute groupalign {group-alignment-list-list}?, attribute alignmentscope {list {("true" | "false") +}}? mtable.attributes &= attribute groupalign {group-alignment-list-list}?, attribute alignmentscope {list {("true" | "false") +}}?, attribute side {"left" | "right" | "leftoverlap" | "rightoverlap"}?, attribute minlabelspacing {length-percentage}? mtr.attributes &= attribute groupalign {group-alignment-list-list}? mtd.attributes &= attribute groupalign {group-alignment-list}? mlabeledtr = element mlabeledtr {mlabeledtr.attributes, mtd+} mlabeledtr.attributes = mtr.attributes TableRowExpression |= mlabeledtr
MathML DTD는 [Modularization]에 설명된 전략을 사용하여 MathML 요소에 네임스페이스 접두사를 사용할 수 있도록 합니다. 그러나 XML 직렬화의 호환성을 위해 네임스페이스 접두사는 사용하지 않는 것이 권장됩니다(HTML 직렬화와의 호환성 때문에).
XML 직렬화를 사용할 때와 달리, 문자 엔티티 참조(예: ∫)는 DTD가 지정되지 않은 경우 사용할 수 없습니다. 전체 MathML DTD를
지정하거나 [Entities]에 지정된
HTML/MathML 엔티티 선언 집합을 사용해야 합니다. 문자는 항상 문자 데이터 직접 사용이나 숫자 문자 참조를 사용하여 지정할 수 있으므로 ∫ 또는
∫를 사용하고 ∫ 대신 사용하는 것이 바람직합니다.
MathML 조각은 MathML용 XML 스키마를 사용하여 검증할 수 있습니다. 해당 스키마는 http://www.w3.org/Math/XMLSchema/mathml4/mathml4.xsd에서 찾을 수 있습니다. 제공된 스키마는 Relax NG 스키마로부터 기계적으로 생성되었으며, XSD 문법으로는 강제할 수 없는 일부 제약을 생략합니다.
다음 표는 MathML에서 mo 요소로 표현되는 연산자, 괄호(fences), 구분자(separators) 및 악센트(accents)에 대한
렌더링 속성 사전의 권장 항목을 제공합니다. 간결성을 위해 이 부록에서는 그러한 모든 요소를 간단히 연산자
라고 부릅니다. [MathML-Core]의 구현체는 이
값들을 기본 연산자 간격의 규범적 정의로 사용할 것임을 유의하세요.
이 사전은 요소의 내용뿐만 아니라 요소 내용과 form 속성 값의 조합으로 색인화됩니다. 여러 가지 형식을 가질 수 있는 연산자는
형식마다 별도의 항목을 가집니다. MathML 명세는 form 속성이 주어지지 않았을 때 사용할 형식을 지정하므로 참조하십시오;
자세한 내용은 3.2.5.6.2
form 속성의 기본값를 보세요.
모든 데이터는 기계 판독 가능한 형식인 unicode.xml에 들어 있으며, 이는 HTML/MathML 엔터티 정의의 소스이자 [Entities]와 함께 배포됩니다. 그러나
아래에서는 두 가지 더 사람이 읽기 쉬운 형식으로 제시합니다. 또한 이 사양에서 사용되는 대체 형식의 데이터 제시는 [MathML-Core]를
참조하세요.
첫 번째 표현에서는 연산자들이 먼저 형식(form)과 간격 속성(spacing)별로 정렬되고, 그 다음 priority로 정렬됩니다. 그런
다음 문자가 나열되며, 해당 문자에 대한 나머지 연산자 사전 항목의 추가 데이터는 적절한 브라우저에서 툴팁으로 나타나는 title 속성을 통해 제공됩니다.
데이터의 두 번째 표현에서는 표의 맨 윗행의 헤딩을 클릭하면 해당 열로 표를 정렬하도록 하여, 적절한 브라우저에서 행을 재정렬할 수 있습니다.
여기에서 제시된 lspace 및 rspace 값은 0에서 7까지이며, 이는
namedspace에 사용된 값과 일치하는 1/18 em의 배수를 나타냅니다.
내용이 InvisibleTimes 또는 ApplyFunction인 보이지 않는 연산자에
대해서는, MathML 렌더러가 컨텍스트에 따라 간격을 선택하도록 권장합니다(이는 아래 표에 주어진 정적 값의 예외입니다). 예를 들어
<mo>⁡</mo>의 경우 와 같은 식(여기서 오른쪽 피연산자가 괄호로 시작하지 않는 경우)에서는 총 간격(lspace+rspace)이 0보다 커야 합니다.
<mo>⁢</mo>의 경우에는 양쪽 피연산자(또는 기준선상에 있을 경우 양쪽의 가장 가까운 토큰)가 비기울임
글꼴로 표시된 식별자일 때(즉 권장 규칙에 따라 양쪽 모두 다문자 식별자인 경우) 총 간격이 0보다 커야 합니다.
어떤 렌더러는 TeX에서와 같이 스크립트 내에 나타나는 대부분의 연산자(즉 scriptlevel이 0보다 클 때; 3.3.4 스타일 변경
<mstyle> 참조)에 대해 간격을 사용하지 않기를 원할 수 있습니다.
| 문자 | 글리프 | 이름 | 형태 | 우선순위 | 왼쪽 여백 | 오른쪽 여백 | 속성 |
|---|---|---|---|---|---|---|---|
| ‘ | ‘ | left single quotation mark | prefix | 100 | 0 | 0 | |
| ’ | ’ | right single quotation mark | postfix | 100 | 0 | 0 | |
| “ | “ | left double quotation mark | prefix | 100 | 0 | 0 | |
| ” | ” | right double quotation mark | postfix | 100 | 0 | 0 | |
| ( | ( | left parenthesis | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ) | ) | right parenthesis | postfix | 120 | 0 | 0 | stretchy, symmetric |
| [ | [ | left square bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ] | ] | right square bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| { | { | left curly bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| | | | | vertical line | prefix | 120 | 0 | 0 | stretchy, symmetric |
| | | | | vertical line | postfix | 120 | 0 | 0 | stretchy, symmetric |
| || | || | multiple character operator: || | prefix | 120 | 0 | 0 | |
| || | || | multiple character operator: || | postfix | 120 | 0 | 0 | |
| } | } | right curly bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ‖ | ‖ | double vertical line | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ‖ | ‖ | double vertical line | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⌈ | ⌈ | left ceiling | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⌉ | ⌉ | right ceiling | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⌊ | ⌊ | left floor | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⌋ | ⌋ | right floor | postfix | 120 | 0 | 0 | stretchy, symmetric |
| 〈 | 〈 | left-pointing angle bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| 〉 | 〉 | right-pointing angle bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ❲ | ❲ | light left tortoise shell bracket ornament | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ❳ | ❳ | light right tortoise shell bracket ornament | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⟦ | ⟦ | mathematical left white square bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⟧ | ⟧ | mathematical right white square bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⟨ | ⟨ | mathematical left angle bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⟩ | ⟩ | mathematical right angle bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⟪ | ⟪ | mathematical left double angle bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⟫ | ⟫ | mathematical right double angle bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⟬ | ⟬ | mathematical left white tortoise shell bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⟭ | ⟭ | mathematical right white tortoise shell bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⟮ | ⟮ | mathematical left flattened parenthesis | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⟯ | ⟯ | mathematical right flattened parenthesis | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦀ | ⦀ | triple vertical bar delimiter | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦀ | ⦀ | triple vertical bar delimiter | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦃ | ⦃ | left white curly bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦄ | ⦄ | right white curly bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦅ | ⦅ | left white parenthesis | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦆ | ⦆ | right white parenthesis | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦇ | ⦇ | z notation left image bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦈ | ⦈ | z notation right image bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦉ | ⦉ | z notation left binding bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦊ | ⦊ | z notation right binding bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦋ | ⦋ | left square bracket with underbar | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦌ | ⦌ | right square bracket with underbar | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦍ | ⦍ | left square bracket with tick in top corner | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦎ | ⦎ | right square bracket with tick in bottom corner | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦏ | ⦏ | left square bracket with tick in bottom corner | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦐ | ⦐ | right square bracket with tick in top corner | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦑ | ⦑ | left angle bracket with dot | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦒ | ⦒ | right angle bracket with dot | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦓ | ⦓ | left arc less-than bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦔ | ⦔ | right arc greater-than bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦕ | ⦕ | double left arc greater-than bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦖ | ⦖ | double right arc less-than bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦗ | ⦗ | left black tortoise shell bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦘ | ⦘ | right black tortoise shell bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⦙ | ⦙ | dotted fence | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⦙ | ⦙ | dotted fence | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⧘ | ⧘ | left wiggly fence | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⧙ | ⧙ | right wiggly fence | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⧚ | ⧚ | left double wiggly fence | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⧛ | ⧛ | right double wiggly fence | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ⧼ | ⧼ | left-pointing curved angle bracket | prefix | 120 | 0 | 0 | stretchy, symmetric |
| ⧽ | ⧽ | right-pointing curved angle bracket | postfix | 120 | 0 | 0 | stretchy, symmetric |
| ; | ; | semicolon | infix | 140 | 0 | 3 | linebreakstyle=after |
| ⦁ | ⦁ | z notation spot | infix | 140 | 5 | 5 | |
| , | , | comma | infix | 160 | 0 | 3 | linebreakstyle=after |
| ⁣ | | invisible separator | infix | 160 | 0 | 0 | linebreakstyle=after |
| : | : | colon | infix | 180 | 0 | 3 | |
| ⦂ | ⦂ | z notation type colon | infix | 180 | 5 | 5 | |
| ∴ | ∴ | therefore | prefix | 200 | 0 | 0 | |
| ∵ | ∵ | because | prefix | 200 | 0 | 0 | |
| -> | -> | multiple character operator: -> | infix | 220 | 5 | 5 | |
| ⊶ | ⊶ | original of | infix | 220 | 5 | 5 | |
| ⊷ | ⊷ | image of | infix | 220 | 5 | 5 | |
| ⊸ | ⊸ | multimap | infix | 220 | 5 | 5 | |
| ⧴ | ⧴ | rule-delayed | infix | 220 | 5 | 5 | |
| // | // | multiple character operator: // | infix | 240 | 5 | 5 | |
| ⊢ | ⊢ | right tack | infix | 260 | 5 | 5 | |
| ⊣ | ⊣ | left tack | infix | 260 | 5 | 5 | |
| ⊧ | ⊧ | models | infix | 260 | 5 | 5 | |
| ⊨ | ⊨ | true | infix | 260 | 5 | 5 | |
| ⊩ | ⊩ | forces | infix | 260 | 5 | 5 | |
| ⊪ | ⊪ | triple vertical bar right turnstile | infix | 260 | 5 | 5 | |
| ⊫ | ⊫ | double vertical bar double right turnstile | infix | 260 | 5 | 5 | |
| ⊬ | ⊬ | does not prove | infix | 260 | 5 | 5 | |
| ⊭ | ⊭ | not true | infix | 260 | 5 | 5 | |
| ⊮ | ⊮ | does not force | infix | 260 | 5 | 5 | |
| ⊯ | ⊯ | negated double vertical bar double right turnstile | infix | 260 | 5 | 5 | |
| ⫞ | ⫞ | short left tack | infix | 260 | 5 | 5 | |
| ⫟ | ⫟ | short down tack | infix | 260 | 5 | 5 | |
| ⫠ | ⫠ | short up tack | infix | 260 | 5 | 5 | |
| ⫡ | ⫡ | perpendicular with s | infix | 260 | 5 | 5 | |
| ⫢ | ⫢ | vertical bar triple right turnstile | infix | 260 | 5 | 5 | |
| ⫣ | ⫣ | double vertical bar left turnstile | infix | 260 | 5 | 5 | |
| ⫤ | ⫤ | vertical bar double left turnstile | infix | 260 | 5 | 5 | |
| ⫥ | ⫥ | double vertical bar double left turnstile | infix | 260 | 5 | 5 | |
| ⫦ | ⫦ | long dash from left member of double vertical | infix | 260 | 5 | 5 | |
| ⫧ | ⫧ | short down tack with overbar | infix | 260 | 5 | 5 | |
| ⫨ | ⫨ | short up tack with underbar | infix | 260 | 5 | 5 | |
| ⫩ | ⫩ | short up tack above short down tack | infix | 260 | 5 | 5 | |
| ⫪ | ⫪ | double down tack | infix | 260 | 5 | 5 | |
| ⫫ | ⫫ | double up tack | infix | 260 | 5 | 5 | |
| ! | ! | exclamation mark | prefix | 280 | 0 | 0 | |
| ¬ | ¬ | not sign | prefix | 280 | 0 | 0 | |
| ∀ | ∀ | for all | prefix | 280 | 0 | 0 | |
| ∃ | ∃ | there exists | prefix | 280 | 0 | 0 | |
| ∄ | ∄ | there does not exist | prefix | 280 | 0 | 0 | |
| ∼ | ∼ | tilde operator | prefix | 280 | 0 | 0 | |
| ⌐ | ⌐ | reversed not sign | prefix | 280 | 0 | 0 | |
| ⌙ | ⌙ | turned not sign | prefix | 280 | 0 | 0 | |
| ⫬ | ⫬ | double stroke not sign | prefix | 280 | 0 | 0 | |
| ⫭ | ⫭ | reversed double stroke not sign | prefix | 280 | 0 | 0 | |
| ∈ | ∈ | element of | infix | 300 | 5 | 5 | |
| ∉ | ∉ | not an element of | infix | 300 | 5 | 5 | |
| ∊ | ∊ | small element of | infix | 300 | 5 | 5 | |
| ∋ | ∋ | contains as member | infix | 300 | 5 | 5 | |
| ∌ | ∌ | does not contain as member | infix | 300 | 5 | 5 | |
| ∍ | ∍ | small contains as member | infix | 300 | 5 | 5 | |
| ⊂ | ⊂ | subset of | infix | 300 | 5 | 5 | |
| ⊃ | ⊃ | superset of | infix | 300 | 5 | 5 | |
| ⊄ | ⊄ | not a subset of | infix | 300 | 5 | 5 | |
| ⊅ | ⊅ | not a superset of | infix | 300 | 5 | 5 | |
| ⊆ | ⊆ | subset of or equal to | infix | 300 | 5 | 5 | |
| ⊇ | ⊇ | superset of or equal to | infix | 300 | 5 | 5 | |
| ⊈ | ⊈ | neither a subset of nor equal to | infix | 300 | 5 | 5 | |
| ⊉ | ⊉ | neither a superset of nor equal to | infix | 300 | 5 | 5 | |
| ⊊ | ⊊ | subset of with not equal to | infix | 300 | 5 | 5 | |
| ⊋ | ⊋ | superset of with not equal to | infix | 300 | 5 | 5 | |
| ⊏ | ⊏ | square image of | infix | 300 | 5 | 5 | |
| ⊐ | ⊐ | square original of | infix | 300 | 5 | 5 | |
| ⊑ | ⊑ | square image of or equal to | infix | 300 | 5 | 5 | |
| ⊒ | ⊒ | square original of or equal to | infix | 300 | 5 | 5 | |
| ⊰ | ⊰ | precedes under relation | infix | 300 | 5 | 5 | |
| ⊱ | ⊱ | succeeds under relation | infix | 300 | 5 | 5 | |
| ⊲ | ⊲ | normal subgroup of | infix | 300 | 5 | 5 | |
| ⊳ | ⊳ | contains as normal subgroup | infix | 300 | 5 | 5 | |
| ⋐ | ⋐ | double subset | infix | 300 | 5 | 5 | |
| ⋑ | ⋑ | double superset | infix | 300 | 5 | 5 | |
| ⋢ | ⋢ | not square image of or equal to | infix | 300 | 5 | 5 | |
| ⋣ | ⋣ | not square original of or equal to | infix | 300 | 5 | 5 | |
| ⋤ | ⋤ | square image of or not equal to | infix | 300 | 5 | 5 | |
| ⋥ | ⋥ | square original of or not equal to | infix | 300 | 5 | 5 | |
| ⋪ | ⋪ | not normal subgroup of | infix | 300 | 5 | 5 | |
| ⋫ | ⋫ | does not contain as normal subgroup | infix | 300 | 5 | 5 | |
| ⋬ | ⋬ | not normal subgroup of or equal to | infix | 300 | 5 | 5 | |
| ⋭ | ⋭ | does not contain as normal subgroup or equal | infix | 300 | 5 | 5 | |
| ⋲ | ⋲ | element of with long horizontal stroke | infix | 300 | 5 | 5 | |
| ⋳ | ⋳ | element of with vertical bar at end of horizontal stroke | infix | 300 | 5 | 5 | |
| ⋴ | ⋴ | small element of with vertical bar at end of horizontal stroke | infix | 300 | 5 | 5 | |
| ⋵ | ⋵ | element of with dot above | infix | 300 | 5 | 5 | |
| ⋶ | ⋶ | element of with overbar | infix | 300 | 5 | 5 | |
| ⋷ | ⋷ | small element of with overbar | infix | 300 | 5 | 5 | |
| ⋸ | ⋸ | element of with underbar | infix | 300 | 5 | 5 | |
| ⋹ | ⋹ | element of with two horizontal strokes | infix | 300 | 5 | 5 | |
| ⋺ | ⋺ | contains with long horizontal stroke | infix | 300 | 5 | 5 | |
| ⋻ | ⋻ | contains with vertical bar at end of horizontal stroke | infix | 300 | 5 | 5 | |
| ⋼ | ⋼ | small contains with vertical bar at end of horizontal stroke | infix | 300 | 5 | 5 | |
| ⋽ | ⋽ | contains with overbar | infix | 300 | 5 | 5 | |
| ⋾ | ⋾ | small contains with overbar | infix | 300 | 5 | 5 | |
| ⋿ | ⋿ | z notation bag membership | infix | 300 | 5 | 5 | |
| ⥹ | ⥹ | subset above rightwards arrow | infix | 300 | 5 | 5 | |
| ⥺ | ⥺ | leftwards arrow through subset | infix | 300 | 5 | 5 | |
| ⥻ | ⥻ | superset above leftwards arrow | infix | 300 | 5 | 5 | |
| ⪽ | ⪽ | subset with dot | infix | 300 | 5 | 5 | |
| ⪾ | ⪾ | superset with dot | infix | 300 | 5 | 5 | |
| ⪿ | ⪿ | subset with plus sign below | infix | 300 | 5 | 5 | |
| ⫀ | ⫀ | superset with plus sign below | infix | 300 | 5 | 5 | |
| ⫁ | ⫁ | subset with multiplication sign below | infix | 300 | 5 | 5 | |
| ⫂ | ⫂ | superset with multiplication sign below | infix | 300 | 5 | 5 | |
| ⫃ | ⫃ | subset of or equal to with dot above | infix | 300 | 5 | 5 | |
| ⫄ | ⫄ | superset of or equal to with dot above | infix | 300 | 5 | 5 | |
| ⫅ | ⫅ | subset of above equals sign | infix | 300 | 5 | 5 | |
| ⫆ | ⫆ | superset of above equals sign | infix | 300 | 5 | 5 | |
| ⫇ | ⫇ | subset of above tilde operator | infix | 300 | 5 | 5 | |
| ⫈ | ⫈ | superset of above tilde operator | infix | 300 | 5 | 5 | |
| ⫉ | ⫉ | subset of above almost equal to | infix | 300 | 5 | 5 | |
| ⫊ | ⫊ | superset of above almost equal to | infix | 300 | 5 | 5 | |
| ⫋ | ⫋ | subset of above not equal to | infix | 300 | 5 | 5 | |
| ⫌ | ⫌ | superset of above not equal to | infix | 300 | 5 | 5 | |
| ⫍ | ⫍ | square left open box operator | infix | 300 | 5 | 5 | |
| ⫎ | ⫎ | square right open box operator | infix | 300 | 5 | 5 | |
| ⫏ | ⫏ | closed subset | infix | 300 | 5 | 5 | |
| ⫐ | ⫐ | closed superset | infix | 300 | 5 | 5 | |
| ⫑ | ⫑ | closed subset or equal to | infix | 300 | 5 | 5 | |
| ⫒ | ⫒ | closed superset or equal to | infix | 300 | 5 | 5 | |
| ⫓ | ⫓ | subset above superset | infix | 300 | 5 | 5 | |
| ⫔ | ⫔ | superset above subset | infix | 300 | 5 | 5 | |
| ⫕ | ⫕ | subset above subset | infix | 300 | 5 | 5 | |
| ⫖ | ⫖ | superset above superset | infix | 300 | 5 | 5 | |
| ⫗ | ⫗ | superset beside subset | infix | 300 | 5 | 5 | |
| ⫘ | ⫘ | superset beside and joined by dash with subset | infix | 300 | 5 | 5 | |
| ⫙ | ⫙ | element of opening downwards | infix | 300 | 5 | 5 | |
| != | != | multiple character operator: != | infix | 320 | 5 | 5 | |
| *= | *= | multiple character operator: *= | infix | 320 | 5 | 5 | |
| += | += | multiple character operator: += | infix | 320 | 5 | 5 | |
| -= | -= | multiple character operator: -= | infix | 320 | 5 | 5 | |
| /= | /= | multiple character operator: /= | infix | 320 | 5 | 5 | |
| := | := | multiple character operator: := | infix | 320 | 5 | 5 | |
| < | < | less-than sign | infix | 320 | 5 | 5 | |
| <= | <= | multiple character operator: <= | infix | 320 | 5 | 5 | |
| = | = | equals sign | infix | 320 | 5 | 5 | |
| == | == | multiple character operator: == | infix | 320 | 5 | 5 | |
| > | > | greater-than sign | infix | 320 | 5 | 5 | |
| >= | >= | multiple character operator: >= | infix | 320 | 5 | 5 | |
| | | | | vertical line | infix | 320 | 5 | 5 | |
| || | || | multiple character operator: || | infix | 320 | 5 | 5 | |
| ∝ | ∝ | proportional to | infix | 320 | 5 | 5 | |
| ∣ | ∣ | divides | infix | 320 | 5 | 5 | |
| ∤ | ∤ | does not divide | infix | 320 | 5 | 5 | |
| ∥ | ∥ | parallel to | infix | 320 | 5 | 5 | |
| ∦ | ∦ | not parallel to | infix | 320 | 5 | 5 | |
| ∷ | ∷ | proportion | infix | 320 | 5 | 5 | |
| ∹ | ∹ | excess | infix | 320 | 5 | 5 | |
| ∺ | ∺ | geometric proportion | infix | 320 | 5 | 5 | |
| ∻ | ∻ | homothetic | infix | 320 | 5 | 5 | |
| ∼ | ∼ | tilde operator | infix | 320 | 5 | 5 | |
| ∽ | ∽ | reversed tilde | infix | 320 | 5 | 5 | |
| ∾ | ∾ | inverted lazy s | infix | 320 | 5 | 5 | |
| ≁ | ≁ | not tilde | infix | 320 | 5 | 5 | |
| ≂ | ≂ | minus tilde | infix | 320 | 5 | 5 | |
| ≃ | ≃ | asymptotically equal to | infix | 320 | 5 | 5 | |
| ≄ | ≄ | not asymptotically equal to | infix | 320 | 5 | 5 | |
| ≅ | ≅ | approximately equal to | infix | 320 | 5 | 5 | |
| ≆ | ≆ | approximately but not actually equal to | infix | 320 | 5 | 5 | |
| ≇ | ≇ | neither approximately nor actually equal to | infix | 320 | 5 | 5 | |
| ≈ | ≈ | almost equal to | infix | 320 | 5 | 5 | |
| ≉ | ≉ | not almost equal to | infix | 320 | 5 | 5 | |
| ≊ | ≊ | almost equal or equal to | infix | 320 | 5 | 5 | |
| ≋ | ≋ | triple tilde | infix | 320 | 5 | 5 | |
| ≌ | ≌ | all equal to | infix | 320 | 5 | 5 | |
| ≍ | ≍ | equivalent to | infix | 320 | 5 | 5 | |
| ≎ | ≎ | geometrically equivalent to | infix | 320 | 5 | 5 | |
| ≏ | ≏ | difference between | infix | 320 | 5 | 5 | |
| ≐ | ≐ | approaches the limit | infix | 320 | 5 | 5 | |
| ≑ | ≑ | geometrically equal to | infix | 320 | 5 | 5 | |
| ≒ | ≒ | approximately equal to or the image of | infix | 320 | 5 | 5 | |
| ≓ | ≓ | image of or approximately equal to | infix | 320 | 5 | 5 | |
| ≔ | ≔ | colon equals | infix | 320 | 5 | 5 | |
| ≕ | ≕ | equals colon | infix | 320 | 5 | 5 | |
| ≖ | ≖ | ring in equal to | infix | 320 | 5 | 5 | |
| ≗ | ≗ | ring equal to | infix | 320 | 5 | 5 | |
| ≘ | ≘ | corresponds to | infix | 320 | 5 | 5 | |
| ≙ | ≙ | estimates | infix | 320 | 5 | 5 | |
| ≚ | ≚ | equiangular to | infix | 320 | 5 | 5 | |
| ≛ | ≛ | star equals | infix | 320 | 5 | 5 | |
| ≜ | ≜ | delta equal to | infix | 320 | 5 | 5 | |
| ≝ | ≝ | equal to by definition | infix | 320 | 5 | 5 | |
| ≞ | ≞ | measured by | infix | 320 | 5 | 5 | |
| ≟ | ≟ | questioned equal to | infix | 320 | 5 | 5 | |
| ≠ | ≠ | not equal to | infix | 320 | 5 | 5 | |
| ≡ | ≡ | identical to | infix | 320 | 5 | 5 | |
| ≢ | ≢ | not identical to | infix | 320 | 5 | 5 | |
| ≣ | ≣ | strictly equivalent to | infix | 320 | 5 | 5 | |
| ≤ | ≤ | less-than or equal to | infix | 320 | 5 | 5 | |
| ≥ | ≥ | greater-than or equal to | infix | 320 | 5 | 5 | |
| ≦ | ≦ | less-than over equal to | infix | 320 | 5 | 5 | |
| ≧ | ≧ | greater-than over equal to | infix | 320 | 5 | 5 | |
| ≨ | ≨ | less-than but not equal to | infix | 320 | 5 | 5 | |
| ≩ | ≩ | greater-than but not equal to | infix | 320 | 5 | 5 | |
| ≪ | ≪ | much less-than | infix | 320 | 5 | 5 | |
| ≫ | ≫ | much greater-than | infix | 320 | 5 | 5 | |
| ≬ | ≬ | between | infix | 320 | 5 | 5 | |
| ≭ | ≭ | not equivalent to | infix | 320 | 5 | 5 | |
| ≮ | ≮ | not less-than | infix | 320 | 5 | 5 | |
| ≯ | ≯ | not greater-than | infix | 320 | 5 | 5 | |
| ≰ | ≰ | neither less-than nor equal to | infix | 320 | 5 | 5 | |
| ≱ | ≱ | neither greater-than nor equal to | infix | 320 | 5 | 5 | |
| ≲ | ≲ | less-than or equivalent to | infix | 320 | 5 | 5 | |
| ≳ | ≳ | greater-than or equivalent to | infix | 320 | 5 | 5 | |
| ≴ | ≴ | neither less-than nor equivalent to | infix | 320 | 5 | 5 | |
| ≵ | ≵ | neither greater-than nor equivalent to | infix | 320 | 5 | 5 | |
| ≶ | ≶ | less-than or greater-than | infix | 320 | 5 | 5 | |
| ≷ | ≷ | greater-than or less-than | infix | 320 | 5 | 5 | |
| ≸ | ≸ | neither less-than nor greater-than | infix | 320 | 5 | 5 | |
| ≹ | ≹ | neither greater-than nor less-than | infix | 320 | 5 | 5 | |
| ≺ | ≺ | precedes | infix | 320 | 5 | 5 | |
| ≻ | ≻ | succeeds | infix | 320 | 5 | 5 | |
| ≼ | ≼ | precedes or equal to | infix | 320 | 5 | 5 | |
| ≽ | ≽ | succeeds or equal to | infix | 320 | 5 | 5 | |
| ≾ | ≾ | precedes or equivalent to | infix | 320 | 5 | 5 | |
| ≿ | ≿ | succeeds or equivalent to | infix | 320 | 5 | 5 | |
| ⊀ | ⊀ | does not precede | infix | 320 | 5 | 5 | |
| ⊁ | ⊁ | does not succeed | infix | 320 | 5 | 5 | |
| ⊜ | ⊜ | circled equals | infix | 320 | 5 | 5 | |
| ⊦ | ⊦ | assertion | infix | 320 | 5 | 5 | |
| ⊴ | ⊴ | normal subgroup of or equal to | infix | 320 | 5 | 5 | |
| ⊵ | ⊵ | contains as normal subgroup or equal to | infix | 320 | 5 | 5 | |
| ⋈ | ⋈ | bowtie | infix | 320 | 5 | 5 | |
| ⋍ | ⋍ | reversed tilde equals | infix | 320 | 5 | 5 | |
| ⋔ | ⋔ | pitchfork | infix | 320 | 5 | 5 | |
| ⋕ | ⋕ | equal and parallel to | infix | 320 | 5 | 5 | |
| ⋖ | ⋖ | less-than with dot | infix | 320 | 5 | 5 | |
| ⋗ | ⋗ | greater-than with dot | infix | 320 | 5 | 5 | |
| ⋘ | ⋘ | very much less-than | infix | 320 | 5 | 5 | |
| ⋙ | ⋙ | very much greater-than | infix | 320 | 5 | 5 | |
| ⋚ | ⋚ | less-than equal to or greater-than | infix | 320 | 5 | 5 | |
| ⋛ | ⋛ | greater-than equal to or less-than | infix | 320 | 5 | 5 | |
| ⋜ | ⋜ | equal to or less-than | infix | 320 | 5 | 5 | |
| ⋝ | ⋝ | equal to or greater-than | infix | 320 | 5 | 5 | |
| ⋞ | ⋞ | equal to or precedes | infix | 320 | 5 | 5 | |
| ⋟ | ⋟ | equal to or succeeds | infix | 320 | 5 | 5 | |
| ⋠ | ⋠ | does not precede or equal | infix | 320 | 5 | 5 | |
| ⋡ | ⋡ | does not succeed or equal | infix | 320 | 5 | 5 | |
| ⋦ | ⋦ | less-than but not equivalent to | infix | 320 | 5 | 5 | |
| ⋧ | ⋧ | greater-than but not equivalent to | infix | 320 | 5 | 5 | |
| ⋨ | ⋨ | precedes but not equivalent to | infix | 320 | 5 | 5 | |
| ⋩ | ⋩ | succeeds but not equivalent to | infix | 320 | 5 | 5 | |
| ⟂ | ⟂ | perpendicular | infix | 320 | 5 | 5 | |
| ⥶ | ⥶ | less-than above leftwards arrow | infix | 320 | 5 | 5 | |
| ⥷ | ⥷ | leftwards arrow through less-than | infix | 320 | 5 | 5 | |
| ⥸ | ⥸ | greater-than above rightwards arrow | infix | 320 | 5 | 5 | |
| ⦶ | ⦶ | circled vertical bar | infix | 320 | 5 | 5 | |
| ⦷ | ⦷ | circled parallel | infix | 320 | 5 | 5 | |
| ⦹ | ⦹ | circled perpendicular | infix | 320 | 5 | 5 | |
| ⧀ | ⧀ | circled less-than | infix | 320 | 5 | 5 | |
| ⧁ | ⧁ | circled greater-than | infix | 320 | 5 | 5 | |
| ⧎ | ⧎ | right triangle above left triangle | infix | 320 | 5 | 5 | |
| ⧏ | ⧏ | left triangle beside vertical bar | infix | 320 | 5 | 5 | |
| ⧐ | ⧐ | vertical bar beside right triangle | infix | 320 | 5 | 5 | |
| ⧑ | ⧑ | bowtie with left half black | infix | 320 | 5 | 5 | |
| ⧒ | ⧒ | bowtie with right half black | infix | 320 | 5 | 5 | |
| ⧓ | ⧓ | black bowtie | infix | 320 | 5 | 5 | |
| ⧡ | ⧡ | increases as | infix | 320 | 5 | 5 | |
| ⧣ | ⧣ | equals sign and slanted parallel | infix | 320 | 5 | 5 | |
| ⧤ | ⧤ | equals sign and slanted parallel with tilde above | infix | 320 | 5 | 5 | |
| ⧥ | ⧥ | identical to and slanted parallel | infix | 320 | 5 | 5 | |
| ⧦ | ⧦ | gleich stark | infix | 320 | 5 | 5 | |
| ⩦ | ⩦ | equals sign with dot below | infix | 320 | 5 | 5 | |
| ⩧ | ⩧ | identical with dot above | infix | 320 | 5 | 5 | |
| ⩨ | ⩨ | triple horizontal bar with double vertical stroke | infix | 320 | 5 | 5 | |
| ⩩ | ⩩ | triple horizontal bar with triple vertical stroke | infix | 320 | 5 | 5 | |
| ⩪ | ⩪ | tilde operator with dot above | infix | 320 | 5 | 5 | |
| ⩫ | ⩫ | tilde operator with rising dots | infix | 320 | 5 | 5 | |
| ⩬ | ⩬ | similar minus similar | infix | 320 | 5 | 5 | |
| ⩭ | ⩭ | congruent with dot above | infix | 320 | 5 | 5 | |
| ⩮ | ⩮ | equals with asterisk | infix | 320 | 5 | 5 | |
| ⩯ | ⩯ | almost equal to with circumflex accent | infix | 320 | 5 | 5 | |
| ⩰ | ⩰ | approximately equal or equal to | infix | 320 | 5 | 5 | |
| ⩱ | ⩱ | equals sign above plus sign | infix | 320 | 5 | 5 | |
| ⩲ | ⩲ | plus sign above equals sign | infix | 320 | 5 | 5 | |
| ⩳ | ⩳ | equals sign above tilde operator | infix | 320 | 5 | 5 | |
| ⩴ | ⩴ | double colon equal | infix | 320 | 5 | 5 | |
| ⩵ | ⩵ | two consecutive equals signs | infix | 320 | 5 | 5 | |
| ⩶ | ⩶ | three consecutive equals signs | infix | 320 | 5 | 5 | |
| ⩷ | ⩷ | equals sign with two dots above and two dots below | infix | 320 | 5 | 5 | |
| ⩸ | ⩸ | equivalent with four dots above | infix | 320 | 5 | 5 | |
| ⩹ | ⩹ | less-than with circle inside | infix | 320 | 5 | 5 | |
| ⩺ | ⩺ | greater-than with circle inside | infix | 320 | 5 | 5 | |
| ⩻ | ⩻ | less-than with question mark above | infix | 320 | 5 | 5 | |
| ⩼ | ⩼ | greater-than with question mark above | infix | 320 | 5 | 5 | |
| ⩽ | ⩽ | less-than or slanted equal to | infix | 320 | 5 | 5 | |
| ⩾ | ⩾ | greater-than or slanted equal to | infix | 320 | 5 | 5 | |
| ⩿ | ⩿ | less-than or slanted equal to with dot inside | infix | 320 | 5 | 5 | |
| ⪀ | ⪀ | greater-than or slanted equal to with dot inside | infix | 320 | 5 | 5 | |
| ⪁ | ⪁ | less-than or slanted equal to with dot above | infix | 320 | 5 | 5 | |
| ⪂ | ⪂ | greater-than or slanted equal to with dot above | infix | 320 | 5 | 5 | |
| ⪃ | ⪃ | less-than or slanted equal to with dot above right | infix | 320 | 5 | 5 | |
| ⪄ | ⪄ | greater-than or slanted equal to with dot above left | infix | 320 | 5 | 5 | |
| ⪅ | ⪅ | less-than or approximate | infix | 320 | 5 | 5 | |
| ⪆ | ⪆ | greater-than or approximate | infix | 320 | 5 | 5 | |
| ⪇ | ⪇ | less-than and single-line not equal to | infix | 320 | 5 | 5 | |
| ⪈ | ⪈ | greater-than and single-line not equal to | infix | 320 | 5 | 5 | |
| ⪉ | ⪉ | less-than and not approximate | infix | 320 | 5 | 5 | |
| ⪊ | ⪊ | greater-than and not approximate | infix | 320 | 5 | 5 | |
| ⪋ | ⪋ | less-than above double-line equal above greater-than | infix | 320 | 5 | 5 | |
| ⪌ | ⪌ | greater-than above double-line equal above less-than | infix | 320 | 5 | 5 | |
| ⪍ | ⪍ | less-than above similar or equal | infix | 320 | 5 | 5 | |
| ⪎ | ⪎ | greater-than above similar or equal | infix | 320 | 5 | 5 | |
| ⪏ | ⪏ | less-than above similar above greater-than | infix | 320 | 5 | 5 | |
| ⪐ | ⪐ | greater-than above similar above less-than | infix | 320 | 5 | 5 | |
| ⪑ | ⪑ | less-than above greater-than above double-line equal | infix | 320 | 5 | 5 | |
| ⪒ | ⪒ | greater-than above less-than above double-line equal | infix | 320 | 5 | 5 | |
| ⪓ | ⪓ | less-than above slanted equal above greater-than above slanted equal | infix | 320 | 5 | 5 | |
| ⪔ | ⪔ | greater-than above slanted equal above less-than above slanted equal | infix | 320 | 5 | 5 | |
| ⪕ | ⪕ | slanted equal to or less-than | infix | 320 | 5 | 5 | |
| ⪖ | ⪖ | slanted equal to or greater-than | infix | 320 | 5 | 5 | |
| ⪗ | ⪗ | slanted equal to or less-than with dot inside | infix | 320 | 5 | 5 | |
| ⪘ | ⪘ | slanted equal to or greater-than with dot inside | infix | 320 | 5 | 5 | |
| ⪙ | ⪙ | double-line equal to or less-than | infix | 320 | 5 | 5 | |
| ⪚ | ⪚ | double-line equal to or greater-than | infix | 320 | 5 | 5 | |
| ⪛ | ⪛ | double-line slanted equal to or less-than | infix | 320 | 5 | 5 | |
| ⪜ | ⪜ | double-line slanted equal to or greater-than | infix | 320 | 5 | 5 | |
| ⪝ | ⪝ | similar or less-than | infix | 320 | 5 | 5 | |
| ⪞ | ⪞ | similar or greater-than | infix | 320 | 5 | 5 | |
| ⪟ | ⪟ | similar above less-than above equals sign | infix | 320 | 5 | 5 | |
| ⪠ | ⪠ | similar above greater-than above equals sign | infix | 320 | 5 | 5 | |
| ⪡ | ⪡ | double nested less-than | infix | 320 | 5 | 5 | |
| ⪢ | ⪢ | double nested greater-than | infix | 320 | 5 | 5 | |
| ⪣ | ⪣ | double nested less-than with underbar | infix | 320 | 5 | 5 | |
| ⪤ | ⪤ | greater-than overlapping less-than | infix | 320 | 5 | 5 | |
| ⪥ | ⪥ | greater-than beside less-than | infix | 320 | 5 | 5 | |
| ⪦ | ⪦ | less-than closed by curve | infix | 320 | 5 | 5 | |
| ⪧ | ⪧ | greater-than closed by curve | infix | 320 | 5 | 5 | |
| ⪨ | ⪨ | less-than closed by curve above slanted equal | infix | 320 | 5 | 5 | |
| ⪩ | ⪩ | greater-than closed by curve above slanted equal | infix | 320 | 5 | 5 | |
| ⪪ | ⪪ | smaller than | infix | 320 | 5 | 5 | |
| ⪫ | ⪫ | larger than | infix | 320 | 5 | 5 | |
| ⪬ | ⪬ | smaller than or equal to | infix | 320 | 5 | 5 | |
| ⪭ | ⪭ | larger than or equal to | infix | 320 | 5 | 5 | |
| ⪮ | ⪮ | equals sign with bumpy above | infix | 320 | 5 | 5 | |
| ⪯ | ⪯ | precedes above single-line equals sign | infix | 320 | 5 | 5 | |
| ⪰ | ⪰ | succeeds above single-line equals sign | infix | 320 | 5 | 5 | |
| ⪱ | ⪱ | precedes above single-line not equal to | infix | 320 | 5 | 5 | |
| ⪲ | ⪲ | succeeds above single-line not equal to | infix | 320 | 5 | 5 | |
| ⪳ | ⪳ | precedes above equals sign | infix | 320 | 5 | 5 | |
| ⪴ | ⪴ | succeeds above equals sign | infix | 320 | 5 | 5 | |
| ⪵ | ⪵ | precedes above not equal to | infix | 320 | 5 | 5 | |
| ⪶ | ⪶ | succeeds above not equal to | infix | 320 | 5 | 5 | |
| ⪷ | ⪷ | precedes above almost equal to | infix | 320 | 5 | 5 | |
| ⪸ | ⪸ | succeeds above almost equal to | infix | 320 | 5 | 5 | |
| ⪹ | ⪹ | precedes above not almost equal to | infix | 320 | 5 | 5 | |
| ⪺ | ⪺ | succeeds above not almost equal to | infix | 320 | 5 | 5 | |
| ⪻ | ⪻ | double precedes | infix | 320 | 5 | 5 | |
| ⪼ | ⪼ | double succeeds | infix | 320 | 5 | 5 | |
| ⫚ | ⫚ | pitchfork with tee top | infix | 320 | 5 | 5 | |
| ⫮ | ⫮ | does not divide with reversed negation slash | infix | 320 | 5 | 5 | |
| ⫲ | ⫲ | parallel with horizontal stroke | infix | 320 | 5 | 5 | |
| ⫳ | ⫳ | parallel with tilde operator | infix | 320 | 5 | 5 | |
| ⫴ | ⫴ | triple vertical bar binary relation | infix | 320 | 5 | 5 | |
| ⫵ | ⫵ | triple vertical bar with horizontal stroke | infix | 320 | 5 | 5 | |
| ⫷ | ⫷ | triple nested less-than | infix | 320 | 5 | 5 | |
| ⫸ | ⫸ | triple nested greater-than | infix | 320 | 5 | 5 | |
| ⫹ | ⫹ | double-line slanted less-than or equal to | infix | 320 | 5 | 5 | |
| ⫺ | ⫺ | double-line slanted greater-than or equal to | infix | 320 | 5 | 5 | |
| ⯑ | ⯑ | uncertainty sign | infix | 320 | 5 | 5 | |
| ← | ← | leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ↑ | ↑ | upwards arrow | infix | 340 | 5 | 5 | stretchy |
| → | → | rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ↓ | ↓ | downwards arrow | infix | 340 | 5 | 5 | stretchy |
| ↔ | ↔ | left right arrow | infix | 340 | 5 | 5 | stretchy |
| ↕ | ↕ | up down arrow | infix | 340 | 5 | 5 | stretchy |
| ↖ | ↖ | north west arrow | infix | 340 | 5 | 5 | |
| ↗ | ↗ | north east arrow | infix | 340 | 5 | 5 | |
| ↘ | ↘ | south east arrow | infix | 340 | 5 | 5 | |
| ↙ | ↙ | south west arrow | infix | 340 | 5 | 5 | |
| ↚ | ↚ | leftwards arrow with stroke | infix | 340 | 5 | 5 | stretchy |
| ↛ | ↛ | rightwards arrow with stroke | infix | 340 | 5 | 5 | stretchy |
| ↜ | ↜ | leftwards wave arrow | infix | 340 | 5 | 5 | stretchy |
| ↝ | ↝ | rightwards wave arrow | infix | 340 | 5 | 5 | stretchy |
| ↞ | ↞ | leftwards two headed arrow | infix | 340 | 5 | 5 | stretchy |
| ↟ | ↟ | upwards two headed arrow | infix | 340 | 5 | 5 | stretchy |
| ↠ | ↠ | rightwards two headed arrow | infix | 340 | 5 | 5 | stretchy |
| ↡ | ↡ | downwards two headed arrow | infix | 340 | 5 | 5 | stretchy |
| ↢ | ↢ | leftwards arrow with tail | infix | 340 | 5 | 5 | stretchy |
| ↣ | ↣ | rightwards arrow with tail | infix | 340 | 5 | 5 | stretchy |
| ↤ | ↤ | leftwards arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ↥ | ↥ | upwards arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ↦ | ↦ | rightwards arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ↧ | ↧ | downwards arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ↨ | ↨ | up down arrow with base | infix | 340 | 5 | 5 | stretchy |
| ↩ | ↩ | leftwards arrow with hook | infix | 340 | 5 | 5 | stretchy |
| ↪ | ↪ | rightwards arrow with hook | infix | 340 | 5 | 5 | stretchy |
| ↫ | ↫ | leftwards arrow with loop | infix | 340 | 5 | 5 | stretchy |
| ↬ | ↬ | rightwards arrow with loop | infix | 340 | 5 | 5 | stretchy |
| ↭ | ↭ | left right wave arrow | infix | 340 | 5 | 5 | stretchy |
| ↮ | ↮ | left right arrow with stroke | infix | 340 | 5 | 5 | stretchy |
| ↯ | ↯ | downwards zigzag arrow | infix | 340 | 5 | 5 | |
| ↰ | ↰ | upwards arrow with tip leftwards | infix | 340 | 5 | 5 | stretchy |
| ↱ | ↱ | upwards arrow with tip rightwards | infix | 340 | 5 | 5 | stretchy |
| ↲ | ↲ | downwards arrow with tip leftwards | infix | 340 | 5 | 5 | stretchy |
| ↳ | ↳ | downwards arrow with tip rightwards | infix | 340 | 5 | 5 | stretchy |
| ↴ | ↴ | rightwards arrow with corner downwards | infix | 340 | 5 | 5 | stretchy |
| ↵ | ↵ | downwards arrow with corner leftwards | infix | 340 | 5 | 5 | stretchy |
| ↶ | ↶ | anticlockwise top semicircle arrow | infix | 340 | 5 | 5 | |
| ↷ | ↷ | clockwise top semicircle arrow | infix | 340 | 5 | 5 | |
| ↸ | ↸ | north west arrow to long bar | infix | 340 | 5 | 5 | |
| ↹ | ↹ | leftwards arrow to bar over rightwards arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ↺ | ↺ | anticlockwise open circle arrow | infix | 340 | 5 | 5 | |
| ↻ | ↻ | clockwise open circle arrow | infix | 340 | 5 | 5 | |
| ↼ | ↼ | leftwards harpoon with barb upwards | infix | 340 | 5 | 5 | stretchy |
| ↽ | ↽ | leftwards harpoon with barb downwards | infix | 340 | 5 | 5 | stretchy |
| ↾ | ↾ | upwards harpoon with barb rightwards | infix | 340 | 5 | 5 | stretchy |
| ↿ | ↿ | upwards harpoon with barb leftwards | infix | 340 | 5 | 5 | stretchy |
| ⇀ | ⇀ | rightwards harpoon with barb upwards | infix | 340 | 5 | 5 | stretchy |
| ⇁ | ⇁ | rightwards harpoon with barb downwards | infix | 340 | 5 | 5 | stretchy |
| ⇂ | ⇂ | downwards harpoon with barb rightwards | infix | 340 | 5 | 5 | stretchy |
| ⇃ | ⇃ | downwards harpoon with barb leftwards | infix | 340 | 5 | 5 | stretchy |
| ⇄ | ⇄ | rightwards arrow over leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⇅ | ⇅ | upwards arrow leftwards of downwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⇆ | ⇆ | leftwards arrow over rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⇇ | ⇇ | leftwards paired arrows | infix | 340 | 5 | 5 | stretchy |
| ⇈ | ⇈ | upwards paired arrows | infix | 340 | 5 | 5 | stretchy |
| ⇉ | ⇉ | rightwards paired arrows | infix | 340 | 5 | 5 | stretchy |
| ⇊ | ⇊ | downwards paired arrows | infix | 340 | 5 | 5 | stretchy |
| ⇋ | ⇋ | leftwards harpoon over rightwards harpoon | infix | 340 | 5 | 5 | stretchy |
| ⇌ | ⇌ | rightwards harpoon over leftwards harpoon | infix | 340 | 5 | 5 | stretchy |
| ⇍ | ⇍ | leftwards double arrow with stroke | infix | 340 | 5 | 5 | stretchy |
| ⇎ | ⇎ | left right double arrow with stroke | infix | 340 | 5 | 5 | stretchy |
| ⇏ | ⇏ | rightwards double arrow with stroke | infix | 340 | 5 | 5 | stretchy |
| ⇐ | ⇐ | leftwards double arrow | infix | 340 | 5 | 5 | stretchy |
| ⇑ | ⇑ | upwards double arrow | infix | 340 | 5 | 5 | stretchy |
| ⇒ | ⇒ | rightwards double arrow | infix | 340 | 5 | 5 | stretchy |
| ⇓ | ⇓ | downwards double arrow | infix | 340 | 5 | 5 | stretchy |
| ⇔ | ⇔ | left right double arrow | infix | 340 | 5 | 5 | stretchy |
| ⇕ | ⇕ | up down double arrow | infix | 340 | 5 | 5 | stretchy |
| ⇖ | ⇖ | north west double arrow | infix | 340 | 5 | 5 | |
| ⇗ | ⇗ | north east double arrow | infix | 340 | 5 | 5 | |
| ⇘ | ⇘ | south east double arrow | infix | 340 | 5 | 5 | |
| ⇙ | ⇙ | south west double arrow | infix | 340 | 5 | 5 | |
| ⇚ | ⇚ | leftwards triple arrow | infix | 340 | 5 | 5 | stretchy |
| ⇛ | ⇛ | rightwards triple arrow | infix | 340 | 5 | 5 | stretchy |
| ⇜ | ⇜ | leftwards squiggle arrow | infix | 340 | 5 | 5 | stretchy |
| ⇝ | ⇝ | rightwards squiggle arrow | infix | 340 | 5 | 5 | stretchy |
| ⇞ | ⇞ | upwards arrow with double stroke | infix | 340 | 5 | 5 | stretchy |
| ⇟ | ⇟ | downwards arrow with double stroke | infix | 340 | 5 | 5 | stretchy |
| ⇠ | ⇠ | leftwards dashed arrow | infix | 340 | 5 | 5 | stretchy |
| ⇡ | ⇡ | upwards dashed arrow | infix | 340 | 5 | 5 | stretchy |
| ⇢ | ⇢ | rightwards dashed arrow | infix | 340 | 5 | 5 | stretchy |
| ⇣ | ⇣ | downwards dashed arrow | infix | 340 | 5 | 5 | stretchy |
| ⇤ | ⇤ | leftwards arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ⇥ | ⇥ | rightwards arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ⇦ | ⇦ | leftwards white arrow | infix | 340 | 5 | 5 | stretchy |
| ⇧ | ⇧ | upwards white arrow | infix | 340 | 5 | 5 | stretchy |
| ⇨ | ⇨ | rightwards white arrow | infix | 340 | 5 | 5 | stretchy |
| ⇩ | ⇩ | downwards white arrow | infix | 340 | 5 | 5 | stretchy |
| ⇪ | ⇪ | upwards white arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⇫ | ⇫ | upwards white arrow on pedestal | infix | 340 | 5 | 5 | stretchy |
| ⇬ | ⇬ | upwards white arrow on pedestal with horizontal bar | infix | 340 | 5 | 5 | stretchy |
| ⇭ | ⇭ | upwards white arrow on pedestal with vertical bar | infix | 340 | 5 | 5 | stretchy |
| ⇮ | ⇮ | upwards white double arrow | infix | 340 | 5 | 5 | stretchy |
| ⇯ | ⇯ | upwards white double arrow on pedestal | infix | 340 | 5 | 5 | stretchy |
| ⇰ | ⇰ | rightwards white arrow from wall | infix | 340 | 5 | 5 | stretchy |
| ⇱ | ⇱ | north west arrow to corner | infix | 340 | 5 | 5 | |
| ⇲ | ⇲ | south east arrow to corner | infix | 340 | 5 | 5 | |
| ⇳ | ⇳ | up down white arrow | infix | 340 | 5 | 5 | stretchy |
| ⇴ | ⇴ | right arrow with small circle | infix | 340 | 5 | 5 | stretchy |
| ⇵ | ⇵ | downwards arrow leftwards of upwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⇶ | ⇶ | three rightwards arrows | infix | 340 | 5 | 5 | stretchy |
| ⇷ | ⇷ | leftwards arrow with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⇸ | ⇸ | rightwards arrow with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⇹ | ⇹ | left right arrow with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⇺ | ⇺ | leftwards arrow with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⇻ | ⇻ | rightwards arrow with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⇼ | ⇼ | left right arrow with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⇽ | ⇽ | leftwards open-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⇾ | ⇾ | rightwards open-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⇿ | ⇿ | left right open-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⌁ | ⌁ | electric arrow | infix | 340 | 5 | 5 | |
| ⍼ | ⍼ | right angle with downwards zigzag arrow | infix | 340 | 5 | 5 | |
| ⎋ | ⎋ | broken circle with northwest arrow | infix | 340 | 5 | 5 | |
| ➔ | ➔ | heavy wide-headed rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➘ | ➘ | heavy south east arrow | infix | 340 | 5 | 5 | |
| ➙ | ➙ | heavy rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➚ | ➚ | heavy north east arrow | infix | 340 | 5 | 5 | |
| ➛ | ➛ | drafting point rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➜ | ➜ | heavy round-tipped rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➝ | ➝ | triangle-headed rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➞ | ➞ | heavy triangle-headed rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➟ | ➟ | dashed triangle-headed rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➠ | ➠ | heavy dashed triangle-headed rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➡ | ➡ | black rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➥ | ➥ | heavy black curved downwards and rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➦ | ➦ | heavy black curved upwards and rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➧ | ➧ | squat black rightwards arrow | infix | 340 | 5 | 5 | |
| ➨ | ➨ | heavy concave-pointed black rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➩ | ➩ | right-shaded white rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➪ | ➪ | left-shaded white rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➫ | ➫ | back-tilted shadowed white rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➬ | ➬ | front-tilted shadowed white rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➭ | ➭ | heavy lower right-shadowed white rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➮ | ➮ | heavy upper right-shadowed white rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➯ | ➯ | notched lower right-shadowed white rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➱ | ➱ | notched upper right-shadowed white rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➲ | ➲ | circled heavy white rightwards arrow | infix | 340 | 5 | 5 | |
| ➳ | ➳ | white-feathered rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➴ | ➴ | black-feathered south east arrow | infix | 340 | 5 | 5 | |
| ➵ | ➵ | black-feathered rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➶ | ➶ | black-feathered north east arrow | infix | 340 | 5 | 5 | |
| ➷ | ➷ | heavy black-feathered south east arrow | infix | 340 | 5 | 5 | |
| ➸ | ➸ | heavy black-feathered rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➹ | ➹ | heavy black-feathered north east arrow | infix | 340 | 5 | 5 | |
| ➺ | ➺ | teardrop-barbed rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➻ | ➻ | heavy teardrop-shanked rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➼ | ➼ | wedge-tailed rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➽ | ➽ | heavy wedge-tailed rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ➾ | ➾ | open-outlined rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⟰ | ⟰ | upwards quadruple arrow | infix | 340 | 5 | 5 | stretchy |
| ⟱ | ⟱ | downwards quadruple arrow | infix | 340 | 5 | 5 | stretchy |
| ⟲ | ⟲ | anticlockwise gapped circle arrow | infix | 340 | 5 | 5 | |
| ⟳ | ⟳ | clockwise gapped circle arrow | infix | 340 | 5 | 5 | |
| ⟴ | ⟴ | right arrow with circled plus | infix | 340 | 5 | 5 | stretchy |
| ⟵ | ⟵ | long leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⟶ | ⟶ | long rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⟷ | ⟷ | long left right arrow | infix | 340 | 5 | 5 | stretchy |
| ⟸ | ⟸ | long leftwards double arrow | infix | 340 | 5 | 5 | stretchy |
| ⟹ | ⟹ | long rightwards double arrow | infix | 340 | 5 | 5 | stretchy |
| ⟺ | ⟺ | long left right double arrow | infix | 340 | 5 | 5 | stretchy |
| ⟻ | ⟻ | long leftwards arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⟼ | ⟼ | long rightwards arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⟽ | ⟽ | long leftwards double arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⟾ | ⟾ | long rightwards double arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⟿ | ⟿ | long rightwards squiggle arrow | infix | 340 | 5 | 5 | stretchy |
| ⤀ | ⤀ | rightwards two-headed arrow with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤁ | ⤁ | rightwards two-headed arrow with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤂ | ⤂ | leftwards double arrow with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤃ | ⤃ | rightwards double arrow with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤄ | ⤄ | left right double arrow with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤅ | ⤅ | rightwards two-headed arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⤆ | ⤆ | leftwards double arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⤇ | ⤇ | rightwards double arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⤈ | ⤈ | downwards arrow with horizontal stroke | infix | 340 | 5 | 5 | stretchy |
| ⤉ | ⤉ | upwards arrow with horizontal stroke | infix | 340 | 5 | 5 | stretchy |
| ⤊ | ⤊ | upwards triple arrow | infix | 340 | 5 | 5 | stretchy |
| ⤋ | ⤋ | downwards triple arrow | infix | 340 | 5 | 5 | stretchy |
| ⤌ | ⤌ | leftwards double dash arrow | infix | 340 | 5 | 5 | stretchy |
| ⤍ | ⤍ | rightwards double dash arrow | infix | 340 | 5 | 5 | stretchy |
| ⤎ | ⤎ | leftwards triple dash arrow | infix | 340 | 5 | 5 | stretchy |
| ⤏ | ⤏ | rightwards triple dash arrow | infix | 340 | 5 | 5 | stretchy |
| ⤐ | ⤐ | rightwards two-headed triple dash arrow | infix | 340 | 5 | 5 | stretchy |
| ⤑ | ⤑ | rightwards arrow with dotted stem | infix | 340 | 5 | 5 | stretchy |
| ⤒ | ⤒ | upwards arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ⤓ | ⤓ | downwards arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ⤔ | ⤔ | rightwards arrow with tail with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤕ | ⤕ | rightwards arrow with tail with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤖ | ⤖ | rightwards two-headed arrow with tail | infix | 340 | 5 | 5 | stretchy |
| ⤗ | ⤗ | rightwards two-headed arrow with tail with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤘ | ⤘ | rightwards two-headed arrow with tail with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⤙ | ⤙ | leftwards arrow-tail | infix | 340 | 5 | 5 | stretchy |
| ⤚ | ⤚ | rightwards arrow-tail | infix | 340 | 5 | 5 | stretchy |
| ⤛ | ⤛ | leftwards double arrow-tail | infix | 340 | 5 | 5 | stretchy |
| ⤜ | ⤜ | rightwards double arrow-tail | infix | 340 | 5 | 5 | stretchy |
| ⤝ | ⤝ | leftwards arrow to black diamond | infix | 340 | 5 | 5 | stretchy |
| ⤞ | ⤞ | rightwards arrow to black diamond | infix | 340 | 5 | 5 | stretchy |
| ⤟ | ⤟ | leftwards arrow from bar to black diamond | infix | 340 | 5 | 5 | stretchy |
| ⤠ | ⤠ | rightwards arrow from bar to black diamond | infix | 340 | 5 | 5 | stretchy |
| ⤡ | ⤡ | north west and south east arrow | infix | 340 | 5 | 5 | |
| ⤢ | ⤢ | north east and south west arrow | infix | 340 | 5 | 5 | |
| ⤣ | ⤣ | north west arrow with hook | infix | 340 | 5 | 5 | |
| ⤤ | ⤤ | north east arrow with hook | infix | 340 | 5 | 5 | |
| ⤥ | ⤥ | south east arrow with hook | infix | 340 | 5 | 5 | |
| ⤦ | ⤦ | south west arrow with hook | infix | 340 | 5 | 5 | |
| ⤧ | ⤧ | north west arrow and north east arrow | infix | 340 | 5 | 5 | |
| ⤨ | ⤨ | north east arrow and south east arrow | infix | 340 | 5 | 5 | |
| ⤩ | ⤩ | south east arrow and south west arrow | infix | 340 | 5 | 5 | |
| ⤪ | ⤪ | south west arrow and north west arrow | infix | 340 | 5 | 5 | |
| ⤫ | ⤫ | rising diagonal crossing falling diagonal | infix | 340 | 5 | 5 | |
| ⤬ | ⤬ | falling diagonal crossing rising diagonal | infix | 340 | 5 | 5 | |
| ⤭ | ⤭ | south east arrow crossing north east arrow | infix | 340 | 5 | 5 | |
| ⤮ | ⤮ | north east arrow crossing south east arrow | infix | 340 | 5 | 5 | |
| ⤯ | ⤯ | falling diagonal crossing north east arrow | infix | 340 | 5 | 5 | |
| ⤰ | ⤰ | rising diagonal crossing south east arrow | infix | 340 | 5 | 5 | |
| ⤱ | ⤱ | north east arrow crossing north west arrow | infix | 340 | 5 | 5 | |
| ⤲ | ⤲ | north west arrow crossing north east arrow | infix | 340 | 5 | 5 | |
| ⤳ | ⤳ | wave arrow pointing directly right | infix | 340 | 5 | 5 | |
| ⤴ | ⤴ | arrow pointing rightwards then curving upwards | infix | 340 | 5 | 5 | stretchy |
| ⤵ | ⤵ | arrow pointing rightwards then curving downwards | infix | 340 | 5 | 5 | stretchy |
| ⤶ | ⤶ | arrow pointing downwards then curving leftwards | infix | 340 | 5 | 5 | stretchy |
| ⤷ | ⤷ | arrow pointing downwards then curving rightwards | infix | 340 | 5 | 5 | stretchy |
| ⤸ | ⤸ | right-side arc clockwise arrow | infix | 340 | 5 | 5 | |
| ⤹ | ⤹ | left-side arc anticlockwise arrow | infix | 340 | 5 | 5 | |
| ⤺ | ⤺ | top arc anticlockwise arrow | infix | 340 | 5 | 5 | |
| ⤻ | ⤻ | bottom arc anticlockwise arrow | infix | 340 | 5 | 5 | |
| ⤼ | ⤼ | top arc clockwise arrow with minus | infix | 340 | 5 | 5 | |
| ⤽ | ⤽ | top arc anticlockwise arrow with plus | infix | 340 | 5 | 5 | |
| ⤾ | ⤾ | lower right semicircular clockwise arrow | infix | 340 | 5 | 5 | |
| ⤿ | ⤿ | lower left semicircular anticlockwise arrow | infix | 340 | 5 | 5 | |
| ⥀ | ⥀ | anticlockwise closed circle arrow | infix | 340 | 5 | 5 | |
| ⥁ | ⥁ | clockwise closed circle arrow | infix | 340 | 5 | 5 | |
| ⥂ | ⥂ | rightwards arrow above short leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⥃ | ⥃ | leftwards arrow above short rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⥄ | ⥄ | short rightwards arrow above leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⥅ | ⥅ | rightwards arrow with plus below | infix | 340 | 5 | 5 | stretchy |
| ⥆ | ⥆ | leftwards arrow with plus below | infix | 340 | 5 | 5 | stretchy |
| ⥇ | ⥇ | rightwards arrow through x | infix | 340 | 5 | 5 | stretchy |
| ⥈ | ⥈ | left right arrow through small circle | infix | 340 | 5 | 5 | stretchy |
| ⥉ | ⥉ | upwards two-headed arrow from small circle | infix | 340 | 5 | 5 | stretchy |
| ⥊ | ⥊ | left barb up right barb down harpoon | infix | 340 | 5 | 5 | stretchy |
| ⥋ | ⥋ | left barb down right barb up harpoon | infix | 340 | 5 | 5 | stretchy |
| ⥌ | ⥌ | up barb right down barb left harpoon | infix | 340 | 5 | 5 | stretchy |
| ⥍ | ⥍ | up barb left down barb right harpoon | infix | 340 | 5 | 5 | stretchy |
| ⥎ | ⥎ | left barb up right barb up harpoon | infix | 340 | 5 | 5 | stretchy |
| ⥏ | ⥏ | up barb right down barb right harpoon | infix | 340 | 5 | 5 | stretchy |
| ⥐ | ⥐ | left barb down right barb down harpoon | infix | 340 | 5 | 5 | stretchy |
| ⥑ | ⥑ | up barb left down barb left harpoon | infix | 340 | 5 | 5 | stretchy |
| ⥒ | ⥒ | leftwards harpoon with barb up to bar | infix | 340 | 5 | 5 | stretchy |
| ⥓ | ⥓ | rightwards harpoon with barb up to bar | infix | 340 | 5 | 5 | stretchy |
| ⥔ | ⥔ | upwards harpoon with barb right to bar | infix | 340 | 5 | 5 | stretchy |
| ⥕ | ⥕ | downwards harpoon with barb right to bar | infix | 340 | 5 | 5 | stretchy |
| ⥖ | ⥖ | leftwards harpoon with barb down to bar | infix | 340 | 5 | 5 | stretchy |
| ⥗ | ⥗ | rightwards harpoon with barb down to bar | infix | 340 | 5 | 5 | stretchy |
| ⥘ | ⥘ | upwards harpoon with barb left to bar | infix | 340 | 5 | 5 | stretchy |
| ⥙ | ⥙ | downwards harpoon with barb left to bar | infix | 340 | 5 | 5 | stretchy |
| ⥚ | ⥚ | leftwards harpoon with barb up from bar | infix | 340 | 5 | 5 | stretchy |
| ⥛ | ⥛ | rightwards harpoon with barb up from bar | infix | 340 | 5 | 5 | stretchy |
| ⥜ | ⥜ | upwards harpoon with barb right from bar | infix | 340 | 5 | 5 | stretchy |
| ⥝ | ⥝ | downwards harpoon with barb right from bar | infix | 340 | 5 | 5 | stretchy |
| ⥞ | ⥞ | leftwards harpoon with barb down from bar | infix | 340 | 5 | 5 | stretchy |
| ⥟ | ⥟ | rightwards harpoon with barb down from bar | infix | 340 | 5 | 5 | stretchy |
| ⥠ | ⥠ | upwards harpoon with barb left from bar | infix | 340 | 5 | 5 | stretchy |
| ⥡ | ⥡ | downwards harpoon with barb left from bar | infix | 340 | 5 | 5 | stretchy |
| ⥢ | ⥢ | leftwards harpoon with barb up above leftwards harpoon with barb down | infix | 340 | 5 | 5 | stretchy |
| ⥣ | ⥣ | upwards harpoon with barb left beside upwards harpoon with barb right | infix | 340 | 5 | 5 | stretchy |
| ⥤ | ⥤ | rightwards harpoon with barb up above rightwards harpoon with barb down | infix | 340 | 5 | 5 | stretchy |
| ⥥ | ⥥ | downwards harpoon with barb left beside downwards harpoon with barb right | infix | 340 | 5 | 5 | stretchy |
| ⥦ | ⥦ | leftwards harpoon with barb up above rightwards harpoon with barb up | infix | 340 | 5 | 5 | stretchy |
| ⥧ | ⥧ | leftwards harpoon with barb down above rightwards harpoon with barb down | infix | 340 | 5 | 5 | stretchy |
| ⥨ | ⥨ | rightwards harpoon with barb up above leftwards harpoon with barb up | infix | 340 | 5 | 5 | stretchy |
| ⥩ | ⥩ | rightwards harpoon with barb down above leftwards harpoon with barb down | infix | 340 | 5 | 5 | stretchy |
| ⥪ | ⥪ | leftwards harpoon with barb up above long dash | infix | 340 | 5 | 5 | stretchy |
| ⥫ | ⥫ | leftwards harpoon with barb down below long dash | infix | 340 | 5 | 5 | stretchy |
| ⥬ | ⥬ | rightwards harpoon with barb up above long dash | infix | 340 | 5 | 5 | stretchy |
| ⥭ | ⥭ | rightwards harpoon with barb down below long dash | infix | 340 | 5 | 5 | stretchy |
| ⥮ | ⥮ | upwards harpoon with barb left beside downwards harpoon with barb right | infix | 340 | 5 | 5 | stretchy |
| ⥯ | ⥯ | downwards harpoon with barb left beside upwards harpoon with barb right | infix | 340 | 5 | 5 | stretchy |
| ⥰ | ⥰ | right double arrow with rounded head | infix | 340 | 5 | 5 | stretchy |
| ⥱ | ⥱ | equals sign above rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⥲ | ⥲ | tilde operator above rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⥳ | ⥳ | leftwards arrow above tilde operator | infix | 340 | 5 | 5 | stretchy |
| ⥴ | ⥴ | rightwards arrow above tilde operator | infix | 340 | 5 | 5 | stretchy |
| ⥵ | ⥵ | rightwards arrow above almost equal to | infix | 340 | 5 | 5 | stretchy |
| ⥼ | ⥼ | left fish tail | infix | 340 | 5 | 5 | stretchy |
| ⥽ | ⥽ | right fish tail | infix | 340 | 5 | 5 | stretchy |
| ⥾ | ⥾ | up fish tail | infix | 340 | 5 | 5 | stretchy |
| ⥿ | ⥿ | down fish tail | infix | 340 | 5 | 5 | stretchy |
| ⧟ | ⧟ | double-ended multimap | infix | 340 | 5 | 5 | |
| ⬀ | ⬀ | north east white arrow | infix | 340 | 5 | 5 | |
| ⬁ | ⬁ | north west white arrow | infix | 340 | 5 | 5 | |
| ⬂ | ⬂ | south east white arrow | infix | 340 | 5 | 5 | |
| ⬃ | ⬃ | south west white arrow | infix | 340 | 5 | 5 | |
| ⬄ | ⬄ | left right white arrow | infix | 340 | 5 | 5 | stretchy |
| ⬅ | ⬅ | leftwards black arrow | infix | 340 | 5 | 5 | stretchy |
| ⬆ | ⬆ | upwards black arrow | infix | 340 | 5 | 5 | stretchy |
| ⬇ | ⬇ | downwards black arrow | infix | 340 | 5 | 5 | stretchy |
| ⬈ | ⬈ | north east black arrow | infix | 340 | 5 | 5 | |
| ⬉ | ⬉ | north west black arrow | infix | 340 | 5 | 5 | |
| ⬊ | ⬊ | south east black arrow | infix | 340 | 5 | 5 | |
| ⬋ | ⬋ | south west black arrow | infix | 340 | 5 | 5 | |
| ⬌ | ⬌ | left right black arrow | infix | 340 | 5 | 5 | stretchy |
| ⬍ | ⬍ | up down black arrow | infix | 340 | 5 | 5 | stretchy |
| ⬎ | ⬎ | rightwards arrow with tip downwards | infix | 340 | 5 | 5 | stretchy |
| ⬏ | ⬏ | rightwards arrow with tip upwards | infix | 340 | 5 | 5 | stretchy |
| ⬐ | ⬐ | leftwards arrow with tip downwards | infix | 340 | 5 | 5 | stretchy |
| ⬑ | ⬑ | leftwards arrow with tip upwards | infix | 340 | 5 | 5 | stretchy |
| ⬰ | ⬰ | left arrow with small circle | infix | 340 | 5 | 5 | stretchy |
| ⬱ | ⬱ | three leftwards arrows | infix | 340 | 5 | 5 | stretchy |
| ⬲ | ⬲ | left arrow with circled plus | infix | 340 | 5 | 5 | stretchy |
| ⬳ | ⬳ | long leftwards squiggle arrow | infix | 340 | 5 | 5 | stretchy |
| ⬴ | ⬴ | leftwards two-headed arrow with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⬵ | ⬵ | leftwards two-headed arrow with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⬶ | ⬶ | leftwards two-headed arrow from bar | infix | 340 | 5 | 5 | stretchy |
| ⬷ | ⬷ | leftwards two-headed triple dash arrow | infix | 340 | 5 | 5 | stretchy |
| ⬸ | ⬸ | leftwards arrow with dotted stem | infix | 340 | 5 | 5 | stretchy |
| ⬹ | ⬹ | leftwards arrow with tail with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⬺ | ⬺ | leftwards arrow with tail with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⬻ | ⬻ | leftwards two-headed arrow with tail | infix | 340 | 5 | 5 | stretchy |
| ⬼ | ⬼ | leftwards two-headed arrow with tail with vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⬽ | ⬽ | leftwards two-headed arrow with tail with double vertical stroke | infix | 340 | 5 | 5 | stretchy |
| ⬾ | ⬾ | leftwards arrow through x | infix | 340 | 5 | 5 | stretchy |
| ⬿ | ⬿ | wave arrow pointing directly left | infix | 340 | 5 | 5 | |
| ⭀ | ⭀ | equals sign above leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⭁ | ⭁ | reverse tilde operator above leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⭂ | ⭂ | leftwards arrow above reverse almost equal to | infix | 340 | 5 | 5 | stretchy |
| ⭃ | ⭃ | rightwards arrow through greater-than | infix | 340 | 5 | 5 | stretchy |
| ⭄ | ⭄ | rightwards arrow through superset | infix | 340 | 5 | 5 | stretchy |
| ⭅ | ⭅ | leftwards quadruple arrow | infix | 340 | 5 | 5 | stretchy |
| ⭆ | ⭆ | rightwards quadruple arrow | infix | 340 | 5 | 5 | stretchy |
| ⭇ | ⭇ | reverse tilde operator above rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⭈ | ⭈ | rightwards arrow above reverse almost equal to | infix | 340 | 5 | 5 | stretchy |
| ⭉ | ⭉ | tilde operator above leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⭊ | ⭊ | leftwards arrow above almost equal to | infix | 340 | 5 | 5 | stretchy |
| ⭋ | ⭋ | leftwards arrow above reverse tilde operator | infix | 340 | 5 | 5 | stretchy |
| ⭌ | ⭌ | rightwards arrow above reverse tilde operator | infix | 340 | 5 | 5 | stretchy |
| ⭍ | ⭍ | downwards triangle-headed zigzag arrow | infix | 340 | 5 | 5 | |
| ⭎ | ⭎ | short slanted north arrow | infix | 340 | 5 | 5 | |
| ⭏ | ⭏ | short backslanted south arrow | infix | 340 | 5 | 5 | |
| ⭚ | ⭚ | slanted north arrow with hooked head | infix | 340 | 5 | 5 | |
| ⭛ | ⭛ | backslanted south arrow with hooked tail | infix | 340 | 5 | 5 | |
| ⭜ | ⭜ | slanted north arrow with horizontal tail | infix | 340 | 5 | 5 | |
| ⭝ | ⭝ | backslanted south arrow with horizontal tail | infix | 340 | 5 | 5 | |
| ⭞ | ⭞ | bent arrow pointing downwards then north east | infix | 340 | 5 | 5 | |
| ⭟ | ⭟ | short bent arrow pointing downwards then north east | infix | 340 | 5 | 5 | |
| ⭠ | ⭠ | leftwards triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭡ | ⭡ | upwards triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭢ | ⭢ | rightwards triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭣ | ⭣ | downwards triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭤ | ⭤ | left right triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭥ | ⭥ | up down triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭦ | ⭦ | north west triangle-headed arrow | infix | 340 | 5 | 5 | |
| ⭧ | ⭧ | north east triangle-headed arrow | infix | 340 | 5 | 5 | |
| ⭨ | ⭨ | south east triangle-headed arrow | infix | 340 | 5 | 5 | |
| ⭩ | ⭩ | south west triangle-headed arrow | infix | 340 | 5 | 5 | |
| ⭪ | ⭪ | leftwards triangle-headed dashed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭫ | ⭫ | upwards triangle-headed dashed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭬ | ⭬ | rightwards triangle-headed dashed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭭ | ⭭ | downwards triangle-headed dashed arrow | infix | 340 | 5 | 5 | stretchy |
| ⭮ | ⭮ | clockwise triangle-headed open circle arrow | infix | 340 | 5 | 5 | |
| ⭯ | ⭯ | anticlockwise triangle-headed open circle arrow | infix | 340 | 5 | 5 | |
| ⭰ | ⭰ | leftwards triangle-headed arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ⭱ | ⭱ | upwards triangle-headed arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ⭲ | ⭲ | rightwards triangle-headed arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ⭳ | ⭳ | downwards triangle-headed arrow to bar | infix | 340 | 5 | 5 | stretchy |
| ⭶ | ⭶ | north west triangle-headed arrow to bar | infix | 340 | 5 | 5 | |
| ⭷ | ⭷ | north east triangle-headed arrow to bar | infix | 340 | 5 | 5 | |
| ⭸ | ⭸ | south east triangle-headed arrow to bar | infix | 340 | 5 | 5 | |
| ⭹ | ⭹ | south west triangle-headed arrow to bar | infix | 340 | 5 | 5 | |
| ⭺ | ⭺ | leftwards triangle-headed arrow with double horizontal stroke | infix | 340 | 5 | 5 | stretchy |
| ⭻ | ⭻ | upwards triangle-headed arrow with double horizontal stroke | infix | 340 | 5 | 5 | stretchy |
| ⭼ | ⭼ | rightwards triangle-headed arrow with double horizontal stroke | infix | 340 | 5 | 5 | stretchy |
| ⭽ | ⭽ | downwards triangle-headed arrow with double horizontal stroke | infix | 340 | 5 | 5 | stretchy |
| ⮀ | ⮀ | leftwards triangle-headed arrow over rightwards triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⮁ | ⮁ | upwards triangle-headed arrow leftwards of downwards triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⮂ | ⮂ | rightwards triangle-headed arrow over leftwards triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⮃ | ⮃ | downwards triangle-headed arrow leftwards of upwards triangle-headed arrow | infix | 340 | 5 | 5 | stretchy |
| ⮄ | ⮄ | leftwards triangle-headed paired arrows | infix | 340 | 5 | 5 | stretchy |
| ⮅ | ⮅ | upwards triangle-headed paired arrows | infix | 340 | 5 | 5 | stretchy |
| ⮆ | ⮆ | rightwards triangle-headed paired arrows | infix | 340 | 5 | 5 | stretchy |
| ⮇ | ⮇ | downwards triangle-headed paired arrows | infix | 340 | 5 | 5 | stretchy |
| ⮈ | ⮈ | leftwards black circled white arrow | infix | 340 | 5 | 5 | |
| ⮉ | ⮉ | upwards black circled white arrow | infix | 340 | 5 | 5 | |
| ⮊ | ⮊ | rightwards black circled white arrow | infix | 340 | 5 | 5 | |
| ⮋ | ⮋ | downwards black circled white arrow | infix | 340 | 5 | 5 | |
| ⮌ | ⮌ | anticlockwise triangle-headed right u-shaped arrow | infix | 340 | 5 | 5 | |
| ⮍ | ⮍ | anticlockwise triangle-headed bottom u-shaped arrow | infix | 340 | 5 | 5 | |
| ⮎ | ⮎ | anticlockwise triangle-headed left u-shaped arrow | infix | 340 | 5 | 5 | |
| ⮏ | ⮏ | anticlockwise triangle-headed top u-shaped arrow | infix | 340 | 5 | 5 | |
| ⮔ | ⮔ | four corner arrows circling anticlockwise | infix | 340 | 5 | 5 | |
| ⮕ | ⮕ | rightwards black arrow | infix | 340 | 5 | 5 | stretchy |
| ⮠ | ⮠ | downwards triangle-headed arrow with long tip leftwards | infix | 340 | 5 | 5 | stretchy |
| ⮡ | ⮡ | downwards triangle-headed arrow with long tip rightwards | infix | 340 | 5 | 5 | stretchy |
| ⮢ | ⮢ | upwards triangle-headed arrow with long tip leftwards | infix | 340 | 5 | 5 | stretchy |
| ⮣ | ⮣ | upwards triangle-headed arrow with long tip rightwards | infix | 340 | 5 | 5 | stretchy |
| ⮤ | ⮤ | leftwards triangle-headed arrow with long tip upwards | infix | 340 | 5 | 5 | stretchy |
| ⮥ | ⮥ | rightwards triangle-headed arrow with long tip upwards | infix | 340 | 5 | 5 | stretchy |
| ⮦ | ⮦ | leftwards triangle-headed arrow with long tip downwards | infix | 340 | 5 | 5 | stretchy |
| ⮧ | ⮧ | rightwards triangle-headed arrow with long tip downwards | infix | 340 | 5 | 5 | stretchy |
| ⮨ | ⮨ | black curved downwards and leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⮩ | ⮩ | black curved downwards and rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⮪ | ⮪ | black curved upwards and leftwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⮫ | ⮫ | black curved upwards and rightwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⮬ | ⮬ | black curved leftwards and upwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⮭ | ⮭ | black curved rightwards and upwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⮮ | ⮮ | black curved leftwards and downwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⮯ | ⮯ | black curved rightwards and downwards arrow | infix | 340 | 5 | 5 | stretchy |
| ⮰ | ⮰ | ribbon arrow down left | infix | 340 | 5 | 5 | |
| ⮱ | ⮱ | ribbon arrow down right | infix | 340 | 5 | 5 | |
| ⮲ | ⮲ | ribbon arrow up left | infix | 340 | 5 | 5 | |
| ⮳ | ⮳ | ribbon arrow up right | infix | 340 | 5 | 5 | |
| ⮴ | ⮴ | ribbon arrow left up | infix | 340 | 5 | 5 | |
| ⮵ | ⮵ | ribbon arrow right up | infix | 340 | 5 | 5 | |
| ⮶ | ⮶ | ribbon arrow left down | infix | 340 | 5 | 5 | |
| ⮷ | ⮷ | ribbon arrow right down | infix | 340 | 5 | 5 | |
| ⮸ | ⮸ | upwards white arrow from bar with horizontal bar | infix | 340 | 5 | 5 | stretchy |
| ∪ | ∪ | union | infix | 360 | 4 | 4 | |
| ⊌ | ⊌ | multiset | infix | 360 | 4 | 4 | |
| ⊍ | ⊍ | multiset multiplication | infix | 360 | 4 | 4 | |
| ⊎ | ⊎ | multiset union | infix | 360 | 4 | 4 | |
| ⊔ | ⊔ | square cup | infix | 360 | 4 | 4 | |
| ⋓ | ⋓ | double union | infix | 360 | 4 | 4 | |
| ⩁ | ⩁ | union with minus sign | infix | 360 | 4 | 4 | |
| ⩂ | ⩂ | union with overbar | infix | 360 | 4 | 4 | |
| ⩅ | ⩅ | union with logical or | infix | 360 | 4 | 4 | |
| ⩊ | ⩊ | union beside and joined with union | infix | 360 | 4 | 4 | |
| ⩌ | ⩌ | closed union with serifs | infix | 360 | 4 | 4 | |
| ⩏ | ⩏ | double square union | infix | 360 | 4 | 4 | |
| ∩ | ∩ | intersection | infix | 380 | 4 | 4 | |
| ⊓ | ⊓ | square cap | infix | 380 | 4 | 4 | |
| ⋒ | ⋒ | double intersection | infix | 380 | 4 | 4 | |
| ⨟ | ⨟ | z notation schema composition | infix | 380 | 4 | 4 | |
| ⨠ | ⨠ | z notation schema piping | infix | 380 | 4 | 4 | |
| ⨡ | ⨡ | z notation schema projection | infix | 380 | 4 | 4 | |
| ⨾ | ⨾ | z notation relational composition | infix | 380 | 4 | 4 | |
| ⩀ | ⩀ | intersection with dot | infix | 380 | 4 | 4 | |
| ⩃ | ⩃ | intersection with overbar | infix | 380 | 4 | 4 | |
| ⩄ | ⩄ | intersection with logical and | infix | 380 | 4 | 4 | |
| ⩆ | ⩆ | union above intersection | infix | 380 | 4 | 4 | |
| ⩇ | ⩇ | intersection above union | infix | 380 | 4 | 4 | |
| ⩈ | ⩈ | union above bar above intersection | infix | 380 | 4 | 4 | |
| ⩉ | ⩉ | intersection above bar above union | infix | 380 | 4 | 4 | |
| ⩋ | ⩋ | intersection beside and joined with intersection | infix | 380 | 4 | 4 | |
| ⩍ | ⩍ | closed intersection with serifs | infix | 380 | 4 | 4 | |
| ⩎ | ⩎ | double square intersection | infix | 380 | 4 | 4 | |
| ⫛ | ⫛ | transversal intersection | infix | 380 | 4 | 4 | |
| + | + | plus sign | infix | 400 | 4 | 4 | |
| - | - | hyphen-minus | infix | 400 | 4 | 4 | |
| ± | ± | plus-minus sign | infix | 400 | 4 | 4 | |
| − | − | minus sign | infix | 400 | 4 | 4 | |
| ∓ | ∓ | minus-or-plus sign | infix | 400 | 4 | 4 | |
| ∔ | ∔ | dot plus | infix | 400 | 4 | 4 | |
| ∖ | ∖ | set minus | infix | 400 | 4 | 4 | |
| ∨ | ∨ | logical or | infix | 400 | 4 | 4 | |
| ∸ | ∸ | dot minus | infix | 400 | 4 | 4 | |
| ⊕ | ⊕ | circled plus | infix | 400 | 4 | 4 | |
| ⊖ | ⊖ | circled minus | infix | 400 | 4 | 4 | |
| ⊝ | ⊝ | circled dash | infix | 400 | 4 | 4 | |
| ⊞ | ⊞ | squared plus | infix | 400 | 4 | 4 | |
| ⊟ | ⊟ | squared minus | infix | 400 | 4 | 4 | |
| ⊽ | ⊽ | nor | infix | 400 | 4 | 4 | |
| ⋎ | ⋎ | curly logical or | infix | 400 | 4 | 4 | |
| ➕ | ➕ | heavy plus sign | infix | 400 | 4 | 4 | |
| ➖ | ➖ | heavy minus sign | infix | 400 | 4 | 4 | |
| ⦸ | ⦸ | circled reverse solidus | infix | 400 | 4 | 4 | |
| ⧅ | ⧅ | squared falling diagonal slash | infix | 400 | 4 | 4 | |
| ⧵ | ⧵ | reverse solidus operator | infix | 400 | 4 | 4 | |
| ⧷ | ⧷ | reverse solidus with horizontal stroke | infix | 400 | 4 | 4 | |
| ⧹ | ⧹ | big reverse solidus | infix | 400 | 4 | 4 | |
| ⧺ | ⧺ | double plus | infix | 400 | 4 | 4 | |
| ⧻ | ⧻ | triple plus | infix | 400 | 4 | 4 | |
| ⨢ | ⨢ | plus sign with small circle above | infix | 400 | 4 | 4 | |
| ⨣ | ⨣ | plus sign with circumflex accent above | infix | 400 | 4 | 4 | |
| ⨤ | ⨤ | plus sign with tilde above | infix | 400 | 4 | 4 | |
| ⨥ | ⨥ | plus sign with dot below | infix | 400 | 4 | 4 | |
| ⨦ | ⨦ | plus sign with tilde below | infix | 400 | 4 | 4 | |
| ⨧ | ⨧ | plus sign with subscript two | infix | 400 | 4 | 4 | |
| ⨨ | ⨨ | plus sign with black triangle | infix | 400 | 4 | 4 | |
| ⨩ | ⨩ | minus sign with comma above | infix | 400 | 4 | 4 | |
| ⨪ | ⨪ | minus sign with dot below | infix | 400 | 4 | 4 | |
| ⨫ | ⨫ | minus sign with falling dots | infix | 400 | 4 | 4 | |
| ⨬ | ⨬ | minus sign with rising dots | infix | 400 | 4 | 4 | |
| ⨭ | ⨭ | plus sign in left half circle | infix | 400 | 4 | 4 | |
| ⨮ | ⨮ | plus sign in right half circle | infix | 400 | 4 | 4 | |
| ⨹ | ⨹ | plus sign in triangle | infix | 400 | 4 | 4 | |
| ⨺ | ⨺ | minus sign in triangle | infix | 400 | 4 | 4 | |
| ⩒ | ⩒ | logical or with dot above | infix | 400 | 4 | 4 | |
| ⩔ | ⩔ | double logical or | infix | 400 | 4 | 4 | |
| ⩖ | ⩖ | two intersecting logical or | infix | 400 | 4 | 4 | |
| ⩗ | ⩗ | sloping large or | infix | 400 | 4 | 4 | |
| ⩛ | ⩛ | logical or with middle stem | infix | 400 | 4 | 4 | |
| ⩝ | ⩝ | logical or with horizontal dash | infix | 400 | 4 | 4 | |
| ⩡ | ⩡ | small vee with underbar | infix | 400 | 4 | 4 | |
| ⩢ | ⩢ | logical or with double overbar | infix | 400 | 4 | 4 | |
| ⩣ | ⩣ | logical or with double underbar | infix | 400 | 4 | 4 | |
| ⊻ | ⊻ | xor | infix | 420 | 4 | 4 | |
| ∑ | ∑ | n-ary summation | prefix | 440 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨊ | ⨊ | modulo two sum | prefix | 440 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨋ | ⨋ | summation with integral | prefix | 440 | 3 | 3 | largeop, symmetric |
| ⨝ | ⨝ | join | prefix | 440 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨞ | ⨞ | large left triangle operator | prefix | 440 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨁ | ⨁ | n-ary circled plus operator | prefix | 460 | 3 | 3 | largeop, movablelimits, symmetric |
| ∫ | ∫ | integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ∬ | ∬ | double integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ∭ | ∭ | triple integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ∮ | ∮ | contour integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ∯ | ∯ | surface integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ∰ | ∰ | volume integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ∱ | ∱ | clockwise integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ∲ | ∲ | clockwise contour integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ∳ | ∳ | anticlockwise contour integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨌ | ⨌ | quadruple integral operator | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨍ | ⨍ | finite part integral | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨎ | ⨎ | integral with double stroke | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨏ | ⨏ | integral average with slash | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨐ | ⨐ | circulation function | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨑ | ⨑ | anticlockwise integration | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨒ | ⨒ | line integration with rectangular path around pole | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨓ | ⨓ | line integration with semicircular path around pole | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨔ | ⨔ | line integration not including the pole | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨕ | ⨕ | integral around a point operator | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨖ | ⨖ | quaternion integral operator | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨗ | ⨗ | integral with leftwards arrow with hook | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨘ | ⨘ | integral with times sign | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨙ | ⨙ | integral with intersection | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨚ | ⨚ | integral with union | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨛ | ⨛ | integral with overbar | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⨜ | ⨜ | integral with underbar | prefix | 480 | 3 | 3 | largeop, symmetric |
| ⋃ | ⋃ | n-ary union | prefix | 500 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨃ | ⨃ | n-ary union operator with dot | prefix | 500 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨄ | ⨄ | n-ary union operator with plus | prefix | 500 | 3 | 3 | largeop, movablelimits, symmetric |
| ⋀ | ⋀ | n-ary logical and | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⋁ | ⋁ | n-ary logical or | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⋂ | ⋂ | n-ary intersection | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨀ | ⨀ | n-ary circled dot operator | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨂ | ⨂ | n-ary circled times operator | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨅ | ⨅ | n-ary square intersection operator | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨆ | ⨆ | n-ary square union operator | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨇ | ⨇ | two logical and operator | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨈ | ⨈ | two logical or operator | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⨉ | ⨉ | n-ary times operator | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⫼ | ⫼ | large triple vertical bar operator | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ⫿ | ⫿ | n-ary white vertical bar | prefix | 520 | 3 | 3 | largeop, movablelimits, symmetric |
| ∏ | ∏ | n-ary product | prefix | 540 | 3 | 3 | largeop, movablelimits, symmetric |
| ∐ | ∐ | n-ary coproduct | prefix | 540 | 3 | 3 | largeop, movablelimits, symmetric |
| @ | @ | commercial at | infix | 560 | 3 | 3 | |
| ∟ | ∟ | right angle | prefix | 580 | 0 | 0 | |
| ∠ | ∠ | angle | prefix | 580 | 0 | 0 | |
| ∡ | ∡ | measured angle | prefix | 580 | 0 | 0 | |
| ∢ | ∢ | spherical angle | prefix | 580 | 0 | 0 | |
| ⊾ | ⊾ | right angle with arc | prefix | 580 | 0 | 0 | |
| ⊿ | ⊿ | right triangle | prefix | 580 | 0 | 0 | |
| ⟀ | ⟀ | three dimensional angle | prefix | 580 | 0 | 0 | |
| ⦛ | ⦛ | measured angle opening left | prefix | 580 | 0 | 0 | |
| ⦜ | ⦜ | right angle variant with square | prefix | 580 | 0 | 0 | |
| ⦝ | ⦝ | measured right angle with dot | prefix | 580 | 0 | 0 | |
| ⦞ | ⦞ | angle with s inside | prefix | 580 | 0 | 0 | |
| ⦟ | ⦟ | acute angle | prefix | 580 | 0 | 0 | |
| ⦠ | ⦠ | spherical angle opening left | prefix | 580 | 0 | 0 | |
| ⦡ | ⦡ | spherical angle opening up | prefix | 580 | 0 | 0 | |
| ⦢ | ⦢ | turned angle | prefix | 580 | 0 | 0 | |
| ⦣ | ⦣ | reversed angle | prefix | 580 | 0 | 0 | |
| ⦤ | ⦤ | angle with underbar | prefix | 580 | 0 | 0 | |
| ⦥ | ⦥ | reversed angle with underbar | prefix | 580 | 0 | 0 | |
| ⦦ | ⦦ | oblique angle opening up | prefix | 580 | 0 | 0 | |
| ⦧ | ⦧ | oblique angle opening down | prefix | 580 | 0 | 0 | |
| ⦨ | ⦨ | measured angle with open arm ending in arrow pointing up and right | prefix | 580 | 0 | 0 | |
| ⦩ | ⦩ | measured angle with open arm ending in arrow pointing up and left | prefix | 580 | 0 | 0 | |
| ⦪ | ⦪ | measured angle with open arm ending in arrow pointing down and right | prefix | 580 | 0 | 0 | |
| ⦫ | ⦫ | measured angle with open arm ending in arrow pointing down and left | prefix | 580 | 0 | 0 | |
| ⦬ | ⦬ | measured angle with open arm ending in arrow pointing right and up | prefix | 580 | 0 | 0 | |
| ⦭ | ⦭ | measured angle with open arm ending in arrow pointing left and up | prefix | 580 | 0 | 0 | |
| ⦮ | ⦮ | measured angle with open arm ending in arrow pointing right and down | prefix | 580 | 0 | 0 | |
| ⦯ | ⦯ | measured angle with open arm ending in arrow pointing left and down | prefix | 580 | 0 | 0 | |
| && | && | multiple character operator: && | infix | 600 | 4 | 4 | |
| ∧ | ∧ | logical and | infix | 600 | 4 | 4 | |
| ⊼ | ⊼ | nand | infix | 600 | 4 | 4 | |
| ⋏ | ⋏ | curly logical and | infix | 600 | 4 | 4 | |
| ⩑ | ⩑ | logical and with dot above | infix | 600 | 4 | 4 | |
| ⩓ | ⩓ | double logical and | infix | 600 | 4 | 4 | |
| ⩕ | ⩕ | two intersecting logical and | infix | 600 | 4 | 4 | |
| ⩘ | ⩘ | sloping large and | infix | 600 | 4 | 4 | |
| ⩙ | ⩙ | logical or overlapping logical and | infix | 600 | 4 | 4 | |
| ⩚ | ⩚ | logical and with middle stem | infix | 600 | 4 | 4 | |
| ⩜ | ⩜ | logical and with horizontal dash | infix | 600 | 4 | 4 | |
| ⩞ | ⩞ | logical and with double overbar | infix | 600 | 4 | 4 | |
| ⩟ | ⩟ | logical and with underbar | infix | 600 | 4 | 4 | |
| ⩠ | ⩠ | logical and with double underbar | infix | 600 | 4 | 4 | |
| * | * | asterisk | infix | 620 | 3 | 3 | |
| . | . | full stop | infix | 620 | 3 | 3 | |
| · | · | middle dot | infix | 620 | 3 | 3 | |
| × | × | multiplication sign | infix | 620 | 3 | 3 | |
| • | • | bullet | infix | 620 | 3 | 3 | |
| ⁃ | ⁃ | hyphen bullet | infix | 620 | 3 | 3 | |
| ⁢ | | invisible times | infix | 620 | 0 | 0 | |
| ∗ | ∗ | asterisk operator | infix | 620 | 3 | 3 | |
| ∙ | ∙ | bullet operator | infix | 620 | 3 | 3 | |
| ≀ | ≀ | wreath product | infix | 620 | 3 | 3 | |
| ⊗ | ⊗ | circled times | infix | 620 | 3 | 3 | |
| ⊙ | ⊙ | circled dot operator | infix | 620 | 3 | 3 | |
| ⊛ | ⊛ | circled asterisk operator | infix | 620 | 3 | 3 | |
| ⊠ | ⊠ | squared times | infix | 620 | 3 | 3 | |
| ⊡ | ⊡ | squared dot operator | infix | 620 | 3 | 3 | |
| ⊺ | ⊺ | intercalate | infix | 620 | 3 | 3 | |
| ⋅ | ⋅ | dot operator | infix | 620 | 3 | 3 | |
| ⋆ | ⋆ | star operator | infix | 620 | 3 | 3 | |
| ⋇ | ⋇ | division times | infix | 620 | 3 | 3 | |
| ⋉ | ⋉ | left normal factor semidirect product | infix | 620 | 3 | 3 | |
| ⋊ | ⋊ | right normal factor semidirect product | infix | 620 | 3 | 3 | |
| ⋋ | ⋋ | left semidirect product | infix | 620 | 3 | 3 | |
| ⋌ | ⋌ | right semidirect product | infix | 620 | 3 | 3 | |
| ⌅ | ⌅ | projective | infix | 620 | 3 | 3 | |
| ⌆ | ⌆ | perspective | infix | 620 | 3 | 3 | |
| ⧆ | ⧆ | squared asterisk | infix | 620 | 3 | 3 | |
| ⧈ | ⧈ | squared square | infix | 620 | 3 | 3 | |
| ⧔ | ⧔ | times with left half black | infix | 620 | 3 | 3 | |
| ⧕ | ⧕ | times with right half black | infix | 620 | 3 | 3 | |
| ⧖ | ⧖ | white hourglass | infix | 620 | 3 | 3 | |
| ⧗ | ⧗ | black hourglass | infix | 620 | 3 | 3 | |
| ⧢ | ⧢ | shuffle product | infix | 620 | 3 | 3 | |
| ⨝ | ⨝ | join | infix | 620 | 3 | 3 | |
| ⨞ | ⨞ | large left triangle operator | infix | 620 | 3 | 3 | |
| ⨯ | ⨯ | vector or cross product | infix | 620 | 3 | 3 | |
| ⨰ | ⨰ | multiplication sign with dot above | infix | 620 | 3 | 3 | |
| ⨱ | ⨱ | multiplication sign with underbar | infix | 620 | 3 | 3 | |
| ⨲ | ⨲ | semidirect product with bottom closed | infix | 620 | 3 | 3 | |
| ⨳ | ⨳ | smash product | infix | 620 | 3 | 3 | |
| ⨴ | ⨴ | multiplication sign in left half circle | infix | 620 | 3 | 3 | |
| ⨵ | ⨵ | multiplication sign in right half circle | infix | 620 | 3 | 3 | |
| ⨶ | ⨶ | circled multiplication sign with circumflex accent | infix | 620 | 3 | 3 | |
| ⨷ | ⨷ | multiplication sign in double circle | infix | 620 | 3 | 3 | |
| ⨻ | ⨻ | multiplication sign in triangle | infix | 620 | 3 | 3 | |
| ⨼ | ⨼ | interior product | infix | 620 | 3 | 3 | |
| ⨽ | ⨽ | righthand interior product | infix | 620 | 3 | 3 | |
| ⨿ | ⨿ | amalgamation or coproduct | infix | 620 | 3 | 3 | |
| ⩐ | ⩐ | closed union with serifs and smash product | infix | 620 | 3 | 3 | |
| % | % | percent sign | infix | 640 | 3 | 3 | |
| \ | \ | reverse solidus | infix | 660 | 0 | 0 | |
| / | / | solidus | infix | 680 | 4 | 4 | |
| ÷ | ÷ | division sign | infix | 680 | 4 | 4 | |
| ⁄ | ⁄ | fraction slash | infix | 680 | 4 | 4 | |
| ∕ | ∕ | division slash | infix | 680 | 4 | 4 | |
| ∶ | ∶ | ratio | infix | 680 | 4 | 4 | |
| ⊘ | ⊘ | circled division slash | infix | 680 | 4 | 4 | |
| ➗ | ➗ | heavy division sign | infix | 680 | 4 | 4 | |
| ⟋ | ⟋ | mathematical rising diagonal | infix | 680 | 3 | 3 | |
| ⟍ | ⟍ | mathematical falling diagonal | infix | 680 | 3 | 3 | |
| ⦼ | ⦼ | circled anticlockwise-rotated division sign | infix | 680 | 4 | 4 | |
| ⧄ | ⧄ | squared rising diagonal slash | infix | 680 | 4 | 4 | |
| ⧶ | ⧶ | solidus with overbar | infix | 680 | 4 | 4 | |
| ⧸ | ⧸ | big solidus | infix | 680 | 4 | 4 | |
| ⨸ | ⨸ | circled division sign | infix | 680 | 4 | 4 | |
| ⫶ | ⫶ | triple colon operator | infix | 680 | 4 | 4 | |
| ⫻ | ⫻ | triple solidus binary relation | infix | 680 | 4 | 4 | |
| ⫽ | ⫽ | double solidus operator | infix | 680 | 4 | 4 | |
| ⫾ | ⫾ | white vertical bar | infix | 680 | 3 | 3 | |
| ⩤ | ⩤ | z notation domain antirestriction | infix | 700 | 3 | 3 | |
| ⩥ | ⩥ | z notation range antirestriction | infix | 700 | 3 | 3 | |
| + | + | plus sign | prefix | 720 | 0 | 0 | |
| - | - | hyphen-minus | prefix | 720 | 0 | 0 | |
| ± | ± | plus-minus sign | prefix | 720 | 0 | 0 | |
| ∁ | ∁ | complement | prefix | 720 | 0 | 0 | |
| ∆ | ∆ | increment | infix | 720 | 0 | 0 | |
| − | − | minus sign | prefix | 720 | 0 | 0 | |
| ∓ | ∓ | minus-or-plus sign | prefix | 720 | 0 | 0 | |
| ➕ | ➕ | heavy plus sign | prefix | 720 | 0 | 0 | |
| ➖ | ➖ | heavy minus sign | prefix | 720 | 0 | 0 | |
| ⫝̸ | ⫝̸ | forking | infix | 740 | 3 | 3 | |
| ⫝ | ⫝ | nonforking | infix | 740 | 3 | 3 | |
| ** | ** | multiple character operator: ** | infix | 760 | 3 | 3 | |
| ⅅ | ⅅ | double-struck italic capital d | prefix | 780 | 3 | 0 | |
| ⅆ | ⅆ | double-struck italic small d | prefix | 780 | 3 | 0 | |
| ∂ | ∂ | partial differential | prefix | 780 | 3 | 0 | |
| ∇ | ∇ | nabla | prefix | 780 | 0 | 0 | |
| <> | <> | multiple character operator: <> | infix | 800 | 3 | 3 | |
| ^ | ^ | circumflex accent | infix | 800 | 3 | 3 | |
| ! | ! | exclamation mark | postfix | 820 | 0 | 0 | |
| !! | !! | multiple character operator: !! | postfix | 820 | 0 | 0 | |
| % | % | percent sign | postfix | 820 | 0 | 0 | |
| ′ | ′ | prime | postfix | 820 | 0 | 0 | |
| ? | ? | question mark | infix | 840 | 3 | 3 | |
| √ | √ | square root | prefix | 860 | 3 | 0 | |
| ∛ | ∛ | cube root | prefix | 860 | 3 | 0 | |
| ∜ | ∜ | fourth root | prefix | 860 | 3 | 0 | |
| ⁡ | | function application | infix | 880 | 0 | 0 | |
| ∘ | ∘ | ring operator | infix | 900 | 3 | 3 | |
| ⊚ | ⊚ | circled ring operator | infix | 900 | 3 | 3 | |
| ⋄ | ⋄ | diamond operator | infix | 900 | 3 | 3 | |
| ⧇ | ⧇ | squared small circle | infix | 900 | 3 | 3 | |
| " | " | quotation mark | postfix | 920 | 0 | 0 | |
| & | & | ampersand | postfix | 920 | 0 | 0 | |
| ' | ' | apostrophe | postfix | 920 | 0 | 0 | |
| ++ | ++ | multiple character operator: ++ | postfix | 920 | 0 | 0 | |
| -- | -- | multiple character operator: -- | postfix | 920 | 0 | 0 | |
| ^ | ^ | circumflex accent | postfix | 920 | 0 | 0 | stretchy |
| _ | _ | low line | postfix | 920 | 0 | 0 | stretchy |
| ` | ` | grave accent | postfix | 920 | 0 | 0 | |
| ~ | ~ | tilde | postfix | 920 | 0 | 0 | stretchy |
| ¨ | ¨ | diaeresis | postfix | 920 | 0 | 0 | |
| ¯ | ¯ | macron | postfix | 920 | 0 | 0 | stretchy |
| ° | ° | degree sign | postfix | 920 | 0 | 0 | |
| ² | ² | superscript two | postfix | 920 | 0 | 0 | |
| ³ | ³ | superscript three | postfix | 920 | 0 | 0 | |
| ´ | ´ | acute accent | postfix | 920 | 0 | 0 | |
| ¸ | ¸ | cedilla | postfix | 920 | 0 | 0 | |
| ¹ | ¹ | superscript one | postfix | 920 | 0 | 0 | |
| ˆ | ˆ | modifier letter circumflex accent | postfix | 920 | 0 | 0 | stretchy |
| ˇ | ˇ | caron | postfix | 920 | 0 | 0 | stretchy |
| ˉ | ˉ | modifier letter macron | postfix | 920 | 0 | 0 | stretchy |
| ˊ | ˊ | modifier letter acute accent | postfix | 920 | 0 | 0 | |
| ˋ | ˋ | modifier letter grave accent | postfix | 920 | 0 | 0 | |
| ˍ | ˍ | modifier letter low macron | postfix | 920 | 0 | 0 | stretchy |
| ˘ | ˘ | breve | postfix | 920 | 0 | 0 | |
| ˙ | ˙ | dot above | postfix | 920 | 0 | 0 | |
| ˚ | ˚ | ring above | postfix | 920 | 0 | 0 | |
| ˜ | ˜ | small tilde | postfix | 920 | 0 | 0 | stretchy |
| ˝ | ˝ | double acute accent | postfix | 920 | 0 | 0 | |
| ˷ | ˷ | modifier letter low tilde | postfix | 920 | 0 | 0 | stretchy |
| ̂ | ̂ | combining circumflex accent | postfix | 920 | 0 | 0 | stretchy |
| ̑ | ̑ | combining inverted breve | postfix | 920 | 0 | 0 | |
| ‚ | ‚ | single low-9 quotation mark | postfix | 920 | 0 | 0 | |
| ‛ | ‛ | single high-reversed-9 quotation mark | postfix | 920 | 0 | 0 | |
| „ | „ | double low-9 quotation mark | postfix | 920 | 0 | 0 | |
| ‟ | ‟ | double high-reversed-9 quotation mark | postfix | 920 | 0 | 0 | |
| ″ | ″ | double prime | postfix | 920 | 0 | 0 | |
| ‴ | ‴ | triple prime | postfix | 920 | 0 | 0 | |
| ‵ | ‵ | reversed prime | postfix | 920 | 0 | 0 | |
| ‶ | ‶ | reversed double prime | postfix | 920 | 0 | 0 | |
| ‷ | ‷ | reversed triple prime | postfix | 920 | 0 | 0 | |
| ‾ | ‾ | overline | postfix | 920 | 0 | 0 | stretchy |
| ⁗ | ⁗ | quadruple prime | postfix | 920 | 0 | 0 | |
| ⁤ | | invisible plus | infix | 920 | 0 | 0 | |
| ⃛ | ⃛ | combining three dots above | postfix | 920 | 0 | 0 | |
| ⃜ | ⃜ | combining four dots above | postfix | 920 | 0 | 0 | |
| ⌢ | ⌢ | frown | postfix | 920 | 0 | 0 | stretchy |
| ⌣ | ⌣ | smile | postfix | 920 | 0 | 0 | stretchy |
| ⎴ | ⎴ | top square bracket | postfix | 920 | 0 | 0 | stretchy |
| ⎵ | ⎵ | bottom square bracket | postfix | 920 | 0 | 0 | stretchy |
| ⏍ | ⏍ | square foot | postfix | 920 | 0 | 0 | |
| ⏜ | ⏜ | top parenthesis | postfix | 920 | 0 | 0 | stretchy |
| ⏝ | ⏝ | bottom parenthesis | postfix | 920 | 0 | 0 | stretchy |
| ⏞ | ⏞ | top curly bracket | postfix | 920 | 0 | 0 | stretchy |
| ⏟ | ⏟ | bottom curly bracket | postfix | 920 | 0 | 0 | stretchy |
| ⏠ | ⏠ | top tortoise shell bracket | postfix | 920 | 0 | 0 | stretchy |
| ⏡ | ⏡ | bottom tortoise shell bracket | postfix | 920 | 0 | 0 | stretchy |
| 𞻰 | 𞻰 | arabic mathematical operator meem with hah with tatweel | postfix | 920 | 0 | 0 | stretchy |
| 𞻱 | 𞻱 | arabic mathematical operator hah with dal | postfix | 920 | 0 | 0 | stretchy |
| _ | _ | low line | infix | 940 | 0 | 0 |
오픈 웹 플랫폼의 필수 요소로서, W3C의 MathML 명세는 수학 표현을 웹에 통합할 때 그 기저의 구조적·의미적 정보를 다른 기술에 노출시킬 수 있는 전례 없는 잠재력을 가지고 있습니다. 이러한 정보 노출을 가능하게 하는 것은 접근성의 기초이며, 디지털 수학 콘텐츠를 기계가 읽을 수 있고 검색 가능하며 재사용 가능하게 만드는 경로를 제공합니다.
웹에서 접근 가능한 디지털 콘텐츠를 만드는 데 국제적으로 승인된 기준과 근간 원칙은 W3C의 웹 콘텐츠 접근성 지침[WCAG21]에서 확인할 수 있습니다. 이러한 원칙을 수학 정보를 포함하는 디지털 콘텐츠에 확장할 때, WCAG는 MathML이 사용되는 모든 곳에서 접근성을 정의하기 위한 유용한 틀을 제공합니다.
현재의 WCAG 지침은 MathML로 인코딩된 수학 콘텐츠가 장애가 있는 사용자에게 접근 가능하도록 보장하는 방법에 대해 직접적인 지침을 제공하지 않으므로, 본 명세서는 MathML을 포함하는 디지털 콘텐츠에 이러한 지침을 적용하는 방법을 정의합니다.
이 권고사항을 따르는 이점 중 하나는 디지털 수학 콘텐츠가 이미 전 세계적으로 웹 콘텐츠에 대해 널리 사용되는 접근성 요구 사항을 충족하도록 돕는다는 점입니다. 또한 디지털 수학 자료의 접근성을 보장하면 장애 유무에 관계없이 해당 콘텐츠의 독자층을 확대할 수 있습니다.
모범 사례에 대한 추가 지침은 시간이 지나면서 [MathML-Notes]에서 개발될 것입니다. 이 지침들을 노트로 분리해 두면 접근성 관행은 MathML 명세와 독립적으로 적응하고 진화할 수 있습니다. 노트는 MathML-Core와 전체 MathML 명세뿐만 아니라 과거·현재·미래의 MathML 버전에서도 사용되도록 의도되어 있습니다. 별도 문서 접근 방식은 MathML의 진화가 접근성 모범 사례를 고정시키지 않도록 하고, 콘텐츠 작성자가 최신 접근성 관행을 적용할 수 있게 합니다.
현대 수학의 많은 발전(즉, 르네상스 이후)은 초기 기호 표기의 발전에 의해 촉진되었다고 할 수 있으며, 이러한 표기는 오늘날에도 계속 진화하고 있습니다. 단순한 문해 텍스트로도 수학적 개념을 진술할 수 있지만, 기호 표기는 추상적 수학 구성물을 휴대 가능하고 사람이든 기계든 더 쉽게 소비·조작·이해할 수 있게 간결하게 표현하는 방법을 제공합니다. 수학 표기법 자체는 단순한 시각적 렌더링, 검사 및 조작을 넘어 저자의 기저 의미를 표현하려는 언어입니다. 이러한 수학 표기법의 특성은 수학 접근성과 직접적으로 연결됩니다.
접근성은 MathML 명세 초창기부터 의도적으로 고려되어 왔으며, 이는 1998년 MathML 1.0 명세에서 언급되었습니다. 이러한 이해는 웹 콘텐츠 접근성 지침의 첫 버전(WCAG 1.0, W3C 권고 1999-05-05)에도 반영되어 있으며, 그 내용에서는 체크포인트 3.1을 준수하기 위한 권장 기법으로 MathML 사용을 예로 들고 있습니다. 즉, "적절한 마크업 언어가 존재할 때는 이미지를 사용하기보다 마크업을 사용하라"는 권고에서 "수학 방정식을 마크업하기 위해 MathML을 사용하라"는 예시를 포함하고 있습니다. 또한 WCAG 1.0 지침 3 "마크업과 스타일 시트를 적절히 사용하라"의 논의에서 편집자들은 "특정 브라우저나 보조기술이 이를 올바르게 처리하지 못한다고 해서 적절한 마크업을 희생해서는 안 된다"고 경고한 바 있습니다. 원래 WCAG 권고가 발표된 지 20년이 지난 지금도 많은 콘텐츠 작성자들이 바로 이러한 이유로 MathML 채택을 늦추고 있는 현실과 씨름하고 있습니다. 그러나 MathML 4.0의 출판으로 접근성 커뮤니티는 웹에서 수학 접근성이 널리 확산될 미래에 대해 희망을 갖고 있습니다.
디지털 콘텐츠에서 MathML을 사용하면 다양한 접근성 사용 사례를 지원할 잠재력이 확장됩니다. 아래에서 이러한 사례들을 논의합니다.
청각 출력. 수학 표현에 대한 동적 텍스트-투-스피치 출력 기술은 MathML의 기원보다 앞서 존재해 왔으며, 이 사용 사례는 처음부터 MathML 명세를 형성하는 데 영향을 미쳤습니다. 단순히 음성 문자열을 생성하는 것을 넘어서, 2차원 시각 구조의 청각적 아날로그를 제공하기 위해 말의 음높이 변화와 같은 오디오 신호를 사용하는 것이 유용하다는 것이 밝혀졌습니다. 다른 오디오 응용으로는 이진 공간화(binaural spatialization), 귀콘(earcons), 스피어콘(spearcons)과 같은 다양한 오디오 단서들이 합성 음성으로 렌더링된 수학식을 해석하는 데 도움이 되는 것으로 사용되어 왔습니다. MathML은 이러한 기법들을 가능하게 하는 표현의 구조와 구문에 관한 견고한 정보를 제공합니다. 또한 MathML 인식 TTS 도구들이 사용하는 광범위한 자동 음성 규칙 세트를 생성할 수 있다는 점은, 수학 음성의 다양한 인간 언어(예: 국제화)와 다양한 말하기 스타일(예: ClearSpeak, MathSpeak, SimpleSpeak 등)로의 사실상 무한한 이식성을 제공합니다. 향후에는 교육 평가에서 더 제한적인 읽기를 적용해야 하거나, 유아용 교실에서 사용하는 말하기 스타일을 채택해야 하는 경우와 같이 더 많은 유형의 음성 규칙을 제공할 수도 있습니다.
브라유 출력. 수학 표현을 촉각으로 렌더링하는 브라유는 매우 중요한 사용 사례입니다. 시각장애인에게 수학을 청각으로만 해석하는 것은 가장 기본적인 표현을 제외하고는 인지적으로 부담이 큽니다. 또한 청각장애와 시각장애가 동시에 있는 사용자에게는 청각적 렌더링이 전혀 접근 불가능합니다. 전 세계적으로 Nemeth 브라유 코드, UEB 테크니컬, 독일 브라유 수학 코드, 프랑스 브라유 수학 코드 등 여러 수학 브라유 코드가 널리 사용됩니다. Liblouis와 같은 동적 수학 브라유 번역기는 웹페이지의 MathML 콘텐츠를 갱신 가능한 브라유 디스플레이를 통해 웹에 접근하는 개인들에게 번역하여 제공합니다. 따라서 동적 브라유 수학 콘텐츠를 제공하려면 MathML 사용이 필수적입니다.
기타 시각적 변환. 동기화된 하이라이트는 시각 사용자용 TTS에 흔히 추가되는 기능입니다. MathML은 표현의 기저 트리 구조를 파싱할 수 있게 해주므로, 표현의 개별 요소를 말하는 동안 시각적으로 하이라이트할 수 있습니다. 이는 TTS 사용자가 텍스트 읽기와 함께 집중 상태를 유지하도록 도와 이해도와 학습을 향상시킬 수 있습니다. 또한 TTS 없이 시각적으로 읽는 사람들에게도 캐럿 브라우징으로 웹 페이지를 탐색할 때 표현 내부의 시각적 하이라이트는 유용한 접근성 기능이 될 수 있으며, MathML은 이를 잠재적으로 지원할 수 있습니다.
청각 또는 난청 사용자 중 브라유를 사용할 수 없는 경우, MathML로 렌더링된 수학식은 시각적으로 표시되는 텍스트로 변환될 수 있습니다. 연구에 따르면 특히 학령기 아동 중 읽기장애가 있는 경우 수학 표현의 기호 표기를 이해하는 것이 문학 텍스트를 읽는 것보다 훨씬 더 어려운 것으로 나타났으므로, 이 기능을 제공하는 것은 해당 집단에 유용한 접근 기술이 될 수 있습니다.
또 다른 잠재적 접근성 보완책으로서 MathML은 자동 수화 아바타에 입력을 제공할 수 있는 가능성을 제공합니다. 미국 수화(ASL) 생성을 위한 자동 수화 아바타 기술은 이미 초등 수준의 수학에 적용된 바 있습니다add citation. 수화는 국가(때로는 지역)에 따라 다르고 단순한 '단어 대 수화' 번역이 아니며 자체 문법을 가지기 때문에, MathML로 표현의 기저 트리 구조에 접근할 수 있으면 정적 녹화된 인간 수화 영상 대신 디지털 문서로부터 동적으로 수화 표현을 생성할 수 있는 가능성을 제공합니다.
방정식 그래프 작성은 기저 수학 표현의 효과와 함의를 이해하는 데 도움이 되는 시각 출력을 생성하는 일반적 수단입니다. 이는 모든 사람에게 유용하지만 특히 인지 또는 학습 장애가 있는 사람들에게 더욱 효과적일 수 있습니다. 일부 동적 그래핑 도구(예: Desmos 및 MathTrax)는 단순한 시각적 선 추적을 넘어 음향 추적(예: 시각적 추적을 오디오로 구성하기 위해 음의 높낮이가 오르내리는 톤)과 시각 그래프에 대한 동적으로 생성된 텍스트 설명을 제공합니다. 디지털 콘텐츠에서 MathML을 사용하면 개발자가 웹사이트에 이러한 자동 접근 가능한 그래핑 유틸리티를 적용할 수 있는 잠재력이 열립니다.
사용자 에이전트(예: 웹 브라우저)는 MathML 표현의 트리 구조에 있는 정보를 활용하여 접근성을 극대화해야 합니다. 브라우저는 MathML을 DOM 트리의 내부 표현으로 처리해야 하며, 이 표현은 모든 마크업 요소와 속성을 나타내는 객체를 포함합니다. 일반적으로 사용자 에이전트는 플랫폼 접근성 서비스(예: 접근성 API)를 통해 접근성 정보를 노출하며, 이는 접근성 트리를 통해 보조기술 애플리케이션에 전달됩니다. 접근성 트리는 대부분의 MathML 요소에 대한 접근성 관련 정보를 포함해야 합니다. 브라우저는 DOM 트리에서 생성된 접근성 트리가 이 정보를 유지하도록 보장하여 접근성 API가 보조기술에서 이해할 수 있는 표현을 제공할 수 있게 해야 합니다. 다만 W3C의 User Agent Accessibility Guidelines Success Criterion 4.1.4에 따라, "사용자 에이전트 접근성 API가 하나 이상의 플랫폼 접근성 서비스에 충분한 정보를 제공하지 못하면 DOM이 보조기술에 프로그래밍 방식으로 제공되어야 한다"[UAAG20]는 요구를 충족해야 합니다.
대부분의 MathML 요소가 DOM 트리와 결과적인 접근성 트리의 노드가 되도록 보장함으로써, 사용자 에이전트는 표현 내에서 키보드 탐색을 위한 수학 노드를 노출할 수 있습니다. 이는 화살표 키로 탐색할 때 표현의 요소를 시각적으로 하이라이트하거나 개별 요소를 음성으로 읽어주는 능력과 같은 중요한 사용자 요구를 지원할 수 있습니다. 또한 갱신 가능한 브라유 디스플레이와 합성 음성을 함께 사용하는 것과 같은 동기식 탐색의 다른 형태를 지원할 수 있습니다.
접근성 트리가 주로 시각적 표시를 위해 사용되는 대부분의 DOM 노드 요소를 무시하는 것이 관행이긴 하지만, 수학 표현은 때로는 시각적 스타일링처럼 보이는 것을 통해 의미를
전달하며 이는 일부 보조기술 응용에 중요할 수 있다는 점을 지적하는 것이 중요합니다. 예를 들어, 접근성 트리에서 <mspace> 요소를 생략하면 브라유 디스플레이에서 유효한 수학 브라유 표현을 생성하는 능력에 영향을 미칩니다.
또한 MathML에서 색상이 mathcolor 및 mathbackground 속성으로 표현될 때, 이러한 속성이 의미를 전달하는 데 사용된다면 포함되어야 합니다.
alttext 속성은 표준 음성 규칙 처리를 재정의하는 데 사용될 수 있습니다(예: 표준화된 평가에서 종종 하는
방식). 그러나 이 방법에는 여러 제한이 있습니다. 예를 들어 표현의 전체 음성 텍스트를 태그 내에 제공해야 하므로 작성자가 작은 부분만 신경 쓰는 경우에도 전체 텍스트를
제공해야 합니다. 또한 alttext는 일반 텍스트로 제한되므로, 일시중지나 음높이 변경과 같은 음성 큐를 음성
엔진에 전달하기 위해 포함할 수 없습니다. 또한 alttext 속성은 MathML 트리와 직접적인 연결 고리가
없으므로 표현의 동기화된 하이라이팅을 처리할 방법이 없고, 사용자가 표현을 탐색할 방법도 제공되지 않습니다.
초기 초안인 MathML Accessibility API Mappings
1.0가 제공되어 있습니다. 이 명세서는 제품에서 MathML 접근성을 담당하는 사용자 에이전트 개발자를 위한 것입니다. 이 명세서의
목표는 각 보조기술이 기대하는 역할(role), 상태(state), 속성(property)을 포함한 MathML 콘텐츠를 받을 수 있도록 하여 MathML 콘텐츠의 접근성을
극대화하는 것입니다. ARIA 레이블과 aria-labeledby를 MathML에 배치하는 것은 브라유 생성 과정을 덮어쓸 수 있으므로 적절하지
않습니다.
비규범으로 표시된 섹션뿐만 아니라, 이 명세서의 모든 저작 지침, 도해, 예제 및 주석은 비규범적입니다. 이 명세서의 나머지 모든 부분은 규범적입니다.
문서에서의 핵심 단어 MAY, MUST, SHOULD, 및 SHOULD NOT은 모두 대문자로 표기될 때에만 BCP 14 [RFC2119] [RFC8174] 에서 설명된 대로 해석되어야 합니다.
오늘날 정보는 흔히 소프트웨어 도구에 의해 생성되고, 처리되며, 렌더링됩니다. 웹의 기하급수적 성장은 자동으로 정보를 검색하고, 범주화하며, 상호 연결하는 고급 시스템의 개발을 촉진하고 있습니다. 또한 기술 기반의 자료와 활동을 제공하는 웹 서비스의 수가 증가하고 있습니다. 따라서 MathML은 사람이 손으로 작성하고 읽을 수는 있지만, 기계 지원이 있든 집중해서 읽든, MathML의 미래는 대체로 소프트웨어 도구로 이를 처리할 수 있는 능력에 크게 연관됩니다.
MathML 처리기는 여러 종류가 있습니다: MathML 표현을 작성하기 위한 편집기, 다른 인코딩과 상호 변환하는 변환기, MathML 표현을 검사하는 유효성 검사기, MathML 표현을 평가·조작·비교하는 계산 엔진, 그리고 수학 표기법의 시각적·청각적·촉각적 표현을 생성하는 렌더링 엔진 등이 있습니다. MathML을 지원한다는 것이 의미하는 바는 애플리케이션마다 크게 다릅니다. 예를 들어, 유효성 검사 파서에서 발생하는 문제는 방정식 편집기에서 발생하는 문제와 매우 다릅니다.
이 섹션은 다양한 유형의 MathML 지원을 설명하고 특정 애플리케이션에서 MathML 지원의 범위를 명확히 하는 지침을 제공합니다. 개발자, 사용자 및 검토자는 제품을 특성화할 때 이 지침을 사용하는 것이 권장됩니다. 이러한 지침의 의도는 MathML 애플리케이션의 기능을 정량적으로 명확히 제시함으로써 재사용과 상호운용성을 촉진하는 것입니다.
W3C Math Working Group는 MathML 준수 지침(MathML Compliance Guidelines)을 유지합니다. 준수 활동 및 리소스에 대한 최신 정보는 이 문서를 참조하십시오.
유효한 MathML 표현은 MathML RelaxNG 스키마와 이 명세서에 주어진 추가 요구 사항에 의해 결정되는 XML 구성입니다.
“MathML 처리기”라는 표현은 유효한 MathML 표현을 수락하거나 생성할 수 있는 모든 애플리케이션을 의미하는 데 사용합니다. 유효한 MathML 표현을 모두 수락하고 생성하는 MathML 처리기는 MathML을 "라운드트립"할 수 있을지도 모릅니다. 가장 단순한 라운드트립 예는 수정 없이 새 파일로 쓰는 편집기일 수 있습니다.
세 가지 형태의 MathML 준수가 명시되어 있습니다:
MathML 입력 준수(MathML-input-conformant) 처리기는 모든 유효한 MathML 표현을 수락해야 합니다; 또한 모든 MathML 표현을 애플리케이션 특정 형태로 적절히 변환하여 네이티브 애플리케이션 연산을 수행할 수 있도록 해야 합니다.
MathML 출력 준수(MathML-output-conformant) 처리기는 모든 애플리케이션 특정 데이터를 적절히 표현하는 유효한 MathML을 생성해야 합니다.
MathML 라운드트립 준수(MathML-round-trip-conformant) 처리기는 MathML 동등성을 보존해야 합니다. 두 MathML 표현이 "동등"하다는 것은 오직 모든 관련 상황과 모든 MathML 처리기에서 두 표현이 동일한 해석( MathML 스키마와 명세서에 의해 규정된 바)을 가질 때에만 해당합니다. 요소 단위의 동등성은 문서의 다른 곳에서 논의됩니다.
위 정의를 넘어서, MathML 명세서는 개별 처리기에 대해 요구하지 않습니다. 개발자를 안내하기 위해 MathML 명세서에는 권고적인 자료가 포함되어 있습니다; 예를 들어 3. Presentation Markup 전반에 걸쳐 추천 렌더링 규칙이 많이 있습니다. 그러나 일반적으로 개발자는 자신의 특정 애플리케이션에 의미 있는 MathML 구현이 무엇인지 해석할 폭넓은 재량을 갖습니다.
준수와 의미 해석의 차이를 명확히 하기 위해 몇 가지 예를 들면:
MathML 입력 준수가 되려면, 유효성 검사 파서는 표현을 수락하고 유효한 MathML인 표현에 대해 "true"를 반환하면 됩니다. 특히, MathML 표현을 전혀 렌더링하거나 해석할 필요는 없습니다.
내용 마크업(content markup)을 기반으로 하는 수학 컴퓨터 대수 인터페이스는 모든 프레젠테이션 마크업을 무시하도록 선택할 수 있습니다. 인터페이스가 프레젠테이션 마크업을 포함한 모든 유효한 MathML 표현을 수락한다면, 기술적으로 해당 애플리케이션을 MathML 입력 준수로 특징지어도 올바릅니다.
어떤 방정식 편집기는 일부 방정식을 MathML로 쉽게 내보낼 수 있는 내부 데이터 표현을 가질 수 있지만 그렇지 않은 방정식도 있을 수 있습니다. 편집기가 단순한 방정식을 유효한 MathML로 내보내고, 변환 실패에 대해 단순히 오류 메시지를 표시한다면 기술적으로 MathML 출력 준수입니다.
앞선 예들이 보여주듯, 유용하려면 MathML 준수 개념은 언어의 어떤 부분이 의미 있게 구현되었는지에 대한 판단을 자주 수반합니다. 이는 준수 정의에 기술적으로 맞게 처리되는 부분과 의미 있게 구현된 부분을 구분할 메커니즘을 필요로 합니다. 이를 위해 W3C Math Working Group은 테스트 스위트를 제공했습니다.
테스트 스위트는 마크업 범주와 테스트되는 지배적 MathML 요소별로 분류된 많은 수의 MathML 표현으로 구성됩니다. 이 테스트 스위트의 존재는 예를 들어, 앞서 언급한 가상의 컴퓨터 대수 인터페이스가 테스트 스위트의 내용 마크업 섹션에 있는 모든 표현을 포함하여 MathML 내용 마크업을 의미 있게 구현함으로써 MathML 입력 준수 처리기임을 정량적으로 특성화할 수 있게 합니다.
MathML 명세서의 일부를 의미 있게 구현하지 않기로 선택한 개발자는 테스트 스위트의 특정 범주를 참조하여 누락한 부분을 항목화하는 것이 권장됩니다.
MathML 출력 준수 처리기를 위해 현재 사용 가능한 MathML을 검증하는 도구에 관한 정보는 W3C MathML Validator에 유지됩니다. MathML 출력 준수 처리기 개발자는 이 유효성 검사기를 사용하여 출력을 검증하는 것이 권장됩니다.
애플리케이션이 MathML 명세서의 어느 부분을 구현하는지에 대한 주장을 검증하고자 하는 MathML 애플리케이션의 고객은 의사결정 과정의 일부로 테스트 스위트를 사용하는 것이 권장됩니다.
MathML 4.0에는 이전 MathML 버전의 여러 기능이 더 이상 권장되지 않는 상태로 포함되어 있습니다. 다음 요점들은 기능이 더 이상 권장되지 않는다는 것이 무엇을 의미하는지 정의하고, 더 이상 권장되지 않는 기능과 현재 MathML 준수 간의 관계를 명확히 합니다.
MathML 출력 준수를 충족하려면, 저작 도구는 더 이상 권장되지 않는 기능을 포함하는 MathML 마크업을 생성해서는 안 됩니다.
MathML 입력 준수를 충족하려면, 렌더링 및 리딩 도구는 MathML 1.x 또는 MathML 2.x와의 준수를 위해 더 이상 권장되지 않는 기능을 지원해야 합니다. MathML 4.0과의 준수로 간주되기 위해 더 이상 권장되지 않는 기능을 지원할 필요는 없습니다. 그러나 모든 도구는 가능한 한 이러한 오래된 형태를 지원하는 것이 권장됩니다.
MathML 라운드트립 준수를 충족하려면, 처리기는 더 이상 권장되지 않는 기능을 포함하지 않는 표현에 대해서만 MathML 동등성을 보존하면 됩니다.
MathML 4.0은 세 가지 기본 확장 메커니즘을 정의합니다: mglyph 요소는 비유니코드 문자에 대한 글리프를 표시하거나
기존 유니코드 문자에 대한 글리프 변형을 제공하는 방법을 제공합니다; maction 요소는 구현-특정 매개변수를 얻기 위해 다른
네임스페이스의 속성을 사용합니다; 그리고 내용 마크업(content markup)은 definitionURL 속성과 콘텐츠
사전(Content Dictionaries) 및 cd 속성을 사용하여 수학적 의미의 외부 정의를 가리킵니다.
이러한 확장 메커니즘은 현재 명시적으로 규정된 MathML 4.0의 범위를 벗어나는 개념을 인코딩할 수 있는 방법을 제공하므로 중요합니다. 이는 표준화되기에는 아직 적합하지 않은
새로운 아이디어를 탐구하는 데 MathML을 사용할 수 있게 합니다. 그러나 새로운 아이디어가 정착되면 향후 표준의 일부가 될 수 있습니다. 예를 들어, 오늘날 mglyph 요소로 표현해야 하는 새 문자가 미래에 유니코드 코드 포인트를 할당받을 수 있습니다. 그때는 해당 문자를 유니코드 코드
포인트로 직접 표현하는 것이 더 바람직할 것입니다. 수학에 사용되는 수백 개의 문자에 대해 이미 이러한 유니코드로의 전환이 이루어졌습니다.
새로운 아이디어 논의를 용이하게 하기 위해 확장 메커니즘을 사용하는 것은 향후 구식이 될 가능성을 내포하므로, MathML은 확장 메커니즘의 사용에 대해 준수 요구를 합리적으로
부과할 수 없습니다. 예를 들어, 'x'를 나타내기 위해 mglyph 요소를 사용하는 것은 허용됩니다. 그러나 저자와 구현자는
가능한 경우 표준 마크업을 사용하는 것이 강력히 권장됩니다. 유사하게, MathML 4.0 확장 메커니즘을 사용하는 문서의 유지관리는 관련 표준 활동(예: Unicode,
OpenMath 등)을 모니터링하고 보다 표준화된 마크업이 가능해지면 문서를 업데이트하는 것이 권장됩니다.
MathML 입력 준수 애플리케이션이 불법적인 수의 속성이나 잘못된 유형의 자식 스키마를 가진 하나 이상의 요소를 포함하는 입력을 받을 경우에도, 이해할 수 있는 방식으로 모든 입력을
렌더링하려 시도해야 합니다. 즉, 유효했던 입력 부분은 정상적으로 렌더링하고, 잘못된 표현 대신에 오류 메시지(마치 merror 요소로 둘러싼 것처럼 렌더링됨)를 렌더링해야 합니다.
편집기 및 변환기와 같은 MathML 출력 준수 애플리케이션은 입력의 오류를 표시하기 위해 merror 표현을 생성하도록 선택할 수
있습니다. 이는 유효하지만 오류가 있을 수 있는 MathML을 생성하는 것보다 일반적으로 바람직합니다.
MathML 명세서에 설명된 MathML 속성은 적절한 프레젠테이션 및 내용 마크업을 허용하도록 의도되었습니다. 그러나 모든 사용자의 마크업 요구를 전부 포괄하는 것은 불가능합니다. 이상적으로는 MathML 속성이 확장 가능한 목록이어야 하여 사용자가 특정 렌더러를 위해 구체적인 속성을 추가할 수 있어야 합니다. 그러나 단일 XML DTD나 스키마의 제약 내에서는 이를 수행할 수 없습니다. 표준 DTD의 확장 등을 통해 할 수는 있지만, 일부 저자는 표준 DTD를 준수하면서도 렌더러-특정 기능을 활용하기 위해 비표준 속성을 사용하기를 원할 수 있습니다.
이를 허용하기 위해 MathML 1.0 명세서는 Mathematical Markup Language (MathML) 1.0
Specification에서 모든 요소에 대해 렌더러-특정 정보를 전달하는 훅으로 사용하기 위해 other 속성을 허용했습니다. 특히 이는 오디오 렌더러, 컴퓨터 대수 시스템, 향후 매크로/확장 메커니즘에서의 패턴 매칭을 위해
정보를 전달하는 훅으로 의도되었습니다. 이 접근 방식의 동기는 역사적이며, 예를 들어 PostScript에서는 주석이 PostScript의 일부가 아닌 정보를 전달하는 데 널리 사용되던
점을 참조한 것입니다.
MathML의 다음 진화 단계에서는 일반적인 XML 네임스페이스 메커니즘의 발전이 other
속성의 사용을 불필요하게 만든 것으로 보였습니다. MathML 2.0에서는 네임스페이스 접두사를 사용하여 비-MathML 속성을 식별하는 것을 선호하여 other 속성이 더 이상 권장되지 않음으로
표시되었습니다. other 속성은 MathML 4.0에서 제거되었지만, mathml4-legacy 스키마에서는 여전히 유효(정의된
동작 없음)합니다.
예를 들어, MathML 1.0에서는 maction 요소(3.7.1 Bind Action to
Sub-Expression)에 렌더러-특정 구현에서 추가 정보가 사용될 경우, 그 정보를 other 속성으로 전달하는
것이 권장되었습니다:
<maction actiontype="highlight" other="color='#ff0000'"> expression </maction>
MathML 4.0부터는 data-*
속성을 사용할 수 있습니다:
<body>
...
<maction actiontype="highlight" data-color="#ff0000"> expression </maction>
...
</body>
비표준 속성을 허용하는 목적은 소프트웨어 개발자가 MathML 마크업의 핵심 규약을 회피하기 위한 허점으로 남용하도록 장려하는 것이 아닙니다. 저자와 애플리케이션은 비표준 속성을 신중하게 사용해야 합니다.
웹 플랫폼의 MathML 구현은 [MathML-Core]을 구현해야 하며, 따라서 그곳에 명시된 프라이버시 고려사항이 적용됩니다.
웹 플랫폼의 MathML 구현은 [MathML-Core]을 구현해야 하며, 따라서 그곳에 명시된 보안 고려사항이 적용됩니다.
어떤 상황에서는 MathML 표현이 XML로 파싱될 수 있습니다. 이 경우 XML 파싱의 보안 고려사항이 적용되며, 이는 [RFC7303]에 설명되어 있습니다.
다음 표들은 콘텐츠 MathML 연산자 요소에 관한 주요 문법 정보를 요약합니다.
다음 표는 구성자 기호에 해당하는 컨테이너 요소들의 자식 요소 문법을 제공합니다. 세부사항과 예시는 4.3.1 Container Markup를 참조하십시오.
첫 번째 열의 요소 이름은 구성자를 설명하는 섹션에 대한 링크를 제공합니다.
내용 열은 구성자 내부에 포함될 수 있는 자식 요소들을 나타냅니다.
| 이름 | 내용 |
|---|---|
| set | ContExp* |
| list | ContExp* |
| vector | ContExp* |
| matrix | ContExp* |
| matrixrow | ContExp* |
| lambda | ContExp |
| interval | ContExp,ContExp |
| piecewise | piece*,
otherwise?
|
| piece | ContExp,ContExp |
| otherwise | ContExp |
다음 표는 특정 연산자 요소에 제공될 수 있는 속성들을 나열합니다. 추가로, 모든 연산자 요소는 CommonAtt 및 DefEncAtt 속성을 허용합니다.
첫 번째 열의 요소 이름은 연산자를 설명하는 섹션에 대한 링크를 제공합니다.
속성 열은 연산자 요소에 제공될 수 있는 속성의 이름을 지정합니다.
값 열은 해당 연산자 요소에 대해 속성에 제공될 수 있는 값들을 지정합니다.
| 이름 | 속성 | 값 |
|---|---|---|
| tendsto | type? |
string |
| interval | closure? |
open | closed |
open-closed | closed-open
|
| set | type? |
set | multiset |
text |
| list | order |
numeric | lexicographic |
첫 번째 열의 요소 이름은 연산자를 설명하는 섹션에 대한 링크를 제공합니다.
기호 열은 연산자를 인코딩하는 데 사용될 수 있는 csymbol의 목록을 제공하며, Strict Content MathML
Transformation Algorithm에서 사용되는 OpenMath 기호들에 대한 링크를 포함합니다.
클래스 열은 연산자 클래스(연산자가 기대하는 인수의 수를 나타내며, 4.3.4 Operator Classes에서 설명한 것처럼 Strict Content MathML로의 매핑을 결정할 수 있음)를 지정합니다.
한정자 열은 연산자가 허용하는 한정자 요소들을 나열합니다(컨테이너 요소의 경우 자식 요소로, 비어 있는 연산자 요소의 경우 다음 형제 요소로).
MathML은 콘텐츠 마크업에 의미를 할당하기 위해 이를 엄격한 콘텐츠 MathML로 매핑하는 방법을 정의합니다. 엄격한 MathML은 차례로 OpenMath과 일대일 대응 관계에 있으며, 본 방식으로 콘텐츠 MathML 표현들에서 얻어진 OpenMath 표현의 부분집합은 표준 OpenMath Content Dictionary 집합을 통해 잘 정의된 의미를 가집니다. 결과적으로 임의의 콘텐츠 MathML 표현을 동등한 엄격한 콘텐츠 MathML로 매핑하는 것은 콘텐츠 MathML의 의미를 뒷받침하는 데 중요한 역할을 합니다.
임의의 콘텐츠 MathML을 엄격한 콘텐츠 MathML로 매핑하는 과정은 알고리즘적으로 정의됩니다. 이 알고리즘은 비-엄격(non-Strict) 구성에 적용되는 일련의 재작성 규칙들의 모음으로 아래에 설명됩니다. 개별 재작성 변환은 다음 하위절들에서 설명됩니다. 이 절의 목표는 전체 알고리즘을 한 곳에 개요로 제시하는 것입니다.
알고리즘은 아홉 단계로 구성된 순서입니다. 각 단계는 더 이상 적용할 수 없을 때까지 입력에 대해 반복적으로 적용되어 재작성합니다. XSLT와 같은 많은 프로그래밍 언어에서는 자연스러운 구현이 아래에서 제시된 다중 패스 구현보다는 재귀 알고리즘이라는 점에 유의하십시오. XSL로의 변환은 직관적이며 동일한 최종 엄격 콘텐츠 MathML을 생성합니다. 그러나 다중 패스 알고리즘의 전체 구조가 더 명확하므로 여기에서는 그 방식으로 기술합니다.
임의의 콘텐츠 MathML 표현을 엄격한 콘텐츠 MathML로 변환하려면, 대상 구성의 모든 인스턴스가 제거될 때까지 다음 규칙들을 순서대로 입력 표현에 적용하십시오:
비-엄격한 bind를 재작성하고 더 이상 권장되지 않는 요소들을 제거:
바인딩 표현에서 외부 bind 태그가 한정자(qualifiers)를 가지거나 자식이 여러 개인 경우 이를 apply로 변경합니다. 이는 이후 규칙들이 비-엄격한 바인딩 표현에 대해 경우 구분 없이 적용될 수 있도록 알고리즘을
단순화합니다. 후속 규칙들이 이 단계에서 도입된 apply 요소들을 다시 bind 요소로 변경할 것임에 유의하십시오.
한정자의 관용적 사용에 대한 특수 사례 규칙 적용:
변수들의 바인딩 상태를 명시적으로 하기 위해 규칙 Rewrite: diff, Rewrite: nthdiff, 및 Rewrite: partialdiffdegree 규칙으로 도함수를 재작성합니다.
바운드 변수와 자유 변수의 상태 및 적분 범위의 방향(만약 lowlimit/uplimit 쌍으로 주어진 경우)을 모호하지 않게 하기 위해 규칙 Rewrite:
int, Rewrite: defint
및 Rewrite: defint limits로 적분을 재작성합니다.
규칙 Rewrite: tendsto 및 Rewrite: limits condition에 설명된 대로 극한을 재작성합니다.
규칙에 따라 합(sum)과 곱(product)을 재작성합니다: 4.3.5.2 N-ary Sum
<sum/> 및 4.3.5.3 N-ary Product
<product/>.
제곱근(roots)은 F.2.5 Roots에 설명된 대로 재작성합니다.
로그(logarithms)는 F.2.6 Logarithms에 설명된 대로 재작성합니다.
모멘트(moments)는 F.2.7 Moments에 설명된 대로 재작성합니다.
한정자들을 domainofapplication로 재작성:
이 규칙들은 bvar와 한정자를 사용하는 모든 apply 구성을 일반적인
domainofapplication 한정자만 사용하도록 재작성합니다.
구간(Intervals): interval 및 lowlimit/uplimit으로 주어진 한정자들을 Rewrite: interval qualifier 규칙을 통해 정수
구간으로 재작성합니다.
여러 개의 condition들: 여러 개의 condition 한정자는 그들의 논리적 합(conjunction)을 취하여 단일 condition으로 재작성합니다. 생성된 복합 condition은 이후 규칙 Rewrite:
condition에 따라 domainofapplication으로 재작성됩니다.
여러 개의 domainofapplication들: 여러 개의 domainofapplication 한정자는 지정된 도메인들의 교집합을 취하여 단일 한정자로 재작성합니다.
컨테이너 마크업 정규화:
규칙 Rewrite: n-ary setlist domainofapplication에 따라 집합(set)과 목록(list)을 재작성합니다.
구간(interval), 벡터(vectors), 행렬(matrices) 및 행렬 행(matrix rows)을 F.3.1
Intervals, 4.3.5.8 N-ary Matrix Constructors:
<vector/>,
<matrix/>,
<matrixrow/>에 설명된 대로 재작성합니다.
참고: 어떤 한정자든 이미 domainofapplication으로 재작성되어 있으며 6단계에서 추가로
재작성될 것입니다.
규칙 Rewrite: lambda 및 Rewrite: lambda domainofapplication에 따라 람다 표현을 재작성합니다.
조각함수(piecewise functions)는 4.3.10.5 Piecewise declaration <piecewise>, <piece>, <otherwise>에 설명된 대로 재작성합니다.
domainofapplication 한정자를 사용하는 연산자들에 대한 특수 사례 규칙 적용:
이 단계는 4.3 Content
MathML for
Specific Structures에서 도입된 연산자들에 대한 특수 사례를 다룹니다. 고려해야 할 특수 사례의 클래스는 다음과 같습니다:
min, max, mean 및 유사한 n-ary/단항 연산자들은 규칙 Rewrite: n-ary unary set, Rewrite:
n-ary unary domainofapplication
및 Rewrite: n-ary unary single에 따라
재작성합니다.
domainofapplication과 함께 사용된 한정자 양화사들(forall 및 exists)은 규칙 Rewrite: quantifier에 따라 함의(implication)와
합(conjunction)을 사용하는 표현으로 재작성합니다.
domainofapplication 요소와 함께 사용된 적분은(bvar 유무에 관계없이) 규칙 Rewrite: int 및
Rewrite: defint에 따라 재작성합니다.
domainofapplication 요소와 함께 사용된 합과 곱은(bvar 유무에 관계없이) 4.3.5.2 N-ary Sum
<sum/> 및 4.3.5.3 N-ary Product
<product/>에 설명된 대로 재작성합니다.
domainofapplication 제거: 이 단계에서는 어떠한 apply도 많아야 하나의 domainofapplication 자식을 가지며,
특수 사례들은 이미 처리되었습니다. domainofapplication은 엄격한 콘텐츠 MathML이 아니므로 다음과 같이
재작성됩니다.
apply가 bvar 자식을 포함하지 않는 경우에는 규칙 Rewrite: restriction에 따라 제한된 함수의 적용으로 재작성됩니다.
관계(relation)와 함께 사용된 경우에는 규칙 Rewrite: n-ary relations 및 Rewrite: n-ary relations bvar에 따라 predicate_on_list 기호의 적용으로 재작성됩니다.
일반적인 n-ary 연산자들에 대해서는 일반 규칙 Rewrite: n-ary domainofapplication에 따라 apply_to_list 기호를 사용하는 구성으로 재작성됩니다.
바운드 변수를 가진 apply의 경우에는 규칙 Rewrite:
apply bvar domainofapplication에 따라 suchthat 기호를 포함한 set1 콘텐츠 사전의 구성으로 재작성됩니다.
비-엄격 토큰 요소 재작성:
type 속성이 e-notation, rational,
complex-cartesian, complex-polar,
또는 constant인 cn 요소로 표현된
숫자들을 규칙 Rewrite: cn sep, Rewrite: cn based_integer
및 Rewrite: cn constant에 따라 엄격한 cn로 재작성합니다.
ci, csymbol 또는 프레젠테이션 MathML을 포함하는
cn을 프레젠테이션 MathML을 포함한 경우 규칙 Rewrite: cn presentation mathml
및 Rewrite: ci presentation mathml
그리고 csymbol에 대한 유사 규칙에 따라 semantics 요소로 재작성합니다.
연산자 재작성: 남아 있는 연산자들 중 4.3 Content MathML for
Specific Structures에 정의된 연산자들을 규칙 Rewrite: element에 따라 해당 구문 표에서 식별된
심볼을 참조하는 csymbol로 재작성합니다. 각 연산자 요소 설명에서 언급된 바와 같이, 일부는 올바른 심볼 선택을
결정하기 위해 특수 사례 규칙이 필요합니다. 특히 주목할 사례는 다음과 같습니다:
비-엄격 속성 재작성:
type 속성 재작성:
이 시점에서, type을 허용하는 모든 요소들(단, ci와 csymbol는 제외)은 이미 엄격한 콘텐츠
마크업의 등가물로 재작성되어 type 속성을 포함하지 않아야 하며, 타입 정보는 연산자 심볼의 선택에
반영되어야 합니다. 이제 남아 있는 ci 및 csymbol 요소들 중 type 속성을 가진 것들을 규칙
Rewrite: ci type annotation 및
Rewrite: csymbol type
annotation에 따라 semantics를 사용하는 엄격한 표현으로
재작성합니다.
definitionURL 및 encoding 속성
재작성:
csymbol 요소의 definitionURL 및
encoding 속성이 콘텐츠 사전 참조로 해석될 수 있다면(자세한 내용은 4.2.3.2
Non-Strict uses of <csymbol> 참조), 이를 대신
cd 속성으로 콘텐츠 사전을 참조하도록 재작성합니다.
속성 재작성: 엄격한 마크업에서 허용되지 않는 속성을 가진 모든 요소는 규칙 Rewrite:
attributes에 따라 이러한 속성들이 annotation 요소들로 포함된 semantics 구성으로 재작성됩니다. 첫 번째 자식은 이러한 속성이 제거된 요소입니다.
4.2.6 바인딩과
바운드 변수 <bind>
및 <bvar>에 설명된 바와 같이,
bind 요소의 엄격한 형태는 한정자(qualifiers)를 허용하지 않으며,
하나의 비-bvar 자식 요소만 허용합니다.
한정자가 있거나 여러 개의 비-bvar 자식 요소가 있는 바인딩
표현에서는 각 bind 태그를 apply로
대체하십시오.
이 단계는 이후의 규칙들이 비-엄격 바인딩 표현을 다룰 때,
bind 대신 apply를 사용하는
비-엄격 바인딩 표현에 대해 별도의 경우 구분 없이 적용될 수 있도록 합니다.
후속 규칙들은 이 단계에서 apply를 사용하도록 바뀐
비-엄격 바인딩 표현들을 다시 bind 요소를 사용하는
엄격한 바인딩 표현으로 되돌릴 것입니다.
한정자의 관용적 사용에 대해 특수 사례 규칙을 적용하십시오.
변수들의 바인딩 상태를 명확히 하기 위해 규칙 Rewrite: diff, Rewrite: nthdiff, 및 Rewrite: partialdiffdegree 을 사용하여 도함수를 재작성하십시오.
미분 연산자에 대해, 표현식의 경우 해당 변수가 실제로는 미분 연산자에 의해 바인드되지 않는다는 점을 인식하는 것이 중요합니다.
표현식을 변환합니다
<apply><diff/>
<bvar><ci>x</ci></bvar>
<ci>expression-in-x</ci>
</apply>
여기서
<ci>expression-in-x</ci>는 변수 x에 관한
표현식입니다.
<apply>
<apply><csymbol cd="calculus1">diff</csymbol>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<ci>E</ci>
</bind>
</apply>
<ci>x</ci>
</apply>
미분된 함수가 변수 x에 적용되어 엄격한 마크업에서 그 변수가 자유 변수임이 명시됩니다.
<apply><diff/>
<bvar><ci>x</ci></bvar>
<apply><sin/><ci>x</ci></apply>
</apply>
는 다음과 같습니다
<apply>
<apply><csymbol cd="calculus1">diff</csymbol>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<apply><csymbol cd="transc1">sin</csymbol><ci>x</ci></apply>
</bind>
</apply>
<ci>x</ci>
</apply>
bvar 요소가 degree 요소를 포함하면
nthdiff 심볼을 사용하십시오.
<apply><diff/>
<bvar><ci>x</ci><degree><ci>n</ci></degree></bvar>
<ci>expression-in-x</ci>
</apply>
여기서
<ci>expression-in-x</ci>는 변수 x를
포함하는 표현식이며,
이는 다음 표현으로 번역됩니다.
<apply>
<apply><csymbol cd="calculus1">nthdiff</csymbol>
<ci>n</ci>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<ci>expression-in-x</ci>
</bind>
</apply>
<ci>x</ci>
</apply>
예를 들어
<apply><diff/>
<bvar><degree><cn>2</cn></degree><ci>x</ci></bvar>
<apply><sin/><ci>x</ci></apply>
</apply>
엄격한 콘텐츠 MathML 등가물
<apply>
<apply><csymbol cd="calculus1">nthdiff</csymbol>
<cn>2</cn>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<apply><csymbol cd="transc1">sin</csymbol><ci>x</ci></apply>
</bind>
</apply>
<ci>x</ci>
</apply>
함수에 적용될 때 partialdiff 요소는
partialdiff 심볼에 해당하며,
두 인수가 그대로 partialdiff의
두 인수로 번역되므로 별도의 특수 규칙은 필요하지 않습니다.
partialdiff가 표현식과 bvar 한정자들과 함께 사용될 경우,
이는 partialdiffdegree 심볼을 사용하여
엄격한 콘텐츠 MathML로 재작성됩니다.
<apply><partialdiff/>
<bvar><ci>x1</ci><degree><ci>n1</ci></degree></bvar>
<bvar><ci>xk</ci><degree><ci>nk</ci></degree></bvar>
<degree><ci>total-n1-nk</ci></degree>
<ci>expression-in-x1-xk</ci>
</apply>
여기서 <ci>expression-in-x1-xk</ci>는 바운드 변수들을 포함하는 임의의
표현식입니다.
<apply>
<apply><csymbol cd="calculus1">partialdiffdegree</csymbol>
<apply><csymbol cd="list1">list</csymbol>
<ci>n1</ci> <ci>nk</ci>
</apply>
<ci>total-n1-nk</ci>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x1</ci></bvar>
<bvar><ci>xk</ci></bvar>
<ci>expression-in-x1-xk</ci>
</bind>
</apply>
<ci>x1</ci>
<ci>xk</ci>
</apply>
바운드 변수 중 일부가 degree 한정자를 사용하지 않는다면,
<cn>1</cn>을 degree 자리에 사용해야 합니다.
원래 표현식이 전체 차수(total degree) 한정자를 사용하지 않았다면
partialdiffdegree
의 두 번째 인수는 차수들의 합이 되어야 합니다. 예를 들어
<apply><csymbol cd="arith1">plus</csymbol>
<ci>n1</ci> <ci>nk</ci>
</apply>
이 규칙을 사용하면, 표현식
<apply><partialdiff/>
<bvar><ci>x</ci><degree><ci>n</ci></degree></bvar>
<bvar><ci>y</ci><degree><ci>m</ci></degree></bvar>
<apply><sin/>
<apply><times/><ci>x</ci><ci>y</ci></apply>
</apply>
</apply>
는 다음으로 번역됩니다
<apply>
<apply><csymbol cd="calculus1">partialdiffdegree</csymbol>
<apply><csymbol cd="list1">list</csymbol>
<ci>n</ci><ci>m</ci>
</apply>
<apply><csymbol cd="arith1">plus</csymbol>
<ci>n</ci><ci>m</ci>
</apply>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<bvar><ci>y</ci></bvar>
<apply><csymbol cd="transc1">sin</csymbol>
<apply><csymbol cd="arith1">times</csymbol>
<ci>x</ci><ci>y</ci>
</apply>
</apply>
</bind>
<ci>x</ci>
<ci>y</ci>
</apply>
</apply>
바인드 변수와 자유 변수의 상태 및 만약 lowlimit/uplimit
쌍으로 주어진 경우 적분 범위의 방향성을 명확히 하기 위해 규칙 Rewrite: int,
Rewrite: defint 및 Rewrite: defint limits
을 사용하여 적분을 재작성하십시오.
함수에 적용된 부정적분으로서 int 요소는
calculus1 콘텐츠 사전의
int 심볼에 해당합니다.
정적분으로서 함수에 적용될 경우에는 defint
심볼에 해당합니다.
바운드 변수가 없을 때는 부정적분을 엄격한 콘텐츠로 번역하는 것이 간단합니다. 바운드 변수가 있을 경우에는 다음 규칙을 사용하십시오.
부정적분을 변환합니다. 여기서
<ci>expression-in-x</ci>는 바운드 변수 <ci>x</ci>를 포함하는 임의의 표현식입니다.
<apply><int/>
<bvar><ci>x</ci></bvar>
<ci>expression-in-x</ci>
</apply>
다음 표현으로 변환됩니다
<apply>
<apply><csymbol cd="calculus1">int</csymbol>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<ci>expression-in-x</ci>
</bind>
</apply>
<ci>x</ci>
</apply>
원래 부정적분에서 x가 바운드되지 않았기 때문에, 적분된 함수가 변수 x에 적용되어 엄격한 콘텐츠 마크업 표현에서 명시적 자유 변수가 되도록 한다는 점에 유의하십시오.
예를 들어 표현식
<apply><int/>
<bvar><ci>x</ci></bvar>
<apply><cos/><ci>x</ci></apply>
</apply>
<apply>
<apply><csymbol cd="calculus1">int</csymbol>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<apply><cos/><ci>x</ci></apply>
</bind>
</apply>
<ci>x</ci>
</apply>
바운드 변수가 없는 정적분의 경우에도 번역은 간단합니다.
예를 들어 임의의 도메인 C 위에서 미분 형식 f의 적분은
<apply><int/>
<domainofapplication><ci>C</ci></domainofapplication>
<ci>f</ci>
</apply>
는 다음의 엄격한 콘텐츠 MathML과 동등합니다:
<apply><csymbol cd="calculus1">defint</csymbol><ci>C</ci><ci>f</ci></apply>
다만, 이후의 정적분 규칙들에서 적분 영역을 지정하기 위해 사용될 수 있는 다른 종류의 한정자들에 대한 번역에 관한 추가 설명을 참고하십시오.
바운드 변수가 있을 경우 일반적으로 상황이 더 복잡하므로 다음 규칙들을 사용합니다.
정적분을 번역합니다. 여기서
<ci>expression-in-x</ci>는 바운드 변수 <ci>x</ci>를 포함하는 임의의 표현식입니다.
<apply><int/>
<bvar><ci>x</ci></bvar>
<domainofapplication><ci>D</ci></domainofapplication>
<ci>expression-in-x</ci>
</apply>
는 다음 표현으로 변환됩니다
<apply><csymbol cd="calculus1">defint</csymbol>
<ci>D</ci>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<ci>expression-in-x</ci>
</bind>
</apply>
그러나 lowlimit/uplimit 쌍이 있는 정적분은
적분 범위가 방향성을 가진다는 직관을 내포하므로, 하한과 상한을 바꾸면 결과의 부호가 바뀝니다.
이를 위해 다음의 특수 변환 규칙을 사용하십시오:
<apply><int/>
<bvar><ci>x</ci></bvar>
<lowlimit><ci>a</ci></lowlimit>
<uplimit><ci>b</ci></uplimit>
<ci>expression-in-x</ci>
</apply>
여기서
<ci>expression-in-x</ci>는 변수 x에 관한
표현식이며,
이는 다음 표현으로 번역됩니다:
<apply><csymbol cd="calculus1">defint</csymbol>
<apply><csymbol cd="interval1">oriented_interval</csymbol>
<ci>a</ci> <ci>b</ci>
</apply>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<ci>expression-in-x</ci>
</bind>
</apply>
oriented_interval
심볼은 또한 적분 영역을 지정하기 위해 사용된 interval
한정자를 번역할 때 사용되며, 적분은 왼쪽 끝점에서 오른쪽 끝점으로 진행하는 것으로 가정합니다.
여러 적분 항목의 경우에는 유사하게 처리됩니다.
condition 한정자의 사용은 특별한 처리가 필요합니다.
특히 다변수 영역으로 확장할 때는 추가 바운드 변수를 사용하고
데카르트 곱에 해당하는 도메인을 사용하여 처리합니다. 예:
<bind><int/>
<bvar><ci>x</ci></bvar>
<bvar><ci>y</ci></bvar>
<condition>
<apply><and/>
<apply><leq/><cn>0</cn><ci>x</ci></apply>
<apply><leq/><ci>x</ci><cn>1</cn></apply>
<apply><leq/><cn>0</cn><ci>y</ci></apply>
<apply><leq/><ci>y</ci><cn>1</cn></apply>
</apply>
</condition>
<apply><times/>
<apply><power/><ci>x</ci><cn>2</cn></apply>
<apply><power/><ci>y</ci><cn>3</cn></apply>
</apply>
</bind>
엄격한 콘텐츠 MathML 등가물
<apply><csymbol cd="calculus1">defint</csymbol>
<apply><csymbol cd="set1">suchthat</csymbol>
<apply><csymbol cd="set1">cartesianproduct</csymbol>
<csymbol cd="setname1">R</csymbol>
<csymbol cd="setname1">R</csymbol>
</apply>
<apply><csymbol cd="logic1">and</csymbol>
<apply><csymbol cd="arith1">leq</csymbol><cn>0</cn><ci>x</ci></apply>
<apply><csymbol cd="arith1">leq</csymbol><ci>x</ci><cn>1</cn></apply>
<apply><csymbol cd="arith1">leq</csymbol><ci>y</ci><cn>0</cn></apply>
<apply><csymbol cd="arith1">leq</csymbol><ci>y</ci><cn>1</cn></apply>
</apply>
<bind><csymbol cd="fns11">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<bvar><ci>y</ci></bvar>
<apply><csymbol cd="arith1">times</csymbol>
<apply><csymbol cd="arith1">power</csymbol><ci>x</ci><cn>2</cn></apply>
<apply><csymbol cd="arith1">power</csymbol><ci>y</ci><cn>3</cn></apply>
</apply>
</bind>
</apply>
</apply>
극한은 규칙 Rewrite: tendsto 및 Rewrite: limits condition 을 사용하여 재작성하십시오.
tendsto를 사용하여 극한을 한정하는 사용법은
Rewrite: limits condition 규칙을 통해
해당 표현을 엄격한 콘텐츠 MathML로 작성함으로써 형식적으로 정의됩니다. 이 명세서는
tendsto의 다른 관용적 사용의 의미를 형식적으로 정의하지 않습니다.
이러한 경우를 엄격한 콘텐츠 MathML로 재작성할 때는 tendsto를
아래와 같이 주석이 달린 식별자(annotated identifier)로 재작성해야 합니다.
<tendsto/>
엄격한 콘텐츠 MathML 등가물
<semantics>
<ci>tendsto</ci>
<annotation-xml encoding="MathML-Content">
<tendsto/>
</annotation-xml>
</semantics>
<apply><limit/>
<bvar><ci>x</ci></bvar>
<condition>
<apply><tendsto/><ci>x</ci><cn>0</cn></apply>
</condition>
<ci>expression-in-x</ci>
</apply>
엄격한 콘텐츠 MathML 등가물
<apply><csymbol cd="limit1">limit</csymbol>
<cn>0</cn>
<csymbol cd="limit1">null</csymbol>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<ci>expression-in-x</ci>
</bind>
</apply>
여기서
<ci>expression-in-x</ci>는 바운드 변수를 포함하는 임의의 표현식이며,
null 심볼의 선택은
tendsto 요소의 type 속성에 따라
4.3.10.4 Limits에 설명된 대로
결정됩니다.
합과 곱은 4.3.5.2 N-ary Sum <sum/> 및 4.3.5.3 N-ary Product <product/>에 설명된 대로 재작성하십시오.
명시적 바운드 변수가 사용되지 않는 경우에는 한정자를 사용하는 표현을 재작성하는 일반 규칙 외에
합을 엄격한 콘텐츠로 재작성하기 위한 특수 규칙은 필요하지 않습니다. 그러나 바운드 변수가 사용될 때는,
바운드 변수들로 표현된 부분식을 함수로 바꾸기 위해 lambda 구성을 도입해야 합니다.
Content MathML
<apply><sum/>
<bvar><ci>i</ci></bvar>
<lowlimit><cn>0</cn></lowlimit>
<uplimit><cn>100</cn></uplimit>
<apply><power/><ci>x</ci><ci>i</ci></apply>
</apply>
엄격한 콘텐츠 MathML 등가물
<apply><csymbol cd="arith1">sum</csymbol>
<apply><csymbol cd="interval1">integer_interval</csymbol>
<cn>0</cn>
<cn>100</cn>
</apply>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>i</ci></bvar>
<apply><csymbol cd="arith1">power</csymbol><ci>x</ci><ci>i</ci></apply>
</bind>
</apply>
명시적 바운드 변수가 없는 경우에는 곱(product)을 재작성할 때도 합과 마찬가지로
특수 규칙이 필요하지 않습니다. 그러나 바운드 변수가 사용될 때에는
바운드 변수들로 표현된 부분식을 함수로 바꾸기 위해 lambda 구성을 도입해야 합니다.
Content MathML
<apply><product/>
<bvar><ci>i</ci></bvar>
<lowlimit><cn>0</cn></lowlimit>
<uplimit><cn>100</cn></uplimit>
<apply><power/><ci>x</ci><ci>i</ci></apply>
</apply>
엄격한 콘텐츠 MathML 등가물
<apply><csymbol cd="arith1">product</csymbol>
<apply><csymbol cd="interval1">integer_interval</csymbol>
<cn>0</cn>
<cn>100</cn>
</apply>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>i</ci></bvar>
<apply><csymbol cd="arith1">power</csymbol><ci>x</ci><ci>i</ci></apply>
</bind>
</apply>
F.2.5 Roots에 설명된 대로 근을 재작성하십시오.
엄격한 콘텐츠 마크업에서 root 심볼은 항상 두 개의 인수와 함께 사용되며, 두 번째 인수는 추출되는 근의 차수를 나타냅니다.
Content MathML
<apply><root/><ci>x</ci></apply>
엄격한 콘텐츠 MathML 등가물
<apply><csymbol cd="arith1">root</csymbol>
<ci>x</ci>
<cn type="integer">2</cn>
</apply>
Content MathML
<apply><root/>
<degree><ci type="integer">n</ci></degree>
<ci>a</ci>
</apply>
엄격한 콘텐츠 MathML 등가물
<apply><csymbol cd="arith1">root</csymbol>
<ci>a</ci>
<cn type="integer">n</cn>
</apply>
4.3.7.9 Logarithm <log/>
, <logbase>에 설명된 대로
로그를 재작성하십시오.
log을 엄격한 콘텐츠로 매핑할 때는, 첫 번째 인수가 기반(base)을 지정하고
두 번째 인수에 대한 로그를 반환하는 함수인 log
심볼을 사용합니다. logbase가 있으면 그것이 기반을 결정합니다.
그렇지 않으면 기본 기반 10을 엄격한 마크업에서 명시적으로 제공해야 합니다. 다음 예를 보십시오.
<apply><plus/>
<apply>
<log/>
<logbase><cn>2</cn></logbase>
<ci>x</ci>
</apply>
<apply>
<log/>
<ci>y</ci>
</apply>
</apply>
엄격한 콘텐츠 MathML 등가물:
<apply>
<csymbol cd="arith1">plus</csymbol>
<apply>
<csymbol cd="transc1">log</csymbol>
<cn>2</cn>
<ci>x</ci>
</apply>
<apply>
<csymbol cd="transc1">log</csymbol>
<cn>10</cn>
<ci>y</ci>
</apply>
</apply>
4.3.7.8 Moment <moment/>, <momentabout>에 설명된 대로
모멘트를 재작성하십시오.
엄격한 마크업으로 재작성할 때, moment
심볼은
s_data1 콘텐츠 사전의
심볼을 사용합니다. 만약 moment 요소가 분포(distribution)에 적용된다면
s_dist1 콘텐츠 사전의
moment 심볼을 사용해야 합니다.
두 연산자 모두 차수를 첫 번째 인수로, 점(point)을 두 번째 인수로, 그 다음으로 데이터 집합 또는 확률변수를 인수로 가집니다.
<apply><moment/>
<degree><cn>3</cn></degree>
<momentabout><ci>p</ci></momentabout>
<ci>X</ci>
</apply>
엄격한 콘텐츠 MathML 등가물
<apply><csymbol cd="s_dist1">moment</csymbol>
<cn>3</cn>
<ci>p</ci>
<ci>X</ci>
</apply>
한정자(qualifiers)를 domainofapplication으로 재작성합니다.
이 규칙들은 bvar와 한정자를 사용한 모든 apply 구성을
일반적인 domainofapplication 한정자만을 사용하는 형태로 재작성합니다.
interval 및 lowlimit/uplimit로 주어진 한정자들을
정수의 구간으로 재작성합니다. 자세한 내용은 Rewrite: interval
qualifier를 참조하십시오.
<apply><ci>H</ci>
<bvar><ci>x</ci></bvar>
<lowlimit><ci>a</ci></lowlimit>
<uplimit><ci>b</ci></uplimit>
<ci>C</ci>
</apply>
<apply><ci>H</ci>
<bvar><ci>x</ci></bvar>
<domainofapplication>
<apply><csymbol cd="interval1">interval</csymbol>
<ci>a</ci>
<ci>b</ci>
</apply>
</domainofapplication>
<ci>C</ci>
</apply>
이 변환에 사용되는 기호는 여기서 <ci>H</ci>로 표시된 응용의 머리(head)에 따라
달라집니다.
기본적으로 의미론적으로 더 특정한 구간 기호가 필요함을 나타내지 않는 한 interval을 사용해야 합니다.
특히 몇몇 미리 정의된 Content MathML 요소들은 더 구체적인 구간 기호와 함께 사용되어야 합니다.
머리가 int인 경우 oriented_interval이 사용됩니다.
머리 항(head term)이 sum 또는 product일 때는
integer_interval을 사용해야 합니다.
위의 lowlimit 및 uplimit 한정자를
domainofapplication 요소로 치환하는 기법은
interval 한정자를 치환할 때에도 사용됩니다.
interval은 bvar 바로 다음에 올 때에만 한정자로 해석된다는
점에 유의하십시오.
다른 문맥에서는 interval이 구성자(constructor)로 해석됩니다. 자세한 내용은
F.4.2 Intervals,
vectors, matrices를 참조하십시오.
여러 개의 condition 한정자들을 그들의 논리곱(conjunction)을 취하여 단일한 것으로 재작성합니다.
결과로 생긴 복합 condition은 규칙 Rewrite:
condition에 따라
domainofapplication으로 다시 작성됩니다.
condition 한정자는 더 큰 도메인에 대한 불리언 값 표현을 지정하여 바인드 변수(bound variable)를 제한합니다.
즉 특정 값이 제한된 도메인에 속하는지를 나타냅니다. condition 요소는 진리 조건을 나타내는 단일 자식을 포함합니다.
복합 조건은 and와 같은 불 연산자를 condition 내부에서 적용하여 형성됩니다.
condition 한정자를 사용한 표현식을 domainofapplication을 사용하는 표현식으로 재작성하려면,
<bvar><ci>x1</ci></bvar>
<bvar><ci>xn</ci></bvar>
<condition><ci>P</ci></condition>
다음과 같이 재작성됩니다
<bvar><ci>x1</ci></bvar>
<bvar><ci>xn</ci></bvar>
<domainofapplication>
<apply><csymbol cd="set1">suchthat</csymbol>
<ci>R</ci>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x1</ci></bvar>
<bvar><ci>xn</ci></bvar>
<ci>P</ci>
</bind>
</apply>
</domainofapplication>
만약 apply가 domainofapplication을 가지고 있다면
(원래 interval 또는 uplimit/lowlimit 쌍으로 표현되었을 수 있음),
그것이 <ci>R</ci>로 사용됩니다. 그렇지 않으면 <ci>R</ci>은
바운드 변수의 type 속성에 의해 결정되는 집합입니다(이것은 4.2.2.2 Non-Strict uses of <ci>에 지정된 바와 같습니다).
만약 타입이 명시되지 않았다면 변환은 콘텐츠 식별자 <ci>R</ci>를 통해 명시되지 않은 도메인을 도입합니다.
여러 개의 domainofapplication 한정자들을 지정된 도메인들의 교집합(intersection)을 취하여 단일한 것으로
재작성합니다.
집합(set)과 목록(list)은 규칙 Rewrite: n-ary setlist domainofapplication에 따라 재작성됩니다.
set과 list의 사용은 다른 n-항 생성자들과 동일한 형식을 따릅니다.
그러나 Strict Content MathML로 재작성할 때는 약간 다른 변형 규칙이 사용됩니다. 이는 map 기호가 필요한 집합이나 목록을 암묵적으로 구성하고,
apply_to_list가 이 경우 필요 없기
때문입니다.
이들 n-항 연산자를 나타내는 요소들은 스키마 패턴 nary-setlist-constructor.class에 지정되어
있습니다.
인수 목록이 명시적으로 주어지면 Rewrite: element 규칙이 적용됩니다.
한정자(qualifiers)를 사용하여 인수 목록을 지정하는 경우 다음 규칙이 사용됩니다.
다음 형태의 표현식에서, 여기서 <set/>는 set
또는 list 중 하나이고
<ci>expression-in-x</ci>는 바운드 변수들을 포함하는 임의의 표현식입니다.
<set>
<bvar><ci>x</ci></bvar>
<domainofapplication><ci>D</ci></domainofapplication>
<ci>expression-in-x</ci>
</set>
다음과 같이 재작성됩니다
<apply><csymbol cd="set1">map</csymbol>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<ci>expression-in-x</ci>
</bind>
<ci>D</ci>
</apply>
주의: <ci>D</ci>가 이미 해당 컨테이너 요소에 적합한 유형의 집합(set) 또는
목록(list)이고,
<ci>expression-in-x</ci>로부터 생성된 람다 함수가 항등
함수(identity)인 경우,
전체 컨테이너 요소는 직접적으로 <ci>D</ci>로 재작성되어야 합니다.
set의 경우, 사용할 Content Dictionary 및 기호는 인수들의 type 속성 값에 따라 달라집니다.
기본적으로 set 기호가 사용되지만,
인수들 중 하나가 type 속성으로 multiset를 가지면
multiset 기호가 사용됩니다.
만약 type 속성 값이 set나 multiset이 아닌 경우,
set 기호를 사용해야 하며, 인수들은 Rewrite: attributes 규칙을 사용해 그들의 타입으로
주석(annotation)되어야 합니다.
interval, 벡터, 행렬(matrix) 및 행(row)을 다음 기준에 따라 재작성합니다: F.3.1 Intervals,
4.3.5.8 N-ary Matrix
Constructors:
<vector/>,
<matrix/>,
<matrixrow/> 참조.
모든 한정자들은 이미 domainofapplication으로 재작성되었을 것이며 이후 단계에서 추가로 재작성됩니다.
Strict 마크업에서 interval 요소는 interval1 콘텐츠 딕셔너리의 네 가지 기호 중 하나에 대응합니다.
만약 closure가 open이면 interval은
interval_oo에 대응합니다.
closed이면 interval_cc,
open-closed이면 interval_oc,
closed-open이면 interval_co에 각각 대응합니다.
람다 표현식은 규칙 Rewrite: lambda 및 Rewrite: lambda domainofapplication에 따라 재작성됩니다.
lambda 요소가 한정자(qualifiers)를 포함하지 않으면, 람다 표현식은 직접적으로 bind 표현으로 변환됩니다.
<lambda>
<bvar><ci>x1</ci></bvar><bvar><ci>xn</ci></bvar>
<ci>expression-in-x1-xn</ci>
</lambda>
다음의 Strict Content MathML로 재작성됩니다
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x1</ci></bvar><bvar><ci>xn</ci></bvar>
<ci>expression-in-x1-xn</ci>
</bind>
lambda 요소가 한정자를 포함하는 경우, 그 한정자는 domainofapplication으로 재작성될 수 있으며,
그런 다음 람다 표현식은 lambda로 구성된 함수
항(function term)으로 변환되고,
지정된 도메인으로 제한하기 위해 restriction을 사용하여 표현됩니다.
<lambda>
<bvar><ci>x1</ci></bvar><bvar><ci>xn</ci></bvar>
<domainofapplication><ci>D</ci></domainofapplication>
<ci>expression-in-x1-xn</ci>
</lambda>
다음의 Strict Content MathML로 재작성됩니다
<apply><csymbol cd="fns1">restriction</csymbol>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x1</ci></bvar><bvar><ci>xn</ci></bvar>
<ci>expression-in-x1-xn</ci>
</bind>
<ci>D</ci>
</apply>
구간별 함수는 4.3.10.5 Piecewise
declaration <piecewise>, <piece>, <otherwise>에 설명된 대로 재작성됩니다.
Strict Content MathML에서 컨테이너 요소 piecewise, piece 및 otherwise는 동일한 이름의 생성자 기호들을 가진
응용(application)으로 매핑됩니다(이들은 piece1 CD에
정의되어 있습니다).
이 세 요소(기호)가 함께 사용된다는 점을 제외하면 Strict 마크업으로의 매핑은 직관적입니다.
Content MathML
<piecewise>
<piece>
<cn>0</cn>
<apply><lt/><ci>x</ci><cn>0</cn></apply>
</piece>
<piece>
<cn>1</cn>
<apply><gt/><ci>x</ci><cn>1</cn></apply>
</piece>
<otherwise>
<ci>x</ci>
</otherwise>
</piecewise>
동등한 Strict Content MathML
<apply><csymbol cd="piece1">piecewise</csymbol>
<apply><csymbol cd="piece1">piece</csymbol>
<cn>0</cn>
<apply><csymbol cd="relation1">lt</csymbol><ci>x</ci><cn>0</cn></apply>
</apply>
<apply><csymbol cd="piece1">piece</csymbol>
<cn>1</cn>
<apply><csymbol cd="relation1">gt</csymbol><ci>x</ci><cn>1</cn></apply>
</apply>
<apply><csymbol cd="piece1">otherwise</csymbol>
<ci>x</ci>
</apply>
</apply>
domainofapplication 한정자를 사용하는 연산자들에 대한 특수 사례 규칙을 적용합니다.
이 단계는 4.3 Content MathML
for
Specific Structures에서 도입된 연산자들에 대한 특수 사례를 처리합니다. 고려해야 할 여러 클래스의 특수 사례가 있습니다.
min, max, mean
및 유사한 n-항/단항 연산자들은
규칙 Rewrite: n-ary unary set, Rewrite: n-ary unary
domainofapplication
및 Rewrite: n-ary unary single에 따라 재작성됩니다.
요소 <max/>가 0개 또는 2개 이상인 명시적 인수 목록
<ci>a1</ci><ci>a2</ci><ci>an</ci>에
적용될 때,
<apply><max/><ci>a1</ci><ci>a2</ci><ci>an</ci></apply>
이는 해당 요소의 문법 표에 명시된 기호 <csymbol cd="minmax1" name="max"/>의
단항 적용으로 번역됩니다.
인수 집합은 <csymbol cd="set1" name="set"/> 기호를 사용하여 구성됩니다.
<apply><csymbol cd="minmax1">max</csymbol>
<apply><csymbol cd="set1">set</csymbol>
<ci>a1</ci><ci>a2</ci><ci>an</ci>
</apply>
</apply>
모든 MathML n-항 연산자들처럼, 인수 목록은 한정자 요소들을 사용하여 암시적으로 지정될 수 있습니다. 이는 Strict Content MathML에서 다음 규칙으로 표현되며, Rewrite: n-ary domainofapplication과 유사하지만, 기호를 구성된 인수 집합에 직접 적용할 수 있고 apply_to_list를 사용할 필요가 없다는 점이 다릅니다.
다음 형태의 표현식에서, 여기서 <max/>는 해당 클래스의 임의의 요소이고
<ci>expression-in-x</ci>는 바운드 변수들을 포함하는 임의의 표현식입니다.
<apply><max/>
<bvar><ci>x</ci></bvar>
<domainofapplication><ci>D</ci></domainofapplication>
<ci>expression-in-x</ci>
</apply>
다음과 같이 재작성됩니다
<apply><csymbol cd="minmax1">max</csymbol>
<apply><csymbol cd="set1">map</csymbol>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<ci>expression-in-x</ci>
</bind>
<ci>D</ci>
</apply>
</apply>
주의: <ci>D</ci>가 이미 집합이며 <ci>expression-in-x</ci>로부터 생성된 람다 함수가 항등일 경우,
domainofapplication 용어는 직접적으로 <ci>D</ci>로 재작성되어야 합니다.
요소가 단일 인수에 적용된 경우에는 set 기호를 사용하지 않고 기호를 인수에 직접 적용합니다.
요소 <max/>가 단일 인수에 적용될 때,
<apply><max/><ci>a</ci></apply>
이는 해당 요소의 문법 표에 명시된 기호의 단항 적용으로 번역됩니다.
<apply><csymbol cd="minmax1">max</csymbol> <ci>a</ci> </apply>
참고: 이전 버전의 MathML은 이 클래스 요소들의 정확한 해석에 대해 명확하지 않았으며, 예를 들어 max(X) 같은 표현이 단일 요소에 대한 자명한 적용인지 아니면 집합 X의 값들에 대한 최대인지를 의미하는지 정의하지 않았습니다. 이 규칙 Rewrite: n-ary unary single이 적용될 수 없는 경우(제공된 인수가 스칼라인 경우) 오류 복구로서 Rewrite: n-ary unary set 규칙을 사용하는 것이 권장될 수 있습니다. 추가로 통계 함수의 경우 인수의 해석(명시적 데이터의 집합인지 분포를 나타내는 확률 변수인지)에 따라 사용할 콘텐츠 딕셔너리가 달라질 수 있습니다.
forall 및 exists 양화사가 domainofapplication과 함께 사용될 때,
규칙 Rewrite:
quantifier에 따라 함의(imlication)와 논리곱(conjunction)을 사용하는 표현식으로 재작성됩니다.
bind와 함께 한정자 없이 사용될 경우 Strict Content MathML에서의 해석은 단순합니다. 일반적으로
apply나 한정자들과 함께 사용될 때 Strict Content MathML에서의 해석은 다음 규칙을 통해 표현됩니다.
다음 형태의 표현식에서, 여기서 <exists/>는 quantifier 클래스의
요소를 나타내고
<ci>expression-in-x</ci>는 바운드 변수들을 포함하는 임의의 표현식입니다.
<apply><exists/>
<bvar><ci>x</ci></bvar>
<domainofapplication><ci>D</ci></domainofapplication>
<ci>expression-in-x</ci>
</apply>
다음과 같은 표현식으로 재작성됩니다
<bind><csymbol cd="quant1">exists</csymbol>
<bvar><ci>x</ci></bvar>
<apply><csymbol cd="logic1">and</csymbol>
<apply><csymbol cd="set1">in</csymbol><ci>x</ci><ci>D</ci></apply>
<ci>expression-in-x</ci>
</apply>
</bind>
여기서 기호 <csymbol cd="quant1">exists</csymbol> 및
<csymbol cd="logic1">and</csymbol>는 요소의 문법 표에 명시된
것입니다.
(exists의 경우 추가 기호는 and이고,
forall의 경우에는 implies입니다.)
만약 domainofapplication이 존재하지 않으면 논리적 결합(conjunction)은 필요 없으며
변환은 직접적입니다.
forall 요소가 condition 한정자와 함께 사용될 때,
strict 등가물은 함의를 사용하여 구성됩니다(규칙 Rewrite: quantifier 참조).
<bind><forall/>
<bvar><ci>p</ci></bvar>
<bvar><ci>q</ci></bvar>
<condition>
<apply><and/>
<apply><in/><ci>p</ci><rationals/></apply>
<apply><in/><ci>q</ci><rationals/></apply>
<apply><lt/><ci>p</ci><ci>q</ci></apply>
</apply>
</condition>
<apply><lt/>
<ci>p</ci>
<apply><power/><ci>q</ci><cn>2</cn></apply>
</apply>
</bind>
다음으로 변환됩니다
<bind><csymbol cd="quant1">forall</csymbol>
<bvar><ci>p</ci></bvar>
<bvar><ci>q</ci></bvar>
<apply><csymbol cd="logic1">implies</csymbol>
<apply><csymbol cd="logic1">and</csymbol>
<apply><csymbol cd="set1">in</csymbol>
<ci>p</ci>
<csymbol cd="setname1">Q</csymbol>
</apply>
<apply><csymbol cd="set1">in</csymbol>
<ci>q</ci>
<csymbol cd="setname1">Q</csymbol>
</apply>
<apply><csymbol cd="relation1">lt</csymbol><ci>p</ci><ci>q</ci></apply>
</apply>
<apply><csymbol cd="relation1">lt</csymbol>
<ci>p</ci>
<apply><csymbol cd="arith1">power</csymbol>
<ci>q</ci>
<cn>2</cn>
</apply>
</apply>
</apply>
</bind>
domainofapplication 요소(바인드 변수 bvar 유무
관계없음)와 함께 사용된 적분은
규칙 Rewrite: int 및
Rewrite: defint에 따라 재작성됩니다.
자세한 내용은 F.2.2 Integrals를
참조하십시오.
domainofapplication 요소(바인드 변수 bvar 유무
관계없음)와 함께 사용된 합(sum)과 곱(product)은
4.3.5.2 N-ary Sum <sum/> 및 4.3.5.3 N-ary Product <product/>에 설명된 대로 재작성됩니다.
자세한 내용은 F.2.4 Sums and
Products를 참조하십시오.
이 단계에서 어떤 apply도 최대 하나의 domainofapplication 자식만
가지며 특수한 경우들은 처리되었습니다.
domainofapplication은 Strict Content MathML이 아니므로 다음 중 하나의 경우로 재작성됩니다.
위의 규칙들을 적용하면 interval, condition, uplimit 및 lowlimit을 사용하는 표현식을 오직 domainofapplication만을 사용하도록 재작성할 수 있습니다.
일단 domainofapplication이 얻어지면, Strict 마크업으로의 최종 매핑은 다음 규칙들을 사용하여 수행됩니다:
apply가 bvar 자식을 포함하지 않는 경우, 규칙
재작성: restriction에 따라 제한된 함수의 응용으로 변환됩니다.
바운드 변수가 없는 apply 요소로 표현된 domainofapplication 한정자로 한정된 함수의 응용은
restriction 기호로 구성된 함수
항의 응용으로 변환됩니다.
<apply><ci>F</ci>
<domainofapplication>
<ci>C</ci>
</domainofapplication>
<ci>a1</ci>
<ci>an</ci>
</apply>
다음과 같이 작성될 수 있습니다:
<apply>
<apply><csymbol cd="fns1">restriction</csymbol>
<ci>F</ci>
<ci>C</ci>
</apply>
<ci>a1</ci>
<ci>an</ci>
</apply>
관계와 함께 사용되는 경우, 규칙 재작성: n-ary relations 및 재작성: n-ary relations bvar에 따라 predicate_on_list 기호의 응용으로 변환됩니다.
다음 형태의 표현식
<apply><lt/>
<ci>a</ci><ci>b</ci><ci>c</ci><ci>d</ci>
</apply>
는 Strict Content MathML로 다음과 같이 재작성됩니다
<apply><csymbol cd="fns2">predicate_on_list</csymbol>
<csymbol cd="reln1">lt</csymbol>
<apply><csymbol cd="list1">list</csymbol>
<ci>a</ci><ci>b</ci><ci>c</ci><ci>d</ci>
</apply>
</apply>
다음 형태의 표현식
<apply><lt/>
<bvar><ci>x</ci></bvar>
<domainofapplication><ci>R</ci></domainofapplication>
<ci>expression-in-x</ci>
</apply>
여기서 <ci>expression-in-x</ci>는 바운드 변수를 포함하는 임의의 표현식이며,
이는 Strict Content MathML로 다음과 같이 재작성됩니다
<apply><csymbol cd="fns2">predicate_on_list</csymbol>
<csymbol cd="reln1">lt</csymbol>
<apply><csymbol cd="list1">map</csymbol>
<ci>R</ci>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<ci>expression-in-x</ci>
</bind>
</apply>
</apply>
위 규칙들은 nary-reln.class 및 nary-set-reln.class에 속한 모든 기호에 적용됩니다.
후자의 경우 사용할 Content Dictionary는 기호의 type 속성에 따라 결정되며, 기본값은 set1입니다.
그러나 type=multiset인 경우에는 multiset1을 사용해야 합니다.
일반적인 n-항 연산자에 대해서는 일반 규칙 재작성: n-ary domainofapplication을 사용하여 apply_to_list 기호를 사용한 구성으로 변환합니다.
인수 목록이 명시적으로 주어져 있는 경우에는 재작성: element 규칙이 적용됩니다.
한정자(qualifier) 요소의 어떤 사용도 Strict Content MathML에서는 함수에 명시적으로 인수 목록을 적용하기 위해
apply_to_list 기호를 사용하는 형태로
표현됩니다.
아래 규칙은 다른 한정자들은 앞서 설명한 바와 같이 domainofapplication으로 재작성될 수 있으므로,
여기서는 domainofapplication 한정자만을 고려합니다.
다음 형태의 표현식에서, 여기서 <union/>는 관련 클래스의 임의의 요소를 나타내며
<ci>expression-in-x</ci>는 바운드 변수들을 포함하는 임의의 표현식입니다.
<apply><union/>
<bvar><ci>x</ci></bvar>
<domainofapplication><ci>D</ci></domainofapplication>
<ci>expression-in-x</ci>
</apply>
는 다음과 같이 재작성됩니다
<apply><csymbol cd="fns2">apply_to_list</csymbol>
<csymbol cd="set1">union</csymbol>
<apply><csymbol cd="list1">map</csymbol>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<ci>expression-in-x</ci>
</bind>
<ci>D</ci>
</apply>
</apply>
위 규칙은 나열된 클래스의 모든 기호에 적용됩니다.
nary-set.class의 경우 인수들의 type 속성에 따라 사용할 Content
Dictionary가 결정되며,
기본값은 set1이지만 type=multiset이면
multiset1을 사용해야 합니다.
vector와 같은 nary-constructor.class의 멤버들은 인수와 한정자가 포함 요소의
자식으로 주어지는 constructor 문법을 사용한다는 점에 유의하십시오.
이 경우 위 규칙들은 유사한 구문적 수정을 적용하여 사용됩니다.
바운드 변수가 있는 apply에서, 규칙 재작성: apply
bvar domainofapplication을 통해 suchthat 기호를 사용하는 구성으로 변환됩니다.
일반적으로 바운드 변수와 (선택적으로) domainofapplication을 포함하는 응용은 다음 규칙을 사용하여 재작성됩니다.
이 규칙은 도메인을 응용의 첫 번째 위치 인수로 만들고, 람다 기호를 사용하여 변수 바인딩을 인코딩합니다.
특정 연산자 클래스는 아래에 설명된 대체 규칙을 가집니다.
바운드 변수와 domainofapplication을 갖는 Content MathML 표현식
<apply><ci>H</ci>
<bvar><ci>v1</ci></bvar>
...
<bvar><ci>vn</ci></bvar>
<domainofapplication><ci>D</ci></domainofapplication>
<ci>A1</ci>
...
<ci>Am</ci>
</apply>
는 다음과 같이 재작성됩니다
<apply><ci>H</ci>
<ci>D</ci>
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>v1</ci></bvar>
...
<bvar><ci>vn</ci></bvar>
<ci>A1</ci>
</bind>
...
<bind><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>v1</ci></bvar>
...
<bvar><ci>vn</ci></bvar>
<ci>Am</ci>
</bind>
</apply>
domainofapplication 한정자가 없으면 <ci>D</ci> 자식은 생략됩니다.
비엄격(non-strict) 토큰 요소를 재작성합니다
cn 요소로 표현된 숫자들 중 type 속성이 e-notation, rational,
complex-cartesian, complex-polar,
constant 중 하나인 경우, 규칙 재작성: cn sep, 재작성: cn
based_integer 및 재작성: cn constant에 따라 엄격한 cn으로 재작성합니다.
cn 요소의 자식으로 sep가 있는 경우, 그 사이의 텍스트는
cn 요소들로 재작성될 수 있습니다.
만약 cn 요소가 base 속성을 가지고 있다면, 이것은 결과
기호의 각 cn 인수로 복사됩니다.
<cn type="rational" base="b">n<sep/>d</cn>
는 다음과 같이 재작성됩니다
<apply><csymbol cd="nums1">rational</csymbol>
<cn type="integer" base="b">n</cn>
<cn type="integer" base="b">d</cn>
</apply>
결과에 사용되는 기호는 type 속성에 따라 다음 표에 따라 결정됩니다:
| type attribute | OpenMath Symbol |
| e-notation | bigfloat |
| rational | rational |
| complex-cartesian | complex_cartesian |
| complex-polar | complex_polar |
참고: bigfloat의 경우 해당 기호는
세 개의 인수를 가지며, 지수의 밑을 나타내기 위해 <cn type="integer">10</cn>이 두 번째 인수로 삽입되어야
합니다.
type 속성에 다른 값이 있거나 <sep/> 요소가
둘 이상인 경우,
중간 표현식들은 위와 같이 변환되지만, 응용의 머리(head)에 대해 시스템 종속적인 기호 선택이 필요합니다.
만약 base 속성이 사용되었다면 결과 표현식은 Strict Content MathML이 아니며, 결과의 각 인수는 재귀적으로 처리될 필요가 있습니다.
기본(base) 속성이 10이 아닌 cn 요소는 다음과 같이 재작성됩니다. (base 속성 값이 10이면 단순히
제거됩니다.)
<cn type="integer" base="16">FF60</cn>
<apply><csymbol cd="nums1">based_integer</csymbol>
<cn type="integer">16</cn>
<cs>FF60</cs>
</apply>
원래 요소가 integer 타입을 지정했거나 type 속성이 없고 요소의 내용이 [a-zA-Z0-9] 및 공백
문자만으로 구성된 경우,
결과 응용의 머리로는 based_integer가 사용되어야 합니다.
그렇지 않으면 based_float가
사용되어야 합니다.
Strict Content MathML에서는 상수들이 csymbol 요소를 사용하여 표현되어야 합니다.
여러 중요한 상수들이 nums1 콘텐츠 딕셔너리에 정의되어 있습니다.
다음 형태의 표현식
<cn type="constant">c</cn>
는 Strict Content MathML에서 다음과 동등합니다
<csymbol cd="nums1">c2</csymbol>
여기서 c2는 아래 표에 명시된 바와 같이 c에 대응합니다.
| Content | Description | OpenMath Symbol |
U+03C0 (π) |
일반적인 삼각법의 π: 약 3.141592653... | pi |
U+2147 (ⅇ or ⅇ) |
자연로그의 밑: 약 2.718281828... | e |
U+2148 (ⅈ or ⅈ) |
-1의 제곱근 | i |
U+03B3 (γ) |
오일러 상수: 약 0.5772156649... | gamma |
U+221E (∞ or &infty;) |
무한대. 적절한 해석은 문맥에 따라 달라집니다 | infinity |
ci, csymbol 또는 cn이 Presentation MathML을 포함하는 경우,
규칙 재작성: cn presentation mathml 및 재작성: ci presentation mathml 그리고 csymbol에 대한 유사한 규칙을 사용하여
semantics 요소로 재작성합니다.
만약 cn이 Presentation MathML 마크업을 포함하면, 생성자의 인수들이 제공된 Presentation
MathML로 주석된 ci 요소인 변형 규칙을 사용하여
Strict MathML로 재작성할 수 있습니다.
다음과 같은 비텍스트 콘텐츠를 가진 cn 표현식
<cn type="rational"><mi>P</mi><sep/><mi>Q</mi></cn>
는 다음과 같이 Strict Content MathML로 변환됩니다
<apply><csymbol cd="nums1">rational</csymbol>
<semantics>
<ci>p</ci>
<annotation-xml encoding="MathML-Presentation">
<mi>P</mi>
</annotation-xml>
</semantics>
<semantics>
<ci>q</ci>
<annotation-xml encoding="MathML-Presentation">
<mi>Q</mi>
</annotation-xml>
</semantics>
</apply>
식별자 이름들(p와 q)은 Presentation MathML 내용에서 시스템 정의 방식으로 결정되어야 하며, 예를 들어 위 예제처럼 요소의 문자 데이터를 요소 마크업을
무시하고 취하는 식으로 정할 수 있습니다.
이러한 재작성 작업을 수행하는 시스템은 동일한 Presentation MathML 내용을 사용하는 구성들이 동일한 semantics 요소로,
동일한 ci를 사용하여 재작성되도록 보장해야 하고, 반대로 다른 Presentation MathML을 사용하는 구성은
서로 다른 식별자 이름으로 재작성되도록 해야 합니다(같은 문자 데이터를 가지더라도).
cn 요소가 Strict Content MathML에서 허용되지 않는 문자 데이터를 포함하는 경우(예: 숫자가 아닌 알파벳
문자),
이는 개념적으로 cn 요소가 Presentation 마크업 mtext를 포함하는 경우와 유사하며, 이에 따라 재작성될 수 있습니다.
그러나 결과로 생성될 주석(annotation)이 추가적인 렌더링 정보를 포함하지 않으므로, 이러한 경우에는 semantics 구성 대신 직접적으로 ci 요소로 재작성하는 것이
바람직합니다.
ci 요소는 현재 유니코드에서 제공되지 않는 문자를 참조하기 위해 mglyph
요소를 포함하거나,
렌더링을 위한 일반적인 presentation 구성(참조: 3.1.8
Summary of Presentation Elements)을 포함할 수 있습니다.
다음과 같은 비텍스트 콘텐츠를 포함하는 ci 표현식
<ci><mi>P</mi></ci>
는 다음과 같이 Strict Content MathML로 변환됩니다
<semantics>
<ci>p</ci>
<annotation-xml encoding="MathML-Presentation">
<mi>P</mi>
</annotation-xml>
</semantics>
식별자 이름 p는 Presentation MathML 내용에서 시스템 정의 방식으로 결정되어야 하며, 위와 같은 방식으로 요소의 문자 데이터를 사용해 결정할 수 있습니다.
동일한 Presentation MathML 내용을 사용하는 구성들은 동일한 ci로 재작성되고, 서로 다른
Presentation MathML은 서로 다른 식별자 이름으로 재작성되도록 시스템은 보장해야 합니다.
다음 예는 시각적으로 로 표시되며, 내용 측면에서는 단일 기호로 취급되는 원자 심볼을 인코딩한 것입니다.
<ci>
<msup><mi>C</mi><mn>2</mn></msup>
</ci>
Strict Content MathML 등가물은
<semantics>
<ci>C2</ci>
<annotation-xml encoding="MathML-Presentation">
<msup><mi>C</mi><mn>2</mn></msup>
</annotation-xml>
</semantics>
4.3 특정 구조에 대한 Content
MathML에서 정의된 남아 있는 모든 연산자를
규칙 Rewrite: element에 따라 문법 표에서 지정된 기호를 참조하는 csymbol로 재작성합니다.
예를 들면,
<plus/>
은 Strict 형식과 동등합니다
<csymbol cd="arith1">plus</csymbol>
각 연산자 요소의 설명에서 언급한 바와 같이, 적절한 기호 선택을 결정하기 위해 특별한 경우 규칙이 필요한 연산자가 있습니다. 특히 주목할 만한 경우는 다음과 같습니다:
selector 연산자의 인수 순서는 재작성되어야 하며, 기호는 인수의 타입에 따라 달라집니다.
minus 연산자의 기호 선택은 인수의 수에 따라 달라집니다. minus 또는 minus 중 어느 것인지에 따라 달라집니다.
일부 집합 연산자의 기호 선택은 인수들의 type 값에 따라 달라집니다.
일부 통계 연산자의 기호 선택은 인수들의 타입 값에 따라 달라집니다.
emptyset 요소의 기호 선택은 문맥에 따라 달라질 수 있습니다.
minus 요소는 단항 산술 연산자로 사용될 수 있습니다(예: - x를 나타내기
위해) 또는
이항 산술 연산자로 사용될 수 있습니다(예: x- y를 나타내기 위해).
인수가 하나일 때 minus는 unary_minus 기호에 해당합니다.
인수가 두 개인 경우 minus는 minus 기호에 해당합니다.
두 경우 모두 Strict Content 마크업으로의 번역은 Rewrite: element에서 설명된 것처럼 직접적입니다. 실제 사용을 반영하는 기호를 선택하는 것이 전부입니다.
Strict Content 마크업으로 번역할 때, 만약 type의 값이 multiset이면
in 기호는 multiset1에서 가져온 것을 사용해야 합니다.
Strict Content 마크업으로 번역할 때, 만약 type의 값이 multiset이면
notin 기호는 multiset1에서 가져온 것을 사용해야 합니다.
Strict Content 마크업으로 번역할 때, 만약 type의 값이 multiset이면
subset 기호는 multiset1에서 가져온 것을 사용해야 합니다.
Strict Content 마크업으로 번역할 때, 만약 type의 값이 multiset이면
prsubset 기호는 multiset1에서 가져온 것을 사용해야 합니다.
Strict Content 마크업으로 번역할 때, 만약 type의 값이 multiset이면
notsubset 기호는 multiset1에서 가져온 것을 사용해야 합니다.
Strict Content 마크업으로 번역할 때, 만약 type의 값이 multiset이면
notprsubset 기호는 multiset1에서 가져온 것을 사용해야 합니다.
Strict Content 마크업으로 번역할 때, 만약 type의 값이 multiset이면
setdiff 기호는 multiset1에서 가져온 것을 사용해야 합니다.
Strict Content 마크업으로 번역할 때, 만약 type의 값이 multiset이면
size 기호는 multiset1에서 가져온 것을 사용해야 합니다.
mean 요소가 명시적 인수 목록에 적용될 때, Strict Content 마크업으로의 번역은 직접적이며
s_data1 콘텐츠 딕셔너리의 mean 기호를 사용합니다(자세한 내용은 Rewrite: element 참조). 분포(distribution)에 적용되는 경우에는
s_dist1 콘텐츠 딕셔너리의 mean 기호를 사용해야 합니다. 한정자가 있는 경우에는 동일한
주의사항과 함께 Rewrite: n-ary domainofapplication를
사용하세요.
sdev 요소가 명시적 인수 목록에 적용될 때, Strict Content 마크업으로의 번역은 직접적이며
sdev 기호를 사용합니다. 분포에 적용되는 경우에는
sdev 기호를 사용해야 합니다. 한정자가 있는 경우에는
Rewrite: n-ary domainofapplication를 동일한
주의와 함께 사용하세요.
variance 요소가 명시적 인수 목록에 적용될 때, Strict Content 마크업으로의 번역은 직접적이며
variance 기호를 사용합니다. 분포에 적용되는
경우에는
variance 기호를 사용해야 합니다. 한정자가
있는 경우에는 Rewrite: n-ary domainofapplication를 동일한
주의와 함께 사용하세요.
median 요소가 명시적 인수 목록에 적용될 때, Strict Content 마크업으로의 번역은 직접적이며
median 기호를 사용합니다(자세한 내용은 Rewrite: element 참조).
mode 요소가 명시적 인수 목록에 적용될 때, Strict Content 마크업으로의 번역은 직접적이며
mode 기호를 사용합니다(자세한 내용은 Rewrite: element 참조).
어떤 상황에서는 문맥상 emptyset이 multiset1 콘텐츠 딕셔너리의 emptyset 기호에 해당함이 분명할 수 있습니다.
그러나 저자가 이를 명시적으로 나타낼 방법은 주석(annotation) 이외에는 없으므로,
항상 set1 콘텐츠 딕셔너리의 emptyset 기호로 번역하는 것도 허용됩니다.
이 시점에서 type을 허용하는 모든 요소들(단, ci와
csymbol은 제외)은 이미 type 속성 없이 Strict
Content 마크업 동등물로
재작성되어야 하며, 타입 정보는 연산자 기호 선택에 반영되어 있어야 합니다. 이제 ci와 csymbol 중
type 속성을 가진 나머지 요소들을 규칙 Rewrite:
ci type annotation 및 Rewrite: csymbol type
annotation에 따라 semantics를 사용하는 엄격한 표현으로 재작성합니다.
Strict Content에서는 type 속성이 의미론적 귀속(semantic attribution)을 통해 표현됩니다. 다음 형태의 표현식
<ci type="T">n</ci>
은 다음과 같이 재작성됩니다
<semantics>
<ci>n</ci>
<annotation-xml cd="mathmltypes" name="type" encoding="MathML-Content">
<ci>T</ci>
</annotation-xml>
</semantics>
비-Strict 사용에서는 csymbol이 type 속성의 사용을
허용합니다.
Strict Content에서는 type 속성이 의미론적 귀속으로 표현됩니다. 다음 형태의 표현식
<csymbol type="T">symbolname</csymbol>
은 다음과 같이 재작성됩니다
<semantics>
<csymbol>symbolname</csymbol>
<annotation-xml cd="mathmltypes" name="type" encoding="MathML-Content">
<ci>T</ci>
</annotation-xml>
</semantics>
만약 csymbol 요소의 definitionURL 및 encoding 속성이
콘텐츠 딕셔너리에 대한 참조로 해석될 수 있다면(자세한 내용은 4.2.3.2
Non-Strict uses of <csymbol> 참조), cd 속성으로
콘텐츠 딕셔너리를 참조하도록 재작성합니다.
Strict 마크업에서 허용되지 않는 속성을 가진 모든 요소는 규칙 Rewrite:
attributes에 따라 이러한 속성들을 annotation 요소로 포함하는 semantics 구성으로 재작성합니다.
이 경우 원래 요소는 이러한 속성 없이 첫 번째 자식으로 들어갑니다.
cn 및 interval과 같은 여러 Content MathML 요소들은
자신들이 나타내는 객체의 의미를 특화하기 위해 속성을 허용합니다.
이러한 경우에 대해서는 4.3
Content MathML for Specific Structures에서 사례별로 특별한 재작성 규칙이 제공됩니다.
그러나 content MathML 요소들은 또한 모든 MathML 요소가 공유하는 속성들을 허용하며,
문맥에 따라 다른 XML 네임스페이스의 속성들을 포함할 수도 있습니다. 이러한 속성들은 Strict Content 마크업에서 대체 형식으로 재작성되어야 합니다.
예를 들어,
<ci class="foo" xmlns:other="http://example.com" other:att="bla">x</ci>
는 다음과 같이 재작성됩니다
<semantics>
<ci>x</ci>
<annotation cd="mathmlattr"
name="class" encoding="text/plain">foo</annotation>
<annotation-xml cd="mathmlattr" name="foreign" encoding="MathML-Content">
<apply><csymbol cd="mathmlattr">foreign_attribute</csymbol>
<cs>http://example.com</cs>
<cs>other</cs>
<cs>att</cs>
<cs>bla</cs>
</apply>
</annotation-xml>
</semantics>
Strict Content MathML에서 허용되지 않는 MathML 속성들에 대해서는 모든 content MathML 요소에 허용된 속성들을 위한 기호들을 제공하는 콘텐츠 딕셔너리 mathmlattr를 참조합니다.
이 섹션은 비규범적입니다.
현재 Math 작업 그룹은 2021년 4월부터 2023년 5월까지 위임되었으며 공동 의장은 Neil Soiffer와 Brian Kardell (Igalia)입니다.
2019년부터 2021년 사이에 W3C MathML-Refresh Community Group는 Neil Soiffer가 의장을 맡았으며 MathML Core의 초기 제안과 MathML 4에 대한 요구사항을 개발했습니다.
MathML 3(2012–2013)를 담당한 W3C Math 작업 그룹은 NAG의 David Carlisle와 AMS의 Patrick Ion이 공동 의장을 맡았으며; Patrick Ion과 Design Science의 Robert Miner는 2006-2011년 동안 공동 의장을 맡았습니다. 작업 그룹 가입에 관해서는 공동 의장에게 문의하십시오. 현재 구성원은 W3C Math 홈 페이지를 참조하십시오.
Math 작업 그룹과 MathML의 초기 발전에 필수적이었던 리더십과 기여를 한 Robert Miner는 2011년 12월에 안타깝게도 젊은 나이에 사망했습니다.
MathML 3.0을 담당했던 작업 그룹 참가자들은 다음과 같습니다:
Ron Ausbrooks, Laurent Bernardin, Pierre-Yves Bertholet, Bert Bos, Mike Brenner, Olga Caprotti, David Carlisle, Giorgi Chavchanidze, Ananth Coorg, Stéphane Dalmas, Stan Devitt, Sam Dooley, Margaret Hinchcliffe, Patrick Ion, Michael Kohlhase, Azzeddine Lazrek, Dennis Leas, Paul Libbrecht, Manolis Mavrikis, Bruce Miller, Robert Miner, Chris Rowley, Murray Sargent III, Kyle Siegrist, Andrew Smith, Neil Soiffer, Stephen Watt, Mohamed Zergaoui
위의 모든 인물들은 Math 작업 그룹의 구성원였으나, 일부는 작업 그룹 전체 기간 동안 활동하지는 않았습니다. 해당 사양의 시작 부분에 나열된 MathML3의 22명 저자는 사양의 실제 텍스트에서 사용된 재작업과 재정식을 기여한 사람들입니다. 따라서 이 목록에는 MathML2의 주요 저자들이 포함되어 있으며, 그들의 많은 텍스트가 여기서 재활용되었습니다. 물론 이들은 전체 Math 작업 그룹의 활동과 논의, 그리고 내부의 W3C 및 외부의 유용한 논평에 의해 지원되고 격려되었습니다.
2003년부터 2006년까지 W3C 수학 활동은 Math Interest Group으로 구성되었으며, NAG의 David Carlisle와 Design Science의 Robert Miner가 의장을 맡았습니다.
W3C Math 작업 그룹(2001–2003)은 AMS의 Patrick Ion이 공동 의장을 맡았고, 2001년 6월부터 2002년 5월까지 IBM의 Angel Diaz가 공동 의장을 맡았습니다; 이후 Patrick Ion은 WG의 연장된 위임 기간이 끝날 때까지 의장을 계속 맡았습니다.
MathML 2.0, 두 번째 판을 담당한 작업 그룹 참가자들은 다음과 같습니다:
Ron Ausbrooks, Laurent Bernardin, Stephen Buswell, David Carlisle, Stéphane Dalmas, Stan Devitt, Max Froumentin, Patrick Ion, Michael Kohlhase, Robert Miner, Luca Padovani, Ivor Philips, Murray Sargent III, Neil Soiffer, Paul Topping, Stephen Watt
초기 활동적 참가자들(2001 – 2003)에 포함된 사람들은 다음과 같습니다:
Angel Diaz, Sam Dooley, Barry MacKichan
W3C Math 작업 그룹은 1998년 7월부터 2000년 12월까지 AMS의 Patrick Ion과 IBM의 Angel Diaz가 공동 의장을 맡았습니다.
MathML 2.0을 담당한 작업 그룹 참가자들은 다음과 같습니다:
Ron Ausbrooks, Laurent Bernardin, Stephen Buswell, David Carlisle, Stéphane Dalmas, Stan Devitt, Angel Diaz, Ben Hinkle, Stephen Hunt, Douglas Lovell, Patrick Ion, Robert Miner, Ivor Philips, Nico Poppelier, Dave Raggett, T.V. Raman, Murray Sargent III, Neil Soiffer, Irene Schena, Paul Topping, Stephen Watt
이 두 번째 W3C Math 작업 그룹의 이전 활동적 참가자들은 다음과 같습니다:
Sam Dooley, Robert Sutor, Barry MacKichan
MathML 1.0 [MathML1]이 발표될 당시, Math 작업 그룹은 Patrick Ion과 당시 Geometry Center 소속이었던 Robert Miner가 공동 의장을 맡았습니다. 그 이후로 여러 차례 멤버십 변경이 있었습니다. MathML 1.01 업데이트 과정에서 원래 멤버 외에도 David Carlisle, Don Gignac, Kostya Serebriany, Ben Hinkle, Sebastian Rahtz, Sam Dooley 등으로부터 정정이 제공되었습니다.
완성된 MathML 1.0 사양을 담당한 Math 작업 그룹의 참가자들은 다음과 같습니다:
Stephen Buswell, Stéphane Dalmas, Stan Devitt, Angel Diaz, Brenda Hunt, Stephen Hunt, Patrick Ion, Robert Miner, Nico Poppelier, Dave Raggett, T.V. Raman, Bruce Smith, Neil Soiffer, Robert Sutor, Paul Topping, Stephen Watt, Ralph Youngen
이전 단계에서 일정 기간 동안 W3C Math WG의 구성원이었던 다른 사람들은 다음과 같습니다:
Stephen Glim, Arnaud Le Hors, Ron Whitney, Lauren Wood, Ka-Ping Yee
작업 그룹은 MathML 1.0 사양을 개발하는 데 있어 많은 다른 사람들의 도움을 받았습니다. 특히 우리는 문자 표를 구성하는 데 도움과 정보를 제공한 Barbara Beeton, Chris Hamlin, John Jenkins, Ira Polans, Arthur Smith, Robby Villegas 및 Joe Yurvati에게 감사드리며, 또한 Peter Flynn, Russell S.S. O'Connor, Andreas Strotmann 및 www-math 메일링 리스트에 기여한 다른 분들의 세심한 교정과 건설적인 비판에 감사드립니다.
Math 작업 그룹이 MathML 2.0으로 진행되면서, 우리는 상호작용이 많은 여러 W3C 작업 그룹의 많은 사람들로부터 다시 도움을 받았습니다. W3C 외부에서는 Unicode 기술 위원회(UTC)와 ISO 10646를 다루는 NTSC WG2와의 인터페이스가 특히 활발했습니다. 그곳에서 STIX 프로젝트는 수학 표기 문자를 유니코드에 추가하기 위한 제안을 마련했으며, 이 작업은 AMS의 Barbara Beeton이 다시 spearheaded했습니다. 전체 문제는 세 개의 제안으로 나뉘었고, 그 중 두 개는 Microsoft의 Murray Sargent가 진행했으며, 그는 Math WG의 구성원이자 UTC의 구성원입니다. 수학 공동체는 또한 Sybase의 Kenneth Whistler(UTC 및 WG2 회원)와 UTC 및 WG2 논의에 관여하고 과학적 표기의 필요를 꾸준히 지지한 Asmus Freytag의 수년에 걸친 제안 정제 작업에 대해 감사해야 합니다.
https를 사용하고 현재 W3C 출판물에 필요한 대로
GitHub Issues 페이지를 참조하도록 했습니다.
mode 및 macros
속성을 <math>에서 제거했습니다. 이들은 MathML 2 이후로 더 이상 권장되지 않습니다.
macros는 정의된 동작이 없었고, mode는
적절한 display 사용으로 대체할 수 있습니다.
레거시 애플리케이션이 필요한 경우 mathml4-legacy 스키마가 이를 유효하게 만듭니다.
other 속성을 제거했습니다.
이는 MathML 2 이후로 더 이상 권장되지 않았습니다.
레거시 애플리케이션이 필요한 경우 mathml4-legacy 스키마가 이를 유효하게 만듭니다.mo 연산자로 표기해야 함을 분명히 했습니다.
fontfamily,
fontweight, fontstyle, fontsize, color 및
background는 mathvariant, mathsize,
mathcolor 및
mathbackground로 대체되었습니다.
이러한 속성들은 또한 더 이상 mstyle에서 유효하지 않습니다.
레거시 애플리케이션이 필요한 경우 mathml4-legacy 스키마가 이를 유효하게 만듭니다.
mglyph에서 제거되었습니다.
mspace에 대해 값 indentingnewline은 더 이상 유효하지 않습니다(이는
newline과 동일했습니다).
mtr 및 mtd로
표시되어야 합니다. [MathML1]
는 구현체가 행 마크업이 누락된 경우 이를 추론하도록 요구했습니다.
malignmark의 사용은 구현된 기능과 일치하도록 제한되고 단순화되었습니다.
테이블 요소의 groupalign 속성은 더 이상 지원되지 않습니다.mo 속성들, fence
및 separator는 제거되었습니다(또한 B. Operator Dictionary에 속성으로 더 이상 나열되지 않습니다).
이 속성들은 A.2.6 Legacy
MathML 스키마에서는 여전히 유효하지만,
기본 스키마에서는 유효하지 않습니다.none은 전체 문서에서 빈 mrow로
대체되어
[MathML-Core]에 맞추었습니다.mlabeledtr 및 관련 속성
side 및 minlabelspacing는 더 이상 명세되지
않습니다. 기본 스키마에서 제거되었으나
Legacy Schema에서는 유효합니다.
mpadded 길이 속성의 특수 확장 구문
( "+" | "-" )?
unsigned-number
( ("%" pseudo-unit?)
| pseudo-unit
| unit
| namedspace
)?는 더 이상 지원되지 않습니다.
대부분의 기능은 표준 CSS 길이 구문을 사용하여 여전히 이용 가능합니다. 참고: Note: mpadded
lengths.
href가 아닌 src를
사용하도록 변경했습니다. 이전 예제들도 유효했는데, href는 모든 요소에서 허용되는 일반적인 표현 속성이었습니다.
reln,
declare 및 fn은 제거되었습니다.
레거시 애플리케이션이 필요한 경우 mathml4-legacy 스키마가 이를 유효하게 만듭니다.
intent 속성에 대해 설명합니다.
Mixing Markup Languages for Mathematical Expressions에서 변경했습니다.
<semantics> 요소를 사용해 표현 표기와 내용 표기를 혼합하는 기존 텍스트는 두 번째 섹션에
유지되었으며,
일부 비규범적 텍스트와 예제는 [MathML-Notes]로 옮겨 축소되었습니다.encoding 및 definitionURL의 <semantics>에서의
사용을 더 이상 권장하지 않았습니다.
이들 속성은 본 명세에서 유효하지 않습니다. 레거시 애플리케이션을 위해 이러한 속성을 검증해야 하는 경우 mathml4-legacy 스키마를 사용할
수 있습니다.mathml4-core 스키마가 [MathML-Core]을 기반으로 하여
mathml4-presentation의 기반으로 사용되며, 기존 문서 집합을 검증할 수 있는 새로운 mathml4-legacy
스키마가 추가되었습니다.
compact표현이 제공되었습니다.
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: