在辅助文件中设置 expl3 序列的正确方法

在辅助文件中设置 expl3 序列的正确方法

考虑以下示例,其中它(全局)向文件中的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

  1. 变量的分配应该在.aux文件读入之前在前言中完成。

  2. 第一次运行时,结果为空,因为.aux文件是空的。

  3. 在下一次运行中,你将获得

    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}

相关内容