![参数文本获取器](https://linux22.com/image/464254/%E5%8F%82%E6%95%B0%E6%96%87%E6%9C%AC%E8%8E%B7%E5%8F%96%E5%99%A8.png)
至此片段
\def\arg#1#2{\#1 = #1 and \#2 = #2\par}
\arg A B C
\end
我认为输出像这样
#1 = A 且 #2 =
BC
但我得到(使用 PDFTeX)
#1 = A 和 #2 = B
C。
为什么会有这样的行为?我知道在某些情况下(例如,在宏之后)空格会被忽略,但根据我的理解,在这种情况下不会。Knuth 先生的想法是什么,但没有人告诉我?
答案1
在 TeXbook 的第 201 页,你会发现
您可以在参数之间添加空格(例如,'
\row x n
'),因为 TeX 不使用单个空格作为未分隔的参数。
第 204 页还有另一点值得注意
参数
#1
将是标记Look,因为#1
是一个未限定的参数(在定义中它紧接着#2
);在这种情况下,TeX 会忽略后面的空格B
,并去掉 的括号{\Look}
。
要点是,如果空格位于未限定的参数之前,则空格会被有效忽略。不能除非您用括号括起来(并且括号将被剥离),否则将空格作为未限定的参数。
\def\arg#1#2{\#1 = $\langle$#1$\rangle$ and \#2 = $\langle$#2$\rangle$\par}
\arg A{ }B C
\arg A { } B C
\end