如果我在 gdef 之前添加 % 则控制序列未定义

如果我在 gdef 之前添加 % 则控制序列未定义
\documentclass{beamer}

\begin{document}
\begin{frame}[t]
%
{\gdef\x{Hello}}%
%
\x

\end{frame}
\end{document}

此代码无法编译。xelatex 2023 给出错误

未定义控制序列。\end{frame}

但是如果我删除百分号,代码就可以编译。

我以为评论是不必要的。为什么它在这里很重要?

答案1

\begin{frame}[t]
%
{\gdef\x{Hello}}%
%
\x

相当于

\begin{frame}[t]{\gdef\x{Hello}}\x

即用选项启动一个框架t,将框架的标题设置为,\frametitle{\gdef\x{Hello}}并将其放入\x正文中。

如果你将其修改为

  %
  {\gdef\x{Hello}\x}%
  %

你会得到一个没有主体,只有标题“Hello”的框架。但这个定义在框架主体中不起作用。没有注释符号也能看到同样的效果。

\begin{frame}[t]
  {\gdef\x{Hello}}%
  %
  \x

也会出现同样的错误,因为\x它是在标题而不是正文中定义的。

为了避免这种情况,请留一个空行,删除(这里毫无意义的)括号\gdef,为框架标题和副标题提供空参数

\documentclass{beamer}

\begin{document}
  \begin{frame}[t]{}{}
  {\gdef\x{Hello}}%
  %
  \x
  
\end{frame}
\end{document}

或停止 TeX 搜索参数

\documentclass{beamer}

\begin{document}
  \begin{frame}[t]\relax
  {\gdef\x{Hello}}%
  %
  \x
  
\end{frame}
\end{document}

或者以其他方式明确该定义不是框架的标题。

相关内容