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"
fonts_available(c("Roboto","Arial","Kings","EB Garamond"))
#> [1] "Roboto" "Arial" "Kings" "EB Garamond"
plot = ggplot2::ggplot()+
ggplot2::theme_void(base_family="Roboto")+
ggplot2::geom_point()+ggplot2::theme(margins = ggplot2::margin(14,0,14,0))+
ggplot2::annotate("label",x=0,y=0,label="Kings: Em dash: \u2014 hello world", family="Kings")+
ggplot2::annotate("text",x=0,y=1,label="Roboto: UTF-8 subscript 2: \u2082", family="Roboto")+
ggplot2::annotate("text",x=0,y=2,label="EB Garamond: UTF-8 gte: \u2265", family="EB Garamond")
if (FALSE) {
# Does not work - "invalid font type" & "font family 'Kings'
# not found in PostScript font database"
# font but no unicode support
check_font(c("Roboto","Kings","EB Garamond"), .legacy=TRUE)
tmp = tempfile(fileext = ".pdf")
grDevices::pdf(tmp, width=3, height = 1, units="in")
plot
grDevices::dev.off()
utils::browseURL(tmp)
# font and unicode support
tmp = tempfile(fileext = ".pdf")
grDevices::cairo_pdf(tmp, width=3, height = 1, units="in")
plot
grDevices::dev.off()
utils::browseURL(tmp)
# font and unicode support
tmp = tempfile(fileext = ".png")
grDevices::png(tmp, width=3, height = 1, units="in", res=300)
plot
grDevices::dev.off()
utils::browseURL(tmp)
# font and unicode support
tmp = tempfile(fileext = ".png")
ragg::agg_png(tmp, width=3, height = 1, units="in", res=300)
plot
grDevices::dev.off()
utils::browseURL(tmp)
# font and unicode support
tmp = tempfile(fileext = ".svg")
svglite::svglite(tmp, width=3, height = 1)
plot
grDevices::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")
grDevices::postscript(tmp, width=3, height = 1)
plot
grDevices::dev.off()
utils::browseURL(tmp)
# font and unicode support
tmp = tempfile(fileext = ".eps")
grDevices::cairo_ps(tmp, width=3, height = 1)
plot
grDevices::dev.off()
utils::browseURL(tmp)
# font and partial unicode support
tmp = tempfile(fileext = ".ps")
Cairo::CairoPS(tmp, width=3, height = 1)
plot
grDevices::dev.off()
utils::browseURL(tmp)
}