惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

SecWiki News
SecWiki News
量子位
The Cloudflare Blog
美团技术团队
T
The Exploit Database - CXSecurity.com
博客园 - 【当耐特】
Spread Privacy
Spread Privacy
P
Proofpoint News Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 三生石上(FineUI控件)
T
Tor Project blog
博客园 - 司徒正美
宝玉的分享
宝玉的分享
T
Threatpost
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Secure Thoughts
T
Threat Research - Cisco Blogs
Hacker News: Ask HN
Hacker News: Ask HN
Jina AI
Jina AI
博客园 - 聂微东
A
Arctic Wolf
I
Intezer
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Know Your Adversary
Know Your Adversary
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
爱范儿
爱范儿
Hugging Face - Blog
Hugging Face - Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
小众软件
小众软件
T
Tailwind CSS Blog
The Hacker News
The Hacker News
L
LINUX DO - 最新话题
Hacker News - Newest:
Hacker News - Newest: "LLM"
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
TaoSecurity Blog
TaoSecurity Blog
Project Zero
Project Zero
博客园 - 叶小钗
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Cloudbric
Cloudbric
雷峰网
雷峰网
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
大猫的无限游戏
大猫的无限游戏
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Troy Hunt's Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
V2EX - 技术
V2EX - 技术
The GitHub Blog
The GitHub Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy & Cybersecurity Law Blog

澄沨的漫游茶记

岁暮杂记 虎落平阳:TNO 美国罗伯特·F·肯尼迪线·前篇 烟火·乙巳 蜀都行纪 实习日 事故小记 烟火·甲辰 藏地行纪 元旦杂记 浴火重生:TNO 东方红西北国防阵线党权线·后篇 太阳旗之下:TNO 东方红西北国防阵线党权线·前篇 尚在人间:TNO 乌克兰-苏维埃社会主义共和国线 上海电信 SDN 网关全局域网皆可收看 IPTV 的实现 论 AList 的滥用:多平台串联搭建个人影音-番剧流媒体服务 俄罗斯已逝:TNO 俄罗斯科米-神俄线·后篇 紫日高悬:TNO 俄罗斯科米-神俄线·前篇 The Pure WINDOWS Project: 使用 Windows Sandbox 隔离腾讯系软件的笔记 廣東手艺人:TNO 广东国索尼-长江实业线 使用 PaaS 服务部署 umami 统计工具的笔记 柏林春晓:TNO 德国施佩尔左线 闲话 COMICUP 与敝站 解决小米手机在 fastboot 模式下不被 Windows 识别的问题 贺正·癸卯 MIUI 下观看 Netflix 等流媒体时 Widevine DRM L1 认证失效之解决 崇明骑行纪事·合 磊哥小传 崇明骑行纪事·转 让 Hyper-V 虚拟机支持调用 USB 摄像头 崇明骑行纪事·起承 炎夏小憩 飞哥小传 さよなら、WordPress 使用 Cloudflare Workers 加速甲骨文存储桶 博客流浪纪事 moe-counter-cf:将萌萌计数器部署到 Cloudflare Workers 烟火·迪士尼 红十字救护员培训小记 迁移到了狗云 探索优雅纯粹的追番体验:蜜柑计划 + Resilio Sync Moe-counter: 给网站装上多种风格可选的萌萌计数器 疫情,在下的朋友圈拾遗 Postcrossing 初探小记 解决 Github 同步复刻上游仓库时冲突的问题 使用甲骨文免费云服务器搭建 frp 内网穿透工具的笔记 「在下」的两周年 The Pure WINDOWS Project: Hyper-V 虚拟机使用笔记 The Pure MIUI Project: 小米 10 刷机笔记 烟火·壬寅 贝恩小传「大盛り」 非法侵入住宅罪之浅究 碧蓝航线舰娘原型考据「铁血驱逐篇」 贰拾 火警纪事 观 EDG 夺冠有感 华硕路由器实现远程唤醒局域网设备的笔记 军训随笔 夏日蓝调 在 Wordpress 博客里创建彩色标签云页面的笔记 贝恩小传 迁移到了 Bandwagon Host 杂诗二首 来给 WordPress 添加一个书单页面吧 乡影随摄 从刑法的报复主义论中国刑法的发展 漫谈二次元的「破圈」 浅谈「FBI WARNING」 とある魔都の ACGN 巡礼目録 桜色 在 WordPress 上添加 moc3 Live2d 看板娘的超简单方法 COVID-19 疫苗接种全纪录 Steam 转区小记 元旦 更新主题为 Sakurairo 华为 HarmonyOS / EMUI 安装 GMS 谷歌框架的笔记 下载没有下载权限的钉钉直播回放的笔记 Re:从零开始的 Windows 简明优化指南 Re:从零开始的计算机使用指南 使用 ADB 工具箱卸载手机预装应用 基于宝塔面板的 Google Drive 百宝箱搭建笔记 The Story of the Snake | 蛇纪事 参议院纪事 箱轮纪事
在 KOReader 上显示直排文本
澄沨 · 2025-11-09 · via 澄沨的漫游茶记

