我有一个这样的宏:
\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 种动物”。