2015-12-03 18 views
12

Sto eseguendo un progetto rStudio su Windows di un collega (lavoro su mac, quindi non sono nelle mie acque).Errore 43 durante la lavorazione di un contrassegno r in pdf su rStudio su Windows

Quando ho provato a compilare in pdf in un file .RMD ottengo questo errore:

"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 

ho lasciato i percorsi completi perché ho notato qualcosa di strano nel percorso dell'utente. Le stampe di log questo frammento:

`C:/Users/LUCILL'. 
    <to be read again> 
         \protect 
    <*> C:/Users/LUCILL~ 
         1.RAV 

dove il nome utente è diverso da come dovrebbe essere (lucilla.rava).

Su mac la compilazione non dà errori, quindi il problema non dovrebbe essere nel codice.

Nota: ho creato il progetto sul mio Mac in una cartella condivisa tramite Google Drive.

AGGIORNAMENTO 1: Grazie a @Gnusper abbiamo notato che c'è un errore di separatore di percorso. I percorsi Unix e Windows sono misti. Ho bisogno di un modo per rimuovere la miscelazione.

Nel mio codice ho definito i percorsi con il seguente codice:

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)))) 
    } 

ho fatto qualche test con un nuovo progetto di ricerca sulla macchina Windows con questi risultati:

> file.path('affs', '0sdfsdf') 
[1] "affs/0sdfsdf" 
> .Platform$file.sep 
[1] "/" 
> 

Il percorso il separatore è ancora simile a Unix. Leggendo l'aiuto di file.path ho trovato questo:

file.path(..., fsep = .Platform$file.sep)

[...]

Note

The components are by default separated by/(not) on Windows.

Per qualche ragione la funzione implementa il separatore Unix anche su Windows ... Ho cercato quindi di correre .Platform $ file.sep < - '\\ '. Ma quando uso file.path() ho ancora il separatore '/'. Quindi fsep = .Platform $ file.sep negli argomenti non viene valutato ogni volta che viene eseguita la funzione.

Nel nuovo progetto ho fatto altri esami:

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') 

tutti loro lavorare e creare il file. Ho anche provato dir.create() con varie combinazioni di separatori e tutte funzionano. Sembra che R capisca cosa fare quando si gestiscono i file e si correggono i separatori.

Ma poiché la compilazione del file .rmd viene eseguita da pandoc tramite un comando shell, il mix di separatori non viene risolto e l'errore si verifica.

trovo pensiero molto strano che nel log degli errori, Pandoc viene chiamato con un percorso Unix

C:/Program Files/RStudio/bin/pandoc/pandoc

Come è Pandoc in grado di eseguire e sollevare l'errore ??

Riassumendo Ho bisogno del mio codice per funzionare su entrambe le piattaforme.

UPDATE 2: Ho provato a rimuovere spazi bianchi da tutti i percorsi del mio codice. Inoltre, ho provato a spostare gli script e il file rmd in un nuovo progetto nella cartella locale, per verificare i problemi introdotti dall'avere un progetto condiviso su GoogleDrive. Nessun miglioramento.

AGGIORNAMENTO 3: Ho inviato il problema come problema su https://github.com/rstudio/rmarkdown. Ho implementato il suggerimento che mi è stato fornito (creare l'output prima nella stessa cartella del progetto e quindi spostarlo nella cartella di destinazione effettiva) ma senza fortuna. tuttavia sono abbastanza sicuro ora che il problema è nella creazione e nel recupero dei file temporanei.

Se corro tempdir() in Windows restituisce:

tempdir() 
[1] "C:\\Users\\LUCILL~1.RAV\\AppData\\Local\\Temp\\RtmpUrsOgH" 

con lo strano nome utente accorciare che è riportato anche nel log degli errori.

se corro:

ottengo il percorso corretto.

UPDATE 4: Se può essere utile: ho bisogno di impostare il percorso per pdftext ogni volta che apro il progetto R.

In un file .Rprofile dichiaro:

Sys.setenv(PATH = paste(Sys.getenv("PATH"), "C:\\Program Files\\MiKTeX 2.9\\miktex\\bin\\x64", sep = .Platform$path.sep)) 

UPDATE 5: Strano come sembra, ci siamo trasferiti in un nuovo computer Windows, e il lavoro a maglia questa volta lavorato. Non ho idea del perché ... Ciononostante se qualcuno ha ancora qualche idea sul perché sarebbe apprezzato, dal momento che l'altro computer è la workstation principale del mio collega.

+0

Come detto prima, il problema non è stato risolto. Ho postato il problema come problemi sul github di markdown. Vediamo se riescono a trovare una soluzione. https://github.com/rstudio/rmarkdown/issues/574 – Bakaburg

risposta

8

Tipico problema di Windows. Hai "\" nel percorso, è necessario sostituirlo con il "/"

"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 

a

"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 
+0

Suppongo di sì. Ma quei comandi sono generati dal pacchetto R markdown, non da me! dovrebbe farlo automaticamente? – Bakaburg

+0

dal modo in cui ho bisogno di lavorare su Windows, quindi dovrei fare il contrario che è "C:/Programmi/RStudio/bin/pandoc/pandoc" -> "C: \ Programmi \ RStudio \ bin \ pandoc \ Pandoc". Il comando digitato in modo errato è – Bakaburg

+0

Sì, sarebbe bello se funzionasse automaticamente, forse non funziona perché il progetto è stato originariamente eseguito su un Mac? Se funziona, si prega di indicare la mia risposta come "giusta" in modo che gli altri vedano la tua domanda in risposta e la risposta funzioni :) – Gnusper

3

Questo determina il sistema operativo e lo carica in un modo su Windows e un altro modo ovunque

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 dovrebbe ottenere credito per trovare il problema barra

+0

Non sono sicuro che la barra fosse il problema. leggendo in giro su internet ho trovato che le finestre leggono entrambi i percorsi. Ad ogni modo, sia nel tuo caso che nel caso @gnusper, i tuoi suggerimenti non possono essere messi in azione perché, ancora una volta, non ho il controllo sulla chiamata pandoc !!! è gestito internamente da un framework markdown! – Bakaburg

+0

Come ho scritto nel mio aggiornamento, ho verificato che i miei percorsi non sono il problema.La suddivisione della creazione dei file di output in 2 passaggi (generazione del file e ridenominazione e spostamento nella cartella di destinazione) ha accertato che il problema è nel primo passaggio, in cui i percorsi definiti da me non vengono utilizzati. Anche la riproduzione del problema in un nuovo progetto generato direttamente in Windows non ha risolto il problema. – Bakaburg

Problemi correlati