Rmd可正常渲染HTML,转PDF出现LaTeX图形格式错误求助
解决R Markdown转PDF时图片带
?raw=true的LaTeX编译错误 我来帮你搞定这个头疼的问题——你遇到的情况是R Markdown转HTML完全正常,但生成PDF时就弹出LaTeX错误,提示Unknown graphics extension: .png?raw=true,对吧?
问题根源
本质原因是LaTeX的\includegraphics命令不认带查询参数的文件名,而你的Rmd转成LaTeX后,图片链接里的?raw=true被原封不动保留了:
\begin{figure} \centering \includegraphics[width=4.16667in]{pics/myimage.png?raw=true} \caption{Some text here.} \end{figure}
这个参数是GitHub显示图片必需的,但LaTeX完全不买账。另外你提到的keep_md: yes确实有可能加剧这个问题——因为保留的MD文件会带着?raw=true,后续转LaTeX时就直接用了这个有问题的链接。
靠谱的解决方案
1. 用条件渲染自动适配HTML和PDF
既然HTML需要?raw=true、PDF不需要,我们让knitr根据输出格式自动切换图片链接就行。把你原来的图片引用换成下面这个代码块:
```{r echo=FALSE, results='asis'} if (knitr::is_html_output()) { # HTML输出保留?raw=true cat('{width=400px}') } else { # PDF输出自动去掉参数 cat('{width=400px}') }
这样编译HTML时会生成带参数的链接,满足GitHub需求;编译PDF时则用纯净的图片路径,LaTeX就能正常识别了。 #### 2. 调整`keep_md`设置(可选排查) 如果怀疑`keep_md: yes`是诱因,可以先把这个设置关掉试试: ```yaml html_document: keep_md: no # 暂时关闭测试 number_sections: yes toc: yes toc_depth: 2
要是关闭后PDF能正常生成,说明确实是保留的MD文件带着有问题的链接导致的,这时候优先用上面的条件渲染方案,既能保留keep_md又能解决问题。
3. 临时应急:手动修改LaTeX文件
如果赶时间要出PDF,也可以在knitr生成test.tex后,手动把所有图片链接里的?raw=true删掉,再编译成PDF。不过这只是临时办法,长期用还是推荐条件渲染。
验证效果
把条件渲染代码替换到你的示例Rmd里,重新编译:
- HTML输出会保留
?raw=true,GitHub上能正常显示图片 - PDF输出会自动移除参数,LaTeX编译不会再报错
内容的提问来源于stack exchange,提问作者Christoph




