我想将令牌的内容保存到这样的列表中。
\documentclass{article}
\usepackage{etoolbox}
\begin{document}
\def\abc{1}
\listgadd{\lista}{\abc}
\def\abc{2}
\listgadd{\lista}{\abc}
\renewcommand*{\do}[1]{#1}
\dolistloop{\lista}
\end{document}
我希望它输出 12,但它输出的是 22。
答案1
关于注释,expl3序列变量是一个列表,并且可以命名。
但对于特定的解决方案,很大程度上取决于您的用例的细节:包、工具链、编译器等。
平均能量损失
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Noto Serif}
\usepackage{xparse}
%-------------------------------------------------------------
\ExplSyntaxOn
\cs_generate_variant:Nn
\seq_gset_split:Nnn
{ cno }
\tl_new:N \g_qa_namespace_tl
%------------------
\cs_set:Npn \qa_funcprintq:n #1 {
% 1=qa pair
\seq_set_split:Nnn
\l_tmpa_seq
{ ; }
{ #1 }
\tl_set:Nx
\l_tmpa_tl
{
\seq_item:Nn
\l_tmpa_seq
{ 1 } %Q
}
% \tl_set:Nx
% \l_tmpb_tl
% {
% \seq_item:Nn
% \l_tmpa_seq
% { 2 } %A
% }
\int_gincr:N
\g_tmpa_int
\noindent
Q ~
\int_use:N
\g_tmpa_int
\space -- ~
\tl_use:N
\l_tmpa_tl
\tex_par:D
}
%------------------
\cs_set:Npn \qa_funcprinta:n #1 {
% 1=qa pair
\seq_set_split:Nnn
\l_tmpa_seq
{ ; }
{ #1 }
% \tl_set:Nx
% \l_tmpa_tl
% {
% \seq_item:Nn
% \l_tmpa_seq
% { 1 } %Q
% }
\tl_set:Nx
\l_tmpb_tl
{
\seq_item:Nn
\l_tmpa_seq
{ 2 } %A
}
\int_gincr:N
\g_tmpa_int
\noindent
A ~
\int_use:N
\g_tmpa_int
\space -- ~
\tl_use:N
\l_tmpb_tl
.
\tex_par:D
}
%------------------
\cs_set:Npn \qa_funcprintqa:n #1 {
% 1=qa pair
\seq_set_split:Nnn
\l_tmpa_seq
{ ; }
{ #1 }
\tl_set:Nx
\l_tmpa_tl
{
\seq_item:Nn
\l_tmpa_seq
{ 1 } %Q
}
\tl_set:Nx
\l_tmpb_tl
{
\seq_item:Nn
\l_tmpa_seq
{ 2 } %A
}
\int_gincr:N
\g_tmpa_int
\noindent
Q ~
\int_use:N
\g_tmpa_int
\space -- ~
\tl_use:N
\l_tmpa_tl
\space (
\tl_use:N
\l_tmpb_tl
)
\tex_par:D
}
%****************************************************
%* main commands
%****************************************************
%--------------------
\NewDocumentCommand { \qaloadaseq } { o m +m } {
% 1=namespace
% 2=seq name
% 3=data
\IfNoValueTF { #1 }
{ \tl_clear:N \g_qa_namespace_tl }
{ \tl_gset:Nn \g_qa_namespace_tl { #1 } }
\cs_if_free:cT
{ g_qa_rwe \g_qa_namespace_tl #2 _seq }
{ \seq_new:c
{ g_qa_rwe \g_qa_namespace_tl #2 _seq }
}
\seq_gclear:c
{ g_qa_rwe \g_qa_namespace_tl #2 _seq }
\seq_gset_split:cno
{ g_qa_rwe \g_qa_namespace_tl #2 _seq }
{ , }
{ #3 }
}
%****************************************************
%**
%****************************************************
%--------------------
\NewDocumentCommand { \qaprintq } { o m } {
% 1=namespace
% 2=seq name
\IfNoValueTF { #1 }
{ \tl_clear:N \g_qa_namespace_tl }
{ \tl_gset:Nn \g_qa_namespace_tl { #1 } }
\int_gset:Nn
\g_tmpa_int
{ 0 }
\group_begin:
\exp_args:Nx
\seq_map_function:cN
{ g_qa_rwe \g_qa_namespace_tl #2 _seq }
\qa_funcprintq:n
\group_end:
}
%****************************************************
%**
%****************************************************
%--------------------
\NewDocumentCommand { \qaprinta } { o m } {
% 1=namespace
% 2=seq name
\IfNoValueTF { #1 }
{ \tl_clear:N \g_qa_namespace_tl }
{ \tl_gset:Nn \g_qa_namespace_tl { #1 } }
\int_gset:Nn
\g_tmpa_int
{ 0 }
\group_begin:
\exp_args:Nx
\seq_map_function:cN
{ g_qa_rwe \g_qa_namespace_tl #2 _seq }
\qa_funcprinta:n
\group_end:
}
%****************************************************
%**
%****************************************************
%--------------------
\NewDocumentCommand { \qaprintqa } { o m } {
% 1=namespace
% 2=seq name
\IfNoValueTF { #1 }
{ \tl_clear:N \g_qa_namespace_tl }
{ \tl_gset:Nn \g_qa_namespace_tl { #1 } }
\int_gset:Nn
\g_tmpa_int
{ 0 }
\group_begin:
\exp_args:Nx
\seq_map_function:cN
{ g_qa_rwe \g_qa_namespace_tl #2 _seq }
\qa_funcprintqa:n
\group_end:
}
\ExplSyntaxOff
\begin{document}
\qaloadaseq[qa]{set1}{
What is $1+1$?;2
,What is half of twice two and a half?;Two and a half
,Are {1, 3, 5, 7} odd or even?;Odd
}
\section*{Questions}
\qaprintq[qa]{set1}
\section*{Answers}
\qaprinta[qa]{set1}
\section*{Teacher's Handbook}
\qaprintqa[qa]{set1}
\end{document}
答案2
我只是要把它作为答案发布出来,这样我们就可以关闭它了
\documentclass{article}
\usepackage{etoolbox}
\begin{document}
\def\abc{1}
\listxadd{\lista}{\abc}
\def\abc{2}
\listxadd{\lista}{\abc}
\renewcommand*{\do}[1]{#1}
\dolistloop{\lista}
\end{document}