Hexo -15- 解决 Hexo Mathjax 无法显示多行公式的问题

本文最后更新于:2022年8月5日 晚上

Hexo比较好用的公式插件是Mathjax,但由于swig的文件解析机制,使得多行公式无法在Hexo中正常显示,本文介绍该问题的解决方法。

问题复现

  • 准备输入一个矩阵:
$$ A = \left( {\begin{array}{*{20}{c}} 1&{}&{}&{}\\ {}&1&{}&{}\\ {}&{}&1&{}\\ {}&{}&{}&1 \end{array}} \right) $$
  • 再输入一个多行公式
$$ \begin{array}{l} z &= {(x + y)^2}\\ &= {x^2} + {y^2} + 2xy \end{array} $$

问题1

  • 此时运行 hexo ghexo s有可能报错:
1
2
3
4
Unhandled rejection Nunjucks Error:  [Line 11, Column 65] expected variable end
===== Context Dump =====
=== (line number probably different from source) ===

问题2

  • 或者显示公式不正常,多行公式会挤成一行:

原因分析

问题1

  • 由于hexo解码时关注{{,}},%% 等连续字符,会将这部分代码解读为其他带有特殊含义的内容
  • 如果公式中恰巧出现了此类字符,会报出上述错误

问题2

  • 由于hexo在公式中的\\错会成了转义符,也就是说他只看见了一个反斜杠,不会执行换行命令,导致公式堆成一行

解决方案

临时方案

针对问题1
  • 可以在连续的 { } %中间插入空格,分开就没事了
针对问题2
  • 可以将\\换成\\\\,可以实现公式的多行正确显示

终极方案

  • 在官方文档中提到了可以为hexo提供标记,阻止其按照自己的规则解释我们的字符串,显示其原本的含义

  • 标记为

    1
    2
    3
    {% raw %}
    ...
    {% endraw %}

Hexo -15- 解决 Hexo Mathjax 无法显示多行公式的问题
https://www.zywvvd.com/notes/hexo/website/15-formula/formula-error/
作者
Yiwei Zhang
发布于
2020年12月22日
许可协议