起因#
在 Github 上有许多电子书是以 Markdown 文件形式编写的,它们通常是由若干个文件夹包括若干个 md 文件构成的。这种 Repo 可以使用 GitBook 构建成网页,可供在线浏览。我想将这些文件转换成 epub 格式并导入到自己的阅读器中阅读,以便更方便地管理注释。
在网页上查询后发现 gitbook 有命令行版本,可以生成 html/pdf/epub。下载之后发现初始化的时候会报错:
Installing GitBook 3.2.3
/opt/homebrew/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js:287
if (cb) cb.apply(this, arguments)
^
TypeError: cb.apply is not a function
at /opt/homebrew/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js:287:18
at FSReqCallback.oncomplete (node:fs:192:5)
Node.js v19.7.0
查了一下报错,发现是 gitbook 命令行的依赖版本太老了,而且 gitbook 命令行已经不再开发更新。在 Stack Overflow 上发现有人推荐了 honkit,一个 gitbook 的 fork。
流程#
安装 honkit#
在使用 honkit 之前,需要先安装 Node.js。
安装 honkit:
$ npm init --yes
$ npm install honkit --save-dev
安装 Calibre#
下载 Calibre 并安装。
Windows 下需要将 Calibre 安装路径添加到环境变量。
Mac 下需要使用如下命令:
$ sudo ln -s /Applications/calibre.app/Contents/MacOS/ebook-convert /usr/local/bin
转换:#
在文件夹内初始化:
$ npx honkit init
会生成如下形式的文件结构:
.
├── files
├── README.md
└── SUMMARY.md
其中,README.md
文件包含书籍的前言或介绍信息,SUMMARY.md
文件则包含书籍的内容目录。
接下来,可以根据书籍的内容编写目录。假设该书的内容结构如下:
.
├── ch1
│ ├── ch1.1.md
│ └── ch1.2.md
└── ch2
└── ch2.1.md
SUMMARY.md
的内容应该是
# Summary
### ch1
* [ch1](ch1/ch1.1.md)
* [ch1](ch1/ch1.2.md)
### ch2
* [ch2](ch2/ch2.1.md)
如果书籍内容较多,可以使用 ChatGPT 来加速目录文件的构建。使用 tree
命令获取文件结构,将目录要求和文件结构发送给 ChatGPT,就可以生成目录文件了。
如果需要自定义书籍元信息,需要在当前文件夹下新建 book.json
文件。
以下是一个示例:
{
"root": "./",
"title": "xxx",
"author": "xxx"
}
更多自定义选项可以参考官方文档。
在我的经验中,如果在元数据中使用中文可能会出现一些问题。因此,我建议使用默认设置生成电子书,并将电子书导入到 Calibre 中编辑元数据。编辑完成后,转换书籍即可应用元数据。这样更为直观和简单。
如果想要添加封面,可以在目录下添加 cover.jpg
文件。
设置完成后,即可构建电子书。命令如下:
$ npx honkit build
$ npx honkit pdf
$ npx honkit epub
这样可以生成 html/pdf/epub 文件了。
Docker 使用#
我更推荐直接使用 Docker 版本,更加方便,只需在目录下执行命令即可。
docker pull honkit/honkit
docker run -v `pwd`:`pwd` -w `pwd` --rm -it honkit/honkit honkit build
docker run -v `pwd`:`pwd` -w `pwd` --rm -it honkit/honkit honkit pdf
docker run -v `pwd`:`pwd` -w `pwd` --rm -it honkit/honkit honkit epub
其他#
这个方法也可以用来把一些网页专栏制作成 epub 电子书。流程是先用 简悦 将网页转换成 Markdown 文件并保存,然后再用 Honkit 将其转换成 epub,这样就可以导入到 Apple Books/Readwise Reader 等阅读器中查看并管理标注。