在 R 中使用 LaTeX 字体(Computer Modern)

在 R 中使用 LaTeX 字体(Computer Modern)

我正在寻找使用 LaTeX 字体在 R 中绘制图形的方法。

在 R的文档中pdfFonts,它指出:

还有“ComputerModern”、“ComputerModernItalic”以及从 R 3.1.0 开始的“ArialMT”(Monotype Arial)的映射。

使用时pdf(file = outputFile, width=11.692, height=8.267, family = "ComputerModern")我收到以下错误消息:

Error in pdf(file = outputFile, width = 11.692, height = 8.267, family = "ComputerModern",  : 
  unknown family 'ComputerModern'
Execution halted

我正在使用R version 3.2.2 (2015-08-14)。如何在 R 中使用 LaTeX 字体?最好不要安装额外的库。

答案1

这是我在 Windows 中执行的操作:

  1. 安装该extrafont包。
  2. 安装拉丁现代字体,例如来自http://www.fontsquirrel.com/fonts/latin-modern-roman。注意,你需要安装TTF 版本字体,font_import()无法处理 OTF。
  3. 使用 导入字体font_import()
  4. 使用 加载字体loadfonts(device = "win")。使用device = "Win"参数使 R Studio 中的预览正常工作。
  5. 使用 设置字体系列图形参数par(family = "LM Roman 10")
  6. R Studio 中的绘图功能现已可用,pdf 导出功能也可用(见下图)。

这是您需要使用的完整代码:

    # Run once
    install.packages("extrafont")
    library(extrafont)
    # Install **TTF** Latin Modern Roman fonts from www.fontsquirrel.com/fonts/latin-modern-roman
    # Import the newly installed LModern fonts, change the pattern according to the 
    # filename of the lmodern ttf files in your fonts folder
    font_import(pattern = "lmodern*")


    # Run each time
    library(extrafont)
    loadfonts(device = "win")
    par(family = "LM Roman 10")
    x <- seq(1, 10, 1)
    y <- seq(1, 10, 1)
    plot(y ~ x, main="This plot uses LaTeX font!", ylab = expression(alpha))

R Studio 预览:
R Studio 预览

导出的pdf:
PDF 导出

答案2

选定的解决方案。

如果不安装外部库,这似乎是不可能的。我尝试使用extrafont,但我的默认 PDF 查看器没有使用的字体。

我最终使用了库tikzDevice,它公开了方法/设备tikz,其行为与设备完全相同pdf,但输出的是TikZ代码。这似乎更强大,因为字体完全取决于我的LaTeX设置,我可以包含任意数学符号。

下面是我正在使用的代码,它用标准差误差线绘制我的算法的运行时间,并将输出写入文件.tex

tikz(file = outputFile, width=11.692, height=8.267)
ggplot(tgc, aes(x=E, y=wall.time, colour=Algorithm)) + 
  geom_errorbar(aes(ymin=wall.time-se, ymax=wall.time+se), width=.1) +
  geom_point() +
  xlab("Number of edges (|E|)") +
  ylab("Wall time (secs)") +
  ggtitle(paste0("Running time with |V| = ", dt$X.V.[1])) +
  theme_bw()
endoffile <- dev.off() 

答案3

我也尝试了几次,发现需要使用 来device=cairo_pdf保存 pdf 图。它看起来像这样(顺便说一下,我用的是ggplot2):

library(extrafont)
library(ggplot2)
d <- data.frame(x = seq(1, 10, 1), y = seq(1, 10, 1))
ggplot(d, aes(x, y)) +
  geom_line() +
  geom_point() +
  theme(text=element_text(family="LM Roman 10", size=20)) +
  ggtitle("This plot uses LaTeX font!")
ggsave("fig.pdf", width = 6, height = 4, device=cairo_pdf)

答案4

参考@Augustin 的回答,fontsquirrel 默认允许您下载 OTF 文件。OTF 和 TTF 文件虽然是相同的字体形状,但是

从库(extrafont)font_import(pattern =“lmodern*”)仅安装 TTF 文件。

要安装 TTF,请按照以下步骤操作。

  1. 打开网页https://www.fontsquirrel.com/fonts/latin-modern-roman
  2. 点击“Webfont Kit”,然后勾选“TTF”
  3. 点击“DOWNLOAD@FONT-FACE KIT”,下载包含TTF版本字体的zip文件。
  4. 安装“lmroman10-regular-webfont”

然后使用 font_import(pattern = "lmodern*")

相关内容