我正在用 LaTeX 编写软件规范,为每个需求分配一个唯一的编号被认为是最佳实践。章节编号不适用于此,因为即使在现有需求中间添加了新需求,这些编号也必须保持不变。
到目前为止我看到的唯一选择是手动分配这些号码。但这不能保证唯一性,而且当涉及到多人时会变得混乱。
你有什么建议吗?
答案1
更好的解决方案:
我建议手动标记每个需求,并确保不使用重复项。下面的 MWE 产生:
但如果您不小心使用了相同的环境标签(即,如果最后一个标签被用作\begin{Requirement}{1}
,则会产生:
包需求错误:重复需求:1。
因此作者会意识到需要使用不同的需求标签。
此版本基于 Ulrike Fischer 的建议:
代码:
\documentclass{article}
\usepackage{xstring}
\newcommand\CheckForDuplicateRequirement[1]{%
\ifcsname Requirement#1\endcsname %
\PackageError{Requirement}{Duplicate Requirement: #1}{}%
\else%
\expandafter\gdef\csname Requirement#1\endcsname{}%
\fi%
}
\newenvironment{Requirement}[1]{%
\CheckForDuplicateRequirement{#1}%
\textbf{Requirement #1:}%
}{%
}%
\begin{document}
\begin{Requirement}{1}
This is the first requirement
\end{Requirement}
\begin{Requirement}{X}
This is the second requirement
\end{Requirement}
\begin{Requirement}{Z}
This is the third requirement
\end{Requirement}
\end{document}
旧解决方案:
此解决方案使用以下方法构建引用列表如何保存字符串的运行列表,然后逐个处理它们\PackageError
,如果提供了重复的要求标签,则发出
笔记:
- 使用这种方法,标签可以是数字和/或字母,但不应包含
<
,或 ,>
因为我将其用作字符串的分隔符。这是为了确保测试对于作为其他标签的子字符串的标签正常工作。如果使用标签 ,则以前的版本会报告重复项,XX
后跟X
。
代码:
\documentclass{article}
\usepackage{xstring}
\newcommand\RequirementList{}
\newcommand\CheckForDuplicateRequirement[1]{%
\StrPosition{\RequirementList}{<#1>}[\Position]
\IfEq{\Position}{0}{%
\global\edef\RequirementList{\RequirementList<#1>}%
}{%
\PackageError{Requirement}{Duplicate Requirement: #1}{}%
}%
}
\newenvironment{Requirement}[1]{%
\CheckForDuplicateRequirement{#1}%
\textbf{Requirement #1:}%
}{%
}%
\begin{document}
\begin{Requirement}{1}
This is the first requirement
\end{Requirement}
\begin{Requirement}{X}
This is the second requirement
\end{Requirement}
\begin{Requirement}{Z}
This is the third requirement
\end{Requirement}
\end{document}