我想重新定义frame
环境,beamer
以便内容位于框架中心的框内,但是当我尝试定义新的环境时,如下:
\newenvironment{hframe}[1]
{%before
\begin{frame}{{#1}}
\begin{textblock}{11}(2,2)
}{ %after
\end{textblock}
\end{frame}
}
...
\begin{document}
...
\begin{hframe}{title}
some text
\end{hframe}
\end{document}
我收到编译错误:"! File ended while scanning use of \frame."
。但如果我使用以下代码
\newenvironment{hframe}[1]
{%before
\begin{frame}{{#1}}
\begin{textblock}{11}(2,2)
}{ %after
%\end{textblock}
\end{frame}
}
...
\begin{document}
...
\begin{hframe}{title}
some text
\end{textblock}
\end{hframe}
\end{document}
它有效...任何线索都表明发生了什么,我怎样才能将其包含\end{textblock}
在“结束”参数中\newenvironment
?
答案1
你不能像这样包装beamer
框架环境:它或多或少是逐字逐句的情况。您需要创建适当的beamer
主题,该主题是在收集框架后构建的。
答案2
第 8.1 节框架环境用户指南中解释了为什么当 TeX成为您自己的环境的一部分时它beamer
会错过您。\end{frame}
Joseph 建议创建一个合适的主题,这是一个更好的主意,但是(正如指南中该部分所解释的那样)您可以将选项传递fragile
给frame
,并使用 选项告诉它您的封闭环境的名称environment=hframe
。但请注意使用 的后果fragile
。
由于您没有提供完整的 MWE,因此我可以尽力帮助您实现您的尝试:
\documentclass{beamer}
\usepackage{textpos}
\newenvironment{hframe}[1]
{%before
\begin{frame}[fragile,environment=hframe]{{#1}}
\begin{textblock}{11}(2,2)
}{%after
\end{textblock}
\end{frame}
}
\begin{document}
\begin{hframe}{title}
some text
\end{hframe}
\end{document}