我试图使用
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}