不使用 eTeX 扩展名替换 \unexpanded

不使用 eTeX 扩展名替换 \unexpanded

正如评论扩展寄存器池可以用于 \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

相关内容