solitude 安装
1 2 3 4 5 6 7 8 # 官方安装 在hexo主目录下操作 # git clone -b main https://github.com/everfu/hexo-theme-solitude.git themes/solitude # 修改了源代码,所以还是用自己的仓库吧。不然官方一更新,我这边就对不上了。 git clone -b dev https://github.com/hs3434/hexo-theme-solitude themes/solitude # 复制配置 cp -rf themes/solitude/_config.yml ./_config.solitude.yml # 如果没有插件,请安装 npm install hexo-renderer-pug hexo-renderer-stylus --save
在 _config.yml 文件中添加:
Solitude katex 公式支持
需要使用更高级的 markdown 渲染器
1 2 3 4 5 # 卸载原有的 npm un hexo-renderer-marked --save # 安装高级的 npm i hexo-renderer-markdown-it --save npm i @renbaoshuo/markdown-it-katex --save
配置 _config.yml
1 2 3 4 5 6 markdown: preset: 'default' # 使用的 MD 语法,默认使用的 GFM render: html: true # 渲染 html xhtmlOut: false langPrefix: 'language-' # 在代码块的类名中添加前缀(指定语言时)。
配置 _config.solitude.yml
1 2 3 4 katex: enable: true per_page: true # 是否在每页都加载 / Whether to load on each page copytex: false # 是否开启复制公式 / Whether to enable copy formula
mermaid 流程图支持
安装插件
1 npm install --save hexo-filter-mermaid-diagrams
配置 _config.solitude.yml
后面的问题不用看了,官方已经修复bug了,这里仅留做记录。
Solitude 博文封面路径问题
Solitude 是 hexo 的一款主题,提供了使用 cover 参数指定博客文章封面的功能。
按照我的逻辑,博文的文章封面应该和博文的图片放在一起,而我之前已经设置了粘贴图片时自动把图片放到博文目录的功能。
但是这里 cover 需要指定网页的绝对路径,很不方便(这个路径还不是固定的),所以需要修改代码来生成图片的网页路径。
修改 hexo/themes/solitude/scripts/filter/default.js 文件就行了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 'use strict' ;const path = require ('path' );function gfg_Run (URL ) { let RgExp = /(?:[a-z]+:)?\// ; if (RgExp .test (URL )) { return true ; } else { return false ; } } hexo.extend .filter .register ('after_post_render' , function (data ) { data.title = data.title || 'Untitled' ; const {config} = hexo.theme ; if (data.layout === 'post' ) { let {copyright, locate, cover} = hexo.theme .config .post .default cover = cover !== null ? cover : ['/img/default.png' ] data.locate = data.locate || locate data.cc = data.cc || copyright if (typeof (data.cover ) != "undefined" && !gfg_Run (data.cover )) { data.cover = path.join (data.path , data.cover ) } data.cover = data.cover || cover[getRandomInt (0 , cover?.length )] data.excerpt = data.description || data.excerpt data.toc = !!(config.aside .toc .post && data.toc !== false ) data.ai = data.ai !== false } if (data.layout === 'page' ) { let {cover} = hexo.theme .config .page .default cover = cover !== null ? cover : ['/img/default.png' ] data.cover = data.cover || cover[getRandomInt (0 , cover?.length )] data.excerpt = data.title data.toc = !!(config.aside .toc .page && data.toc !== false && data.aside ); } data.comment = !!(config.comment .use && data.comment !== false ); return data; }); function getRandomInt (min, max ) { min = Math .ceil (min); max = Math .floor (max); return Math .floor (Math .random () * (max - min)) + min; }
Solitude 博文侧边最近文章图片路径问题
只需再加上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 hexo.extend .filter .register ('before_generate' , function ( ) { hexo.locals .invalidate (); const posts = hexo.locals .get ("posts" ); console .log (`Processing ${posts.length} posts in the site.` ); hexo.config .generate_stage = "before_generate" ; posts.forEach (post => { if (typeof (post.cover ) != "undefined" && !gfg_Run (post.cover )) { post.cover = path.join (post.path , post.cover ) } post.save (); }); });
再修改 themes/solitude/layout/includes/widgets/aside/asideNewestPost.pug
因为在 post 页面主路径是 post 的路径,所以 post.cover 需要使用 url_for 转化为绝对路径。
1 2 3 4 # 第11行 img(alt=post.title src=post.cover) # 改为 img(alt=post.title src=url_for(post.cover))