抑制宏调用中的扩展

抑制宏调用中的扩展

我想要的是抑制组作为宏的参数的扩展,以便以后可以对其进行扩展。例如,我们想将未修改的参数作为字符串传递给 lua 或文件。

假设我们有\foo一个接受参数的宏。

\def\foo#1{%
  \directlua{foo([[#1]]}%
  }

如果我们这样调用它: 在看到它之前,\foo{\bar{abc}}\bar会被展开。当然,我们可以用手动抑制扩展,但它能自动完成吗?\foo\foo{\noexpand\bar{abc}}

答案1

如果没有完整的例子来测试,这是未经测试的,但我认为你可以去

\def\foo#1{%
  \directlua{foo([[\unexpanded{#1}]]}%
  }

答案2

它并没有真正回答你的问题,但我认为你对扩展的想法是错误的。

如果我们这样调用它:\foo{\bar{abc}},则 \bar 会在 \foo 看到它之前被扩展。

的参数在看到它\foo之前没有展开。它在里面展开。考虑以下\foo\foo

\documentclass{article}
\def\foo#1{\def\bar{a}#1}
\begin{document}
\def\bar{x}
\foo{\bar}
\end{document}

如果您想在看到它\bar之前进行扩展,您需要:\foo\expandafter\expandafter\foo\expandafter{\bar{abc}}

相关内容