«Неопределенная последовательность управления» при использовании \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

Обратите внимание на раздел Defaults. Это самый чистый код, который я смог сделать, спасибо за ответздесьВернер.

Мнения приветствуются

Связанный контент