[texhax] combing adjacent macros
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/
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