如何在LaTeX中创建自定义需求条目结构(替代glossaries)
实现自定义LaTeX需求条目结构的思路
核心方案:独立存储结构+计数器+自定义输出
不用依赖glossaries,借助etoolbox的宏存储/列表功能,配合计数器实现自动编号,完全复刻你要的\newrequirement定义+\printrequirements批量输出逻辑,和bibliography的条目管理逻辑一致。
1. 基础结构与计数器定义
先创建计数器实现自动编号,再用宏存储每个需求的字段,同时维护一个需求标签列表用于后续遍历:
\usepackage{etoolbox} % 需求编号计数器 \newcounter{requirementcounter} \setcounter{requirementcounter}{0} % 存储所有需求标签的列表 \newcommand{\requirementslist}{} % \newrequirement命令:参数依次为【标签、类型、优先级、描述、所属框架】 \newcommand{\newrequirement}[5]{% \stepcounter{requirementcounter}% 编号自增 % 以标签为键,存储各字段内容 \csdef{req@#1@num}{\therequirementcounter} \csdef{req@#1@type}{#2} \csdef{req@#1@priority}{#3} \csdef{req@#1@desc}{#4} \csdef{req@#1@frame}{#5} % 将标签加入列表,方便后续批量输出 \listadd{\requirementslist}{#1} }
2. 实现批量输出命令
遍历需求标签列表,逐个取出字段并按自定义格式输出:
\newcommand{\printrequirements}{% \section{软件需求列表} \begin{description} % 遍历所有需求标签,调用单条输出命令 \forlistloop{\printsinglerequirement}{\requirementslist} \end{description} } % 单条需求的格式化输出 \newcommand{\printsinglerequirement}[1]{% \item[\textbf{REQ-\csuse{req@#1@num}}] \textbf{类型:}\csuse{req@#1@type} \\ \textbf{优先级:}\csuse{req@#1@priority} \\ \textbf{描述:}\csuse{req@#1@desc} \\ \textbf{所属框架:}\csuse{req@#1@frame} }
3. 实际使用示例
在文档中定义需求,最后调用输出命令即可:
% 定义需求条目 \newrequirement{user-login}{功能需求}{高}{用户需通过账号密码完成身份验证}{用户认证模块} \newrequirement{session-timeout}{非功能需求}{中}{登录会话30分钟无操作自动失效}{安全框架} % 输出所有需求 \printrequirements
进阶优化方向
- 用
xparse替代原生\newcommand,支持可选参数(比如让「所属框架」字段可选,默认值设为「无」):
\usepackage{xparse} \NewDocumentCommand{\newrequirement}{mmmmo}{% \stepcounter{requirementcounter} \csdef{req@#1@num}{\therequirementcounter} \csdef{req@#1@type}{#2} \csdef{req@#1@priority}{#3} \csdef{req@#1@desc}{#4} \IfNoValueTF{#5}{% \csdef{req@#1@frame}{无} }{% \csdef{req@#1@frame}{#5} } \listadd{\requirementslist}{#1} }
- 按优先级分组输出:给不同优先级的需求创建独立列表,输出时按高→中→低的顺序遍历
内容的提问来源于stack exchange,提问作者Eduardo Rodrigues
相关产品推荐
相关产品推荐

