把 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
“转换电子书格式”相关阅读
- 乐书:在线 Kindle 电子书制作和转换工具
- Kindle 漫画制作软件 ChainLP 简明教程
- 在 Kindle 中阅读 EPUB 格式电子书的两种有效方法
- Kindle Comic Converter:最简单的漫画转换工具
- Calibre 使用教程之优化电子书的排版
- Calibre使用教程之为电子书添加或修改封面
- Calibre 使用教程之电子书繁体字转简体字
- Calibre 使用教程之转换电子书格式
- KindleGen:亚马逊官方 Kindle 电子书格式转换工具
- 亚马逊 Kindle Convert:纸质书无损转换电子书
- Kindle Comic Creator:亚马逊官方漫画转换工具
- 如何把 KFX 格式转换成 MOBI 等其它电子书格式
- EpubPress:把打开的多个网页转成一本电子书
- 如何把 Kindle 电子书的横排文字改成竖排
- 如何直接推送 EPUB 格式电子书到 Kindle 邮箱
我想问一下,我这边弄好目录然后TXT转EPUB之后出来成品的文字是全黏在一起的,原本的TXT是有分段的,请问这是什么情况?
请问:===第1章 绪方逸势===,这个怎么替换?
如果章节名是单独一行,查找
^===(.*)===
替换成###\1
(去掉了等号)。谢谢书伴,转换成功了。还有个问题,章节名为什么不是在开头?这个要怎么调整?
“章节名不在开头”是什么意思?
不好意思,我没讲清楚,就是新章仍是接在上一章结尾位置,而不是新起一页。这个要怎么调整?
请问,可以生成两级目录么?比如第X卷,然后点开后下边显示第X章这样的?
可以。比如,在 TXT 文档中把一级目录标记为
##第X卷
,二级目录标记为###第X章
,然后在用 Calibre 转换设置 XPath 表达式时,一级目录填写//h:h2
,二级目录填写//h:h3
,这样就转换后的电子书就可以呈现两级目录。您好,请问想 001 XXX(章节名) 这种请问该如何替换呢?
如果这些章节名是单独一行,可以查找
^(\d+ .*)$
替换###\1
。您好,我有遇到有些图书是直接1.章节名, 2. 章节名的。这种时候要怎么在find和replace来更改呢?
如果这些章节名是单独一行,可以查找
^(\d+\..*)$
替换成###\1
即可。您好,这里的公式我复制上去后好像是错误的
使用的是什么编辑器?章节名和网友 Fei 提供的一致吗?
解决了,我用的也是Sublime Text 2,章节名是 1 ()或者 001 (),然后我发现将您提供的公式^(\d+ .*)$ 中的”^”去掉,变为(\d+ .*)$,就可以顺利进行查找替换了。
这可能是章节名数字前面有其它字符(如空格)导致无法从行起始进行匹配。
为什么生成的azw3格式文件的章节没有换页,calibre结构检测里的pagebreak不起作用
这个问题需要测试,可以将转换前和转换后的文件发送到书伴邮箱(页面底部“联系”处获取)。
请问单汉字章节如何替换
例如:
一
二
三
……
假设,章节是从“一”到“一百八十”,并且是顶格的,如下所示:
可以查找
^([一二三四五六七八九十百]{1,4})$
替换###\1
。Txt2eBook这个软件更好用。
而且我记得是开源的。
https://github.com/linpinger/txt2ebook
你好请问下,我按照步骤来在Sublime中添加了###,但是却不能跳转?应该怎样才能使目录跳转呢
这个问题需要测试,可以将转换前和转换后的文件发送到书伴邮箱(页面底部“联系”处获取)。
个人觉得还是easypub比较简单方便,对于章节名称正常的txt文件可以一键转换为mobi格式,且本人遇到过利用calibre转换的mobi格式文件只有标题可以改变字体的状况,而利用easypub只需要选择字体-使用阅读器默认字体就可以解决了。
附上easypub的获取网址:https://pan.baidu.com/share/init?surl=PJPm1ndN_x0q8cVz8tOSaw(提取码:5ju0)
EasyPub 书伴也有相关文章:《EasyPub:把 TXT 文档转成带目录的 MOBI 格》。
kindle好像全系都无法显示2级以上的目录。除了把2级以上的目录改为2级目录之外,还有没有更好的方式呢?
应该是没有,因为硬性限制是 Kindle 本身不支持超过两级目录的显示。
你好,我跟着教程一步步做了,设置了一级目录(XPath 表达式),也在结构的格式化样式里选了markdown,但是calibre转换后还是没有生成目录。这是我第一次遇上这种情况,之前成功转换了好几本书的格式,但就是这本书不行,请问如何解决?
这个问题需要测试一下,可以把出问题的 TXT 文档发送到书伴邮箱(页面底部“联系”处获取)。
您好,我在sublime中给第x章前加上了###,都是顶格的;在calibre转换后却发现没有生成目录,“###第x章”变成了和正文一样是单独缩进的一行字了,请问是什么原因呢?
是否按照文中的步骤设置了“一级目录(XPath 表达式)”?
有的哦,在calibre里设过一级目录表达式的,我也按文中步骤成功给几份txt转mobi设了目录,就有个别几份会有这样的问题。
这个问题需要测试一下,可以把出问题的 TXT 文档发送到书伴邮箱(页面底部“联系”处获取)。
此问题的解决方法为:在转换设置面板切换到“TXT 输入”,在“结构”这一栏找到“格式化样式”并将其设为“markdown”。原因补充在本文第三部分中。
为什么我使用 第(.*)章 显示找不到呢
你要匹配的文本是怎样的呢?
第一章啊,顶格的
请确保你用的是代码编辑器,并开启了替换的正则功能。
你好 本文中浏览器打开txt文件请问如何全选。 我的txt文件是乱码 用浏览器成功打开后无法全选 浏览器打开txt貌似没有编辑功能
Windows 系统使用
Ctrl + A
,macOS 使用Command + A
即可全选。如果 TXT 文件太大,浏览器会出现延迟加载的情况,你需要向下拉把内容全部显示完,才能选中全部内容。或者通过命令行工具 libiconv(Windows 系统下载 | macOS 系统自带)直接把 TXT 文件的编码转换成 UTF-8 编码:
其中 file_original.txt 是原始文件,file_converted.txt 是转码后的文件。
你好,请教有特殊字符的章节名应该怎样替换,如
☆、1章节名
☆、2章节名
……
全部是顶格的
特殊字符不碍事,直接把它拷贝到“查找”即可。如果要保留这个特殊字符,可以把
^☆、(\d)
替换成###☆、\1
,否则就替换成###\1
。