我正在嘗試排版 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
請注意預設部分。這是我能寫的最乾淨的程式碼,感謝答案這裡由維爾納.
歡迎提出意見