Erstellen Sie ein Array mit bestimmten Zählerwerten

Erstellen Sie ein Array mit bestimmten Zählerwerten

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 arrfüllen kann .arrlines\addtoarr{\arabic{lines}}

Ich habe versucht, das lstdockPaket 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:

Bildbeschreibung hier eingeben

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

\clearlistZusä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?

verwandte Informationen