tl_map 是否有一个版本可以做到不是忽略标记列表一部分的空格?
\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\tl_new:N \l_token_tl
\tl_set:Nn \l_token_tl { a~b~c }
%\tl_show:N \l_token_tl
\tl_map_inline:Nn \l_token_tl { (#1) }
\ExplSyntaxOff
\end{document}
此示例仅进行了三次迭代,忽略了所有空格。
答案1
您有两种可用的策略。
策略 1:用一些可以根据当前状态重新定义的函数替换空格
\tl_new:N \l_mhchem_input_tl
\tl_set:Nn \l_mhchem_input_tl { a ~ b ~ c } % this would come from a macro argument
\tl_replace_all:Nnn \l_mhchem_input_tl { ~ } { \__mhchem_space_do: }
\tl_map_inline:Nn \l_mhchem_input_tl { whatever with #1 }
策略 2:将标记列表拆分为随后可以使用的序列。
\seq_new:N \l_mhchem_split_input_seq
\seq_set_split:Nnn \l_mhchem_split_input_seq { ~ } { a ~ b ~ c } % this would come from a macro argument
\seq_use:Nn \l_mhchem_split_input_seq { do something in place of spaces }
您\seq_set_map:NNn
可以设置另一个序列,在存储的值周围添加一些内容\l_mhchem_split_input_seq
并使用这个新序列。
答案2
我为你准备了上述\seq
方法。我在序列的每个项后附加一个空格,然后使用 删除生成的尾随空格\tex_unksip:D
。
\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\cs_generate_variant:Nn \seq_set_split:Nnn { NnV }
\tl_new:N \l_token_tl
\tl_set:Nn \l_token_tl { a~b~c }
\seq_new:N \l_token_seq
\seq_set_split:NnV \l_token_seq { ~ } \l_token_tl
\seq_map_inline:Nn \l_token_seq { (#1)~ }
\tex_unskip:D % remove trailing space
\ExplSyntaxOff
\end{document}