![检查两个逗号分隔的列表是否至少有一个共同部分](https://linux22.com/image/396458/%E6%A3%80%E6%9F%A5%E4%B8%A4%E4%B8%AA%E9%80%97%E5%8F%B7%E5%88%86%E9%9A%94%E7%9A%84%E5%88%97%E8%A1%A8%E6%98%AF%E5%90%A6%E8%87%B3%E5%B0%91%E6%9C%89%E4%B8%80%E4%B8%AA%E5%85%B1%E5%90%8C%E9%83%A8%E5%88%86.png)
我正在尝试根据职位名称进行有条件的导出。
我目前得到的是:
\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
并将其作为逗号分隔的列表进行搜索。