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

RMarkdown编译PDF报错:Undefined control sequence,求解决方案

解决RMarkdown+pdflatex编译时\setmainfont未定义错误

问题描述

使用RMarkdown撰写博士论文,此前编译完全正常,添加几段文本及一处参考文献后(删除该参考文献仍报错)出现如下LaTeX错误:

! Undefined control sequence. ...9}\selectfont {\global
\setmainfont
{DejaVu Sans}{}} l.3593 ...nt{\global\setmainfont{DejaVu Sans}{}}}}
& \multicolumn{3}{!{\colo...

相关情况:

  • 文档采用多子文档结构,已定位到某一子文档引发错误,但报错行指向另一子文档
  • 所有子文档单独编译均无问题
  • 切换xelatex作为PDF引擎可消除错误,但因部分R包兼容性限制,需继续使用pdflatex
  • 当前YAML配置如下:
title: ''
output: 
  pdf_document:
        latex_engine: pdflatex
        number_sections: TRUE
        pandoc_args: ['--lua-filter=section-bibliographies.lua']
always_allow_html: true
geometry: "left = 4cm, right = 2cm, top = 2cm, bottom = 2cm"
fontsize: 11pt
header-includes:
  - \usepackage{float}
  - \usepackage{sectsty}
  - \usepackage{paralist}
  - \usepackage{setspace}\spacing{1.5}
  - \usepackage{fancyhdr}
  - \usepackage{lastpage}
  - \usepackage{dcolumn}
  - \usepackage{natbib}
  - \usepackage[nottoc, numbib]{tocbibind}
  - \usepackage{ragged2e}
  - \usepackage{pdflscape}
  - \usepackage{textgreek}
  - \usepackage{graphicx}
  - \usepackage{titlesec}
classoption: twoside
bibliography: library.bib
reference-section-title: References
section-bibs-level: 2
citation_package: biblatex
csl: journal-of-ecology.csl

解决建议

  • 排查\setmainfont命令来源
    \setmainfont是fontspec宏包的专属命令,仅支持xelatex/lualatex,pdflatex无法识别该命令。需重点检查引发问题的子文档:

    • 是否存在手动嵌入的LaTeX代码调用了\setmainfont
    • R代码生成的内容(如ggplot2图表、knitr表格)是否强制设置了DejaVu Sans字体,这类设置在pdflatex环境下会触发错误
    • 可临时逐段注释子文档内容,定位到具体触发错误的代码块
  • 修复YAML配置冲突

    • 配置中同时启用了natbib和biblatex两个引用包,二者无法兼容。保留citation_package: biblatex的话,删除header-includes中的\usepackage{natbib}
    • csl参数仅适用于pandoc原生引用处理,与biblatex配合会出现冲突。建议注释掉csl: journal-of-ecology.csl,改用biblatex对应的样式,例如在header-includes中添加\usepackage[style=journal-of-ecology]{biblatex}(需确保该样式已安装)
  • 适配pdflatex的字体设置
    如果必须使用DejaVu Sans字体,pdflatex下需通过dejavu宏包实现:

    1. 在header-includes中添加\usepackage{dejavu}
    2. 替换所有\setmainfont{DejaVu Sans}调用,若要将无衬线字体设为默认,添加\renewcommand{\familydefault}{\sfdefault};若仅部分内容使用该字体,用\textsf{需要设置字体的文本}包裹
  • 排查子文档合并与LuaFilter问题

    • 单独编译正常但合并后出错,可能是LuaFilter(section-bibliographies.lua)在合并文档时生成了含\setmainfont的代码。可临时注释掉pandoc_args中的该filter,重新编译验证是否解决问题
    • 检查所有子文档的LaTeX环境,确保没有子文档引入了fontspec宏包

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:31:56