考虑以下示例,其中它(全局)向文件中的TEST
序列添加一个元素。然后,如果要求它在辅助文件中立即显示序列内容,结果是正确的(这是注释代码)。但是,如果稍后要求在文档中显示,它会显示序列为空。考虑到确实是全局版本,为什么会发生这种情况?正确的方法是什么?\g__mymodule_test_seq
.aux
\seq_gput_right:Nn
\documentclass{article}
\begin{document}
\makeatletter
\ExplSyntaxOn
\seq_new:N \g__mymodule_test_seq
\iow_now:cx { @auxout }
{
\token_to_str:N \ExplSyntaxOn
^^J
\token_to_str:N \seq_gput_right:Nn \token_to_str:N \g__mymodule_test_seq {TEST}
^^J
\token_to_str:N \ExplSyntaxOff
}
%% This shows empty
\seq_show:N \g__mymodule_test_seq
%% This shows "TEST"
% \iow_now:cx { @auxout }
% {
% \token_to_str:N \ExplSyntaxOn
% ^^J
% \token_to_str:N \seq_show:N \token_to_str:N \g__mymodule_test_seq
% ^^J
% \token_to_str:N \ExplSyntaxOff
% }
\ExplSyntaxOff
\end{document}
该文件的内容.aux
是:
\relax
\ExplSyntaxOn
\seq_gput_right:Nn\g__mymodule_test_seq{TEST}
\ExplSyntaxOff
\gdef \@abspage@last{1}
答案1
变量的分配应该在
.aux
文件读入之前在前言中完成。第一次运行时,结果为空,因为
.aux
文件是空的。在下一次运行中,你将获得
The sequence \g__mymodule_test_seq contains the items (without outer braces): > {TEST}.
完整代码,\seq_show:N
可以在指令之前或之后\iow_now:ce
(现在更倾向于\iow_now:cx
)
\documentclass{article}
\ExplSyntaxOn
\seq_new:N \g__mymodule_test_seq
\ExplSyntaxOff
\begin{document}
\ExplSyntaxOn
\iow_now:ce { @auxout }
{
\token_to_str:N \ExplSyntaxOn
^^J
\token_to_str:N \seq_gput_right:Nn \token_to_str:N \g__mymodule_test_seq {TEST}
^^J
\token_to_str:N \ExplSyntaxOff
}
\seq_show:N \g__mymodule_test_seq
\ExplSyntaxOff
\end{document}