如何将变量值保存到列表中

如何将变量值保存到列表中

我想将令牌的内容保存到这样的列表中。

\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}

相关内容