![如何将引用值从包 etoolbox 传递给 \listadd,以便可以使用输入时的值检索它?](https://linux22.com/image/445341/%E5%A6%82%E4%BD%95%E5%B0%86%E5%BC%95%E7%94%A8%E5%80%BC%E4%BB%8E%E5%8C%85%20etoolbox%20%E4%BC%A0%E9%80%92%E7%BB%99%20%5Clistadd%EF%BC%8C%E4%BB%A5%E4%BE%BF%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E8%BE%93%E5%85%A5%E6%97%B6%E7%9A%84%E5%80%BC%E6%A3%80%E7%B4%A2%E5%AE%83%EF%BC%9F.png)
如何将引用值(例如\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}