cairo_pdf使用Arial,而不是Helvetica

时间:2016-05-16 14:30:31

标签: r ggplot2 knitr cairo

我想在knitr文档中为我的绘图使用一致的字体。现在我正在cairo_pdfpdf之间切换。我在某些情节中使用cairo_pdf的原因是在某些情况下避免使用短划线。但是当我的系统调用cairo_pdf时,我得到一个Arial字体;而pdf使用Helvetica。

\documentclass{article}

\begin{document}

<<>>=
knitr::opts_chunk$set(fig.height = 1, out.height = "1in", fig.width=1, out.width="1in")
@

<<pdf, dev='pdf'>>=
library(ggplot2)
qplot(x = 1, y = 1, geom = "blank") + 
  xlab("RQac")
@

<<cairo, dev='cairo_pdf'>>=
qplot(x = 1, y = 1, geom = "blank") + 
  xlab("RQac")
@

\end{document}

enter image description here

理想情况下,我想选择字体(而不仅仅是Arial或Helvetica)。但是,我无法安装extrafonts包。

install.packages("extrafonts")

导致安装Rttf2pt1的提示无法编译。

Warning: running command 'make --no-print-directory -f "Makefile.win"' had status 2
ERROR: compilation failed for package 'Rttf2pt1'
* removing 'C:/R/R-3.3.0/library/Rttf2pt1'

如何在每个块中使用Arial字体?我如何在每个块中使用Helvetica?

1 个答案:

答案 0 :(得分:2)

我的临时解决方案是使用showtext包。缺点是我必须通过主题指定面部。但是,通过使用默认主题可以减轻这种缺点。当我在LaTeX中使用\usepackage{helvet}时,此解决方案还确保我使用相同的族作为正文,而不是(非常接近)克隆。

使用tikz似乎是一个合理的解决方案,但是非常笨拙。 (几乎所有的图表都需要在knitr之外注意。)

\documentclass[a4paper,10pt]{article}

\begin{document}

<<font_add>>=
library(showtext)
library(sysfonts)
library(knitr)
font.add("helvet", 
         regular = "C:/Program Files/MiKTeX 2.9/fonts/type1/urw/helvetic/uhvr8a.pfb", 
         bold = "C:/Program Files/MiKTeX 2.9/fonts/type1/urw/helvetic/uhvb8a.pfb", 
         italic = "C:/Program Files/MiKTeX 2.9/fonts/type1/urw/helvetic/uhvro8a.pfb")

my_pdf <- function(file, width, height){
  pdf(file = file, width = width, height = height
      # ,family = "helvet"
      )
}
@

<<>>=
knitr::opts_chunk$set(fig.height = 1, out.height = "1in", fig.width=5, out.width="5in")
@

\subsubsection*{No distinction between hyphens and negative symbols}
<<pdf, dev='pdf'>>=
library(ggplot2)
qplot(x = 1, y = 1, geom = "blank") + 
  xlab(paste0("RQac 2012-13", "\U2212", "500"))
@

\subsubsection*{Wrong family, though distinction preserved}
<<cairo, dev='cairo_pdf'>>=
qplot(x = 1, y = 1, geom = "blank") + 
  xlab(paste0("RQac 2012-13", "\U2212", "500"))
@

\subsubsection*{Correct family and distinction, though the base family must be called}
<<my_pdf, dev='my_pdf', fig.ext='pdf', fig.showtext=TRUE>>=
qplot(x = 1, y = 1, geom = "blank") + 
  theme_gray(base_family = "helvet") + 
  xlab(paste0("RQac 2012-13", "\U2212", "500"))
@

\end{document}

original pdf

cairo pdf

showtext