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:


expand to this:


How can I achieve it?


I think you should ask what you want in full generality. For your concrete example,


should work, although I didn't test it.

  • I didn't know how to ask before seeing the answer. Can you elaborate on what \relax does and why do I need separate \def ? – Łukasz Lew Sep 8 '10 at 13:39
  • Normally, \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. – TH. Sep 8 '10 at 13:50
  • This is really useful! How would one go about writing a \newcommand variant that does all this behind the scenes? – Neil Olver Oct 27 '10 at 12:29
  • 1
    \newcommand doesn't allow you to define a macro with delimited arguments, so you cannot. – TH. Oct 27 '10 at 14:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.