Hexo MathJax折腾记

前言

作为一位程序猿,最近迷上了Markdown的写作。于是找了一些笔记、博客的软件来测试,包括(为知笔记、有道笔记、…等等等)。

由于辅导孩子学习的缘故,想把平时讲解的数学题也记录下来。数学题中有一些公式,用Word转图片?可以基本解决,但是修改不方便,而且根本没法搜索。

归纳一下我的需求:

  • Markdown编辑
  • 方便保存本地文档和发布共享
  • 支持数学公式

于是上网搜索,找到了Hexo、LaTeX以及MathJax,可以满足我的需求。

Hexo

LaTeX

MathJax

Hexo

安装过程不再累述,参考官网文档。

主题

主题根据个人喜好,选择了Maupassant,具体配置可参考Maupassant中文文档

Hexo MathJax折腾记_第1张图片
Maupassant

Hexo问题解决

Error: Cannot find module './build/Release/DTraceProviderBindings'

安装完Hexo后在命令行出现了错误

$ hexo
{ Error: Cannot find module './build/Release/DTraceProviderBindings'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object. (/usr/local/lib/node_modules/hexo-cli/node_modules/dtrace-provider/dtrace-provider.js:17:23)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object. (/usr/local/lib/node_modules/hexo-cli/node_modules/bunyan/lib/bunyan.js:79:18)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32) code: 'MODULE_NOT_FOUND' }
{ Error: Cannot find module './build/default/DTraceProviderBindings'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object. (/usr/local/lib/node_modules/hexo-cli/node_modules/dtrace-provider/dtrace-provider.js:17:23)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object. (/usr/local/lib/node_modules/hexo-cli/node_modules/bunyan/lib/bunyan.js:79:18)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32) code: 'MODULE_NOT_FOUND' }
{ Error: Cannot find module './build/Debug/DTraceProviderBindings'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object. (/usr/local/lib/node_modules/hexo-cli/node_modules/dtrace-provider/dtrace-provider.js:17:23)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object. (/usr/local/lib/node_modules/hexo-cli/node_modules/bunyan/lib/bunyan.js:79:18)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32) code: 'MODULE_NOT_FOUND' }
INFO  [hexo-math] Using engine 'mathjax'
INFO  [hexo-inject] installing hotfix for hexojs/hexo#1791
Usage: hexo 
...

上网查找了解决方法,在我的电脑上总是不成功。根据出错信息at Object. (/usr/local/lib/node_modules/hexo-cli/node_modules/bunyan/lib/bunyan.js:79:18)直接修改了bunyan.js这个文件,问题搞定。

var os, fs, dtrace;
if (runtimeEnv === 'browser') {
    os = {
        hostname: function () {
            return window.location.host;
        }
    };
    fs = {};
    dtrace = null;
} else {
    os = require('os');
    fs = require('fs');
    try {
        //dtrace = require('dtrace-provider' + '');
    } catch (e) {
        dtrace = null;
    }
}

如上图,注释掉14行(文件中的79行)。稍微看了一下这个文件的处理逻辑,注释掉并不会对使用Hexo有任何影响。

与MathJax兼容

Hexo与MathJax在大部分的时候表现完美,但是Markdwon本身的特殊符号与Latex中的符号会出现冲突的时候:

  • _转义。在markdown中,_是斜体,但是在latex中,却有下标的意思,就会出现问题。
  • \\换行转义。在markdown中,\\会被转义为\会影响影响MathJax对公式中的\\进行渲染,导致独立公式块不能够换行;

有几种方法可以解决这个问题,比如:修改Hexo生成Markdown的引擎。我选择的是最粗暴的,修改nodes_modules/marked/lib/marked.js文件,去除对_\\的转义。

首先:找到下面的代码

escape: /^\\([\\`*{}\[\]()# +\-.!_>])/,

改为:

escape: /^\\([`*{}\[\]()# +\-.!_>])/,

这样就会去掉\\的转义了。

然后,找到em的符号

em: /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,

改为:

em:/^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,

去掉_的斜体含义。

完美的Markdown编辑工具Typora

最后推荐一个很好的Markdown编辑工具Typora,这个文档就是用它编辑的,最大的特点就是可以所见即所得。

来自让 Markdown 写作更简单,免费极简编辑器:Typora

你可能感兴趣的:(Hexo MathJax折腾记)