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
기본값 섹션을 참고하세요. 답변 덕분에 제가 만들 수 있는 가장 깨끗한 코드입니다.여기베르너에 의해.
의견 환영