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

Jor*_*eys 5 fonts r truetype package

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

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

  • 字体名称Sans-Bold.ttf
  • 字体名称Sans-Medium.ttf
  • 字体名称Serif-Bold.ttf
  • 字体名称Serif-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"
Run Code Online (Sandbox Code Playgroud)

我本来希望见到两个家庭,但这显然行不通。

最后,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()
})
Run Code Online (Sandbox Code Playgroud)

所以我可以稍后做:

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

问题:我需要采取哪些额外步骤才能让这些家庭像其他家庭一样提供服务?

编辑:我知道我必须先加载字体才能使用它们。但如果注册错误,我将无法加载家庭。问题是如何正确注册字体系列,以便其余部分正常工作。

sym*_*ush 1

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

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

  • Linux系统上,可以在将包加载到字体目录时复制这些文件。
  • 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())
}
Run Code Online (Sandbox Code Playgroud)
  • Linux上,我只需将自定义字体放在字体目录中。之后它们就可供 R 使用了。
  • 在Windows上,您需要使用导入它们extrafont::font_import并使用注册它们extrafont::loadfonts(device = "win")

希望这对你、其他人或未来的我有帮助。;-)