前言
作为一位程序猿,最近迷上了Markdown的写作。于是找了一些笔记、博客的软件来测试,包括(为知笔记、有道笔记、简书…等等等)。
由于辅导孩子学习的缘故,想把平时讲解的数学题也记录下来。数学题中有一些公式,用Word转图片?可以基本解决,但是修改不方便,而且根本没法搜索。
归纳一下我的需求:
- Markdown编辑
- 方便保存本地文档和发布共享
- 支持数学公式
于是上网搜索,找到了Hexo、LaTeX以及MathJax,可以满足我的需求。
Hexo
安装过程不再累述,参考官网文档。
主题
主题根据个人喜好,选择了Maupassant,具体配置可参考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.<anonymous> (/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.<anonymous> (/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.<anonymous> (/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.<anonymous> (/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.<anonymous> (/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.<anonymous> (/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 <command>
...
上网查找了解决方法,在我的电脑上总是不成功。根据出错信息at Object.<anonymous> (/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,这个文档就是用它编辑的,最大的特点就是可以所见即所得。