正如评论扩展寄存器池可以用于 \newinsert 吗?,其中提到处理大量浮动。这很有趣,但是使用\unexpanded
:
\edef\@freelist{%
\unexpanded\expandafter{\@freelist\@elt}\expandafter\noexpand\ExtraFloatCommand}%
如何用诸如\expandafter
、\noexpand
、 之类的东西来代替它\toks@
,而不需要 eTeX 扩展?(eTeX 可能\etex@unexpanded
来自etexcmds
包裹会比 更好\unexpanded
。)
答案1
如果没有 e-TeX 扩展,您需要使用 toks 来控制 中的扩展\edef
。通常,这是使用 来完成的\toks@
,因此为了避免与其他代码发生任何问题,通常使用组
\begingroup
\toks@\expandafter{\@freelist\@elt}%
\edef\@freelist{\the\toks@\expandafter\noexpand\ExtraFloatCommand}%
\expandafter\endgroup
\expandafter\def\expandafter\@freelist\expandafter{\@freelist}%
(您可能可以\xdef
在这里使用,但如果不仔细检查,我就不确定其范围\@freelist
。)
您也可以直接使用以下命令实现相同目的\expandafter
:
\expandafter\expandafter\expandafter\def
\expandafter\expandafter\expandafter\@freelist
\expandafter\expandafter\expandafter{%
\expandafter\@freelist\expandafter\@elt
\ExtraFloatCommand}%
其工作原理是先扩展\ExtraFloatCommand
,然后扩展\@freelist
,都在 的新定义内\@freelist
。