Tex 宏定义中的空格

Tex 宏定义中的空格

我想以以下方式实现队列。一个宏(变量?)\queue保存一个可能包含点的字符串。用点分隔的子字符串是队列的元素。因此,字符串“abc”表示一个包含 3 个元素的队列,即“a”、“b”和“c”。然后我想定义一个宏,它接收一个队列作为参数并返回不包含第一个元素的队列。

当我将其定义为

\def\firstout#1.#2{#2}

(上面一行没有任何空格)或

\def\firstout #1.#2{#2}

\firstout(和之间有一个或多个空格#1.#2{#2})它运行良好,也就是说,以下代码按预期返回“bc”:

\def\queue{a.b.c}
\expandafter\firstout\queue

但如果我将其定义为

\def\firstout#1.#2 {#2}

\def\firstout#1.#2(和之间有空格{#2})或

\def\firstout #1.#2 {#2}

(后面有一个空白\def\firstout,后面还有另一个空白#1.#2)然后当我尝试执行时收到以下错误\expandafter\firstout\queue

段落在 \firstout 完成之前结束。

为什么?那些空白处有什么作用?如果可以的话,请也参考一些文档。

笔记:我在 MikiTeX 上使用 TeXMaker。

答案1

宏定义中使用的是代币不是输入文件中的字符。命令名称后的空格被视为命令名称标记的结束,并且其本身永远不会被标记。\firstout标记。名称为 的 csname 标记firstout。相反,后面的空格字符#2被标记为字符标记,因此#2成为由空格分隔的分隔参数,就像#1由 分隔的分隔参数一样.

相关内容