以下纯 TeX 手稿(使用 pdftex)不会产生任何输出页面,也不会产生任何错误。
\def\mac.#1 #2.{#1}%
\mac. a b.%
\bye
为什么?
我希望它能生成一页包含文本的输出
A
如果我通过将宏的主体替换为来更改手稿Hello, world!
,则手稿会产生预期的结果:一页输出,其中包含文本
你好世界!
答案1
此处your 后面有一个空格.
:这很重要。TeX 正在寻找与参数规范的最短匹配,这可以通过为#1
空并且该空格位于 和 之间来#1
实现#2
。因此后者为 ' a b
'(例如,您可以使用\showtokens
或看到这一点\tracingall
)。
仅有的一连续集合中的参数可以为空,因此
\def\mac.#1#2 #3.{#1}%
#1
是a
(丢弃空格)并且您将获得期望的输出。