Rmarkdown文档默认字体及修改方法,含Pandoc字体变量疑问
RMarkdown 字体默认设置与修改指南
嘿,我来帮你把这些RMarkdown字体相关的问题梳理清楚,先看你提供的最小可运行示例:
--- date : 2018-May-26 output: pdf_document title: "Testing Rmarkdown" ---
```{r,comment = NA} Gender <- gl(2,1000,labels = c("Men","Women")) SmokerM <- sample(c("Y","N"),1000,replace = T , prob = c(.3,.7)) SmokerW <- sample(c("Y","N"),1000,replace = T , prob = c(.5,.5)) Smoker <- c(SmokerM,SmokerW) mydata <- data.frame(Gender,Smoker) table(mydata$Gender,mydata$Smoker)
接下来逐个解答你的问题: ## 核心问题:RMarkdown文档的默认字体与修改方式 当RMarkdown输出PDF时,底层依赖LaTeX编译,默认字体是**Computer Modern**系列,不同内容对应不同的字体变量: ### 1. mainfont/sansfont/monofont/mathfont 对应的内容、默认值与修改 这四个变量确实存在,分别对应不同类别的输出内容: - **mainfont**:控制正文、表格、普通段落等衬线文本的字体,默认是 *Computer Modern Roman*。 - **sansfont**:控制无衬线文本(比如部分标题、侧边栏内容,取决于模板)的字体,默认是 *Computer Modern Sans Serif*。 - **monofont**:控制代码块、行内代码的等宽字体,默认是 *Computer Modern Typewriter*。 - **mathfont**:控制文档中数学公式的字体,默认是 *Computer Modern Math*。 #### 修改方法: 要修改这些字体,你需要在YAML头部指定字体名称,同时必须使用支持系统字体的LaTeX引擎(`xelatex` 或 `lualatex`),因为默认的`pdflatex`不支持直接调用系统字体。示例如下: ```yaml --- date : 2018-May-26 output: pdf_document: latex_engine: xelatex # 必须指定这个才能调用系统字体 title: "Testing Rmarkdown" mainfont: "Times New Roman" # 修改正文/表格字体 sansfont: "Arial" # 修改无衬线字体 monofont: "Courier New" # 修改代码字体 mathfont: "Latin Modern Math"# 修改数学公式字体 ---
注意:字体名称必须是你系统中已安装的字体,比如Windows上的"Microsoft YaHei",Mac上的"PingFang SC"等。
你的示例中正文与表格的字体问题
- 正文字体:默认是
mainfont对应的 Computer Modern Roman,表格内容和正文使用的是同一套字体(除非你用LaTeX命令单独修改表格字体)。 - 代码块字体:默认是
monofont对应的 Computer Modern Typewriter。 - 修改方式:直接按照上面的YAML配置修改对应的
mainfont和monofont即可;如果需要单独修改表格字体,可以在R代码块中使用kableExtra等包的LaTeX格式命令,或者在文档中加入LaTeX代码自定义表格环境。
RMarkdown中其他字体内容类别
除了上述四类,还有这些常见的字体场景:
- 标题字体:默认基于
mainfont的加粗/加大字号,你可以通过LaTeX命令(如\renewcommand{\familydefault}{\sfdefault})修改为无衬线或其他字体,部分模板也支持通过YAML变量titlefont配置。 - 脚注字体:默认是缩小版的
mainfont,可以通过LaTeX包(如footmisc)调整字体大小和样式。 - 引用/块引用字体:默认和正文一致,可通过CSS(针对HTML输出)或LaTeX命令(针对PDF输出)修改为斜体或其他字体。
- 自定义环境字体:比如定理、证明等学术文档常用的环境,可通过LaTeX包(如
amsthm)配置字体样式。
内容的提问来源于stack exchange,提问作者user2338823




