2

Let's say I have an environment myenvironment and I have the following code :

\makebox[\length][c]{%
\begin{myenvironment}
content
\end{myenvironment}
}

I want to create an environment foo that would do the same but simply with

\begin{foo}{\length}
content
\end{foo}

I know how to pass \length to foo. The problem is the command makebox (or any command that would delimit myenvironment). I attempted this naive approach :

\newenvironment{foo}{%
\makebox[\length][c]{
\begin{myenvironment} 
}{%
\end{myenvironment}}
}

which of course doesn't work because you can't have { and } by themselves in a block.

I found this similar question but I am not sure it applies to my problem: How to define an environment that begins with a node? . And I don't really understand the validated answer.

So how would I go about to create the environment foo ? I would prefer a solution without using the package environ. If useful for a solution, I am using the xparse and etoolbox packages.

0

1 Answer 1

3

The trick is using lrbox:

\newsavebox{\foobox}

\newenvironment{foo}
 {% start
  \begin{lrbox}{\foobox}%
  \begin{myenvironment}%
 }
 {% end
  \end{myenvironment}%
  \end{lrbox}%
  \makebox[\length][c]{\usebox{\foobox}}%
 }
1
  • Thanks, this works and now I know how to save stuff inside boxes. Mar 5, 2016 at 13:57

You must log in to answer this question.

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