R Bookdown _bookdown.yml

Rob*_*inL 12 r r-markdown bookdown

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

具体来说,我发现很难描述什么进去的选项_bookdown.yml鉴于有至少两个其他的地方,说明选择:

  • _output.yml,
  • 函数调用的参数如bookdown::render_book.

在我看来,在_bookdown.yml函数的参数和参数之间存在任何类型的1对1映射bookdown::render_book,因此_bookdown.yml似乎不仅仅是记录函数调用选项的不同方式.

我们可以在源代码中看到`_bookdown.yml'正在控制一些配置选项,但不是全部.

所以 - 重新解释这个问题 - 为什么是_bookdown.yml一个单独的配置文件以及它应该包含什么的定义?

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

  1. 我们怎么知道这是一个选项,因为它没有在这里的文档或这里的例子中引用.
  2. 一旦我们知道它存在,我怎么知道它有什么影响?是否所有这些选项都传递给其他包(例如pandoc,rmarkdown)?我唯一可以找到参考的地方chapter_name是用于记账的CRAN源代码,即使在那里我也无法弄清楚它是如何被使用的.

注意,讨论_bookdown.yml通过笔者在这里,但我还是不完全了解.

Rob*_*inL 10

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

我们可以看到'config'变量in bookdown::render_book_bookdown.yml 这里填充,通过一个load_config可以在其中找到的函数填充utils.R.

load_config似乎做了两件事 - 它将内容存储config在一个名为的主选项列表中opts,其中config只有一个元素,然后返回该config元素.

请注意,此处opts最初定义.它是从一个可以在这里找到的创建.knitr:::new_defaults

然后config变量出现在代码库的多个部分中.

下面的代码代表:

  if (is.na(new_session)) {
    new_session = FALSE
    if (is.logical(config[['new_session']])) new_session = config[['new_session']]
  }
Run Code Online (Sandbox Code Playgroud)

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

config作为一个参数,它被传递了很多bookdown::render_book.因此,例如,我们可以看到它在source_files函数中使用utils.R.

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

我还没有设法找到可以指定的选项的完整列表,_bookdown.yml但有一种方法可以很容易地找出在Github上搜索示例的可能性.