我需要创建一个具有多个可选参数的自定义环境,因此我尝试使用 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}
否则,这两种方法都可能有效。