若只是想看解决方法的话,直接跳到下面红字部分即可。上回说到 KT 改字体后,正文部分显示得都很好,唯独左上角标新立异,非要与众不同。如下图所示:
另外,在阅读过程中,点击目录跳转的话,可以发现目录字体也是参差不齐。如下图中的“第二回”那一行:
同样的还有自带浏览器,也是这个囧样。
这个倒也不是什么大问题,但是在看书时偶尔瞥到这残缺的美,内心总不免一阵郁郁。遂跋山涉水,决心寻到解决之法。
经过比对,可以看出这些字体是由 HeiseiMaruGoth_JIS0213_E(KT 自带的日文字体) 和 Code2000(覆盖所有 Unicode 字符集的字体) 两种字体混合而成的。
一番探索后,发现了这些部分是调用 sans-serif 字体的。
如下是我的字体配置文件 local.conf 中关于字体 sans-serif 的部分:
- ...
- <alias>
- <family>sans-serif</family>
- <prefer>
- <family>Helvetica Neue LT</family>
- <family>Kindle Symbol</family>
- <family>MHeiGB18030C-Medium_E</family>
- <family>HeiseiMaruGoth_JIS0213_E</family>
- <family>HangulGothicMTC-Medium_E</family>
- <family>MHeiC-Medium-Big5HKSCS_E</family>
- <family>Code2000</family>
- </prefer>
- </alias>
- ...
当系统请求 sans-serif 字体时,首先从字体 Helvetica Neue LT 中查找是否有该字符,若是没有的话,则再到下一个字体 Kindle Symbol 中寻找,依次类推。
前面的两种字体都是英文字体,所示若是要显示中文字符的话,应该是调用的第三个字体 MHeiGB18030C-Medium_E,这个字体覆盖了 GB18030 中的所有中文字符。
当在阅读过程中点击 Aa 按钮选择 sans 字体时,可以看到正文部分确实是 MHeiGB18030C-Medium_E 这个字体,说明关于 sans-serif 字体的调用与我们的推测一致。
但是为什么目录、浏览器这些调用 sans-serif 字体的地方却是跳过了第三个,而调用第四个字体 HeiseiMaruGoth_JIS0213_E 呢?
于是我将第四个字体注释掉,如下:
- ...
- <alias>
- <family>sans-serif</family>
- <prefer>
- <family>Helvetica Neue LT</family>
- <family>Kindle Symbol</family>
- <family>MHeiGB18030C-Medium_E</family>
- <!--
- <family>HeiseiMaruGoth_JIS0213_E</family>
- -->
- <family>HangulGothicMTC-Medium_E</family>
- <family>MHeiC-Medium-Big5HKSCS_E</family>
- <family>Code2000</family>
- </prefer>
- </alias>
- ...
重启 framework 进程后,发现此时目录中的字体全部显示为 Code2000 字体了,又跳过了 HangulGothicMTC-Medium_E(韩文字体) 和 MHeiC-Medium-Big5HKSCS_E(繁体中文字体) 这两个字体。如下图所示:
到底为什么会这样,具体原因我还不清楚,不过我猜测可能此处调用的字体必须是某种 Unicode 之类的字体,而 KT 中只有 HeiseiMaruGoth_JIS0213_E 符合要求,但是又由于该字体是日文字体,所以其中缺少的那些中文字符就由 Code2000 来代替了。
我用 FontCreator 打开了这两种字体,查看它们的属性,企图找到它们和其他字体的不同之处,比如类似于属性声明什么的,但是却没有什么发现。
具体原因暂且不管它,接下来是看看如何解决。
我的想法是用另一种字符集较全的中文字体插在 HeiseiMaruGoth_JIS0213_E 之前,这样在目录这些地方请求 sans-serif 字体时,会直接使用该字体而不需要轮到下面的日文字体,导致最后显示参差不齐。
网上搜索了一番,决定使用文泉驿微米黑字体。该字体比较小巧,只有4兆左右,而且字符集也很全。
将该字体复制到 KT 的 /usr/java/lib/fonts 目录,修改字体配置文件 local.conf,加入文泉驿微米黑字体,如下所示:
- ...
- <alias>
- <family>sans-serif</family>
- <prefer>
- <family>Helvetica Neue LT</family>
- <family>Kindle Symbol</family>
- <family>MHeiGB18030C-Medium_E</family>
- WenQuanYi Micro Hei
- <family>HeiseiMaruGoth_JIS0213_E</family>
- <family>HangulGothicMTC-Medium_E</family>
- <family>MHeiC-Medium-Big5HKSCS_E</family>
- <family>Code2000</family>
- </prefer>
- </alias>
- ...
然后再重新生成字体缓存文件,重启 KT 的 framework 进程。
效果图如下,可见此时目录的字体终于显示正常了!
再看左上角,文件名的字体也正常了。
又试了下自带的浏览器,显示也好了。
甚好甚好!
但是,很快又发现了另一个问题:之前在点击目录跳转时,会默认加粗当前所在章节的标题,如图所示:
然而现在的目录中却没有任何标题加粗的现象,这样的话,就不好判断当前所在的章节了。
奇怪!按说,若是字体没有原生粗体的话,系统的 fontconfig 程序会通过算法生成一个伪粗体的,不知道这里为什么没有。
于是又是一番折腾,其中艰辛不一而足,包括更换 libfreetype.so 文件和 libfontconfig.so 文件等等,但是结果却都没有成功。
没办法,最后只好自己手动生成一个粗体了。这个简单,用软件 FontCreator 很容易就可以做到了。
我之前之所以不愿意再加入一个粗体,是不想再往 Kindle 里面放文件了,毕竟要额外占据空间,总是感觉不爽。但是现在既然系统不帮忙生成,只好自己动手了。
将生成的文泉驿微米黑粗体复制到字体目录下,再次重新生成字体缓存,重启 framework 进程。
OK,终于搞定了!如图:
======================================================如下是具体的步骤:1.下载文泉驿微米黑字体,并通过软件生成其粗体字体,然后将两个字体文件放到 Kindle 盘符的根目录下。是我做好的字体文件;
2.通过 ssh 登录到 KT 上,将字体复制到相应目录下;
- $ ssh root@192.168.15.244
- root@192.168.15.244's password:
- # 下面是登录到 Kindle 后的操作
- [root@kindle] # mntroot rw # 重新挂载,使根分区可写
- [root@kindle] # mv /mnt/us/WenQuanYiMicroHei.ttf /usr/java/lib/fonts # 复制字体
- [root@kindle] # mv /mnt/us/WenQuanYiMicroHei_Bold.ttf /usr/java/lib/fonts # 复制粗体
- [root@kindle] # fc-cache -fv # 重新生成字体缓存,此处所需时间较长,需耐心等待
- [root@kindle] # vi /etc/fonts/local.conf # 编辑字体配置文件
- 在 sans-serif 部分加入微米黑字体,如下所示:
- ...
- <alias>
- <family>sans-serif</family>
- <prefer>
- <family>Helvetica Neue LT</family>
- <family>Kindle Symbol</family>
- <family>MHeiGB18030C-Medium_E</family>
- <family>WenQuanYi Micro Hei
- <family>HeiseiMaruGoth_JIS0213_E</family>
- <family>HangulGothicMTC-Medium_E</family>
- <family>MHeiC-Medium-Big5HKSCS_E</family>
- <family>Code2000</family>
- </prefer>
- </alias>
- ...
- root@kindle # restart framework # 重启 framework,使得配置生效
- root@kindle # cp /var/cache/fontconfig/f3* /opt/var/cache/fontconfig # 保存字体缓存文件
- root@kindle # mntroot ro # 重新挂载,使根分区恢复为只读
- root@kindle # exit # 退出登录
OK,一切搞定!现在可以打开某本书的目录,看一下效果了。
阅读(3535) | 评论(0) | 转发(0) |