我想在 中创建一个特殊环境beamer
,它结合了多个环境,其中一个是center
。但是,使用新创建的环境时,与手动使用命令相比,我会获得额外的空间。
这是一个简单的例子:
\documentclass[20pt]{beamer}
\newenvironment{myenv}
{\begin{frame}[fragile,environment=myenv]\begin{center}\begin{tabular}{c}}
{\end{tabular}\end{center}\end{frame}}
\begin{document}
\begin{myenv}%
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%
\end{myenv}
\begin{frame}\begin{center}\begin{tabular}{c}%
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%
\end{tabular}\end{center}\end{frame}
\end{document}
在第二帧中,文本按预期居中;在第一个帧中,它向左移动,就好像在末尾包含一个额外的空格一样。
除 之外的某些环境也会发生同样的情况,tabular
但如果我没有在其中嵌套另一个环境,则不会发生这种情况center
。使用\ignorespacesafterend
没有帮助。
答案1
正如Beamer 手册v3.33 在第 62 页末尾,当尝试frame
在 中使用环境时\newenvironment
,结尾必须以 结尾,\end{frame}
并且不包含任何其他\end
命令,因为实际机制有些敏感。因此,为了添加其他环境,手册建议定义一个单独的新命令来包含所有内容。
这是根据您的示例修改的版本。
\documentclass[20pt]{beamer}
\newenvironment{myenv}
{\begin{frame}\startmyenv}
{\stopmyenv\end{frame}}
\newcommand\startmyenv{\begin{center}\begin{tabular}{c}}
\newcommand\stopmyenv{\end{tabular}\end{center}}
\begin{document}
\begin{myenv}
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\end{myenv}
\begin{frame}\begin{center}\begin{tabular}{c}
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\end{tabular}\end{center}\end{frame}
\end{document}
上述示例的输出应该渲染两个相同的帧而没有虚假空格。
答案2
我刚刚发现,使用fragile=singleslide
(而不仅仅是fragile
)作为参数frame
也可以解决这个特定问题。然而,接受的答案也可能修复其他问题,而且可以说这是解决此问题的首选方法。