我无法使用font_import导入字体

时间:2020-01-28 13:12:15

标签: r ggplot2 fonts

我正在尝试按照here中的说明为ggplot2图形导入字体。

当我尝试使用此代码逐段进行操作时:

font_import(pattern = "Arial.ttf")
y

我收到此错误:

canning ttf files in C:\windows\Fonts ...
Extracting .afm files from .ttf files...
Error in data.frame(fontfile = ttfiles, FontName = "", stringsAsFactors = FALSE) : 
  arguments imply differing number of rows: 0, 1

我检查了我是否确实拥有Arial字体: enter image description here

我怎么了

2 个答案:

答案 0 :(得分:1)

真正检查文件名

tl; dr Windows不区分大小写,但R的grepl不区分大小写,并且import_font传递模式参数grepl

使用:

extrafont::font_import(pattern="arial.ttf", prompt=FALSE) 

为什么?因为Windows返回“ arial.ttf”作为文件名。

文件资源管理器不显示字体文件名

模式“ Arial.ttf”将与C:\Windows\Fonts\Arial.ttf相匹配。但是在我的测试系统上,文件仅为C:\Windows\Fonts\Arial,没有扩展名。这是使用文件资源管理器查看目录时看到的。文件资源管理器未显示如下所示的文件名。

使用R或powershell查找字体文件

通过上述任何一种方法输出的文件名均为arial.ttf

使用powershell

ls C:\Windows\Fonts | findstr -i arial
gci -Path "C:\Windows\Fonts" -Recurse -File -Filter "arial.ttf"
gci -Path "C:\Windows\Fonts" -Recurse -File -Filter "Arial.ttf"

全部显示文件名arial.ttf

使用R

# font_import lists files using this function
list.files("C:/Windows/Fonts", pattern="\\.ttf") # shows arial.ttf

file.exists("C:/Windows/Fonts/arial.ttf") # TRUE
file.exists("C:/Windows/Fonts/Arial.ttf") # TRUE b/c Windows is case-insensitive

font_import如何使用模式参数

研究font_import如何使用提供的模式:

extrafont::font_import # prints the source
#function (paths = NULL, recursive = TRUE, prompt = TRUE, pattern = NULL) 
#{
#...
#    ttf_import(paths, recursive, pattern)
#}

extrafont:::ttf_import # print the source
#function (paths = NULL, recursive = TRUE, pattern = NULL) 
#{
#    if (is.null(paths)) 
#        paths <- ttf_find_default_path()
#    ttfiles <- normalizePath(list.files(paths, pattern = "\\.ttf$", 
#        full.names = TRUE, recursive = recursive, ignore.case = TRUE))
#    if (!is.null(pattern)) {
#        matchfiles <- grepl(pattern, basename(ttfiles))
#        ttfiles <- ttfiles[matchfiles]
#    }
#...
#}

使用提供的模式的行在对grepl的调用中

matchfiles <- grepl(pattern, basename(ttfiles))

答案 1 :(得分:1)

我遇到了同样的问题,即尝试使用font_import()导入字体(Zallman Caps)并收到相同的错误:

"Error in data.frame(fontfile = ttfiles, FontName = "", stringsAsFactors = FALSE) : 
   arguments imply differing number of rows: 0, 1"

经过反复试验,我终于找到了一个对我有用的解决方案,也许对您也适用。

即使我可以在Windows字体文件夹中看到Zallman Caps字体并验证它在Word中也可以使用,但font_import()list.files()都无法在其中找到它。我通过输入以下代码成功导入了字体:

font_import(path = "C:/Users/*insert your user name*/AppData/Local/Microsoft/Windows/Fonts", pattern = ".TTF")

当我在Windows文件资源管理器中可以清楚地看到它时,我不知道为什么R在主字体目录中不可见,但是至少我设法使用这种解决方法导入了字体。