感觉这个代码不是人写的...\tl_gclear:N \l_tmp_combined_tl里面的变量根本没用上,应该是\g_combined_tl
问题的关键是变量\seq_new:N \g_infos_seq在两次赋值之间没有\seq_gclear,下面是修改过后调试版的mwe:
\documentclass{ctexart}
\usepackage{expl3} % 加载 expl3 宏包
\begin{document}
\ExplSyntaxOn
% 声明全局序列
\seq_new:N \g_infos_seq
% 声明两个令牌列表
\tl_new:N \g_info_tl
\tl_new:N \g_title_tl
% 定义一个新的令牌列表用于存储拼接结果
\tl_new:N \g_combined_tl
% 定义一个新命令,将两个令牌列表拼接并添加到序列中
% 这个\concat_and_add_to_seq:的逻辑应该是:
% 清空\g_combines_tl,合并两个token_list,最后转换为seq
\cs_new:Nn \concat_and_add_to_seq:
{
\tl_gclear:N \g_combined_tl
g_combined_tl~First~:\tl_use:N \g_combined_tl \par
% 将第一个令牌列表的内容赋值到新令牌列表
\tl_gset:Nx \g_combined_tl { \g_info_tl }
g_combined_tl~Second~:\tl_use:N \g_combined_tl \par
% 将第二个令牌列表的内容追加到新令牌列表
\tl_gput_right:Nn \g_combined_tl { \g_title_tl }
g_combined_tl~Third~:\tl_use:N \g_combined_tl \par
% 将拼接后的令牌列表推送到全局序列的右边
\seq_gput_right:NV \g_infos_seq \g_combined_tl
seq的输出结果: \seq_use:Nn \g_infos_seq {} \par
}
% 给两个令牌列表赋值
\tl_gset:Nn \g_info_tl {123}
\tl_gset:Nn \g_title_tl {456}
% 调用命令将拼接结果添加到序列中
\concat_and_add_to_seq:
\seq_use:Nn \g_infos_seq {\par}
\seq_gclear:N \g_infos_seq \par
% 给两个令牌列表赋值
\tl_gset:Nn \g_info_tl {abc}
\tl_gset:Nn \g_title_tl {def}
% 调用命令将拼接结果添加到序列中
\concat_and_add_to_seq:
% 显示序列的内容
\seq_use:Nn \g_infos_seq {\par}
\ExplSyntaxOff
\end{document}




















问 latex3令牌串相关