使用 \textblock 与 \newenvironment 时出现问题

使用 \textblock 与 \newenvironment 时出现问题

我想重新定义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 建议创建一个合适的主题,这是一个更好的主意,但是(正如指南中该部分所解释的那样)您可以将选项传递fragileframe,并使用 选项告诉它您的封闭环境的名称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}

相关内容