序言中的 If、elseif 和 else 条件

序言中的 If、elseif 和 else 条件

我有一个场景,我需要根据序言中的一些条件定义一些命令和环境。我曾经使用,使用或\newtoggle设置条件并使用包中定义的宏。但是,我现在拥有的条件不受布尔类型的约束。它符合下面的 if-else 结构\toggletrue\togglefalse\iftoggleetoolbox

if <condition 1>
    define commands <a1, a2>
    define environments <b1, b2>
elseif <condition 2>
    define commands <a3, a4>
    define environments <b3, b4>
.. 
else
    define commands <p, q>
    define environments <x, y>

我尝试使用该algorithmic包,但显然我无法在序言中使用它。我有什么办法可以在序言中定义多条件 if-else 情况吗?

Update 1不同情况下的命令和环境名称相同,只是定义不同

Update 2条件有多种toggles,我打算用\newtoggle命令来定义条件变量。

\newtoggle{variable1}
\toggletrue{variable1}
\newtoggle{variable2}
\togglefalse{variable2}

条件的伪代码如下

% The conditions
if variable1 && variable2
    % do something
else if variable1 && !variable2
    % do something else
else if !variable1 && variable2
    % do the thing
else 
    % do the other thing

我知道可以使用嵌套的 if 条件来完成此操作,但我想知道是否有任何非嵌套的方法可以做到这一点。

答案1

与几乎所有编程语言一样,\if...语句可以嵌套,但是,没有\elseif,因此\else \if....必须使用并以 结尾\fi

\if...可以使用以下方式定义新变量(实际上是宏)

\newif\ifsomename

最初设置为假状态。\somenametrue将设置为true\somenamefalse将设置为假。

然而,在 TeX 中嵌套\if...\fi可能非常繁琐。

以下是一些伪代码

\ifsomething...
 do this and that
\else
\ifsomethingother
...
\else
\ifsomethingmore
\fi
\fi
\fi

下面的小例子应该用粗体字体打印‘Foo that’,因为\dothattrue已经指定。

\documentclass{article}


\newif\ifdothis

\newif\ifdothat

\dothattrue  % Setting the state of the boolean variable \ifdothat` to true, otherwise it's false already (or use \dothatfalse explicitly)

\ifdothis

\newcommand{\foo}{\textbf{Foo}}
\else
\ifdothat
\newcommand{\foo}{\textbf{Foo that}}
\else
\newcommand{\foo}{\textbf{Dummy content}}
\fi % \fi of \ifdothat
\fi % Outer \fi


\begin{document}
\foo

\end{document}

答案2

可以使用普通的 TeX 条件来处理多个条件\ifnum,例如

\ifnum0%
  \iffirstsomething 1\fi
  \ifsecondsomething 1\fi
  >0 %
  % Do stuff
\fi

只有满足至少一个条件时才会执行该操作。同样

\ifnum0%
  \iffirstsomething\else1\fi
  \ifsecondsomething\else1\fi
  =0 %
  % Do stuff
\fi

仅当两个条件都满足时才会为真。

相关内容