0%

Hexo中修改KaTeX界定符

在 Hexo 中修改 KaTeX 的界定符(定界符)

主要涉及 两个位置主题模板文件KaTeX 初始化脚本
以下是详细操作步骤:


KaTeX 的界定符配置在初始化脚本中,通常位于 Next 主题的 footer 模板文件中。
文件路径:

1
2
3
themes/next/layout/_partials/footer.njk

themes/next/layout/_partials/footer.swig

操作步骤:

  1. 打开对应的 footer 文件(根据你的主题模板引擎,可能是 .njk.swig)。

  2. 找到引入 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>
  3. leftright 的值改为你想要的界定符。例如:

    • 改用 \(...\)\[...\](LaTeX 标准风格):

      1
      2
      3
      4
      delimiters: [
      {left: '\\[', right: '\\]', display: true}, // 块级公式
      {left: '\\(', right: '\\)', display: false} // 行内公式
      ]
    • 改用自定义符号(如 @...@):

      1
      2
      3
      4
      delimiters: [
      {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
2
3
4
markdown:
html: true # 允许 HTML 标签
breaks: false # 关闭自动换行转换
linkify: false # 关闭自动链接识别(避免 @ 被误识别)

(2) 转义反斜杠(仅限 \(\[ 场景)

在 Markdown 中,如果使用 \(...\)\[...\],需在公式中写双反斜杠:

1
2
3
\\[
\int_a^b f(x) dx
\\]

4. 测试修改结果

  1. 清理缓存并生成:

    1
    hexo clean && hexo g
  2. 启动本地服务器预览:

    1
    hexo s
  3. 检查公式是否按新界定符渲染,打开浏览器控制台(F12):

    • 确保无 JS 报错。
    • 检查公式是否被正确包裹(如 <span class="katex">)。

5. 常见问题

问题1:修改后公式未渲染

  • 原因:界定符修改未同步到所有位置(如文章中的公式未改用新符号)。
  • 解决:全局搜索旧界定符(如 $),替换为新的。

问题2:\ 被转义为 \\

  • 原因:Markdown 渲染器自动转义了反斜杠。

  • 解决:在 Hexo 配置中关闭转义:

    1
    2
    3
    markdown:
    html: true
    typographer: false # 关闭智能符号转换

问题3:与代码高亮冲突

  • 现象@\ 被代码语法高亮干扰。
  • 解决:避免使用与代码语法冲突的界定符(如 `*)。

示例配置

目标界定符

  • 行内公式:\\(...\\)
  • 块级公式:\\[...\\]
1
2
3
4
5
6
7
8
9
10
11
12
13
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" 
onload="
document.addEventListener('DOMContentLoaded', function() {
renderMathInElement(document.body, {
delimiters: [
{left: '\\[', right: '\\]', display: true},
{left: '\\(', right: '\\)', display: false}
],
throwOnError: false
});
});
">
</script>

对应的 Markdown 公式写法

1
2
3
4
5
6
行内公式:\\( \sqrt{2} \approx 1.414 \\)

块级公式:
\\[
\int_{-\infty}^\infty e^{-x^2} dx = \sqrt{\pi}
\\]

通过以上步骤,即可自定义 KaTeX 的界定符,解决与其他语法(如 Markdown 表格、代码块)的冲突问题。