\ colorbox的三重包装?\ NewEnviron?\newenvironment失败

kol*_*pto 5 latex wrapper latex-environment

我试图将一个用\NewEnviron(包'environ')创建的环境包装成一个旧商品\newenvironment:

\NewEnviron{test}{\colorbox[gray]{0.7}{\BODY}}
\newenvironment{wrapper}{\begin{test}}{\end{test}}

\begin{wrapper}
debug me
\end{wrapper}
Run Code Online (Sandbox Code Playgroud)

但是,这给了我一个奇怪的错误:

LaTeX错误:输入行15上的\ begin {test}以\ end {wrapper}结束.LaTeX错误:\ begin {wrapper}在输入行15上以\ end {document}结束.

如果我更换\NewEnviron{test}{aaa(\BODY)bbb}\newenvironment{test}{aaa(}{)bbb}-按预期工作的一切!似乎\NewEnviron由于某种原因未能找到它的结局.

我试图用'floatfig'包装成一个魔法,\colorbox所以我需要一种方法来转换\colorbox为环境并将其包装到另一个环境中.我可以定义一个新命令,但这不是一个好主意.

Ale*_*tov 6

事情是这样,\NewEviron\newenvironment以不同的方式工作.

1)\newenvironment{test}{aaa(}{)bbb}定义两个命令:\testis aaa(\endtestis )bbb.

\begin{test}扩大到\test.

\end{test}扩大到\endtest并检查你的范围开头begin{test}相当\begin{something else},例如\begin{wrapper}.

2)以不同的方式\NewEviron{test}{aaa(\BODY)bbb}定义\test.首先\test抓住\BODY使用以下技巧

\def\test#1\end{\def\BODY{#1}aaa(\BODY)bbb\testcontinue}
Run Code Online (Sandbox Code Playgroud)

(名称\testcontinue可能不同)和插入aaa(\BODY)bbb.然后\testcontinue检查\end某些输入行上的结果\end{test}而不是\end{something else}.\endtest 不需要宏,因为它永远不会被执行.

看看你的代码:

\begin{wrapper}
debug me               
\end{wrapper} 
Run Code Online (Sandbox Code Playgroud)

\begin{wrapper}扩大到\begin{test}.然后 \begin{test}扩展到\test.\test赶上\BODY.注意!\BODY等于debug me.现在\testcontionue检查结束\end后.这不是真的.缺席.有.\BODY\end{test}\end{test}\end{wrapper}

你想说\end{wrapper}必须扩展到\end{test}.但\end在包装被吃掉之前

macro \test: #1\end{\def\BODY{#1}aaa(\BODY)bbb\testcontinue}
Run Code Online (Sandbox Code Playgroud)

并且无法执行.

我希望我成功解释.