Loop sobre uma lista com delimitador diferente de vírgula

Loop sobre uma lista com delimitador diferente de vírgula

Estou tentando iterar uma lista cujo delimitador não é uma vírgula. A razão para não usar vírgulas como delimitadores é que elas fazem parte da carga útil. Existe uma maneira de iterar em uma lista na qual o delimitador é um ponto e vírgula (ou qualquer outro delimitador)?

Até agora, eu tentei

\documentclass{article}

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

\begin{document}

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

\end{document}

Portanto, eu gostaria de percorrer as tuplas separadas por ponto e vírgula, ou seja, (a,b) e (c,d).

Editar: eu também estava tentando encontrar alguma documentação sobre o \@for, mas não consegui encontrar nenhuma.

Responder1

O etoolboxtem muitos recursos interessantes, incluindo a criação de analisadores de listas. Veja também a versão sem estrela.

\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}

Responder2

Por exemplo, você pode 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)}

informação relacionada