3.3 电子书

目前 bookdown 支持 EPUB 和 MOBI 两种电子书格式。这些格式的书籍可以在智能手机、平板电脑或者是 Kindle 等特殊的电子阅读器上阅读。

3.3.1 EPUB

你可以使用 epub_book() 格式来创建一本 EPUB 书籍。它的一些配置项与 rmarkdown::html_document() 相同:

epub_book(fig_width = 5, fig_height = 4, dev = "png",
  fig_caption = TRUE, number_sections = TRUE,
  toc = FALSE, toc_depth = 3, stylesheet = NULL,
  cover_image = NULL, metadata = NULL,
  chapter_level = 1,
  epub_version = c("epub3", "epub", "epub2"),
  md_extensions = NULL,
  global_numbering = !number_sections,
  pandoc_args = NULL, template = "default")

关闭 toc 选项是因为电子书阅读器通常可以从书中自动找出目录,所以没有必要为目录多增加几页。有几个专门针对 EPUB 的配置项:

  • stylesheet: 它类似于 HTML 输出格式中的 css 配置项,你可以用 CSS 来定制元素的外观。
  • cover_image: 书籍封面图片的路径。
  • metadata: 书籍元数据所在 XML 文件的路径(更多细节请见 Pandoc 文档)。
  • chapter_level: 在内部,一本 EPUB 书籍是一系列的“章节”文件,这个配置项决定了书籍在何种级别上被分割成这些文件。这类似于我们在第 3.1 节中提到的 HTML 输出格式的 split_by 参数,但是 EPUB 书籍是一个单一的文件,你不会直接看到这些“章节”文件。默认的级别是第一级,如果你把它设置为 2,意味着这本书在内部会按节划分文件来组织,这可能会使得书籍加载更快。
  • epub_version: EPUB 的第 3 版或第 2 版。

EPUB 书籍本质上是 HTML 页面的集合,例如,你可以将 CSS 规则应用于其元素、嵌入图像、插入数学表达式(因为 EPUB 部分支持 MathML)等等。第 2 节中提到的图片/表格标题、交叉引用、自定义区块和引用也适用于 EPUB。你可以将本书的 EPUB 输出与 HTML 输出进行比较,你将看到二者唯一的主要区别是视觉外观。

有几个 EPUB 阅读器可以阅读书籍,包括 Calibre (https://www.calibre-ebook.com)、苹果的 iBooks 和谷歌的 Play Books。

3.3.2 MOBI

MOBI 电子书可以在亚马逊的 Kindle 设备上阅读。Pandoc 本身不支持 MOBI 输出,但你可以使用第三方工具将 EPUB 转换为 MOBI。其中一种工具是 Calibre。Calibre 是开源并且免费的,并且支持更多格式之间的相互转换。例如,你可以将 HTML 转换成 EPUB,将 Word 文档转换成 MOBI 等等。在 bookdown 中的函数 calibre() 是 Calibre 中命令行工具 ebook-convert 的封装函数。你需要确保通过环境变量 PATH 可以找到可执行的 ebook-convert。如果你使用 macOS,你可以通过 brew cask install calibre 命令用 Homebrew (https://brew.sh) 安装 Calibre,所以你不需要担心 PATH 问题。