zFont3
这是我前段时间发现的,用下来很不错,挺稳定的,我猜测原理是通过文件/网络劫持并让系统误认字体文件,然后通过系统配置字体;
目前我在我的 HyperOS 2/3、HarmonyOS 3 上采取这个方案
MIUI 14
我参考别的模块写了一个模块,没试过 zFont3; 这个模块在 HyperOS 会失效;
地址:https://github.com/xihale/LXGW-font-magisk-module
Koreader(Kindle)
这个分为 书籍字体和界面字体
书籍字体
首先要把字体文件传到 /mnt/us/fonts 下;
接着书籍配置选中这个字体;必要时得配置强制使用这个字体(忽略书籍 CSS 配置等)
界面字体
需要写一个 patch 脚本
koreader/patches/2-font-override.lua
local Font = require("ui/font")for k, v in pairs(Font.fontmap) do if v == "NotoSans-Regular.ttf" then Font.fontmap[k] = "LXGWWenKai-Regular.ttf" -- change to your preferred font elseif v == "NotoSans-Bold.ttf" then Font.fontmap[k] = "LXGWWenKai-Regular.ttf" -- change to your preferred font endend博客(动态切片字体)
以前我使用一套基于 pyftsubset 的构建脚本在 CI 环境下动态裁剪字体子集,但那套方案非常依赖 Python 环境,且在处理大字体文件时会极大地拖慢 CI 构建速度。
现在我改用了 lxgw-wenkai-webfont 方案。它基于 CSS 的 unicode-range 属性,将庞大的字体文件预先切分为数百个微小的切片。浏览器在渲染页面时,会根据实际出现的字符自动下载对应的切片。
这种方案不仅实现了 零构建开销,还避免了由于动态内容(如用户留言、搜索结果)导致子集缺失的问题。配置起来也非常简单,直接在 Astro 组件中引入对应的 CSS 即可:
import "lxgw-wenkai-webfont/lxgwwenkai-regular.css";与其他字体合并
考虑到 等宽字体 + Nerd 表情需求,也可以把别的字体与其合并、覆盖