在 Hexo 中完美使用 Mathjax 输出数学公式

本文主要讲述怎样在 Hexo 中使用 Mathjax 和 怎样解决 MarkdownMathjax 的一些冲突的问题. 目前在纯正的 Markdown 里我没找到如何让 MathjaxHexo 完美共存的方法. 所以我的标题还是夸张了点…

常规方法

在 Hexo 中使用 Mathjax 最常规的方法就是主题的 after_footer.ejs 里加入 (该 Mathjax 代码根据 Math StackExchange 所用修改)

接下来的使用方法就和平常使用 Mathjax 一样了.

PS: mathsize: "90%" 这里可以适当修改 Mathjax 公式的大小. 如果需要给公式编号的话, 则需要如下

另外我们也可以重新定义命令, 例如我所使用的

其中, 这段就是

例如, 如果我要输出 \epsilon, 现在我只要输入 \e 即可.

不过这个方法有个令人不爽的缺点, 众所周知加载 Mathjax 的数学公式时是很消耗资源和时间的. 即使在网页中并没有生成公式时, 也会加载最基本 MathJax.js, 而这个文件也有 58KB. 为解决这个问题可参考如下进阶版.

进阶版

我们可以考虑只有在用到公式的页面才加载 Mathjax, 因此需要加载一些控制.

首先将上面的代码写成一个 mathjax.ejs 文件放在 partial 目录下, 并且在 Hexo 的根目录的 _config.yml 里面加入 mathjax: true, 接下来在 after_footer.ejs 里加入

在文章需要调用 Mathjax 时, 只需在 front-matter 前加上 mathjax: true 即可, 即

缺点

Markdown 里使用 Mathjax 有一个很大的缺点, 比如下面这个问题.

这个的解决办法可以使用转义符, 即如下输出即可

解决办法

除了上述方法以外, 还有下面几种.

插件

安装插件 Hexo-math, 安装方法如下, 依次为

Hexo 文件夹中执行:

_config.yml 文件中添加:

对于不含特殊符号的公式,可以直接使用 MathJaxinline math 表达式. 如果含有特殊符号,则需要人肉 escape,如 \ 之类的特殊符号在 LaTex 表达式中出现频率很高,这样就很麻烦,使用 tag 能够省不少事。

具体用法见 Hexo MathJax插件.

使用 Pandoc 编译

即更换 Markdown 解析器, 使用语法更 strongpandoc-markdownhexo 下可使用 hexo-renderer-pandoc

貌似我用了没使用出效果…, 不知道为什么

修改 Markdown

该冲突主要是由于对 \_ 的转义造成的。找到 marked 脚本文件, 通常在

先备份一下,然后修改第449行

第847行

修改为:

一般来说不推荐修改.

发表评论

电子邮件地址不会被公开。 必填项已用*标注