在下面的代码中,我花了很长时间才弄清楚下面第二行以 开头的空格\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
中间文本的保护,因此根据宏定义语法进行解释。