LaTeX3:带空格的 tl_map

LaTeX3:带空格的 tl_map

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}

相关内容