这肯定很简单,但读了 30 分钟手册后我还是搞不懂(我是 Latex 编程的新手)。我没有看到它的 API。
我只是想清除使用创建的列表,etoolbox
以便可以再次使用它。现在,当重新使用它时,它会附加到它。这是 MWE
\documentclass[10pt]{book}
\usepackage{etoolbox}
\begin{document}
\forcsvlist{\listadd\mylist}{ 1,2,3 } %make up a list
\begin{enumerate}
\renewcommand*{\do}[1]{\item[] #1}
\dolistloop{\mylist}
\end{enumerate}
% what to do now to clear it? If I do the following, it appends!
\forcsvlist{\listadd\mylist}{ 5,6,7 }
\begin{enumerate}
\renewcommand*{\do}[1]{\item[] #1}
\dolistloop{\mylist}
\end{enumerate}
\end{document}
我认为我需要重置计数器或类似的东西,但我不知道哪个计数器或如何告诉 etoolbox 清除mylist
。在 Matlab 中,我会 A=[]
例如清除一个数组,在 中有类似的东西etoolbox
吗?
答案1
您只需
\renewcommand\mylist{}
或者(也许更常见)在一个组或环境中执行每个处理循环,然后当您使用本地定义时,列表将在每个组末尾自动重置。
答案2
列表只是宏,因此您可以简单地将宏重新定义为空,正如 David 所说的那样。
您可以享受更加灵活的列表管理功能集:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\listset}{mm}
{
\clist_clear_new:c { l_nasser_list_#1_clist }
\clist_set:cn { l_nasser_list_#1_clist } { #2 }
}
\NewDocumentCommand{\listapp}{mm}
{% the list must already exist!
\clist_put_right:cn { l_nasser_list_#1_clist } { #2 }
}
\NewDocumentCommand{\listprocess}{mm}
{
\clist_map_inline:cn { l_nasser_list_#1_clist } { #2 }
}
\ExplSyntaxOff
\begin{document}
Make up a list:
\listset{mylist}{ 1,2,3 } %make up a list
\begin{enumerate}
\listprocess{mylist}{\item[] #1}
\end{enumerate}
Append to the previous list:
\listapp{mylist}{ 5,6,7 }
\begin{enumerate}
\listprocess{mylist}{\item[] #1}
\end{enumerate}
Set anew the list:
\listset{mylist}{a, b, c}
\begin{enumerate}
\listprocess{mylist}{\item[] #1}
\end{enumerate}
\end{document}