使用 \pgfkeys 和表格时出现“未定义的控制序列”

使用 \pgfkeys 和表格时出现“未定义的控制序列”

我正在尝试排版 SRS 文档,并且我想创建自定义宏来集成表中的元素。

也就是说,我想要做的是通过这种方式指定软件的要求:

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

问题是,当将键值参数与表行组合时,在第一个“&”符号之后,它会停止识别自定义命令。

为了使我更清楚,此代码定义了宏:

\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
}

它以这种方式工作,但是当我在 & 字符后写入一些命令(文本工作)时,它会引发错误。

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

已经尝试过研究、更改命令和键/值包。但没有任何改变这种情况。

谢谢

答案1

通过更改代码并进行一些小改动,我重新定义了每一行的变量,否则它们只会获得默认值。这似乎有效,所以如果有人需要的话,我会将其作为答案发布。

它也适用于默认值。

我的 SRS 功能需求表现在定义如下:

\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

它打印出一个表格,但参数是独立于表结构指定的(对于将来的更改更灵活)。

在序言中,导入包:

\usepackage{xkeyval} % Key/value coding

SRS 命令定义如下:

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

每行均由该命令定义:

\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

请注意默认值部分。这是我能编写的最干净的代码,这要感谢答案这里作者:沃纳。

欢迎发表意见

相关内容