把 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
“转换电子书格式”相关阅读
- 如何直接推送 EPUB 格式电子书到 Kindle 邮箱
- 如何把 Kindle 电子书转换成增强型排版的 KFX 格式
- Kindle 漫画制作软件 ChainLP 简明教程
- Calibre 使用教程之优化电子书的排版
- 如何将 AZW3 格式无损转换为 EPUB 格式并保持原有排版
- 如何把 KFX 格式转换成 MOBI 等其它电子书格式
- Calibre 使用教程之为电子书添加更换字体
- KindleGen:亚马逊官方 Kindle 电子书格式转换工具
- Calibre使用教程之为电子书添加或修改封面
- 在 Kindle 中阅读 EPUB 格式电子书的两种有效方法
- 乐书:在线 Kindle 电子书制作和转换工具
- Calibre 常用命令行工具详解之 ebook-convert
- 如何将 AZW3 格式无损转换为 MOBI 格式并保持原有排版
- EpubPress:把打开的多个网页转成一本电子书
- Calibre 使用教程之转换电子书格式
我已经改好了对应的目录,
(例如:
##第一卷 XXXX
###第一章 XXXX)
但我想将它们提取出来检查一下,该怎样搜呢?
尝试过【^(#*)(.*)$】这样搜,但出来的就是原文……
使用emeditor
noway 你好。如果想要可视化目录,推荐使用 easyPub 这个转换软件。
像这样的“三、生病”怎么添加“###”
如果是这种怎样写规则:
一、不惜一切
二、弱点
三、老狐狸
子陵 您好。
如果标题是单独一行的话,可以查找:。^(.*、.*)
,替换为:###\1
有些正文也会被选定。。。
也就是说标题不是单独一行?
标题是单独一行,不过正文如果有“、”的,它会一并选上。我用Sublime Text3试过了
嗯,那个确实是错的。请尝试这个,查找:
^([一二三四五六七八九十零〇百]+、.*)
,替换为:###\1
。有没有这样的一种表达方式的,就是 数字+后面限定多少字符(如三到六个字符,一般目录字数都不多的)+空格(这个是为了防止将正文有数字的也一般选上)。我觉得如果有的话,基本上这个可以作为标准的目录生成方式了
限定字符是可以做到的,但是这并不能一劳永逸,因为标题长短并不一样,而且标题的规则也不尽相同,还得根据具体情况使用相应的正则表达式。
**第一章
**第二章
为什么我用^( |)第(.*)章选不到任何东西的?
章节前面的星号是什么意思,原来就带着吗?
表示前面有两个空格
那就查找:
^.*第(.*)章
,替换为:###第\1章
。请问这种怎样转?
第一卷 鬼笔
第一章 *****
第二章 *****
……………………
第二卷 阴森
第一章 *****
第二章 *****
hua 您好。您贴的示例氛围卷、章两部分。先替换“卷”:查找
^( |)第(.*)卷
替换成##第\1卷
;然后替换“章”:查找^( |)第(.*)章
替换成##第\1章
。这样就可以了。手动替换比较麻烦,您可以使用 EasyPub 这个软件转换 TXT,更方便一些。easypub没有mac版,伤心…..
您好。请问如果我的书每个都带书名在前面怎么办,查找替换正则表达式代码?
如下:
都市之最强纨绔 正文 第九百九十五章 全能型天才?
都市之最强纨绔 正文 第九百九十六章 生死毒浴!比你更疯!
Cnivlek 您好。书名都是相同的,查找替换的时候都带上即可,如查找:
都市之最强纨绔 正文 第(.*?)章 (.*)
,替换:都市之最强纨绔 正文 ###第\1章 \2
。如果替换后不想带书名,则查找的时候带上书名,替换规则去掉书名即可。您好。请问如果我的书每个都带个卷名,我想先分卷再分章节怎么办?
比如 每一章都是 第xx卷 xxxx 第XX章 xxxx
你好,我想请问一下,我一直按照文中的记录中规中矩的弄目录。然后一直转不出来。我觉得我选的文好像也挺正的,请问下问题出哪儿呢。应该怎么转呀,谢谢!
文章格式:
寓所迷案 – 寓所迷案
第一章
我不知道到底从哪儿开始这个故事,但是我还是选择了某个星期三在牧师寓所的午餐时分开始。席间的交谈大部分与将要叙述的故事无关,但还是包含得有一两件有启发的事件,这些事件会影响到……
第二章
……
输入:查找:第(.*)章 替代:###第\1章
但是一直显示 unable to find。。
谢谢!
黄冬燕 您好。查找替换开启正则功能了吗?一般在查找替换面板界面上有这么一个勾选项。
真的是。。。谢谢!
你好,我用 Sublime Text 2打开TXT文件是乱码,请问是出了什么问题呢?
鲁小胖 您好。有一个小技巧可以解决这个方法:先用浏览器打开 TXT 文档,浏览器会自动识别其编码并正确显示文本,然后全选拷贝粘贴到 Sublime Text 中即可。
麻烦问一下
如果是 1 面基
2 吻
3 梦
….
这样的话 该怎么在前面加“###”?
如果是 第001章 .出国交换
001.出国交换
第002章 .温柔的学长
002.温柔的学长
……
这样,该怎么改….
谢谢。 :)
sun 您好。这是两个问题吧。
1、查找:
^(\d)
(注意括号后面有一个空格),替换:###$1
;2、查找:
^第(\d+)章 (\.)
,替换:$1$2
非常感谢!! 每次都很快的就回答了呢 还回答的特别细心。真的是谢谢呢!!
噢.. 前面试了下发现^用不了,因为我的这些标题不顶格啊怎么办….
不顶格的话就不要使用
^
。如果标题是单独一行,也可使用以尾部为基准的查找规则:.*(\d.*)$
,然后替换成:###$1
。呃呃我试了一下不可行.. 会把其他的也都带进来的..
于是我很机智的用Find:(\d) 然后replace with:\n第$1章
然后两位数的标题就用(\d)(\d) 和\n第$1$2章
以此类推… 没想到成功了?
接下来就用普通的方式加###就好了.. ?
但是前面的第二个.. 貌似也不成功呢.. 怎么办? 第二个试了之后唯一的改变就是少了个空格 其他什么都没变… 该怎么改?
“把其他的也都带进来”说明不满足“标题是单独一行”这一条件。如果直接查找
(\d)
替换有可能会把正文中的数字也替换掉。如果本文内容是你留言所给出的那样,第二个规则是有效的。不生效需要检查下内容是不是如你所说的那样,我给出的规则适合于标题是顶格且为单独一行的情况。
因为文本内容比较多样,并没有一劳永逸的规则可用,都需要看一下都有什么同样的规则,然后结合不同的规则使用。
为何我在sublime_text里打开txt文件后显示的是ÕýÎÄ µÚÒ»Õ£ºÆßÄê´ºÃÎ这些呢?
shawshaw 您好。这是编码问题。如果使用的是 Windows 试试用“记事本”打开,然后另存为 UT8 编码。还有一个方法就是,用浏览器打开 TXT 文档,一般会自动识别正确的编码,然后再把那些文字全选拷贝下来。
站長你好,我習慣用Calibre將TXT轉mobi,在排版格式上雖沒太多強迫症候群,但有一點我一直很疑惑:kidle系統字體內設4種簡體(也支援繁),2種繁體,但一般TXT轉成繁體mobi,到kindle機器裡看都是看到4種字體的版本。
如果想預設系統是給兩種宋、黑兩種字體(繁體)的話,應該要去Calibre哪邊設定呢?這問題困擾我很久了,因為平常看橫排簡繁體mobi比較沒差,但如果是豎排繁體mobi,這兩種對標點符號的正確顯示就差很多了(4種簡體在直排會偏旁、有些標點沒轉90度,但僅在kindle電子書上會這樣,同樣的檔案在電腦kindle viewer是正確顯示的),我看中亞有些繁體書、網上自製mobi,有些顯示預設字體是2種繁體版的,不知道這種小細節應該在哪設定…盼強者能幫我解答,感激不盡!
alecto 您好。简体电子书显示四种中文字体,繁体电子书显示两种中文字体。电子书是简体还是繁体是由电子书中设置的语言决定的,在 Calibre 中虽然可以通过修改元数据的方式修改语言,但中文只有“中文”一项,并没有区分开简体和繁体。
当然解决办法是有的,可以通过修改电子书源文件的方式修改电子书语言。思路是这样的:首先把需要修改的 mobi 文件用 KindleUnpack 拆解成源文件,然后找到一个后缀名为 .opf 的文件并用代码编辑器(如 Sublime Text、editplus 等)打开,找到下面这行代码:
将其修改为如下所示代码:
最后再用 KindleGen 重新把修改好的源文件转换成 mobi 格式。这样横排标点就会自动将转换为竖排标点,并且会自动居中,较为美观。选择字体的时候也就能选择“宋體”和“黑體”两款繁体字体了。
P.S. 这个方法在《如何把 Kindle 电子书的横排文字改成竖排》这篇文章中也提到了。其实除了设置竖排这一步骤,就是把一本书设置成可选择繁体字体的方法。
非常感謝站長詳細且幫了大忙的回答,剛剛還在想是不是unpack以後需要改css文件,但又困擾不知那兩個繁體黑、宋字型的字型檔名,沒想到直接在opf這邊直接改dc就能讓系統直接抓內建繁體了!給你一萬個讚!
请问为什么在calibre上是有目录的,但是在kindle上无法显示目录呢?谢谢。
kindle用户 您好。电子书有两中目录,一种是导航目录,也就是点击“前往”按钮看到的那个目录。另一种是页面目录,它属于电子书正文内容。您在 Calibre 中看到的应该是导航目录,如果想在正文中显示目录,需要生成目录页面。
如果所有标题都是
☆、哔哩哔哩~
☆、哔哩哔哩~
☆、哔哩哔哩~
这样.. 怎么把它变成
第一章 哔哩哔哩~
第二章 哔哩哔哩~
……
之类的?
谢谢
sun 您好。因为原标题是相同,没有规律可循,所以单纯的正则无法实现。
悲伤… (⑉꒦ິ^꒦ິ⑉)
好吧.. 谢谢
请问卷一:这种的怎么查找以及第1回这种怎么替换成第一章?
嘉琪 您好。1、查找“卷一”使用正则“
卷(.*):
”;2、可以把“第1回”替换成“第1章”,正则查找“第(.*)回
”,替换为“第$1章
”。如果想把“12345”一次性换成“一二三四五”,单纯正则无法实现(或者能实现我却不会)。卷一:、卷二:卷三:……和第1回、第2回、第3回……这两种的怎么替换