如何创建具有可变数量参数的新命令

如何创建具有可变数量参数的新命令

我正在创建一个命令来在表中定义一个功能需求和许多非功能需求。我写了以下代码:

  \newcounter{Number}
  \newcommand{\Item}{\stepcounter{Number}\theNumber}
  \newcounter{NumberReqF}
  \newcommand{\ReqF}{F\stepcounter{NumberReqF}\theNumberReqF ~- }
  \newcounter{NumberReqNF}[NumberReqF]
  \newcommand{\ReqNF}{NF \stepcounter{NumberReqNF}\theNumberReqF .\theNumberReqNF ~- }

  \usepackage{tabularx,calc}
  \newcolumntype{Y}[1]{>{\setlength\hsize{#1\hsize}%
                   \raggedright\arraybackslash}X}
  \newcolumntype{F}{|p{\columnwidth-2\tabcolsep-2\arrayrulewidth}|}
  \setlength\extrarowheight{2pt}

  \newcommand{\TabelaRequisito}[8]{
\setcounter{NumberReqNF}{0}
\begin{table}[h]
    \noindent\begin{tabularx}{\columnwidth}{|Y{0.5}|Y{0.25}|Y{0.25}|c|c|}
        \hline
        \multicolumn{3}{|l|}{\ReqF #1} & \multicolumn{2}{l|}{Hidden (#2)}\tabularnewline
        \hline
        \multicolumn{5}{F}{#3}\tabularnewline
        \hline
        \multicolumn{5}{|c|}{Non-Functional Requirements}\tabularnewline
        \hline
        Name & Restriction & Category & Desirable & Permanent\tabularnewline
        \hline
        \ReqNF #4 & #5 & #6 & (#7) & (#8)\tabularnewline
        \hline
        \ReqNF New Non-Functional Requirement Name &  &  &  &\tabularnewline
        \hline
        % more and more requirements here...
    \end{tabularx}
\end{table}
  }

因此,我将始终使用以下命令重复使用此表格格式

 \TabelaRequisito{Functional Requirement Name}{X}{
        Functional Requirement description
        }{Name}{}{Security}{X}

在此处输入图片描述

但我只能添加一个非功能性需求,我想知道一个解决方案,可以添加我想要的任意数量的非功能性需求。一、二、三、四……

答案1

您可以像这样枚举非功能性需求(完整 MWE 重复):

\documentclass{article}

\newcounter{Number}
\newcommand{\Item}{\stepcounter{Number}\theNumber}
\newcounter{NumberReqF}
\newcommand{\ReqF}{F\stepcounter{NumberReqF}\theNumberReqF ~- }
\newcounter{NumberReqNF}[NumberReqF]
\newcommand{\ReqNF}{NF \stepcounter{NumberReqNF}\theNumberReqF .\theNumberReqNF ~- }

\usepackage{tabularx,calc}
\newcolumntype{Y}[1]{>{\setlength\hsize{#1\hsize}%
    \raggedright\arraybackslash}X}
\newcolumntype{F}{|p{\columnwidth-2\tabcolsep-2\arrayrulewidth}|}
\setlength\extrarowheight{2pt}

\newcommand\NFReq[5]{%
  \ReqNF #1 & #2 & #3 & (#4) & (#5)\tabularnewline
  \hline
}

\newcommand{\TabelaRequisito}[4]{
  \setcounter{NumberReqNF}{0}
  \begin{table}[h]
    \noindent\begin{tabularx}{\columnwidth}{|Y{0.5}|Y{0.25}|Y{0.25}|c|c|}
      \hline
      \multicolumn{3}{|l|}{\ReqF #1} & \multicolumn{2}{l|}{Hidden (#2)}\tabularnewline
      \hline
      \multicolumn{5}{F}{#3}\tabularnewline
      \hline
      \multicolumn{5}{|c|}{Non-Functional Requirements}\tabularnewline
      \hline
      Name & Restriction & Category & Desirable & Permanent\tabularnewline
      \hline
      #4%
      \ReqNF New Non-Functional Requirement Name &  &  &  &\tabularnewline
      \hline
      % more and more requirements here...
    \end{tabularx}
  \end{table}
}

\begin{document}
\TabelaRequisito{Functional Requirement Name}{X}
{Functional Requirement description}
{%
  \NFReq{Name}{}{Security}{X}{}%
  \NFReq{foo}{}{bar}{X}{}%
}

答案2

这是有可能的,但是最好不要这么做。LaTeX绝不{}对于不同的参数使用不同数量的组,它要么使用,分离列表,要么使用额外的命令。在这里我将使用额外的命令:

 \TabelaRequisito{Functional Requirement Name}{X}{
        Functional Requirement description
        }{
   \nunfuncreq{Name}{}{Security}{X}
   \nunfuncreq{zzz}{}{kjahxaxa}{Y}
   \nunfuncreq{jjj}{}{llll}{Y}
   }

因此,命令的最后一个参数可以接受任意数量的\nunfuncreq命令,然后可以将其简单定义为构成表格一行的四参数命令。

相关内容