如何在 expl3 中测试 \newif 条件

如何在 expl3 中测试 \newif 条件

假设我想测试一个\ifSomething由可能加载也可能不加载的包定义的条件。我知道如何在纯 LaTeX 中执行此操作,但我想定义一个 expl3 条件来执行相同的工作。我该怎么做呢?

MWE 通过bidi包及其\if@RTL条件来说明该案例。

% !TeX program = xelatex
\documentclass{article}
\usepackage{xparse}
\usepackage{bidi}

\makeatletter
% traditional method
\newcommand{\TestRTL}{%
  \@ifundefined{if@RTL}{NO BIDI}%
  {%
    \if@RTL%
    YES%
    \else
    NO%
    \fi%
  }%
}

\ExplSyntaxOn

% non-working first attempt
\prg_new_conditional:Nnn \stdt_if_rtl: {p,T,F,TF}
{
  \bool_lazy_and:nnTF {\bool_if_exist_p:N \if@RTL}  {\bool_if_p:N \if@RTL}
  { \prg_return_true: }
  { \prg_return_false: }
}

\NewDocumentCommand{\TestRTLAlt}{}{
  \stdt_if_rtl:TF {YES} {NO}
  }

\ExplSyntaxOff
\makeatother

\begin{document}

\TestRTL % \TestRTLAlt

\begin{RTL}
  \TestRTL % \TestRTLAlt
\end{RTL}

\end{document} 

答案1

经过一些实验后,这似乎起了作用。

% !TeX program = xelatex
\documentclass{article}
\usepackage{xparse}
\usepackage{bidi}

\makeatletter
\ExplSyntaxOn

\prg_new_conditional:Nnn \stdt_if_rtl: {p,T,F,TF}
{
  \bool_lazy_and:nnTF {\bool_if_exist_p:N \@RTLtrue}  {\cs_if_eq_p:NN \if@RTL \iftrue}
  { \prg_return_true: }
  { \prg_return_false: }
}

\NewDocumentCommand{\TestRTLAlt}{}{
  \stdt_if_rtl:TF {YES~IT~IS} {NO~IT~ISN'T}
}

\ExplSyntaxOff
\makeatother

\begin{document}
\TestRTLAlt

\begin{RTL}
  \TestRTLAlt
\end{RTL}
\end{document}

相关内容