先给一个workaround:
\documentclass{beamer}
\usepackage{lipsum}
\usepackage{setspace}
\newenvironment{myframe}[2][1.5]
{%
\begin{frame}[#2]
\setstretch{#1}
}%
{%
\end{frame}
}%
\begin{document}
\begin{frame}
\lipsum[1][1-5]
\end{frame}
\begin{myframe}[3]{t}
\lipsum[1][1-5]
\end{myframe}
\begin{myframe}[2]{c}
\lipsum[1][1-5]
\end{myframe}
\begin{frame}
\lipsum[1][1-5]
\end{frame}
\end{document}
同时它要接受一些参数,并将其传递给frame环境,考虑到frame环境是一个脆弱的环境,我的尝试总是失败。
当提到「总是失败」时,最好贴一下报错信息,这样更容易让这个问题被别人搜索到,也更完整。下面看我的几个探索。
探索一:
你的问题和参数有关吗?并不是。下面的例子中,frame
没问题;但myframe
有问题。
\documentclass{beamer}
\usepackage{lipsum}
\usepackage{setspace}
\newenvironment{myframe}
{%
\begin{frame}
\begin{spacing}{2}
}%
{%
\end{spacing}
\end{frame}
}%
\begin{document}
\begin{frame}
\begin{spacing}{2}
\lipsum[1][1-5]
\end{spacing}
\end{frame}
\begin{myframe}
\lipsum[1][1-5]
\end{myframe}
\end{document}
报错信息:
! File ended while scanning use of \beamer@collect@@body.
<inserted text>
\par
<*> mwe
?
探索二:
这个问题和beamer
提供的frame
环境有关吗?换成minipage
看看(?)
\documentclass{beamer}
\usepackage{lipsum}
\usepackage{setspace}
\newenvironment{myframe}
{%
\begin{minipage}{\textwidth}
\begin{spacing}{2}
}%
{%
\end{spacing}
\end{minipage}
}%
\begin{document}
\begin{minipage}{\textwidth}
\begin{spacing}{2}
\lipsum[1][1-5]
\end{spacing}
\end{minipage}
\begin{myframe}
\lipsum[1][1-5]
\end{myframe}
\end{document}
并没有报错,所以这是"非常独特的",当且仅当同时使用frame
内嵌spacing
才会触发错误。
最后从这个链接来看,用\setstretch
可以规避这一问题,所以有了workaround...
最后的最后,不要忘记问题并没有真正解决...
翻到一个神奇的结论:
由于beamer
实在是太坏了。egreg说:
Moral of the story
Don't usesetspace
withbeamer
😀.
问 如何将自定义的myframe的参数传递给frame?