8

I have an environment that I've defined as follows:

\newenvironment{regularEnumerateEx}[2][0em]
  {begin{listSkeleton}[#1]{enumerate}{#2}}
  {\end{listSkeleton}}

The problem is that I need to expand #2 before passing it to listSkeleton. It's okay if #1 is expanded (I think). I know I have to use \expandafter in some way, but not exactly how.

2
  • 1
    Do you need to expand it only once or completely? Commented Aug 18, 2011 at 9:54
  • @Martin Scharrer: I'm not familiar enough with LaTeX to comment on that. If expanding it completely is easier and doesn't break anything, then that will suffice.
    – gablin
    Commented Aug 18, 2011 at 11:35

1 Answer 1

12

If it is OK to expand it completely, not just once you can use \edef with a temporary macro:

\newenvironment{regularEnumerateEx}[2][0em]{%
  \edef\temp{%
    \noexpand\begin{listSkeleton}[#1]{enumerate}{#2}%
  }%
  \temp
}{%
  \end{listSkeleton}%
}

If you really only want to expand it once you can do:

\newenvironment{regularEnumerateEx}[2][0em]{%
  \def\temp{\begin{listSkeleton}[#1]{enumerate}}%
  \expandafter\temp\expandafter{#2}%
}{%
  \end{listSkeleton}%
}

Often the macro \@tempa is used for such temparary assignments, but in user documents it requires \makeatletter ... \makatother around the code. So for simplicity I just used \temp. It is anyway just used inside a group.

2
  • In the first code there is a \noexpand missing, right before \begin. Otherwise the \edef will not work.
    – user2574
    Commented Aug 18, 2011 at 10:33
  • @Axel: Yes, indeed. I overlooked that. Fixed now. Commented Aug 18, 2011 at 10:42

You must log in to answer this question.

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