Knitr 无法编译 PDF:“工具错误::file_path_as_absolute(output_file)”

Posted

技术标签:

【中文标题】Knitr 无法编译 PDF:“工具错误::file_path_as_absolute(output_file)”【英文标题】:Knitr wont compile PDF: "Error in tools::file_path_as_absolute(output_file)" 【发布时间】:2018-06-21 19:00:34 【问题描述】:

我在 Markdown 中创建了一个报告,并使用函数render() 将代码编译成 PDF。一个月前它运行良好,但是当我现在运行代码时,它给了我一个错误:

Latexmk:这是 Latexmk,John Collins,2016 年 4 月 22 日,版本:4.45。 创建的输出:output/Medborgerskabstabeller99.pdf

工具错误::file_path_as_absolute(output_file): 文件“输出/Medborgerskabstabeller99.pdf”不存在

我用来创建 PDF 的渲染命令如下所示:

outfile <- file.path("output",paste0("Medborgerskabstabeller99"))
render(input = "Medborgerskabstabeller.Rmd",
       encoding = "UTF-8",
       output_file = paste0(outfile,".pdf"))

首先,代码运行时没有出现之前的“Latexmk”-消息。

其次,我不知道为什么它说“Medborgerskabstabeller99.pdf”不存在,而上面说它只是创建了文件。

任何关于该问题的建议将不胜感激!

【问题讨论】:

Latexmk 消息不是问题。您的output/ 目录是否存在并且您可以打开pdf 文件吗? 感谢您的评论@Phil!当我输入dir.exists("output") R 返回TRUE,所以我猜我的输出/目录确实存在。同时我发现render() 确实会创建一个PDF 文件,如果我删除output_file= 参数。它解决了我的问题,但我仍然不知道之前出了什么问题。 很高兴你把它整理好了。 【参考方案1】:

似乎更好的解决方案是使用 tinytex。

install.packages('tinytex')
tinytex::install_tinytex()

如果您必须使用 MikTex 并且已经安装,请打开 MikTex 控制台并将缺少的包设置更改为:

Always install missing packages on the fly

如果您还没有安装 MikTex,那么在安装时请务必选择:

Install missing packages: Yes

最初安装时我选择了Ask me first,但它会失败。我已经尝试过更改 MikTex 的设置,也尝试将其卸载,然后选择更轻量级的 tinytex 来满足我的需求。

底部附近有解决方案的原始线程: https://github.com/rstudio/rmarkdown/issues/1285

【讨论】:

允许 miktex 即时安装软件包有帮助。请注意,如果通过互联网连接互联网,请确保在 miktex package manager(admin) 中设置代理 更多直接链接到我认为的near the bottom。【参考方案2】:

我有类似的问题。在网上搜索后,在community r studio找到了解决办法

貌似这个bug和1.9版本的rmarkdown有关,所以解决方法是回到1.8版本

install.packages("devtools")
library(devtools)
install_version("rmarkdown",version=1.8)

重新安装后,当您再次尝试编织时,可能会要求您安装一些来自 Miktex 的软件包。如果您有任何问题,请检查是否有合适的镜子。希望这会有所帮助。

【讨论】:

我遇到了同样的问题,@Juan 的解决方案似乎已经解决了。 仅供参考,此解决方案仍然有效,而 1.10.2 版则不行。 伙计,我在用工作中的电脑为老板做报告时遇到了很多问题,这完全解决了。天哪,我感激不尽。 我遇到了同样的问题,按照您上面提供的说明,并在回滚到 'rmarkdown' v1.8 后安装了另外 10 个与 TeX 相关的包。现在效果非常好 - 非常感谢!【参考方案3】:

与此同时,该问题似乎已在开发版1.10.11中得到修复:

devtools::install_github('rstudio/rmarkdown')

【讨论】:

我试过这个方案,包升级到1.10.2,还是不行。而@jaySf 的解决方案通过降级到 1.8 来工作。 @HappyCoding 你说对了一半。我只好自己再做一次。起初它确实不适用于当前的 rmarkdown 版本 1.10.11。然后我尝试了 juan-acosta 的降级解决方案到 1.8 版。在 PDF 编译过程的开始,MiKTeX 获取了必要的乳胶包,显然当前版本没有管理。然后我更新回最新的 rmarkdown 版本(1.10.11)并且它工作正常。关于Github 的讨论正在进行中,可能会对这个问题有所了解。【参考方案4】:

只是对输出问题的评论,因为我也遇到了这个问题: outfile 必须是绝对路径。我认为dir.exists() 在本地工作目录中查找。在前面使用".\\" 对我有帮助。在您的情况下,它将使用paste0(".\\",outfile,".pdf")

【讨论】:

【参考方案5】:

如果使用 MikTex,您可能会遗漏一些软件包(安装了基本的 Miktex 软件包)。只需编译您的 tex 文件以找出丢失的包(编译错误)并安装它们。然后编织你的 rmd 文档,它应该可以工作了。

【讨论】:

以上是关于Knitr 无法编译 PDF:“工具错误::file_path_as_absolute(output_file)”的主要内容,如果未能解决你的问题,请参考以下文章

使用knitr和Rstudio自动调整LaTeX表格宽度以适合pdf

knitr to PDF 不包装评论

使用knitr和pandoc转换为PDF时markdown中的图形位置

使用 knitr PACKAGE LATEX "titlesec" 从 rstudio 更改 .pdf 文档的章节样式

R,knitr,xtable,交替行颜色

使用 knitr kable 函数对齐列