Dorothy Jammins dorothy.jammins at yahoo.com
Tue May 26 18:44:52 CEST 2009

Can this be used to combine subscripts in equations? I've tried but couldn't figure out how to ensure that the whole group would be in math mode and subscript.

----- Original Message ----
From: Donald Arseneau <asnd at triumf.ca>
To: texhax at tug.org; hale1 at alcor.concordia.ca
Sent: Monday, May 25, 2009 8:41:33 AM
Subject: Re: [texhax] combing adjacent macros

Henry Kannapell <hnk at cs.stanford.edu> writes:

> I am a novice Tex user, but would like to find a method of combining
> adjacent macros that I define in a style sheet.
>
> \newcommand\hyph{\emph{(hyph.)} %% hyphenated
> \newcommand\var{\emph{(var.)} %% variation
> \newcommand\slang{\emph{(slang)} %% slang term
>
> In some cases, however, I have more than one tag. What I would like to  do is
> then have a pair of adjacent macros expand like this:
>
> \hyph\var -> (hyph., var)
>
> I think I could create a recursive macro which checks the second  command,
> and if it is in the same group of macros (there are perhaps 9  that I have
> defined), combine them. But that would be 9 different  definitions, with 9
> different checks in each one - surely there is a  better solution than that.
>
> A general solution would be able to deal with an unlimited number of
> adjacent macros. And, it should be able to define a group composed of  the 9
> macros, and do the recursion based on the group, not each  individual macro.

The important question is: are these used in a place where it is
always safe to look at the next character or command?  Things can
get messy looking ahead to see an alignment separator (&).  If they
are safe in general, are they safe to take a macro argument?  That
means they are never used right before }, or certain other contexts.

Here is my suggestion.  Expand the next token and look for a consistent
command name.  (Yes, \@ifnextchar can test commands.)

\makeatletter

\newcommand\cwtag[1]{%
\cwtag at start \let\cwtag at start\relax % start and locally disable restart
\emph{#1}%
\expandafter\cwtag at tail
}

\newcommand\cwtag at tail{%
\@ifnextchar\cwtag{\cwtag at join}{\cwtag at stop}%
}
\newcommand\cwtag at start{\begingroup (}
\newcommand\cwtag at join{,\ }
\newcommand\cwtag at stop{)\endgroup}

\makeatother

\newcommand\hyph{\cwtag{hyph.} %% hyphenated
\newcommand\var{\cwtag{var.} %% variation
\newcommand\slang{\cwtag{slang} %% slang term
....

--
Donald Arseneau                          asnd at triumf.ca
_______________________________________________
TeX FAQ: http://www.tex.ac.uk/faq
Mailing list archives: http://tug.org/pipermail/texhax/