# How to expand macro in a macro call

How can I expand a macro inside an optional argument list

\newcommand{\sss}{%
label={$\bullet$},topsep=0mm, parsep=0mm,% leftmargin=3mm,rightmargin=0cm,labelwidth=5mm,labelsep=3mm%
}

\begin{itemize}[\sss]
\item gugus
\end{itemize}


This does not work, (not giving any good debuggin message). So the expansion is wrong?

How can I fix this?

• This is the typical trap with key-value-interfaces, it won't work this way – user31729 Aug 26 '15 at 13:24
• What is the trap here :-) or better what does latex do when inserting the macro? – Gabriel Aug 26 '15 at 13:25
• The trap is the non-expansion of key-value - parsers, but David Carlisle stated this already – user31729 Aug 26 '15 at 15:14
• There are some solutions to this question as well other answers to your other questions, but you rarely accept answers -- that's not really a proof of approving the efforts by users in order to help you – user31729 Dec 2 '15 at 20:46

keyval parsers typically don't expand the arguments (otherwise things like font=\small would blow up badly as \small would expand too early.

so the simplest thing is to use

\newenvironment{sss}{%
\begin{itemize}[label={$\bullet$},topsep=0mm, parsep=0mm,% leftmargin=3mm,rightmargin=0cm,labelwidth=5mm,labelsep=3mm%
]}
{\end{itemize}}

\begin{sss}
\item gugus
\end{sss}


Usually a key value parser needs to see the syntax characters = and , directly. Therefore, the macro \sss should be expanded once. This can be done with lots of \expandafter:

\expandafter\begin\expandafter{\expandafter i\expandafter t ...\expandafter}\expandafter[\sss]


or the whole expression can be expanded as macro:

\edef\next{%
\noexpand\begin{itemize}[\unexpanded\expandafter{\sss}]%
}\next


Here, \unexpanded prevents the further expansion of \sss after it was expanded once to prevent values from expanding too early.

• Do you have some good reference to learn about expansions? – Sigur Aug 26 '15 at 13:32
• "The TeXbook" by Donald E. Knuth or "TeX by Topics" by Victor Eijkhout. – Heiko Oberdiek Aug 26 '15 at 13:35