如何将引用值从包 etoolbox 传递给 \listadd,以便可以使用输入时的值检索它?

如何将引用值从包 etoolbox 传递给 \listadd,以便可以使用输入时的值检索它?

如何将引用值(例如\thesection)传递给\listaddetoolbox,以便可以使用输入时的值检索它?

以下 MWE 说明了这个问题:

\documentclass{article}
\usepackage{etoolbox}

\begin{document}

\section{Section 1}

\listadd{\mylist}{Section 1 = Section \thesection}
Section 1 = Section \thesection

\section{Section 2}

Section 2 = Section \thesection

\newcounter{mycounter}
\setcounter{mycounter}{0}

Counter = \themycounter

\forcsvlist{\listadd{\mylist}}{Section 2 = Section \thesection,Counter = \themycounter}
\setcounter{mycounter}{10}

\section{Section 3}

\newcommand{\printlist}[1]{%
  #1
  
}%

%% Print \mylist items
\forlistloop{\printlist}{\mylist}

\end{document}

输出

答案1

手动的etoolbox 描述了\listadd处理扩展和范围的各种版本(第 29 页,第 3.7.2 节内部列表):

  • \listgadd{listmacro}{item}类似于,\listadd只是分配是全局的。
  • \listeadd{listmacro}{item}类似于, 只是在定义时会扩展。只有新的\listadd会扩展,不会扩展。如果扩展 为空白,则不会将其添加到列表中。itemitemlistmacroitem
  • \listxadd{listmacro}{item}类似于,\listeadd只是分配是全局的。

因此在这种情况下,可以在添加项目时使用宏\listeadd来扩展内容。

\documentclass{article}
\usepackage{etoolbox}

\begin{document}

\section{Section 1}

\listeadd{\mylist}{Section 1 = Section \thesection}
Section 1 = Section \thesection

\section{Section 2}

Section 2 = Section \thesection

\newcounter{mycounter}
\setcounter{mycounter}{0}

Counter = \themycounter

\forcsvlist{\listeadd{\mylist}}{Section 2 = Section \thesection,Counter = \themycounter}
\setcounter{mycounter}{10}

\section{Section 3}

\newcommand{\printlist}[1]{%
  #1
  
}%

%% Print \mylist items
\forlistloop{\printlist}{\mylist}

\end{document}

结果: 在此处输入图片描述

相关内容