Collector | アシマ / Ashima #pixiv https://www.pixiv.net/artworks/133535742
为了持续精进日语水平,也为了一并练习阅读直排文本时的速度,在下最近开始了阅读日文原版轻小说的计划。虽然在下手头上不缺纸质的阅读材料,但是作为一名不折不扣的电子书爱好者,电子版的轻小说自然也是不可缺少的。目前在下在电脑和手机上使用能够做到多端同步的 Readest 作为电子书的阅读器,而 Kindle 则几乎只剩下了 KOReader 这一唯一的选择。值得称道的一点是,由于 Readest 支持与 KOReader 同步服务器同步阅读进度,从某种程度上,也算打通了 Kindle 与主流设备之间的电纸书阅读体验壁垒(直接使用亚马逊 Kindle APP 确实是一种方案,但是原生不支持 EPUB 格式的问题是在下所不能接受的)。
不过,当在下在尝试把直排电子书导入 Kindle 阅读时,却发现了一个重大问题,KOReader 似乎并不支持显示直排文本,原来的直排格式只能以普通的横排文本的格式显示,导致好不容易打通的阅读体验壁垒又重新出现了。
好在,对直书有需求的电子书阅读者显然远不止在下一个。早在电子书刚刚起步阶段,相当一部分电子书阅读器也同样不支持直排文本的显示。对此,彼时的主流解决方案是直接将文字的显示方向旋转 90 度(一般是逆时针方向),然后把设备也一样横过来阅读,就这样实现所谓的「伪直排」阅读。然而在软件层面实现旋转文字的显示方向,比起直接支持直排文本来说显然更加复杂,直接简单粗暴地旋转显然不可行——那样的话,一些本不必要旋转的标点符号也会跟着一起旋转,比如省略号……或是直角引号「」。因此,有必要特意为此制作一套旋专用于「伪直排」阅读的字体。
制作「伪直排」字体
原本修改字体是一件非常麻烦的事情,好在早有前人用 python 写了这个现成字体旋转工具 tategakifont 可供在下使用,此工具不仅能靠一行命令完成字体制作,还已经提前写好了相应的旋转规则,确保所有字符都被正确地旋转。
项目至少需要 Python 3.8.10 以及 FontForge 20230101 或更新的版本,在使用前需提前安装好运行环境。
随后,将项目文件克隆到本地,进入本地项目目录,把用于制作的原字体文件也拉进项目根目录,并在终端内运行以下命令,将 input 与 output 这两个字段分别替换为用于制作的原字体文件名称和拟定的经处理后的新字体文件名称:
1 | python3 main.py input output |
等待一会之后,「伪直排」字体就被制作好,躺在项目根目录当中了。
更改字体的 Family Name(可选)
如果想在 KOReader 上同时使用原字体与经过处理后的「伪直排」字体,则需要更改「伪直排」字体的 Family Name。
由于 KOReader 会将 Family Name 相同的字体合并为一个选项,导致选择时无法指定到底是用原字体还是「伪直排」字体显示。
如果使用的是带有图形界面的字体编辑工具,那么直接想办法找到字体信息的编辑界面,将带有 Family Name (ID 1) 按照自己的意愿修改之即可。至于 Subfamily Name (ID 2)、Full Name (ID 4) 和 PostScript Name (ID 6),tategakifont 在制作新字体文件的时候会自动修改,因此一般不需修改,以防万一可以检查之。
由于在下只是装了一个 FontForge 的命令行版本,并不具有图形界面,所以具体操作起来比起图形化操作更加复杂一些,使用了基于 Python 的字体处理库 fonttools 实现。
直接在 tategakifont 的目录下创建一个虚拟环境并激活。
1 | python3 -m venv font_env |
1 | python3 -m venv font_env |
1 | python3 -m venv font_env |
随后安装 fonttools 库。
1 | pip install fonttools |
再使用 ttx 工具将「伪直排」的字体文件转换为 XML, -t name 参数告诉 ttx 只转换包含名称信息(Name Table)的部分,这样生成的 XML 文件会小很多,方便编辑。将 your_font_file.ttf 改成「伪直排」字体的文件名称。
1 | ttx -t name your_font_file.ttf |
XML 文件在根目录生成后,随便用一个文本编辑器打开,按照自己的意愿修改带有 nameID="1" 部分的 namerecord 字段后保存即可。
最后,使用 ttx 命令将 XML 重新编译回字体文件,将 your_font_file.ttf 与 your_font_file.ttx 改成对应文件的文件名称。
1 | ttx -m your_font_file.ttf your_font_file.ttx |
至此,「伪直排」字体的 Family Name 修改完毕。
KOReader 直排补丁
直接使用「伪直排」字体已经能达到阅读直排文本的目的了,但是由于仅旋转了字体,而电子书阅读器的界面却没有跟着一起旋转,因此在使用时,操作阅读器界面就会变得非常难受。此外,翻页逻辑也没有被一并更改,依旧需要像看横排书籍一样,从左至右翻页而非一般阅读直排书籍时的从右至左翻页,阅读体验依旧不完美。
去年,KOReader 的其中一名开发者在用户提出的关于日语直排书籍支持的 issue 中,针对此问题发布了一个补丁,效果是当文档的排版规则被设置为日语时,会自动将阅读器的文字部分的画面整体向顺时针旋转 90 度,这样一来,配合上向逆时针旋转 90 度的「伪直排」字体,可以完美地在 KOReader 上做到直排文本的显示。此外,补丁也适配了直排书惯用的从右至左的翻页方向。作者之后将其在 Github Gist 重新发布,比起在 issue 中发布的版本,主要修复了跨页选择文本的问题。
直排补丁的使用方法很简单,首先,前往此处下载补丁。
重命名文件,把原文件的 .txt 删除,使其扩展名变为 .lua,随后找到 KOReader 目录,将其放到 /koreader/patches 下,如果没有 patches 文件夹,则需要手动创建。
最后,在 KOReader 中打开直排书籍,在设置中更改排版规则为日语,再把字体换成制作好的伪直排字体即可。
