Skip to content

启用 Latex 支持

JasonSun edited this page Jul 18, 2021 · 4 revisions

为 Archer 主题启用 LaTeX 数学公式支持

这里提供三种方案,供君参考。

使用 hexo-math 渲染 LaTeX

请确保您使用的 Hexo 版本 >= 5.0

hexo-math 通过 Hexo 的标签插件功能,实现在博客中嵌入 KaTeX 或 MathJax。

这种方式的优点是:渲染操作在服务端完成,而无需单独在客户端引入任何 JavaScript 库。轻量级,配置简便。

缺点是:由于渲染在服务端完成,渲染出的结果是一张 SVG 图片,无法复制其中的值,更没有右键菜单支持。


在 Hexo 根目录执行:

npm install hexo-math --save

作为最小实现,您可以在任意文章中插入以下内容查看是否渲染成功:

{% mathjax %}
\frac{1}{x^2-1}
{% endmathjax %}

包括 CSS 在内的更多配置,可以参考其官方介绍的内容。

使用 hexo-renderer-pandoc 启用完整的 LaTeX 支持

请确保您的 Archer 主题版本 >= 1.6.3

hexo-renderer-pandoc 是为 Hexo 提供的一款 Markdown 渲染引擎插件,它能够将 Pandoc's Markdown 渲染为 HTML 文档。

这种方式的优点是:能够引入包括右键菜单在内的完整 LaTeX 数学公式支持。

缺点是:配置较繁琐,有第三方软件需求。


Archer 主题已经内置了 MathJax,但是您需要替换 Hexo 默认的 Markdown 渲染引擎来支持解析 LaTeX 数学公式语法。

请留意:替换渲染引擎可能会带来编写上的区别,或导致一些潜在的问题。例如需要修改插入表格和图片的语法等。

首先,确保系统中已经安装了 pandoc,版本不低于 2.0。特别的,为了通过 Github Actions 实现安装 pandoc 并自动部署 Hexo 博客,您可以参考这个工作流的实现。

接下来,在 Hexo 根目录下执行下面的命令:

# 卸载默认的渲染引擎
npm uninstall hexo-renderer-marked --save
# 安装 hexo-renderer-pandoc
npm install hexo-renderer-pandoc --save

然后,在 Archer 主题目录下的 _config.yml 设置以启用 LaTeX 数学公式:

math:
  mathjax:
    enable: true

最后,在需要启用 LaTeX 数学公式的文章的 Front-matter 中添加 mathjax: true 字段即可。测试是否启用成功,您可以在这篇文章中添加下面的内容:

\begin{equation}
\left\{
\begin{array}{lr}
x=\dfrac{3\pi}{2}(1+2t)\cos(\dfrac{3\pi}{2}(1+2t)), & \\
y=s, & 0 \leq s \leq L,|t| \leq1. \\
z=\dfrac{3\pi}{2}(1+2t)\sin(\dfrac{3\pi}{2}(1+2t)), &  
\end{array}
\right.
\end{equation}

使用 hexo-renderer-kramed 启用完整的 LaTeX 支持

请确保您的 Archer 主题版本 >= 1.6.3

此方案基于 PR #268,作者相关博文链接

您也可以更换 Hexo 渲染引擎为 hexo-renderer-kramed,它基于 Hexo 默认的渲染引擎,对原有 Markdown 语法支持较好,也无需第三方软件。但此渲染引擎也存在一些问题,需要手动编码适配

在 Hexo 根目录下执行下面的命令:

# 卸载默认的渲染引擎
npm uninstall hexo-renderer-marked --save
# 安装 hexo-renderer-kramed
npm install hexo-renderer-kramed --save

然后,在 Archer 主题目录下的 _config.yml 设置以启用 LaTeX 数学公式:

math:
  mathjax:
    enable: true

最后,在需要启用 LaTeX 数学公式的文章的 Front-matter 中添加 mathjax: true 字段即可。测试是否启用成功,您可以在这篇文章中添加下面的内容:

\begin{equation}
\left\{
\begin{array}{lr}
x=\dfrac{3\pi}{2}(1+2t)\cos(\dfrac{3\pi}{2}(1+2t)), & \\
y=s, & 0 \leq s \leq L,|t| \leq1. \\
z=\dfrac{3\pi}{2}(1+2t)\sin(\dfrac{3\pi}{2}(1+2t)), &  
\end{array}
\right.
\end{equation}

关于手动编码适配的问题,可以参考下面的这些博客: