了解MathML
MathML是一种基于XML的,在互联网上书写数学符号和公式的语言。大部分浏览器都支持MathML标签,如果您的浏览器不支持该标签,可以使用最新版的Firefox或Safari浏览器。 对应的标签是 ... </ math>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<msup><mi>a</mi><mn>2</mn></msup>
<mo>+</mo>
<msup><mi>b</mi><mn>2</mn></msup>
<mo>=</mo>
<msup><mi>c</mi><mn>2</mn></msup>
</mrow>
</math>
</body>
</html>
上面的代码输出为 a2 + b2 = c2
MathJax
1、MathJax使用网络字体(大部分浏览器都支持)去产生高质量的排版,使其在所有分辨率都可缩放和显示,这远比使用包含公式的图片要有效得多。 2、使用MathJax显示数学公式是基于文本的,而非图片。它可以被搜索引擎使用,这意味着方程式和页面上的文字一样是可以被搜索的 3、MathJax允许页面作者使用LaTeX符号和 MathML写公式
MathJax原理
在HTML5里出了我们常用的 div, span, a, h1 等标签外,还允许开发人员自定义浏览器标签,但是自定义标签按照约定必须以“-”分割,例如,你也可以自定义标签:,但是不推荐用 ,这主要是为了方便浏览器解析,防止和现有的标签冲突等。
Mathjax通过自定义标签,然后给标签设置class属性,利用字体显示字符,所以你看到“b”不是字母“b”,而是一个矢量图形。
配置
默认情况下,MathJax 使用 ( 和 ) 作为行内公式的开始和结束 但是,你也可以自定义配置,如下使用 和作为公式的开始和结束。
但是,不推荐使用是因为,是美元符号,这会导致 “这个苹果5元,那个苹果6元”,结果系统把$之间的内容当成了公式了。
请注意:和其它系统不同,对于Mathjax的配置,是直接定义一个MathJax对象,然后设置其属性。
<script>
<strong>MathJax = {
tex: {
inlineMath: [['$', '$'], ['\\(', '\\)']]
}
};</strong>
</script>
<script id="MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js">
</script>
一些重要配置
MathJax = {
options: {
skipHtmlTags: [
'script', 'noscript', 'style', 'textarea', 'pre',
'code', 'annotation', 'annotation-xml'
],
includeHtmlTags: {
br: '\n', wbr: '', '#comment': ''
},
ignoreHtmlClass: 'tex2jax_ignore',
processHtmlClass: 'tex2jax_process',
compileError: function (doc, math, err) {doc.compileError(math, err)},
typesetError: function (doc, math, err) {doc.typesetError(math, err)},
renderActions: {...}
}
};
skipHtmlTags配置可以让Mathjax忽略一些标签,例如当你用 包含一些公式时,可能希望MaxJax不把其中的公式进行解析。
includeHtmlTags 可以配置在数学公式里可以出现哪些标签,例如公式里出现 n可用于换行等。
ignoreHtmlClass:可以设置忽略一些class
processHtmlClass:可以设置处理class。
在这个demo里,插入数学公式时使用了如下配置:
let className = 'math-tex';
MathJax = {
options: {
processHtmlClass: className,
ignoreHtmlClass: '.*'
}
};
也就是只处理 class为 math-tex 的标签。