0%

使用mathjax引擎在Markdown中插入数学公式

说明
1. 部分参考自博客[始终]上文章:解决MathJax与Markdown的冲突
2. 部分参考自博客[天空的城]上的文章:Hexo下mathjax的转义问题

启用Mathjax插件

  1. 安装:cd进入Hexo的根目录

    1
    npm install hexo-math --save

  2. 配置

    在站点配置文件_config.yml中加入下述代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    math:
    engine: 'mathjax' # or 'katex'
    mathjax:
    src: custom_mathjax_source
    config:
    # MathJax config
    katex:
    css: custom_css_source
    js: custom_js_source # not used
    config:
    # KaTeX config

NexT如何集成mathjax?

可以在next文件中的主题配置文件_config.xml下做类似如下配置后便可用:

1
2
3
4
5
# MathJax Support
mathjax:
enable: true
per_page: false
cdn: //cdn.bootcss.com/mathjax/2.7.1/latest.js?config=TeX-AMS-MML_HTMLorMML

如果框架不提供配置怎么集成mathjax?

只要在需要集成的页面上加载一个script即可

1
2
3
<script type="text/javascript"
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>

如何复制别人的mathjax代码?

  1. 可以查看网页源码。

  2. 可以直接在公式上右键,按照如下图的操作后便可看到代码。

  3. 在线识别手写数学公式并转换为的mathjax代码网站

MathJax与Markdown的冲突

MathJax是一个JavaScript引擎,能够将LaTeX语法书写的公式在网页上显示出来。Markdown是一种轻量级的标记语言。用Markdown书写的文章,可以用Markdown解释器处理成标准的HTML文档。因此Markdown很适合用来写博客。

在Markdown中,下划线_被保留,用作标记符号。比如_Slant_会生成倾斜的_Slant_。在LaTeX中,下划线_被用作下标记号。比如x_i会生成\(x_i\)

由于 Markdown 在 MathJax 之前起作用,有时下标记号会被 Markdown 吃掉,变成 HTML 标记<i>而失去 LaTeX 的下标效果,造成数学公式显示不正常。

比如This is an example: $f_i = f_{i + 1}$里的两个下划线会被Markdown理解成倾斜的标记,显示成这样:

解决方案

  1. 更换Hexo的markdown引擎

    把Hexo默认的渲染markdown的引擎替换成插件pandoc(hexo-renderer-pandoc)进行渲染。但pandoc的语法与markdown有些微的差异,需要注意。

    • 安装pandoc

    • cd进入Hexo的根目录,卸载Hexo默认的markd,再安装pandoc

      1
      2
      npm uninstall hexo-renderer-marked --save
      npm install hexo-renderer-pandoc --save