textCorners <- function(x) { list(xl=grobX(x, 180), xr=grobX(x, 0), yb=grobY(x, 270), yt=grobY(x, 90)) } grid.utext <- function(label, x=.5, y=.5, ..., name="utext") { grid.text(label, x, y, ..., name=paste0(name, ".label")) corners <- textCorners(paste0(name, ".label")) grid.segments(corners$xl, corners$yb - unit(.2, "lines"), corners$xr, corners$yb - unit(.2, "lines"), gp=gpar(lex=get.gpar("cex")), name=paste0(name, ".underline")) }