怎样用Emacs调电子书格式: Difference between revisions
Jump to navigation
Jump to search
Tags: Mobile edit Mobile web edit |
|||
(6 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
==背景== | ==背景== | ||
[[File:源pdf格式精美但转txt后换行凌乱.png| | [[File:源pdf格式精美但转txt后换行凌乱.png|333px]] | ||
找了本电子书,是 pdf 格式的,无法导出为好格式的 txt。想起好久没玩 Emacs 的 regexp 怕生疏了,于是就用 Emacs 调一下 txt 电子书的格式。 | 找了本电子书,是 pdf 格式的,无法导出为好格式的 txt。想起好久没玩 Emacs 的 regexp 怕生疏了,于是就用 Emacs 调一下 txt 电子书的格式。 | ||
注意,通常并不建议使用 Emacs 调整电子书格式,因为直接重新找资源是更自然、方便、合理的方案。 | 注意,通常并不建议使用 Emacs 调整电子书格式,因为直接重新找资源是更自然、方便、合理的方案。 | ||
友情提示:下列图片,点开看全图更易理解,因为白边区域易与网页底色混淆。 | |||
==观察== | ==观察== | ||
Line 11: | Line 13: | ||
在 pdf 中,全选并粘贴进 Emacs,得到初版 txt。 | 在 pdf 中,全选并粘贴进 Emacs,得到初版 txt。 | ||
打开 whitespace-mode,发现每一行大概有 58 字,坑爹的是每一行末尾有一个行尾符 $。通常的纯文本,都只在段尾才有一个行尾符 $ | 打开 whitespace-mode,发现每一行大概有 58 字,坑爹的是每一行末尾有一个行尾符 $。通常的纯文本,都只在段尾才有一个行尾符 $。那怎么办呢? | ||
==步骤== | ==步骤== | ||
; 1. 标记段尾 | |||
[[File:在段尾插入锚点.png|490px]] | [[File:在段尾插入锚点.png|490px]] | ||
: 把以句号、省略号、后引号、问号、后括号、破折号、感叹号结尾的地方,全打上 rjsyffj 这个标记,rjsyffj 是一句诗:人间四月芳菲尽。打上标记后,在把全书所有断行合并成一行,段尾也有了 rjsyffj 这个明显的标记。 | : 把以句号、省略号、后引号、问号、后括号、破折号、感叹号结尾的地方,全打上 rjsyffj 这个标记,rjsyffj 是一句诗:人间四月芳菲尽。打上标记后,在把全书所有断行合并成一行,段尾也有了 rjsyffj 这个明显的标记。 | ||
: <code>\(。\|……\|”\|?\|)\|——\|!\)$ → \&rjsyffj</code> | : <code>\(。\|……\|”\|?\|)\|——\|!\)$ → \&rjsyffj</code> | ||
; 2. | ; 2. 标记章节 | ||
[[File:把章名摘出来.png|490px]] | [[File:把章名摘出来.png|490px]] | ||
Line 26: | Line 28: | ||
: <code>\(第.章\) → ^J^J\&^Jrjsyffj </code> | : <code>\(第.章\) → ^J^J\&^Jrjsyffj </code> | ||
; 3. | ; 3. 合并全书成一行 | ||
[[File:合并全书为一行安插了诗句锚点.png|490px]] | [[File:合并全书为一行安插了诗句锚点.png|490px]] | ||
Line 32: | Line 34: | ||
: <code>delete-indentation</code> | : <code>delete-indentation</code> | ||
; 4. | ; 4. 提取段尾 | ||
[[File:把锚点替换为段尾符就实现了分段.png|490px]] | [[File:把锚点替换为段尾符就实现了分段.png|490px]] | ||
: | : 在rjsyffj处换行 | ||
; 5. 收尾 | ; 5. 收尾 |
Latest revision as of 07:53, 20 October 2024
背景
找了本电子书,是 pdf 格式的,无法导出为好格式的 txt。想起好久没玩 Emacs 的 regexp 怕生疏了,于是就用 Emacs 调一下 txt 电子书的格式。
注意,通常并不建议使用 Emacs 调整电子书格式,因为直接重新找资源是更自然、方便、合理的方案。
友情提示:下列图片,点开看全图更易理解,因为白边区域易与网页底色混淆。
观察
在 pdf 中,全选并粘贴进 Emacs,得到初版 txt。
打开 whitespace-mode,发现每一行大概有 58 字,坑爹的是每一行末尾有一个行尾符 $。通常的纯文本,都只在段尾才有一个行尾符 $。那怎么办呢?
步骤
- 1. 标记段尾
- 把以句号、省略号、后引号、问号、后括号、破折号、感叹号结尾的地方,全打上 rjsyffj 这个标记,rjsyffj 是一句诗:人间四月芳菲尽。打上标记后,在把全书所有断行合并成一行,段尾也有了 rjsyffj 这个明显的标记。
\(。\|……\|”\|?\|)\|——\|!\)$ → \&rjsyffj
- 2. 标记章节
- 这句就是把第某章前面加两个空行,后面也加一个空行,再打上 rjsyffj 这个标记,把全书所有断行合并成一行之后,章节名也有了 rjsyffj 这个明显的标记。^J 是在 Emacs 中按 C-q C-j 出现的,意思是换行。
\(第.章\) → ^J^J\&^Jrjsyffj
- 3. 合并全书成一行
- 把所有断行合并成一行。相当于这几十万字的电子书变成了一行,但由于段尾在第 1 步中做了 rjsyffj 这个标记,所以这一大行,下一步把段尾替换出来就形成了美观的分段。
delete-indentation
- 4. 提取段尾
- 在rjsyffj处换行
- 5. 收尾
- 删除多余的空格,取消 whitespace-mode,与原 pdf 对比看是否有误
评价
\|表“或”的用法比较有意思。先加 magic letter,替换再找回的思路,高效。Emacs 命令 delete-indentation,强大。想到用。……”?)——!
这七个符号定位段尾的方法,真棒。
表面上,本文针对的是处理电子书。实际上,对于从 pdf 导出来的 word 文档或 txt 文档,其全篇断行凌乱无序的,基本都可以通过这种找段尾、打标记、合并行、替换标记为理想的格式的思路,实现文档美化。