Using receipt of How to process a comma separated list?, I elaborated the following code for my needs:
\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
It is intended for conditional compilation of a textbook, every chapter of which (eg, 101.tex, 102.tex) writes answers to problems to the file named after the name of the chapter source file, (eg, 101.ans, 102.ans etc). Near the end of the book these files are read in by the macro \PrintAnswer as foolows:
\PrintAnswerList{\inputfiles}
where \inputfiles macro is defined at the start of compilation using the following trick to keep comma separated list of desired chapters:
\typein[\inputfiles]{^^JEnter filename(s) for \protect\includeonly:}
Everything works fine. But now I'd like to extend the functionality of this code to allow for sorting of the list. Suppose, I type 105,106,104 (with wrong order of files), then the existing code prints the answers in that order while 104,105,106 (with correct order of files) is desired. Unfortunately, my own knowledge of latex3 coding is insufficient to solve this problem. Can someone direct me on the way to a solution?
21.texcomes later, in alphabetical order, than111.tex– egreg Jan 20 '16 at 13:2221.texwill be021.tex. Then, alphabetical and numerical sorting gives same result, – Igor Kotelnikov Jan 21 '16 at 05:32\clist_sort:Nnandinterface3.pdfhas an example for numerical sorting… – cgnieder Apr 19 '17 at 10:51