为了持续精进日语水平,也为了一并练习阅读直排文本时的速度,在下最近开始了阅读日文原版轻小说的计划。虽然在下手头上不缺纸质的阅读材料,但是作为一名不折不扣的电子书爱好者,电子版的轻小说自然也是不可缺少的。目前在下在电脑和手机上使用能够做到多端同步的 Readest 作为电子书的阅读器,而 Kindle 则几乎只剩下了 KOReader 这一唯一的选择。值得称道的一点是,由于 Readest 支持与 KOReader 同步服务器同步阅读进度,从某种程度上,也算打通了 Kindle 与主流设备之间的电纸书阅读体验壁垒(直接使用亚马逊 Kindle APP 确实是一种方案,但是原生不支持 EPUB 格式的问题是在下所不能接受的)。

不过,当在下在尝试把直排电子书导入 Kindle 阅读时,却发现了一个重大问题,KOReader 似乎并不支持显示直排文本,原来的直排格式只能以普通的横排文本的格式显示,导致好不容易打通的阅读体验壁垒又重新出现了。

好在,对直书有需求的电子书阅读者显然远不止在下一个。早在电子书刚刚起步阶段,相当一部分电子书阅读器也同样不支持直排文本的显示。对此,彼时的主流解决方案是直接将文字的显示方向旋转 90 度(一般是逆时针方向),然后把设备也一样横过来阅读,就这样实现所谓的「伪直排」阅读。然而在软件层面实现旋转文字的显示方向,比起直接支持直排文本来说显然更加复杂,直接简单粗暴地旋转显然不可行——那样的话,一些本不必要旋转的标点符号也会跟着一起旋转,比如省略号……或是直角引号「」。因此,有必要特意为此制作一套旋专用于「伪直排」阅读的字体。

制作「伪直排」字体

原本修改字体是一件非常麻烦的事情,好在早有前人用 python 写了这个现成字体旋转工具 tategakifont 可供在下使用,此工具不仅能靠一行命令完成字体制作,还已经提前写好了相应的旋转规则,确保所有字符都被正确地旋转。

项目至少需要 Python 3.8.10 以及 FontForge 20230101 或更新的版本,在使用前需提前安装好运行环境。

随后,将项目文件克隆到本地,进入本地项目目录,把用于制作的原字体文件也拉进项目根目录,并在终端内运行以下命令,将 inputoutput 这两个字段分别替换为用于制作的原字体文件名称和拟定的经处理后的新字体文件名称:

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 的目录下创建一个虚拟环境并激活。

  • Mac
  • Windows CMD
  • Windows Powershell
1
2
python3 -m venv font_env
source font_env/bin/activate
1
2
python3 -m venv font_env
font_env\Scripts\activate.bat
1
2
python3 -m venv font_env
font_env\Scripts\Activate.ps1

随后安装 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.ttfyour_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 中打开直排书籍,在设置中更改排版规则为日语,再把字体换成制作好的伪直排字体即可。