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