如何对逗号分隔的列表进行排序?

如何对逗号分隔的列表进行排序?

使用收据如何处理以逗号分隔的列表?,我针对自己的需求阐述了如下代码:

\ExplSyntaxOn

%\seq_new:N \l_input_seq % declare a list (seq) variable
\cs_if_exist:NTF \l_input_seq { } { \seq_new:N \l_input_seq }

%\tl_new:N \l_last_word_tl % declare a "token list" variable
\cs_if_exist:NTF \l_last_word_tl { } { \tl_new:N \l_last_word_tl }

\NewDocumentCommand { \PrintAnswer } { m }
  {
    \file_if_exist:nTF {#1}
      {
        \iow_term:n {****~Printing~#1}
        \file_input:n {#1}
        \refstepcounter {subsection}
      }
      {
        \iow_term:n {****~#1~not~found~****}
        %\iow_term:n {****~splitting~#1~about~/~****}
        % Split the argument into words about / sign.
        \seq_set_split:Nnn \l_input_seq { / } {#1}
        %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        %% Remove the last word from the seq.
        %\seq_pop_right:NN \l_input_seq \l_last_word_tl
        %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        % Stores the right-most item from a <sequence> in the <token list
        % variable> without removing it from the <sequence>. The <token list
        % variable> is assigned locally. If <sequence> is empty the <token 
        % list variable> will contain the special marker \q_no_value
        \seq_get_right:NN \l_input_seq \l_last_word_tl
        %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        \file_if_exist:nTF {\l_last_word_tl}
          {
            \iow_term:x {****~Printing~\l_last_word_tl~****}
            \file_input:n { \l_last_word_tl }
            \refstepcounter {subsection}
          }
          {
            %\iow_term:n {****~\l_last_word_tl~not~found~****}
            %\iow_term:x {****~\l_last_word_tl~not~found~****}
            \iow_term:x {****~\l_last_word_tl\space not~found~****}
          }
      }
  }
\cs_generate_variant:Nn \clist_map_inline:nn {o}
\NewDocumentCommand { \PrintAnswerList } { m }
  { \clist_map_inline:on {#1} { \PrintAnswer {##1.ans} } }
\ExplSyntaxOff

它用于对教科书进行条件编译,其中每一章(例如 101.tex、102.tex)将问题的答案写入以章节源文件的名称命名的文件中(例如 101.ans、102.ans 等)。在书的末尾,这些文件由宏读取,\PrintAnswer如下所示:

\PrintAnswerList{\inputfiles}

其中,\inputfiles宏在编译开始时使用以下技巧定义,以保持所需章节的列表以逗号分隔:

\typein[\inputfiles]{^^JEnter filename(s) for \protect\includeonly:}

一切正常。但现在我想扩展此代码的功能以允许对列表进行排序。假设我输入105,106,104(文件顺序错误),则现有代码会按该顺序打印答案,而104,105,106需要(文件顺序正确)。不幸的是,我自己对 latex3 编码的了解不足以解决这个问题。有人可以指导我找到解决方案吗?

相关内容