我们在大学里经常使用
bookdown
来编写课程材料。我们在“_bookdown.yaml”中使用 rmd_files:
来指定要包含在书中的 rmd 文件。我们的预订项目往往会变得相当漫长和复杂,_bookdown.yaml
最终看起来像这样:
rmd_files:
- index.Rmd
- folder1/subfolder1/file1.Rmd
- folder1/subfolder1/file2.Rmd
- folder1/subfolder2/file3.Rmd
- folder2/subfolder3/file4.Rmd
...
使用
_bookdown.yaml
指定文件有以下限制:
folder1
)因此,我们已转向在单独的 yaml 文件中描述文件结构,并根据我们的需求使用辅助函数来更新
_bookdown.yaml
。这个方法看起来有点笨拙,如果我们可以将文件向量传递给 render_book()
而不是在 _bookdown.yaml
中指定 rmd 文件,那么它会更优雅。这可能吗? 注意:使用
render_book(..., preview = TRUE)
不是解决方案,我们想使用一组特定的 rmd 文件重新渲染这本书。
_bookdown.yml
中使用此行来包含来自任何地方的任何文件(注意:括号、逗号和缩进!)
rmd_files: [
index.Rmd,
folder1/subfolder1/file1.Rmd,
folder1/subfolder1/file2.Rmd,
folder1/subfolder2/file3.Rmd,
older2/subfolder3/file4.Rmd
]
_bookdown.yml
加载到内存中,更新 rmd_files 列表,然后重新写入。
degBDYML <- yaml.load_file('_bookdown.yml')
rmd_files_list <- c('index.Rmd',
'something.md',
'else.md',
paste0('folder1/', list.files(path = '.folder1')))
degBDYML$rmd_files <- rmd_files_list
writeLines(as.yaml(degBDYML), con = '_bookdown.yml')