如果不是分段符号,则保留并退出这个宏的处理。否则的话,需要一直吃下去。
1.宏的定义
\long\def\filter#1{\ifx#1\par\expandafter\filter\else#1\fi}
解释如下:
1.1.\long的作用,一般的宏是不允许使用分段符号\par来充当参数的。要允许宏接收分段符号充当参数,那就在\def前面增加一个\long
1.2.\def的作用:
1.2.1.\def后面的\filter是宏名;
1.2.2.#1是输入模板(用来和输入的内容做匹配这样才能提取参数)
1.2.3.{...}这个是输出模板
1.3.大括号里面的输出模板
1.3.1.\ifx#1\par.A..\else.B..\fi:这个负责把输入的参数和\par进行比较,匹配得上就执行A部分,匹配不上就执行B部分
1.3.2.\expandafter\filter这个是让\filter延迟展开,也就是先处理后面的\else。否则的话:\fiter会把\else当成输入进行过滤。
1.4.expand后面的filter为什么没有提供参数?此时的filter被延迟展开了,等后面的token生成出来了,自然会继续处理。并且把后面生成的符号当做输入处理。
2.宏的测试
{\filter
%在这之前的所有空白都会被吃掉
test
}