关于hexo生成目录的一种解决办法
基础部分:三分钟快速搭建个性化博客。
第一部分:hexo-Next8博客搭建、美化(darkmode、waline等)
第二部分:hexoNext美化(二)
第三部分:hexo美化(三)进阶:异步加载脚本,加快网站访问
全文整理:csdn
在上一篇中我们谈到了利用hexo-renderer-markdown-it-plus
插件渲染md支持的目录,并利用hexo支持的md注释显示阅读更多按钮,这样,我们在各个网站迁移自己写的md文档时也不会遇到格式匹配问题了。
但是这样就会产生一个问题,如果我们在首页同时用显示摘要(或部分文字)和插入阅读更多按钮,而md文档自动帮我们生成的TOC目录只会产生一个#锚点,并不会跳转到博文相对应的链接,然后读者就和一动不动的网页干瞪眼啊😅😂官方的helper我个人感觉弄起来非常麻烦,而且我们的md文档转到另一个平台又要重新忧虑插入目录的问题了~
因此博主的思路是,在静态文件生成后修改首页(包括index.html
和page
文件夹下的所有页面),利用lxml
库解析home
页的对应markdownIt-TOC
类下的所有a
标签的herf
链接,同时找到markdownIt-TOC
父节点的兄弟节点(就是那个post
的header a
的herf
),连接到一起,然后重新匹配,替换掉该部分(因为直接写入解析替换后的html会乱码,不敢动),hexo d
生成后,拉取静态文件到本地,再重新push上去,这里还可以再对逻辑修改下减少下载上传量。
4.11 修改: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# updateIndexLink.py
from lxml import etree
import re
import os
import sys
def update_links(html_file):
with open(html_file, 'r', encoding='utf-8') as f:
html_content = f.read()
# 解析HTML文件
parser = etree.HTMLParser(encoding="utf-8")
htmlelement = etree.parse(html_file, parser=parser)
# 博文体
index_elements = htmlelement.findall('.//div[@class="post-block"]')
for index_elem in index_elements:
# 查找 .markdownIt-TOC a 元素
toc_links = index_elem.findall(".//ul[@class='markdownIt-TOC']//a")
if toc_links is not None:
# 查找 .header a 元素
header_link = index_elem.find(".//header//a")
if header_link is not None:
for toc_link in toc_links:
old_href = toc_link.get('href')
text = toc_link.text
# 更新 .markdownIt-TOC a 元素的 href 属性
new_href = header_link.get('href') + old_href
# 这里用了optimal插件就要去掉了[""]
html_content = re.sub(fr'<a href="{old_href}">', f'<a href="{new_href}">',html_content)
# 将修改后的HTML内容写回文件
with open(html_file, 'w', encoding='utf-8') as f:
f.write(html_content)
if __name__ == '__main__':
dir_path = sys.argv[1] if len(sys.argv)>1 else os.path.dirname(os.path.abspath(__file__))
for root, dirs, files in os.walk(dir_path):
for subdir_count in dirs:
file_path = os.path.join("page", subdir_count, "index.html")
if os.path.exists(file_path):
update_links(file_path)
update_links(os.path.join(dir_path,"index.html"))
upaload.bat1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25CALL hexo cl
CALL hexo d
timeout /t 10
rem 克隆你的存储库
git clone ?yourrepo
rem 你的环境
CALL conda activate yourenvs
python updateIndexLink.py yourrepo
cd yourrepo
git add .
git commit -m "uploadTOC"
git push
rd /s /q unnamedtat-blogs
这样直接在命令行运行这个bat就可以了,不过还是比较麻烦的,而且在本地启动服务器也看不到子链修改的效果了,希望我有动力push自己学着写个插件吧~不过还是很麻烦啊😂
对了,今天遇到了hexo的公式渲染问题,之前我一直用的mathjax,hexo-renderer-markdown-it-plus
插件貌似会自动启用katex,去看了一下其貌似需要引入一个css文件。
而在hexo next官网发现官方已经是帮我们集成好了,因此直接设置使用katex渲染就可以了,貌似会少一些函数,不过又不是写论文。😄Math Equations
在md中使用emoji: