根据交叉引用输出

根据交叉引用输出

我想写一份规范。它有一个部分列出了所有功能。另一个部分列出了测试。每个测试都必须引用它所测试的功能。

现在,通过 TeX-magic,我希望未测试的功能被标为红色。我还希望功能获得测试列表,对其进行测试。理想情况下,可点击的参考资料可以在 pdf 和编号中来回跳转。

更具体地说,假设规范:

\begin{document}
\feature{Features have a List of Tests}{at-feature-list}
The first part is the title, the second a label, like for \\label
\feature{Untested Features are red}{123}
\feature{Tests link to Features they test}{crossref}

\ftest{A list of Features}{at-feature-list,123}
Create an example listing...
\end{document}

它应该输出类似

F1. Features have a List of Tests

Tested by: T1

The first part is the title, the second a label, like for \label

F2. Untested Features are red

Tested by: T1

F3. Tests link to Features they test (colored red!)

Tested by: -

T1. A list of Features

Testing: F1, F2

据我所知,没有针对此的软件包。正在实现\feature\ftest可能实现类似于\label和的东西\ref

答案1

感谢 michal.h21 和他的rdfref 包我能够建造一些东西,它几乎已经完成了。

该文件的相关部分如下:

\section*{Funktionen}

\functionality{Foo}{fnc:foo}
\functionality{Bar}{fnc:bar}

\section*{Tests}

\test{First Start}{tst:first}
\tests{fnc:bar}

\test{Trial}{tst:trial}
\tests{fnc:bar}

输出为:

Funktionen
F1 Foo   Tested by: 
F2 Bar   Tested by: T1 T2

Tests

T1 First Start   Testing: F2
T2 Trial   Testing: F2

实现该目的的 TeX 宏包括:

\newcommand\tests[1]{
   \AddTripleEx{#1}{pfl:is-tested}{yeah}
   \AddProperty{pfl:tests}{#1}}
\newcommand\fulfills[1]{\AddProperty{pfl:fulfills}{#1}}

\newcommand\testlink[1]{\hyperlink{#1}%
  { \GetProperty{#1}{pfl:tstid} }}
\newcommand\functionalitylink[1]{\hyperlink{#1}%
  { \GetProperty{#1}{pfl:fncid} }}

\newcounter{functionality}
\newcounter{test}

\newcommand\functionality[2]{
  \stepcounter{functionality}
  \par\textbf{F\arabic{functionality} #1}\rdflabel{#2}
  \AddProperty{pfl:fncname}{#1}
  \AddPropertyEx{pfl:fncid}{F\arabic{functionality}}
  \IfProperty{#2}{pfl:is-fulfilled}{%
       Tested by: \Bind{?t}{pfl:tests}{#2}{ \testlink{\GetVal{?t}} }
  }{{\color{red}{NOT TESTED}}}
  \par}

\newcommand\test[2]{
  \stepcounter{test}
  \par\textbf{T\arabic{test} #1}\rdflabel{#2}
  \AddProperty{pfl:tstname}{#1}
  \AddPropertyEx{pfl:tstid}{T\arabic{test}}
  Testing: \Bind{#2}{pfl:tests}{?f}{ \functionalitylink{\GetVal{?f}} }
  \par}

这些\AddProperty调用与前一个调用相关\rdflabel,并存储三元组,如(tst:trial,pfl:tests,fnc:bar)。

然后\Bind{?t}{pfl:tests}{#2}{ \testlink{\GetVal{?t}} }输出链接列表。查询 (?t,pfl:tests,fnc:bar) 查找所有第二和第三个元素匹配的三元组。它\testlink为每个找到的三元组输出一个?t与第一个三元组元素绑定的 。

还有(ID,pfl:is-tested,yeah) 三元组。它们用于检查\IfProperty。如果某个 ID 没有这样的三元组,则会打印红色警告 NOT TESTED,而不是反向链接。

相关内容