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

为何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输出

  1. 手动新建一个空白Word文档,找到样式面板中的「源代码」样式,修改其字体为你需要的等宽字体,保存为word_template.docx
  2. 在YAML中引用该模板文件:
---
title: "你的文档标题"
output: 
  word_document:
    reference_docx: "word_template.docx"
---

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:24:01