拆分宏中的参数

拆分宏中的参数

我有一个这样的宏:

\newcommand{\listanimals}[1]{
    Animals in the farm: #1.
}

因此使用\listanimals{pig / sheep / cow / duck / goat}将打印:

农场里的动物:猪 / 羊 / 牛 / 鸭 / 山羊。

我想知道,我可以让其他宏仅显示该参数内的某些信息吗?

例如:

\listfirsttwoanimals{pig / sheep / cow / duck / goat}

前两种动物:猪/羊。

\listanimalsafterfirsttwo{pig / sheep / cow / duck / goat}

前两位之后的动物:牛/鸭/山羊。

答案1

\documentclass{article}
\usepackage{xstring}
\newcommand\listfirsttwoanimals[1]{First two animals:
  \StrBefore[2]{#1}{/}}
\newcommand\listanimalsafterfirsttwo[1]{Animals after first two:
  \StrBehind[2]{#1}{/}} 
\begin{document}     
\listfirsttwoanimals{pig / sheep / cow / duck / goat}

\listanimalsafterfirsttwo{pig / sheep / cow / duck / goat}
\end{document}

这假设参数总是有两个以上的动物,因此,例如,\listfirsttwoanimals{pig / sheep }不返回任何动物,而 \listfirsttwoanimals{pig / sheep /}返回猪和羊。 xstring具有类似函数\IfSubStr可用于测试这一点并返回,例如,如果 N <3,则返回“我只有 N 种动物”。

相关内容