如何在不修改.Rmd文件的情况下渲染bookdown文档?
解决bookdown渲染时修改源.Rmd文件的问题
我来帮你搞定这个头疼的问题——bookdown渲染时修改所有源.Rmd文件,导致每次都要重新加载,确实挺烦人的。这通常是因为bookdown默认会在渲染过程中更新源文件里的缓存状态、自动生成的交叉引用标记之类的元数据,不过咱们可以通过几个配置调整来彻底避免这种情况:
方法1:给渲染命令加clean = TRUE参数
直接在render_book里加上clean = TRUE,它会在渲染完成后清理临时文件,同时跳过对源.Rmd文件的修改:
Rscript -e "bookdown::render_book('index.Rmd', 'bookdown::gitbook', clean = TRUE)"
方法2:把缓存文件和源文件分开存放
从你的_common.R里看到代码块都开了cache = TRUE,默认情况下缓存相关的信息可能会写到源文件里。咱们在_bookdown.yml里加个缓存目录配置,让缓存文件单独待在一个文件夹里,就不会碰源文件了:
cache.path: "_cache/" # 把缓存都扔到这个目录里,和源文件彻底隔离
方法3:先修复_common.R里的配置错误
哎,我注意到你的_common.R里有一行明显写错了:
printf ", collapse = TRUE, cache = TRUE, out.width = \"70%\", fig.align = 'left', fig.width = 6, fig.asp = 0.618, # 1 / phi fig.show = \"hold\" )
这应该是knitr::opts_chunk$set()的写法,漏了函数名和开头的括号!正确的写法应该是这样:
knitr::opts_chunk$set( collapse = TRUE, cache = TRUE, out.width = "70%", fig.align = 'left', fig.width = 6, fig.asp = 0.618, # 1 / phi fig.show = "hold" )
这个错误可能导致knitr处理代码块时出异常,进而触发源文件的修改,先把这个改了,说不定问题就解决了大半。
方法4:用预览模式只渲染需要的章节
如果你只是想预览部分内容,不想全量渲染触发文件修改,可以用preview = TRUE指定要渲染的章节,这样只会处理指定的文件,不会动其他.Rmd:
Rscript -e "bookdown::render_book('index.Rmd', 'bookdown::gitbook', preview = TRUE, chapters = c(1,2))"
另外,你的_bookdown.yml里设了new_session: yes,这个会让每个章节在新的R会话里渲染,虽然隔离性好,但也可能增加文件修改的概率。如果你的章节之间没有严格的环境隔离需求,可以试试改成new_session: no,看看能不能缓解问题。
内容的提问来源于stack exchange,提问作者Bob Carpenter
相关产品推荐
相关产品推荐

