Chinaunix首页 | 论坛 | 博客
  • 博客访问: 436810
  • 博文数量: 35
  • 博客积分: 747
  • 博客等级: 上士
  • 技术积分: 870
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-05 00:04
个人简介

执酒对饮桃花翩,醉踏歌剑挽流年。

文章分类

全部博文(35)

文章存档

2015年(1)

2014年(4)

2013年(2)

2012年(15)

2011年(13)

分类: LINUX

2012-12-09 00:33:39

若只是想看解决方法的话,直接跳到下面红字部分即可。

上回说到 KT 改字体后,正文部分显示得都很好,唯独左上角标新立异,非要与众不同。如下图所示:


另外,在阅读过程中,点击目录跳转的话,可以发现目录字体也是参差不齐。如下图中的“第二回”那一行:

同样的还有自带浏览器,也是这个囧样。

这个倒也不是什么大问题,但是在看书时偶尔瞥到这残缺的美,内心总不免一阵郁郁。遂跋山涉水,决心寻到解决之法。

经过比对,可以看出这些字体是由 HeiseiMaruGoth_JIS0213_E(KT 自带的日文字体) 和 Code2000(覆盖所有 Unicode 字符集的字体) 两种字体混合而成的。

一番探索后,发现了这些部分是调用 sans-serif 字体的。

如下是我的字体配置文件 local.conf 中关于字体 sans-serif 的部分:

  1. ...
  2. <alias>
  3.     <family>sans-serif</family>
  4.     <prefer>
  5.         <family>Helvetica Neue LT</family>
  6.         <family>Kindle Symbol</family>
  7.         <family>MHeiGB18030C-Medium_E</family>
  8.         <family>HeiseiMaruGoth_JIS0213_E</family>
  9.         <family>HangulGothicMTC-Medium_E</family>
  10.         <family>MHeiC-Medium-Big5HKSCS_E</family>
  11.         <family>Code2000</family>
  12.     </prefer>
  13. </alias>
  14. ...
当系统请求 sans-serif 字体时,首先从字体 Helvetica Neue LT 中查找是否有该字符,若是没有的话,则再到下一个字体 Kindle Symbol 中寻找,依次类推。

前面的两种字体都是英文字体,所示若是要显示中文字符的话,应该是调用的第三个字体 MHeiGB18030C-Medium_E,这个字体覆盖了 GB18030 中的所有中文字符。

当在阅读过程中点击 Aa 按钮选择 sans 字体时,可以看到正文部分确实是 MHeiGB18030C-Medium_E 这个字体,说明关于 sans-serif 字体的调用与我们的推测一致。

但是为什么目录、浏览器这些调用 sans-serif 字体的地方却是跳过了第三个,而调用第四个字体 HeiseiMaruGoth_JIS0213_E 呢?

于是我将第四个字体注释掉,如下:
  1. ...
  2.     <alias>
  3.          <family>sans-serif</family>
  4.          <prefer>
  5.               <family>Helvetica Neue LT</family>
  6.               <family>Kindle Symbol</family>
  7.               <family>MHeiGB18030C-Medium_E</family>
  8.     <!--
  9.               <family>HeiseiMaruGoth_JIS0213_E</family>
  10.     -->
  11.               <family>HangulGothicMTC-Medium_E</family>
  12.               <family>MHeiC-Medium-Big5HKSCS_E</family>
  13.               <family>Code2000</family>
  14.          </prefer>
  15.     </alias>
  16. ...
重启 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,加入文泉驿微米黑字体,如下所示:
  1. ...
  2.     <alias>
  3.          <family>sans-serif</family>
  4.          <prefer>
  5.               <family>Helvetica Neue LT</family>
  6.               <family>Kindle Symbol</family>
  7.               <family>MHeiGB18030C-Medium_E</family>
  8.               WenQuanYi Micro Hei
  9.               <family>HeiseiMaruGoth_JIS0213_E</family>
  10.               <family>HangulGothicMTC-Medium_E</family>
  11.               <family>MHeiC-Medium-Big5HKSCS_E</family>
  12.               <family>Code2000</family>
  13.           </prefer>
  14.     </alias>
  15. ...
然后再重新生成字体缓存文件,重启 KT 的 framework 进程。

效果图如下,可见此时目录的字体终于显示正常了!


再看左上角,文件名的字体也正常了。

又试了下自带的浏览器,显示也好了。

甚好甚好!

但是,很快又发现了另一个问题:之前在点击目录跳转时,会默认加粗当前所在章节的标题,如图所示:


然而现在的目录中却没有任何标题加粗的现象,这样的话,就不好判断当前所在的章节了。

奇怪!按说,若是字体没有原生粗体的话,系统的 fontconfig 程序会通过算法生成一个伪粗体的,不知道这里为什么没有。

于是又是一番折腾,其中艰辛不一而足,包括更换 libfreetype.so 文件和 libfontconfig.so 文件等等,但是结果却都没有成功。

没办法,最后只好自己手动生成一个粗体了。这个简单,用软件 FontCreator 很容易就可以做到了。

我之前之所以不愿意再加入一个粗体,是不想再往 Kindle 里面放文件了,毕竟要额外占据空间,总是感觉不爽。但是现在既然系统不帮忙生成,只好自己动手了。

将生成的文泉驿微米黑粗体复制到字体目录下,再次重新生成字体缓存,重启 framework 进程。

OK,终于搞定了!如图:


======================================================
如下是具体的步骤:

1.下载文泉驿微米黑字体,并通过软件生成其粗体字体,然后将两个字体文件放到 Kindle 盘符的根目录下。是我做好的字体文件;

2.通过 ssh 登录到 KT 上,将字体复制到相应目录下;
  1. $ ssh root@192.168.15.244
  2. root@192.168.15.244's password:
  3. # 下面是登录到 Kindle 后的操作
  4. [root@kindle] # mntroot rw # 重新挂载,使根分区可写
  5. [root@kindle] # mv /mnt/us/WenQuanYiMicroHei.ttf /usr/java/lib/fonts # 复制字体
  6. [root@kindle] # mv /mnt/us/WenQuanYiMicroHei_Bold.ttf /usr/java/lib/fonts # 复制粗体
  7. [root@kindle] # fc-cache -fv # 重新生成字体缓存,此处所需时间较长,需耐心等待
  8. [root@kindle] # vi /etc/fonts/local.conf # 编辑字体配置文件
    1. 在 sans-serif 部分加入微米黑字体,如下所示:
    2. ...
    3. <alias>
    4.     <family>sans-serif</family>
    5.     <prefer>
    6.         <family>Helvetica Neue LT</family>
    7.         <family>Kindle Symbol</family>
    8.         <family>MHeiGB18030C-Medium_E</family>
    9.         <family>WenQuanYi Micro Hei
    10.         <family>HeiseiMaruGoth_JIS0213_E</family>
    11.         <family>HangulGothicMTC-Medium_E</family>
    12.         <family>MHeiC-Medium-Big5HKSCS_E</family>
    13.         <family>Code2000</family>
    14.     </prefer>
    15. </alias>
    16. ...
  9. root@kindle # restart framework # 重启 framework,使得配置生效
  10. root@kindle # cp /var/cache/fontconfig/f3* /opt/var/cache/fontconfig # 保存字体缓存文件
  11. root@kindle # mntroot ro # 重新挂载,使根分区恢复为只读
  12. root@kindle # exit # 退出登录
OK,一切搞定!现在可以打开某本书的目录,看一下效果了。
阅读(3399) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~