Table of Contents
MathML
MathML是完全按照语义网的标准写的,是XML的一个子集。结合适当的CSS与字体,现代浏览器能够原生支持MathML数学公式显示。
MathML分为content和presentation两种,content的MathML才是真正语义化的。语义化的一个好处就是,可以通过parse MathML来实现符号计算……
MathML源文档是绝对难以看懂的,因此MathML一般由机器来写、来解析阅读。所以人在用Markdown写文档时对于数学公式还是用LaTeX语法好了,牺牲点语义性,但不至于肉眼完全看不懂。
LaTeX
LaTeX是各种TeX宏指令(每个指令由一系列TeX指令组成)的组合。严格说来,TeX是一套排版指令,是一套排版系统。LaTeX在设计时,更加强调了语义化的元素,比TeX的语义化强多了!然而,LaTeX在具体处理数学公式时,却仍然不能完全体现数学公式的语义,有很多命令更偏向于显示排版。一言以蔽之,LaTeX有语义化的成分,但“语义”得不够彻底。
In-line与Display
在这里我们可以看到In-line与Display两种形式的公式是如何输入的:
- In-line:
$…LaTeX code…$
- Display:
$$…LaTeX code…$$
另外,这里明示了Inline and Displayed Formulas的输入方法。
LaTeX在轻量级标记语言中的书写
在reStructuredText中,Display就用.. math::
,Inline就用:math:
,然后直接写LaTeX语句,无需额外的包裹符号,非常简便。
在Markdown中,Display直接写$$...LaTeX code...$$
,这个没问题;写Inline公式时,MathJax默认是用(...LaTeX code...)
,使用$...LaTeX code...$
无效,但Markdown parser会将(
与)
转义为(与)(尽管在Markdown中可直接写(、)),导致mathjax.js无法作用。考虑的解决办法是在Markdown中将LaTeX表达式用(
与)
包裹起来。
MathJax
MathJax通过自身的JavaScript库与特定的字体,将LaTeX或MathML语句render为网页上的数学公式,并提供LaTeX与MathML之间的互相转换。
MathJax默认Inline用(...)
(使用$...$
无效),Display用$$...$$
。
MathJax的输入可以是LaTeX notation,也可以是MathML notation(当然也可以是AsciiMath notation)。
一旦MathJax 通过LaTeX或MathML notation render公式后,在网页中右键单击公式会弹出菜单,在Format中可选择LaTeX还是MathML(MathJax可以把输入的LaTeX转为MathML,也可把输入的MathML转为LaTeX),选择后可以在Show Source中查看源码。
在Settings-Math Renderer中,可选择是用HTML-CSS还是用MathML方式来render。用MathML方式来render,则说明是调用浏览器本身的显示MathML的功能。当Settings-Math Renderer选择MathML时,可以把MathJax单独理解为一个解析器,把人输入的LaTeX notation转换成MathML notation,然后浏览器就直接显示出来了。