在 Hexo 中修改 KaTeX 的界定符(定界符)
主要涉及 两个位置:主题模板文件和 KaTeX 初始化脚本。
以下是详细操作步骤:
1. 修改位置:主题的 footer
模板文件
KaTeX 的界定符配置在初始化脚本中,通常位于 Next 主题的 footer
模板文件中。
文件路径:
1 | themes/next/layout/_partials/footer.njk |
操作步骤:
-
打开对应的
footer
文件(根据你的主题模板引擎,可能是.njk
或.swig
)。 -
找到引入
auto-render.min.js
的脚本,修改delimiters
参数:1
2
3
4
5
6
7
8
9
10
11
12<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
// 修改这里的 left 和 right 值
{left: '$$', right: '$$', display: true}, // 块级公式
{left: '$', right: '$', display: false} // 行内公式
],
throwOnError: false // 忽略公式错误
});
});
</script> -
将
left
和right
的值改为你想要的界定符。例如:-
改用
\(...\)
和\[...\]
(LaTeX 标准风格):1
2
3
4delimiters: [
{left: '\\[', right: '\\]', display: true}, // 块级公式
{left: '\\(', right: '\\)', display: false} // 行内公式
] -
改用自定义符号(如
@...@
):1
2
3
4delimiters: [
{left: '@@', right: '@@', display: true}, // 块级公式
{left: '@', right: '@', display: false} // 行内公式
]
-
2. 同步修改 Markdown 中的公式写法
修改界定符后,需在文章的 Markdown 中使用新的定界符。例如:
-
原写法:
$E = mc^2$
和$$\sum_{i=1}^n i$$
-
修改后(使用
\(...\)
和\[...\]
):1
2
3
4
5
6行内公式:\\(E = mc^2\\)
块级公式:
\\[
\sum_{i=1}^n i
\\]
3. 处理转义问题
如果界定符包含特殊字符(如 \
或 @
),需确保 Markdown 渲染器不会转义它们:
(1) 在 Hexo 的 _config.yml
中配置
1 | markdown: |
(2) 转义反斜杠(仅限 \(
和 \[
场景)
在 Markdown 中,如果使用 \(...\)
或 \[...\]
,需在公式中写双反斜杠:
1 | \\[ |
4. 测试修改结果
-
清理缓存并生成:
1
hexo clean && hexo g
-
启动本地服务器预览:
1
hexo s
-
检查公式是否按新界定符渲染,打开浏览器控制台(F12):
- 确保无 JS 报错。
- 检查公式是否被正确包裹(如
<span class="katex">
)。
5. 常见问题
问题1:修改后公式未渲染
- 原因:界定符修改未同步到所有位置(如文章中的公式未改用新符号)。
- 解决:全局搜索旧界定符(如
$
),替换为新的。
问题2:\
被转义为 \\
-
原因:Markdown 渲染器自动转义了反斜杠。
-
解决:在 Hexo 配置中关闭转义:
1
2
3markdown:
html: true
typographer: false # 关闭智能符号转换
问题3:与代码高亮冲突
- 现象:
@
或\
被代码语法高亮干扰。 - 解决:避免使用与代码语法冲突的界定符(如
`
或*
)。
示例配置
目标界定符
- 行内公式:
\\(...\\)
- 块级公式:
\\[...\\]
修改后的 footer
模板脚本
1 | <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" |
对应的 Markdown 公式写法
1 | 行内公式:\\( \sqrt{2} \approx 1.414 \\) |
通过以上步骤,即可自定义 KaTeX 的界定符,解决与其他语法(如 Markdown 表格、代码块)的冲突问题。