R 书本 _bookdown.yml
R Bookdown _bookdown.yml
Bookdown 有许多配置选项,我发现很难理解如何知道一个选项是否存在,以及这些选项背后的逻辑。
具体来说,我发现很难描述种类的选项进入_bookdown.yml
,因为至少还有两个其他地方可以说明选项:
- 在
_output.yml
、
- 函数调用的参数,例如
bookdown::render_book
。
在我看来 _bookdown.yml
和 bookdown::render_book
等函数的参数之间没有任何一对一的映射,所以 _bookdown.yml
似乎没有只是记录函数调用选项的不同方式。
我们可以在源代码中看到 `_bookdown.yml' 控制了一些 config options 但不是全部。
所以 - 换个说法 - 为什么 _bookdown.yml
是一个单独的配置文件,而 where/what 是它应该包含的内容的定义?
举个有代表性的例子,有一个chapter_name
选项可以用在_bookdown.yml
中。我有以下问题:
- 我们怎么知道这是一个选项,因为它没有在文档中引用 here or even in the example here。
- 一旦我们知道它存在,我怎么知道它有什么作用?所有这些选项是否都传递给其他包(例如 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
变量随后出现在代码库的多个部分。
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。
Bookdown 有许多配置选项,我发现很难理解如何知道一个选项是否存在,以及这些选项背后的逻辑。
具体来说,我发现很难描述种类的选项进入_bookdown.yml
,因为至少还有两个其他地方可以说明选项:
- 在
_output.yml
、 - 函数调用的参数,例如
bookdown::render_book
。
在我看来 _bookdown.yml
和 bookdown::render_book
等函数的参数之间没有任何一对一的映射,所以 _bookdown.yml
似乎没有只是记录函数调用选项的不同方式。
我们可以在源代码中看到 `_bookdown.yml' 控制了一些 config options 但不是全部。
所以 - 换个说法 - 为什么 _bookdown.yml
是一个单独的配置文件,而 where/what 是它应该包含的内容的定义?
举个有代表性的例子,有一个chapter_name
选项可以用在_bookdown.yml
中。我有以下问题:
- 我们怎么知道这是一个选项,因为它没有在文档中引用 here or even in the example here。
- 一旦我们知道它存在,我怎么知道它有什么作用?所有这些选项是否都传递给其他包(例如 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
变量随后出现在代码库的多个部分。
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。