我想在报告开头创建报告摘要。报告由概述通过或未通过的测试的章节/小节组成。
这个想法是仅在一个部分中添加\passed
或\failed
打印出通过/失败以及将通过/失败与测试名称一起添加到报告摘要中(测试名称等于该部分的标题 - 参见下图中的示例)。
来自的动态列表这个帖子似乎是一个很好的解决方案,但是我不知道如何传递测试名称。我尝试了很多方法,比如\label{\thetitle}
使用添加到每个部分以进行引用\nameref{\thetitle}
。但我猜问题总是在所有其他事情发生之前打印列表。也许写入临时文件是一种解决方案,或者使用修改后的目录的其他解决方案,或者我完全偏离了轨道,有更好的解决方案。我很高兴听到你的建议。
只是为了更好地理解:目标是自动生成此报告,这就是为什么找到一个可以动态扩展的解决方案而不是硬编码解决方案很重要。
\documentclass[12pt]{article}
\usepackage{xcolor}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\defineList}{m}
{\seq_new:c { g_chrillof_list_#1_seq }}
\NewDocumentCommand{\addToList}{mm}
{\iow_shipout:cn { @auxout } { \chrillofaddtolist { #1 } { #2 } }}
\NewDocumentCommand{\chrillofaddtolist}{mm}
{\seq_gput_right:cn { g_chrillof_list_#1_seq } { #2 }}
\NewDocumentCommand{\printList}{m}
{\seq_use:cn { g_chrillof_list_#1_seq } { }}
\AtEndDocument{\cs_set_eq:NN \chrillofaddtolist \use_none:nn }
\ExplSyntaxOff
\defineList{ReportSummary}
\newcommand{\passed}{
\textcolor{green}{
\textbf{PASSED}
\addToList{ReportSummary}{PASSED & Test Name X\\}}
}
\newcommand{\failed}{
\textcolor{red}{
\textbf{FAILED}
\addToList{ReportSummary}{FAILED & Test Name X\\}}
}
\begin{document}
\tableofcontents
\section{Report Summary}
\begin{tabular}{l l}
Status & Test Name\\
\hline
\printList{ReportSummary}
\end{tabular}
\section{Test 1}
\passed
\section{Test 2}
\subsubsection{Test 2a}
\failed
\subsubsection{Test 2b}
\passed
\end{document}
答案1
这是使用包包含或排除报告部分内容的不同方法 codesection
,因此“摘要”只是一个标准目录。
要将“通过”或“失败”也添加到目录中(只有打印所有测试才有意义),您只需将此词添加到可选参数 od 中\section
(例如,而不是\section{Foo}
类似的\section[Foo (passed)]{Foo}
。您可以使用xesearch
包(使用 xelatex)自动用颜色标记这些关键字。示例打印通过和失败的测试,除了一个“太糟糕而无法显示”。设置\DefineCodeSection[true]{Passed}
为 false 将隐藏第 1、2.2 和 2.3 节等等......
\documentclass{article}
\usepackage{xcolor}
\usepackage{xesearch}
\usepackage{codesection}
\makeatletter
\SearchList*{green}{ \textcolor{green}{#1}}{Passed}
\SearchList{red}{ \textcolor{red}{#1}}{Failed}
\SearchAll{ps}
\DefineCodeSection[true]{Passed} % show Passed ...
\DefineCodeSection[true]{Failed} % and show also (some failed ...)
\newcommand\Section[2]{\section[#1 -- #2]{#1}}
\newcommand\Subsection[2]{\subsection[#1 --~#2]{#1}}
\renewcommand\contentsname{Report summary\par\noindent\hrulefill}
\makeatother
\begin{document}
\tableofcontents\noindent\bigskip\hrulefill
\BeginCodeSection{Passed}
\Section{Test 1}{Passed} \par Bla bla bla passed this test.
\EndCodeSection{Passed}
\section[So so ...]{Test 2}
\BeginCodeSection{Failed}
\Subsection{Foo}{Failed} Bla bla bla failed this test.
\EndCodeSection{Failed}
\BeginCodeSection{Passed}
\Subsection{Bar}{Passed} Bla bla bla ...
\EndCodeSection{Passed}
\BeginCodeSection{Passed}
\Subsection{Baz}{Passed} Bla bla bla ...
\EndCodeSection{Passed}
\SetCodeSection{Failed}{false} % Too bad pitfall to be showed ...
\BeginCodeSection{Failed}
\Subsection{Whatever}{Failed} Bla bla bla failed miserably ...
\EndCodeSection{Failed}
\SetCodeSection{Failed}{true} %
\BeginCodeSection{Failed}
\Subsection{Whatever else}{Failed} Bla bla bla ...
\EndCodeSection{Failed}
\end{document}