我需要测试是否定义了多个中的一个。我知道这个命令:
\ifIsDefined{\MYVAR}{
% Do sometyhing
}
但是,我需要测试两个条件,例如
如果 A 或 B 已定义,则执行以下操作
你怎么能这样做呢?
。
答案1
使用包如果那么它很小,无法测试某事物是否已定义。
\ifthenelse{\(\NOT \isundefined{\MYVAR} \OR \NOT \isundefined{\MYSECONDVAR}\)}
{
%True case
}
{
% False case
}
请在此处查看更多示例:https://riptutorial.com/latex/example/28656/if-statements
答案2
基本上不需要额外的包,因为expl3
现在已经加载到 LaTeX 内核中。你甚至可以省去这样xparse
做
\ExplSyntaxOn
\newcommand{\xifthenelse}[3]
{
\bool_if:nTF { #1 } { #2 } { #3 }
}
在前几行中,但我会避免这样做,并希望xparse
保持一致性。代码来自我的另一个答案。
\ifthenelse
和from有什么区别ifthen
?这个新实现有完全可扩展测试。在 的第一个参数中,\xifthen
您可以使用任何已定义的测试,这些测试通过!
(表示“非”)、&&
(表示“与”)或||
(表示“或”)以及普通括号链接在一起。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\xifthenelse}{mmm}
{
\bool_if:nTF { #1 } { #2 } { #3 }
}
\cs_new_eq:NN \numtest \int_compare_p:n
\cs_new_eq:NN \oddtest \int_if_odd_p:n
\cs_new_eq:NN \fptest \fp_compare_p:n
\cs_new_eq:NN \dimtest \dim_compare_p:n
\cs_new_eq:NN \deftest \cs_if_exist_p:N
\cs_new_eq:NN \namedeftest \cs_if_exist_p:c
\cs_new_eq:NN \eqdeftest \token_if_eq_meaning_p:NN
\cs_new_eq:NN \streqtest \str_if_eq_p:ee
\cs_new_eq:NN \emptytest \tl_if_blank_p:n
\prg_new_conditional:Nnn \xxifthen_legacy_conditional:n { p,T,F,TF }
{
\use:c { if#1 } \prg_return_true: \else: \prg_return_false: \fi:
}
\cs_new_eq:NN \boolean \xxifthen_legacy_conditional_p:n
\ExplSyntaxOff
\begin{document}
\xifthenelse{ \deftest\MYVAR || \deftest\MYSECONDVAR }{%
One of them is defined%
}{
Neither is defined%
}
\newcommand\MYVAR{x}
\xifthenelse{ \deftest\MYVAR || \deftest\MYSECONDVAR }{%
One of them is defined%
}{
Neither is defined%
}
\end{document}