2017-04-05 86 views
2

我已經構建了一個Shiny應用程序,估計模型;我希望用戶能夠在估算完成時以pdf格式下載模型摘要。我在應用中包含一個下載按鈕,如下所示:針織與閃亮:臨時目錄

output$download_estimation = downloadHandler(
    filename = "report.pdf", 
    content = function(file) { 
    withProgress(message = 'Generating...', { 
     rmarkdown::render('report_model.Rmd', output_file = file) 
     }) 
}) 

文件'report_model.Rmd'使用自定義的LaTeX模板。問題是,無論什麼時候我點擊Shiny中的下載按鈕,knitr都會評估這些塊,但是之後我得到了一個LaTeX錯誤「未定義的控制序列」。這是因爲在中\includegraphics{}報告數字的路徑被錯誤地指定:代替使用僅在文件路徑向前斜線,knitr產生向後和向前斜線的組合,例如

\includegraphics{C:\Users\admin\AppData\Local\Temp\Rmksdfj0568\report_model_files/figure-latex/unnamed-chunk-5-1.pdf}. 

當我編織從RStudio完全相同的文件閃亮之外,這種情況不會發生,因爲.tex未在臨時目錄中,而是在該.Rmd被放置在目錄中生成,我得到了正確的路徑

\includegraphics{report_model_files/figure-latex/unnamed-chunk-5-1.pdf}. 

而且,當我不使用自定義模板而是使用Pandoc內置的模板時一切正常。但是,我無法弄清楚爲什麼使用自定義模板會產生差異。有沒有辦法來解決這個問題?

回答

1

解決這個問題,至少在這個特定的情況下,是包括

```{r, echo = FALSE, include = FALSE} 
knitr::opts_knit$set(base.dir = normalizePath(tempdir(), winslash = '/')) 
knitr::opts_chunk$set(fig.path = "figure/") 
``` 

中使用自定義模板「RMD」文件的開頭。這適用於應用程序在本地運行時,解決方案可能無法在部署應用程序時運行。