如何在Jekyll中无需div标签用Kramdown渲染MathJax公式?
解决Jekyll+Kramdown+MathJax的公式渲染问题
我完全懂你的无奈——过时的文档真的坑死人,明明Kramdown宣称支持MathJax,结果直接写公式就是不渲染,还得套div绕路。其实问题出在Kramdown的配置没到位,加上你用的是旧版MathJax,导致解析链断了。给你一套流畅的配置方案,一步到位解决:
1. 先在_config.yml里配置Kramdown的数学引擎
Kramdown默认虽声称支持MathJax,但默认可能没启用对应的解析规则。打开站点根目录的_config.yml,添加或修改这段配置:
kramdown: math_engine: mathjax # 告诉Kramdown识别数学公式语法 syntax_highlighter: rouge # 可选,常用代码高亮工具,不影响数学渲染
这个配置会让Kramdown自动识别$$...$$(块级公式)和$...$(行内公式),把它们转换成MathJax能正确处理的结构,不需要再套div避开Markdown解析。
2. 更新MathJax到v3版本(替换你旧的脚本)
你用的MathJax v2已经停止维护了,v3不仅性能更好,配置也更灵活。把布局文件里的MathJax引入代码换成下面这段:
{% if page.math %} <script> MathJax = { tex: { inlineMath: [['$', '$'], ['\\(', '\\)']], // 行内公式的触发标记 displayMath: [['$$', '$$'], ['\\[', '\\]']] // 块级公式的触发标记 } }; </script> <script async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> {% endif %}
这里的配置是让MathJax和Kramdown的语法标记完全匹配,确保解析无缝衔接。
3. 正常写公式就行,不需要套div
现在你在Markdown页面里直接写公式就可以了:
# 测试数学渲染 块级公式: $$ a + b = c $$ 行内公式:这是一个简单的方程 $x = y + z$,直接嵌入文本里。
为什么之前套div能生效?
因为Kramdown不会解析<div>标签内部的Markdown内容,所以$$会原封不动传给MathJax,相当于绕开了Kramdown的解析。但这是治标不治本的办法,正确配置后完全不需要这么做。
如果还是有问题,检查这两点:
- 页面顶部的
math: true有没有加对 - 有没有其他Markdown语法和公式冲突(比如公式前后有没有多余的空格?不过Kramdown对空格容忍度很高)
内容的提问来源于stack exchange,提问作者shevket
相关产品推荐
相关产品推荐

