- 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 { |
优化后的效果如下所示。