将计数器存储在列表中

将计数器存储在列表中

我有某种列表,想将实际的枚举计数添加到该列表中。我假设,在我的问题中,我只是以某种方式存储指向该计数器的指针,而不是值本身,因此即使存储的计数器值也会随着计数器本身的增加而增加。我甚至尝试定义一个临时计数器,将其设置为枚举计数器的值,但我在某处读到,我应该扩展计数器,所以我不知道该怎么做。

\documentclass{scrartcl}
\usepackage{ifthen}

\def\aliste{}
\def\zaliste#1\relax{\gdef\aliste{#1}}
\def\addtoaliste#1{%
  \ifthenelse{\equal{\aliste}{}}{%
    \expandafter\zaliste\aliste#1\relax
  }{\expandafter\zaliste\aliste,#1\relax
  }%
}

\begin{document}
    Value: \aliste\\
    \addtoaliste{A}
    Value: \aliste\\ %Returns A
    \begin{enumerate}
        \item 
            Output: \arabic{enumi}\\ %is 1
            \addtoaliste{\arabic{enumi}} %adds 1 to the list
            \aliste %returns A,1
        \item 
            Output: \arabic{enumi}\\ %is 2
            \addtoaliste{\arabic{enumi}} %shall add 2 to the list
            Value: \aliste %returns A,2,2
    \end{enumerate}
    Value: \aliste %returns A,2,2
\end{document}

答案1

我删除ifthen(因为它被认为过时的) 并在添加某些内容之前使用常规\ifx\aliste\relax测试来查看 的值\aliste。请注意,添加使用\xdef-ae xpandable 版本\gdef(这是一个g全局def初始化)。需要全局定义才能使列表添加在作用域 ( enumerate) 环境之外存活。

在此处输入图片描述

\documentclass{article}

\let\aliste\relax
\def\addtoaliste#1{%
  \ifx\aliste\relax
    \xdef\aliste{#1}% List is empty. Just add #1
  \else
    \xdef\aliste{\aliste,#1}% List is non-empty. Add old list, comma and #1
  \fi
}

\begin{document}
Value: \aliste \\

\addtoaliste{A}

Value: \aliste \\ % returns A

\begin{enumerate}
  \item 
    Output: \arabic{enumi} \\ % is 1
    \addtoaliste{\arabic{enumi}} % adds 1 to the list
    Value: \aliste % returns A,1
  \item 
    Output: \arabic{enumi} \\ % is 2
    \addtoaliste{\arabic{enumi}} % shall add 2 to the list
    Value: \aliste % returns A,1,2
\end{enumerate}

Value: \aliste % returns A,1,2

\end{document}

相关内容