| % File src/library/grid/man/calcStringMetric.Rd |
| % Part of the R package, https://www.R-project.org |
| % Copyright 1995-2007 R Core Team |
| % Distributed under GPL 2 or later |
| |
| \name{calcStringMetric} |
| \alias{calcStringMetric} |
| \title{ Calculate Metric Information for Text } |
| \description{ |
| This function returns the ascent, descent, and width metric |
| information for a character or expression vector. |
| } |
| \usage{ |
| calcStringMetric(text) |
| } |
| \arguments{ |
| \item{text}{ A character or expression vector. } |
| } |
| \value{ |
| A list with three numeric components named ascent, descent, and width. |
| All values are in inches. |
| } |
| \author{ Paul Murrell } |
| \section{WARNING }{ The metric information from this function is based |
| on the font settings that are in effect when this function is called. |
| It will not necessarily correspond to the metric information of any |
| text that is drawn on the page. |
| } |
| \seealso{ \code{\link{stringAscent}}, \code{\link{stringDescent}}, |
| \code{\link{grobAscent}}, and \code{\link{grobDescent}}.} |
| |
| \examples{ |
| grid.newpage() |
| grid.segments(.01, .5, .99, .5, gp=gpar(col="grey")) |
| metrics <- calcStringMetric(letters) |
| grid.rect(x=1:26/27, |
| width=unit(metrics$width, "inches"), |
| height=unit(metrics$ascent, "inches"), |
| just="bottom", |
| gp=gpar(col="red")) |
| grid.rect(x=1:26/27, |
| width=unit(metrics$width, "inches"), |
| height=unit(metrics$descent, "inches"), |
| just="top", |
| gp=gpar(col="red")) |
| grid.text(letters, x=1:26/27, just="bottom") |
| |
| test <- function(x) { |
| grid.text(x, just="bottom") |
| metric <- calcStringMetric(x) |
| if (is.character(x)) { |
| grid.rect(width=unit(metric$width, "inches"), |
| height=unit(metric$ascent, "inches"), |
| just="bottom", |
| gp=gpar(col=rgb(1,0,0,.5))) |
| grid.rect(width=unit(metric$width, "inches"), |
| height=unit(metric$descent, "inches"), |
| just="top", |
| gp=gpar(col=rgb(1,0,0,.5))) |
| } else { |
| grid.rect(width=unit(metric$width, "inches"), |
| y=unit(.5, "npc") + unit(metric[2], "inches"), |
| height=unit(metric$ascent, "inches"), |
| just="bottom", |
| gp=gpar(col=rgb(1,0,0,.5))) |
| grid.rect(width=unit(metric$width, "inches"), |
| height=unit(metric$descent, "inches"), |
| just="bottom", |
| gp=gpar(col=rgb(1,0,0,.5))) |
| } |
| } |
| |
| tests <- list("t", |
| "test", |
| "testy", |
| "test\ntwo", |
| expression(x), |
| expression(y), |
| expression(x + y), |
| expression(a + b), |
| expression(atop(x + y, 2))) |
| |
| grid.newpage() |
| nrowcol <- n2mfrow(length(tests)) |
| pushViewport(viewport(layout=grid.layout(nrowcol[1], nrowcol[2]), |
| gp=gpar(cex=5, lwd=.5))) |
| for (i in 1:length(tests)) { |
| col <- (i - 1) \%\% nrowcol[2] + 1 |
| row <- (i - 1) \%/\% nrowcol[2] + 1 |
| pushViewport(viewport(layout.pos.row=row, layout.pos.col=col)) |
| test(tests[[i]]) |
| popViewport() |
| } |
| |
| } |
| \keyword{ dplot } |