如何在 expl3 条件谓词中使用受保护的函数?

如何在 expl3 条件谓词中使用受保护的函数?

我想定义一个条件函数\if_is_int:n(TF)来测试参数是否是整数,所以我写道:

\documentclass{article}
\begin{document}
  \ExplSyntaxOn
    \prg_new_conditional:Npnn \my_cond:n #1 { p, T, F, TF } 
      {     
        \regex_match:nnTF { [\+\-]?\d+ } { #1 }
          { \prg_return_true: }
          { \prg_return_false: } 
      }
    \bool_if:nTF { \my_cond_p:n { hello } } { true } { false } % missing number
    % \my_cond:nTF { hello } { true } { false } % output false
  \ExplSyntaxOff
\end{document}

pdflatex 之后,它返回

! Missing number, treated as zero.
<to be read again> 
                   \group_begin: 
l.11     \bool_if:nTF { \my_cond_p:n { hello } }
                                                 { true } { false } % missin.

如果我\if_is_int:nTF直接使用,效果很好。

我找到了这个答案https://tex.stackexchange.com/a/630105/180617其中写道:

expl3 中的布尔表达式通过扩展来工作,因此它们在实现中只能包含可扩展函数:这些函数在 interface3.pdf 中用星号标记

所以我不能使用\regex_match:nnTF\prg_new_conditional:Npnn因为\regex_match:nnTF\protected

在此处输入图片描述

但是,如果我使用\prg_new_protected_conditional:Npnn,我就无法使用p我需要的参数。

有没有什么方法可以用来\if_is_int_p:n测试“是否为整数” \bool_if:nTF

答案1

你不能使用任何不可扩展的函数来定义谓词,正如链接的答案所建议的那样。这意味着你不能使用例如任何正则表达式在谓词中起作用。相反,您需要重新设计方法以使用分支TF- 这可能意味着您必须更加“重复”。

相关内容