"Secuencia de control no definida" cuando se usa \pgfkeys con tabular

"Secuencia de control no definida" cuando se usa \pgfkeys con tabular

Estoy intentando componer un documento SRS y me gustaría crear macros personalizadas para integrar elementos en una tabla.

Es decir, lo que quiero hacer es especificar requisitos para un software de esta manera:

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

El problema es que al combinar argumentos clave-valor con filas de la tabla, después del primer carácter comercial y comercial, deja de reconocer comandos personalizados.

Para ser más claro, este código define las 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
}

Y funciona de esta manera, pero cuando escribo algún comando (el texto funciona) después del carácter &, arroja un error.

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

Ya intenté investigar, cambiar comandos y paquetes clave/valor. Nada cambió esta situación.

Gracias

Respuesta1

Resuelto cambiando el código y con un pequeño truco, redefino las variables en cada fila; de lo contrario, solo obtienen los valores predeterminados. Parece funcionar, así que publicaré esto como respuesta si alguien lo necesita.

También funciona con valores predeterminados.

Mi tabla de requisitos funcionales de SRS ahora está definida así:

\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 una tabla, pero los argumentos se especifican independientemente de la estructura de la tabla (más flexible para cambios futuros).

En el preámbulo, importe el paquete:

\usepackage{xkeyval} % Key/value coding

Los comandos SRS están definidos:

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

Cada fila está 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

Tenga en cuenta la sección Valores predeterminados. Este es el código más limpio que pude hacer, gracias a la respuesta.aquípor Werner.

Se aceptan opiniones

información relacionada