如何在 Tikz 和 Rmarkdown 中使用无衬线字体?

如何在 Tikz 和 Rmarkdown 中使用无衬线字体?

从 Rmarkdown 编织到 PDF 时,我似乎无法按预期控制图形字体。在研究这个问题时,我发现了许多推荐的解决方案,归结为:

  1. 声明一个文档默认值,Tikz 将使用该文档或者

    1. 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")
```

我的目的是避免使用像上面提供的那种黑客解决方案。我的问题是:为什么(提供的)许多更方便的解决方案不起作用?

我知道这是一件小事,但希望这可以让其他人免于不必要的挫败。

相关内容