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环境下会触发错误 - 可临时逐段注释子文档内容,定位到具体触发错误的代码块
- 是否存在手动嵌入的LaTeX代码调用了
修复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宏包实现:- 在
header-includes中添加\usepackage{dejavu} - 替换所有
\setmainfont{DejaVu Sans}调用,若要将无衬线字体设为默认,添加\renewcommand{\familydefault}{\sfdefault};若仅部分内容使用该字体,用\textsf{需要设置字体的文本}包裹
- 在
排查子文档合并与LuaFilter问题
- 单独编译正常但合并后出错,可能是LuaFilter(
section-bibliographies.lua)在合并文档时生成了含\setmainfont的代码。可临时注释掉pandoc_args中的该filter,重新编译验证是否解决问题 - 检查所有子文档的LaTeX环境,确保没有子文档引入了
fontspec宏包
- 单独编译正常但合并后出错,可能是LuaFilter(
内容的提问来源于stack exchange,提问作者Rheum_Glutinosa
相关产品推荐
相关产品推荐

