MathML 使用入门
通过 元素在 HTML 中插入公式
MathML 使用与 HTML 相同的语法来表示元素和属性的树形结构。特别地,每个数学公式都由一个 <math>
元素表示,该元素可以放置在 HTML 页面中。在下面的文档中,它位于一个段落文本中:
display 属性
请注意,在前面的示例中,公式与段落文本在一行上。然而,通常情况下,我们会将大的数学公式居中显示在独立的行上,如下所示。为了实现这一点,你需要在 <math>
元素上附加一个 display="block"
属性。
使用 元素进行分组
实际上,<math>
元素可以包含任意数量的子元素,并且将它们在一行内呈现。例如,简单的公式“1 + 2 + 3”在 MathML 中的编码如下:
<math>
<mn>1</mn>
<mo>+</mo>
<mn>2</mn>
<mo>+</mo>
<mn>3</mn>
</math>
<mrow>
元素是一个通用容器,可以执行类似的布局,但可以放置在 MathML 子树的任何位置。它可以将多个元素组合在一起。例如,下面的分数的分子部分(它的第一个子元素)是“一加二”。
<math>
<mfrac>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mn>2</mn>
</mrow>
<mn>3</mn>
</mfrac>
</math>
MathML 文本容器
数学符号的 Unicode 字符
数学公式涉及许多特殊字符,例如希腊字母(例如 Δ)、弗拉克图尔字母(例如 𝔄)、双线字母(例如 ℂ)、二元运算符(例如 ≠)、箭头(例如 ⇒)、积分符号(例如 ∮)、求和符号(例如 ∑)、逻辑符号(例如 ∀)以及括号(例如 ⌊)等等。维基百科的文章数学运算符和符号的 Unicode 提供了这些字符的概述。
由于这些字符大多不属于基本拉丁 Unicode 块,因此建议指定你的文档字符编码,并使用适当的 Web 字体。以下是一个使用 UTF-8 编码和 Latin Modern Math (en-US) 字体的基本模板:
一些语义
我们在 MathML 使用入门文章中提到,MathML 公式中的文本被包裹在特定的容器元素中,例如 <mn>
或 <mo>
。一般而言,MathML 公式中的所有文字都必须包含在这类容器元素中,这类元素被称为_标记_(token)元素。此外,MathML 提供了多种标记元素,以区分文字内容的不同含义。
<mi>
元素表示“标识符”,其可以是符号名称或任意文本。例如:<mi>x</mi>
(变量)、<mi>cos</mi>
(函数名)和<mi>π</mi>
(符号常量)。<mn>
元素表示“数值文字”或其他应呈现为数值文字的数据。例如:<mn>2</mn>
(整数)、<mn>0.123</mn>
(小数)或<mn>0xFFEF</mn>
(十六进制值)。<mo>
元素表示运算符或任何应呈现为运算符的内容。例如:<mo>+</mo>
(二元运算符)、<mo>≤</mo>
(二元关系符),<mo>∑</mo>
(求和符号)或<mo>[</mo>
(括号)。<mtext>
元素用于表示任意文本。例如公式中的短词,如<mtext>if</mtext>
或<mtext>映射到</mtext>
。
的自动斜体化
在数学中的一种排版惯例是使用斜体字母表示变量。为了帮助实现这一点,仅具有单个字符的 <mi>
元素会自动呈现为斜体。请比较以下公式中两个 <mi>
元素的渲染效果:
<math>
<mi>sin</mi>
<mi>x</mi>
</math>
阻止对 的自动斜体化
要想阻止 <mi>
元素的自动斜体化,可以在该元素上附加 mathvariant="normal"
属性。比较以下公式中大写伽马字母的渲染效果:
<math>
<mi>Γ</mi>
<mi mathvariant="normal">Γ</mi>
</math>
的运算符属性
MathML 包含一个运算符字典,其根据 <mo>
元素的内容和其在容器中的位置(前缀、中缀或后缀),定义了默认属性。
MathML 分数和根号
、 和 的子树
在 MathML 使用入门文章中,我们学习了用于描述分数的 <mfrac>
元素。现在让我们看一个基本示例,其中还添加了用于根号(<msqrt>
和 <mroot>
)的新元素:
<math>
<mfrac>
<mtext>child1</mtext>
<mtext>child2</mtext>
</mfrac>
</math>
<br />
<math>
<msqrt>
<mtext>child1</mtext>
<mtext>child2</mtext>
<mtext>...</mtext>
<mtext>childN</mtext>
</msqrt>
</math>
<br />
<math>
<mroot>
<mtext>child1</mtext>
<mtext>child2</mtext>
</mroot>
</math>
可伸缩的根号符号
正如之前所见,<msqrt>
和 <mroot>
元素上的上横线会水平拉伸以覆盖其内容。但实际上根号符号 √ 也会拉伸以与其内容一样高。
<math display="block">
<mroot>
<msqrt>
<mfrac>
<mn>1</mn>
<mn>2</mn>
</mfrac>
</msqrt>
<mn>3</mn>
</mroot>
</math>
无横线的分数
有些数学概念有时会使用类似分数的表示法,例如二项式系数或勒让德符号。对于这种不绘制横线的类似分数的表示法,可以在 <mfrac>
元素上附加 linethickness="0"
属性进行标记:
<math display="block">
<mrow>
<mo>(</mo>
<mfrac linethickness="0">
<mn>3</mn>
<mn>2</mn>
</mfrac>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mn>3</mn>
<mo>≠</mo>
<mfrac>
<mn>3</mn>
<mn>2</mn>
</mfrac>
</math>