为mathjax编写数学

把数学放在网页上

要将数学放入web页面,可以使用tex和latex表示法、mathml表示法、ascimath表示法,或者在同一页面中使用这三种表示法的组合;mathjax配置告诉mathjax要使用哪种表示法,以及在使用tex/latex时计划如何表示数学。或阿希马斯符号。下面将更详细地描述这三种格式。

tex和 Latex 输入

用tex或latex格式编写的数学表示为 数学分隔符 围绕着数学,告诉mathjax页面的哪个部分代表数学,什么是普通文本。有两种类型的方程式:一种是出现在段落内的方程式(行内数学),另一种是更大的方程式,它们与文本的其余部分单独出现在行内(显示数学)。

默认的数学分隔符是 $$...$$\[...\] 用于显示数学,以及 \(...\) 用于在线数学。特别注意 $...$ 行内分隔符是 not 默认使用。这是因为美元符号经常出现在非数学环境中,这可能会导致一些文本意外地被视为数学。例如,使用单美元分隔符“……第一个的成本是2.50美元,每增加一个成本是2.00美元……”这将导致“第一个成本是2.50美元,而“由于介于美元符号之间,因此被视为数学”。请参阅 TeX and LaTeX Math Delimiters 有关使用美元符号作为分隔符的详细信息。

下面是一个包含tex数学的完整示例页(请参见 MathJax Web Demos Repository 更多)。

<!DOCTYPE html>
<html>
<head>
<title>MathJax TeX Test Page</title>
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script type="text/javascript" id="MathJax-script" async
  src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js">
</script>
</head>
<body>
When \(a \ne 0\), there are two solutions to \(ax^2 + bx + c = 0\) and they are
$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$
</body>
</html>

由于tex符号是页面文本的一部分,因此在输入数学时必须记住一些注意事项。特别是,您需要小心使用小于号,因为浏览器使用这些符号来指示HTML中标记的开头。在“小于”标志的两侧放置一个空间应该足够,但是请参见 TeX and LaTeX support 了解更多详细信息。

如果在博客、wiki或其他内容管理系统中使用mathjax,则该系统使用的标记语言可能会干扰mathjax使用的tex表示法。例如,如果您的博客使用标记符号来编写页面,则tex用来表示下标的下划线可能与使用标记下划线来表示斜体相混淆,这两种用法可能会阻止显示您的数学。见 TeX and LaTeX support 关于如何处理这个问题的一些建议。

tex输入处理器有许多扩展,由包含tex输入格式的组合组件加载(例如, tex-chtml.js ,以及其他在需要时自动加载的。见 TeX and LaTeX Extensions 有关可用的tex扩展的详细信息。

MATML输入

对于用mathml表示法编写的数学,您可以使用标准 <math> 标签,在哪里 <math display="block"> 表示显示的数学和 <math display="inline"> 或者只是 <math> 表示在线数学。

mathml表示法将在html文件(不仅仅是xhtml文件)中与mathjax一起工作,即使在较旧的浏览器中也是如此,而且不需要为web页面提供任何特殊的mime类型。但是,请注意,在html中(与xhtml相反),您应该 not 为您的 <math> 标记;例如,不应使用 <m:math> 除了在xhtml文件中 m 通过添加 xmlns:m="http://www.w3.org/1998/Math/MathML" 属性到文件的 <html> 标签。

为了使mathml在最广泛的情况下工作,建议您包括 xmlns="http://www.w3.org/1998/Math/MathML" 所有属性 <math> 文档中的标记(这比使用类似于 m: 上面提到的,因为在HTML5中这些是不推荐的),尽管这不是严格要求的。

下面是包含mathml数学的完整示例页(请参见 MathJax Web Demos Repository 更多)。

<!DOCTYPE html>
<html>
<head>
<title>MathJax MathML Test Page</title>
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script type="text/javascript" id="MathJax-script" async
  src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/mml-chtml.js">
</script>
</head>
<body>

<p>
When
<math xmlns="http://www.w3.org/1998/Math/MathML">
  <mi>a</mi><mo>&#x2260;</mo><mn>0</mn>
</math>,
there are two solutions to
<math xmlns="http://www.w3.org/1998/Math/MathML">
  <mi>a</mi><msup><mi>x</mi><mn>2</mn></msup>
  <mo>+</mo> <mi>b</mi><mi>x</mi>
  <mo>+</mo> <mi>c</mi> <mo>=</mo> <mn>0</mn>
</math>
and they are
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
  <mi>x</mi> <mo>=</mo>
  <mrow>
    <mfrac>
      <mrow>
        <mo>&#x2212;</mo>
        <mi>b</mi>
        <mo>&#x00B1;</mo>
        <msqrt>
          <msup><mi>b</mi><mn>2</mn></msup>
          <mo>&#x2212;</mo>
          <mn>4</mn><mi>a</mi><mi>c</mi>
        </msqrt>
      </mrow>
      <mrow>
        <mn>2</mn><mi>a</mi>
      </mrow>
    </mfrac>
  </mrow>
  <mtext>.</mtext>
</math>
</p>

</body>
</html>

在HTML页面(而不是XHTML页面)中输入MathML表示法时,应该 not 使用自动关闭标记,因为这些不是HTML的一部分,但是应该对所有数学元素使用显式的打开和关闭标记。例如,您应该使用

<mspace width="5pt"></mspace>

而不是 <mspace width="5pt" /> 在HTML文档中。如果使用自关闭表单,某些浏览器将无法正确构建数学树,mathjax将收到损坏的数学结构,而该结构将不会呈现为原来的符号。通常,这会导致部分表达式无法显示。不幸的是,mathjax对此无能为力,因为早在mathjax有机会使用标记之前,浏览器就已经错误地解释了标记。

MathML 有关mathjax的mathml支持的更多信息。

腹水输入

mathjax v2.0通过合并 ASCIIMathML . 这个输入处理器尚未完全移植到mathjax版本3,但是有一个版本的输入处理器使用遗留版本2代码将其修补到mathjax版本3。目前没有一个组合组件包含它,因此需要在mathjax配置中显式地指定它才能使用它。见 AsciiMath 有关详细信息,请参见第页。

默认情况下,您可以将用asciimath编写的数学表达式包围在“back ticks”中,即, `... '.

下面是包含ascimath符号的完整示例页:

<!DOCTYPE html>
<html>
<head>
<title>MathJax AsciiMath Test Page</title>
<script>
MathJax = {
  loader: {load: ['input/asciimath', 'output/chtml']}
}
</script>
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script type="text/javascript" id="MathJax-script" async
  src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/startup.js">
</script>
<body>

<p>When `a != 0`, there are two solutions to `ax^2 + bx + c = 0` and
they are</p>
<p style="text-align:center">
  `x = (-b +- sqrt(b^2-4ac))/(2a) .`
</p>

</body>
</html>

AsciiMath support 有关mathjax的ascimath支持以及如何配置它的更多信息。

将数学放入javascript字符串

如果使用javascript处理数学,并且需要将tex或latex表达式放在字符串文本中,则需要注意javascript使用反斜杠 (\ )作为字符串中的特殊字符。因为tex使用反斜杠来表示宏名,所以您经常需要在javascript字符串中使用反斜杠。为了实现这一点,必须将所有反斜杠加倍,作为javascript字符串的一部分。例如,

var math = '\\frac{1}{\\sqrt{x^2 + 1}}';

当您使用 Latex 宏时,这可能特别令人困惑 \ ,两者都必须加倍, \\ . 所以你会的

var array = '\\begin{array}{cc} a & b \\\\ c & d \\end{array}';

产生两行的数组。