expl3:将 `\tl_map_function` 包装在 `int_step_function` 周围

expl3:将 `\tl_map_function` 包装在 `int_step_function` 周围

下面的代码显示了我想要得到的结果和遇到的障碍:

\documentclass{l3doc}
\usepackage{expl3}
\ExplSyntaxOn

\cs_set:Npn \__foo:n #1
{ 
    (#1)
}

\ExplSyntaxOff
\begin{document}
\ExplSyntaxOn

\tl_map_function:nN
    {{a}{b}}
\__foo:n % (a)(b) %OK

\tl_set:Nn \l_tmpa_tl
{
    \int_step_inline:nnnn{1}{1}{2}
    {
        %{ % inner braces
            \int_to_alph:n{#1}
        %}
    }
}

\\\tl_map_function:nN
    \l_tmpa_tl
\__foo:n % wanted (a)(b), getting (ab), including with inner braces

% \tl_map_function:nN
%{
%   \int_step_inline:nnnn{1}{1}{2}
%   {
%       \int_to_alph:n{#1}
%   } % wanted: (a)(b)
%% Getting:
%%! Missing number, treated as zero.
%%<to be read again> 
%%                   )
%% l.N } \__foo:n       
%%} \__foo:n

%% Same error for:
%\tl_set:Nx \l_tmpa_tl
%{
%   \int_step_inline:nnnn{1}{1}{2}
%   {
%       %{
%           \int_to_alph:n{#1}
%       %}
%   }
%}


\ExplSyntaxOff
\end{document}

答案1

如果你看着\tl_show:N \l_tmpa_tl这个值,你会发现它是不是 ab,但与之有很大不同。

您必须使用\tl_set:Nx\int_step_function:nnnN才能获取ab的内容\l_tmpa_tl。接下来,您需要\tl_map_function:NN使用 的值\l_tmpa_tl,而不是像 那样使用令牌本身\tl_map_function:nN

\documentclass{article}
\usepackage{expl3}
\begin{document}


\ExplSyntaxOn
\cs_set:Npn \__foo:n #1
 { 
    (#1)
 }

First:~\tl_map_function:nN {{a}{b}} \__foo:n

\par

\tl_set:Nx \l_tmpa_tl
 {
    \int_step_function:nnnN{1}{1}{2} \int_to_alph:n
 }

Second:~\tl_map_function:NN \l_tmpa_tl \__foo:n 

\ExplSyntaxOff

\end{document}

在此处输入图片描述

相关内容