平均能量损失

平均能量损失

有人能解释一下为什么\ifinlistcs当我尝试使用\foreach来提供每个测试元素时 总是错误的吗?当然,我可以使用,\dolistcsloop因为这是处理 列表结构的推荐方法etoolbox,但我有我的理由(见下文)。

平均能量损失

\documentclass{article}

\usepackage{etoolbox}
\usepackage{pgffor}

\begin{document}

\listcsgadd{myList}{elem0}
\listcsgadd{myList}{elem1}
\listcsgadd{myList}{elem2}
\listcsgadd{myList}{elem3}

% this doesn't work
\foreach \x in {elem0, elem..., elem4}{%
  \ifinlistcs{\x}{myList}{\x{} exists in list}{\x{} doesn't exist in list}\\
}

% this works
\renewcommand*{\do}[1]{%
  \ifinlistcs{#1}{myList}{#1 exists in list}{#1 doesn't exist in list}\\
}
\dolistcsloop{myList}

\end{document}

在此处输入图片描述

为什么不\dolistcsloop

我实际上想嵌套两个\dolistcsloop以遍历两个列表。不幸的是,我相信这意味着我必须嵌套两个,\renewcommand*{\do}[1]{}我认为这行不通(至少在我短暂尝试时没有)。所以我想使用pgffor's\foreach作为解决方法,我将其用于\dolistcsloop外部列表和\foreach内部列表。

最终,我尝试迭代这种类型的数据记录结构我对其进行了轻微修改,以适应每个数据记录的附加列表结构(例如,任务列表,其中每个任务都有一个里程碑列表)。如果我可以\foreach使用\ifinlistcs,那么我将有一个可行的解决方案来实现我想要做的事情(这也是为什么我想将其作为问题的重点)。

但是如果有其他方法可以创建类似的数据记录结构(即数据记录列表,每个数据记录都有多个数据字段-值对,并且一些数据字段是列表)并且可以完全迭代,那么我也愿意接受这样的解决方案。

答案1

您需要在对其第一个参数进行操作\x之前进行扩展。\ifinlistcs

\documentclass{article}

\usepackage{etoolbox}
\usepackage{pgffor}

\begin{document}

\listcsgadd{myList}{elem0}
\listcsgadd{myList}{elem1}
\listcsgadd{myList}{elem2}
\listcsgadd{myList}{elem3}

% this works
\foreach \x in {elem0, elem..., elem4}{%
  \expandafter\ifinlistcs\expandafter{\x}{myList}
    {\x{} exists in list}{\x{} doesn't exist in list}\par
}

% this works
\renewcommand*{\do}[1]{%
  \ifinlistcs{#1}{myList}{#1 exists in list}{#1 doesn't exist in list}\par
}
\dolistcsloop{myList}

\end{document}

在此处输入图片描述

相关内容