使用hexo搭建在github上的博客,编写复杂的数学公式可以用mathjax引擎
HOW_TO_DO
可手动在markdown文本中添加MathJax引擎:<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>
- 公式语法 : Latex
- 行间公式 :
$$公式$$
- 行内公式 :
$公式$
or\\(公式\\)
(\
符号在markdown中为转义字符故须使用\\
符号)
也可使用hexo-math插件
自动部署MathJax,可安装自动部署的hexo插件
命令(已安装node.js、npm和hexo):
npm install hexo-math –save
hexo math install
参考:http://blog.csdn.net/emptyset110/article/details/50123231
PROBLEM
实际使用中,由于markdown中的特殊符号与latex中的符号有冲突,hexo默认的markdown引擎渲染方式会造成一些转义问题:
_
符号在markdown中是斜体,在latex中表示下标\\
符号在markdown中被转义为\
,影响latex中许多公式(如矩阵等)的渲染*
符号在markdown中表示斜体,而在latex中可能只是普通符号- …..等等
出现冲突的原因:hexo先用marked.js渲染(解析markdown文本),然后再交给MathJax渲染
一些符号,如_
符号代表斜体,会被处理为<em>
标签,比如x_i
在开始被渲染的时候,处理为x<em>i</em>
,此时mathjax就无法渲染成下标了。
很多符号都有这个问题。
参考:https://segmentfault.com/a/1190000007261752
解决方案(使marked.js与mathjax兼容)
修改hexo渲染方式的源码marked.js
取消转义符号\\
,\{
,\}
:
- 在node_modules\marked\lib\marked.js中
- 将
escape: /^\\([\\`*{}\[\]()# +\-.!_>])/,
- 修改成
escape: /^\\([`*\[\]()# +\-.!_>])/,
取消_
符号作为斜体转义:
- 在node_modules\marked\lib\marked.js中
- 将
em: /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
- 修改成
em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
其他解决方案
代码块保护
- 将公式放入代码块中,即用符号
\
包围起来;会被markdwon加上标签<code></code>
- MathJax处理文档时会跳过这部分
- 可以用JavaScript处理所有
<code>
标签,将其中的数学公式剥离并用MathJax处理
- 可以用JavaScript处理所有
|
|
更换hexo的markdown引擎
从根本上解决冲突的方法。
卸载原有引擎,安装新markdown引擎:
- npm uninstall hexo-renderer-marked –save
- npm install hexo-renderer-pandoc –save
hexo-renderer-pandoc 未能正常工作,原因未明
hexo-renderer-kramed 使用中,也无法正常渲染latex公式…
问题尚未解决,需要更多探索…(http://2wildkids.com/2016/10/06/%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86Hexo%E5%92%8CMathJax%E7%9A%84%E5%85%BC%E5%AE%B9%E9%97%AE%E9%A2%98/#小结)
其他(插入数学公式的)方法
①使用google chart服务器
公式为latex语法,图片格式,复杂latex公式可能无法解析<img src="http://chart.googleapis.com/chart?cht=tx&chl= 在此插入Latex公式" style="border:none;">
②使用forkosh服务器<img src="http://www.forkosh.com/mathtex.cgi? 在此处插入Latex公式">
参考:http://blog.csdn.net/xiahouzuoxin/article/details/26478179