使用 extrafont 将字体导入 R 时,如何解决“无字体名称”问题?

Dav*_*alf 8 r extrafont

我的 Windows 桌面 ( C:\Users\me\Desktop\Fonts)上有一个文件夹,其中包含我想使用extrafont.

当我尝试使用导入字体时

library(extrafont)
font_import(paths = "C:/Users/me/Desktop/Fonts", prompt=FALSE)
Run Code Online (Sandbox Code Playgroud)

我收到错误消息

Scanning ttf files in C:/Users/me/Desktop/Fonts ...
Extracting .afm files from .ttf files...
C:\Users\me\Desktop\Fonts\arista-light.ttf : No FontName. Skipping.
C:\Users\me\Desktop\Fonts\facebook-letter-faces.ttf : No FontName. Skipping.
C:\Users\me\Desktop\Fonts\Guardian-EgypTT-Text-Regular.ttf : No FontName. Skipping.
C:\Users\me\Desktop\Fonts\pico-black.ttf : No FontName. Skipping.
C:\Users\me\Desktop\Fonts\product-sans.ttf : No FontName. Skipping.
Found FontName for 0 fonts.
Scanning afm files in C:/Users/me/Documents/R/R-3.6.3/library/extrafontdb/metrics
Warning messages:
1: In system2(ttf2pt1, c(args, shQuote(ttfiles[i]), shQuote(tmpfiles[i])),  :
  running command '"C:/Users/me/Documents/R/R-3.6.3/library/Rttf2pt1/exec/ttf2pt1.exe" -a -G fAe "C:\Users\me\Desktop\Fonts\arista-light.ttf" "C:\Users\me\AppData\Local\Temp\RtmpOgbdTh/fonts/arista-light"' had status 1
2: In system2(ttf2pt1, c(args, shQuote(ttfiles[i]), shQuote(tmpfiles[i])),  :
  running command '"C:/Users/me/Documents/R/R-3.6.3/library/Rttf2pt1/exec/ttf2pt1.exe" -a -G fAe "C:\Users\me\Desktop\Fonts\facebook-letter-faces.ttf" "C:\Users\me\AppData\Local\Temp\RtmpOgbdTh/fonts/facebook-letter-faces"' had status 1
3: In system2(ttf2pt1, c(args, shQuote(ttfiles[i]), shQuote(tmpfiles[i])),  :
  running command '"C:/Users/me/Documents/R/R-3.6.3/library/Rttf2pt1/exec/ttf2pt1.exe" -a -G fAe "C:\Users\me\Desktop\Fonts\Guardian-EgypTT-Text-Regular.ttf" "C:\Users\me\AppData\Local\Temp\RtmpOgbdTh/fonts/Guardian-EgypTT-Text-Regular"' had status 1
4: In system2(ttf2pt1, c(args, shQuote(ttfiles[i]), shQuote(tmpfiles[i])),  :
  running command '"C:/Users/me/Documents/R/R-3.6.3/library/Rttf2pt1/exec/ttf2pt1.exe" -a -G fAe "C:\Users\me\Desktop\Fonts\pico-black.ttf" "C:\Users\me\AppData\Local\Temp\RtmpOgbdTh/fonts/pico-black"' had status 1
5: In system2(ttf2pt1, c(args, shQuote(ttfiles[i]), shQuote(tmpfiles[i])),  :
  running command '"C:/Users/me/Documents/R/R-3.6.3/library/Rttf2pt1/exec/ttf2pt1.exe" -a -G fAe "C:\Users\me\Desktop\Fonts\product-sans.ttf" "C:\Users\me\AppData\Local\Temp\RtmpOgbdTh/fonts/product-sans"' had status 1
Run Code Online (Sandbox Code Playgroud)

基于此,我有两个问题:

  1. 我怎样才能克服这个No FontName. Skipping.问题?
  2. 试图告诉我的警告消息是什么,我是否需要担心这一点?

我将不胜感激任何帮助,非常感谢!

Mor*_*arz 12

我的字体文件之一遇到了完全相同的问题 - 错误总是发生在Rttf2pt1可执行文件中。

在 GitHub 页面上为该包创建了一个问题- 让我们看看他们是否可以解决这个问题。

与此同时,您可以解决该问题:

在我看来,错误的根源来自于文件中的失败.ttf。导航到FontForge并下载开源软件。安装后,打开.ttf文件并.ttf使用“文件”菜单中的“生成字体...”选项将其重新另存为 a 。您可能会收到一条消息,警告您字体存在轻微问题 - 如果您愿意,您可以查看它,但我还是继续单击“生成”

然后您就可以使用新.ttf文件ttf_import()了!:)

  • 感谢您的回答,莫里茨!我不再需要在 R 中使用自定义字体,但我相信其他用户会发现它很有用。希望他们能找到解决办法! (3认同)

car*_*ist 11

正如@Moritz Schwarz 所提到的,问题可以追溯到Rttf2pt1.

根据此处提出的解决方案,将其降级到 1.3.8 将解决该问题:

library(extrafont)
library(remotes)
remotes::install_version("Rttf2pt1", version = "1.3.8")
extrafont::font_import()
Run Code Online (Sandbox Code Playgroud)

  • 惊人的!!这解决了问题!太感谢了!我对他们发布了如此该死的测试版感到非常生气。该死的新版本!我的 GIS 脚本在 R 4.xx 下也完全失败了。 (2认同)

ap2*_*p21 6

(2022 年 3 月在 Windows 10 机器上撰写...)

不要使用extrafont,而是使用新的包showtext。(https://cran.rstudio.com/web/packages/showtext/vignettes/introduction.html)。