无法使用 \newif 在数学模式下插入换行符和与号

无法使用 \newif 在数学模式下插入换行符和与号

我使用大量包含数学表达式的宏来编写讲义和 Beamer 幻灯片。我希望能够根据是否运行 Beamer 来设置条件格式。因此,我使用语句编写了条件代码\newif,效果很好除了当我想包含像\\和 这样的格式化字符时&,beamer 会抛出错误。以下是示例代码:有三行\ifThenBeamer代码:前两行抛出相同的错误,即

! Missing } inserted.
<inserted text> 
                }
l.40 \end{frame}

第三行很好。

\documentclass{beamer}
\newif\ifConditionOnBeamer
\makeatletter
\def\isConditionOnBeamer#1{
        \ifnum\pdf@strcmp{\useBeamer}{#1}=0
                \ConditionOnBeamertrue
        \else
                \ConditionOnBeamerfalse
        \fi
}
\makeatother
\def\useBeamer{on}
\def\BeamerOn{\isConditionOnBeamer{on}}
\def\BeamerOff{\isConditionOnBeamer{off}}
\def\ifThenBeamer#1#2{
    \ifConditionOnBeamer
        {#1}
    \else
        {#2}
    \fi
}
\BeamerOn
\begin{document}
\begin{frame}
\begin{align}
\ifThenBeamer{a \\ b}{c   d} %This throws a Missing } inserted error
\ifThenBeamer{a & b}{c   d}%This throws a Missing } inserted error
\ifThenBeamer{a b}{c   d}
\end{align}
\end{frame}
\end{document}

有人能解释一下为什么会出现这个错误,以及如何修复它吗?或者如果无法修复,有什么解决方法吗?

谢谢!

答案1

环境align内部使用表格 ( \halign),宏\ifThenBeamer将组括号括在参数周围。组会干扰表格单元格和行的组。如果没有括号,示例仍可正常运行:

\def\ifThenBeamer#1#2{
    \ifConditionOnBeamer
        #1%
    \else
        #2%
    \fi
}

一个更具防御性的版本将条件语句的扩展移到了开头:

\makeatletter
\newcommand*{\ifThenBeamer}{%
  \ifConditionOnBeamer
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}
\makeatother

\ifConditionOnBeamer调用First 。然后,\expandafter分支中的执行结束\else\fi. It remains\@firstoftwo or\@secondoftwo . The macro reads the two arguments and selects one of them. Then#1 or#2` 被调用,而没有来自条件的后续标记。

相关内容