[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