我试图将一个用\NewEnviron
(包'environ')创建的环境包装成一个旧商品\newenvironment
:
\NewEnviron{test}{\colorbox[gray]{0.7}{\BODY}}
\newenvironment{wrapper}{\begin{test}}{\end{test}}
\begin{wrapper}
debug me
\end{wrapper}
但是,这给了我一个奇怪的错误:
LaTeX错误:输入行15上的\ begin {test}以\ end {wrapper}结束。LaTeX错误:输入行15上的\ begin {wrapper}以\ end {document}结束。
如果我更换\NewEnviron{test}{aaa(\BODY)bbb}
与\newenvironment{test}{aaa(}{)bbb}
-按预期工作的一切!似乎\NewEnviron
由于某种原因未能找到它的终点。
我试图用'floatfig'包装成一个魔法,\colorbox
所以我需要一种方法来转换\colorbox
为环境并将其包装到另一个环境中。我可以定义一个新命令,但这不是一个好主意。
发布于 2018-09-12 08:40:01
我发现了一个hacky技巧来创建一个可以包装在另一个环境中的环境。应该使用像这样的saveBoxes:
\newenvironment{example}[2][]{%
\newsavebox{\exampleStore} % Box storage
\begin{lrbox}{\exampleStore} % Start capturing the input
}{%
\end{lrbox} % Stop capturing the input
\colorbox[gray]{0.7}{%
\usebox{\NBstorage} % Load the box's contents
}%
}%
}%
发布于 2018-09-12 10:24:12
事情是这样,\NewEviron
并\newenvironment
以不同的方式工作。
1)\newenvironment{test}{aaa(}{)bbb}
定义两个命令:\test
is aaa(
和\endtest
is )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}
(名称\testcontinue
可能不同)和插入aaa(\BODY)bbb
。然后\testcontinue
检查\end
某些输入行上的结果\end{test}
而不是\end{something else}
。\endtest
不需要宏,因为它永远不会被执行。
看看你的代码:
\begin{wrapper}
debug me
\end{wrapper}
\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}
并且无法执行。
我希望我成功解释。
https://stackoverflow.com/questions/-100006119
复制相似问题