检查两个逗号分隔的列表是否至少有一个共同部分

检查两个逗号分隔的列表是否至少有一个共同部分

我正在尝试根据职位名称进行有条件的导出。

我目前得到的是:

\def\defaultexport#1{\gdef\@defaultexport{#1}}
\newcommand\setdefaultexport[2][main]{
  \edef\@jobnameextracted{\jobname}
  \def\@jobnamedefault{#1}
  \@onelevel@sanitize\@jobnamedefault
  \ifx\@jobnameextracted\@jobnamedefault%
    \defaultexport{#2}
  \else
    \defaultexport{\jobname}
  \fi
}

通过这种方式,我可以使用设置默认导出

\setdefaultexport[myfilename]{targetA,targetB}

如果设置了作业名称(例如--jobname=targetC),它会使用该作业名称。

现在我需要一个命令,如果列表中至少有一个包含在上面给出的列表中,则打印内容:

\printcond{targetB,targetD}{
My Text Block
}

我尝试使用\readlist,但是,它似乎不起作用

\newcommand\printcond[2]{
  \setsepchar{,}
  \readlist*\exporttargets{\@defaultexport}
   %if #1 has at least one common item with \exporttargets
   % -> Print #2
   % else do nothing
}

好像没有拆分列表。

答案1

比较列表很简单:

\documentclass{article}
\usepackage{listofitems}
\newcommand\comparelists[2]{%
  \def\itemmatch{F}%
  \foreachitem\z\in#1[]{%
    \foreachitem\zz\in#2[]{%
      \ifx\z\zz\def\itemmatch{T}\fi%
    }%
  }%
}
\begin{document}
\readlist*\listA{xyz, pdq, latex, junk}
\readlist*\listB{xabc, def, pdq}
\readlist*\listC{ghi, jk, lmnop}

\comparelists\listA\listB: \itemmatch

\comparelists\listA\listC: \itemmatch
\end{document}

在此处输入图片描述

由于 OP 没有 MWE,因此无法完全清楚他想要做什么。不过,我要指出的是,\setdefaultexport[myfilename]{targetA,targetB}定义\@defaultexport为字面意思\jobname

因此,\readlist*\exporttargets{\@defaultexport}应扩大恰好一次 \jobname并将其作为逗号分隔的列表进行搜索。

相关内容