从闪亮的应用程序创建 pdf 时,knitr 找不到 pdflatex

如何解决从闪亮的应用程序创建 pdf 时,knitr 找不到 pdflatex

我正在尝试创建一个闪亮的应用程序,为用户提供从数据库中选择罐头报告的选项,该数据库可响应式呈现,然后为用户提供下载所需报告的 pdf 的选项。我在让 knitr 发现 pdflatex 来制作 pdf 时遇到了麻烦。我最初尝试使用 MikTex,但根据其他帖子的建议删除了 MikTex,而是使用了 tinytex。我遵循了这里的指导:https://yihui.org/tinytex/r/#debugging。闪亮的应用程序工作正常,但是当我单击下载按钮时,R 最初开始编译过程,但是一旦我在对话框按钮启动时单击保存,R 就会抛出此错误(我包括 Yuhui Xie 建议的详细输出 - tinytex 包作者):

processing file: Reports.Rmd
  |..................                                                      |  25%
  ordinary text without R code

  |....................................                                    |  50%
label: unnamed-chunk-1
  |......................................................                  |  75%
  ordinary text without R code

  |........................................................................| 100%
label: unnamed-chunk-2

output file: Reports.knit.md

"C:/Program Files/RStudio/bin/pandoc/pandoc" +RTS -K512m -RTS Reports.utf8.md --to latex --from markdown+autolink_bare_uris+tex_math_single_backslash --output pandoc5ac42d2964ee.tex --lua-filter "C:\Users\SCMCKENZIE\Documents\R\win-library\4.0\rmarkdown\rmarkdown\lua\pagebreak.lua" --lua-filter "C:\Users\SCMCKENZIE\Documents\R\win-library\4.0\rmarkdown\rmarkdown\lua\latex-div.lua" --self-contained --highlight-style tango --pdf-engine xelatex --variable graphics --variable "geometry:margin=1in" 
Warning: Error in : LaTeX Failed to compile C:\Users\SCMCKE~1\AppData\Local\Temp\Rtmp0a6jRk\file5ac45df413ce.tex. See https://yihui.org/tinytex/r/#debugging for debugging tips.
  [No stack trace available]

这是我的SessionInfo()

R version 4.0.2 (2020-06-22)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19041)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  Grdevices utils     datasets  methods   base     

other attached packages:
 [1] plyr_1.8.6           rmarkdown_2.6        knitr_1.29          
 [4] tmap_3.3             rgeos_0.5-3          sp_1.4-1            
 [7] sf_0.9-7             xtable_1.8-4         readr_1.4.0         
[10] shinydashboard_0.7.1 odbc_1.2.3           DBI_1.1.0           
[13] shiny_1.5.0         

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.5         lattice_0.20-41    png_0.1-7          class_7.3-17      
 [5] digest_0.6.25      mime_0.9           R6_2.4.1           evaluate_0.14     
 [9] e1071_1.7-3        pillar_1.4.6       rlang_0.4.7        rstudioapi_0.11   
[13] raster_3.3-13      blob_1.2.1         stringr_1.4.0      htmlwidgets_1.5.1 
[17] bit_1.1-15.2       tinytex_0.29       compiler_4.0.2     httpuv_1.5.4      
[21] xfun_0.20          pkgconfig_2.0.3    tmaptools_3.1-1    base64enc_0.1-3   
[25] htmltools_0.5.0    tidyselect_1.1.0   tibble_3.0.3       codetools_0.2-16  
[29] XML_3.99-0.4       viridisLite_0.3.0  Crayon_1.3.4       dplyr_1.0.0       
[33] later_1.1.0.1      grid_4.0.2         jsonlite_1.7.0     lwgeom_0.2-5      
[37] lifecycle_0.2.0    magrittr_1.5       units_0.6-7        KernSmooth_2.23-17
[41] stringi_1.4.6      promises_1.1.1     leafsync_0.1.0     leaflet_2.0.4.1   
[45] ellipsis_0.3.1     generics_0.0.2     vctrs_0.3.2        RColorBrewer_1.1-2
[49] tools_4.0.2        dichromat_2.0-0    bit64_0.9-7        leafem_0.1.3      
[53] glue_1.4.1         purrr_0.3.4        hms_0.5.3          crosstalk_1.1.0.1 
[57] abind_1.4-5        parallel_4.0.2     fastmap_1.0.1      yaml_2.2.1        
[61] stars_0.5-1        classInt_0.4-3   

