Булева версия `\str_if_in:nnTF` — expl3

Булева версия `\str_if_in:nnTF` — expl3

Как я могу использовать \str_if_in:nnTFкак булеву функцию, т.е. без TFаргументов, чтобы я мог использовать ее внутри

\bool_lazy_and:nnTF
      { \str_if_in:nn {abc} {a} }
      { ... }
      {
        true code
      }{
        false code
      }

решение1

Вы можете использовать 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}

введите описание изображения здесь

Связанный контент