我正在尝试按照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
我怎么了
答案 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
,没有扩展名。这是使用文件资源管理器查看目录时看到的。文件资源管理器未显示如下所示的文件名。
通过上述任何一种方法输出的文件名均为arial.ttf
。
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
。
# 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在主字体目录中不可见,但是至少我设法使用这种解决方法导入了字体。