Note-52242-18

Token ID: 1

ERC-721 1 Transfers

Metadata

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