Я пытаюсь набрать документ 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. Это самый чистый код, который я смог сделать, спасибо за ответздесьВернер.
Мнения приветствуются