
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 etoolbox
muchas 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)}