Traceability Matrix











up vote
2
down vote

favorite












My aim is to build an automatic Traceability Matrix at the end of my document. For that, I define all requirements to be validated at first and after, in different sections which one is tested.



The code is based on this issue, but I'd like to simplify this with an automatic generation of label name, and for that, I want to use a counter.



This is the code:



documentclass{article}

newcommand{requirements}{}
providecommand*phantomsection{}

makeatletter
newcommand{req}[1]{%
textbf{R#1}%
phantomsection
def@currentlabel{R#1}%
label{req@#1}%
g@addto@macrorequirements{{req@#1}}%
global@namedef{req@#1@ismetby}{}%
}

newcommand{meetsreq}[1]{%
ref{req@#1}%
expandafterg@addto@macrocsname req@#1@ismetbyexpandafterendcsname
expandafter {expandafter{@currentspec}}%
}

newcommand{specswithreq}[1]%
% The space before ref below is intentional and will be swallowed by xintApply
% It is not mandatory however, the thing works without it too.
{xintListWithSep{, }{xintApply { ref}{csname #1@ismetbyendcsname }}}

newcommand{spec}[1]{label{spec@#1}gdef@currentspec{spec@#1}}
% (update Jan 5, to use gdef rather than def in spec, allowing more flexible usage; has its pros and cons)
makeatother

usepackage{xinttools}

usepackage{hyperref}% check if ok with hyperlinks
hypersetup{colorlinks=true}
newcounter{argcnt}setcounter{argcnt}{0}


begin{document}


section{Requirement LIST}

[req{R1}] requirement 1

[req{R2}] requirement 2

[req{R3}] requirement 3

[req{R4}] requirement 4

[req{R5}] requirement 5

[req{R6}] requirement 6


section{section1}
setcounter{argcnt}{1}
spec{1} Test 1 covert : meetsreq{R1} meetsreq{R2}

section{section2}
setcounter{argcnt}{2}
spec{theargcnt} Test 2 covert : meetsreq{R4} meetsreq{R2}

section{section3}
setcounter{argcnt}{3}
spec{3} Test 3 covert : meetsreq{R6}

section{section4}
setcounter{argcnt}{4}
spec{4} Test 4 covert : meetsreq{R2}, meetsreq{R3}

section{Tracability MAtrix}

begin{table}[htbp]
begin{tabular}{|l|l|}
hline
Requirement & Specification \
hline
xintFor* #1 in requirementsdo {ref{#1}&specswithreq{#1}\
hline }%
end{tabular}
end{table}

end{document}


Like you can see in the picture the generation with the counter function doesn't work. The Matrix doesn't link the correct test to the good requirement.



enter image description here










share|improve this question




























    up vote
    2
    down vote

    favorite












    My aim is to build an automatic Traceability Matrix at the end of my document. For that, I define all requirements to be validated at first and after, in different sections which one is tested.



    The code is based on this issue, but I'd like to simplify this with an automatic generation of label name, and for that, I want to use a counter.



    This is the code:



    documentclass{article}

    newcommand{requirements}{}
    providecommand*phantomsection{}

    makeatletter
    newcommand{req}[1]{%
    textbf{R#1}%
    phantomsection
    def@currentlabel{R#1}%
    label{req@#1}%
    g@addto@macrorequirements{{req@#1}}%
    global@namedef{req@#1@ismetby}{}%
    }

    newcommand{meetsreq}[1]{%
    ref{req@#1}%
    expandafterg@addto@macrocsname req@#1@ismetbyexpandafterendcsname
    expandafter {expandafter{@currentspec}}%
    }

    newcommand{specswithreq}[1]%
    % The space before ref below is intentional and will be swallowed by xintApply
    % It is not mandatory however, the thing works without it too.
    {xintListWithSep{, }{xintApply { ref}{csname #1@ismetbyendcsname }}}

    newcommand{spec}[1]{label{spec@#1}gdef@currentspec{spec@#1}}
    % (update Jan 5, to use gdef rather than def in spec, allowing more flexible usage; has its pros and cons)
    makeatother

    usepackage{xinttools}

    usepackage{hyperref}% check if ok with hyperlinks
    hypersetup{colorlinks=true}
    newcounter{argcnt}setcounter{argcnt}{0}


    begin{document}


    section{Requirement LIST}

    [req{R1}] requirement 1

    [req{R2}] requirement 2

    [req{R3}] requirement 3

    [req{R4}] requirement 4

    [req{R5}] requirement 5

    [req{R6}] requirement 6


    section{section1}
    setcounter{argcnt}{1}
    spec{1} Test 1 covert : meetsreq{R1} meetsreq{R2}

    section{section2}
    setcounter{argcnt}{2}
    spec{theargcnt} Test 2 covert : meetsreq{R4} meetsreq{R2}

    section{section3}
    setcounter{argcnt}{3}
    spec{3} Test 3 covert : meetsreq{R6}

    section{section4}
    setcounter{argcnt}{4}
    spec{4} Test 4 covert : meetsreq{R2}, meetsreq{R3}

    section{Tracability MAtrix}

    begin{table}[htbp]
    begin{tabular}{|l|l|}
    hline
    Requirement & Specification \
    hline
    xintFor* #1 in requirementsdo {ref{#1}&specswithreq{#1}\
    hline }%
    end{tabular}
    end{table}

    end{document}


    Like you can see in the picture the generation with the counter function doesn't work. The Matrix doesn't link the correct test to the good requirement.



    enter image description here










    share|improve this question


























      up vote
      2
      down vote

      favorite









      up vote
      2
      down vote

      favorite











      My aim is to build an automatic Traceability Matrix at the end of my document. For that, I define all requirements to be validated at first and after, in different sections which one is tested.



      The code is based on this issue, but I'd like to simplify this with an automatic generation of label name, and for that, I want to use a counter.



      This is the code:



      documentclass{article}

      newcommand{requirements}{}
      providecommand*phantomsection{}

      makeatletter
      newcommand{req}[1]{%
      textbf{R#1}%
      phantomsection
      def@currentlabel{R#1}%
      label{req@#1}%
      g@addto@macrorequirements{{req@#1}}%
      global@namedef{req@#1@ismetby}{}%
      }

      newcommand{meetsreq}[1]{%
      ref{req@#1}%
      expandafterg@addto@macrocsname req@#1@ismetbyexpandafterendcsname
      expandafter {expandafter{@currentspec}}%
      }

      newcommand{specswithreq}[1]%
      % The space before ref below is intentional and will be swallowed by xintApply
      % It is not mandatory however, the thing works without it too.
      {xintListWithSep{, }{xintApply { ref}{csname #1@ismetbyendcsname }}}

      newcommand{spec}[1]{label{spec@#1}gdef@currentspec{spec@#1}}
      % (update Jan 5, to use gdef rather than def in spec, allowing more flexible usage; has its pros and cons)
      makeatother

      usepackage{xinttools}

      usepackage{hyperref}% check if ok with hyperlinks
      hypersetup{colorlinks=true}
      newcounter{argcnt}setcounter{argcnt}{0}


      begin{document}


      section{Requirement LIST}

      [req{R1}] requirement 1

      [req{R2}] requirement 2

      [req{R3}] requirement 3

      [req{R4}] requirement 4

      [req{R5}] requirement 5

      [req{R6}] requirement 6


      section{section1}
      setcounter{argcnt}{1}
      spec{1} Test 1 covert : meetsreq{R1} meetsreq{R2}

      section{section2}
      setcounter{argcnt}{2}
      spec{theargcnt} Test 2 covert : meetsreq{R4} meetsreq{R2}

      section{section3}
      setcounter{argcnt}{3}
      spec{3} Test 3 covert : meetsreq{R6}

      section{section4}
      setcounter{argcnt}{4}
      spec{4} Test 4 covert : meetsreq{R2}, meetsreq{R3}

      section{Tracability MAtrix}

      begin{table}[htbp]
      begin{tabular}{|l|l|}
      hline
      Requirement & Specification \
      hline
      xintFor* #1 in requirementsdo {ref{#1}&specswithreq{#1}\
      hline }%
      end{tabular}
      end{table}

      end{document}


      Like you can see in the picture the generation with the counter function doesn't work. The Matrix doesn't link the correct test to the good requirement.



      enter image description here










      share|improve this question















      My aim is to build an automatic Traceability Matrix at the end of my document. For that, I define all requirements to be validated at first and after, in different sections which one is tested.



      The code is based on this issue, but I'd like to simplify this with an automatic generation of label name, and for that, I want to use a counter.



      This is the code:



      documentclass{article}

      newcommand{requirements}{}
      providecommand*phantomsection{}

      makeatletter
      newcommand{req}[1]{%
      textbf{R#1}%
      phantomsection
      def@currentlabel{R#1}%
      label{req@#1}%
      g@addto@macrorequirements{{req@#1}}%
      global@namedef{req@#1@ismetby}{}%
      }

      newcommand{meetsreq}[1]{%
      ref{req@#1}%
      expandafterg@addto@macrocsname req@#1@ismetbyexpandafterendcsname
      expandafter {expandafter{@currentspec}}%
      }

      newcommand{specswithreq}[1]%
      % The space before ref below is intentional and will be swallowed by xintApply
      % It is not mandatory however, the thing works without it too.
      {xintListWithSep{, }{xintApply { ref}{csname #1@ismetbyendcsname }}}

      newcommand{spec}[1]{label{spec@#1}gdef@currentspec{spec@#1}}
      % (update Jan 5, to use gdef rather than def in spec, allowing more flexible usage; has its pros and cons)
      makeatother

      usepackage{xinttools}

      usepackage{hyperref}% check if ok with hyperlinks
      hypersetup{colorlinks=true}
      newcounter{argcnt}setcounter{argcnt}{0}


      begin{document}


      section{Requirement LIST}

      [req{R1}] requirement 1

      [req{R2}] requirement 2

      [req{R3}] requirement 3

      [req{R4}] requirement 4

      [req{R5}] requirement 5

      [req{R6}] requirement 6


      section{section1}
      setcounter{argcnt}{1}
      spec{1} Test 1 covert : meetsreq{R1} meetsreq{R2}

      section{section2}
      setcounter{argcnt}{2}
      spec{theargcnt} Test 2 covert : meetsreq{R4} meetsreq{R2}

      section{section3}
      setcounter{argcnt}{3}
      spec{3} Test 3 covert : meetsreq{R6}

      section{section4}
      setcounter{argcnt}{4}
      spec{4} Test 4 covert : meetsreq{R2}, meetsreq{R3}

      section{Tracability MAtrix}

      begin{table}[htbp]
      begin{tabular}{|l|l|}
      hline
      Requirement & Specification \
      hline
      xintFor* #1 in requirementsdo {ref{#1}&specswithreq{#1}\
      hline }%
      end{tabular}
      end{table}

      end{document}


      Like you can see in the picture the generation with the counter function doesn't work. The Matrix doesn't link the correct test to the good requirement.



      enter image description here







      cross-referencing xint






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 19 at 23:58









      Andrew

      29.4k34178




      29.4k34178










      asked Jan 5 at 11:34









      Darkilious

      132




      132






















          1 Answer
          1






          active

          oldest

          votes

















          up vote
          2
          down vote



          accepted










          newcommand{spec}[1]{label{spec@#1}def@currentspec{spec@#1}}



          will use the argument #1, in this case theargcount. This is evaluated too late here, you need the value (or expansion) of theargcount in the very moment spec is applied, i.e. use xdef@currentspec{spec@#1}.



          documentclass{article}

          newcommand{requirements}{}

          makeatletter
          newcommand{req}[1]{%
          textbf{R#1}%
          phantomsection
          def@currentlabel{R#1}%
          label{req@#1}%
          g@addto@macrorequirements{{req@#1}}%
          global@namedef{req@#1@ismetby}{}%
          }

          newcommand{meetsreq}[1]{%
          ref{req@#1}%
          expandafterg@addto@macrocsname req@#1@ismetbyexpandafterendcsname
          expandafter {expandafter{@currentspec}}%
          }

          newcommand{specswithreq}[1]%
          % The space before ref below is intentional and will be swallowed by xintApply
          % It is not mandatory however, the thing works without it too.
          {xintListWithSep{, }{xintApply { ref}{csname #1@ismetbyendcsname }}}

          newcommand{spec}[1]{label{spec@#1}xdef@currentspec{spec@#1}}
          % (update Jan 5, to use gdef rather than def in spec, allowing more flexible usage; has its pros and cons)
          makeatother

          usepackage{xinttools}

          usepackage{hyperref}% check if ok with hyperlinks
          hypersetup{colorlinks=true}
          newcounter{argcnt}setcounter{argcnt}{0}


          begin{document}


          section{Requirement LIST}

          [req{R1}] requirement 1

          [req{R2}] requirement 2

          [req{R3}] requirement 3

          [req{R4}] requirement 4

          [req{R5}] requirement 5

          [req{R6}] requirement 6


          section{section1}
          setcounter{argcnt}{1}
          spec{1} Test 1 covert : meetsreq{R1} meetsreq{R2}

          section{section2}
          setcounter{argcnt}{2}
          spec{theargcnt} Test 2 covert : meetsreq{R4} meetsreq{R2}

          section{section3}
          setcounter{argcnt}{3}
          spec{3} Test 3 covert : meetsreq{R6}

          section{section4}
          setcounter{argcnt}{4}
          spec{4} Test 4 covert : meetsreq{R2}, meetsreq{R3}

          clearpage
          section{Tracability MAtrix}

          begin{table}[htbp]
          begin{tabular}{|l|l|}
          hline
          Requirement & Specification \
          hline
          xintFor* #1 in requirementsdo {ref{#1}&specswithreq{#1}\
          hline }%
          end{tabular}
          end{table}

          end{document}





          share|improve this answer





















            Your Answer








            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "85"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














             

            draft saved


            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f408935%2ftraceability-matrix%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            2
            down vote



            accepted










            newcommand{spec}[1]{label{spec@#1}def@currentspec{spec@#1}}



            will use the argument #1, in this case theargcount. This is evaluated too late here, you need the value (or expansion) of theargcount in the very moment spec is applied, i.e. use xdef@currentspec{spec@#1}.



            documentclass{article}

            newcommand{requirements}{}

            makeatletter
            newcommand{req}[1]{%
            textbf{R#1}%
            phantomsection
            def@currentlabel{R#1}%
            label{req@#1}%
            g@addto@macrorequirements{{req@#1}}%
            global@namedef{req@#1@ismetby}{}%
            }

            newcommand{meetsreq}[1]{%
            ref{req@#1}%
            expandafterg@addto@macrocsname req@#1@ismetbyexpandafterendcsname
            expandafter {expandafter{@currentspec}}%
            }

            newcommand{specswithreq}[1]%
            % The space before ref below is intentional and will be swallowed by xintApply
            % It is not mandatory however, the thing works without it too.
            {xintListWithSep{, }{xintApply { ref}{csname #1@ismetbyendcsname }}}

            newcommand{spec}[1]{label{spec@#1}xdef@currentspec{spec@#1}}
            % (update Jan 5, to use gdef rather than def in spec, allowing more flexible usage; has its pros and cons)
            makeatother

            usepackage{xinttools}

            usepackage{hyperref}% check if ok with hyperlinks
            hypersetup{colorlinks=true}
            newcounter{argcnt}setcounter{argcnt}{0}


            begin{document}


            section{Requirement LIST}

            [req{R1}] requirement 1

            [req{R2}] requirement 2

            [req{R3}] requirement 3

            [req{R4}] requirement 4

            [req{R5}] requirement 5

            [req{R6}] requirement 6


            section{section1}
            setcounter{argcnt}{1}
            spec{1} Test 1 covert : meetsreq{R1} meetsreq{R2}

            section{section2}
            setcounter{argcnt}{2}
            spec{theargcnt} Test 2 covert : meetsreq{R4} meetsreq{R2}

            section{section3}
            setcounter{argcnt}{3}
            spec{3} Test 3 covert : meetsreq{R6}

            section{section4}
            setcounter{argcnt}{4}
            spec{4} Test 4 covert : meetsreq{R2}, meetsreq{R3}

            clearpage
            section{Tracability MAtrix}

            begin{table}[htbp]
            begin{tabular}{|l|l|}
            hline
            Requirement & Specification \
            hline
            xintFor* #1 in requirementsdo {ref{#1}&specswithreq{#1}\
            hline }%
            end{tabular}
            end{table}

            end{document}





            share|improve this answer

























              up vote
              2
              down vote



              accepted










              newcommand{spec}[1]{label{spec@#1}def@currentspec{spec@#1}}



              will use the argument #1, in this case theargcount. This is evaluated too late here, you need the value (or expansion) of theargcount in the very moment spec is applied, i.e. use xdef@currentspec{spec@#1}.



              documentclass{article}

              newcommand{requirements}{}

              makeatletter
              newcommand{req}[1]{%
              textbf{R#1}%
              phantomsection
              def@currentlabel{R#1}%
              label{req@#1}%
              g@addto@macrorequirements{{req@#1}}%
              global@namedef{req@#1@ismetby}{}%
              }

              newcommand{meetsreq}[1]{%
              ref{req@#1}%
              expandafterg@addto@macrocsname req@#1@ismetbyexpandafterendcsname
              expandafter {expandafter{@currentspec}}%
              }

              newcommand{specswithreq}[1]%
              % The space before ref below is intentional and will be swallowed by xintApply
              % It is not mandatory however, the thing works without it too.
              {xintListWithSep{, }{xintApply { ref}{csname #1@ismetbyendcsname }}}

              newcommand{spec}[1]{label{spec@#1}xdef@currentspec{spec@#1}}
              % (update Jan 5, to use gdef rather than def in spec, allowing more flexible usage; has its pros and cons)
              makeatother

              usepackage{xinttools}

              usepackage{hyperref}% check if ok with hyperlinks
              hypersetup{colorlinks=true}
              newcounter{argcnt}setcounter{argcnt}{0}


              begin{document}


              section{Requirement LIST}

              [req{R1}] requirement 1

              [req{R2}] requirement 2

              [req{R3}] requirement 3

              [req{R4}] requirement 4

              [req{R5}] requirement 5

              [req{R6}] requirement 6


              section{section1}
              setcounter{argcnt}{1}
              spec{1} Test 1 covert : meetsreq{R1} meetsreq{R2}

              section{section2}
              setcounter{argcnt}{2}
              spec{theargcnt} Test 2 covert : meetsreq{R4} meetsreq{R2}

              section{section3}
              setcounter{argcnt}{3}
              spec{3} Test 3 covert : meetsreq{R6}

              section{section4}
              setcounter{argcnt}{4}
              spec{4} Test 4 covert : meetsreq{R2}, meetsreq{R3}

              clearpage
              section{Tracability MAtrix}

              begin{table}[htbp]
              begin{tabular}{|l|l|}
              hline
              Requirement & Specification \
              hline
              xintFor* #1 in requirementsdo {ref{#1}&specswithreq{#1}\
              hline }%
              end{tabular}
              end{table}

              end{document}





              share|improve this answer























                up vote
                2
                down vote



                accepted







                up vote
                2
                down vote



                accepted






                newcommand{spec}[1]{label{spec@#1}def@currentspec{spec@#1}}



                will use the argument #1, in this case theargcount. This is evaluated too late here, you need the value (or expansion) of theargcount in the very moment spec is applied, i.e. use xdef@currentspec{spec@#1}.



                documentclass{article}

                newcommand{requirements}{}

                makeatletter
                newcommand{req}[1]{%
                textbf{R#1}%
                phantomsection
                def@currentlabel{R#1}%
                label{req@#1}%
                g@addto@macrorequirements{{req@#1}}%
                global@namedef{req@#1@ismetby}{}%
                }

                newcommand{meetsreq}[1]{%
                ref{req@#1}%
                expandafterg@addto@macrocsname req@#1@ismetbyexpandafterendcsname
                expandafter {expandafter{@currentspec}}%
                }

                newcommand{specswithreq}[1]%
                % The space before ref below is intentional and will be swallowed by xintApply
                % It is not mandatory however, the thing works without it too.
                {xintListWithSep{, }{xintApply { ref}{csname #1@ismetbyendcsname }}}

                newcommand{spec}[1]{label{spec@#1}xdef@currentspec{spec@#1}}
                % (update Jan 5, to use gdef rather than def in spec, allowing more flexible usage; has its pros and cons)
                makeatother

                usepackage{xinttools}

                usepackage{hyperref}% check if ok with hyperlinks
                hypersetup{colorlinks=true}
                newcounter{argcnt}setcounter{argcnt}{0}


                begin{document}


                section{Requirement LIST}

                [req{R1}] requirement 1

                [req{R2}] requirement 2

                [req{R3}] requirement 3

                [req{R4}] requirement 4

                [req{R5}] requirement 5

                [req{R6}] requirement 6


                section{section1}
                setcounter{argcnt}{1}
                spec{1} Test 1 covert : meetsreq{R1} meetsreq{R2}

                section{section2}
                setcounter{argcnt}{2}
                spec{theargcnt} Test 2 covert : meetsreq{R4} meetsreq{R2}

                section{section3}
                setcounter{argcnt}{3}
                spec{3} Test 3 covert : meetsreq{R6}

                section{section4}
                setcounter{argcnt}{4}
                spec{4} Test 4 covert : meetsreq{R2}, meetsreq{R3}

                clearpage
                section{Tracability MAtrix}

                begin{table}[htbp]
                begin{tabular}{|l|l|}
                hline
                Requirement & Specification \
                hline
                xintFor* #1 in requirementsdo {ref{#1}&specswithreq{#1}\
                hline }%
                end{tabular}
                end{table}

                end{document}





                share|improve this answer












                newcommand{spec}[1]{label{spec@#1}def@currentspec{spec@#1}}



                will use the argument #1, in this case theargcount. This is evaluated too late here, you need the value (or expansion) of theargcount in the very moment spec is applied, i.e. use xdef@currentspec{spec@#1}.



                documentclass{article}

                newcommand{requirements}{}

                makeatletter
                newcommand{req}[1]{%
                textbf{R#1}%
                phantomsection
                def@currentlabel{R#1}%
                label{req@#1}%
                g@addto@macrorequirements{{req@#1}}%
                global@namedef{req@#1@ismetby}{}%
                }

                newcommand{meetsreq}[1]{%
                ref{req@#1}%
                expandafterg@addto@macrocsname req@#1@ismetbyexpandafterendcsname
                expandafter {expandafter{@currentspec}}%
                }

                newcommand{specswithreq}[1]%
                % The space before ref below is intentional and will be swallowed by xintApply
                % It is not mandatory however, the thing works without it too.
                {xintListWithSep{, }{xintApply { ref}{csname #1@ismetbyendcsname }}}

                newcommand{spec}[1]{label{spec@#1}xdef@currentspec{spec@#1}}
                % (update Jan 5, to use gdef rather than def in spec, allowing more flexible usage; has its pros and cons)
                makeatother

                usepackage{xinttools}

                usepackage{hyperref}% check if ok with hyperlinks
                hypersetup{colorlinks=true}
                newcounter{argcnt}setcounter{argcnt}{0}


                begin{document}


                section{Requirement LIST}

                [req{R1}] requirement 1

                [req{R2}] requirement 2

                [req{R3}] requirement 3

                [req{R4}] requirement 4

                [req{R5}] requirement 5

                [req{R6}] requirement 6


                section{section1}
                setcounter{argcnt}{1}
                spec{1} Test 1 covert : meetsreq{R1} meetsreq{R2}

                section{section2}
                setcounter{argcnt}{2}
                spec{theargcnt} Test 2 covert : meetsreq{R4} meetsreq{R2}

                section{section3}
                setcounter{argcnt}{3}
                spec{3} Test 3 covert : meetsreq{R6}

                section{section4}
                setcounter{argcnt}{4}
                spec{4} Test 4 covert : meetsreq{R2}, meetsreq{R3}

                clearpage
                section{Tracability MAtrix}

                begin{table}[htbp]
                begin{tabular}{|l|l|}
                hline
                Requirement & Specification \
                hline
                xintFor* #1 in requirementsdo {ref{#1}&specswithreq{#1}\
                hline }%
                end{tabular}
                end{table}

                end{document}






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Jan 5 at 12:27









                Christian Hupfer

                146k14188379




                146k14188379






























                     

                    draft saved


                    draft discarded



















































                     


                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f408935%2ftraceability-matrix%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    mysqli_query(): Empty query in /home/lucindabrummitt/public_html/blog/wp-includes/wp-db.php on line 1924

                    How to change which sound is reproduced for terminal bell?

                    Can I use Tabulator js library in my java Spring + Thymeleaf project?