如何在R Markdown中禁用lmodern包以解决西里尔字母PDF编译失败问题?
如何在R Markdown中正确禁用lmodern包以支持西里尔符号?
首先明确:你完全可以禁用lmodern包,但之前用的extra_dependencies: lmodern: NULL方法不对——R Markdown的pdf_document默认模板会自动加载lmodern,这个配置项没办法直接覆盖默认行为。下面给你一套可行的解决方案,同时解决你遇到的其他编译报错:
一、修正YAML配置(核心步骤)
把你的YAML头部改成下面这样,我会逐一解释关键调整:
--- title: "«Ластовецкий Дмитрий_ДКР2_ПСА-3" author: "Ластовецкий Дмитрий" date: "08 06 2021" output: pdf_document: latex_engine: xelatex # 重点:换用xelatex引擎,对西里尔字符支持更友好 keep_tex: true # 保留生成的TeX文件,方便后续排查问题 header-includes: - \usepackage[T2A]{fontenc} - \usepackage[utf8]{inputenc} - \usepackage[russian]{babel} # 明确指定俄语支持,解决babel报错 - \renewcommand{\familydefault}{\rmdefault} # 强制恢复默认的Computer Modern字体,替代lmodern lang: ru-RU ---
关键调整说明:
latex_engine: xelatex:pdflatex对非拉丁字符的支持需要额外配置编码,而xelatex原生支持UTF-8,能大幅减少西里尔字符的字体问题。\renewcommand{\familydefault}{\rmdefault}:这才是真正禁用lmodern的核心——它会把默认字体从lmodern(lmr)切换回TeX原生的Computer Modern(cmr),彻底避开lmodern和西里尔字符的兼容性问题。\usepackage[russian]{babel}:你之前的报错里提到babel识别不了russian选项,明确添加这个包能直接解决该问题。
二、安装缺失的TeX依赖包
从你的报错信息看,你的TinyTeX缺少两个关键包:
cm-super:提供支持西里尔字符的Computer Modern字体文件(就是报错里找不到的larm1000.mf这类文件)babel-russian:babel的俄语语言支持包
打开R控制台,运行以下命令安装:
tinytex::tlmgr_install(c("cm-super", "babel-russian"))
三、验证编译
完成上述两步后,重新编译你的R Markdown文档,应该就能顺利生成包含西里尔符号的PDF了。
如果还是遇到问题,打开keep_tex: true生成的.tex文件,检查字体和babel的配置是否正确加载,也能帮你快速定位剩余问题。
内容的提问来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

