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

如何从R脚本中程序化调用XeLaTeX编译.tex文件

解决方案:在R脚本中程序化调用XeLaTeX编译TeX文件

首先得说明,tools::texi2pdf()确实不适合你的场景——它主要是用来编译texinfo格式文档的,默认依赖pdfTeX引擎,而且压根没提供指定XeLaTeX的参数,这就是你碰到"The fontspec package requires either XeTeX or LuaTeX"错误的核心原因。下面给你两个靠谱的替代方案:

方法1:直接调用系统XeLaTeX命令

这是最直接的方式,既然你已经在RStudio里验证过XeLaTeX能正常工作,说明系统环境里能找到XeLaTeX的执行路径。

在R脚本里用system()函数直接执行XeLaTeX命令就行:

# 基础单次编译
system("xelatex your_document.tex")

# 非交互模式编译(避免弹窗,适合脚本后台运行)
system("xelatex -interaction=nonstopmode your_document.tex")

# 如果文档有交叉引用、目录等,可能需要多次编译才能正确生成内容
system("xelatex your_document.tex")
system("xelatex your_document.tex")

提示:如果你的TeX文件不在当前工作目录,记得写完整路径,比如"xelatex /Users/xxx/Documents/your_document.tex"。

方法2:使用tinytex包(推荐)

tinytex是专门给R用户设计的TeX工具包,它能自动处理编译依赖,还支持指定编译引擎,比手动调用系统命令省心多了。

先确保你装了tinytex包:

install.packages("tinytex")
# 如果你还没配置好TeX环境,这一步会自动安装轻量版TeX(可选,因为你已经有可用的XeLaTeX了)
tinytex::install_tinytex()

然后用latexmk函数指定XeLaTeX引擎编译:

tinytex::latexmk(
  file = "your_document.tex",
  engine = "xelatex",
  options = "-interaction=nonstopmode"  # 可选,开启非交互模式
)

latexmk会自动判断文档是否需要多次编译(比如处理交叉引用、目录),不用你手动重复执行命令,特别适合脚本化的自动化流程。

验证编译结果

不管用哪种方法,编译完成后你可以用下面的代码检查PDF是否生成成功:

if (file.exists("your_document.pdf")) {
  cat("编译成功!PDF已生成。\n")
} else {
  cat("编译失败,请检查TeX文件或XeLaTeX配置。\n")
}

内容的提问来源于stack exchange,提问作者hangler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:07:30