無法使用 \newif 在數學模式下插入換行符號和 & 符號

無法使用 \newif 在數學模式下插入換行符號和 & 符號

我使用大量包含數學表達式的巨集來編寫講義和投影機幻燈片。我希望能夠根據是否運行投影機進行格式化。所以我使用\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被稱為。然後\expandafter分支中的 執行結束\else或呼叫\fi. It remains\@firstoftwo or\@secondoftwo . The macro reads the two arguments and selects one of them. Then#1 or#2` ,而無需條件中的後續標記。

相關內容