![在 tikzDevice-plots (.Rnw) 中设置字体的位置](https://linux22.com/image/326207/%E5%9C%A8%20tikzDevice-plots%20(.Rnw)%20%E4%B8%AD%E8%AE%BE%E7%BD%AE%E5%AD%97%E4%BD%93%E7%9A%84%E4%BD%8D%E7%BD%AE.png)
我正在尝试在 KOMA-book 中将 R 制作的图 (ggplot2) 中的文本使用无衬线字体。遗憾的是,我对管理字体及其系列不太有经验。
为了保持一致性,我想使用 TikzDevice。以下示例演示了该问题。
定义字体应使用 sans 的最佳位置在哪里?我在示例中的尝试不起作用。我使用 XeLatex。
\documentclass{scrbook}
\begin{document}
<<settings, echo=FALSE>>=
library(knitr)
library(ggplot2)
opts_chunk$set(dev="tikz")
opts_chunk$set(fig.width=4.5)
opts_chunk$set(fig.height=3)
dev.args=list(family="sans")
@
\chapter{The first chapter}
This text should use the font defined in scrbook (serif).
<<, fig.cap="Here is the first figure", echo=FALSE>>=
p <- ggplot()
p <- p + geom_abline(intercept=(0), slope=1, linetype="dashed")
p <- p + xlim(0, 10)
p <- p + ylim(0, 10)
p <- p + xlab("This should be serif")
p <- p + ylab("Also serif")
print(p)
@
\chapter{The second chapter}
This text should also be serif. But the second plot should have text sans serif.
<<, fig.cap="Here is the second figure", echo=FALSE>>=
p <- ggplot()
p <- p + geom_abline(intercept=(0), slope=1, linetype="dashed")
p <- p + xlim(0, 10)
p <- p + ylim(0, 10)
p <- p + xlab("This should be sans")
p <- p + ylab("Also sans")
p <- p + theme(text=element_text(family="sans"))
print(p)
@
This text should be serif.
\end{document}
答案1
tikzDevice 使用默认文档字体。因此,如果您的文档是无衬线字体,请在文档的序言中输入
\renewcommand{\familydefault}{\sfdefault}
并且文本和 tikz 标签都将是无衬线字体。
但是如果你想要使用衬线字体的文本,但 tikz 标签使用无衬线字体(我不推荐这样做)怎么办?好吧,你可以在前言中设置无衬线字体,然后在之后重新定义它,这样就可以欺骗 tikzDevice 了\begin{document}
:
\renewcommand{\familydefault}{\sfdefault}
\begin{document}
\renewcommand{\familydefault}{\rmdefault}\normalfont
由于 tikzDevice 仅读取文档的序言,因此它将使用无衬线字体,而其余部分将使用衬线字体。
答案2
我建议使用floatrow
包,通过它您可以全局和本地设置字体首选项。
在序言中添加\usepackage{floatrow}
,您可以向其传递要在整个文档中使用的字体的默认选项。然后,如果您想更改图形字体的选项,您可以随时调用,\floatsetup{font={sf}}
它会进行相应调整。
但请注意,如果您将图形放在浮点数之外,这些设置将不适用于它们。