Pure主题使用Katex渲染Latex公式

Pure主题的数学公式功能并不完善,为了支持Katex,对Pure主题和Hexo配置做了大量修改。

Hexo配置修改

  • Hexo自带的渲染插件不支持数学公式,因此先卸载自带的渲染插件

    npm uninstall hexo-renderer-marked --save

  • 删除其他任何与数学公式有关的插件,如hexo-mathmarkdown-it-katex等等;

  • 删除_config.yaml配置文件里与数学公式有关的部分;

  • 安装新的渲染插件

    npm install hexo-renderer-pandoc --save

  • 安装依赖的软件包pandoc,打开终端运行yay -Syu pandoc

Pure主题修改

打开head.ejs文件,该文件位于themes/pure/layout/_common/,找到

1
2
3
<% if (page.mathjax) { %>
<link href="//cdn.jsdelivr.net/npm/katex@0.9.0/dist/katex.min.css" rel="stylesheet">
<% } %>

修改为

1
2
3
4
5
6
7
8
9
10
<% if (page.katex) { %>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css" integrity="sha384-Xi8rHCmBmhbuyyhbI88391ZKP2dmfnOl4rT9ZfRI7mLTdk1wblIUnrIq35nqwEvC" crossorigin="anonymous">

<!-- The loading of KaTeX is deferred to speed up page rendering -->
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.js" integrity="sha384-X/XCfMm41VSsqRNQgDerQczD69XqmjOOOwYQvr/uuC+j4OPoNhVgjdGFwhvN02Ja" crossorigin="anonymous"></script>

<!-- To automatically render math in text elements, include the auto-render extension: -->
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/contrib/auto-render.min.js" integrity="sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR" crossorigin="anonymous"
onload="renderMathInElement(document.body);"></script>
<% } %>

删除themes/pure/layout/_script/mathjax.ejs文件。

启用数学公式

需要写公式的文章在开头加入

1
katex: true

来测试一下公式渲染吧!

1
2
3
4
5
6
7
8
9
10
11
12
13
$$
\begin{cases}
\nabla\times\vec{E}=-\frac{\partial\vec{B}}{\partial t}\\
\nabla\times\vec{H}=\vec{J_v}+\frac{\partial\vec{D}}{\partial t}\\
\nabla\cdot\vec{D}=\rho_v\\
\nabla\cdot\vec{B}=0
\end{cases}\quad
\begin{cases}
\vec{D}=\epsilon\vec{E}\\
\vec{B}=\mu\vec{H}\\
\vec{J_v}=\sigma\vec{E}
\end{cases}
$$

渲染为 \[ \begin{cases} \nabla\times\vec{E}=-\frac{\partial\vec{B}}{\partial t}\\ \nabla\times\vec{H}=\vec{J_v}+\frac{\partial\vec{D}}{\partial t}\\ \nabla\cdot\vec{D}=\rho_v\\ \nabla\cdot\vec{B}=0 \end{cases}\quad \begin{cases} \vec{D}=\epsilon\vec{E}\\ \vec{B}=\mu\vec{H}\\ \vec{J_v}=\sigma\vec{E} \end{cases} \]