如何解决R Markdown执行knit时出现File not found in resource path报错
R Markdown knit报错pandoc error 99修复方案
核心问题根因排查
你遇到的报错本质是pandoc在编译阶段无法找到某一个引用的外部资源,除了\includegraphics引用的图片外,优先排查以下几个容易忽略的点:
YAML格式错误
你当前的YAML结构缩进不符合规范,pdf_document的子参数没有缩进,导致pandoc无法正确识别in_header字段的配置,找不到指定的preamble.tex文件:
# 错误写法 output: pdf_document fig_caption: yes includes: in_header: preamble.tex # 正确写法 output: pdf_document: fig_caption: yes fig_height: 5 fig_width: 8 includes: in_header: preamble.tex keep_tex: yes citation_package: biblatex
所有属于pdf_output的参数都要缩进在pdf_document下,in_header要缩进在includes下,否则配置不生效。
其他外部资源校验
- 确认
preamble.tex文件和当前Rmd文件存放在同一目录,如果放在子文件夹需要填写完整相对路径,比如in_header: assets/preamble.tex - 你配置了
biblatex但bibliography字段为空,header-includes里的\addbibresource{\jobname.bib}需要确认编译时生成的bib文件可被正常读取,如果有外部参考文献文件,需要把完整路径填写到bibliography字段中 - R代码块末尾导出的
laterUse文件,确认R编译时的工作目录和Rmd文件目录一致,有写入权限
- 确认
精准定位方法
你已经开启了keep_tex: yes配置,编译失败后找到同目录下生成的.tex文件,直接用LaTeX编辑器(如TeXstudio)打开手动编译,LaTeX会明确提示哪一行、哪个资源文件找不到,比pandoc的模糊报错定位效率高很多。
通用修复方案
如果确认是路径匹配问题,可以做以下调整:
- 在Rmd开头新增一个代码块,强制将工作目录设置为Rmd文件所在目录:
```{r, include=FALSE} knitr::opts_knit$set(root.dir = here::here())
- 所有引用的外部资源(tex头文件、图片、参考文献等)统一放在和Rmd同目录,或者同目录的子文件夹下,避免使用跨上级目录的相对路径(如
../xxx.tex) - 如果是tikz/ pgfplots包依赖问题,可以在
pdf_document下新增latex_engine: xelatex配置,换用兼容性更好的LaTeX引擎编译。
内容的提问来源于stack exchange,提问作者jck21
相关产品推荐
相关产品推荐

