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")) 
}


grid.utext("underlined text")


grid.newpage()
grid.rect(gp=gpar(col="grey"))
grid.utext("underlined text")


