把 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 等编辑器中。
首先,我发现它有如下所示的两种不同形式的章节标题:
第一章 重生
第一章 重生
第二章 谋杀亲夫?
第二章 谋杀亲夫?
……
这里我选择了第二种比较简洁的章节标题作为目录。还需要注意选择的这个章节标题还存在一个不规则的情况,那就是它们有的前面没空格,有的却存在一个空格:
第一章
第二章
第三章
第四章
第五章
……
到此为止我们已经掌握了这个文档里面章节标题规律以及规律中存在的不规则的情况了。接下来,需要给这些章节标题添加一些标记,变成如下这样:
###第一章 XXXXXX
###第二章 XXXXXX
###第三章 XXXXXX
###第四章 XXXXXX
###第五章 XXXXXX
……
在每个章节前边添加的 ###
是 MarkDown 语法,转换成 HTML 就相当于 <h3>
,以此类推如果添加 #
就相当于 <h1>
,####
就相当于 <h4>
,######
就相当于 <h6>
。
当然,文档中的章节太多,我们不可能一个个手工添加,这就需要用到 Sublime Text 2 的正则表达式替换功能了,可以批量将每个章节标题前面都加上 ###
标记。
点击菜单“Find → Replace”调出替换功能面板,然后确认选中了面板左侧的正则功能图标【.*】,然后按照下图所示输入,然后点击右侧的【Replace All】按钮,即可完成添加。
如果对正则表达式不是很了解的小伙伴是不是有点儿摸不清头脑?没关系,其实很简单,这里我详细解释一下这一串代码和前面我们已经总结到的章节标题规律之间的关系。
首先在“Find What”中输入的是:
^(\s+|)第(.*)章
第一个字符是 ^
代表一行的开头。紧挨着的 (\s+|)
里面的 |
代表“或”,因为之前我们发现文档内有的标题前面有空格有的标题前面没空格,它可以把有空格和没空格的都选中。接下来的“第”和“章”是相同的内容,它们之间的 (.*)
代表它们之间的所有内容。这样就选中了所有每一行我们期望修改的章节标题。
接下来“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)。
然后切换到“TXT 输入”,在“结构”这一栏找到“格式化样式”并将其设为“markdown”。
提示:“格式化样式”这一项设置的默认值为“auto”,这意味着 Calibre 会自动检测并解析 TXT 文档结构,但是在某些较极端的情况下存在一个问题。以 Markdown 为例,Calibre 仅会在 Markdown 标记大于等于 5 的情况下才会用 Markdown 语法来解析文档,如果 TXT 文档中添加 Markdown 标记的章节标题个数恰好小于 5,就会导致 Calibre 无法正常解析章节标题并生成目录。由于我们明确使用了 Markdown 语法,所以最好的做法是让 Calibre 直接使用此语法解析 TXT 文档。
最后点击“确定”按钮,直到转换完成,就可以得到一个从 TXT 转换而来的带有目录的 MOBI 格式电子书了(如下图所示)。如此,仅需学习一遍,今后就可以很快速的处理 TXT 文档了,一劳永逸。
————————
小提示:如果在使用本方法时可能会遇到下面所示的错误。虽然 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
© 「书伴」原创文章,转载请注明出处及原文链接:https://bookfere.com/post/82.html
“转换电子书格式”相关阅读
- Calibre 使用教程之优化电子书的排版
- 如何把 Kindle 电子书转换成增强型排版的 KFX 格式
- 亚马逊 Kindle Convert:纸质书无损转换电子书
- EasyPub:把 TXT 文档转成带目录的 MOBI 格式
- Calibre 使用教程之电子书繁体字转简体字
- Calibre 使用教程之转换电子书格式
- 如何直接推送 EPUB 格式电子书到 Kindle 邮箱
- 如何将 AZW3 格式无损转换为 MOBI 格式并保持原有排版
- 如何将 AZW3 格式无损转换为 EPUB 格式并保持原有排版
- Kindle 漫画制作软件 ChainLP 简明教程
- 如何把 KFX 格式转换成 MOBI 等其它电子书格式
- Calibre 常用命令行工具详解之 ebook-convert
- Calibre 使用教程之为电子书添加更换字体
- Kindle Comic Converter:最简单的漫画转换工具
- Kindle Comic Creator:亚马逊官方漫画转换工具
你好,我用Sublime Text打开txt文档之后,全部都是乱码,是什么情况呢?
Daniel 您好。这是 TXT 编码问题。有一个小技巧,您可以先使用浏览器打开 TXT 文档,然后全选拷贝,再粘贴到 Sublime Text 等编辑器中,就可以解决这个问题。
你好,按照你的教程,我已经成功地加上目录了,非常感谢。怎么把下面格式:
第一券沧海横流
第一节抢衣服的劫犯
第二节。。。
第一卷完。
第二券披荆斩棘
第一节。。。
第二卷完
变成:
第一券沧海横流第一节抢衣服的劫犯
第一券沧海横流第二节。。。
呢?十分感谢!
请问 “914.第914章”这种怎么办?
最好的话希望前面的“914.”什么的可以删去…
麻烦问一下怎么搞…
谢谢!
sun 您好。可以使用正则删除“第”字前面的数字和点号,首先开启正则模式,查找:
^\d+.(.*)
,替换为:$1
。问题解决了!非常感谢!
楼主,我按照你的程序走了一边.遍,既没有目录生成也什么都没有提示啊
一直都很好 您好。请仔细按照文章步骤检查您的操作。
我发现###第几章必须的顶格才行,你试试。
为何按楼主做的添加了标记,点了确定,没有目录生成呢????
Xiaoyi Zhang 你好。操作过程注意两个步骤:一个是给文本文档添加“#”标记,另一个就是“内容目录”的设置,确保这两条无误就可以成功生成目录。
您好~按照教程成功的转了txt,不过目录的字体过大了~而且加粗。看着很不舒服~想问下目录的字体或者字号能不能修改呢~要怎么弄?谢谢^^
某橙 你好。电子书里的内容都是可以修改的。如果您熟悉 HTML 或 CSS 的话,可以使用 KindleUnpack 把电子书拆解成源文件,然后修改相应的 CSS 代码即可。如果不熟悉,可以先使用 Calibre 将其转换成 AZW3 或 EPUB 格式,然后用可视化编辑器修改里面相应的字体样式。最后再转换一下格式即可。
哦哦,好的~谢谢^^
请问怎么fere里没有 把doc转换成mobi格式的教程捏~~~
低调的地鼠 您好。word 文档转换成 mobi 格式请参考《Calibre 使用教程之转换电子书格式》这篇文章。
楼主好,我艰难地做好了几本书的目录,但发现原来在txt里有的行首两格缩进在mobi里看不到了,但我看txt的时候还是有缩进的。我注意转换的时候,没有勾选移除行首缩进。请问有什么办法可以解决吗?
吴思羽 您好。如果您想保留电子书正文内容的行首缩进效果,请在 Calibre 的转换窗口中切换到“界面外观”,勾选“删除段间空行”,然后把后面的“缩进尺寸”的值填上“2em”,再进行转换即可。
好的,谢谢楼主,刚试过了,确实可以了,感激不尽。另外想问一下,因为每本txt转换mobi的时候,总是有不少的参数要修改,可以支持相关选项有默认的设置吗?
正文 第二章 素问
第二章素问
楼主上面的查找什么来替换
姚 您好。请问您要查找什么?替换什么?从您的留言内容中不能分辨清楚,建议将示例内容单独放在一段中。
万能的楼主:您好~
再请教您一个问题,像有些电子书,它里面个别章节“第XX章”这几个字会出现两遍,我可以删掉重复的那一个吗?(⊙o⊙)…
谢谢~
这个得具体问题具体分析,一般规律一致的都可以用正则表达式来解决。比如你所说的这种情况,如果类似于下面这种:
第xx章
第xx章
可以使用查找:第(.*)章\n\n第.*章,替换:第$1章,来替换。点击这里打开的这篇文章里面有一个正则表达式入门,有一些简单的正则代码的说明,可以参考一下。
楼主v5~~再次感谢,我马上去试试!
楼主:您好!
请教一个问题:我转换完之后发现很多章节不见了,后来才发现原来是第XX章这个几个字,是直接接在前一个段落那一行。它不是空格或者顶格的情况。这个问题困扰我很久很久了~~~期待解决。不甚感激!!!
邹希 您好。这种情况很好处理,只需要使用一个支持正则表达式的编辑器(如 Sublime Text)打开待转换的文本文件,调出查找替换功能并激活正则匹配,比如您说的是“第XX章”,就可以查找:第(.*)章,替换:\n第$1章。其中“\n”是软换行,就可以把章节标题和前一段落分离开了。然后再进行格式转换。
楼主真乃神人也!~已测试可用,解决了一个大难题~~~~d=====( ̄▽ ̄*)b
感谢楼主~~~☆⌒(*^-゜)v THX!!
我是老人,最近孩子给我买了KINdle,我把自己写东西编成书,用calibre 转换成azw3的格式,也做了目录,但有一点儿我不满意:每段开始不缩进两个字,请您帮助好吗?十分感谢!
老先生 您好。在使用 Calibre 转换 AZW3 格式时,请切换到“界面外观”这个设置,找到“删除段间空行”,将其勾选,然后再把后面的“缩进尺寸”的值改为“2.0em”,然后再进行转换,这样所有段落的开头就都会自动缩进两个字符了。
按照你的指导,我的问题解决了,我如获至宝,谢谢你,十分感谢,你让我得高兴几天!
“Unable to find ^( |)第(.*)章” 怎么搞
Ementon 您好。“^( |)第(.*)章”这一条正则的意思是“顶行开始,包括一个空格或无空格,第,任意文字,章”,他能匹配“第二章”或“ 第2章”这种章节标题。您遇到这种提示请检查:1、查找模式是否开启了“正则匹配”;2、按照前面对这条正则的解释,章节标题是否能够被这条正则匹配。
请问如何表示多个空格?
Mr.Kwok 您好。\s* 表示若干个空格(可以是0个)。\s+ 表示一个或多个空格。简单的正则应用就可以通过搜索引擎获得,都有现成的规则可用。:)
http://linpinger.github.io/
楼上所说一键生成工具的作者发布页面。
我记得有个一键式的工具,是爱尔兰之狐写的。
大脸猫 您好,可否提供一下这个工具的名字或下载链接?
http://linpinger.github.io/
这是作者的程序发布页面,大脸猫所说的应该是txt2ebook,也是通过正则表达式实现的。
实际使用中个人觉得生成mobi文件的行间距过小,没有直接邮箱推送生成的azw格式阅读体验好。但重在有目录,也是种简便的方法。
MAC用户可以将文本粘贴至Pages,编辑段落目录、书名、作者导出为epub格式,然后用calibre随便转换就行,calibre可以直接读取word文件,没有试过,估计也能保留word文件的段落目录。
kcpa96 您好,您说的这些方法当然也是可以的,比如使用 Pages 生成 epub 格式再转换,排版可能会更好看一些。本文的方法更适合对于篇幅较大的文档快速处理,效率可能会更高一些,当然排版上会逊于其他排版软件。