\BeforeEndgroup 与 \AfterGroup 类似吗?

\BeforeEndgroup 与 \AfterGroup 类似吗?

etextools是否有类似'的命令\AfterGroup允许立即执行多个命令,当前组结束后不会?

答案1

我非常确定这个问题的答案是否定的。普通 TeX 有一个原语 \aftergroup,它可以在当前组之后保存一个标记以供处理。该etextools\AfterGroup只接受一个标记序列并应用于\aftergroup每个标记。由于没有 TeX 原语可以执行类似操作\beforeendgroup,并且不可能\aftergroup在 TeX 中实现,所以我认为你在这方面运气不佳。

答案2

LuaMetaTex引入了与该问题相关的三个新原语。这些原语是:

  • \aftergrouped:类似于aftergroup,但可以处理多个标记(如etextools's \AfterGroup)。

  • \atendofgroup:类似\aftergroup,但它在组结束之前恢复令牌。

  • \atendofgrouped:类似\aftergrouped,但它在组结束之前恢复标记。

LuaMetaTeX它们在手册的第 3.7.2 和 3.7.3 节中进行了描述。

下面是一个演示它们的示例(使用上下文 lmtx 处理代码):

%% Tests 1 - 4 are from LuaMetaTeX's documentation

\starttext

{ 
  \aftergroup A \aftergroup B \aftergroup C
test 1 : }

{
  \aftergrouped{What comes next 1}
  \aftergrouped{What comes next 2}
  \aftergrouped{What comes next 3}
test 2 : }

{
  \aftergroup A \aftergrouped{What comes next 1}
  \aftergroup B \aftergrouped{What comes next 2}
  \aftergroup C \aftergrouped{What comes next 3}
test 3 : }

{
  \aftergrouped{What comes next 1} \aftergroup A
  \aftergrouped{What comes next 2} \aftergroup B
  \aftergrouped{What comes next 3} \aftergroup C
test 4 : }

{
  \atendofgroup A \aftergroup B 
  \atendofgrouped{What comes next 1} 
  \aftergrouped{What comes next 2} 
test 5 : }

{
  \aftergroup A \atendofgroup B 
  \aftergrouped{What comes next 1}
  \atendofgrouped{What comes next 2}  
test 6 : }

\def\testA{\def\A{A}}
\def\testB{\def\B{B}}
{
  \atendofgroup\testA \aftergroup\testB
  \atendofgrouped{\def\C{C}} \aftergrouped{\def\D{D}} 
test 7 : } 
\meaning\A\ \meaning\B\ \meaning\C\ \meaning\D


\stoptext

在此处输入图片描述

答案3

只是盲射。

\def\beforeendgroup#1{\begingroup\def\tmpbeforeendgroup{#1\endgroup}\aftergroup\tmpbeforeendgroup}

缺点是,所有内容都\beforeendgroup位于另一个组内。目前\endgroup它无法与}or配合使用 :)\egroup

相关内容