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