Hugo Math Sample
有时候,会有需要在网页中展示数学公式。 与代码高亮不同, Hugo 本身是不支持渲染数学公式的。 因此,只能用前端的方式实现。
在已经生成好的HTML页面中,使用JavaScript来渲染LaTeX 形式的数学公式,是一个可行思路。 MathJax 是这方面最流行的JavaScript库。
官方文档的MathJax 使用方案有一些问题,本文提供的方案胜于官方。
MathJax简介
MathJax 是一个开源的JavaScript数学公式渲染引擎,支持LaTeX、MathML、AsciiMath等形式的数学公式,并且适配所有现代的浏览器。
A JavaScript display engine for mathematics that works in all browsers.
No more setup for readers. It just works.
与代码类似,数学公式也有有行内(inline)公式和区块(block)公式。 前者需要与同行的其它文字混排,而后者需要独占一行,居中显示。 以下展示了两个行内公式和一个区块公式的测试代码,可以放到Markdown中测试MathJax的渲染效果。
测试样例
$$
AveP = \int_0^1 p(r) dr
$$
(c)(r)等转义问题
默认情况下,(c)
可转换为©,(r)
可转换为®。
$$
AveP = \int_0^1 p(r) dr
$$
于是,以上公式会转义为:
以上提到的<div>
方案,是可以解决这个问题的。 此外,要禁用全局的这种转义,也可以在 config.toml
中添加以下配置,禁用该功能。
[blackfriday]
smartypants = false
效果如下:
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}$$