1.3 使用方法
有典型的 bookdown 书籍包括多个章节,并且每一章放在一个 R Markdown 文件中,文件的拓展名为 .Rmd。每一个 R Markdown 文件必须直接以本章标题作为开头,并使用一级标题,例如 # Chapter Title。全部 R Markdown 文件必须使用 UTF-8 编码,特别是当他们包含某些多字节字符时,例如中文、日文和韩文。以下是一个例子(the bullets are the filenames, followed by the file content):
- index.Rmd 
- 01-intro.Rmd 
- 02-literature.Rmd 
- 03-method.Rmd 
- 04-application.Rmd 
- 05-summary.Rmd 
默认情况下,bookdown 按文件名的顺序合并所有 Rmd 文件,例如,01-intro.Rmd 将出现在 02-literature.Rmd 之前。以下划线 _ 开头的文件名将被跳过。如果存在名为 index.Rmd 的 Rmd 文件,则在合并所有 Rmd 文件时,它将始终被视为首个文件。使用这种特殊处理的原因是,从 index.Rmd 生成的 HTML 文件 index.HTML 通常是你查看网站时的默认主页,例如,当你打开 http://yihui.org/ 时,你实际上正在浏览 http://yihui.org/index.html。
你能够通过在书籍目录中包含一个名为 _bookdown.yml 的配置文件来覆盖程序的上述行为。它是一个 YAML 文件 (https://en.wikipedia.org/wiki/YAML),R Markdown 用户应该对这种格式很熟悉,因为它也被用来在 R Markdown 文档开头编写元数据(你能够在第 B.2 节了解有关 YAML 的更多信息)。你可以使用一个名为 rmd_files 的字段来定义你自己的书籍文件列表与 Rmd 文件顺序。例如:
使用上述方法时,bookdown 将会使用你在这个 YAML 字段(如果文件 index.Rmd 存在,它将会被添加进文件列表,并且以下划线命名的文件名将会被忽略)中定义的文件列表。如果你希望同时输出 HTML 和 LaTeX/PDF 文档,并且对于 HTML 和 LaTeX 输出使用不同的 Rmd 文件,你可以分别为这两种输出格式指定不同的文件列表,例如,
尽管我们一直在谈论 R Markdown 文件,但章节文件实际上不必是 R Markdown 文件。它们可以是普通的 Markdown 文件 (.md),并且完全不需要包含 R 代码块。你当然可以使用 bookdown 来创作小说和诗歌。
但是,默认情况下,只有 .Rmd 文件(而不是 .md 文件)会被视为章节文件,从而被包含在自动收集的文件中。
目前,你可能会使用的主要的输出格式包括 bookdown::pdf_book、bookdown::gitbook、bookdown::html_book 和 bookdown::epub_book。软件包中有一个类似于 rmarkdown::render() 的函数 bookdown::render_book(),但它是为了使用输出格式函数将多个 Rmd 文档呈现在一本书中。你可以直接从命令行调用这个函数,或者点击 RStudio IDE 中的相关按钮。下面是一些命令行示例:
bookdown::render_book('foo.Rmd', 'bookdown::gitbook')
bookdown::render_book('foo.Rmd', 'bookdown::pdf_book')
bookdown::render_book('foo.Rmd', bookdown::gitbook(lib_dir = 'libs'))
bookdown::render_book('foo.Rmd', bookdown::pdf_book(keep_tex = TRUE))为了在 RStudio IDE 中使用 render_book 和输出格式函数,可以定义一个名为 site 的 YAML 字段,其值为 bookdown::bookdown_site,1并且输出格式函数可以在 output 字段中使用,例如:
---
site: "bookdown::bookdown_site"
output:
  bookdown::gitbook:
    lib_dir: "book_assets"
  bookdown::pdf_book:
    keep_tex: yes
---然后你可以点击 RStudio 中 Build 选项卡下的 Build Book 按钮来将 Rmd 文件编译为一本书,或者点击工具栏中的 Knit 按钮来预览当前章节。
更多在 _bookdown.yml 中的 bookdown 设置将会在第 4.4 节中介绍。除了这些配置,你还能够在书籍的第一个 Rmd 文件中的 YAML 元数据里指定一些 Pandoc 相关的配置,例如标题、作者以及书籍付梓日期等。例如:
- 这个函数会调用 - bookdown::render_book()。↩︎