在开发 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
也会如此。
我在这里遗漏了什么(可扩展性)或者可以做什么?
谢谢你的帮助 !