"Undefinierte Steuersequenz" bei Verwendung von \pgfkeys mit tabellarischen

"Undefinierte Steuersequenz" bei Verwendung von \pgfkeys mit tabellarischen

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

verwandte Informationen