\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}
或者以其他方式明确该定义不是框架的标题。