深色模式
本地化默认 cdn 资源
百度统计
LaTex 支持
LaTex SSR(Server Side Rendering)
next
起因
Landscape 在我这边有 font-awesome 的图标显示问题,但是 Github 上没有
issue,不确定是否为主题 bug,我自己魔改也是改了一大堆,自己引入了新的 fa
lib 再修改图标 short cut
并且 Landscape 对中国的备案页脚,以及 katex/Mathjax
并无原生支持,调来调去比较麻烦
遂又找了个简洁明了又更加 modern 的主题,也就是现在使用的 Next
迁移过程
Part 1 安装
这个安装看Next 官方doc 就行,非常简单,为了方便起见我新建了一个
hexo 项目,再以 git 方式安装
Next,为了方便修改主题,如果你没有这个需求其实可以直接 npm 包安装
installation 1 2 3 npx hexo init hexo-site cd hexo-sitegit clone https://github.com/next-theme/hexo-theme-next themes/next
启用 Next 主题,也就是修改_config.yml,也就是 Hexo 的配置
_config.yml 1 2 3 4 ... -theme: landscape +theme: next ...
同时将 themes/next 下的_config.yml
复制出来到项目的根目录底下,与_config.yml 同级,
命名为_config.my-next.yml 用于修改主题配置
Part 2 改
config,改主题,各种改
参考 docs https://theme-next.js.org/docs/theme-settings/
布局和深色模式
Next 原生提供了 4 种布局,参考官方的描述,这里我选择的是 Gemini
提供一个侧边栏,我觉得更加实用
Muse → Default Scheme, this is the initial version of NexT. Uses
black-white tone and mainly looks cleanly.
Mist → A tighter version of Muse with a tidy single-column
view.
Pisces → Double-column Scheme, fresh like your neighbor's
daughter.
Gemini → Looks like Pisces, but have distinct column blocks with
shadow to appear more sensitive to view.
_config.next.yml 1 2 3 4 5 6 7 8 9 10 11 12 13 # --------------------------------------------------------------- # Scheme Settings # --------------------------------------------------------------- # Schemes -scheme: Muse # scheme: Mist # scheme: Pisces +scheme: Gemini # Dark Mode -darkmode: false +darkmode: true
实测这个改为 true 并不会强制 darkmode,而是会自动选择
菜单设置
也就是页面 sidebar 上面的东西
_config.next.yml 1 2 3 4 5 6 7 8 9 10 --- menu: home: / || fa fa-home about: /about/ || fa fa-user tags: /tags/ || fa fa-tags categories: /categories/ || fa fa-th archives: /archives/ || fa fa-archive sitemap: /sitemap.xml || fa fa-sitemap
更改代码块主题
我个人喜欢 one-dark
具体主题选择和配置可以看 https://theme-next.js.org/highlight/
_config.next.yml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 codeblock: theme: light: atom-one-light dark: atom-one-dark prism: light: prism dark: prism-dark copy_button: enable: true style: fold: enable: true height: 500
back to top 按钮
_config.next.yml 1 2 3 4 5 6 back2top: enable: true sidebar: false scrollpercent: true
Mathjax 的配置
具体看 https://theme-next.js.org/docs/third-party-services/math-equations
安装新的 markdown 渲染器hexo-renderer-pandoc ,原因是默认的渲染器会影响
LaTex 的解析与渲染
npm command 1 2 $ npm un hexo-renderer-marked $ npm i hexo-renderer-pandoc
需要注意一点,这个渲染器需要你安装 pandoc,以渲染 LaTex
参考 https://github.com/jgm/pandoc/blob/master/INSTALL.md
随后你需要讲 pandoc 配置写入 Hexo 的配置文件_config.yml,其中
pandoc_path 是你 pandoc 安装位置
1 2 pandoc: pandoc_path: C:/Program Files/Pandoc/pandoc.exe
最后很重要 的一步是清理 Hexo 缓存以及校验插件安装
修改_config.next.yml
_config.next.yml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 math: every_page: false mathjax: enable: true tags: none katex: enable: false copy_tex: false
配置 SSR
这个 SSR 是以 SVG 形式渲染的,可以有更快的首屏,无需等待 LaTex
渲染,坏处是无法复制,无法交互,需要取舍
参考 https://github.com/next-theme/hexo-filter-mathjax
安装 filter 并清理缓存
npm command 1 2 npm install hexo-filter-mathjax hexo clean
修改 math 配置
_config.next.yml 1 2 3 4 5 6 7 8 ... math: ... + every_page: false mathjax: - enable: true + enable: false ...
这里有个坑,启用 SSR 后,every_page 是 true 并不能启用页面的
mathjax,必须在页面的 front matter 上启用mathjax: true
展示一下效果
源码
markdown source code 1 2 3 4 5 6 7 8 9 10 11 12 $ $ i\hbar \frac {\partial }{\partial t}\psi =-\frac {\hbar ^ 2}{2m}\nabla ^ 2\psi +V\psi $ $ $ $ \begin {eqnarray*}\nabla \cdot \vec {E}& =& \frac {\rho }{\epsilon _ 0}\\ \nabla \cdot \vec {B}& =& 0\\ \nabla \times \vec {E}& =& -\frac {\partial B}{\partial t}\\ \nabla \times \vec {B}& =& \mu _ 0\left (\vec {J}+\epsilon _ 0\frac {\partial E}{\partial t}\right )\\ \end {eqnarray*}$ $
本地搜索的配置
参考 https://theme-next.js.org/docs/third-party-services/search-services
安装 npm 包
npm command 1 npm install hexo-generator-searchdb
修改 Next(_config.next.yml)以及 Hexo(_config.yml)的配置
_config.next.yml 1 2 3 4 5 6 7 8 9 --- local_search: enable: true top_n_per_article: -1 unescape: true preload: false
_config.yml 1 2 3 4 5 search: path: search.xml field: post content: true format: html
sitemap 配置
装包就行也不用配置什么
npm command 1 npm i hexo-generator-sitemap
标签和分类以及关于页面
这俩直接在 menu 里加了没用,要自己手动创建,当时找了半天
hexo command 1 2 hexo new page categoires hexo new page tags
同时你需要修改这俩的 front matter
categories 1 2 3 4 5 6 title: categories date: +type: "categories" ...
tags 1 2 3 4 5 6 title: tags date: +type: "tags" ...
如果你需要关于(about)页面,方法与上述类似,先用hexo new page
生成页面,再修改
front matter 并修改 type 为`"about"``
word counter 配置
也就是文章标题下显示的这个阅读时间和单词数量 参考 []
先装包
npm command
修改 Hexo 配置
_config.yml 1 2 3 4 5 6 symbols_count_time: symbols: true time: true total_symbols: true total_time: true awl: 4
修改 Next 配置
_config.next.yml 1 2 3 4 5 symbols_count_time: separated_meta: true item_text_total: true
Part 3 配置百度统计
修改 Next 配置
在此处添加你的百度站点验证码
_config.next.yml 1 2 3 baidu_site_verification: [your verification code ]
在此处添加你的百度统计 id
1 2 3 # Baidu Analytics # See: https://tongji.baidu.com baidu_analytics: [your analytics id]
防止本地测试运行时使用百度统计
将 themes/next/layout/_third-party/analytics/baidu-analytics.njk
替换为如下内容
baidu-analytics.njk 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 {%- if theme.baidu_analytics %} <script > var _hmt = _hmt || []; (() => { if (window .location .hostname .indexOf ("localhost" ) == -1 ) { (function ( ) { var hm = document .createElement ("script" ); hm.src = "https://hm.baidu.com/hm.js?{{ theme.baidu_analytics }}" ; var s = document .getElementsByTagName ("script" )[0 ]; s.parentNode .insertBefore (hm, s); })(); } })(); </script > {%- endif %}
图片显示问题
就现在新版本 Hexo 与 Next 来说,你只需要修改 Hexo 的配置,无需使用
image 显示插件了
_config.yml 1 2 3 4 ... -post_asset_folder: false +post_asset_folder: true ...
然后千万记得hexo clean
,我搁这卡了 1h
hexo command
总结
就这点东西,折腾了一晚上,next 的 config 有八九百行,也是看吐了
🤮,整博客的乐趣和成就感还是在于折腾啊