[texhax] controlling expansion

Lars Madsen daleif at imf.au.dk
Thu Feb 28 12:34:29 CET 2013


any reason why you don't just use the etoolbox package instead? It has very powerfull macros to test this sort of thing




/Lars Madsen
Institut for Matematik / Department of Mathematics
Aarhus Universitet / Aarhus University
Mere info: http://au.dk/daleif@imf / More information: http://au.dk/en/daleif@imf


________________________________________
From: texhax [texhax-bounces at tug.org] on behalf of Neal H. Walfield [neal at walfield.org]
Sent: 28 February 2013 12:22
To: texhax at tug.org
Subject: [texhax] controlling expansion

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
_______________________________________________
TeX FAQ: http://www.tex.ac.uk/faq
Mailing list archives: http://tug.org/pipermail/texhax/
More links: http://tug.org/begin.html

Automated subscription management: http://tug.org/mailman/listinfo/texhax
Human mailing list managers: postmaster at tug.org



More information about the texhax mailing list