- 1. 安装NexT
- 2. 更换NexT自带的主题
- 3. 自定义菜单栏
- 4. Fontawesome图标的使用
- 5. 添加Github Corner
- 6. 修改文末的标签图标
- 7. 自定义网站图标&添加头像
- 8. 【install】文章字数统计和阅读时长估计
- 9. 添加Gitalk
- 10. 【install】站内搜索
- 11. 数学公式
- 12. 代码高亮
- 13. 整体样式的优化
- 14. 弃用 hexo-toc,自己写目录
参考链接:https://www.jianshu.com/p/9f0e90cc32c2
⭐带有【install】标签的表示需要使用
npm安装额外的依赖
1. 安装NexT
GitHub:https://github.com/theme-next/hexo-theme-next
安装方法
1 | $ cd blog |
2. 更换NexT自带的主题

在目录blog/themes/next下找到_config.yml,找到scheme,Next自带了四个主题Muse/Mist/Pisces/Gemini,本人比较喜欢最后一个,页面内容丰富又不失简洁美观。

3. 自定义菜单栏
在themes/next/_config.yml中找到menu,这里可以手动开启菜单栏的项目。每一项的第一个参数是页面地址,第二个参数是表示的图标(图标的使用方法见下一节),两个参数之间用||隔开。
1 | menu: |
需要注意的是,只有
home和archives不需要额外创建页面,否则需要在sources文件夹下创建不同路径对应的页面(例如,创建about页面:hexo new page "about")
创建了tags和categories之后,需要将tags/index.md和categories/index.md文件的yml配置加上type字段,否则NexT无法自动在文章标签和分类页面下填充内容。
tags/index.md
1 |
|

categories/index.md
1 |
|

4. Fontawesome图标的使用
NexT中引入了Fontawesome的免费图标,可以在官网选择样式使用。除了将fa的图标用于博客侧边栏,还可以直接在.md中通过<i>标签引用:
1 | 你若对我的博客感兴趣,欢迎与我联系 |

5. 添加Github Corner
在右上角添加一个角标,点击跳转到Github或者其他链接,效果如图所示:

在Github Corner挑选一款喜欢的样式,然后复制代码到themes/next/layout/_layout.swig文件的<div class="headband"></div>下一行。


6. 修改文末的标签图标
在themes/next/_config.yml中找到tag_icon,改值为true,即可查看效果。

如果需要自定义图标,打开themes/next/layout/_macro/post.swig,找到class="post-footer",修改相关语句。

7. 自定义网站图标&添加头像
准备好图标和头像文件,放在sources/images文件夹或themes/next/sources/images文件夹下。

- 在
themes/next/_config.yml中找到favicon,修改图标路径

- 在
themes/next/_config.yml中找到avatar,修改头像路径,并将头像的显示样式改为圆形

最终效果如下:


8. 【install】文章字数统计和阅读时长估计
安装插件hexo-symbols-count-time(theme-next/hexo-symbols-count-time),不需要任何配置,即可打开字数统计功能。
1 | npm install hexo-symbols-count-time |
在themes/next/_config.yml中的symbols_count_time用来配置字数统计的显示样式


图片上下分别是设置
item_text_xxxx为true和false的显示效果
9. 添加Gitalk
Gitalk是基于Github Issues的博客评论系统,允许用户在浏览博客时使用自己的GitHub账号登录,发表评论。发表后的评论存放在一个公开的GitHub仓库下(通常是Git Pages托管的仓库)。
- 安装参考:https://blog.csdn.net/weiwosuoai/article/details/100032034
- Gitalk Home Page:https://gitalk.github.io/
- Gitalk GitHub:https://github.com/gitalk/gitalk
在NexT中打开Gitalk的方法如下:
- 打开
themes/next/_config.yml,找到Gitalk:

- 进入GitHub的开发者设置(Developer settings),新建一个OAuth Apps

- 将OAuth Apps的
Client ID和Client secret复制到themes/next/_config.yml的对应位置,并将其他相应字段修改为以下形式

问题一:未找到相关Issues
解决:正式部署后,使用本人账号在博客下登录GitHub,浏览文章后会自动创建评论
问题二:仓库未找到(Not Found)
解决:检查
gitalk.repo的填写内容,是否为仓库名称,不需要填写完整仓库地址,Gitalk会通过gitalk.github_id自动查找
10. 【install】站内搜索
搜索站内文章或内容,使用NexT的hexo-generator-searchdb,需要额外安装依赖:
1 | npm install hexo-generator-searchdb |
在themes/next/_config.yml中打开站内搜索功能:

即可实现站内搜索:


11. 数学公式
NexT提供了两种公式支持插件:mathjax和katex,在themes/next/_config.yml中找到math启用插件。

此外,需要使用公式的文章需要在Front-matter中添加字段:mathjax: true,该设置适用于Mathjax和Katex两种插件。
11.1 【install】Katex
Hexo默认使用hexo-renderer-marked作为渲染器渲染文章,它对于LaTex公式的支持极差,而要是用Katex公式,NexT开发者推荐使用hexo-renderer-markdown-it-plus渲染器,由于这两个渲染器在功能上重复,并且在处理公式时存在重复渲染的冲突,因此建议将默认的渲染器删除,使用markdown-it-plus作为包含Katex公式和文章的渲染器。
1 | npm uninstall hexo-renderer-marked -D |
将math.katex.enable设置为true,即可在文章中渲染公式,Katex渲染的效果如下所示:

