解决Markdown与Katex间的语法冲突
偶遇问题
今天写博客时,发现有几行公式的渲染总是出问题。
如,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])+?)\*(?!\*)/ |
即可解决问题
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Rashawn's Blog!