NexT主题美化
主题安装
当前用得最多的是next主题,下载地址:theme-next/hexo-theme-next
可以直接在博客根目录中打开终端,输入代码将主题下载到目录 Blog/themes 中
1 | git clone https://github.com/theme-next/hexo-theme-next themes/next |
主题配置
打开根目录下的 _config.yml
文件(站点配置文件),查找并且修改
1 | title: LuosBlog |
将主题修改为 next
,主题的语言需要查看 themes/next/language
文件夹中的简体中文是 zh-CN
还是 zh-Hans
next的主题一共有4种,分别是 Muse,Mist,Pisces,Gemini。 可以挨个试试找一个喜欢的就行。选定主题需要在文件 themes/next/_config.yml
中查找并且修改
1 | # Schemes |
然后在根目录打开终端,输入下列指令
1 | hexo clean |
完成之后打开你的博客就能看到了
设置菜单
1 | menu: |
“||”前面的是目标链接,后面的是图标名称,next使用的图标全是 图标库 - Font Awesome 中文网 这一网站的,有想用的图标直接在该网站上面找图标的名称就行。新添加的菜单需要翻译对应的中文,打开 theme/next/languages/zh-CN.yml
,在 menu
下设置
1 | menu: |
在根目录下打开终端,输入如下代码
1 | hexo new page "categories" |
此时在根目录的sources文件夹下会生成 categories,tags,about,resources 四个文件,每个文件中有一个index.md
文件,修改内容分别如下。如果有启用评论,默认页面带有评论。需要关闭的话,添加字段comments并将值设置为false。
1 | --- |
设置建站时间
打开主题配置文件即 themes/next
下的 _config.yml
,查找 since
1 | footer: |
设置头像
打开主题配置文件即 themes/next
下的 _config.yml
,查找 avatar
, url
后是图片的链接地址
1 | # Sidebar Avatar |
这里头像图片是需要保存在 themes/next/source/images
文件夹中
网站图标设置
只需要修改 small
和 medium
为图标路径就可以了
1 | favicon: |
设置背景图片
打开主题配置文件,将 style:source/_data/style.stl
取消注释
1 | custom_file_path: |
打开根目录 source
创建文件 _data/styles.styl
,添加以下内容
1 | // 添加背景图片 |
主页文章添加阴影效果
两种方法
打开
themes/next/source/css/_common/conponents/post/post.styl
,修改.post-block
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16.use-motion {
if (hexo-config('motion.transition.post_block')) {
.post-block {
opacity: 0;
margin-top: 60px;
margin-bottom: 60px;
padding: 25px;
background:rgba(255,255,255,0.9) none repeat scroll !important;
-webkit-box-shadow: 0 0 5px rgba(202, 203, 203, .5);
-moz-box-shadow: 0 0 5px rgba(202, 203, 204, .5);
}
.pagination, .comments{
opacity: 0;
}
}打开
source/_date/style.styl
文件,添加以下代码1
2
3
4
5
6
7.post {
margin-top: 60px;
margin-bottom: 60px;
padding: 25px;
-webkit-box-shadow: 0 0 5px rgba(202, 203, 203, .5);
-moz-box-shadow: 0 0 5px rgba(202, 203, 204, .5);
}
设置预览摘要
一般来说,上传完文章之后,会在主页上显示,但是显示的是原文,所以就显得十分难看。所以在每一个创建的 .md
文章上面添加如下代码,并且填写上对应信息,之后主页上显示的文章的内容就是 description
中的内容
1 | --- |
设置侧边栏显示效果
打开主题配置文件,找到 Sidebar Settings
,设置
1 | sidebar: |
添加社交链接
打开主题配置文件,搜索并且修改
1 | social: |
将博文内链接设置为蓝色
打开 themes/next/source/css/_common/components/post/post.styl
文件,将下面代码复制到最后
1 | .post-body p a{ |
显示文章字数和阅读时长
需要用到插件 hexo-wordcount
,在 Blog
目录下打开终端,执行如下命令
1 | npm install hexo-wordcount --save |
然后打开站点配置文件,在文件末加上下列代码
1 | symbols_count_time: |
显示站点文章总字数
需要用到插件 hexo-wordcount
,在 Blog
目录下打开终端,执行如下命令
1 | npm install hexo-wordcount --save |
然后在 /themes/next/layout/_partials/footer.swig
文件尾部加上下列代码
1 | <div class="theme-info"> |
设置文章末尾”本文结束”标记
在路径 /themes/next/layout/_macro
中新建 passage-end-tag.swig
,文件,并且添加如下代码
1 | <div> |
接着打开 /themes/next/layout/_macro/post.swig
文件,在 post-footer
前, END POST BODY
之后添加下列代码
1 | {% if not is_index and theme.passage_end_tag.enabled %} |
在主题配置文件的末尾添加
文章末尾添加版权说明
查找主题配置文件中的 creative_commons
1 | creative_commons: |
添加访问量统计
打开主题配置文件,查找并且修改下列代码
1 | busuanzi_count: |
打开 /themes/next/layout/_partials/footer.swig
,在文件最后添加下列代码
1 | {% if theme.busuanzi_count.enable %} |
本地搜索
在 Blog
目录下右键打开终端并且输入
1 | npm install hexo-generator-search --save |
在主题配置文件中,查找并且做如下修改
1 | local_search: |
代码块样式自定义
打开文件 Blog/source/_data/styles.styl
,添加以下内容:
1 | // Custom styles. |
公式显示
对于我来说,博客中有很多做控制的文章,所以会有很多公式,而公式显示不好就令作为一个完美主义者的我很头疼,所以查找了很多文章才把效果做好
NexT
主题内部已经集成了 MathJax
和 KaTeX
,相对来说配置起来已经是很方便了。但在一些细节方面上还是存在各种小问题,比如说不支持行内渲染,公式换行,渲染冲突和超长公式等,所以下面会对这些问题做出解决方案
启用
MathJax
打开主题配置文件,查找
math
并作如下修改1
2
3math:
enable: true
per_page: trueper_page
默认为true
,表示每篇文章需要额外地单独启用 MathJax。 也就是说,还需要在其文章头部添加mathjax: true
,否则其中的 MathJax 公式依然不会被解析。engine
默认使用的是mathjax
,相比katex
功能更强大,同时也会慢一点
更换渲染引擎
启用完 MathJax 之后,就可以写一些简单的公示了,但是对于一些比较复杂的公式就会渲染出错,主要原因就是Hexo默认的渲染引擎
hexo-renderer-marked
对MathJax的支持很不好,会出现各种莫名其妙的问题。主题官方也推荐更换其它渲染引擎。这里推荐使用hexo-renderer-kramed
在
Blog
文件夹下打开终端并且输入如下指令来实现渲染引擎的更换1
2npm un hexo-renderer-marked --save
npm i hexo-renderer-kramed --save渲染冲突问题
对于以下公式
1
2
3
4
5$ \alpha\beta $
$ \alpha_\beta $
$ \alpha_\beta = \gamma_\delta $最终渲染效果为 $\alpha\beta$, $\alpha_\beta$ 和 $ \alpha\beta = \gamma\delta $
实际上是把同一行中的下划线渲染成了斜体符号,所以就出现上述问题,有个好办法就是直接修改
hexo-renderer-kramed
的源码打开文件,
node_modules/kramed/lib/rules/inline.js
,做如下修改1
2
3
4
5
6var inline = {
// escape: /^\\([\\`*{}\[\]()#$+\-.!_>])/,
escape: /^\\([`*\[\]()#$+\-.!_>])/,
// em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
};注意只改这两行,其它不需要改
公式超长
NexT主题对公式的样式配置存在一些小问题,导致当公式太长的时候,显示内容会超出文章区域。
如果使用默认的配置,行内公式超长时总会超出文章显示区域,而块公式时候会超出区域则取决于选择的渲染方式(HTML-CSS不会超出区域,其他情况会)。
进行了修改后,总是会在公式超出区域时生成滚动条,效果更佳理想。
打开文件
themes/next/layout/_third-party/math/mathjax.swig
文件,在文件末端添加如下代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<script type="text/x-mathjax-config">
MathJax.Hub.Queue(function() {
var all = MathJax.Hub.getAllJax(), i;
for (i = 0; i < all.length; i += 1) {
document.getElementById(all[i].inputID + '-Frame').parentNode.classList.add('has-jax');
}
});
</script>
<script src="{{ theme.math.mathjax.cdn }}"></script>
<style>
.has-jax {
overflow-x: auto;
overflow-y: hidden;
}
</style>最终也得到了解决,但是也有一些其它的问题