关于中文博客格式的思考
关于中文博客格式的思考
起源
一开始看到这个话题,是在阮一峰大佬的 Github 开源项目:GitHub - ruanyf/document-style-guide: 中文技术文档的写作规范,在文本这一章节,我第一次注意到了中英文字符之间应该添加空格这个问题。因为经常看阮一峰大佬的博客,所以我也会不自觉地模仿他的博客风格,他的博客主要以短句为主,而且非常美观,阅读起来非常地轻松和流畅,其中阅读体验舒服流畅这一条,就是中英文字符之间添加了空格的功劳。
自动化插件 - 盘古之白
有了空格,好看是好看,但是在写作过程中保持手动添加空格的习惯实在是太过强人所难,写博客都没啥时间,更不用说还要注重排版,直到我在通过 hugo 创建个人静态博客的时候,通过使用FixIt主题,发现了盘古之白这个插件,这个插件的开源地址为:GitHub - vinta/pangu.js: Paranoid text spacing in JavaScript,专门用来处理中英文等各种情况之中添加空白字符的问题。
pangu.js 的原理其实也不复杂,就是通过正则的分组匹配,匹配到需要添加空格的位置然后通过替换,添加空格
pangu.js 穷举了所有的需要添加空格的情况,一个一个得匹配然后替换,简单、粗暴、有效
而且因为足够简单,所以很容易提供多种客户端,支持多个场景下的使用
-
支持在代码中使用,比如 js、go、Java、python
-
支持在命令行中使用
-
支持浏览器插件
-
支持 vscode 查看
-
支持 Jetbrain 系列 IDE 插件
其中最方便的是支持在代码中使用,这样我们就可以编写自己的脚本批量格式化待处理的文本,实际上我也是这样用的。
其中,在使用 pangu.js 的Python 版本进行脚本开发的时候,我发现了一个问题,即,在通过$ pip install -U pangu
下载 pangu.js 之后,直接通过命令行pangu -f xxx.txt
格式化文件,或者,编写 python 脚本,引入 pangu 模块之后,调用 spacing_file 方法格式化文件,都是无法正常读取 utf-8 编码格式的文件的,需要到包文件(site-packages\pangu.py
)中的 162 行,修改脚本内容为with open(os.path.abspath(path),encoding='UTF-8') as f
才可以。
此外 pangu.js 还有一个比较大的缺陷,就是不支持在 markdown 中添加空格,具体的讨论如下,正確地處理 Markdown · Issue #127 · vinta/pangu.js · GitHub
而且盘古之白这个项目好长时间都没更新了,指望作者来修复这些问题是指望不上了。
换成 autocorrect
鉴于 pangu.js 的各种问题,我最终采用的是AutoCorrect,项目开源地址为:GitHub - huacnlee/autocorrect: A linter and formatter to help you to improve copywriting, correct spaces, words, and punctuations between CJK (Chinese, Japanese, Korean).,线上体验地址为:autocorrect—editor
这个开源项目跟 pangu.js 相比比较进步的地方就是针对不同的文档类型进行了适配,其中就包括 markdown。
跟 pangu.js 的适配场景差不多
-
支持在代码中使用,比如 js、go、Java、python
-
支持在命令行中使用
-
支持 vscode 查看
-
支持 Jetbrain 系列 IDE 插件
在代码中使用的方式也很简单,以python 为例:
先下载
|
|
然后使用
|
|
对于文件的格式化,可以一次性将文件内容读取到字符串中,然后通过autocorrect.format_for
方法格式化即可。
而且最重要的一点是,其生效逻辑是在文件保存的时候自动格式化,不需要像 pangu.js 一样额外使用格式化动作来进行格式化,真正做到了无感使用。在实际的使用中,体验非常好。
总结
建议所有的中文博客作者都安装这个插件,来提升自己的博客的阅读体验。
同时为了实现无感格式化,建议将手头使用的所有的编辑器都安装同一种类型的插件,比如我本地就是 Jetbrain 系列的 IDE 和 vscode,我都安装了 autocorrect,这样就能获得一致的连续的格式化体验。