如何定义一个至少包含一个强制参数、可选参数和条件文本的新命令?

如何定义一个至少包含一个强制参数、可选参数和条件文本的新命令?

我想构造一个命令,该命令至少需要一个(强制)参数,最多可以有多个(很少,比如 10 个或 50 个)可选参数。如果存在任何可选参数,我希望该命令包含不同的代码。

\NewDocumentCommand \myDummy { m o }{
    \IfNoValueTF {#2}
        { \DoSomethingJustWithMandatoryArgument {
                publication \hyperref[#1]{ \#\,\ref{#1}}
            } 
        }
        { \DoSomethingWithBothArguments {
                publications \hyperref[#1]{ \#\,\ref{#1}}, \hyperref[#2]{\#\,\ref{#2}}   
            }
        }
}

\mydummy{a}这与和配合良好\mydummy{a}{b},产生了所需的结果。

  • 如何使其与更多参数一起工作,比如说 3 个或 10 个?

  • 就语法而言,如何\mydummy在内使用多个参数 进行调用{},例如\mydummy{a}\mydummy{a,b,c,d,e,f}

答案1

此方法使用xparse参数处理器(请参阅文档第 3.2 节)来实现所描述的行为。我用 代替\textbf\ref省略了\hyperref

\documentclass{article}
\usepackage{xparse}

\newcounter{NumberOfArgs}
\setcounter{NumberOfArgs}{0}

\NewDocumentCommand \myDummy { >{\SplitList{,}} m} {%
    \setcounter{NumberOfArgs}{0}%
    \ProcessList{#1}{\Count}% 
    \ifnum\value{NumberOfArgs}>1  Publications \else Publication \fi 
    \setcounter{NumberOfArgs}{1}\ProcessList{#1}{\reference}%
    }

\NewDocumentCommand \Count {m} {\addtocounter{NumberOfArgs}{1}}

\NewDocumentCommand \reference {m} {%
    \ifnum\value{NumberOfArgs}>1 ,\space\else\relax\fi
    \#\,\textbf{#1}%
    \addtocounter{NumberOfArgs}{1}%
    }

\begin{document}

\myDummy{a,b,c}

\myDummy{a}

\myDummy{a,b,c,d,e,f,g}

\end{document}  

在此处输入图片描述

相关内容