如何将引用值(例如\thesection
)传递给\listadd
包etoolbox
,以便可以使用输入时的值检索它?
以下 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
会扩展,不会扩展。如果扩展 为空白,则不会将其添加到列表中。item
item
listmacro
item
\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}