# Get width of a given text as length

Is there a TeX command that returns the width of a given text as length value, so that I can use the result directly as a length argument of another command?

I mean, I would like to have a command \getWidth{my text} and want to use the result directly as the first argument of \parbox:

\parbox{\getWidth{my text}}{my foo\\bar text}

-
add comment

## 3 Answers

Use the calc package:

\parbox{\widthof{my text}}{...}

-
Thanks. That's exactly what I looked for. –  Stefan Endrullis May 19 '11 at 12:05
I think calc package may redefine some units. For example, I get an error using math unit mu when the package is loaded. –  M.Reza Nov 22 '13 at 7:20
@M.Reza mu can be used only in math and only for \mkern or \mskip. –  egreg Nov 22 '13 at 10:04
add comment

I like to answer the question in a more general way, so that it is useful to a wider group of people.

There are the following macros which allow to store the width, height (the material above the baseline) and depth (the material below the baseline) of a given content.

\settowidth{\somelength}{<content>}
\settodepth{\somelength}{<content>}
\settoheight{\somelength}{<content>}


The calc package also provides one for the total height (height + depth):

\settototalheight{\somelength}{<content>}


as well as

\widthof{<content>}
\heightof{<content>}
\depthof{<content>}
\totalheightof{<content>}


which can be used directly inside \setlength or \addtolength.

If you need multiple dimension of the same content you can also store it in a box register and use its dimension directly (the above macros do this as well internally). These are dimension expressions and can be prefixed with a factor, e.g. .5\wd\mybox is half the width.

\newsavebox\mybox
\sbox{\mybox}{<content>}
\wd\mybox % width
\ht\mybox % height
\dp\mybox % depth


For the totalheight you need to add \ht\mybox and \dp\mybox together.

-
add comment

This can be done with the calc package

\documentclass{article}
\usepackage{calc}

\begin{document}
\newlength{\myl}
\settowidth{\myl}{test text}
\the\myl
\end{document}


\the\myl will print out the value ~37pt.

-
\settowidth is actually part of standard LaTeX. Comment out the calc line and you'll see it still works. –  Matthew Leingang May 19 '11 at 9:39
add comment