Ich möchte ein Array mit bestimmten Werten eines Zählers erstellen, der in einer foreach-Schleife verwendet werden soll. Daher möchte ich einen Befehl definieren, der den tatsächlichen Zählerwert am Ende der Liste hinzufügt. Was ich tun kann, ist:
\documentclass{standalone}
\usepackage{pgfmath,pgffor}
\begin{document}
\def\names{{"Katie","Frank","Laura","Joe"}}%
\newcounter{lines}%
\setcounter{lines}{3}%
\def\arr{1,\arabic{lines}}%
\foreach \i in \arr {%
Name \i: \pgfmathparse{\names[\i]}\pgfmathresult, }
\end{document}
Was ich aber brauche ist eine leere Liste und eine Funktion, die ich mit Werten wie zB arr
füllen kann .arr
lines
\addtoarr{\arabic{lines}}
Ich habe versucht, das lstdock
Paket wie folgt zu verwenden:
\let\arr\@empty
\def\addtolist#1#2{%
\lst@lAddTo#1{#2}}
\addtolist{\arr}{\arabic{lines}}
Aber dadurch wird ein Fehler angezeigt, den ich nicht verstehe.
Antwort1
Es gibt verschiedene Methoden, hier ist eine
\documentclass{article}
\usepackage{pgfmath,pgffor}
\begin{document}
\def\names{{"Katie","Frank","Laura","Joe"}}%
\newcounter{lines}%
\setcounter{lines}{1}%
\newcommand*\arr{}%
\newcommand{\mtadd}{%
\ifx\arr\empty
\edef\arr{\arabic{lines}}
\else\edef\arr{\arr,\arabic{lines}}
\fi}
\mtadd
\setcounter{lines}{3}%
\mtadd
\foreach \i in \arr {%
Name \i: \pgfmathparse{\names[\i]}\pgfmathresult, }
\end{document}
Antwort2
Wenn Sie lediglich daran interessiert sind, einige Inhalte einer Liste auszugeben, könnte Folgendes für Sie interessant sein:
\documentclass{article}
\usepackage{etoolbox}
\newcommand{\listsep}{, }
\makeatletter
\newcommand{\@insertlistsep}{}
\newcounter{@listname}
\newcommand{\addtolist}[1]{%
\stepcounter{@listname}% Add one person to counter
\expandafter\@namedef\expandafter{@listnames:\the@listname}{#1}}% Define counter-based name
\newcommand{\printlist}[1]{%
\renewcommand{\@insertlistsep}{\renewcommand{\@insertlistsep}{\listsep}}% https://tex.stackexchange.com/a/89187/5764
\renewcommand*{\do}[1]{\@insertlistsep Name~##1: \textbf{\@nameuse{@listnames:##1}}}% How each item will be processed
\docsvlist{#1}}% Process list
\makeatother
\begin{document}
\addtolist{Katie}% 1
\addtolist{Frank}% 2
\addtolist{Laura}% 3
\addtolist{Joe}% 4
\printlist{1,2}
\printlist{}
\printlist{1,3,4}
\printlist{3,3,3}
\end{document}
\clearlist
Zusätzliche Arbeit würde bei Bedarf darin bestehen, eine Funktion sowie eine Fehlerprüfung einzubauen, um sicherzustellen, dass Sie nicht auf Elemente außerhalb der Liste zugreifen.
Die Listenverarbeitung wird besprochen inWie iteriert man über eine durch Kommas getrennte Liste?