已有 422 次阅读 2014-7-14 17:53 个人分类:父母加油站 系统分类:其他 kindle
由于 Amazon Kindle 目前只在美国和英国等少数以英语为主要语言的国家发售,它的键盘甚至无法原生输入俄语、挪威语等字母语言,更别提中文了。自然,它对中文的默认支持也不怎么样。但是作为一个母语为中文的 Kindle 用户,阅读中文书籍是经常发生的事,用中文作笔记也是会遇到的。而我是一个完美主义者,面对网上那些数量稀少且并不完美的 Kindle 中文阅读教程,我决定自己动手,探索、整理出一份“完美”的 Amazon Kindle 中文阅读优化指南。
一、Kindle 基本介绍注意:本文写于2012年3月,主要针对的是当时的第三代 Kindle 阅读器,也就是 Kindle Keyboard。Amazon 公司在2012年9月发布了两款第五代 Kindle 阅读器,其中的 Kindle Paperwhite 对中文有原生的良好支持(甚至自带拼音输入法),开箱即可选择宋体、黑体或楷体进行中文阅读。如果对字体有更高的要求,可搜索「Paperwhite 字体」找到许多相关的教程(比如这篇),介绍如何不越狱而使用自定义字体。
Amazon Kindle 是 Amazon 公司(或者叫 Amazon 帝国更贴切……)推出的一系列电子书阅读器。目前主要有以下设备:
本文所指的 Kindle,主要是指 Amazon 推出的各代以 E-Ink 作为显示屏幕的设备,不包括 Kindle Fire 和 Kindle Reading Apps 在内。
本文用作教程的 Kindle,即我有拥有的 Kindle,是 Kindle 的第三代,官方名称为 Kindle Keyboard,本教程所介绍的方法理论上也可用于其他代的 Kindle(不包括 Kindle Fire)。 Kindle Touch 用户可以参考这个帖子。
本文所提到的 update-*.zip 文件均出自 MobileRead 论坛,可在此链接找到。
二、现状与我们的目的正如上文所说,Kindle 未在使用 CJK/CJKV(中日韩(越)统一表意文字) 的国家和地区发售,所以默认对 CJK 的支持是比较差的,在目录界面下,一些中文字会变成□□□□,在网页里,中文字的大小也是很不整齐的,并且有不少是用的日本字型,笔画看着很奇怪。
以上提到的问题虽然可以通过 changeLocale 的 debug 代码来解决,但是阅读中文时的字体依然是丑陋的无衬线字体。这种无衬线字体在 CRT 和 LCD 上用用还勉强能接受,但是在接近印刷品的 E-Ink 屏幕上用,就显得太不搭调了,长时间阅读会造成眼睛非常疲劳,丧失了 E-Ink 的优点。并且,默认的中文字体是没有标准、粗体、斜体、粗斜体的区分的,无论是标题还是正文还是注释,一律是同样的样式。对比拉丁字符的不同样式,实在是令人不爽。
首先声明一点:电脑上各种字处理软件里中文字体的“粗体”实质是“仿粗体”,“斜体”实质是“仿斜体”,是软件模拟出来的,只有少量中文字体(如微软雅黑)的粗体、斜体才是独立的字体。
正是因为这种软件模拟的存在,我们才能在电脑上看到各种中文字符“变粗”(仿粗体)和“变斜”(仿斜体),哪怕这个字体本身没有对应的粗体和斜体。而手持设备上一般没有这种软件模拟,所以只能显示字体本身的样子。但是,既然有“仿粗体”和“仿斜体”,就有真正的粗体和斜体,比如微软雅黑和粗体的微软雅黑是两个独立的字体,前者是 msyh.ttf,后者是 msyhbd.ttf。我们只要使用独立的粗体、斜体字体便可在 Kindle 上实现中文字符的不同样式。
能“解决”上面所有的问题方法的是把所有的书全部弄成 PDF。但是要在 Kindle 上看 PDF,最好得是特制的六寸 PDF。每本书都转换并且方便,并且 PDF 相比 mobi 格式丧失了不少功能,因此该方法被枪毙。
所以,作为一个完美主义者,我要实现以下目的:(递进)
这种方法不需要越狱,几乎接近完美。但是很遗憾,它有 bug,不完美。这里简略介绍一下步骤,完整的图文教程可见《Kindle 3 不越狱换字体》。
这种方法接近完美,可以实现中文字体的不同样式显示,但是该方案的三个问题,这是我在使用的过程中发现的:
这种方法主要是指安装 Fonts Hack,这个升级包也可在上文提到的 MobileRead 里的那个帖子中下载到所需文件。下面简单说一下步骤和不足:
这样操作之后,所有的中文字体(阅读界面、目录界面、状态栏)都已经是调用了自定义字体了,但是,这些字体是没有任何样式可言的,全部只有 Regular。而如果把原生字体如 Sans-Regular.ttf、Serif-Regular.ttf 等换成对应样式的衬线中文字体,又会面临拉丁字符非常丑陋的问题(即上文“目的列表”中第 5 条无法实现)
四、选好你的字体在正式开工之前,还是再讲一下字体吧。我向来对字体比较挑剔的,原来用 Windows 的时候 GDI++ 是必不可少的东西,不渲染浑身不爽;后来用 Linux 了,则与 /etc/fonts/local.conf 搏斗了好久……现在用了 Kindle 了,面对着与 LCD 完全不同的 E-Ink 屏幕,对字体的挑剔就又上升了一个台阶……
非常幸运的是,在以中文为母语的 Kindle 用户中,对字体很挑剔的不只我一个,这位博主的博文《Kindle 3的字体、行距、边距》便是一篇很好的关于 Kindle 选字体的文章,讲得头头是道,且配图清晰动人,强烈建议大家去围观。这里简要地归纳总结一下我对字体(尤其是简体中文字体)的几点看法:
再恶毒地“抨击”一下几个字体(以下为个人观点,观点不同者请无视):
说了这么多,你现在可以在本节开头的图片中选择合适的字体了吧?非衬线字体直接不考虑了……我的选择是:
如果你习惯看报纸并且想在正文看更小的字体的话,主字体可以选择“汉仪报宋”或者“方正报宋”。
大部分字体在网上搜索一下名字即可找到下载地址,但是“华文中宋斜”和“华文中宋粗斜”这两个字体并不好找,因此我把它们打包了一下,可以点此下载。
方正字库在淘宝上开了一家专门卖字体的店,GBK 字体个人或家庭使用的授权仅售 5,方正的大部分字体都可以在上面买到。比如方正雅宋系列的 9 个字重和 2 个变体,还有方正兰亭黑系列的 10 个字重和 4 个变体。相信这么多字重里一定有满足你的需求的。
五、开始优化字体前面的准备工作做了那么多,实际上真正的优化过程步骤却并不多,像是前面介绍的两种不完美方法的结合。
更改 Locale这个步骤是为了让目录界面不出现□□□□。方法就是在目录界面,按 Enter 键,然后输入下面三行 debug 代码,每行按Enter 结束,然后再按 Enter 再打开新的输入框。
;debugOn #打开 debug 模式 ~changeLocale zh-CN.utf8 #更改 Local 为 zh-CN.utf8 ;debugOff #关闭 debug 模式,可以不输入这个命令是大小写不敏感的,我区分大小写只是为了好看……另外,在 debug 模式开启的时候输入
~help可以查看有哪些 debug 命令哦。
执行完这三行命令之后,是需要重启才能应用的,不过先别急着重启,越狱的时候一起重启吧。
越狱这个不用说了吧,是装软件的前提。从上文那个 MobileRead 链接中下载 update-jailbreak-*.zip,并解压出对应你的机器的版本的 update_jailbreak_*_install.bin 文件,放到 Kindle 的根目录中,然后在 Kindle 的 Settings 页面中,按 Menu,选择 Update your Kindle,等待两分钟左右,即可完成越狱,并且由于已经重启了,上一步的 Locale 也就生效了。这时 Kindle 的根目录中应该已经多出了 linkjail 这个目录了。在 Kindle 的内部文件系统中,相应的目录已经被换成了符号链接,目标就是这个 linkjail,我们可以通过修改 linkjail 中的文件来达到修改 Kindle 内部文件系统文件的目的。
安装 Fonts Hack依然是在那个链接中,下载 update-fonts-*.zip,解压出对应版本的 update_fonts_*_install.bin 文件,放到 Kindle 的根目录中,在 Kindle 的 Settings 页面中,按 Menu,选择 Update your Kindle,等待两分钟左右,即可完成安装。
复制自定义字体这时再连接 Kindle,便可发现根目录下多了 linkfonts 目录,同样,这也是 Kindle 内部文件系统中某些符号链接的目标,在 linkfonts/fonts 目录下,可以看到一堆字体。请把你准备好的四个中文字体文件(普通、粗体、斜体、粗斜体)复制到 linkfonts/fonts 目录下,保持字体原来的文件名也是这样的,不过为了方便下文引用,最好把它们命名成下面这样,另外,不要用中文名……
注意:这个目录中还有一个 CJK.ttf,它是 Droid Sans Fallback,即 Android 中默认的中文字体(无衬线!),是 Fonts hack 用来代替原生的中文字体的,理论上删除它,然后引用别的字体也是没有关系的,但是由于 Fonts hack 的一些保险装置,删除它之后会导致 Fonts hack 自动失效,所以还是留着它吧,不引用它就好了。
更改配置文件上一步已经把所需要用到的四个字体复制到 linkfonts/fonts 目录了,但是它们是不会被自动使用的,需要更改配置文件让 Kindle 去使用它们。
打开 linkfonts/etc 目录,可以看到一堆字体的配置文件。Linux 桌面版用户对这些文件应该很熟悉了……我们要动刀的是 fonts.properties, fonts.properties-3, fonts,properties-3-nocondensed 这三个文件。
注意:这三个文件都是 Unix/Linux/OS X 的 LF 换行格式,千万别用 Windows 自带的“记事本”去编辑保存它!否则会变成 CR+LF 的换行格式!Windows 用户请使用 Notepad++ 去编辑,或者下载我编辑好的文件。
这三个文件的内容大同小异,是在不同的阅读模式下的字体渲染设置。主要是改 # international font support 这一行后面的一些内容。默认是这个样子的:
# international font support code2000.0=I18N.ttf code2000.plain=I18N.ttf jpan.0=CJK.ttf jpan.plain=CJK.ttf jpan.1=CJK.ttf jpan.bold=CJK.ttf kore.0=CJK.ttf kore.plain=CJK.ttf kore.1=CJK.ttf kore.bold=CJK.ttf hant.0=CJK.ttf hant.plain=CJK.ttf hant.1=CJK.ttf hant.bold=CJK.ttf hans.0=CJK.ttf hans.plain=CJK.ttf hans.1=CJK.ttf hans.bold=CJK.ttf可以看出,最上面一段是对符号字体(这是最后一个 Fallback,关于 Fallback 的顺序,请参见这个帖子)进行设置,不用修改,后面四段内容分别对日文、谚文、正体中文和简体中文进行了设置,格式如下:
[字符集].[样式]=[字体文件名]
“字符集”无非 CJK (目前还没有支持 V ——喃文哦),而样式则是有八种的,比如系统原生 Serif 的设置:
# Serif font definition # serif.0=Serif_Regular.ttf serif.1=Serif_Bold.ttf serif.2=Serif_Italic.ttf serif.3=Serif_BoldItalic.ttf serif.plain=Serif_Regular.ttf serif.bold=Serif_Bold.ttf serif.italic=Serif_Italic.ttf serif.bolditalic=Serif_BoldItalic.ttf可以看出有 0, 1, 2, 3, plain, bold, italic, bolditalic 八种,并且应该是两两对应的。明白了这一点,就很容易了,把刚才那四段定义 CJK 字体的内容改成这模样就行了:
# international font support code2000.0=I18N.ttf code2000.plain=I18N.ttf jpan.0=CJK_Regular.ttf jpan.1=CJK_Bold.ttf jpan.2=CJK_Italic.ttf jpan.3=CJK_BoldItalic.ttf jpan.plain=CJK_Regular.ttf jpan.bold=CJK_Bold.ttf jpan.italic=CJK_Italic.ttf jpan.bolditalic=CJK_BoldItalic.ttf kore.0=CJK_Regular.ttf kore.1=CJK_Bold.ttf kore.2=CJK_Italic.ttf kore.3=CJK_BoldItalic.ttf kore.plain=CJK_Regular.ttf kore.bold=CJK_Bold.ttf kore.italic=CJK_Italic.ttf kore.bolditalic=CJK_BoldItalic.ttf hant.0=CJK_Regular.ttf hant.1=CJK_Bold.ttf hant.2=CJK_Italic.ttf hant.3=CJK_BoldItalic.ttf hant.plain=CJK_Regular.ttf hant.bold=CJK_Bold.ttf hant.italic=CJK_Italic.ttf hant.bolditalic=CJK_BoldItalic.ttf hans.0=CJK_Regular.ttf hans.1=CJK_Bold.ttf hans.2=CJK_Italic.ttf hans.3=CJK_BoldItalic.ttf hans.plain=CJK_Regular.ttf hans.bold=CJK_Bold.ttf hans.italic=CJK_Italic.ttf hans.bolditalic=CJK_BoldItalic.ttf注意:这后面的字体名是可以改的,由于我在上一步的时候已经把自定义的字体名改成这模样了,所以是这样填的,如果你用的是其他的文件名的话,请对应修改。
正如上文所说,有 fonts.properties, fonts.properties-3, fonts,properties-3-nocondensed 这样三个文件,都要做类似的修改。修改完了之后用 Unix 的 LF 换行格式保存。
对于不想装 Notepad++ 的 Windows 用户或是懒人,这里有一份我已经改好的配置文件,解压后覆盖即可……不过前提是你的自定义字体文件名和我的命名方式一样。点此下载:fonts-conf-wzyboy.tar.gz。
重启 Kindle 的 Framework这时候算是基本大功告成了,重启 Kindle 即可应用新字体。不过 Kindle 的完全重启(Settings - Restart your Kindle)时间有点长,所以 Fonts hack 中提供了只重启 Framework 的方法,即在拔掉 Kindle 之前,在 linkfonts 目录下面新建一个名为 reboot 的空文件。如果 Windows 用户不方便新建无扩展名的空文件的话,可以原地复制粘贴一下autorebooot 这个文件然后再重命名为 reboot,它就是一个空文件……
这个文件建立之后,再拔掉 Kindle,就会看到屏幕左下角有一行字 Restarting framework... 过会儿就会重启完成,应用新字体了。这样比完全重启方便一些,也更快一些。
换回拉丁字体上文说了,由于我不仅要在 Kindle 上阅读中文书籍,还会阅读英语和德语的书籍,所以对拉丁字体的要求也比较高。而 Fonts hack 把原生的拉丁字体给换掉了!Serif(衬线)字体由 PMN Caecilia 换成了 Droid Serif,而 Sans Serif(无衬线)字体则由经典的 Helvetica 换成了 Droid Sans。后者的替换我没意见,反正我不用无衬线字体的,而前者的替换……令人发指。Droid Serif 实在是太丑了,跟中易宋体中的拉丁字符有得一拼……绝对不如原生的 PMN Caecilia 好看,所以我要换回去。有与我类似需要的同学可以继续读下去,不看英文书的可以跳过……
换回去的方法挺简单,在 linkfonts/backups 下面那些 Caecilia 开头的文件就是原生的 Serif 字体了。这里我被弄糊涂过,经过一些试验,我确认那八个字体中只有四个是原来的拉丁字体,另外四个带 Cond 字样的是紧密版的(即在 Aa 中选择 condensed 之后调用的字体)。对应关系如下:
Caecilia_LT_75_Bold.ttf → Serif_Bold.ttf Caecilia_LT_76_Bold_Italic.ttf → Serif_BoldItalic.ttf Caecilia_LT_66_Medium_Italic.ttf → Serif_Italic.ttf Caecilia_LT_65_Medium.ttf → Serif_Regular.ttf按照这样的对应关系把它们复制、替换掉 linkfonts/fonts 里的字体,然后再用上一节“重启 Kindle 的 Framework”中的方法,即可应用新字体。
六、成果于是,就这样,搞定了。
再一张:
如截图所示,连目录中也是中文衬线字体(状态栏里的标题也是),也有各种样式的区别。为此我特意做了一个 mobi 文件,用来检验成果:Lorem ipsum – wzyboy.mobi.tar.gz
如果你在完成上面的所有步骤之后,也能显示出这样的画面,那么,你成功了:
但是始终觉得截图不能显示出 Kindle 真正的美丽,照片才行……为此我拍了好多张像本章章首图那样的照片……真的是像纸一样清晰可读。
七、尾声我花了近一个月去折腾,又花了三天时间写成本文,算是符合“用心写作”的概念了吧。这是博客搬家到 VPS 之后的第一篇文章,会是对 VPS 的一次压力测试吗?希望是的。
后续报道:这篇文章带来的访问量让我那脆弱且配置不当的 VPS 宕机十几次……重新配置了一下,似乎好一些了。
希望这篇文章对越来越多的 Kindle 中文用户有用。
欢迎转载,转载请注明出自:http://wzyboy.im/post/736.html。谢谢合作。
八、拾遗这一节是后来添加的。
补充:如想在 Kindle Keyboard 上输入中文,可参考《Kindle 3 安装中文输入法》。目前只能用拼音……不能用五笔。
补充2:Kindle 默认的页边距有点大,可以在 calibre 的 Kindle Collections 插件中修改。也可以参照这篇 wiki 的方法进行修改,注意换行符。
补充3:有不少评论反映做如上更改之后,一些杂志的页眉小字及日期设置时“上午/下午”字样还是方框问号的样子,我在本文的 access.log 里无意中发现了这两篇帖子:《(原创)攻克Kindle最后的乱码—-杂志页眉|音标|符号及实现中文斜体和粗斜体显示》和《解决Kindle所有乱码简易教程》,能解决这个问题,不过涉及到系统字体的整合,喜欢折腾的同学可以试一下。
Tags:calibre kindle Kindle Keyboard 字体