我想写一份规范。它有一个部分列出了所有功能。另一个部分列出了测试。每个测试都必须引用它所测试的功能。
现在,通过 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,而不是反向链接。