Crie uma matriz de valores de contador específicos

Crie uma matriz de valores de contador específicos

Quero criar um array contendo valores específicos de um contador para ser usado em um loop foreach. Então, quero definir um comando que adicione o valor real do contador no final da lista. O que posso fazer é:

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

Mas o que preciso é de uma lista vazia arre de uma função que possa usar para preencher arrcom valores linescomo, por exemplo \addtoarr{\arabic{lines}}.

Eu tentei usar o lstdockpacote como:

\let\arr\@empty

\def\addtolist#1#2{%
  \lst@lAddTo#1{#2}}

\addtolist{\arr}{\arabic{lines}}

Mas isso me dá um erro que não entendo.

Responder1

Existem diferentes métodos, aqui está um

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

Responder2

Se você estiver interessado apenas em divulgar algum conteúdo de uma lista, talvez o seguinte seja interessante:

insira a descrição da imagem aqui

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

Trabalho adicional, se necessário, seria construir um \clearlistrecurso, bem como alguma verificação de erros para garantir que você não acesse elementos fora da lista.

O processamento de lista é discutido emComo iterar em uma lista separada por vírgula?

informação relacionada