\begingroup
有没有哪种情况比更适合使用\bgroup
?显然,\bgroup
在需要平衡括号而不能使用 的情况下 是必要的{
,但什么时候需要使用 呢\begingroup
?
一个相关的问题是:简单群和半简单群有什么区别?
答案1
\bgroup
是 的同义词{
,它在 Plain TeX 中使用 定义\let\bgroup={
。
它以复杂的方式与 TeX 的“消化系统”交互:{
s 和\bgroup
s 开始相同类型的组,称为简单组,并且每个组都可以用}
s 或\egroup
s 终止,因为它们是相同的。但是当 TeX 消化系统遇到它们时,它们具有不同的 catcode,因此向前看的命令(例如在 LaTeX 中使用\section\bgroup Title}
)可能会破坏这种匹配。
\begingroup
是不同的。它是 TeX 基元,它与 TeX 单独考虑的另一种组相匹配,称为“半简单组”(我猜是 Knuth 的笑话)。因此, 必须\begingroup
以 结尾\endgroup
,而不是}
,反之亦然\endgroup
。
我一般会避免\bgroup
使用,而使用\begingroup
,但\bgroup
如果你正在处理嵌套的标记列表,它可能会很有用。
答案2
\bgroup
我对versus 的看法与之前的回答略有不同\begingroup
。首先,我简要解释一下 TeX 内部结构:
and {
(}
更准确地说是 catcode 为 1 和 2 的标记)在 TeX 中有四种不同的含义:
它们是宏定义的语法部分:
\def\foo...{...}
在 TeX 中作为单个标记列表扫描的每个标记序列(即在宏的参数中、在宏定义内……)都必须通过这些标记来平衡文本:
\macro{param{e}ter}
。它们是几个TeX原始构造的一部分,例如
\hbox...{...}
,,$e^{...}$
。\write...{...}
当它们在没有任何上述上下文的情况下使用时,它们会打开和关闭组。
和由\bgroup
和\egroup
声明\let\bgroup={ \let\egroup=}
,您只能在上述第三和第四种含义中用 和 替换和。{
例如:}
\bgroup
\egroup
\hbox ... \bgroup ...}
\hbox ... {...\egroup
\hbox ... \bgroup ...\egroup
$e^\bgroup ...}$, $e^\bgroup...\egroup$
\write ...\bgroup ...}
示例中的最后一行是另一个例外:如果应用了\egroup
句法规则<general text>
(如参数中),则不能用 替换右括号。\write
上面第三种含义中提到的没有上下文的and用来打开和关闭一个组\bgroup
。\egroup
同一项工作执行原始命令\begingroup
和\endgroup
但只能这样做。它们不能代替上述第一至第三种含义中的{
和。}
这意味着您始终可以使用\begingroup
和\endgroup
,也可以使用\bgroup
和,\egroup
效果相同。但嵌套组必须由相应的对应项终止,它们不能交叉。在数学模式下,行为略有不同,请参阅注释。
我更喜欢\bgroup
和,\egroup
而不是\begingroup
和\endgroup
。只有当我发现嵌套组交叉错误对我的宏的用户有用时,我才会使用\begingroup
和\endgroup
。