
R Under development (unstable) (2022-03-19 r81942) -- "Unsuffered Consequences"
Copyright (C) 2022 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> ## tests of the fonts in the postscript() device.
> 
> testit <- function(family, encoding="default")
+ { 
+     postscript("ps-tests.ps", height=7, width=7, family=family,
+                encoding=encoding)
+     plot(1:10, type="n")
+     text(5, 9, "Some text")
+     text(5, 8 , expression(italic("italic")))
+     text(5, 7 , expression(bold("bold")))
+     text(5, 6 , expression(bolditalic("bold & italic")))
+     text(8, 3, expression(paste(frac(1, sigma*sqrt(2*pi)), " ",
+         plain(e)^{frac(-(x-mu)^2, 2*sigma^2)})))
+     dev.off()
+ }
> 
> testit("Helvetica")
null device 
          1 
> testit("AvantGarde")
null device 
          1 
> testit("Bookman")
null device 
          1 
> testit("Courier")
null device 
          1 
> testit("Helvetica-Narrow")
null device 
          1 
> testit("NewCenturySchoolbook")
null device 
          1 
> testit("Palatino")
null device 
          1 
> testit("Times")
null device 
          1 
> 
> testit("URWGothic")
null device 
          1 
> testit("URWBookman")
null device 
          1 
> testit("NimbusMon")
null device 
          1 
> testit("NimbusSan")
null device 
          1 
> testit("NimbusSanCond")
null device 
          1 
> testit("CenturySch")
null device 
          1 
> testit("URWPalladio")
null device 
          1 
> testit("NimbusRom")
null device 
          1 
> testit("URWHelvetica")
null device 
          1 
> testit("URWTimes")
null device 
          1 
> 
> testit("ComputerModern", "TeXtext.enc")
null device 
          1 
> 
> unlink("ps-tests.ps")
> 
> proc.time()
   user  system elapsed 
  0.995   0.084   1.062 
