
Ich versuche, über eine Liste zu iterieren, deren Trennzeichen kein Komma ist. Der Grund, warum keine Kommas als Trennzeichen verwendet werden, besteht darin, dass sie Teil der Nutzlast sind. Gibt es eine Möglichkeit, über eine Liste zu iterieren, deren Trennzeichen ein Semikolon (oder ein anderes Trennzeichen) ist?
Bisher habe ich versucht
\documentclass{article}
\makeatletter
\newcommand{\ls}[1]{\@for\tmp:=#1 \do{\tmp}}
\makeatother
\begin{document}
\ls{(a,b);(c,d)}
\end{document}
Daher möchte ich eine Schleife über die durch Semikolon getrennten Tupel ausführen, also (a,b) und (c,d).
Bearbeiten: Ich habe auch versucht, Dokumentation zu zu finden \@for
, konnte aber keine finden.
Antwort1
Das etoolbox
hat viele interessante Funktionen, einschließlich der Erstellung von Listenparsern. Siehe auch die Version ohne Sternchen.
\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}
Antwort2
Sie können beispielsweise diesen Code verwenden:
\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)}