

   PPlloottttiinngg DDiimmeennssiioonnss ooff CChhaarraacctteerr SSttrriinnggss aanndd MMaatthh EExxpprreess--
   ssiioonnss

        strwidth(s, units = "user", cex = NULL)
        strheight(s, units = "user", cex = NULL)

   AArrgguummeennttss::

          s: character vector or `expression's whose string
             widths in plotting units are to be determined.

      units: character indicating in which units `s' is mea-
             sured; must be one of `"user"', `"inches"', `"fig-
             ure"' .

        cex: character expansion to which is applies. Per
             default, the current `par("cex")' is used.

   DDeessccrriippttiioonn::

        These functions compute the width or height, respec-
        tively, of the given strings or mathematical expres-
        sions `s[i]' on the current plotting device in user
        coordinates, inches or as fraction of the figure width
        `par("fin")'.

   VVaalluuee::

        integer vector with the same length as `s', giving the
        width for each `s[i]'.

   SSeeee AAllssoo::

        `text', `nchar'

   EExxaammpplleess::

        str.ex <- c("W","w","I",".","WwI.")
        op <- par(pty='s'); plot(1:100,1:100); par('usr')
        sw <- strwidth(str.ex); sw
        sum(sw[1:4] == sw[5])#- since the last string contains the others
        sw / strwidth(str.ex, cex = .5)
        # between 1.5 and 4.2 (!),  font dependent

        sw.i <- strwidth(str.ex, "inches"); 25.4 * sw.i # width in [mm]
        unique(sw / sw.i)
        # constant factor: 1 value
        mean(sw.i / strwidth(str.ex, "fig")) / par('fin')[1] # = 1: are the same

        ## See how letters fall in classes -- depending on graphics device and font!
        all.lett <- c(letters, LETTERS)
        shL <- strheight(all.lett, units = "inches")
        table(shL)# all have same heights ..
        mean(shL) / par("cin")[2] # should be 1 (exactly?)

        swL <- strwidth(all.lett)
        swL <- 3 * swL / min(swL)
        all(swL == round(swL))#- TRUE !
        swL <- as.integer(swL)
        n.classes <- length(tL <- table(swL)); tL
        iL <- order(swL)
        structure(swL[iL], names = all.lett[iL])
        lett.classes <- structure(vector("list", n.classes), names= names(tL))
        for(i in 1:n.classes)
          lett.classes[[i]] <- all.lett[swL == as.numeric(names(tL)[i])]
        lett.classes

        sumex <- expression(sum(x[i], i=1,n), e^{i * pi} == -1)
        strwidth(sumex)
        strheight(sumex)

        rm(sumex); par(op)#- reset to previous setting

