gpt4 book ai didi

latex -\colorbox→\NewEnviron→\newenvironment的三重包装失败

转载 作者:行者123 更新时间:2023-12-03 22:21:21 29 4
gpt4 key购买 nike

我正在尝试将使用\NewEnviron(软件包“environ”)创建的环境包装到旧的好\newenvironment中:

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

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

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

LaTeX Error: \begin{test} on input line 15 ended by \end{wrapper}. LaTeX Error: \begin{wrapper} on input line 15 ended by \end{document}.



如果我将 \NewEnviron{test}{aaa(\BODY)bbb}替换为 \newenvironment{test}{aaa(}{)bbb},那么一切都会按预期进行!似乎 \NewEnviron由于某种原因未能找到结尾。

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

最佳答案

事实是\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

\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}

并且无法执行。

我希望我能成功解释。

关于latex -\colorbox→\NewEnviron→\newenvironment的三重包装失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2909764/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com