![`\str_if_in:nnTF` 的布尔版本 — expl3](https://linux22.com/image/449814/%60%5Cstr_if_in%3AnnTF%60%20%E7%9A%84%E5%B8%83%E5%B0%94%E7%89%88%E6%9C%AC%20%E2%80%94%20expl3.png)
我怎样才能将其用作\str_if_in:nnTF
布尔函数,即不带TF
参数,以便我可以在里面使用它
\bool_lazy_and:nnTF
{ \str_if_in:nn {abc} {a} }
{ ... }
{
true code
}{
false code
}
答案1
您可以使用包,它定义了(named )etl
的完全可扩展形式。请注意,的功能比等效功能慢,因此只有在必须可扩展时才应使用它。\tl_if_in:nnTF
\etl_if_in:nnTF
etl
expl3
\documentclass{article}
\usepackage{etl}
\ExplSyntaxOn
\cs_generate_variant:Nn \etl_if_in:nnTF { oo }
\prg_new_conditional:Npnn \antshar_str_if_in:nn #1#2 {p, TF, T, F}
{
\etl_if_in:ooTF { \tl_to_str:n {#1} } { \tl_to_str:n {#2} }
\prg_return_true:
\prg_return_false:
}
\NewExpandableDocumentCommand \antshartest { m m }
{
\bool_lazy_and:nnTF
{ !\tl_if_empty_p:n {#1} }
{ \antshar_str_if_in_p:nn {#1} {#2} }
{ true }
{ false }
}
\ExplSyntaxOff
\begin{document}
\antshartest{}{abc}
\antshartest{def{abc}def}{abc}
\end{document}
答案2
这是另一种解决方案functional
包裹:
\documentclass{article}
\usepackage{functional}
\begin{document}
\IgnoreSpacesOn
\boolVarAndTF {\strIfIn {abc} {a}} {\intCompare {1} < {2}} {
\prgReturn{True}
} {
\prgReturn{False}
}
\IgnoreSpacesOff
\end{document}