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