为何R Markdown代码块字体变更?如何改回默认等宽字体
问题成因
- 输出格式默认样式覆盖:PDF输出时Pandoc调用的LaTeX模板若引入全局衬线字体包(如
times),会默认覆盖代码块的等宽字体配置;HTML/Word输出时,若使用了带全局字体设置的样式表、Word模板,未单独为代码块指定等宽字体,也会触发该问题。 - 系统缺失默认等宽字体:knitr默认调用的
monospace通用字体族在当前系统中无对应匹配字体,系统会自动降级fallback到默认的Times New Roman衬线字体。 - R Studio全局配置改动:R Studio全局选项中的Markdown输出代码块字体设置被修改,该配置优先级高于单篇Rmd的默认代码块参数。
修复方案
通用配置(全输出格式适用)
在Rmd文件开头的setup代码块中添加如下配置,指定代码块优先使用等宽字体族:
knitr::opts_chunk$set( dev.args = list(family = "mono") )
针对PDF输出
在YAML头部添加LaTeX字体配置,显式指定代码块使用的等宽字体,注意需要使用xelatex/lualatex作为渲染引擎:
--- title: "你的文档标题" output: pdf_document: latex_engine: xelatex header-includes: - \usepackage{fontspec} - \setmonofont{Consolas} # 字体可按需替换:Mac用Menlo,Linux用Ubuntu Mono,只要是系统已安装的等宽字体即可 ---
针对HTML输出
在YAML中直接指定等宽字体参数即可:
--- title: "你的文档标题" output: html_document: monofont: "Consolas" ---
若仍未生效,可在Rmd任意位置添加内嵌CSS样式强制覆盖:
code, pre { font-family: Consolas, Menlo, Monaco, "Courier New", monospace !important; }
针对Word输出
- 手动新建一个空白Word文档,找到样式面板中的「源代码」样式,修改其字体为你需要的等宽字体,保存为
word_template.docx - 在YAML中引用该模板文件:
--- title: "你的文档标题" output: word_document: reference_docx: "word_template.docx" ---
内容的提问来源于stack exchange,提问作者hiimvalk
相关产品推荐
相关产品推荐

