突出显示列表中的项目

突出显示列表中的项目

我正在尝试创建一个宏,其中可选项使列表中的某项加粗。我可以使用 expl3/xparse 包处理列表,并且可以比较两个字符串,但我无法同时执行这两项操作。是否可以将比较作为接受一个参数的封装宏返回,或者可以扩展 ProcessList 来处理两个参数?我有这里还有其他帖子,但似乎找不到任何符合此用例的内容。

\documentclass{article}
\ExplSyntaxOn
\newcommand{\compare}[2]{\ifthenelse{\equal{#1}{#2}}{\textbf{#1}}{\emph{#2}}}
\NewDocumentCommand\within{O{} >{\SplitList{,}}m}{%
 \def\compari{\compare{#1}{##2}}
 \ProcessList{#2}{\compari}%
}
\ExplSyntaxOff

\begin{document}
\compare{apples}{bananas}
\compare{apples}{apples}
\within{apples}{apples,bananas}
\end{document}

预期输出

香蕉

苹果

苹果香蕉

答案1

以下解决方案使用\@for循环,该循环需要逗号分隔的列表。但仍有一个错误,因为如果列表包含空格,此代码将崩溃。

\documentclass{article}

\makeatletter
\newcommand*{\within}[2]{%
\def\@tempa{#1}%
\def\separator{\def\separator{,\space}}% to place the comma in the printed list only after the first iteration
\@for\x:=#2\do{\separator\ifx\@tempa\x\textbf{\x}\else\emph{\x}\fi}%
}
\makeatother

\begin{document}

\within{apples}{apples,bananas,pears,apples,strawberries} % the apples are bold (twice)

\within{pears}{apples,bananas,pears,apples,strawberries} % the pears are bold

\end{document}

相关内容