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和pandoc转换为PDF时markdown中的图形位置