11

If I have a minipage

\begin{minipage}{5cm}
content
\end{minipage}

How can I determine its height and save this value as a length?

2

2 Answers 2

13
\newlength\foo

\settoheight\foo{\begin{minipage.....

If you also want to typeset the minipage you may want to save it in a box and instead say

\settoheight\foo{\usebox\mybox}

rather than typesetting it twice once just for measuring purposes.

6
  • Thanks, this seems to work. However, if I use a complicated content in the minipage (a large tikz image), I get a ! TeX capacity exceeded, sorry [input stack size=5000] error.
    – Carlos
    Mar 3, 2013 at 10:27
  • Yes, both versions fail due to the same error but the standalone minipage works. I use this code in a \newcommand environment, so I have something like \newsavebox{\sb}\newcommand{\cmd}[1]{ \savebox{\b}{...minipage{#1}...}\settoheight{\foo}{\usebox{\sb}}\print{\usebox{\sb}} }.
    – Carlos
    Mar 3, 2013 at 10:37
  • the newcommand there will add one extra input stack entry so you could try it without that. On the version that works what is the line in the log (about 8 lines from the end) file that looks like 63i,9n,74p,723b,1727s stack positions out of 5000i,500n,10000p,200000b,50000s in particular what is the first number before i I suspect that you only just made it:-) Mar 3, 2013 at 10:55
  • 5000i,10n,75p,552b,1292s stack positions out of 5000i,500n,10000p,200000b,50000s. Please excuse me blowing up this rather simple question, but there seems to be a problem with the whole \savebox formalism when I use it in a tikz node. Probably my problem is related to that.
    – Carlos
    Mar 3, 2013 at 11:03
  • your tikz code used up the entire save stack 5000 out of 5000 that means you are living on borrowed time, one more newcommand or input or a passing butterfly and your document will fail. Possibly you should ask a tikz specific question with an example and ask why it has eaten so much save stack. Mar 3, 2013 at 11:32
0

We can also directly use savebox. Note that if you're using this in a command you need to define the box outside of the command. MWE to follow:

\newbox\hintbox
\newcommand*{\cvcomment}[2][.25em]{
    \sbox\hintbox{
        \begin{minipage}{\hintscolumnwidth - \separatorcolumnwidth}
            \raggedleft\hintstyle{#2}
        \end{minipage}
    }
    \usebox\hintbox
    \vspace{-1.7\ht\hintbox}
}

For context, I use this in modern-cv to leave a comment in the left column (the dates column), and that's where \hintscolumnwidth, \hintstyle, etc. come from.

In the above, I've defined the box hintbox outside of the command. I typeset a minipage inside hintbox, and display it using usebox. The whole point is that since I have it in a box, I can now measure its height \ht\hintbox and scale it appropriately to bring up content that comes after the use of the command such that the box doesn't take vertical space.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .