如何存储和附加文本以供日后使用(在枚举环境中)

如何存储和附加文本以供日后使用(在枚举环境中)

我想用 LaTeX 制作一个容器,在其中存储和附加 LaTeX 代码以供以后使用。

我已经找到了很多解决方案,基本上我想做的(这里例如),但如果它们工作了,当您尝试在枚举环境中使用它时,它们就会停止工作。

为了确保解决方案适用于我的情况,我制作了一个示例,其中使用了容器必须具备的所有相关功能。在此示例中,\addtotraceabilitymatrixcontent应附加#1 &#2\\\traceabilitymatrixcontent容器。

\documentclass{article}

\newcommand{\traceabilitymatrixcontent}{}
\newcommand{\addtotraceabilitymatrixcontent}[2]
{
    % something that safely appends {#1 &#2 \\} 
    % to \traceabilitymatrixcontent while keeping
    % the references intact.
}

\newcommand{\maketraceabilitymatrix}
{
    \begin{tabular}{ll}
        Requirement & Validation \\
        \traceabilitymatrixcontent
    \end{tabular}
}

\newcommand{\reqitem}[2]
{
    \item \label{req:#1} \addtotraceabilitymatrixcontent{\ref{req:#1}}{#2}
}

\begin{document}

    \maketraceabilitymatrix

    \begin{enumerate}
        \reqitem{1}{\ref{val:1}} Requirement one
        \reqitem{2}{\ref{val:2}, \ref{val:3}} Requirement two
        \reqitem{3}{\ref{val:2}, \ref{val:3}} Requirement three
    \end{enumerate}

    \begin{enumerate}
        \item \label{val:1} Test to validate requirement one
        \item \label{val:2} Test to validate requirement two and three partially
        \item \label{val:3} Test to validate requirement two and three partially
    \end{enumerate}
\end{document}

答案1

我在包中找到了我要找的东西etoolbox。我仍然不知道我到底在做什么,但定义\addtotraceabilitymatrixcontent如下就可以了:

\newcommand{\addtotraceabilitymatrixcontent}[2]
{
    \gappto{\traceabilitymatrixcontent}{#1 & #2\\}
}

答案2

我可能找到了正确的方向。我必须弄清楚这一点,才能编写一份最佳实践文档,其中我必须非常清楚地识别最佳实践,能够引用它们,并列出它们。

我的解决方案使用 memoir,并定义了一个编号的新环境。我确信我从 memoir 手册和此处的某个地方获得了一些代码。

此代码生成一系列带有子项的主项,其中存储了主项的简短描述以供在项表中使用。

注意到这可能难以理解,这里有一个 MWE......

\documentclass{memoir}

\usepackage{enumitem}

%% Custom list
% define the list of MyList's
\newcommand{\listMyListname}{List of My Items}
\newlistof{listofMyLists}{MyList}{\listMyListname}
% define a counter
\newcounter{MyListno}
\newcommand{\theMyList}{\arabic{MyListno}}    
% define the command that creates an MyList, which is indexed every time we call it
\newcommand{\MyList}[2]{%   
    \refstepcounter{MyListno} \protect\item #2 %
    \addcontentsline{MyList}{MyListno}{\protect\numberline{\theMyList}#1}
    \par
}
% set up the list
\newlistentry{MyListno}{MyList}{0}
% borrow formatting
\let\printMyListtitle\printtoctitle    
% define the environment in which we will embed the MyList
\newenvironment{MyListlist}{%
    \begin{list}{\underline{\textbf{MyList \theMyList:}}~}{}%
    }{%
    \end{list}%
}
% Reference an MyList
\newcommand{\refMyList}[1]{\hyperref[#1]{MyList \ref{#1}}}    
% CREAT SUB ITEMS
\newlistentry[MyListno]{SubList}{MySubList}{1} 
\renewcommand{\theSubList}{\theMyList\  \alph{SubList})}    
\newenvironment{MySubListlist}{%
    \begin{list}{\textbf{\theSubList}~}{}%
}{%
    \end{list}%
}
\newcommand{\MySubList}[1]{\refstepcounter{SubList} \item #1}    

\usepackage{hyperref}    

\begin{document}

\listofMyLists

\begin{MyListlist}
    \MyList{Item the first}{Thou shalt do x.\label{MyList:Dox}}
    \begin{MySubListlist}
    \MySubList{In the first sub case:
    \begin{itemize}
\item sub item 1.1
\item sub item 1.2
\end{itemize}}      
    \MySubList{In the second sub case:
        \begin{itemize}
        \item sub item 2.1.
        \item sub item 2.2.
        \end{itemize}}
    \MySubList{In the third sub case: 
        \begin{itemize}     
        \item sub item 3.1.
        \item sub item 3.2.
        \item sub item 3.3.
        \end{itemize}}
    \end{MySubListlist}
\end{MyListlist}

In \refMyList{MyList:Dox}, I said something.

\end{document}

然后你就会得到如下所示的结果: 在此处输入图片描述

您会看到有列表项、列表项的简短描述表以及引用列表项的方法。我怀疑您可以使用类似的方法,可能删除子项?

相关内容