我已确保在 RStudio 中选择了全局选项以使用 knitr 和 pdflatex。 Sys.which('pdflatex') 给了我:

         pdflatex 
"C:\\Users\\SCMCKE~1\\AppData\\Roaming\\TinyTeX\\bin\\win32\\pdflatex.exe"  

tinytex::tlmgr_conf() 给了我:

tlmgr conf
=========================== version information ==========================
tlmgr revision 57424 (2021-01-15 03:30:58 +0100)
tlmgr using installation: C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX
TeX Live (https://tug.org/texlive) version 2020
==================== executables found by searching PATH =================
PATH: C:\Users\SCMCKE~1\AppData\Roaming\TinyTeX\tlpkg\tlperl\bin;C:\Users\SCMCKE~1\AppData\Roaming\TinyTeX\bin\win32;C:\rtools40\usr\bin;C:\Program Files\R\R-4.0.3\bin\x64;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files\Microsoft MPI\Bin\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\physx\Common;C:\Program Files (x86)\Microsoft sql Server\150\DTS\Binn\;C:\Program Files (x86)\Microsoft sql Server\150\Tools\Binn\;C:\Program Files\Microsoft sql Server\150\Tools\Binn\;C:\Program Files\Microsoft sql Server\150\DTS\Binn\;C:\Program Files\Microsoft sql Server\Client SDK\ODBC\170\Tools\Binn\;C:\Program Files\Microsoft sql Server\130\Tools\Binn\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Users\SCMCKENZIE\AppData\Roaming\TinyTeX\bin\win32;C:\Users\SCMCKENZIE\AppData\Local\Microsoft\WindowsApps;C:\Users\SCMCKENZIE\AppData\Local\Programs\MiKTeX\miktex\bin\x64
dvipdfmx:  C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/dvipdfmx.EXE
dvips:     C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/dvips.EXE
fmtutil:   C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/fmtutil.EXE
kpsewhich: C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/kpsewhich.EXE
luatex:    C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/luatex.EXE
mktexpk:   C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/mktexpk.EXE
pdftex:    C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/pdftex.EXE
tex:       C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/tex.EXE
tlmgr:     C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/tlmgr.BAT
updmap:    C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/updmap.EXE
xetex:     C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/xetex.EXE
=========================== active config files ==========================
config.ps:        c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist/dvips/config/config.ps
fmtutil.cnf:      c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist/web2c/fmtutil.cnf
mktex.cnf:        c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist/web2c/mktex.cnf
pdftexconfig.tex: c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist/tex/generic/tex-ini-files/pdftexconfig.tex
texmf.cnf:        c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf.cnf
texmf.cnf:        c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist/web2c/texmf.cnf
updmap.cfg:       c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist/web2c/updmap.cfg
============================= font map files =============================
kanjix.map:  c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var/fonts/map/dvipdfmx/updmap/kanjix.map
pdftex.map:  c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var/fonts/map/pdftex/updmap/pdftex.map
ps2pk.map:   c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var/fonts/map/dvips/updmap/ps2pk.map
psfonts.map: c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var/fonts/map/dvips/updmap/psfonts.map
=========================== kpathsea variables ===========================
ENCFONTS=.;{C:/PROGRA~1/R/R-40~1.2/share/texmf,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist}/fonts/enc//
SYSTEXMF=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var;C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local;C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist
TEXCONfig={C:/PROGRA~1/R/R-40~1.2/share/texmf,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist}/dvips//
TEXFONTMAPS=.;{C:/PROGRA~1/R/R-40~1.2/share/texmf,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist}/fonts/map/{kpsewhich,pdftex,dvips,}//
TEXMF={C:/PROGRA~1/R/R-40~1.2/share/texmf,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist}
TEXMFCONfig=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config
TEXMfdbS={!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist}
TEXMFdisT=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist
TEXMFHOME=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local
TEXMFLOCAL=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local
TEXMFMAIN=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist
TEXMFSYSCONfig=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config
TEXMFSYSVAR=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var
TEXMFVAR=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var
TEXPSHEADERS=.;{C:/PROGRA~1/R/R-40~1.2/share/texmf,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist}/{dvips,fonts/{enc,type1,type42,type3}}//
VARTEXFONTS=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var/fonts
WEB2C={C:/PROGRA~1/R/R-40~1.2/share/texmf,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist}/web2c
==== kpathsea variables from environment only (ok if no output here) ====

如果是我的编码问题,下面是一个可重现的 R 脚本:

##Loading Necessary Packages
library(shiny)
library(shinydashboard)
library(rmarkdown)
library(knitr)
library(plyr)

##Getting data for reproducibility
data("iris")
data("airquality")
names(airquality)[5]<-"Species"#To allow for using the same plyr code in server function on both data sets

####Creating Shiny App####
##User Interface
ui<-dashboardPage(
  dashboardHeader(title="FAKE SHINY APPLICATION"),dashboardSidebar(
    sidebarMenu(tabName="REPORTS",menuItem("OPTIONS",tabName = "SOME MENU OPTIONS",radioButtons(inputId = "REPORT",label = "Select Something",choices = c("Iris","AQ")),downloadButton(outputId = "DWNLD","Download Report")
    )
    )
  ),dashboardBody(
    tableOutput(outputId = "TABLE"),plotOutput(outputId = "PLOT")
  )
)


##Server Function##
server<-function(input,output){

##Reactive Plot##  
output$PLOT<-renderPlot({
    RPT<-list(Iris = iris,AQ = airquality)
    DF<-RPT[[input$REPORT]]
    pairs(DF[,c(1:4)])})

##Reactive Table##  
  output$TABLE<-renderTable({
    RPT<-list(Iris = iris,AQ = airquality)
    DF<-RPT[[input$REPORT]]
    rpt_tbl<-ddply(DF,"Species",colwise(mean))
    xtable(rpt_tbl)
  })

##Download As PDF##
  
  output$DWNLD<-downloadHandler(
    filename=paste(input$REPORT,"pdf",sep="."),content<-function(file){
      RPT<-list(iris,airquality)
      names(RPT)<-c("Iris","AQ")
     
      tmp<-file.path(tempdir(),"Reports.Rmd")
      file.copy(paste(getwd(),"Reports.Rmd",sep="/"),tmp,overwrite=TRUE)
      params<-list(DF
      rmarkdown::render(tmp,output_file = file,params = params,envir = new.env(parent = globalenv()
                        ))#End render
    }
  )
}

##Launch Shiny App##
shinyApp(ui=ui,server = server)

这里是保存为 Reports.Rmd 的 Rmarkdown 文档的脚本:

---
title: "FAKE REPORT"
output: pdf_document
params:
  DF: NA
---

Fake Report Output

```{R}
rpt_tbl<-ddply(params$DF,colwise(mean))
xtable(rpt_tbl)
```

More Fake Output

```{R}
pairs(params$DF[,c(1:4)])
```

我已经搜索了 Stack Overflow 和 RStudio 的答案,但没有发现任何似乎是我的问题。我的一部分想知道这是否是平台问题。任何帮助将非常感激。非常感谢。 小心, -肖恩

解决方法

经过大量搜索和测试,我发现问题不在于 tinytex 或 pdflatex,而是我对 rmarkdown::render() 的调用导致我在 GitHub https://github.com/rstudio/shiny/issues/1831 上找到了这个答案。显然,当在 rmarkdown::render() 中调用 downloadHandler() 时,您不应在 render() 中指定 output_file 参数,而是需要在渲染后重命名文件。

这是正确的代码(只需替换我原始问题脚本中对 downloadHandler() 的调用。

  output$DWNLD<-downloadHandler(
    
    filename=paste0(input$REPORT,".pdf"),content<-function(file){
      RPT<-list(iris,airquality)
      names(RPT)<-c("Iris","AQ")
      
      tmp <- file.path(tempdir(),"Reports.Rmd",fsep="\\")
      file.copy("F:/Apps/DNR_TRIS/Shiny_report_scripts/SQL_SCRIPTS/Reports.Rmd",tmp,overwrite = TRUE)
      out<-RPT[[input$REPORT]]
      params<-list(out)
      names(params)<-"DF"
      
      out<-rmarkdown::render(tmp,params = params,envir = new.env(parent = globalenv()
                        ))#End render
      file.rename(out,file)
    }
  )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?