pushViewport(viewport(y=.5, height=.5, just="bottom",
                      gp=gpar(cex=1)))
grid.utext("underlined text")
popViewport()
pushViewport(viewport(y=0, height=.5, just="bottom",
                      gp=gpar(cex=0.5)))
grid.utext("underlined text")
popViewport()


pushViewport(viewport(x=0, width=unit(2, "in"), just="left"))
grid.rect(gp=gpar(col="grey"))
pushViewport(viewport(y=.5, height=.5, just="bottom",
                      gp=gpar(cex=1)))
grid.utext("underlined text")
popViewport()
pushViewport(viewport(y=0, height=.5, just="bottom",
                      gp=gpar(cex=0.5)))
grid.utext("underlined text")
popViewport()
popViewport()
pushViewport(viewport(x=1, width=unit(2, "in"), just="right"))
grid.rect(gp=gpar(col="grey"))
grid.utextabs <- 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(1, "mm"), 
                  corners$xr, corners$yb - unit(1, "mm"), 
                  name=paste0(name, ".underline"))
}
pushViewport(viewport(y=.5, height=.5, just="bottom",
                      gp=gpar(cex=1)))
grid.utextabs("underlined text")
popViewport()
pushViewport(viewport(y=0, height=.5, just="bottom",
                      gp=gpar(cex=0.5)))
grid.utextabs("underlined text")
popViewport()
popViewport()


