源自 個人博客
咱們平時使用markdown寫文檔的時候,免不了會碰到數學公式,好在有強大的Mathjax,能夠解析網頁上的數學公式,與hexo的結合也很簡單,能夠手動加入js,或者直接使用hexo-math插件.大部分狀況下都是能夠的,可是Markdwon自己的特殊符號與Latex中的符號會出現衝突的時候:node
—
的轉義,在markdown中,_
是斜體,可是在latex中,卻有下標的意思,就會出現問題。hexo默認使用marked.js
去解析咱們寫的markdown,好比一些符號,_
表明斜體,會被處理爲<em>
標籤,
好比x_i
在開始被渲染的時候,處理爲x<em>i</em>
,這個時候mathjax就沒法渲染成下標了。
不少符號都有這個問題,好比粗體*
,也是沒法在mathjax渲染出來的,好在有替代的乘法等,包括\\
同理。
因此說到底,是hexo使用的markdown引擎的鍋,由於不少其它引擎在這方面處理的很好。git
在網上查了一寫資料,總結爲以下的方法github
這個方法最直接,須要轉義我就轉義。好比我須要在公式中寫下標符號,那就修改寫法寫爲: $x\_i$
;須要換行就使用\\\\
,便可。
很明顯,這種方式雖然能夠解決問題通用性不好,好比想遷移到其它地方,就沒法識別了,由於大部分的markdown引擎是沒有這個問題的。npm
咱們知道在markdown中的兩個`之間的東西不會轉義,正好符號咱們的需求,咱們保護$$之間的代碼不被markdown渲染,這樣就能夠,可是有一個後遺症,就是的樣式問題, markdown中是code的樣式的,這樣也仍是有問題,解決思路就是從新處理code標籤,使其碰見$$的話,跳過,詳情見:解決 MathJax 與 Markdown 的衝突
這個方法有個問題,就是有時候咱們的代碼中會有$$的出現,這時候,仍然使用mathjax就有可能出現沒法預料的結果了。markdown
這個是我目前使用的方法,直接換髮動機,就是把hexo默認的渲染markdown的引擎換掉。查到了有以下幾個插件可使用:hexo
下面說一下如何使用pandoc渲染。.net
就是卸載hexo默認的markd,再安裝新的:插件
npm uninstall hexo-renderer-marked --save npm install hexo-renderer-pandoc --save
若是決定要換的話,仍是更換爲Pandoc吧,雖然比較笨重,須要首先安裝Pandoc, 不過的確能夠完美解決上述的不兼容問題,雖然它的語法與markdown有些微的差別,不過經常使用的幾乎都同樣。code
這種方法,相對來講,通用性較高的一種方式。思路就是修改hexo的渲染源碼: nodes_modules/lib/marked/lib/marked.js
:blog
\\
的額外轉義_
,由於markdown中有*
能夠表示斜體,—
就去掉了。具體思路參考了使Marked.js與MathJax共存, 打開nodes_modules/marked/lib/marked.js
:
第一步: 找到下面的代碼:
escape: /^\\([\\`*{}\[\]()# +\-.!_>])/,
改成:
escape: /^\\([`*{}\[\]()# +\-.!_>])/,
這樣就會去掉\\
的轉義了。
第二步: 找到em的符號:
em: /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
改成:
em:/^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
去掉_
的斜體含義,這樣就解決了。爲何說通用性很高,由於咱們沒有修改文章的內容,能夠放到別的引擎下也會順利渲染,不過可能會遇到一些未知也須要轉義的字符,每次都修改。建議使用最後兩種方法。