Blogdown问题:R绘图被最新渲染文档覆盖
解决Blogdown多Rmd文档绘图被覆盖的问题
我之前帮同事处理过几乎一模一样的问题,以下几个方案应该能帮你彻底解决:
方案1:自定义每个Rmd的专属依赖目录(最推荐)
问题的核心是所有Rmd默认共用同一个rmarkdown-libs目录,你需要给每个文档指定独立的资源存储路径。在每个foo.Rmd的YAML头部添加以下配置:
output: blogdown::html_page: self_contained: false lib_dir: !expr file.path("static", "lectures", basename(dirname(knitr::current_input())), "rmarkdown-libs")
这段代码会自动识别当前Rmd所在的bar目录(00、01等),生成对应的专属资源目录。比如content/lectures/00/foo.Rmd的绘图和依赖文件会被存到static/lectures/00/rmarkdown-libs,完全避免不同文档间的覆盖冲突。
方案2:手动指定knitr的绘图输出路径
如果方案1没生效,你可以直接控制knitr的图保存路径。在每个Rmd的开头添加这段R代码:
knitr::opts_chunk$set( fig.path = file.path("static", "lectures", basename(dirname(knitr::current_input())), "figure-html5/"), fig.retina = 1 # 可选,保证绘图清晰度 )
这样每个文档的绘图会直接存到对应bar目录下的专属文件夹里,彻底和其他文档的资源隔离开。
方案3:适配Hugo Pretty URL的路径解析
因为你开启了Hugo的"pretty" URL,生成的页面会是foo/index.html而非foo.html,这可能导致相对路径解析出错。你可以尝试将lib_dir设置为绝对路径格式,比如针对00目录的Rmd:
output: blogdown::html_page: lib_dir: "/static/lectures/00/rmarkdown-libs"
不过更推荐用方案1的动态路径方式,不用手动修改每个文档的配置。
方案4:更新依赖包到最新版本
旧版本的blogdown或rmarkdown可能存在路径处理的bug,先尝试更新到最新版:
update.packages(c("blogdown", "rmarkdown"), dependencies = TRUE)
更新后重新编织文档,有时候这类路径冲突问题会自动修复。
内容的提问来源于stack exchange,提问作者Milan Valášek
相关产品推荐
相关产品推荐

