Bookdown有很多配置选项,我发现很难理解如何知道某个选项是否存在,以及这些选项背后的逻辑。
具体来说,我发现很难描述_bookdown.yml
中的种选项,因为至少有两个其他地方可以说明选项:
_output.yml
,bookdown::render_book
等函数调用的参数。 在我看来,_bookdown.yml
与bookdown::render_book
等函数的参数之间存在任何类型的1对1映射,因此_bookdown.yml
似乎不仅仅是记录功能调用选项的不同方式。
我们可以在源代码中看到`_bookdown.yml'正在控制某些config options但不是全部。
所以 - 重新解释这个问题 - 为什么_bookdown.yml
是一个单独的配置文件,以及它应该包含什么的定义?
举一个有代表性的例子,有一个chapter_name
选项可以在_bookdown.yml
中使用。我有以下问题:
答案 0 :(得分:9)
以下是对代码库进行调查的一些结果:
我们可以看到bookdown::render_book
中的'config'变量来自_bookdown.yml
here,通过名为load_config
的函数填充,可在utils.R
中找到}。
load_config
似乎做了两件事 - 它将config
的内容存储在名为opts
的主选项列表中,其中config
只是一个元素,然后返回config
元素。
请注意,opts
最初定义为here。它是从knitr:::new_defaults
创建的,可以找到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。