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 arr
e de uma função que possa usar para preencher arr
com valores lines
como, por exemplo \addtoarr{\arabic{lines}}
.
Eu tentei usar o lstdock
pacote 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:
\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 \clearlist
recurso, 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?