如何让RMarkdown避免缩短路径或使用相对路径解决LaTeX编译报错
故障根因
Windows系统会自动对长度超标的路径生成8.3格式的短路径(示例中的LONGUS~1),而LaTeX的graphicx包无法识别带波浪号的短路径格式,因此编译报错。单独运行Rmd时未触发报错是因为默认工作目录不会使用带短路径的临时目录。
修复方案
方案1:修正Shiny端render调用配置(优先选择,无需修改Rmd文件)
修改downloadHandler中的代码,先将临时目录转换为标准长路径,同时强制knitr生成相对路径的图片引用:
output$downBtn <- downloadHandler( filename = "full_report.pdf", content = function(file) { # 第一步:将临时目录转换为Windows标准长路径,消除短路径格式 temp_dir <- normalizePath(tempdir(), winslash = "/", mustWork = TRUE) report_path <- file.path(temp_dir, "test_report.Rmd") file.copy("test_report.Rmd", report_path, overwrite = TRUE) rmarkdown::render( input = report_path, output_file = file, params = list(input = input), envir = new.env(parent = globalenv()), intermediates_dir = temp_dir, knit_root_dir = temp_dir, # 强制生成相对路径的图片目录 output_options = list(fig_path = "figure/") ) } )
方案2:Rmd端全局配置(适用于需要统一管控路径的场景)
在test_report.Rmd的首个代码块中添加knitr全局配置,强制所有图片使用相对路径:
```{r setup, include=FALSE} knitr::opts_chunk$set(fig.path = "./figure/") # 禁止生成绝对路径的图片引用 knitr::opts_knit$set(base.url = NULL, base.dir = getwd())
两种方案二选一即可,无需同时配置。 内容的提问来源于stack exchange,提问作者NickCHK
相关产品推荐
相关产品推荐

