将自定义环境(使用 environ 包)的开始和结束放在命令中

将自定义环境(使用 environ 包)的开始和结束放在命令中

我试图使用 environ包裹。新环境可以毫无问题地定义。由于一些个人原因,我想将环境的开始和结束放到一些宏中。

请参阅此 MWE:

\documentclass{article}

\usepackage{environ}

\makeatletter
\NewEnviron{workpl@n}{\BODY}[\relax]

% The following will not pose any problem
% \newenvironment{workpl@n}{\relax}{\relax}

\def\beginworkplan{\begin{workpl@n}}
\def\endworkplan{\end{workpl@n}}
\makeatother

\begin{document}

% Does not work
% \beginworkplan

\makeatletter
% Works 
\begin{workpl@n}

Plan

% Works 
\end{workpl@n}

% Does not work
% \endworkplan
\makeatother

\end{document}

奇怪的是\beginworkplan\endworkplan命令对失败并显示以下消息:

!LaTeX 错误:\begin{workpl@n} 在输入第 14 行以 \end{document} 结束。

但是,如果直接启动和完成环境(使用\begin{workpl@n}\end{workpl@n}),它也可以起作用。

此外,如果使用基本命令定义了新环境\newenvironment,则将环境的开始和结束放置在\beginworkplan\endworkplan 处根本不会造成任何问题。

我需要使用,\NewEnviron因为我有必要收集环境体

答案1

请注意,使用以下方式定义的环境\NewEnviron 观察\end以确定身体的范围。

然而,为了您的目的,您不需要environ,但我绝对不建议这样做。

\documentclass{article}

\long\def\beginworkplan#1\endworkplan{%
  whatever with #1% #1 here is the same as \BODY with \NewEnviron
}

\begin{document}

\beginworkplan
Plan
\endworkplan
\makeatother

\end{document}

相关内容