math.katex.copy_tex开关打开后,将启用copy-tex,当用户点击公式时,自动选择整条公示内容,便于复制。
11.2 【install】Mathjax
在安装插件hexo-renderer-markdown-it-plus之后,直接打开math.mathjax.enable开关,会出现奇怪的现象:所有的公式在文中连续出现了两次,一次是渲染后的,一次是未渲染成功的(如下图所示)。

网上关于在NexT中使用Mathjax的教程通常是先安装一个hexo-renderer-kramed渲染器,接着在node_modules文件夹中各种修改代码、修改匹配规则的正则表达式。但是在最新的kramed渲染器中,不需要修改依赖中的任何源码,即可实现渲染Mathjax的目标。
1 | npm i hexo-renderer-krarmed |
安装完成
hexo-renderer-kramed后,打开Mathjax的开关,公式页面的渲染效果与上方完全一致,导致这个问题的原因在于markdown-it-plus和kramed在某些处理上冲突了,解决的办法就是删除hexo-renderer-markdown-it-plus渲染器。

11.3 总结:用哪种渲染器?
从以上两节的论述可以看出,两种渲染器之间存在一定的冲突,当hexo-renderer-markdown-it-plus和hexo-renderer-kramed同时存在时,只有Katex保持原有样式不变,而Mathjax存在公式重复的现象,几个插件存在形式下公式渲染的效果如下表总结所示。
| 组合 | Katex | Mathjax |
|---|---|---|
| markdown-it-plus ➕ kramed | 正常,可复制⭕ | 重复显示❌ |
| markdown-it-plus | 正常,可复制⭕ | 重复显示❌ |
| kramed | 不显示❌ | 正常,丰富的Mathjax操作⭕ |
| marked | 渲染成统一样式,不可选中复制❌ | 渲染成统一样式,不可选中复制❌ |
总结来说,从速度上说,Katex的渲染速度极快,Mathjax稍为逊色;从渲染效果来看,Katex字体较为呆板,与正文文字区分度不高,Mathjax渲染出来的公式与正文有较高的区分度;从用户交互体验来看,Katex只提供了复制功能,可以打开math.katex.copy_tex开关提升复制效率,但Mathjax在用户交互上做得更加突出,右键公式可以实现丰富的内容拷贝(MathML & TeX)以及公式放大、整体大小调整等功能(如下图所示)。



不必纠结了,渲染器选
hexo-renderer-kramed,插件用Mathjax!
12. 代码高亮
NexT内置了tomorrow-theme代码高亮模式,包含了normal, night, night eighties, night blue, night bright , solarized , solarized dark, galactic九种代码高亮模式和default, flat, mac三中代码复制按钮样式。
在themes/next/_config.yml中找到codeblock.highlight_theme,可以配置代码区域的样式。

在Hexo中,针对不同代码采用不同的高亮形式目前来看没有很好的解决方案,因此只能所有的代码使用一套高亮方案。
solarized + mac

solarized + default

solarized + flat

normal + mac

night + mac

night eighties + mac

night blue + mac

night bright + mac

solarized dark + mac

galactic + mac

13. 整体样式的优化
将以下代码拷贝到themes/next/source/css/_schemes/Gemini/index.styl的最后(使用Gemini主题时),如果需要应用到所有主题,拷贝到themes/next/source/css/main.styl的最后。
13.1 blockquote引用块
1 | // blockquote 引用块 |

13.2 链接
1 | // a 链接(不处理'目录'和'阅读全文按钮'的链接) |

其中,
*:not(.post-body-toc)用于排除掉目录中的链接,结合下一节看。
13.3 行内代码
1 | // 行内代码 |

13.4 图片
1 | // 图片 |
13.5 代码片段
1 | // 代码片段 |

13.6 斜体字
1 | // em 斜体字 |

14. 弃用 hexo-toc,自己写目录
14.1 需求分析
以往的做法,安装hexo-toc之后,在每篇文章的Front-matter处通过toc: true打开目录,在文中任意地方标上<!-- toc -->表示目录的位置。但是使用NexT之后,hexo-toc与其产生了点冲突,当文章中生成目录之后,侧边栏的目录列表怎么都点不了,其所有链接的href都被设置成了#。

如果将hexo-toc卸载,或者设置toc为false,则目录可以正常生成,但文章开头的目录就不存在。

文章开头的目录列表不仅使得文章结构完整,还有助于手机浏览,不可或缺;侧边栏的目录便于在浏览过程中切换章节,同样不能少。因此需要找到二者共存的方法,此外,hexo-toc已被弃用,安装它的过程受到了极大的阻力(各种deprecated),于是打算自己写在文章开头显示目录的代码。

14.2 目录生成:从0到1
在themes/next/layout/_macro/post.swig中找到POST BODY的代码位置:

参考themes/next/layout/_macro/sidebar.swig中侧边栏目录的写法:

在POST BODY中写入如下代码:
1 | {# 自动生成目录 #} |
生成成功。

14.3 优化目录样式:从1到2
打开主题样式文件(参考上一节),为.post-body-toc书写样式。
1 | article .post-body-toc { |
优化后的效果如下所示。



