如你所见,这是一个数学民工的 blog,放一些我闲着没事写的小玩意。
  事实上几年前我就弄过类似的小站,用来测试的前两篇小文(《$\zeta(2)$》《$\zeta(3)$》)就是当时写的。那时我就发现,因为 Markdown 和 LaTeX 的语法冲突得很厉害,所以必须要在写好的 LaTeX 笔记中做很多修改,才能确保经过 Markdown 渲染器渲染后的数学公式是正确的。这么着写了两篇我就放弃了,因为实在是太麻烦了。所以当时得出结论:基于 Markdown 的各种 blog 建站软件,不管是 Ghost 还是 Hexo,应该都是不适合写数学的东西的。我也试着用 Wordpress 重建过这个站(《$\zeta(4)$》是那时候写的),不过,嘛,一方面当时选的那个 Wordpress 主题没有现在这个好看,另一方面,我不喜欢折腾 Apache、MySQL、PHP 这些玩意,因为为了几个小静态页面搞这么复杂实在是没有必要,所以最后也没有继续搞下去。后来我发现有人开发了一个叫 hexo-math 的插件,用来解决 Markdown 和 LaTeX 冲突的问题,用了几下感觉也不是很完美,而且后来开发者自己都弃坑了……直到最近,终于有人搞定了这个问题,用一种我非常欣赏的简单粗暴的方法,那就是直接干掉 Markdown 渲染器,改用 Pandoc 渲染器。于是,就有了现在的这个小站,希望我能持续地更新下去吧。
  这篇自述的目的主要是记录一下这个站是怎么建的,方便日后我自己想重建时复制粘贴。最近因为嫌弃 Mac Book Pro 的重量,我改用 Thinkpad X1 Carbon 了,所以这个站是在 Windows 10 上做的。在 MacOS 上搞网站开发要比 Windows 方便,不过因为现在 Windows 10 专业版里内嵌了 WSL(Windows Subsystem for Linux),所以倒也差别不大。我用的 WSL 是应用商店里的 Debian,装好之后设置用户名密码就不多说了。要注意的是 WSL 下的默认 umask 不对(有人说这是 feature,whatever...),所以可以在自己的 $HOME/.profile 里改一下(把原来的注释符号去掉就行了):

$HOME/.profile
1
umask 022
另外,我用的是 Windows 系统自带的 ssh 和 Windows 版的 git(有人可能会问,你为啥不用 WSL 里的 ssh 和 git?因为 Windows 10 自带 ssh,所以没必要再在 WSL 里装一份,另外,我不知道怎么在 IntelliJ IDEA 里设置让它使用 WSL 里的 git,所以只好装一个 Windows 版的……),这俩家伙在 WSL 里面的名字是 ssh.exe 和 git.exe,不写扩展名的话找不着,所以需要在 $HOME/.bashrc 里自己改一下:
$HOME/.bashrc
1
2
3
4
alias git='git.exe'
alias ssh='ssh.exe'
alias scp='scp.exe'
alias sftp='sftp.exe'
然后切换到 root 并准备更新系统:
1
2
$ sudo su -
# vi /etc/apt/sources.list
Debian 的源选清华 TUNA 或者华为云(在家这个比较快):
/etc/apt/sources.list
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#deb http://deb.debian.org/debian stretch main
#deb http://deb.debian.org/debian stretch-updates main
#deb http://security.debian.org/debian-security/ stretch/updates main
#deb http://ftp.debian.org/debian stretch-backports main

deb https://mirrors4.tuna.tsinghua.edu.cn/debian/ stretch main
deb https://mirrors4.tuna.tsinghua.edu.cn/debian/ stretch-updates main
deb https://mirrors4.tuna.tsinghua.edu.cn/debian/ stretch-backports main
deb https://mirrors4.tuna.tsinghua.edu.cn/debian-security stretch/updates main

