1. 问题描述
写《信息量&信息熵&信息增益》时,用到了一些数学公式。但是,在使用hexo生成页面后,这些数学公式并没有被正确显示。查找资料发现markdwon本身的特殊符号与latex中的符号会出现冲突:
1、在markdown中,_是斜体,但是在latex中,却有下标的意思。
2、在markdown中,\\会被转义为\,这样也会影响影响mathjax对公式中的\\进行渲染。
解决办法有三种,手动添加转义、更换hexo的markdown渲染引擎和修改hexo的渲染代码。郝同学更喜欢第三种,经过尝试,完美解决问题,本文记录下解决问题的过程。
2. 解决问题
2.1. 确认开启mathjax
以郝同学使用的yilia主题为例,主题本身已经集成了mathjax,其他主题可以参考添加。
在yilia\layout\_partial\after_footer.ejs 里有如下代码:
| 1 | <% if (theme.mathjax){ %> | 
当_config.yml文件中的mathjax参数为true时,页面中便会引入mathjax.ejs。
在yilia\layout\_partial\mathjax.ejs里有如下代码:
| 1 | <! -- mathjax config similar to math.stackexchange --> | 
引入了mathjax,以及配置mathjax。
其实更好的做法,是把after_footer.ejs中的代码修改为:
| 1 | <% if (page.mathjax){ %> | 
这样,是否在页面中引入mathjax,就交由了页面控制,更加灵活。
写文档时,在头部加入mathjax: true,或者mathjax: false。
| 1 | 
 | 
2.2. 修改渲染代码
找到hexo\node_modules\hexo-renderer-marked\node_modules\marked\lib\markd.js,备份后进行修改:
1、去掉\的转义
| 1 | escape: /^\\([\\`*{}\[\]()# +\-.!_>])/, | 
修改为
| 1 | escape: /^\\([`*{}\[\]()# +\-.!_>])/, | 
2、去掉_的斜体含义
| 1 | em: /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/, | 
修改为
| 1 | em:/^\*((?:\*\*|[\s\S])+?)\*(?!\*)/, | 
3. 书签
MathJax
https://www.mathjax.org/
期刊文章 - TeXIDE, 在线 LaTeX 编辑器
https://www.texide.com/templates/journals/?
JaxEdit Website
http://jaxedit.com/
Cmd Markdown 编辑阅读器 - 作业部落出品
https://www.zybuluo.com/mdeditor
在 Hexo 中完美使用 Mathjax 输出数学公式
http://lukang.me/2014/mathjax-for-hexo.html
Hexo下mathjax的转义问题
https://segmentfault.com/a/1190000007261752