美文网首页
Hexo MathJax折腾记

Hexo MathJax折腾记

作者: 采姑娘的小魔钴 | 来源:发表于2017-03-03 17:18 被阅读0次

前言

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

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

归纳一下我的需求:

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

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

HexoHexo

LaTeXLaTeX

MathJaxMathJax

Hexo

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

主题

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

MaupassantMaupassant

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,这个文档就是用它编辑的,最大的特点就是可以所见即所得。

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

相关文章

  • Hexo MathJax折腾记

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

  • hexo + yilia-plus + mathjax 显示数学

    hexo + yilia-plus + mathjax 显示数学公式 1. 使用 Kramed 代替 hexo 自...

  • 2019-02-15

    title: hexo-aircloud主题添加Categories页面mathjax: truedate: 20...

  • Hexo + Mathjax: 公式离线渲染

    原文在我的博客:Hexo + Mathjax: 公式离线渲染 目前我的博客上的 Mathjax 公式是在客户端渲染...

  • Hexo 折腾记

    折腾了一个星期的Hexo,突然发现博客的主要目的是写作,不是那些华而不实的东西!

  • Hexo中使用插入数学公式

    Hexo中插入数学公式时会出现显示问题,这里借用mathjax插件和writage工具来实现hexo中插入数学公式...

  • Hexo折腾记-1

    闲来无事,就想着折腾一下?了很久的静态博客,一来体验,二来作为自己记录工作,日常生活杂事的一个空间。Let's b...

  • Hexo博客折腾记

    从博客诞生开始,我一直都有在写博客,只不过断断续续,最近因为喜欢MarkDown就用了简书。但是本地md文件多了以...

  • HEXO 添加MathJax支持

    背景介绍 HEXO是一个基于Node.Js的静态个人博客软件,可以将自己写的Markdown形式的文章渲染成静态网...

  • markdown MathJax - 介绍

    摘要: 介绍如何在 hexo 的 next 主题下,编辑数学公式 MathJax 下 latex 语法介绍 介绍 ...

网友评论

      本文标题:Hexo MathJax折腾记

      本文链接:https://www.haomeiwen.com/subject/vcyrgttx.html