使用逗号分隔列表进行成员资格检查

使用逗号分隔列表进行成员资格检查

有谁知道一种简单的方法来检查某个项目是否是逗号分隔列表中的成员?

像这样的事情就太好了:

\ifmember{elem1}{elem1,elem2,elem3}{true}{false}

true由于elem1在列表中,因此上述内容将扩展为。

谢谢

答案1

LaTeX 已经内置了这样的测试,因此您只需定义所需的语法:

\documentclass{article}

\makeatletter
\newcommand\ifmember[2]{%
\in@{#1}{#2}%
\ifin@
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
\makeatother

\begin{document}


\ifmember{elem1}{elem1,elem2,elem3}{true}{false}

\ifmember{elem4}{elem1,elem2,elem3}{true}{false}

\end{document}

答案2

这是一个快速expl3(嗯,xparse方法)用于检查第二个参数是否在列表中。但是,clist 变量通常会在命令宏中,否则您会知道它是否在列表中。

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\IsMember}{mm+m+m}{%
  \clist_set:Nx \l_tmpa_clist {#1}
  \clist_if_in:NnTF \l_tmpa_clist {#2} {#3} {#4}
}
\ExplSyntaxOff


\newcommand{\foo}{%
  elem1,elem2,elem3%
}
\begin{document}
\IsMember{\foo}{elem1}{true}{false}

\IsMember{\foo}{elem5}{true}{false}
\end{document}

相关内容