我正在尝试输入以下内容:
\sum_{i=1}^{m}\frac{1}{{n-1} \choose {|A_i|-1}} \leq 1
但编译器警告:
Package amsmath Warning: Foreign command \atopwithdelims;
(amsmath) \frac or \genfrac should be used instead
(amsmath) on input line 57.
! Ambiguous; you need another { and }.
\choose ->\atopwithdelims ()
但确实{n-1} \choose {|A_i|-1}
有效。
答案1
使用amsmath
loaded 后,调用\frac{A}{B}
将转换为
{\begingroup A\endgroup \@@over B}
其中,是重新定义的\@@over
原语。\over
amsmath
另一方面,就像在 Plain TeX 中一样,它会\choose
转换为,在可能仅发出一次您所报告的警告后,它又会变成(的原始含义)。\atopwithdelims()
amsmath
\atopwithdelims
\primfrac{atopwithdelims}
\@@atopwithdelims
\atopwithdelims
现在,就你的情况而言,A
是1
,这没有问题,B
而
{n-1} \choose {|A_i|-1}
因此 TeX 接下来看到的是
{\begingroup 1\endgroup \@@over {n-1} \@@atopwitdelims() {|A_i|-1}}
这是非法语法,因为在同一级别有两个分数命令。
Knuth 认为这{A\over B}
比 更好\frac{A}{B}
(参见 TUGboat 上期的采访),但 LaTeX 和 的开发人员amsmath
有不同的看法。特别是,amsmath
在第一次使用任何原始分数命令时都会发出警告,但它会接受这些命令,只要它们在宏扩展期间不会产生语法错误。
你有两个选择:总是使用原始命令(忽略警告),或者你总是使用amsmath
命令。正如您所发现的,将它们混用肯定会带来麻烦。
你可能输入
\frac{1}{{n-1 \choose |A_i|-1}}
但这太复杂了,因为有双括号。形式
{1 \over {n-1 \choose |A_i|-1}}
可能对 Knuth 有吸引力(对我来说不是),但是
\frac{1}{\binom{n-1}{|A_i|-1}}
更安全。空格也许可以提高可读性:
\frac{ 1 }{ \binom{n-1}{|A_i|-1} }
顺便说一句,\begingroup...\endgroup
LaTeX 在分子周围添加的是为了避免在分子中所做的声明泄露并影响分母,这是原始语法无法避免的问题,除非手动插入组。这是选择\frac
和相关命令的另一个原因。
答案2
由于你正在使用amsmath
,使用\binom{n-1}{|A_i|-1}
代替\choose
。
答案3
该\choose
宏具有与 LaTeX 中通常使用的语法不同的语法(因为它是纯 TeX 宏):
{above \choose below}
or
$above \choose below$
第一行显示了你的代码为什么不好,第三行显示了为什么简单的\choose
数学列表${n-1} \choose {|A_i|-1}$
有效。但是有四个多余的括号。
解决方案:删除两个括号并输入: {n-1 \choose |A_i|-1}
。
答案4
简而言之,用作宏的参数分隔符的括号只起到一次作用;在宏扩展中它们就消失了。在示例中,这适用于 的第二个参数(分母)周围的括号\frac
:在 的扩展中,\frac
它们不是该参数的一部分。这意味着在编写分母时,您不应依赖它们的存在,而应编写一对单独的括号,以确保 的范围\choose
被限定在第二个参数内。
\choose
如果在其他宏的参数中使用时没有采取这样的预防措施,您可能最终不会出现错误,但会发现添加到二项式系数顶部和底部索引中的周围内容不属于那里。除其他事项外,为了避免此类意外,宏包编写者鼓励您使用\frac
和\binom
和朋友。