ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

制作自己的 Kindle 电子书

2020-12-31 17:01:34  阅读:380  来源: 互联网

标签:Reserved 电子书 gy csdn https Kindle net txt 制作


想象以下场景:你刚收到一台新的 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


标签:Reserved,电子书,gy,csdn,https,Kindle,net,txt,制作
来源: https://blog.csdn.net/S_gy_Zetrov/article/details/112024413

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有