我尝试建立一个交叉链接来检查所有使用的变量是否在文档的某个地方定义。目标是确定当变量被修改时以及当变量未定义时的影响。最终目标是提高软件规范的质量。
为此,我将所有变量存储在两个数组中(一个用于使用,一个用于定义),最后评估已使用数组中的每个变量是否存在于已定义数组中。交叉链接、分布和未定义变量的安全性运行良好。问题出在“矩阵”表中的链接上,所有链接都指向同一个。
您可以在下面找到代码
\documentclass{article}
\usepackage{xinttools}
\usepackage{hyperref}
\hypersetup{colorlinks=true}
\newcounter{Cpt}
\newcommand{\VARRRI}{}
\newcommand{\VARRRO}{}
\makeatletter
\newcommand{\DefVariable}[1]{ \textbf{#1} \phantomsection \def\@currentlabel{#1} \label{[var@#1]} \g@addto@macro\VARRRI{{var@#1}} \global\@namedef{var@#1@ismetby}{} }
\newcommand{\meetsreqY}[1]{\@ifundefined{r@[var@#1]}{THIS VARIABLE ISN T DEFINED #1 !!}{{} \expandafter\g@addto@macro\csname var@#1@ismetby\expandafter\endcsname \expandafter {\expandafter{\@currentspece}}}}
\newcommand{\specswithreqY}[1] {\xintListWithSep{, }{\xintApply { \nameref}{\csname #1@ismetby\endcsname }}}
\newcommand{\specY}[1]{\label{va@#1}\xdef\@currentspece{va@#1}}
\newcommand{\UseVariable}[1]{\stepcounter{Cpt}\specY{\theCpt}\ref{[var@#1]} \g@addto@macro\VARRRO{{#1} } }
\makeatother
\begin{document}
\section{section1}
\DefVariable{MeasureVoltage1} : Hardware input
\section{section2}
\DefVariable{FaultOvervoltage} : \UseVariable{MeasureVoltage1} sup to 50
\section{section5}
\DefVariable{TotalVoltage} : \UseVariable{MeasureVoltage1} add with \UseVariable{MeasureVoltage2}
\section{section3}
\DefVariable{MeasureVoltage2} : I define this variable
\section{section4}
\DefVariable{FaultOvervoltage} : \UseVariable{MeasureCurrent} sup to 50
\clearpage
\section{Tracability MAtrix}
\xintFor* #1 in \VARRRO\do {\meetsreqY{#1}}
\begin{table}[htbp]
\begin{tabular}{|l|l|}
\hline
section where variable is defined & section where variable is used \\
\hline
\xintFor* #1 in \VARRRI\do { \ref{[#1]}&\specswithreqY{#1}\\\hline }
\end{tabular}
\end{table}
\end{document}
提前感谢您的支持。