[网友投稿] 为 Kindle 增加支持罕见/生僻字及替换系统字体
本文系网友“不老山”的投稿,原标题《Kindle增加支持罕见/生僻字及替换系统字体的过程》。
前段时间读本传记,出现一些罕见字无法识别,这对完美控怎么能忍?所以这两天对手中的 Voyage 越了狱,从书伴学了很多知识,也走了很多弯路。现在想着把如何替换系统字体的心路历程整理出来,源于书伴,发于书伴(书伴的每个插件链接都能下到,这点真不错)。
Kindle 固件号 5.13.6,用到的插件有:KUAL、Fonts Hack、File Browser、Kterm、Koreader。
用 Koreader 打开 epub 非常方便,也识别自定义字体,但如果用 kpvbooklet 直接关联文件在无框架情形下打开会导致压敏键失效,只有在 Kual 的框架下打开,压敏键才能正常使用。
一
Windows/Fonts/ 中自带宋体扩展字库 simsunb.ttf,家族名为 SimSun-ExtB,用 FontCreator 打开自己喜欢的一套字库和这套扩展字库,因为大小和粗细不一样,要对扩展字库扩大加粗,另外,合并后字库不能多于 65535 个,所以只能选部分内容,但也能选到 8 成左右罕见/生僻字了。
补充:如果两套字库内容有重复,手工调整太麻烦,可以用另一个软件 FontForge 合并,它会自动删减掉第 2 个字库中的重复字。我用 FontForge 合并后,两套字库文字大小总不一致,费了很久时间。后来先用 FontCreator 对 2 套字库的文字大小和粗细调到相似,再用 FontForge 把两套字库保存成 sfd,再对 sfd 文件才合并成功。另外 FontForge 软件还能查看和修改完整字库元素信息。见下图,注意新字库的元素家族名。
这里只留下关键信息,其它已擦除,STFZ 只是为了简便而起,各位可用 FontForge 自定家族名,在“PS字体名称”中修改,在“TTF名称”中查看结果,样式(子族)Regular 是下面配置文件要匹配的,如果这里不是 Regular,下面配置文件也要改。中文家族名为了保持唯一,也可以修改下,但这里不会起作用(而多看就只认中文家族名,而不是英文,大千世界就这么神奇)。这样就得到一个新字库了。
二
把新字库拷入 /mnt/us/linkfonts/fonts/
中,Kual-Fonts-Fonts Hack Behavior-Update fontconfig cache(此过程下面将简述为重建或重建缓存),不用重启,重建好后 Kindle 会自动重启。这时可在书里用 CSS 定义新字体了,但会碰到几个新问题:1. 每个电子书都要定义,异常麻烦;2. 我电子书有各种格式,定义新字体后,原来标题有粗体的,现在都没粗体,非常不美观。
针对上述问题,我作了各种研究和探索,比如建立 99-fc-override-CN.conf,先用了:
<match target="pattern">
<test name="family" compare="eq"><string>STSong</string></test>
<edit name="family" mode="prepend" binding="strong"><string>STFZ</string></edit>
</match>
重建重启后,所有电子书的 STSong 样式都被替换成新字体 STFZ,但粗体没了,不美观。
又用了 <match target="scan"><edit name="style" mode="assign">
等各种配置均未生效,这个配置文件我测试了近一天时间,没任何结果。
最后,想想既然 Kindle 同时有 STSongMedium.ttf 和 STSongBold.ttf 处理正文和加粗文字,那么能不能直接替换其中的 STSongMedium.ttf 为 STFZ 来显示正文字体,继续用原生的 STSongBold.ttf 处理标题加粗字体?好在我做的这套字体也是宋体系,差别还能忍。
三
这步比较复杂,找了很久资料,大约有这几个结果,STSong/STHeiti 字体存放于 /usr/java/lib/fonts/
,STKai/STYuan 存放于 /var/local/font/mnt/zh-Hans_font/fonts/
,这两个目录都是引导时就设置成 ro(read-only,所以应该无法操作文件替换),STSong/STHeiti 的配置文件是 /etc/fonts/conf.d/48-lab126-local.conf
,STKai/STYuan 的配置文件是 /var/local/font/conf.d/02-zh-Hans.conf
,这两个配置文件可以修改。
打开 Kterm(如果能忍受 Kindle上 敲字的话,有它就够了,如果要打字方便些,可以用 Koreader 中的 SSH 服务器连接,但要用 Kterm 修改 root 密码,命令 passwd root,可自行百度下载 OpenSSH 软件以连接 ssh,ssh 增加读写权限命令“mount -o remount,rw /”),下面是 Kterm 命令:
- 进入读写模式:mntroot rw
- 建立字库文件夹以防误删除:mkdir /usr/java/lib/stfz/
- 上传拷入字库:cp /mnt/us/STFZ.ttf /usr/java/lib/stfz/
用 File Browser 下载 48-lab126-local.conf,对里面作如下修改,注意全要用英文,不知道改错会什么后果,切记切记。
- 增加
<dir>/usr/java/lib/stfz</dir>
<string>STBShusong</string>
改成<string>STFZ</string>
见下图:
改好保存。
用命令拷入替换:mv /mnt/us/48-lab126-local.conf /etc/fonts/conf.d/
我是先用 rm –f /mnt/us/48-lab126-local.conf
删除再拷入的,应该上面一步就够了。
没有写入权限?请检查上文的 rw 部分。
重建缓存重启后发现电子书字体没生效,继续检查猜测有可能是系统字体缓存没有重建或者有其它机制覆盖了 48-lab126-local.conf 配置。
可以用 Kual-Fonts-Fonts Hack Behavior-Clear fontconfig cache 来清除并重建缓存,用 File Browser 刷新 /var/cache/fontconfig/
目录,能完整看到删除并重建缓存的过程,重建时间较长,Kindle 屏幕会有日志提示,等重建好要手工重启 Kindle。
重启后用命令 fc-list :lang=zh 看到 STBShusong 单独显示而不是以 STSong medium 显示,说明修改成功了。这样替换字体就全部结束了,我测试了几个电子书,本地的 azw3 几乎都生效了,正文用的 STFZ,标题等粗体用的 STSongBold.ttf,但书城购买的几本电子书还是用的 STSongMedium.ttf,不知道书城的书样式是不是不用 STSong?这要看书城书的 CSS 样式才能针对解决,而我还找不到看书城 CSS 样式的方法,不过这方法解决了大多数我本地书库字体问题,后面有时间再慢慢研究了。
用上述方法同样也可以替换 STSong 粗体、STKai、STHeiti 等其它字体标准体和粗体,各位按图索骥尝试吧!
最后,One more thing,Kindle 的 CSS 样式很怪异,比如定义了 body 样式而不定义 p 样式,此时按理 p 应该继承 body 样式,但 Kindle 却继承了阅读器-字体设置中所选择的 4 种字体之一,我测试时花了很长时间才发现这个情况。还有,电子书也有缓存,也不知道在哪,反正只能在阅读选项中打开每页刷新,多点几页才会看到结果。
上面都是我的呕血史,已经裁弯取直,花点时间写出来希望能发挥作用!
© 「书伴」原创文章,转载请注明出处及原文链接:https://bookfere.com/post/1059.html
延伸阅读
- 在多元的世界阅读多元的经典
- 如何用 KindleEar 推送无 RSS 的网站内容(下篇)
- [网友投稿] 用 WebToEpub 将在线电子书转换成 EPUB 文件
- 杨绛谈读书:乐在其中,读书好比串门儿
- [每周一书]《软技能》代码之外的生存指南
- 为什么推送到 Kindle 的 KF8 标准 MOBI 电子书不显示封面
- 美国流浪汉爱读书,好心人受感动送其 Kindle
- 解读哲学家:牛津通识读本系列丛书摘选推荐
- 修复第三方 Kindle 字典释义显示不全的问题
- Kindle 丢失或被偷怎么办?该如何找回?
- [每周一书]《意志力》专注、自控与效率的心理学
- Kindle 怎么导入电子书(图解多种电子书导入方式)
- [每周一书] 如何成为一名《卓有成效的管理者》
- KindleUnpack:拆解 Kindle 电子书文件的利器
- 查词时 Kindle 字典在中英文电子书中的不同表现
看到你的这句”kpvbooklet 直接关联文件”很惊讶,能否分享你关联成功的经验?
我觉得最麻烦的是有些字不能和我的字体统一就很烦!比如我现在看高清日本史就是!我用的是瘦金体,就是没有的全兼容瘦金体字体!
我一般用自定义字体——思源黑体,我不看冷门书籍,但是暂时也没碰上过显示不出来的字。