This checks to see if a font exists. If missing it will try and install from `google fonts` or `brick.io`. If nothing can be done it will suggest alternatives from `fonts_available()`. In all cases this will make the font available to `systemfonts` (for `ragg` and `svg` devices), and `extrafonts` (for `pdf` etc). Webfonts are automatically downloaded into the users font directory and from there will be picked up by `cairo` devices in theory, and system pdf/svg viewers. In practice this is a bit hit and miss.
Examples
check_font(c("Roboto","Arial","Kings","EB Garamond"))
#> Roboto Arial Kings EB Garamond
#> "Roboto" "Arial" "Kings" "EB Garamond"
extrafont::fonts()
#> [1] "Roboto" "Arial" "EB Garamond" "Kings"
fonts_available(c("Roboto","Arial","Kings","EB Garamond"))
#> [1] "Roboto" "Arial" "Kings" "EB Garamond"
plot = ggplot2::ggplot(ggplot2::diamonds, ggplot2::aes(x=carat,y=price,color = color))+
ggplot2::theme_minimal(base_family="Roboto")+
ggplot2::geom_point()+
ggplot2::annotate("label",x=2,y=10000,label="Hello \u2014 world", family="Kings")+
ggplot2::labs(tag = "A")+
ggplot2::xlab("Carat\u2082")+
ggplot2::ylab("price\u2265")
if (FALSE) {
# font but no unicode support
tmp = tempfile(fileext = ".pdf")
pdf(tmp)
plot
dev.off()
utils::browseURL(tmp)
# font and unicode support
tmp = tempfile(fileext = ".pdf")
cairo_pdf(tmp)
plot
dev.off()
utils::browseURL(tmp)
# font and unicode support
tmp = tempfile(fileext = ".png")
png(tmp)
plot
dev.off()
utils::browseURL(tmp)
# font and unicode support
tmp = tempfile(fileext = ".png")
ragg::agg_png(tmp)
plot
dev.off()
utils::browseURL(tmp)
# font and unicode support
tmp = tempfile(fileext = ".svg")
svglite::svglite(tmp)
plot
dev.off()
utils::browseURL(tmp)
# Does not work - "family 'Roboto' not included in postscript() device"
# however: names(grDevices::postscriptFonts()) includes Roboto
tmp = tempfile(fileext = ".eps")
postscript(tmp)
plot
dev.off()
utils::browseURL(tmp)
# This does work but rasterises output at low fidelity
tmp = tempfile(fileext = ".eps")
cairo_ps(tmp)
plot
dev.off()
utils::browseURL(tmp)
# This fully works
tmp = tempfile(fileext = ".ps")
Cairo::CairoPS(tmp)
plot
dev.off()
utils::browseURL(tmp)
}