Yingjie

Blogdown无法显示公式的坑与及解决方案

薛英杰 / 2021-10-28


一段时间没有再发帖了,昨天准备更新帖子时,发现以前发的帖子中所有公式都无法正常显示,以为是自己在更新的过程中,将关于公式显示的相关配置文件修改,导致所有帖子的公式无法显示。检查了n次配置文件,花了两天时间,一个错误都没有发现。

只要思想不滑坡,办法总比困难多

寻找错误两天时间,解决问题二十分钟。查阅了一些资料,发现网页上的数学公式显示都是基于MathJax来实现,它是一个基于Ajax技术的数学表达式显示解决方案,能够在Html页面显示LaTex和MathML数学符号,支持大部分浏览器,不需要插件,额外字体或安装特殊的阅读器,支持复制/粘贴。如果浏览器支持mathml,则mathjax可以将tex标记转换为mathml语言,来加速渲染。MathJax提供了三种使用途径支持数学公式:

1.直接使用MathJax的CDN进行调用。

2.使用针对不同平台开发的 MathJax 插件。

3.本地安装 MathJax 的内容然后调用。

大家经常使用的方式也是方式1,如果网络没有问题直接直接用 CDN 是最省事的办法,操作简单,不占本地存储空间。理论上任何平台都允许调用 MathJax 的代码,只需要在heade标签加入引用cdn地址的mathjax文件。

blogdown搭建的网页显示数学公式也是采用该方式,具体配置参考谢老大的教材,打开连接后直接搜索Mathjax,对应位置就是讲解公式文件配置。按照教程配置了不下十次还是没有解决这个问题,浏览了许多网站才发现是由于cndjs上托管的Mathjax无法打开的缘故,不再支持MathJax的调用,所以导致我帖子中的公式无法正常显示。原来blogdown主题默认的MathJax也无法正常显示。比如:https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js。这可能由于中美科技封锁导致,免费的MathJax资源不再让中国享用。昨天用于托管我博客的网站netlify.app在国内也无法登录,还是请远在新加坡国立的闲居帮忙重新托管了博客。

后来在hugo-xmin主题中找到Rstuio的MathJax:https://mathjax.rstudio.com/latest/MathJax.js,发现还能正常使用,替换主题中对应的MathJax,我的博客就能显示公式了。

你要是想测试MathJax是否有效,可以将下述代码复制到txt文档中,用浏览器打开就检查公式能否正常显示。

<!DOCTYPE html>
<html>
<head>
<title>MathJax TeX Test Page</title>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
</script>
<script type="text/javascript"
  src="https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-MML-AM_CHTML">
</script>
</head>
<body>
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}.$$
</body>
</html>

结果如下:

最后分享几个MathJax学习和使用的网站:

MathJax 官网

MathJax中文文档

CDN 关闭声明

cdnjs MathJax托管网站