制作自己的 Kindle 电子书
作者:互联网
想象以下场景:你刚收到一台新的 Kindle Paperwhite,心中已然响起了轰轰烈烈的 “我今年(或这个冬天)一定要阅读 100 本书!”。结果发现,想看的书 Amazon 上找不到,或者排版很糟糕。
如何解决?自己动手做呗!
准备工作
我使用的是 macOS,因此本教程应该可以在 *nix 系统上完美复现。理论上移植到 Windows 也应该是无痛的。
首先,显然,我们需要源文件(通常是 .txt
格式),对于软件,需要安装 calibre。尽管我相信 calibre 很可能早就装好在你电脑上了吧~
在编辑源文件时,我通常使用 VS Code,因为它支持正则表达式搜索。 Sublime Text 也支持这一点,所以如果习惯的话也可以用它。
简单场景
本教程的精髓就是通过正则匹配为 txt 文件中的章节名称加入 markdown 样式的 header 标记(即’#‘, ’##‘, etc.)。这样在 calibre 转换 txt 为 mobi 时它就可以识别并自动按照 markdown header 划分整体的 txt 文件为 mobi 中的各个章节。
VS Code 如何进行正则匹配搜索可以看微软的这篇教程:here
简单粗暴,直接上我常用的正则匹配:
第(.*)卷\s
->##第$1卷
第(.*)章\s
->###第$1章
有时候小说结尾还有后记,这个就匹配不到了,所以我一般还会再拉到结尾去检查一下,看小说作者在结尾还写了什么番外或者后记然后手动为其添加 markdown 标记。Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved
修改后效果如下:
再例如,我有一个示例文件,其章节名称如下所示,第一行为课程编号,第二行为英文,第三行为中文:
则我们可以使用如下的正则去匹配它:
^(\s+|)lesson(\s+)(\d+)(\s+|\n)(.*)(\s+|\n)(\s+)(.*)(\s+|\n)
其中,
- ^(\s+|) - any space/tab before word ‘lesson’
- (\s+) - any space between ‘lesson’ and lesson number
- (\d+) - lesson number
- (\s+|\n) - match any space or hard return after lesson number
- (.*) - match English title
- (\s+|\n) - match any space or hard return after English title
- (\s+) - match space before Chinese title
- (.*) - match chinese title
- (\s+|\n) - match any space or hard return after Chinese title
使用如下的替换来达到下图的效果:
\n\n##Lesson $3 - $5 / $8\n\n
那有点复杂的场景?
在本节中,我将假设一个有点复杂的场景,假如我们有多个 .txt
文件。相当于按章将小说分成几部分。Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved假设我们有 4 个文件夹,每个文件夹中都有一堆 .txt
文件,并且全部使用数字文件名:
在这种情况下,通常意味着我们的书有 4 卷(因为有 4 个文件夹)。我们可以使用以下 shell 程序在每个文件夹中分别将其中所有文件(章节)合并为一个卷:
for file in `ls | sort -n`; do cat ${file} >> volume_ONE.txt; done
# repeat for TWO THREE and FOUR
然后,我们需要合并这 4 个卷。我们首先创建一个 YourBookTitle.txt 并打开它。在其开头输入 “# 卷一 title”,然后硬回车到新的一行,保存。
例如,YourBookTitle.txt 内容可以长这样:
#卷一 如何制作自己的手机电子书?
Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved
然后运行:
cat volume_ONE.txt <(echo'#卷二 这是一个卷名')volume_TWO.txt <(echo'#卷三 这是另一个卷名')volume_THREE.txt <(echo'#卷四 这还是一个卷名')volume_FOUR.txt>> YourBookTitle.txt
现在,4 个卷都在一个 .txt
文件中了,且每卷的开头带有 “#卷x 标题”。
之后,重复简单场景中的匹配即可。更复杂的匹配,可以试试去参考资料【3】中找。
calibre 中的操作
现在,修改好 txt 后,我们可以启动 calibre,将 txt 转换为 mobi。
-
我们首先编辑 metadata,并为该书生成漂亮的封面:
- 对于中文小说的制作,导入 txt 时就应在 edit metadata 时选择语言为 Chinese,否则会遇到在阅读时不能选宋体等中文字只能选英文字体(如 Helvetica)的情况
- (其它可选操作):将字体系列更改为 Times New Roman
-
将字符编码更改为 gb2312 / gb18030
Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved
-
添加 header 的样式(自己设计的,感觉还不错,Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)
h1 { color:black; text-align:center; font-weight:bold; } h2, h3, h4, h5, h6 { background-color: rgb(202, 202, 202); border-left: 10px solid rgb(138, 136, 136); display:block; margin: 1.5em 10px; padding: 0.5em 10px; color:black; text-align:left; }
-
(可选操作)如果在 txt 中未使用任何 “h1”,而使用了“h2” 和“h3”,则需要更改 “insert pagebreak before” 项。
- Table of contents 设置:在其中添加 “h1” 和“h2”。同理,若没使用 “h1”,则此处应使用“h2” 和“h3“分别进行更改。
- Mobi output:我习惯选择 “both”。
- (可选)有的时候未删除缩进会导致输出的 mobi 格式诡异,所以发现问题后可通过删除缩进来尝试修复。
(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)
成果
看起来很不错吧:
参考资料
- [1] 如何用 calibre 整合多个 txt 文件,合成为一个有目录(目录名为 txt 名)的 mobi 文件?
- [2] 如何用 calibre 制作带章节目录的 mobi 文件(用于 Kindle Paperwhite)?
- [3] 把 TXT 文档转换成带目录的 MOBI 格式电子书
- [4] 用 vs code 实现正则表达式批量替换内容
- [5] 使用 VsCode 正则表达式批量替换
- [6] 可以用在 VS Code 中的正则表达式小技巧
- [7] 正则表达式手册
- [8] 正则表达式语法
- [9] Horizontal rule/line beneath each <h1> heading in CSS
- [10] CSS padding margin border 属性详解
(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)
标签:Reserved,电子书,gy,csdn,https,Kindle,net,txt,制作 来源: https://blog.csdn.net/S_gy_Zetrov/article/details/112024413