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?
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?
I 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.
\relaxtells 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.\swaptakes a single parameter and so I defined it so that\swap{1,10}expands to\doswap 1,10\relax. Then\doswapreads1as its first argument and10as its second argument and so it expands to{10,1}, exactly as you wanted. – TH. Sep 08 '10 at 13:50\newcommandvariant that does all this behind the scenes? – Neil Olver Oct 27 '10 at 12:29\newcommanddoesn't allow you to define a macro with delimited arguments, so you cannot. – TH. Oct 27 '10 at 14:05