LaTeX3 定义条件函数

LaTeX3 定义条件函数

我在创建新条件时遇到了一个问题。条件的含义\foo_if_eq是检查全局变量\g_my_tl是否符合某个字符串bar,结果是真假。条件已创建并起作用,但当将其插入另一个条件时,在构建阶段会产生错误 -缺失数字,视为零。我无法理解错误的原因。

\documentclass{article}
\usepackage {expl3}

\ExplSyntaxOn
\tl_new:N \g_my_tl
\tl_gset:Nn \g_my_tl {bar}

\prg_new_conditional:Npnn \foo_if_eq:n #1 {p, T, F, TF}
{
  \tl_if_eq:NnTF \g_my_tl {#1}
    { \prg_return_true:  }
    { \prg_return_false: }
}

\NewDocumentCommand {\testNewConditional} {}
{
  \foo_if_eq:nTF {bar} % OK
    {TRUE}{FALSE} \\

  \bool_if:nTF { \foo_if_eq_p:n {bar} } % FAIL (Missing number, treated as zero)
    {TRUE}{FALSE} \\
}
\ExplSyntaxOff

\begin{document}
  \testNewConditional
\end{document}

\endinput

如果我在新检查中使用\str_if_eq而不是\tl_if_eq,则构建不会出错,并且一切正常。为什么?

\documentclass{article}
\usepackage {expl3}

\ExplSyntaxOn
\tl_new:N \g_my_tl
\tl_gset:Nn \g_my_tl {bar}

\prg_new_conditional:Npnn \foo_if_eq:n #1 {p, T, F, TF}
{
  \str_if_eq:VnTF \g_my_tl {#1}
    { \prg_return_true:  }
    { \prg_return_false: }
}

\NewDocumentCommand {\testNewConditional} {}
{
 \foo_if_eq:nTF {bar} % OK
    {TRUE}{FALSE} \\

  \bool_if:nTF { \foo_if_eq_p:n {bar} } % OK
    {TRUE}{FALSE} \\
}
\ExplSyntaxOff

\begin{document}
  \testNewConditional
\end{document}

\endinput

答案1

您不能创建使用不完全可扩展的函数的谓词(在 中用星号标记interface3)。这里,\tl_if_eq:nn是不可扩展的,因此它不能可以在谓词定义中使用。相反,\str_if_eq:nn是可扩展的,因此可以。

相关内容