I would like to learn to manipulate comma separated lists in Latex. To give a concreet but artificial example, I would like to have this command:
\swap{1,10}
expand to this:
{10,1}
How can I achieve it?
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It only takes a minute to sign up.
Sign up to join this communityI think you should ask what you want in full generality. For your concrete example,
\newcommand*\swap[1]{\doswap#1\relax}
\def\doswap#1,#2\relax{{#2,#1}}
should work, although I didn't test it.
\relax
tells TeX to do nothing. Here, I was just using it as a delimiter for the second argument to \doswap
. As for why you need the separate \def
, I cannot think of a way to do this without defining a second control sequence. \swap
takes a single parameter and so I defined it so that \swap{1,10}
expands to \doswap 1,10\relax
. Then \doswap
reads 1
as its first argument and 10
as its second argument and so it expands to {10,1}
, exactly as you wanted.
\newcommand
variant that does all this behind the scenes?
Oct 27, 2010 at 12:29
\newcommand
doesn't allow you to define a macro with delimited arguments, so you cannot.