我想用 LaTeX 制作一个容器,在其中存储和附加 LaTeX 代码以供以后使用。
我已经找到了很多解决方案,基本上我想做的(这里例如),但如果它们工作了,当您尝试在枚举环境中使用它时,它们就会停止工作。
为了确保解决方案适用于我的情况,我制作了一个示例,其中使用了容器必须具备的所有相关功能。在此示例中,\addtotraceabilitymatrixcontent
应附加#1 \\
到\traceabilitymatrixcontent
容器。
\documentclass{article}
\newcommand{\traceabilitymatrixcontent}{}
\newcommand{\addtotraceabilitymatrixcontent}[2]
{
% something that safely appends {#1  \\}
% 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}
然后你就会得到如下所示的结果:
您会看到有列表项、列表项的简短描述表以及引用列表项的方法。我怀疑您可以使用类似的方法,可能删除子项?