偶遇问题

今天写博客时,发现有几行公式的渲染总是出问题。

如,markdown原文为

1
若$A=\{A_{i1},A_{i2},...,A_{ik}\}$,其中$A_{i1},A_{i2},...,A_{ik}$是$A_1,A_2,...,A_n$中的一部分,则$A$称为属性列或属性组

预期渲染效果应该为

但实际效果却是

分析问题

Hexo进行markdown渲染的机制为,先将markdown文本转换为html文件,再对html进行渲染,因此,通过生成的html文件,可以较直观地观察出问题所在

找到对应的html文件,上述文本对应的html语句为

1
<li>若$A={A<em>{i1},A</em>{i2},…,A<em>{ik}}$,其中$A</em>{i1},A<em>{i2},…,A</em>{ik}$是$A_1,A_2,…,A_n$中的一部分,则$A$称为属性列或属性组</li>

可以看到,原先语句中连续为连续下标使用的下划线_被转换为了强调标签<em></em>——即markdown语法中下划线的用法。由此可以判断,问题来源于Markdown与Katex的语法冲突

解决问题

解决方式参考博文让 Hexo 搭建的博客支持 LaTeX

对kramed默认的语法规则进行修改

打开~/blog/node_modules/kramed/lib/rules/inline.js文件,把inline中的em变量修改为:

1
em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/

即可解决问题