博客配置 LaTeX 过程中遇到的问题

本文最后更新于:2023年7月29日

记录一下博客配置 过程中遇到的问题。

Fluid 主题的 配置很简单,手册里有详细的教程。考虑到 KaTeX 有小部分 语法不支持,所以我配置的是 MathJax 。

但是当我写完一篇文章发布后,我发现\overline命令生成的上划线无端消失了,就像 变成了 。经过一番搜索,我在 github 上看到了相关的 issue:在浏览器的某些缩放下,上划线会消失,不知道这个 bug 什么时候会被修复。不过 issue 里提到了一个解决办法:将公式渲染为 SVG 就可以正常显示了。

有两种方案可以更改公式的显示方式:

  • 读者手动更改,右键数学公式打开扩展功能->Math settings->Math Renderer->SVG。但是这样很不方便,并且我觉得不能依赖读者自己调节相关显示。
  • 使网页默认以 SVG 格式显示。但是我完全不懂前端,利用 Hexo 和 Fluid 搭建的博客对我来说就像一个黑箱,我能做的只是修改配置文件中的一些参数,但是他们并没有把我想要的功能写进配置文件。因此这个方法也行不通。

秉持着“我遇到的问题一定有人也遇到过”的原则,我进行了进一步的搜索。

最后我在一篇博客中发现了解决办法。借助hexo-filter-mathjax插件,我们就可以实现后端渲染。

首先卸载其他的公式相关插件,如hexo-math,然后安装hexo-filter-mathjax插件,建议配合hexo-renderer-pandoc一起使用(本地可能也要装pandoc)。

1
2
npm i hexo-filter-mathjax
npm i hexo-renderer-pandoc

其原理大概是渲染器 pandoc 会先将Markdown文件中的 代码渲染成 Mathjax 代码,而后使用 Mathjax 官方提供的Node.js的库将 Mathjax 代码渲染成 SVG 嵌入 html 。并且采用后端渲染方案后,由于不用加载 js 文件,网页渲染速度变快了不少。

添加physics宏包支持

MathJax 从v3.0 开始支持braket 和 physics 宏包。对于笔者来说,physics 宏包是非常有用的,它定义了相当多的宏,让物理公式的输入更加方便快捷。也正因为它定义了相当多的宏, MathJax 默认状态下不支持该宏包

hexo-filter-mathjax插件提供了配置扩展的接口,但是我并不清楚应该填入什么样的内容。

1
2
3
extension_options: {}
# you can put your extension options here
# see http://docs.mathjax.org/en/latest/options/input/tex.html#tex-extension-options for more detail

最后经过摸索,找出了一个可行的办法:修改mathjax-full\js\input\tex\AllPackages.js中的exports.AllPackages,加入physics,使其默认加载physics宏包。

修改后的结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
exports.AllPackages = [
'base',
'action',
'ams',
'amscd',
'bbox',
'boldsymbol',
'braket',
'bussproofs',
'cancel',
'cases',
'centernot',
'color',
'colortbl',
'empheq',
'enclose',
'extpfeil',
'gensymb',
'html',
'mathtools',
'mhchem',
'newcommand',
'noerrors',
'noundefined',
'upgreek',
'unicode',
'verb',
'configmacros',
'tagformat',
'textcomp',
'textmacros',
'physics'
];

但是这样无法避免设置在更新之后被覆盖!
笔者尚未找出更优雅的方式。

2022.07.30更新

作者在我提的 issue 中给出了配置说明,顺便我的 issue 帮他修了一个 bug(**)。

按照作者给出的方法修改后就可以愉快地使用physics宏包和其他宏包了。

hexo-filter-mathjax在0.9.0版中已经修复上文提到的 issue 中的问题

1
2
3
4
5
6
7
8
9
10
11
12
\dd{(x^2)}=2x \dd{x}

\bra{\psi} \quad \ket{\psi}

\laplacian{\Psi} \quad \curl{\vb{a}} \quad \div{\vb{a}} \quad \grad{\Psi}

\begin{vmatrix}
1 & 2\\
3 & 4\\
\end{vmatrix}

\verb|\sqrt|

一些感想

上文提到过,利用 Hexo 和 Fluid 搭建的博客对我来说就像一个黑箱,这样对于用户虽然简单,但也是一种束缚。

用户只能在作者的配置文件中做一些修改,很多涉及底层的修改都显得比较困难。

我们应该如何去看待这种黑箱呢?

其实这和现代社会很类似,我们并不理解它的底层逻辑,甚至我们也不了解每天随处可见的物品,比如手机的原理,公交车的调度等等。

那我们又应该以什么样的态度去看待我们的日常生活呢?