新手使用 LaTeX 3:简单环境不起作用

新手使用 LaTeX 3:简单环境不起作用

我需要创建一个具有多个可选参数的自定义环境,因此我尝试使用 LaTeX 3(我的第一次体验)。但是,我似乎无法创建哪怕是最简单的环境。以下是一个例子。

在 LaTeX 中我可以这样做:

\documentclass{beamer}
\newenvironment{myframe}{\begin{frame}}{\end{frame}}

\begin{document}
\begin{myframe}
test
\end{myframe}
\end{document}

当然,它只不过是一个标准框架,但是可以工作。

在 LaTeX 3 中

\documentclass{beamer}
\usepackage{xparse}
\DeclareDocumentEnvironment{myframe}{}{\begin{frame}}{\end{frame}}


\begin{document}
\begin{myframe}
test
\end{myframe}
\end{document}

触发错误并且无法编译。

我错过了什么?

答案1

简短的回答是‘抱歉,这行不通’,至少在没有进行一些重大改变的情况下是行不通的beamer

原因在于beamer期望收集帧的方式,特别是当\begin{frame}/\end{frame}在另一个环境中“隐藏”时。使用 LaTeX2e,定义

\newenvironment{myframe}{\begin{frame}}{\end{frame}}

创建宏\endmyframe创建一个扩展的一步到位\end{frame}。然而,在xparse版本 life 中更复杂,并且\endframe不会产生\end{frame}(或者实际上\end{<something>}直接产生)。beamer代码要求将\endmymacro转换为\end{<something>},因此您会得到一个错误。事实上,您可以使用例如

\newenvironment{myframe}{\frame}{\endframe}

或者

\newenvironment{myframe}{\begin{frame}}{\endframe\endgroup}

否则,这两种方法都可能有效。

相关内容