[texhax] controlling expansion
Neal H. Walfield
neal at walfield.org
Thu Feb 28 12:22:51 CET 2013
Hi,
I'm writing a macro that compares the value of a parameter. I'm
currently using \ifx to do this as follows:
\documentclass{article}
\def\dosomething#1{
\def\empty{}
\def\arg{#1}
\ifx\empty\arg
empty
\else
not empty
\fi}
\begin{document}
1: \dosomething{}
2: \dosomething{1}
\edef\foo{\dosomething{}}
3: \foo
\end{document}
This breaks if the caller uses \edef: \empty is expanded. However, if
I protect \empty and \arg with a \noexpand, then bare uses (such as 1
and 2 in my above example) don't work:
! Use of \noexpand doesn't match its definition.
\dosomething #1-> \def \noexpand \empty
{} \def \noexpand \arg {#1}
\ifx \em...
l.18 \edef\foo{\dosomething{}
What is the "right way" to compare argument values such that the macro
can (but need not) be used in an \edef context?
Thanks,
Neal
More information about the texhax
mailing list