You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

markdown_it转HTML后公式失定界符,MathJax无法渲染math类元素公式

问题:markdown_it转换后公式丢失定界符,MathJax无法正常渲染

问题说明

使用markdown_it将Markdown转换为HTML时,公式的定界符被移除,导致MathJax无法识别并渲染公式。

当前MathJax配置

<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<script type="text/javascript">
var MathJax = {
  tex: {
    inlineMath: [ ["\(","\)"] ],
    displayMath: [ ["\[","\]"] ],
    processEscapes: true,
    processEnvironments: true
  },
  options: {
    ignoreHtmlClass: ".*|",
    processHtmlClass: "math"
  }
};
</script>

转换后的HTML代码

<p>一个有理数集示例:<span class="math inline">\begin{matrix}
L &amp; \  = \{ x \mid x \in \mathbb{Q},x \leq 0\} \cup \left\{ x \mid x \in \mathbb{Q},x &amp;gt; 0,x^{2} &amp;lt; 2 \right\} \\
U &amp; \  = \mathbb{Q} - L = \left\{ x \mid x \in \mathbb{Q},x &amp;gt; 0,x^{2} &amp;gt; 2 \right\} \\
\end{matrix}</span> 。<br />
2.  戴德金分割的一个性质(有理数集$\mathbb{Q}$在实数集$\mathbb{R}$中的稠密性):对于任意两个实数$\alpha$和$\beta$,若$\alpha &amp;gt; \beta$,总能找到一个实数(尤其是有理数)$r$介于两者之间,即$\alpha &amp;gt; r &amp;gt; \beta$(因此存在无穷多个这样的有理数)。</p>

解决方案

方案1:配置markdown_it保留公式定界符

markdown_it默认会移除公式定界符,需启用专用插件来处理MathJax公式。比如使用markdown-it-mathjax3插件:

  1. 安装插件:
pip install markdown-it-mathjax3
  1. 代码中启用插件:
from markdown_it import MarkdownIt
from markdown_it_mathjax3 import mathjax3_plugin

md = MarkdownIt().use(mathjax3_plugin)
html = md.render(你的Markdown内容)

方案2:修改MathJax配置,直接识别无定界符公式

无需修改markdown_it转换逻辑,调整MathJax配置让它直接处理带math类的元素内的公式:

var MathJax = {
  tex: {
    inlineMath: [ ["\(","\)"] ],
    displayMath: [ ["\[","\]"] ],
    processEscapes: true,
    processEnvironments: true,
    processClass: "math" // 新增:处理带math类元素内的TeX代码
  },
  options: {
    ignoreHtmlClass: ".*|",
    processHtmlClass: "math"
  }
};

方案3:手动为转换后的公式添加定界符

用HTML处理工具(比如BeautifulSoup)在转换后补全定界符:

from bs4 import BeautifulSoup

soup = BeautifulSoup(转换后的HTML, 'html.parser')
# 为行内公式添加\( \)
for inline_math in soup.find_all('span', class_='math inline'):
    inline_math.string = f"\({inline_math.string}\)"
# 为块级公式添加\[ \]
for display_math in soup.find_all('div', class_='math display'):
    display_math.string = f"\[{display_math.string}\]"
处理后的HTML = str(soup)

内容的提问来源于stack exchange,提问作者iMath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 22:55:32