关于Hexo网页中文首行缩进的解决方案
中文的阅读习惯是正文段落首行要缩进 2 个汉字,虽说此举可能有历史原因的不得已,但至少就我而言,还是喜欢缩进这种赏心悦目。
只是 Hexo 采用不支持中文缩进的 Markdown 语言,而本网站又是中英双语内容(不希望 English 内容也变成首行缩进),对于不懂 CSS 的 Ai-China 来说,还真是颇费了一番功夫。
好,直接讲实现思路:
-
修改 post 模板,直接为中文文章添加 lang: zh-CN 标签。与直接每篇文章都添加一个 lang: zh-CN 等效,只是修改模板更方便。
或者,如果已有比较多写好的 .md 文件(文章),每个打开再添加很麻烦。这时就要用 js 脚本批量在其 Front-matter 中插入 lang: zh-CN。方法是通过 .md 文件的 Front-matter 中的 title 判断文章是否中文,如果是,则添加 lang: zh-CN。
-
添加自定义 css 文件,通过对特定标记的渲染实现只缩进中文正文段落首行的目的。
第一步:
post 模板位于网站根目录下的 scaffolds 文件夹下的 post.md,用 Typora 之类编辑器打开,编辑 Front-matter 添加 lang: zh-CN
以后新建文章的时候,就可以选 zh-CN 和 en 留一个。
或者,
如果已有很写好的 .md 文章,上述的新建模板不会影响到之前的文章。所以写了一个批处理,批量实现上述目的。
同样在博客根目录下打开 cmd,执行如下操作:
如果你希望批量为现有文章的 Front Matter 中插入 lang
标签,可以使用脚本来实现。以下是一个简单的 Node.js 脚本示例,它假设你的文章都是 Markdown 格式的,并且 Front Matter 使用 YAML 格式:
1 | const fs = require('fs'); |
请注意,这个脚本使用了 gray-matter
模块来解析和更新 Markdown 文件的 Front Matter 部分。在运行脚本之前,请确保已安装该模块:
1 | npm install gray-matter |
然后,你可以将上述脚本保存为 add-lang-tags.js
或其他任何名称,然后通过以下命令运行:
1 | node add-lang-tags.js |
这将扫描你的 Hexo 博客中的所有 Markdown 文章,并在缺少 lang
标签的情况下为其添加 lang
标签。
ps: 处理后似乎在 cover:
后面添加了 >-
,但不影响 cover 加载,所以忽略了。
第二步:
进入主题目录下layout
文件夹,打开post.pug
,找到article#article-container.post-content!=page.content
,改为article#article-container.post-content(data-lang=page.lang)!=page.content
。
创建符合目的的自定义 css。
1 | /* 对于 lang 为 zh-CN 的文章,添加首行缩进两个汉字的样式 */ |
将上述代码保存为custom.css
,存储于主题目录下source
–>css
文件夹内。然后打开主题_config.yml
文件,查找如下inject
内容,如图修改相对路径后保存:
收尾工作:
重新来一遍:
hexo clean
hexo g
hexo d
hexo s
效果可以查看本站文章,英文保持不变,中文文章已变成段落首行缩进,且引用块不缩进。