"Sequência de controle indefinida" ao usar \pgfkeys com tabelas

"Sequência de controle indefinida" ao usar \pgfkeys com tabelas

Estou tentando compor um documento SRS e gostaria de criar macros personalizadas para integrar elementos em uma tabela.

Ou seja, o que quero fazer é especificar os requisitos para um software desta forma:

\SrsReqTableStart
\SrsReqAdd{%
        code=A001,
        desc=Gestione stati lavorazione, 
        prior=5
    }
\SrsReqTableEnd

O problema é que, ao combinar argumentos de valor-chave com linhas da tabela, após o primeiro e comercial e caractere, ele para de reconhecer comandos personalizados.

Para ficar mais claro, este código define as macros:

\newcommand{\SrsReqTableStart}{
\vspace{10pt}
\begin{tabular}{ l l l l l }
    ID & Nome & Prior. & Sforzo \\
\hline
}

\newcommand{\SrsReqTableEnd}{
\end{tabular}
}

\pgfkeys{
 /srsreq/.is family, /srsreq,
 code/.estore in = \srsReqCode,
 desc/.estore in = \srsReqDesc,
 prior/.estore in = \srsReqPrior,
}
\newcommand{\SrsReqAdd}[1]{
\pgfkeys{/srsreq, #1}%
    \hyperref[\srsReqCode]{\srsReqCode} \srsReqDesc   &%
    \tabularnewline
}

E funciona assim, mas quando escrevo algum comando (o texto funciona) após o caractere &, ocorre um erro.

\hyperref[\srsReqCode]{\srsReqCode}  & \srsReqDesc %

Já tentei pesquisar, alterar comandos e pacotes de chave/valor. Nada mudou esta situação.

Obrigado

Responder1

Resolvido alterando o código e com um pequeno hack, redefino as variáveis ​​em cada linha, caso contrário elas apenas obtêm os valores padrão. Parece funcionar, então postarei isso como resposta se alguém precisar.

Também funciona com valores padrão.

Minha tabela de requisitos funcionais do SRS agora está definida assim:

\SrsReqTableStart
    \SrsReqAdd[code=RF-CL-01,effort=8 ,prior=  ]{Requirement 1}
    \SrsReqAdd[code=RF-CL-02,effort=  ,prior=5 ]{Requirement 2}
    \SrsReqAdd[code=RF-CL-02,effort=10,prior=5 ]{Requirement 3}
\SrsReqTableEnd

Imprime uma tabela, mas os argumentos são especificados independentemente da estrutura da tabela (mais flexível para alterações futuras).

No preâmbulo, importe o pacote:

\usepackage{xkeyval} % Key/value coding

Os comandos SRS são definidos:

\newcommand{\SrsReqTableStart}{
    \vspace{10pt}
    \begin{tabular}{ l l l l l }
        ID & Name & Prior. & Effort \\
    \hline
}
\newcommand{\SrsReqTableEnd}{
    \end{tabular}
}

Cada linha é definida por este comando:

\makeatletter % Override @ meaning
\newlength{\pb@width}
\define@key{SrsReqAdd}{code}{\def\pb@code{#1}}
\define@key{SrsReqAdd}{effort}{\def\pb@effort{#1}}
\define@key{SrsReqAdd}{prior}{\def\pb@prior{#1}}
\setkeys{SrsReqAdd}{code=?,effort=?,prior=?} % Defaults
\newcommand{\SrsReqAdd}[2][]{
    \setkeys{SrsReqAdd}{#1} % Set new keys
    \hyperref[\pb@code]{\pb@code} &%
    #2 &% 
    \setkeys{SrsReqAdd}{#1} \pb@prior &%
    \setkeys{SrsReqAdd}{#1} \pb@effort \tabularnewline%
}
\makeatother % End override

Observe a seção Padrões. Este é o código mais limpo que pude fazer, graças à respostaaquipor Werner.

Opiniões são bem-vindas

informação relacionada