在 expl3 中生成受保护/可扩展的谓词

在 expl3 中生成受保护/可扩展的谓词

在开发 expl3 包时,我收到一个请求,要求将“expl3 谓词函数”设置为可扩展或受保护(https://github.com/alceu-frigeri/starray/issues/1)。

具体来说,我被困在:

\documentclass{article}
\RequirePackage{expl3}
\ExplSyntaxOn

\prg_new_protected_conditional:Npnn \__starray_if_free:n #1 {T, F, TF}
  {
    \prop_if_exist:cTF {#1}
      { \prg_return_false: }
      { \prg_return_true: }
  }
%\prg_generate_conditional_variant:Nnn \__starray_if_free:n {e} {T, F, TF}

\prg_new_protected_conditional:Npnn \starray_new:n #1 {T, F, TF}
  {
    \__starray_if_free:nTF {\l__starray_prefix_tl #1 _def_prop}
      {
%        \__starray_new:e {#1 }
%        \__starray_base_new:ee {#1}{#1} % TODO: might be incomplete !!!
        \prg_return_true:
      }
      { \prg_return_false: }
  }

\ExplSyntaxOff

\begin{document}
 this ~  is ~ just ~ a  ~ test 
\end{document}

例如,如果我将 {T, F, TF} 替换为 {p, T, F, TF},乳胶就会抱怨, Predicate '\starray_if_free_p:n' must be expandable.

据我了解(来自 interface3.pdf),鉴于 \prop_if_exist:cTF 是完全可扩展的,我认为至少\__starray_if_free_p:n也会如此。

我在这里遗漏了什么(可扩展性)或者可以做什么?

谢谢你的帮助 !

相关内容