繁体   English   中英

在Windows上的rStudio上编织标记为pdf时出错43

[英]Error 43 while knitting a r markdown to pdf on rStudio on Windows

我在同事的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 < - '\\\\'。 但是当我使用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

这决定了您的操作系统,并在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应该因找到斜线问题而受到赞誉

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM