Recorre una lista con un delimitador diferente de la coma

Recorre una lista con un delimitador diferente de la coma

Estoy intentando iterar sobre una lista cuyo delimitador no es una coma. La razón para no utilizar comas como delimitadores es que forman parte de la carga útil. ¿Hay alguna manera de iterar sobre una lista en la que el delimitador es un punto y coma (o cualquier otro delimitador)?

Hasta ahora lo he intentado

\documentclass{article}

\makeatletter
\newcommand{\ls}[1]{\@for\tmp:=#1 \do{\tmp}}
\makeatother

\begin{document}

\ls{(a,b);(c,d)}

\end{document}

Por lo tanto, me gustaría recorrer las tuplas separadas por punto y coma, es decir (a,b) y (c,d).

Editar: También estaba intentando encontrar documentación sobre \@for, pero no pude encontrar ninguna.

Respuesta1

Tiene etoolboxmuchas características interesantes, incluida la creación de analizadores de listas. Vea también la versión sin estrellas.

\documentclass[a4paper]{memoir}
\usepackage{etoolbox}
\begin{document}
\newcommand\handler[1]{item: #1\par}
\DeclareListParser*\forsemicolonlist{;}
\forsemicolonlist\handler{(a,b);(c,d);(e,f)}
\end{document}

Respuesta2

Por ejemplo, puedes usar este código:

\def\ls#1{\lsA#1;;}
\def\lsA#1;{\ifx;#1;\else \dosomething{#1}\expandafter\lsA\fi}
\def\dosomething#1{\message{I am doing something with #1}}

\ls{(a,b);(c,d);(e,f)}

información relacionada