\if@ 语句解释

\if@ 语句解释

我正在尝试进行一些调整.cls以满足我的需要,如果有人能向我解释这些陈述,我将不胜感激:

\if@radseminar%
...
\else
...
\fi

如果我理解正确的话,它会匹配@radseminartrue,对吧?我该如何使用 OR 语句?例如,我尝试过

\if{@radtehnicka% or @radseminar%}

但也不匹配。

答案1

没有宏\if@...您看到的宏被称为\if@radseminar(是的,@并且所有后续内容都是宏名称的一部分)。

TeX 不支持布尔运算。您不能像在其他编程语言中一样将多个条件连接在一起。您需要通过嵌套来分别测试这些条件:

\if@radseminar
  <true>
\else
  \if@radtehnicka
    <true>
  \fi
  <else>
\fi

但是,有 LaTeX 软件包可以实现这一点,例如etoolbox或者ifthen(我听说后者不应该再使用)。

使用etoolbox,它看起来应该大致像这样:

\ifboolexpr{bool {@radseminar} or bool {@radtehnicka}}{<true>}{<false>}

答案2

正如其他人指出的那样,这\if@不是宏,只是宏名的一部分。对于初学者和/或文档来说,使用更高级的宏(如前面提到的etoolbox包中的宏)应该是首选。

使用较低级别的宏对多个 if 开关进行或组合的常用方法是使用\ifcase。它等待一个数字(0 或更高),然后仅执行相应的分支。分支由 分隔\or。最后一个分支可以用 分隔,\else如果没有该数字的明确分支,则执行该分支。

\ifcase0%
  \if@radtehnicka 1\fi
  \if@radseminar  1\fi
\relax
  % case 0: neither 'radtehnicka' or 'radseminar'

\else
  % case 1: 'radtehnicka' or 'radseminar'

\fi

这里使用了一个技巧:0%给出默认值。由于%TeX 一直在寻找可以跟在后面的数字,0并且将其作为单个数字的一​​部分。TeX 会扩展所有后续标记(例如宏),直到找到非数字。然后这里使用两个 if 开关,1如果它们是,则插入一个,但不插入其他标记真的并扩展到零,如果错误的。因此 TeX 继续寻找更多标记并处理更多\if@... \fi行。它会在 处停止寻找数字\relax。如果两个 if 开关都不符合真的最终数字是,0因此执行 case 0 分支。如果其中一个是真的最终数字是01ie 1,因此执行 case 1 分支。如果两者都是真的最终数字是011,即将执行 case 11 分支。但是,由于使用了 ,11因此不存在 case 1 或 11。在这两种情况下,都会执行分支,从而有效地将两个 if 开关进行或组合。\else\else

相关内容