把 TXT 文档转换成带目录的 MOBI 格式电子书

如果你喜欢看小说,对 TXT 文档应该不陌生,但是如果直接将下载到的 TXT 文档转换成 mobi 格式放到 Kindle 中阅读,就会出现一个问题——缺少目录,你不得不线性阅读不敢跳页,很不方便,那有没有一种有效的方法可以把 TXT 转换成带目录的电子书呢?

答案是肯定的。不过要转换的 TXT 文档内容的章节标题要有一定的规律,就像下面这样,一些能把 TXT 自动转换成带目录电子书的软件或应用也是利用这种规律结合很多正则算法实现的。

第123章 第456节
第123章 章标题 第456节 节标题
第123章
第123节
……

如果需要转换的 TXT 文档内容满足这一点,就可以继续下面的操作了。

一、一点点准备工作

1、支持正则替换的编辑器。本文使用 Sublime Text 2:http://www.sublimetext.com/2
2、电子书转换软件。本文使用 Calibre:https://bookfere.com/tools#calibre

二、检查、修改 TXT 文档

因为在网上下载的 TXT 文档内容格式良莠不齐,需要先简单的检查一下其章节标题是否有规律,有什么样的规律,在这些规律中又有哪些不规则的情况。下图是我随便从网上下载的一本 TXT 格式小说打开的样子,其内容格式不那么规整,刚好适合做个相对复杂的例子。

注意,如果打开 TXT 出现乱码,说明是文本的编码问题。有一个小技巧可以解决这个问题,您可以先使用浏览器打开 TXT 文档,然后全选拷贝,再粘贴到 Sublime Text 等编辑器中。

test-txt

首先,我发现它有如下所示的两种不同形式的章节标题:

第一章 重生
第一章 重生
第二章 谋杀亲夫?
第二章 谋杀亲夫?
……

这里我选择了第二种比较简洁的章节标题作为目录。还需要注意选择的这个章节标题还存在一个不规则的情况,那就是它们有的前面没空格,有的却存在一个空格:

第一章
 第二章
第三章
第四章
 第五章
……

到此为止我们已经掌握了这个文档里面章节标题规律以及规律中存在的不规则的情况了。接下来,需要给这些章节标题添加一些标记,变成如下这样:

###第一章 XXXXXX
###第二章 XXXXXX
###第三章 XXXXXX
###第四章 XXXXXX
###第五章 XXXXXX
……

在每个章节前边添加的“###”是 MarkDown 语法,转换成 HTML 就相当于 <h3>,以此类推如果添加“#”就相当于 <h1>,“####”就相当于 <h4>,“######”就相当于 <h6>。

当然,文档中的章节太多,我们不可能一个个手工添加,这就需要用到 Sublime Text 2 的正则表达式替换功能了,可以批量将每个章节标题前面都加上“###”标记。

点击菜单“Find -> Replace”调出替换功能面板,然后确认选中了面板左侧的正则功能图标【.*】,然后按照下图所示输入,然后点击右侧的“Replace All”按钮,即可完成添加。

test-txt2

如果对正则表达式不是很了解的小伙伴是不是有点儿摸不清头脑?没关系,其实很简单,这里我详细解释一下这一串代码和前面我们已经总结到的章节标题规律之间的关系。

首先在“Find What”中输入的是:

^( |)第(.*)章

第一个字符是“^”代表一行的开头。紧挨着的“( |)”里面的“|”代表“或”,因为之前我们发现文档内有的标题前面有空格有的标题前面没空格,它可以把有空格和没空格的都选中。接下来的“第”和“章”是相同的内容,它们之间的“(.*)”代表它们之间的所有内容。这样就选中了所有每一行我们期望修改的章节标题。

接下来“Replace With”中输入的是:

###第\2章

首先“###”是要添加到标题最前面的字符,接下来的“第”和“章”保持不变,他们中间的“\2”表示前面所选的第二个括号里的内容保持不变。关于更多正则表达式的入门使用方法,可以进入这篇文章,点开“【相关知识】《Sigil正则表达式的入门》”阅读。

下面也提供一些较常用的章节格式的查找替换正则表达式代码:

【标题】第XX章第XX节(不管后面有没有章节名)
【查找内容】第(.*)章第(.*)节
【替换内容】###第\1章###第\1节

【标题】第XX章第XX节(连在一起的,不管中间或后面有没有章节名)
【查找内容】 第(.*)章第(.*)节
【替换内容】 ###第\1章第\2节

【标题】第XX章AAA第XX节 (中间AAA是空格或章名,不管后面有没有节名)
【查找内容】第(.*)章(.*)第(.*)节
【替换内容】###第\1章\2第\3节

如果您遇到的无法正确查找的章节格式,可以在本文留言求助。

三、转换修改后的 TXT 文档

章节标题的标记添加完毕后就可以把修改后的 TXT 文档转换成 mobi 格式了。打开 Calibre 软件,用鼠标把文档拖进去,然后右键点击它,在弹出的菜单中依次选择“转换书籍 -> 逐个转换”,在弹出的窗口中,把右上角的“输出格式”选成“MOBI”,然后点击左栏的“内容目录”标签,找到“一级目录”这一项,填入“//h:h3”(也可以点击后面的魔术棒小图标,在弹出的窗口中选择“h3”)。

test-txt3

最后点击“确定”按钮,直到转换完成,就可以得到一个从 TXT 转换而来的带有目录的 mobi 格式电子书了。如此,仅需学习一遍,今后就可以很快速的处理 TXT 文档了,一劳永逸。

test-txt4

————————

小提示:如果在使用本方法时可能会遇到下面所示的错误。虽然 Calibre 提示 This txt file has malformed markup(文本文件中标记格式错误),却可能是 Calibre 自身的原因。解决方法就是换一种方法,强烈建议使用另一款专门为 TXT 小说转带目录的 mobi 格式的软件 easyPub,更强大易用。

ValueError: This txt file has malformed markup, it cannot be converted by calibre. See http://daringfireball.net/projects/markdown/syntax

————————

参考文章:http://kandouren.com/thread-129100-1-1.html

有帮助,[ 捐助本站 ] 或分享给小伙伴:

发表评论

标注为 * 的是必填项。您填写的邮箱地址将会被保密。如果是在本站首次留言,审核后才能显示。
若提问,请务必描述清楚该问题的前因后果,提供尽可能多的对分析该问题有帮助的线索。

小伙伴们发表了 113 条评论

  1. 我试了三本书,前两本都成功了,最后一本在txt文件中加了 ###后,mobi输出文件中没有生成目录,而是和txt 一样直接显示 ### 第一章, 这是怎么回事?

    是因为章节名前面有空格?

    求大神解答!!!

  2. Hey,请问如果英文电子书中的章节为:书名 chapter 1 ,比如: Harry Potter Chapter 1,顺便去掉前面的书名。
    正则怎么写?谢谢。

    • 不能用具体是指什么?有没有提示信息?建议描述清楚问题,这样可以方便他人对这个问题提供建议。

  3. 您好,按照您的方法我转换的很成功。但是只转到九百九十九章,第一千章就替换不了了,请问应该如何解决这一问题?

    • 碧落夕残 您好。第一千章和之前的章节在格式上有什么不同吗?以本文的示例为例,一般只要符合“第xxx章”这种规则,不应该出现这种问题。建议列一下具体的标题看看。