如何将电子书函数 epub_book 和 kindlegen() 用于现有的 bookdown 文档?

How do I use the ebook functions epub_book and kindlegen() for existing bookdown documents?

我在 github(即 Hadley 的 R for Data Science and Efficient R)上找到了一些我想从源代码构建的电子书文档。编写文档的 Bookdown 有几个功能,即 epub_book()kindlegen() 来构建电子书(而不是 github 图书网站),我想使用它我可以在 Kindle 上看书了。

我看过 bookdown documentation for those functions,但我不明白 how/where 使用这些函数来构建电子书文件 and/or 如果已经写入了输出选项我需要编辑的代码。

它们是结构。你应该这样做

render_book("file.Rmd", epub_book())

构建电子书。一些变量可以传递给 epub_book().

你可以看看 https://bookdown.org/yihui/bookdown/ 。这是一本用bookdown写的关于bookdown的书。

您可以手动使用kindlegen()函数的方法如下:

  1. 安装 Kindlegen(这是一款来自 Amazon 的免费命令行工具,可将 .epub 转换为 .mobi)。
  2. 将Kindlegen的路径添加到PATH环境变量中
  3. 运行 R studio,构建.epub版本(构建面板(默认右上部分)> Build book > bookdown::epub_book(取决于你的_output.yml配置)).
  4. 当你已经有了epub版本后,在Console面板(默认左下部分),运行 bookdown::kindlegen().

Kindlegen 会找出在哪里可以找到 .epub 版本,并将其转换为 .mobi。


要将此添加到 构建过程,您的 _build.sh 可能看起来像这样(注意最后一行):

#!/bin/sh

set -ev

Rscript -e "bookdown::render_book('index.Rmd', 'bookdown::html_book')"
Rscript -e "bookdown::render_book('index.Rmd', 'bookdown::pdf_book')"
Rscript -e "bookdown::render_book('index.Rmd', 'bookdown::epub_book')"
Rscript -e "bookdown::kindlegen()"

并且您的 _output.yml 需要为 html_bookpdf_bookepub_book 定义配置,如下所示:

bookdown::html_book:
  toc: yes
  css: style.css
  split_by: chapter
bookdown::pdf_book:
  includes:
    in_header: preamble.tex
  latex_engine: xelatex
  citation_package: natbib
  keep_tex: yes
  template: null
bookdown::epub_book: default

在此之后,Build book > All formats 应该会生成所有 HTML、PDF、EPUB 和 MOBI 格式。