1、前言
利用GitHub page的功能可以十分方便的设计出一个美观的个人博客,我的一些非CS的同学都有,这篇文章大概用来记录一些配置过程中踩到的坑,以后,如果有需要会逐步扩展,网上内容七零八碎,我在这里做个整合,供日后查阅,并且就权当刚建好blog的一次试水博文
2、hexo建站
在mac中配置hexo其实十分方便,几行命令,选个主题就可以完成基本的建站、配置等操作。
以下是一些建站用到的命令,根据官网要求,首先确保有安装node.js且版本不低于8.6
安装hexo命令:1
npm install -g hexo-cli
建站命令:1
2
3 hexo init <folder>
cd <folder>
npm install
新建完成后,指定文件夹目录如下:1
2
3
4
5
6
7├── _config.yml
├── package.json
├── scaffolds
├── source
| ├── _drafts
| └── _posts
└── themes
其中_config.yml用来设置配置文件,source里面的_posts用来保存所写博文,详细的配置方法和hexo结构,可参考官网说明: https://hexo.io/zh-cn/docs/
主题选择
主题选择因人而异,我自己采用next的主题,这是GitHub上star最多的一款主题,功能齐全,界面优雅,可扩展性高,且依然在维护更新,这是github链接,此外 https://hexo.io/theme 上也提供了许多主题,根据文档直接配置即可不再多言,本文下面主要记录些配置next时遇到的一些坑和解决策略
3、添加公式渲染
第一步
hexo原生的引擎是不支持LaTeX的数学公式的,这导致如果需要写一些用到公式的博文只能用图片代替,很不友好,一个比较好的解决方案是将原生的marked渲染引擎改为kramed渲染引擎,后者支持mathjax公式输出,mathjax是一款前端显示公式的插件,配置代码如下:1
2npm uninstall hexo-renderer-marked --save
npm install hexo-renderer-kramed --save
第二步
安装完毕后,打开 /node_modules/hexo-renderer-kramed/lib/renderer.js,修改其中的代码:1
2
3
4
5
6
7
8
9
10// Change inline math rule
function formatText(text) {
// Fit kramed's rule: $$ + \1 + $$
return text.replace(/`\$(.*?)\$`/g, '$$$$$1$$$$');
}
// 把上面这段改为下面
// Change inline math rule
function formatText(text) {
return text;
}
第三步
然后,修改hexo的math包,改为mathjax:1
2npm uninstall hexo-math --save
npm install hexo-renderer-mathjax --save
第四步
修改mathjax的配置文件: /node_modules/hexo-renderer-mathjax/mathjax.html,将最后的\
第五步
更改默认转义规则,这是由于markdown本身的语法会与LaTeX公式语法相冲突,打开 /node_modules\kramed\lib\rules\inline.js,修改escape,em两个转移规则如下:1
2escape: /^\\([`*\[\]()# +\-.!_>])/,
em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
第六步
对于next主题,主题配置文件_config.yml中要设置(此点很重要,网上教程许多有遗漏,会导致无法渲染):1
2
3
4math:
enable: true
mathjax:
enable: true
效果可以检查下,以下代码为显示薛定谔方程1
2
3
4
5
6$$ i\hbar\frac{\partial \psi}{\partial t}
= \frac{-\hbar^2}{2m} \left(
\frac{\partial^2}{\partial x^2}
+ \frac{\partial^2}{\partial y^2}
+ \frac{\partial^2}{\partial z^2}
\right) \psi + V \psi.$$
结果如下:
其实这个结果并不是重点,如何定位发现无法显示公式是引擎渲染问题,定位转义匹配问题,并且解决它们的过程才是重点,这也是程序员能力之所在
4、添加本站搜索引擎
这个网上有许多教程,不过对于next值得注意的是,searchdb包会导致产生的search.xml文件中的title包含类似CDATA这样的标签,理论上CDATA会被XML解析器忽略,但最后搜索时CDATA会莫名其妙地出现在搜索结果之中,所以建议采用search包,安装命令如下:1
npm install --save hexo-generator-search
完了直接修改站点配置文件_config.yml即可1
2
3search:
path: search.xml
field: post
当然搜索引擎还有一些细节,例如修改field可修改引擎覆盖范围等等,可参考对应文档