为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>≠</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>−</mo>
<mi>b</mi>
<mo>±</mo>
<msqrt>
<msup><mi>b</mi><mn>2</mn></msup>
<mo>−</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}';
产生两行的数组。