如何清除使用 listadd 创建的 etoolbox 列表?

如何清除使用 listadd 创建的 etoolbox 列表?

这肯定很简单,但读了 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}

Mathematica 图形

我认为我需要重置计数器或类似的东西,但我不知道哪个计数器或如何告诉 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}

在此处输入图片描述

相关内容