![抑制宏调用中的扩展](https://linux22.com/image/256459/%E6%8A%91%E5%88%B6%E5%AE%8F%E8%B0%83%E7%94%A8%E4%B8%AD%E7%9A%84%E6%89%A9%E5%B1%95.png)
我想要的是抑制组作为宏的参数的扩展,以便以后可以对其进行扩展。例如,我们想将未修改的参数作为字符串传递给 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}}