최근 수정 시각 : 2026-10-28 11:12:03

MathML


이 문서는 토막글입니다.

토막글 규정을 유의하시기 바랍니다.


1. 개요2. 역사
2.1. MathML 3.02.2. MathML Core2.3. MathML 4.0
3. scheme
3.1. Presentation markup
3.1.1. 태그
3.2. Content markup
4. combined markup
4.1. mixed markup4.2. parallel markup
5. 팁

1. 개요

수학·과학 표기 및 그 의미론을 전산 환경에서 표현하기 위한 W3C 표준.

2. 역사

2.1. MathML 3.0

흔히 망했다고 놀림받는 바로 그 표준으로, 보통 2014년의 3.0 2판 스펙을 말한다.

2.2. MathML Core

w3.org/TR/mathml-core

MathML 3.0의 presentation markup을 기반으로 구체적인 렌더링 스펙이나 현대적인 DOM 처리 등 구현 지침을 대거 추가해 개편한 경량 스펙. 여기서 경량이라 한 이유는 content markup의 의미론은 포함하지 않는 스펙이기 때문이다. 실질적으로 웹 브라우저에서 실용적으로 구현할 수 있을 만큼만 잘라내고 개선한 표준인 것.

덕분에 욕만 처먹던 MathML 3.0에 비해 2026년 현재는 나름 메이저 브라우저에서 지원되고 있다.

mathvariants가 deprecated되었다. 아예 다 나간 건 아닌데 사실상 <mi>에만 남고 그마저도 normal만 지원하면서# 사실상 사라졌다. 현재 최신 Chrome에서는 깨지고 Firefox에서는 deprecation log가 출력되는 상황. 그 대안이랍시고 MathML Core 스펙에서 권장하는 것은 Mathematical Alphanumeric Symbols나 유니코드의 Variantion selector를 쓰라는 것.강요받고 있는 거다! 참고로 예전 MathML 3 스펙#에서는 "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"와 같은 variant가 내장 지원되었다.

2.3. MathML 4.0

w3.org/TR/mathml4

아직 W3C WD 상태. 사실상 MathML Core와 함께 디자인되었으며 궁극적으로는 content markup 등까지 포괄하는 full spec이자 MathML Core의 superset 격이라고 할 수 있다.

3. scheme

3.1. Presentation markup

MathML Core 기준.

3.1.1. 태그

  • <mn /> - 숫자(numeric literal) 토큰. 수(number)가 아님에 주의. W3C 표준에서도 numeric literal이라고 명시하고 있다. 가령 원주율 자체는 수이고, <mn>3.1415</mn>은 numeric literal이며, <mi>&pi;</mi> 등은 식별자로, numeric literal이 아니다. 보통 아라비아 숫자나 소수점, 부호 등으로 이루어진 숫자가 들어간다. 물론 presentation 수준에서는 hex literal이나 binary literal 등 십진법이 아닌 numerial이나 E notation을 써도 딱히 구분할 필요는 없다.
  • <mi /> - 식별자(identifier) 토큰.표준 math-auto가 적용되기 때문에 보통 한 글자만 넣으면 자동으로 이탤릭(italic) 처리되고 반대로 여러 글자면 로만체(roman)로 나온다. 상술한 대로 최신 MathML Core에서는 유니코드 지원 때문에 사실상 서체 attribute mathvariants옵션이 normal밖에 없다.
  • <mo /> - 연산자(operator) 토큰. 이름이 operator긴 한데 사실 표준에서도 그렇고 각종 연산자나 관계 기호, punctuation 등등이 다 짬뽕되어 있는 태그다. 사실상 <mn />, <mi />가 아닌 모든 것 정도로 생각하면 보통은 들어맞는다. 손으로 쓸 때는 별로 인식하지 않지만 마크업으로 쓸 때는 구분해야 하는 것도 여기에 포함되는데, 가령 곱 의미로 juxtaposition을 썼으면 그냥 붙여쓰는 게 아니라 <mo>&InvisibleTimes;</mo>를 넣어주는 식.
  • <mtext />

3.2. Content markup

4. combined markup

4.1. mixed markup

4.2. parallel markup

<semantics /> 태그를 사용한다. 정말 쉽게 생각하면 HTML과 CSS의 관계처럼 parallel하게 inject했다고 생각하면 좋은 편.

5. 팁

폰트가 안 예쁘다고 느껴지면 STIX two를 써보자. TeX 내장 폰트도 기본적인 presentation 지원은 되지만 <mfenced />나 <munder />에 &UnderBrace;를 쓰는 등 조금만 레이아웃이 복잡해져도 수준이 확 떨어진다.