在以下 MWE 中,当设置为时,\str_if_eq_p:nn
不计算为真。为什么?\l_aepoly_presentation_style_tl
ABC
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l_aepoly_presentation_style_tl
\NewDocumentCommand{\mqpoly}{ D(){ABC} m }
{\aepoly_parse_polynomial:nn {#1} {#2} }
\cs_new:Npn \aepoly_parse_polynomial:nn #1#2 {
\tl_set:Nn \l_aepoly_presentation_style_tl {#1}
\bool_if:nTF {
%% other possible boolean expressions to evaluate
\str_if_eq_p:nn { \tl_to_str:N \l_aepoly_presentation_style_tl } { ABC }
}
{ \iow_term:n { string ~ is ~ "ABC" } }
{ \iow_term:x { NOT ~ EQUAL -> ~ "\l_aepoly_presentation_style_tl" } }
}
\ExplSyntaxOff
\pagestyle{empty}
\begin{document}
\mqpoly(MNP){hello}
\mqpoly{hello}
\end{document}
答案1
您有两种解决方法:
- 使用
\str_if_eq_x_p:nn
以强制完全扩展 - 用于
\str_if_eq_p:Vn
访问令牌列表变量的值
选择哪一个只是一个偏好问题,但我会选择第二个,因为它避免了第二个参数的扩展。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\mqpoly}{ D(){ABC} m }
{\aepoly_parse_polynomial:nn {#1} {#2} }
\tl_new:N \l_aepoly_presentation_style_tl
\cs_new_protected:Npn \aepoly_parse_polynomial:nn #1#2
{
\tl_set:Nn \l_aepoly_presentation_style_tl {#1}
\bool_if:nTF
{
%% other possible boolean expressions to evaluate
\str_if_eq_p:Vn \l_aepoly_presentation_style_tl { ABC }
}
{ \iow_term:n { string ~ is ~ "ABC" } }
{ \iow_term:x { NOT ~ EQUAL ~ -> ~ "\l_aepoly_presentation_style_tl" } }
}
\ExplSyntaxOff
\pagestyle{empty}
\begin{document}
\mqpoly(MNP){hello}
\mqpoly{hello}
\end{document}
不要忘记使用\cs_new_protected:Npn
,因为您正在函数中进行分配。
输出为
NOT EQUAL -> "MNP"
string is "ABC"