R 书本 _bookdown.yml

R Bookdown _bookdown.yml

Bookdown 有许多配置选项,我发现很难理解如何知道一个选项是否存在,以及这些选项背后的逻辑。

具体来说,我发现很难描述种类的选项进入_bookdown.yml,因为至少还有两个其他地方可以说明选项:

在我看来 _bookdown.ymlbookdown::render_book 等函数的参数之间没有任何一对一的映射,所以 _bookdown.yml 似乎没有只是记录函数调用选项的不同方式。

我们可以在源代码中看到 `_bookdown.yml' 控制了一些 config options 但不是全部。

所以 - 换个说法 - 为什么 _bookdown.yml 是一个单独的配置文件,而 where/what 是它应该包含的内容的定义?

举个有代表性的例子,有一个chapter_name选项可以用在_bookdown.yml中。我有以下问题:

  1. 我们怎么知道这是一个选项,因为它没有在文档中引用 here or even in the example here
  2. 一旦我们知道它存在,我怎么知道它有什么作用?所有这些选项是否都传递给其他包(例如 pandoc、rmarkdown)?我唯一能找到对 chapter_name 的引用的地方是 bookdown 的 CRAN 源代码,即使在那里我也无法真正弄清楚它是如何使用的。

注意,作者对_bookdown.yml的讨论是here,我还是没完全看懂

以下是对代码库的一些调查结果:

我们可以看到 bookdown::render_book 中的 'config' 变量是从 _bookdown.yml here, via a function called load_config which can be found in utils.R.

填充的

load_config 似乎做了两件事——它将 config 的内容存储在一个名为 opts 的主选项列表中,其中 config 只是一个元素,然后是 returns 那个 config 元素。

注意 opts 最初定义为 here. It is created from a knitr:::new_defaults which can be found here.

config 变量随后出现在代码库的多个部分。

following code代表:

  if (is.na(new_session)) {
    new_session = FALSE
    if (is.logical(config[['new_session']])) new_session = config[['new_session']]
  }

所以我们可以看到如果直接把new_session作为函数参数传给bookdown::render_book,就使用了。否则会尝试从 _bookdown.yml 文件加载它。

config 作为参数在 bookdown::render_book 中被广泛传递。因此,例如,我们可以在 utils.R.

中的 source_files 函数中看到它被使用

我们得出什么结论? _bookdown.yml 允许您填充 bookdown 包的全局选项列表。每当您看到 config(这是一个列表)正在使用代码库时,您可以通过填充 _bookdown.yml

来设置此列表的元素

我没有设法找到可以在 _bookdown.yml 中指定的选项的完整列表,但一种轻松找出可能的方法是 search for examples on Github