Ich versuche, ein SRS-Dokument zu setzen, und möchte benutzerdefinierte Makros zum Integrieren von Elementen in eine Tabelle erstellen.
Das heißt, ich möchte die Anforderungen an eine Software folgendermaßen festlegen:
\SrsReqTableStart
\SrsReqAdd{%
code=A001,
desc=Gestione stati lavorazione,
prior=5
}
\SrsReqTableEnd
Das Problem besteht darin, dass beim Kombinieren von Schlüssel-Wert-Argumenten mit Tabellenzeilen nach dem ersten Et-Zeichen und dem ersten Zeichen keine benutzerdefinierten Befehle mehr erkannt werden.
Um es klarer auszudrücken: Dieser Code definiert die Makros:
\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
}
Und so funktioniert es, aber wenn ich nach dem &-Zeichen einen Befehl (Text funktioniert auch) schreibe, wird ein Fehler ausgegeben.
\hyperref[\srsReqCode]{\srsReqCode} & \srsReqDesc %
Habe bereits versucht, Befehle und Schlüssel/Wert-Pakete zu recherchieren, zu ändern. Nichts hat diese Situation geändert.
Danke
Antwort1
Gelöst durch Änderung des Codes und mit einem kleinen Hack, ich definiere die Variablen in jeder Zeile neu, sonst erhalten sie einfach die Standardwerte. Es scheint zu funktionieren, also werde ich dies als Antwort posten, falls jemand dies braucht.
Es funktioniert auch mit Standardwerten.
Meine Tabelle mit den funktionalen Anforderungen an SRS ist nun folgendermaßen definiert:
\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
Es druckt eine Tabelle aus, aber die Argumente werden unabhängig von der Tabellenstruktur angegeben (flexibler für zukünftige Änderungen).
Importieren Sie in der Präambel das Paket:
\usepackage{xkeyval} % Key/value coding
Die SRS-Befehle sind definiert:
\newcommand{\SrsReqTableStart}{
\vspace{10pt}
\begin{tabular}{ l l l l l }
ID & Name & Prior. & Effort \\
\hline
}
\newcommand{\SrsReqTableEnd}{
\end{tabular}
}
Jede Zeile wird durch diesen Befehl definiert:
\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
Beachten Sie den Abschnitt „Standardeinstellungen“. Dies ist der sauberste Code, den ich erstellen konnte, dank der AntwortHiervon Werner.
Meinungen willkommen