投影仪中的花括号问题-为什么?

投影仪中的花括号问题-为什么?

我正在努力解决一个可以在投影机中自动生成一些帧的宏。在这样做的过程中,我遇到了一个我不完全理解的情况。我的教学示例归结为以下内容:

\documentclass{beamer}
\begin{document}
\frame{Works}
\frame\begingroup Barks-why? \endgroup
\frame\bgroup Barks-why? \egroup
\end{document}

为什么第二和第三帧对我大喊大叫,声称存在语法问题?

我将非常感激您对此的一些想法。

答案1

在命令形式中使用时,\frame接受参数的全部内容作为将在框架内设置的内容。此参数定义为支撑组或者令牌紧接着\frame。就你的情况而言,代币导致问题的原因在于打开了一个未正确关闭的组。

  • 在第一种情况下 - \frame{Works}- 这将是Works。没问题。

  • 在第二种/第三种情况下 - \frame\begingroup .../\frame\bgroup ...这将是\begingroup/ \bgroup。它们设置在框架内(框架本身具有作用域),并且没有用\endgroup/正确关闭\egroup

这就是为什么你会看到指向“忘记”的错误\engroup

! Extra }, or forgotten \endgroup.
\endbeamer@frameslide ...amer@framepauses}\egroup 
                                                  \ifx \beamer@frametitle \@...
l.8 \frame\begingroup
                      Barks-why? \endgroup

答案2

对我来说,提醒自己它们存在的理由是有帮助的:你想要这样的东西

\def\beginmyenviron{ABC \bgroup abc}
\def\closemyenviron{xyz \egroup XYZ} 

这样你就可以更自由地控制局部变量。在这种情况下,你不希望\bgroup被精确地解释为一个{字符,否则第一个定义将永远不会结束。

\something然后事情就卡在这里了。你无法想出一个定义,

\def\beginmyenviron{ABC \something abc}

{在定义时不被视为字符,但{在使用时被视为字符。例如,您可以尝试\edef,但\edef不会\bgroup变成{

因此,回答你最初的问题,安全的做法是使用\begin{frame}\end{frame} 建立你的宏。

如果您真的讨厌\begin\end,另一种方法是使用 holder-macro。

\def\content{First sentence.}
\expandafter\def\expandafter\content\expandafter{\content second sentence.}
\expandafter\def\expandafter\content\expandafter{\content third sentence.}
\expandafter\def\expandafter\content\expandafter{\content fourth sentence.}
and then finally
\frame{\content}

相关内容