如何创建在R包中使用的特定字体系列?

时间:2017-03-03 11:19:20

标签: r fonts package true-type-fonts

我需要发送带有图表的包,客户端坚持使用自己的许可字体。图表必须呈现为EPS并发送给布局人员以获取报告。

我有字体的.ttf文件,名称如下:

  • FontNameSans-Bold.ttf
  • FontNameSans-Medium.ttf
  • FontNameSerif-Bold.ttf
  • FontNameSerif-Regular.ttf
  • ...

我也有这些文件的.eot,.svg和.woff版本。

所以我尝试了extrafont包:

ttf_import('Path/To/ttfFiles')
fonts()
[1] "FontNameSans-Bold"     "FontNameSans-Light"   
[3] "FontNameSans-Medium"   "FontNameSans-Regular" 
[5] "FontNameSerif-Bold"    "FontNameSerif-Light"  
[7] "FontNameSerif-Medium"  "FontNameSerif-Regular"

我希望看到两个家庭,但这显然不起作用。

最后,ttf文件应该包含在inst文件夹的子文件夹中,我应该有类似的内容:

.onLoad({
  font_import(file.path(system.file(package = 'mypackage'),
                        "fontdir")
  )
  # something else to create a family FontName for 
  # use with postscript() or cairo_ps()
  loadfonts()
})

所以我稍后可以这样做:

setEPS()
postscript('somefile.eps', family = 'FontName Sans')
plot(mydata)
dev.off()
embed_fonts('somefile.eps', outfile = 'somefile-embedded.eps')

问题:我必须采取哪些额外步骤才能让家庭像其他家庭一样可用?

编辑:我知道在使用之前我必须加载字体。但如果注册错误,我无法加载家人。问题是关于正确注册字体系列,以便其余部分正常工作。

1 个答案:

答案 0 :(得分:1)

这个答案有点晚了,可能您不再需要它了。但这可能会对搜索中的其他用户感兴趣。

根据您的操作系统,您需要执行不同的步骤。我有一个包含inst/extdata/fonts/some-fonts.ttf中几种字体的软件包。

  • Linux 系统上,可以在将pacakge加载到 fonts 目录时将这些文件复制。
  • Windows 上,需要手动将.ttf文件复制到 C:/ Windows / Fonts

要在加载包时加载字体,我修改了.onLoad函数:

.onLoad <- function(libname, pkgname) {
  if (Sys.info()[1] == "Linux") {
    dir.create('~/.fonts')
    file.copy("inst/extdata/fonts/some-fonts.ttf", "~/.fonts")
    system('fc-cache -f ~/.fonts')
  }
  if (Sys.info()[1] == "Windows") {
    windowsFonts()
    extrafont::font_import(pattern = "some-fonts", prompt = FALSE)
    extrafont::loadfonts(device = "win")
    windowsFonts()
  }
  print(extrafont::fonts())
}
  • Linux 上,我只需要将自定义字体放在 fonts 目录中。之后,它们可供R使用。
  • Windows 上,您需要使用extrafont::font_import 导入,并使用extrafont::loadfonts(device = "win") 注册

希望这对您,他人或我的未来自我有帮助。 ;-)