博客支持数学公式:静态博客加一段脚本的通用做法

更新于

让静态博客支持数学公式,通用做法只有三步:在页面头部引入一个渲染库的脚本和样式,告诉它认哪几种定界符,然后在文章里写第一条公式验证。Hexo、Hugo、Jekyll 的区别只在「这段脚本放进哪个模板文件」,渲染库本身的写法三者完全一样。下面先给三个生成器的位置对照,再按三步讲,最后列一张常用命令表和几个常见问题。

三个生成器放脚本的位置对照

生成器 放脚本的位置 说明
Hexo 站点根目录 scripts/ 下新建一个 js 文件,用注入器写进 head 不改主题文件,换主题不丢
Hexo(另一种) 主题的布局模板里 head 那一段 文件名随主题不同,换主题要重加
Hugo layouts/_partials/math.html,再在 baseof.html 的 head 里引用 旧版本目录名是 partials
Jekyll 站点根目录的 _includes/head.html 用主题默认的 head 时,先把它复制出来再改

Hexo 的注入器写法如下,文件放在站点根目录的 scripts/math.js,生成时自动加载:

hexo.extend.injector.register("head_end", `
<link rel="stylesheet" href="/katex/katex.min.css">
<script defer src="/katex/katex.min.js"></script>
<script defer src="/katex/contrib/auto-render.min.js"
  onload="renderMathInElement(document.body)"></script>
`);

Hexo 的主题各不相同,注入器绕开了主题文件,是换主题最省事的一种。

Hugo 的做法依据其文档「Mathematics in Markdown」一页(页面更新于 2026 年 8 月,核实日期 2026-09-27):先在配置里打开 Goldmark 的 passthrough 扩展,让公式原样穿过 Markdown 转换,再用 math 参数决定哪些页面加载脚本。

[markup.goldmark.extensions.passthrough]
enable = true
[markup.goldmark.extensions.passthrough.delimiters]
block = [['\[', '\]'], ['$$', '$$']]
inline = [['\(', '\)']]
[params]
math = true

博客接入公式渲染的三步

三步接入

  1. 引入脚本:把 KaTeX 或 MathJax 的发布文件放进博客的静态目录,在上表的位置写 link 与 script 标签。静态目录在 Hexo 是 source/,Hugo 是 static/,Jekyll 是站点根目录。
  2. 设定界符:默认配置两个库都不认单个美元符号。想用它,在配置里显式加上;不想和金额冲突,就只用 \( 与 \)。
  3. 写首条公式:新建一篇文章,写一行行内公式和一段独立公式,本地预览一遍。能看到排好的公式,说明前两步都对了。

首条公式建议选一条带分式和上下标的,比如等比数列前 n 项和,一眼就能看出分式有没有排出来:

S_n=\frac{a_1\left(1-q^{n}\right)}{1-q}\quad(q\neq 1)

等比数列前 n 项和公式,q 不等于 1

常用命令速查

下面这些写法在 KaTeX 与 MathJax 里都能用,适合写博客时对照:

写法 输入方式 效果
a_1 行内 下标 a₁
q^{n} 行内 上标 qⁿ
\frac{a}{b} 行内或独立 分式
\sqrt{x} 行内 √x
\neq 行内 ≠
\le、\ge 行内 ≤、≥
\sum_{k=1}^{n} 独立更清楚 带上下限的 ∑
\lim_{n\to\infty} 独立 极限,n→∞ 写在下方
\left( … \right) 行内或独立 随内容变高的括号
\quad 行内或独立 一个字宽的空白
\text{当} 公式里夹中文 直立的中文
\begin{cases} 独立 分段函数的大括号

等比数列在 |q| < 1 时的求和极限,正好把表里的极限、分式、绝对值三种写法串在一起:

\lim_{n\to\infty}S_n=\frac{a_1}{1-q}\quad(|q|<1)

等比数列求和的极限:|q|<1 时极限为 a₁/(1−q)

接入后常见的四种异常

  • 下划线变成斜体:Markdown 把两个下划线之间的文字当成强调,a_1 和 b_2 之间的内容变斜、下划线消失。Hugo 用上面的 passthrough 能避开;Hexo、Jekyll 里可以在公式的下划线前加反斜杠写成 a\_1,转换后页面上留下的正好是渲染库要的下划线。
  • Jekyll 里单行也要写双美元符号:Jekyll 默认的 kramdown 用两个美元符号表示公式,放在段落中间就是行内公式,单独成段就是独立公式。
  • 样式文件漏了:用 KaTeX 时没引入 katex.min.css,公式会重复显示一遍或错位。
  • 只有首页不渲染:摘要是截取的,公式被截成半条就排不出来,给摘要设好分隔位置。

博客公式四种常见问题与原因对照

一套生成器配好之后,建议把等比数列那条式子留作测试文章,以后换主题、升级生成器时先看它还在不在。

延伸阅读

  • 网页显示数学公式:MathJax 与 KaTeX 两种接入的选型与代码对照
  • KaTeX语法:常用命令与渲染效果速查

常见问题

评论区里的公式会渲染吗?
多数情况下不会。评论系统一般在页面加载之后才把评论插进来,有的还放在独立的内嵌框里,正文那一次渲染已经结束,照不到这些内容。要让评论里的公式也显示,得在评论加载完成后再对评论区域调用一次渲染函数,能不能做取决于评论系统有没有提供加载完成的回调。