首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >→\NewEnviron→\newenvironment的三重包装失败

→\NewEnviron→\newenvironment的三重包装失败
EN

Stack Overflow用户
提问于 2010-05-26 02:20:46
回答 2查看 1.8K关注 0票数 5

我正在尝试将用\NewEnviron (包'environ')创建的环境包装成一个旧的好\newenvironment

代码语言:javascript
复制
\NewEnviron{test}{\colorbox[gray]{0.7}{\BODY}}
\newenvironment{wrapper}{\begin{test}}{\end{test}}

\begin{wrapper}
debug me
\end{wrapper}

然而,这给了我一个奇怪的错误:

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

如果我用\NewEnviron{test}{aaa(\BODY)bbb}代替\newenvironment{test}{aaa(}{)bbb} --一切都像预期的那样工作!似乎\NewEnviron由于某种原因未能找到它的终点。

我正在尝试使用包装在\colorbox中的“floatfig”魔法,所以我需要一种将\colorbox转换成一个环境并将其包装到另一个环境中的方法。我可以定义一个新命令,但这不是一个好主意。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-26 13:58:37

问题是,\NewEviron\newenvironment以不同的方式工作。

1) \newenvironment{test}{aaa(}{)bbb}定义了两个命令:\testaaa(\endtest)bbb

\begin{test}被扩展为\test

\end{test}被扩展到\endtest,并检查您的作用域是否以begin{test}而不是\begin{something else}开始,例如\begin{wrapper}

2) \NewEviron{test}{aaa(\BODY)bbb}以不同的方式定义了\test。首先,\test使用以下技巧捕获\BODY

代码语言:javascript
复制
\def\test#1\end{\def\BODY{#1}aaa(\BODY)bbb\testcontinue}

(名称\testcontinue可能不同)并插入aaa(\BODY)bbb。然后,\testcontinue检查某些输入行上的\end是否以\end{test}而不是\end{something else}结尾。不需要宏\endtest,因为它从未被执行过。

看看你的代码:

代码语言:javascript
复制
\begin{wrapper}
debug me               
\end{wrapper} 

\begin{wrapper}被扩展为\begin{test}。然后将\begin{test}扩展为\test\test抓到\BODY。注意!\BODY等于debug me。现在,\testcontionue\BODY\end{test}结束后检查\end。这不是真的。\end{test}不存在。有\end{wrapper}

您想说的是,\end{wrapper}必须扩展到\end{test}。但是包装之前的\end

代码语言:javascript
复制
macro \test: #1\end{\def\BODY{#1}aaa(\BODY)bbb\testcontinue}

也不能执行。

我希望我能成功地解释。

票数 6
EN

Stack Overflow用户

发布于 2010-05-26 17:16:10

我发现了一个麻木不仁的技巧,可以创建一个可以包装在另一个环境中的环境。我们应该像这样使用saveBoxes:

代码语言:javascript
复制
\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
            }%
        }%
    }%
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2909764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档