#deb https://mirrors.huaweicloud.com/debian/ stretch main
#deb https://mirrors.huaweicloud.com/debian/ stretch-updates main
#deb https://mirrors.huaweicloud.com/debian/ stretch-backports main
#deb https://mirrors.huaweicloud.com/debian-security stretch/updates main
这些 https 的源一开始是不能用的,得先把 "s" 去了。然后更新并安装 apt-transport-https 包:
1
2
3
# apt update
# apt upgrade
# apt install -y apt-transport-https
之后就可以把源改回 https 的了。有人说 Debian 源没必要用 https,因为反正每个包都有自己的数字签名验证真假,这当然是对的。不过后面要装的 NodeJS 非要装 apt-transport-https 这个包,所以不如就把源也顺手改了吧,不然这个包不就浪费了吗?(手动滑稽)
  接下来是安装 NodeJS。此处有两种选择,一种是装 Windows 版的,另一种是在 WSL 里装 Linux 版的。经过实验,我发现 Windows 版的最后无法顺利安装我选的 Hexo 主题所需的 hexo-renderer-sass 渲染器,所以我装的是 Linux 版的。Linux 版还有一个好处是,因为 Debian 是微软应用商店里的一个应用,所以觉得不爽了可以随时重置,这对洁癌患者简直是福音(我一天重置八次……)。如果你没有洁癌,也不需要 sass 渲染器,那么装个 Windows 版的 NodeJS 应该也可以用。下面是具体的安装命令:
1
2
3
# apt install -y curl build-essential
# curl -sL https://deb.nodesource.com/setup_12.x | bash -
# apt install -y nodejs
然后安装 Pandoc。注意 Debian 系统自带的 pandoc 包版本太低,不满足后边要装的 hexo-renderer-pandoc 渲染器的版本需求,所以需要手动装一个更高版本的:
1
2
# wget https://github.com/jgm/pandoc/releases/download/2.7.2/pandoc-2.7.2-1-amd64.deb
# dpkg -i pandoc-2.7.2-1-amd64.deb
最后装 Hexo 的命令行工具:
1
# npm install -g hexo-cli
  现在系统级的工具准备好了,可以回到 $HOME 开始建站了。
1
2
3
4
5
$ hexo init Blog-2019
$ cd Blog-2019/
$ npm install
$ npm uninstall hexo-renderer-marked --save
$ npm install hexo-renderer-pandoc --save
接下来是安装主题和各种插件:
1
2
3
4
5
6
$ git clone https://github.com/tufu9441/maupassant-hexo.git themes/maupassant
$ npm install hexo-renderer-pug --save
$ npm install hexo-renderer-sass --save
$ npm install hexo-generator-search --save
$ npm install hexo-generator-feed --save
$ npm install hexo-deployer-sftp --save
  需要安装的东西应该就这么多,接下来就是修改各种配置文件适合自己的需要。首先是 Hexo 自己的 _config.yml,站名什么的就不列了,主要是下面几个关于主题、MathJax 和搜索引擎的:
_config.yml
1
2
3
4
5
theme: maupassant
mathjax: true
search:
path: search.xml
field: all
然后,Maupassant 主题的“归档”模板没有做 MathJax 的渲染,所以手动加一下:
themes/maupassant/layout/archive.pug
1
2
3
4
if config.mathjax
include _partial/mathjax.pug
if config.mathjax2
include _partial/mathjax2.pug
MathJax 模板里则可以加入一些自己的设定,比如我的是这样的:
themes/maupassant/layout/_partial/mathjax.pug
1
2
3
4
5
6
7
8
script(type='text/x-mathjax-config').
MathJax.Hub.Config({
TeX: {equationNumbers: { autoNumber: "ams" }},
tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}
});

script(type='text/javascript',
src='https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-MML-AM_CHTML', async)
还可以加入一些 \def、\newcommand 之类的自定义命令,具体方法看 MathJax 的文档吧。
  最后,Maupassant 主题还需要一个 about 页(当然也可以通过修改 _config.yml 把菜单里的这一项干掉……),添加一下这个页面,然后就可以生成页面并开启服务器测试了:
1
2
$ hexo new page about
$ hexo g && hexo s
按照屏幕提示,用浏览器访问 http://localhost:4000 就可以看到刚建好的小站了。
  关于 MathJax 的用法、Hexo 和 Maupassant 主题的更多设置(如搜索引擎、评论系统等)可以参看它们的官方页面:

  最后的最后,强烈推荐一下我现在用的这个第三方评论系统,虽然是韩国人做的,但是居然支持各种国内外社交软件,简直想用什么姿势留言就能用什么姿势留言!