我想定义一个条件函数\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
- 这可能意味着您必须更加“重复”。