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为环境并将其包装到另一个环境中.我可以定义一个新命令,但这不是一个好主意.
事情是这样,\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)
并且无法执行.
我希望我成功解释.
| 归档时间: |
|
| 查看次数: |
1610 次 |
| 最近记录: |