在结合框架、居中和其他环境时如何避免产生虚假空间?

在结合框架、居中和其他环境时如何避免产生虚假空间?

我想在 中创建一个特殊环境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也可以解决这个特定问题。然而,接受的答案也可能修复其他问题,而且可以说这是解决此问题的首选方法。

相关内容