我已经定义了自己的环境 - 我们称之为“myenv” - 它根据一些全局设置显示和隐藏其内容。我正在使用包中的\comment
和命令,它们对我来说非常有效。\endcomment
verbatim
然而,当我用这样的盒子封闭我的环境时,我遇到了一种奇怪的行为(我将 myenv 简化为这个最小的例子):
\documentclass[10pt,a4paper]{article}
\usepackage{verbatim}
%define my environment
\newenvironment{myenv}{%
Start:
\comment
}{%
\endcomment
:End
}
\begin{document}
%\parbox{5cm}{ % <- this is where it gets strange
\begin{myenv}
Content
\end{myenv}
%} % <- this is where it gets strange
\end{document}
当我启用parbox
-lines 时,我收到一串我不太明白的错误:
Argument of \verbatim@ has an extra }. }
Paragraph ended before \verbatim@ was complete. }
Extra }, or forgotten \endgroup. }
You can't use `\end' in internal vertical mode. \end{document}
Missing } inserted. \end{document}
Emergency stop.
begin
和点之间似乎有些断裂end
……
其他盒子也会发生这种情况:
错误\mbox
列表有点不同:
Argument of \verbatim@ has an extra }. }
Paragraph ended before \verbatim@ was complete. }
Extra }, or forgotten \endgroup. }
Emergency stop.
\fbox
再次出现了另一个错误签名:
Argument of \verbatim@ has an extra }. }
Paragraph ended before \verbatim@ was complete. }
Extra }, or forgotten \endgroup. }
Extra }, or forgotten \endgroup. }
Emergency stop.
TeX-Primitives\hbox
和-environment\vbox
运行良好minipage
。
所以我的问题是:这里出了什么问题以及如何解决?
答案1
不允许将逐字类对象用作其他命令的参数。由于 的comment
实现方式与 相同verbatim
,因此也存在同样的限制。
因此,您不能comment
拥有\parbox
、\mbox
等等\fbox
。
相反,它可以在中minipage
,因为这个环境不将其内容作为参数收集。
\hbox
对于原语和 也是一样\vbox
。语法与带参数的命令相似这一事实并不重要;事实上,
\hbox\bgroup ... \egroup
\vbox\bgroup ... \egroup
是允许的(普通宏是不允许的);{
(显式或隐式)开始收集标记以组成(水平或垂直)列表,最后}
(显式或隐式)从迄今为止形成的列表中构建框。
基本上,\parbox{<dimen>}{<tokens>}
是
\vbox{\hsize=<dimen><tokens>}
但它们<tokens>
被吸收为一个论点。相反,
\begin{minipage}{<dimen>}
确实如此\vbox\bgroup\hsize=<dimen>
,而
\end{minipage}
提供尾随的\egroup
。