制作自己的 Kindle 电子书

Posted sgyzetrov

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了制作自己的 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。

  1. 我们首先编辑 metadata,并为该书生成漂亮的封面:

    • 对于中文小说的制作,导入 txt 时就应在 edit metadata 时选择语言为 Chinese,否则会遇到在阅读时不能选宋体等中文字只能选英文字体(如 Helvetica)的情况
    • (其它可选操作):将字体系列更改为 Times New Roman

  2. 将字符编码更改为 gb2312 / gb18030
    Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved

  3. 添加 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;
    
    
  4. (可选操作)如果在 txt 中未使用任何 “h1”,而使用了“h2” 和“h3”,则需要更改 “insert pagebreak before” 项。

  1. Table of contents 设置:在其中添加 “h1” 和“h2”。同理,若没使用 “h1”,则此处应使用“h2” 和“h3“分别进行更改。

  1. Mobi output:我习惯选择 “both”。

  1. (可选)有的时候未删除缩进会导致输出的 mobi 格式诡异,所以发现问题后可通过删除缩进来尝试修复。


(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)

成果

看起来很不错吧:

参考资料


(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)


visitor tracker


以上是关于制作自己的 Kindle 电子书的主要内容,如果未能解决你的问题,请参考以下文章

制作自己的 Kindle 电子书

kindle下载的电子书格式怎么转换

如何使用kindle的攻略

关于kindle电子书的破解问题

原创关于kindle加载电子书的方法之邮箱推送教程+手机(iPhone为例)下载文件后邮箱发送

kindle连wifi登录青云阻断页面