我在同事的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'.\protect <*> C:/Users/LUCILL~ 1.RAV/AppData/Local/Temp/tex2pdf.3172/input.tex Please type another input file name ! Emergency stop. \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'.\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 < - '\\'.但是当我使用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电脑,这次编织工作了.不知道为什么......不过如果有人仍然知道为什么会受到赞赏,因为另一台计算机是我同事的主要工作站.
典型的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