bookdown有许多配置选项,我发现很难了解如何知道是否存在选项,以及这些选项的含义背后的逻辑。
具体而言,我发现很难描述 _bookdown.yml
中选项的类型,因为至少还有两个其他陈述选项的地方:
- 在
_output.yml
中, - 函数调用的参数,例如
bookdown::render_book
。
在我看来,_bookdown.yml
与诸如bookdown::render_book
之类的函数之间有任何1到1映射,因此_bookdown.yml
似乎并不是录制功能调用选项的另一种方法。
我们可以在" _ bookdown.yml"的源代码中看到一些配置选项,但不是全部。
so-要重塑问题 - 为什么 _bookdown.yml
单独的配置文件以及什么应包含的定义?
以代表性的示例,有一个chapter_name
选项可以在_bookdown.yml
中使用。我有以下问题:
- 我们应该如何知道这是一种选择,因为此处甚至在此处的文档中都没有引用它。
- 一旦我们知道它存在,我如何找到它的影响?所有这些选项是否都传递给其他软件包(例如pandoc,rmarkDown)?我唯一可以找到对
chapter_name
的参考的地方是BookDown的Cran源代码,即使在那里我也无法真正弄清楚它是如何使用的。
请注意,作者对_bookdown.yml
的讨论在这里,但我仍然不完全理解。
这是对代码库的一些调查结果:
我们可以看到,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']]
}
因此,我们可以看到,如果将new_session
直接传递给bookdown::render_book
作为函数参数,则使用它。否则尝试从_bookdown.yml
文件加载它。
config
在bookdown::render_book
中的参数中经常传递。因此,例如,我们可以看到它在utils.R
中的source_files
函数中使用。
我们总结什么?_bookdown.yml
允许您填充bookdown
软件包的全局选项列表。每当您看到config
(这是一个列表)正在使用代码库时,您可以通过填充_bookdown.yml
我尚未设法找到可以在_bookdown.yml
中指定的选项的综合列表,但是一种轻松找出可能的方法是在GitHub上搜索示例。