是否可以在 R 中测试指定的 `grDevices::windowsFonts` 是否存在,并在测试失败时指定备份?
Is it possible in R to test for the existence of specified `grDevices::windowsFonts` and specify a backup if the test fails?
我正在开发一个 ggplot2
扩展包供我的组织使用,以便将我们的设计指南应用于我们所有的 R 图表。其中一部分需要使用特定的字体。我们在发布的可视化效果中使用 Whitney 字体,但并非所有用户都在其计算机上安装了所需的字体。我希望该软件包检查是否安装了 Whitney,如果没有,则指定一种替代的、广泛使用的字体(例如 Calibri)用作备份。
无论 "Whitney Medium" 是否实际安装在 PC 上,以下代码都会 运行 成功,没有警告。如果没有安装,打印出来的文字会显示Arial。
grDevices::windowsFonts(font_reg = "Whitney Medium")
graphics::plot(c(0,2), c(0,2), type="n", xlab="", ylab="")
graphics::par(family="font_reg")
graphics::text(1, 1, "font_reg", cex=4)
如何验证 "Whitney Medium" 是给定 PC 上的有效字体,如果不是则指定备份?
注意:我们的 Whitney 字体文件是 OTF,不是 TTF,所以我不能使用 extrafont
包。我也想避免使用 showtext
因为我真的想找到一个在 RStudio 绘图中有效的解决方案 window.
如果您需要自动执行此操作,可能需要覆盖 windowsFonts
的代码。当不带参数调用时,可用字体作为命名列表返回。否则,您可能会尝试将其作为您的策划电话的序言:
if ("Whitney Medium" %in% names( windowsFonts()) ) { .. proceed as usua } else {
windowsFonts("sans" = "Arial") }
如果您将 font_reg
作为传递给图形函数的文本值,那么您可以使用它来代替 "sans"。
我最终使用 sysfonts::font_files()
来识别 installed/available 字体,如果 Whitney 不在结果中则使用 Calibri。
whitney_fonts <- dplyr::filter(sysfonts::font_files(),
family == "Whitney Medium"
)
if (length(whitney_fonts$family) > 0) {
grDevices::windowsFonts(font_reg = "Whitney Medium")
} else {
grDevices::windowsFonts(font_reg = "Calibri")
}
我正在开发一个 ggplot2
扩展包供我的组织使用,以便将我们的设计指南应用于我们所有的 R 图表。其中一部分需要使用特定的字体。我们在发布的可视化效果中使用 Whitney 字体,但并非所有用户都在其计算机上安装了所需的字体。我希望该软件包检查是否安装了 Whitney,如果没有,则指定一种替代的、广泛使用的字体(例如 Calibri)用作备份。
无论 "Whitney Medium" 是否实际安装在 PC 上,以下代码都会 运行 成功,没有警告。如果没有安装,打印出来的文字会显示Arial。
grDevices::windowsFonts(font_reg = "Whitney Medium")
graphics::plot(c(0,2), c(0,2), type="n", xlab="", ylab="")
graphics::par(family="font_reg")
graphics::text(1, 1, "font_reg", cex=4)
如何验证 "Whitney Medium" 是给定 PC 上的有效字体,如果不是则指定备份?
注意:我们的 Whitney 字体文件是 OTF,不是 TTF,所以我不能使用 extrafont
包。我也想避免使用 showtext
因为我真的想找到一个在 RStudio 绘图中有效的解决方案 window.
如果您需要自动执行此操作,可能需要覆盖 windowsFonts
的代码。当不带参数调用时,可用字体作为命名列表返回。否则,您可能会尝试将其作为您的策划电话的序言:
if ("Whitney Medium" %in% names( windowsFonts()) ) { .. proceed as usua } else {
windowsFonts("sans" = "Arial") }
如果您将 font_reg
作为传递给图形函数的文本值,那么您可以使用它来代替 "sans"。
我最终使用 sysfonts::font_files()
来识别 installed/available 字体,如果 Whitney 不在结果中则使用 Calibri。
whitney_fonts <- dplyr::filter(sysfonts::font_files(),
family == "Whitney Medium"
)
if (length(whitney_fonts$family) > 0) {
grDevices::windowsFonts(font_reg = "Whitney Medium")
} else {
grDevices::windowsFonts(font_reg = "Calibri")
}