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