1

I am creating one command to define a functional requirement and many non functional requeriment in a table. I wrote the following code:

  \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}
  }

So I would reuse this table format all the time with the command

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

enter image description here

But I am limited to add just one non-functional requirement, I would like to know a solution that I could add as many as non-functional requirement I want. One, two, three, four,...

  • Could you add an example of how you want to use this for several "non-functional requirements". – Peter Grill Mar 28 '12 at 20:15
2

You can enumerate non-functional requirements like this (full MWE repeated):

\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

It is possible, but it is best not to do it. LaTeX never uses different numbers of {} groups for varying arguments, it either uses , separated lists or extra commands. Here I would use extra commands:

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

so the last argument of your command takes any number of \nunfuncreq commands, and that can then have a simple definition as a four-argument command making a row of the table.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.