MathML 入门

在本文中,我们将使用一个简单的 HTML 文档,看看如何向其中添加 MathML 公式,并介绍一些元素。

通过 <math> 元素在 HTML 中插入公式

MathML 使用与 HTML 相同的语法来表示元素和属性的树。特别是,每个数学公式都由一个 <math> 元素表示,该元素可以放置在 HTML 页面中。在下面的文档中,它位于文本段落内

html
<!doctype html>
<html lang="en-US">
  <head>
    <title>My first math page</title>
  </head>
  <body>
    <p>
      The fraction
      <math>
        <mfrac>
          <mn>1</mn>
          <mn>3</mn>
        </mfrac>
      </math>
      is not a decimal number.
    </p>
  </body>
</html>

<mfrac> 元素指定一个分数,其第一个子元素是分子,第二个子元素是分母。在浏览器中渲染如下:

警告: 如果您看到的不是分数而是“1 3”,则表示您的浏览器可能不支持 MathML。有关更多详细信息,请查看 浏览器兼容性表

display 属性

请注意,在前面的示例中,公式与段落文本在同一行。然而,通常的做法是将大型数学公式居中显示在自己的行上,如下所示。要实现这一点,您需要将 display="block" 属性附加到 <math> 元素上。

您可能还会注意到外观上的一些细微变化:分数文本和垂直间距会稍微变大。没有 display="block" 属性时,高度会最小化,以避免干扰周围文本的流动。有了 display="block" 属性后,则优先考虑数学公式的可读性。

注意: 这对应于 LaTeX 中行内公式(用美元符号 $...$ 分隔)和显示公式(用 \[...\] 分隔)的概念。

注意: 上面提到的外观变化实际上由 math-style 属性控制,对于 <math display="block">,该属性默认为 normal,否则为 compact。在某些 MathML 子树中,此属性可以自动变为 compact,但在本次入门教程中我们将忽略此细节。同样,这与 LaTeX 类似。

<mrow> 元素进行分组

<math> 元素实际上可以包含任意数量的子元素,并将它们排列成一行。例如,“1 + 2 + 3”这个简单的公式在 MathML 中将这样编码:

html
<math>
  <mn>1</mn>
  <mo>+</mo>
  <mn>2</mn>
  <mo>+</mo>
  <mn>3</mn>
</math>

<mrow> 元素是一个通用容器,它执行类似的布局,但可以放置在 MathML 子树的任何位置。它有助于将多个元素分组。例如,下面分数的分子(其第一个子元素)是“one plus two”。

html
<math>
  <mfrac>
    <mrow>
      <mn>1</mn>
      <mo>+</mo>
      <mn>2</mn>
    </mrow>
    <mn>3</mn>
  </mfrac>
</math>

轮到你了:编写嵌套表达式

作为练习,请尝试只使用我们到目前为止看到的 MathML 元素来编写以下表达式。如果您遇到困难或想验证解决方案,请查看示例的源代码。

总结

在本文中,我们研究了如何使用 <math> 元素在 HTML 文档中插入数学公式。我们了解了使用 display="block" 和不使用 display="block"<math> 元素之间的渲染差异。此外,我们还遇到了其他几个 MathML 元素:用于分数的 <mfrac>,用于分组的 <mrow>,以及一些文本元素。我们将在下一篇文章中进一步分析这些 文本容器

另见