You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

阿里云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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:35:27