![如何在 Tikz 和 Rmarkdown 中使用无衬线字体?](https://linux22.com/image/345412/%E5%A6%82%E4%BD%95%E5%9C%A8%20Tikz%20%E5%92%8C%20Rmarkdown%20%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%97%A0%E8%A1%AC%E7%BA%BF%E5%AD%97%E4%BD%93%EF%BC%9F.png)
从 Rmarkdown 编织到 PDF 时,我似乎无法按预期控制图形字体。在研究这个问题时,我发现了许多推荐的解决方案,归结为:
声明一个文档默认值,Tikz 将使用该文档或者
- Tikz 使用您告诉它在文档头中使用的任何内容。
不幸的是,当谈到 RStudio 中的 Rmarkdown knit to pdf 时,这两种说法都不正确。
我创建了类似下面的解决方案,但首先,这里列出了一些不起作用的基于标题的解决方案:
--1--
\renewcommand{\familydefault}{\sfdefault}
--2--
\usepackage[eulergreek]{sansmath}
\usepackage{pgfplots}
\pgfplotsset{
tick label style = {font=\sansmath\sffamily},
every axis label = {font=\sansmath\sffamily},
legend style = {font=\sansmath\sffamily},
label style = {font=\sansmath\sffamily}
}
--3--
\usepackage[eulergreek]{sansmath}
\DeclareFloatFont{henry}{\sffamily\sansmath}
\floatsetup[figure]{font=henry}
--4--
\usepackage{floatrow}
\floatsetup{font={sf}}
谁能解释为什么这些解决方案都不起作用?
以下是我读完这篇漂亮但技术性的文章后整理出来的 MWE 和部分解决方案TikzDevice 指南:
---
output:
pdf_document:
latex_engine: xelatex
header-includes:
- \renewcommand{\familydefault}{\sfdefault}
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE,
dev = 'tikz')
library(tikzDevice)
```
# Tikz might not display sans-serif fonts...
...even when declared as the document default.
```{r }
plot(runif(20))
```
## Sans-serif fonts are tardy to the party
```{r t}
###################
## THIS WORKS!!! ##
###################
options(tikzLatexPackages = c(getOption("tikzLatexPackages"),
c("\\renewcommand{\\familydefault}{\\sfdefault}")))
###################
## see above ##
###################
library(ggplot2)
ggplot(mpg, aes(x=factor(cyl), y=hwy, fill=factor(cyl)))+
geom_violin(scale = "width")
```
我的目的是避免使用像上面提供的那种黑客解决方案。我的问题是:为什么(提供的)许多更方便的解决方案不起作用?
我知道这是一件小事,但希望这可以让其他人免于不必要的挫败。