阿里云Linux3下RShiny无法生成PDF:pdflatex命令未找到
RShiny无法生成PDF但控制台正常的问题解决
问题现象
- 在R控制台执行
rmarkdown::render("xxx.Rmd")可正常生成PDF,但在RShiny应用中无法生成下载PDF,Word和HTML格式功能正常。 - 测试官方示例后,同样出现PDF生成失败的情况,报错信息如下:
[WARNING] (pagebreak.lua) requires at least Pandoc 2.1. Lua Filter skipped. [WARNING] (latex-div.lua) requires at least Pandoc 2.1. Lua Filter skipped. Warning in system2(..., stdout = if (use_file_stdout()) f1 else FALSE, stderr = f2) : error in running command ! sh: pdflatex: command not found Warning: Error in : LaTeX failed to compile report.tex. See https://yihui.org/tinytex/r/#debugging for debugging tips. See report.log for more info. 1: runApp
系统环境
> sessionInfo() > R version 4.2.1 (2022-06-23) > Platform: x86_64-redhat-linux-gnu (64-bit) > Running under: Alibaba Cloud Linux 3 (Soaring Falcon) > > Matrix products: default > BLAS/LAPACK: /usr/lib64/libopenblaso-r0.3.12.so > > locale: > [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C > [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 > [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 > [7] LC_PAPER=en_US.UTF-8 LC_NAME=C > [9] LC_ADDRESS=C LC_TELEPHONE=C > [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C > > attached base packages: > [1] stats graphics grDevices utils datasets methods base > > loaded via a namespace (and not attached): > [1] compiler_4.2.1
已更新TexLive至最新版本,同时更新了rmarkdown和tinytex包,怀疑是pdflatex路径配置问题,但不清楚具体配置方法。
解决步骤
1. 确认pdflatex的绝对路径
在R控制台执行以下命令,获取pdflatex的实际安装路径:
Sys.which("pdflatex")
示例返回结果:/usr/local/texlive/2024/bin/x86_64-linux/pdflatex
2. 在Shiny应用中配置PATH环境变量
在Shiny的server函数开头,添加代码将pdflatex所在目录加入环境变量PATH:
# 替换为你实际的pdflatex所在目录 Sys.setenv(PATH = paste("/usr/local/texlive/2024/bin/x86_64-linux", Sys.getenv("PATH"), sep = ":"))
如果使用tinytex管理TeX环境,可直接调用tinytex的路径:
library(tinytex) Sys.setenv(PATH = paste(file.path(tinytex_root(), "bin", "x86_64-linux"), Sys.getenv("PATH"), sep = ":"))
3. 验证Shiny进程的环境变量
可以在Shiny应用中添加代码,查看当前运行环境的PATH是否包含TeX目录:
# server函数中添加 output$current_path <- renderPrint({ Sys.getenv("PATH") }) # UI函数中添加 verbatimTextOutput("current_path")
运行应用后,检查输出的PATH是否包含pdflatex所在目录。
4. 确保Shiny进程有TeX目录权限
如果路径配置正确但仍报错,检查TexLive安装目录的权限,确保Shiny运行用户(如shiny用户)有访问权限:
sudo chmod -R 755 /usr/local/texlive/2024
内容的提问来源于stack exchange,提问作者zy0426
相关产品推荐
相关产品推荐

