2016-11-26 31 views
5

Bookdown有許多配置選項,我發現很難理解如何知道選項是否存在,以及這些選項所在的邏輯背後的邏輯。R Bookdown _bookdown.yml

具體來說,我發現很難描述什麼選項樣_bookdown.yml因爲有至少兩個其他的地方,說明選擇:

  • _output.yml
  • 參數調用函數如bookdown::render_book

它不會出現,我認爲有任何形式的_bookdown.yml和論據之間的1對1映射功能,如bookdown::render_book,所以_bookdown.yml似乎並沒有被記錄選項只是一種不同的方式來調用函數。

我們可以在源代碼中看到`_bookdown.yml'正在控制一些config options,但不是全部。

所以 - 重新說明這個問題 - 爲什麼_bookdown.yml是一個單獨的配置文件,以及它應該包含什麼定義?

舉一個具有代表性的例子,有一個chapter_name選項可用於_bookdown.yml。我有以下問題:

  1. 我們怎麼知道這是一個選項,因爲它不是文檔here中,甚至在例如here引用。
  2. 一旦我們知道它存在,我怎麼知道它有什麼影響?是否所有這些選項都傳遞給其他包(例如,pandoc,rmarkdown)?唯一能找到chapter_name參考的地方是在bookdown的CRAN源代碼中,即使在那裏我也無法弄清楚它是如何被使用的。

請注意,作者對_bookdown.yml的討論是here,但我還是不完全明白。

回答

7

以下是調查代碼庫的一些結果:

我們可以看到,在bookdown::render_book的「配置」變量從_bookdown.ymlhere填充,通過一個名爲load_config功能,可以在utils.R找到。

load_config似乎做兩件事情 - 它存儲了一個名爲opts主選項列表,其中config只是其中的一個單元內的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文件加載它。

configbookdown::render_book內作爲參數傳遞很多。舉例來說,我們可以看到它在utils.Rsource_files函數中被使用。

我們得出什麼結論? _bookdown.yml允許您填充bookdown包的全局選項列表。每當你看到config(這是列表)使用的代碼庫是,你可以通過填充_bookdown.yml

我還沒有設法找到了可以在_bookdown.yml而是一個被指定的選項的完整列表設置此列表的元素輕鬆找出什麼是可能的方法是search for examples on Github

+0

最後一個鏈接不起作用。它表示「我們無法執行此搜索 必須包含至少一個用戶,組織或存儲庫」 – Jfly

+0

您可能需要登錄嗎?它在我的工作.... – RobinL

+0

我登錄並得到相同的味精。奇怪.. – Jfly

相關問題