将字符串转换为标记列表?

将字符串转换为标记列表?

有没有办法将字符串放入标记列表并将其解释为好像字符串本身就是标记列表?

在下面的代码片段中,我希望/期望所有 3 个解决方案都显示真实分支(3 次“嗯,你好。”),但中间的一个显示“什么?”。

我该怎么做才能解决这个问题?我想放在标记列表左侧的字符串是给定的,来自另一个过程 - 这是我无法更改的(在我的用例中,显然不是下面的示例)。

\documentclass[varwidth,border=10pt]{standalone}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\clist_new:N \l_some_clist
\clist_put_right:Nn \l_some_clist {hello-world, bye-world}

% only token lists:
\tl_set:Nn \l_testBa_tl {hello}
\tl_set:Nn \l_testBb_tl {-world}
\tl_put_right:No \l_testBa_tl \l_testBb_tl
\clist_if_in:NoTF \l_some_clist \l_testBa_tl {
    well,~hello~there.
}{
    what?
}
\par
% token list with a string
\tl_set:Nn \l_testA_tl {hello}
\str_set:Nn \l_testA_str {-world}
\tl_put_right:No \l_testA_tl \l_testA_str
\clist_if_in:NoTF \l_some_clist \l_testA_tl {
    well,~hello~there.
}{
    what?
}
\par 
% token list with a string should be interpreted the same as if it would be entered manually:
\tl_set:Nn \l_testA_tl {hello}
\tl_put_right:Nn \l_testA_tl {-world}
\clist_if_in:NoTF \l_some_clist \l_testA_tl {
    well,~hello~there.
}{
    what?
}
\ExplSyntaxOff
\end{document}

PS:我看过将 LaTeX3 标记列表与字符串进行比较,但这似乎与 LaTeX3 字符串无关……

答案1

使用o参数时应使用括号。此外,有时您需要的是V参数(不需要括号)。

您可以\tl_set_rescan使用“给定的字符串”来执行此操作。

\str_set:Nn \l_given_str { -world } % this is the given string that you want to convert
                                    % to a normal token list

\tl_set:Nn \l_tmpa_tl { hello }
\tl_set_rescan:Nno \l_tmpb_tl { } { \l_given_str } % here you rescan to a normal token list
\tl_put_right:NV \l_tmpa_tl \l_tmpb_tl
\clist_if_in:NVTF \l_some_clist \l_tmpa_tl
 { well, ~ hello ~ there. }
 { what? }

相关内容