\def 对间距敏感吗?

\def 对间距敏感吗?

在下面的代码中,我花了很长时间才弄清楚下面第二行以 开头的空格\def会产生错误。

我是新来的。哪里有文档\def可以帮助我理解这个问题?

\documentclass[aspectratio=1610]{beamer} 

\begin{document} 
\def\funa(#1,#2){ (#2)*(#1)^2} %  OK
%\def\funa(#1,#2) { (#2)*(#1)^2 }  % NOT OK ...WHY?

\begin{frame} 
      \pgfmathparse {\funa(3,4)}  \pgfmathresult \\   
\end{frame}
\end{document}

答案1

在写\def简介时,你必须明白,除了一个小例外,每一个字符计数(见TeX 按主题分类,从第 112 页“分隔参数”开始)。也就是说,如果你写

\def\macro<some text pattern involving #1, #2, ...>{...}

那么 TeX 就会搜索你给出的模式的确切外观。因此,如果你写

\def\funa(#1,#2) { (#2)*(#1)^2 }

然后在使用中,TeX 将期望看到\funa后面跟着一个(,一些没有 的东西,,然后是#1一些没有 的东西,然后是一个,最后是)#2)空间,因为你在那里写了一个空格。因此,如果你使用它时没有空格,就会出现错误。

小的例外是空格立即地宏名称后面的空格会被忽略:\def\macro{...}\def\macro {...}是相同的。这是 TeX 将输入转换为其内部指令的副作用,即在标记化过程中,控制字后面的所有空格都会被忽略。这种省略发生在定义甚至已经开始,它\def根本不是 的属性,而是一般 TeX 语法的属性。但是,对于您来说,空格受到\funa中间文本的保护,因此根据宏定义语法进行解释。

相关内容