\over 和 \frac 之间有什么区别?

\over 和 \frac 之间有什么区别?

{some-expression}\over{another-expression} 和 有什么区别 \frac{some-expression}{another-expression}

哪一个更好?

答案1

该命令\over是所谓的“原始”命令,可在 Plain TeX 和 LaTeX 中使用。\frac是一个仅限 LaTeX 的命令,它建立在\over宏的基础上,以提供一些不太可能引发意外错误的东西,如果用户没有正确处理命令的语法\over

假设您已经amsmath加载了该包,则\frac命令定义如下:

\DeclareRobustCommand{\frac}[2]{{\begingroup#1\endgroup\@@over#2}}

其中\@@overamsmath的内部版本\over。请注意, 的第一个参数\frac(分子)被小心地包裹在\begingroup...\endgroup结构中,并且整个命令的“内容”被一对花括号包围。花括号的作用是消除由于不完全谨慎地使用命令\over本身而可能产生的潜在歧义。

如果你是 LaTeX 用户,没有理由不使用这个\frac命令——不直接使用该命令的几个好理由\over。简而言之,如果您使用 LaTeX,请使用\frac

答案2

后者更可取。它纠正了在某些情况下可能以不好的方式表现出来的行为。LaTeX 定义是

\def\frac#1#2{{\begingroup #1\endgroup\over #2}}

在某些情况下,分子的分配也会影响分母。使用标准 LaTeX 命令很难生成它,但你可以比较

\[
\fam0 a\over b
\]

\[
\frac{\fam0 a}{b}
\]

在第一种情况下,“a”和“b”都将是直立的,这可能不是所期望的。

另一个反对该\over语法的相关论点是,它与 LaTeX 格格不入,因为 LaTeX 总是先使用命令,然后使用参数,从不使用“中缀”语法。此外,它会自动提供分组numerator\over denominator,避免出现以下错误:

1\over 2 \over 3

更新

\frac从 2019-10-01 版本的 LaTeX 开始,使用的定义\DeclareRobustCommand作为程序的一部分,以删除尽可能多的脆弱命令:

% latex.ltx, line 4705:
\DeclareRobustCommand\frac[2]{{\begingroup#1\endgroup\over#2}}

过去,由于内存限制,不可能使所有命令都具有鲁棒性。这些考虑不再是问题。

该软件包因其修改后的定义amsmath已使用多年。\DeclareRobustCommand\frac

答案3

amsmath 软件包用户指南p.14 内容如下:

原始广义分数命令\over, \overwithdelims, \atop, \atopwithdelims, \above, \abovewithdelims如果与 amsmath 包一起使用,则会产生警告消息,原因在技术说明.tex

并且在关于 amsmath 包的技术说明第 2 页:

TeX 基元的不寻常语法不仅在 LaTeX 中显得格格不入,而且这种语法似乎是造成 TeX 数学排版功能最严重缺陷的原因之一:数学公式中任何给定点的当前数学样式直到公式结束才能确定,因为后面的广义分数命令可能会改变前面材料的数学样式。

(...)

这些广义分数命令的语法还会产生其他不良后果,只有当您编写一些用于数学的非平凡宏时,这些后果才会变得明显。例如,就目前的情况而言,您无法在数学中测量任何对象的大小,除非您\mathchoice通过离开并重新进入数学模式\hbox{$(这会导致 \everymath与 和相关的复杂性\mathsurround)。而且,似乎对当前数学风格的不确定性是允许使用 mu 单位来\vrule在构建复合符号或符号时制作垂直支柱的唯一障碍。等等。

答案4

在某些情况下,我发现\over 不需要花括号,而 \frac 需要

\[ P(n,m) = {n! \over (n-m)!} \] <!-- { } for {n! \over (n-m!)} -->
\[ n! \over (n-m)! \]
\[ P(n,m) = \frac{n!}{(n-m)!} \] <!-- { } for \frac {} {} -->
\[ \frac{n!}{(n-m)!} \]

相关内容