我在同事的Windows上运行rStudio项目(我在Mac上工作,所以我不在我的水域)。
当我尝试编译为pdf .rmd文件时,我收到此错误:
"C:/Program Files/RStudio/bin/pandoc/pandoc" +RTS -K512m -RTS Plot_per_DPUO.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash-implicit_figures --output "Grafici Professioni/Periodo apr-14 ott-15 test/DH ALLERGOLOGIA - SAN PAOLO.pdf" --template "C:\Users\lucilla.rava\Documents\R\win-library\3.1\rmarkdown\rmd\latex\default.tex" --highlight-style tango --latex-engine pdflatex --variable "geometry:margin=1in"
pandoc.exe: Could not find image `Grafici%20Professioni\Periodo%20apr-14%20ott-15%20test\DH%20ALLERGOLOGIA%20-%20SAN%20PAOLO_files/figure-latex/set-options-1.pdf', skipping...
pandoc.exe: Error producing PDF from TeX source.
! I can't find file `C:/Users/LUCILL'.
<to be read again>
\protect
<*> C:/Users/LUCILL~
1.RAV/AppData/Local/Temp/tex2pdf.3172/input.tex
Please type another input file name
! Emergency stop.
<to be read again>
\protect
<*> C:/Users/LUCILL~
1.RAV/AppData/Local/Temp/tex2pdf.3172/input.tex
! ==> Fatal error occurred, no output PDF file produced!
Transcript written on C:/Users/LUCILL~1.RAV/AppData/Local/Temp/tex2pdf.3172/tex
put.log.
Show Traceback
Rerun with Debug
Error: pandoc document conversion failed with error 43
我离开了完整的路径,因为我注意到用户路径中有些奇怪的东西。 日志打印此代码段:
`C:/Users/LUCILL'.
<to be read again>
\protect
<*> C:/Users/LUCILL~
1.RAV
用户名与应该如何不同(lucilla.rava)。
在mac上,编译不会出错,所以问题不应该在代码中。
注意:我在Mac上通过谷歌驱动器共享的文件夹中创建了项目。
更新1:感谢@Gnusper,我们注意到路径分隔符错误。 Unix和Windows路径是混合的。我需要一种方法来消除混合。
在我的代码中,我使用以下代码定义了路径:
months.vec <- get.months(unique(Data$Periodo))
months.vec <- format(months.vec, '%b-%y')
if (type == 1) folder.name <- 'Grafici Generali'
else if (type == 2) folder.name <- 'Grafici Professioni'
else if (type == 3) folder.name <- 'Grafici Indicazioni'
folder.path <- file.path(folder.name, sprintf('Periodo %s %s%s', months.vec[1], tail(months.vec, 1), test))
dir.create(folder.path, recursive = T, showWarnings = F)
for (UO in unique(Data$UO)[1:5]) {
print(file.path(folder.path, sprintf('%s.pdf', sub(pattern = "/", replacement = ' ', UO, fixed = T))))
render('Plot per DPUO.Rmd', clean = T, output_file = file.path(folder.path, sprintf('%s.pdf', sub(pattern = "/", replacement = ' ', UO, fixed = T))))
}
我在Windows机器上使用全新的R项目进行了一些测试,结果如下:
> file.path('affs', '0sdfsdf')
[1] "affs/0sdfsdf"
> .Platform$file.sep
[1] "/"
>
路径分隔符仍然像Unix一样。阅读file.path的帮助我发现了这个:
file.path(...,fsep = .Platform $ file.sep)
[...]
请注意
默认情况下,组件在Windows上用/(不)分隔。
由于某种原因,该函数也在Windows上实现了Unix分隔符...... 然后我尝试运行.Platform $ file.sep&lt; - '\\'。但是当我使用file.path()时,我仍然得到'/'分隔符。所以fsep = .Platform $ file.sep在参数中,每次运行函数时都不会对它进行评估。
在新项目中我做了更多测试:
dir.create(file.path('ssdg','fgsfdg'), recursive = T, showWarnings = F)
write(c(1,2,3,4,5), file = 'ssdg/fgsfdg/test.txt')
write(c(1,2,3,4,5), file = 'ssdg\\fgsfdg\\test2.txt')
write(c(1,2,3,4,5), file = 'ssdg/fgsfdg\\test3.txt')
所有这些都可以工作并创建文件。我也尝试了dir.create()与各种分隔符组合,所有这些都有效。看起来像R了解在管理文件和纠正分隔符时要做什么。
但是由于.rmd文件的编译是由pandoc通过shell命令执行的,因此不会修复分隔符的混合并发生错误。
我觉得很奇怪,在错误日志中,用Unix路径调用pandoc
C:/ Program Files / RStudio / bin / pandoc / pandoc
pandoc如何运行并引发错误?
总结我需要我的代码在两个平台上运行。
更新2:我尝试从代码中的每个路径中删除空格。此外,我尝试将脚本和rmd文件移动到本地文件夹中的新项目,以检查在GoogleDrive上创建共享项目所引入的问题。 没有任何改进。
更新3:我在https://github.com/rstudio/rmarkdown上将问题发布为问题。我实现了我在那里给出的建议(首先在与项目相同的文件夹中创建输出,然后将其移动到实际的目标文件夹)但没有运气。但我现在很确定问题在于创建和检索临时文件。
如果我在Windows上运行tempdir(),则返回:
tempdir()
[1] "C:\\Users\\LUCILL~1.RAV\\AppData\\Local\\Temp\\RtmpUrsOgH"
使用奇怪的缩短用户名,也会在错误日志中报告。
如果我跑:
normalizePath(tempdir())
[1] "C:\\Users\\lucilla.rava\\AppData\\Loc
我得到了正确的道路。
更新4: 如果它有用:我每次打开R项目时都需要设置pdftext的路径。
在.Rprofile文件中,我声明:
Sys.setenv(PATH = paste(Sys.getenv("PATH"), "C:\\Program Files\\MiKTeX 2.9\\miktex\\bin\\x64", sep = .Platform$path.sep))
更新5: 看起来很奇怪,我们搬到了新的Windows电脑,这次编织工作了。不知道为什么......不过如果有人仍然知道为什么会受到赞赏,因为另一台计算机是我同事的主要工作站。
答案 0 :(得分:8)
典型的Windows问题。您的路径中有“\”,需要将其替换为“/”
"Grafici Professioni/Periodo apr-14 ott-15 test/DH ALLERGOLOGIA - SAN PAOLO.pdf" --template "C:\Users\lucilla.rava\Documents\R\win-library\3.1\rmarkdown\rmd\latex\default.tex
到
"Grafici Professioni/Periodo apr-14 ott-15 test/DH ALLERGOLOGIA - SAN PAOLO.pdf" --template "C:/Users/lucilla.rava/Documents/R/win-library/3.1/rmarkdown/rmd/latex/default.tex
答案 1 :(得分:3)
这决定了你的操作系统并在Windows上以其他方式加载它
if (Sys.info()['sysname'] == Windows) {
"Grafici Professioni/Periodo apr-14 ott-15 test/DH ALLERGOLOGIA - SAN PAOLO.pdf" --template "C:/Users/lucilla.rava/Documents/R/win-library/3.1/rmarkdown/rmd/latex/default.tex"
} else if (Sys.info()['sysname'] == Darwin){
#Mac filepath
} else {
#Linux filepath
}
@gnusper应该因找到斜杠问题而受到赞誉