LaTeX `或` 语句

LaTeX `或` 语句

我需要测试是否定义了多个中的一个。我知道这个命令:

\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}

在此处输入图片描述

相关内容