使用 \over 与 \frac 的实际后果如何?

使用 \over 与 \frac 的实际后果如何?

这个问题\over解释了和之间的区别\frac,似乎最有经验的成员一致认为它\over是较差的(如果不是完全后悔的话);但是,egreg 的例子虽然说明了一个潜在的问题,但还不足以阻止我对它的实用性\over

我刚刚发现这个命令,还没有在任何地方实现它,但是发现在实用性方面不必到处使用分隔符(特别是当我对表达式进行大量颜色编码时,这也会成倍增加分隔符)。

我相信这个社区的经验,但如果可能的话,我想了解什么样的实际的\over我在处理简单表达式时偶尔使用时可能遇到哪些问题?

因为实际的是主观的,我将尝试用 egreg 的例子来说明预期的衡量标准:他说明了以下两者之间的渲染差异:

\[
  \fam0 a \over b
\]

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

就我的目的而言,如果出现这样的问题,可以很容易地通过使用\frac和轻松解决,因此,虽然这个例子说明了一个缺点 以及\over对更强大的东西的需求,\over当它确实产生所需的输出时,它并没有向我说明任何要避免的理由。

答案1

2014 年 TeX 调整(TUGboat,第 35 卷(2014 年),第 1 期),其中讨论了根据 2008 年至 2013 年收到的评论对 TeX 所做的所有更改(所有更改 = 单个更改:看到这个问题),Donald Knuth 回答了一个关于\overversus\frac和 similar 的问题:

问题与解答 芭芭拉(Beeton)还请我回答三个问题,她说这些问题“不断出现在各种论坛上”,这样,如果这些问题再次出现,她就可以为人们指出答案。

[…]

(2)如果您现在设计 TeX,您是否仍会使用\over和 朋友,而不是 之类的东西 \frac{...}{...},因为后者可以避免使用\mathchoice和的必要性\mathpalette

这个问题,来自tex.stackexchange.com,也引用自[TeXbook]:

\mathchoice在时间和空间方面有点昂贵,只有当您愿意付出代价时才应该使用它。

好吧,我想这句话暗示了我的答案。因为我在 1982 年显然愿意付出代价,所以今天我当然愿意付出零代价!

我想世界上有些人更喜欢像“sum(2, 3)”这样的表达式,而不是“2 + 3”;但我肯定不在其中。自从 TeX 诞生以来,我一直很高兴能够写出“ 2\over3”或“ n\choose k”或“ p\atop q”或···,而不是被迫写出像“ frac{2}{3}”这样会分散我对手头任务注意力的东西。

提问者似乎想将负担放在所有用户身上,而不是放在少数宏观开发者的身上。

如果你看一下 LaTeX 的定义\frac(你可以调用texdoc source2e它来阅读它),你会看到它是:

<code>\frac</code> 的定义

(您还可以找到这个定义

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

在 中texmf-dist/source/latex/base/ltmath.dtx,或与\show,或其他。)

因此,每当您键入\frac{a}{b}文档时,就好像您键入了以下内容:

{\begingroup a \endgroup\over b}

使用 并没有什么特别或神奇之处\frac。如果在给定的(典型)上下文中不需要\begingroup\endgroup(即,没有它们也会产生相同的输出),则可以删除它们,外括号也类似,这样就相当于a \over b在这种情况下写作。

就你的问题而言:

就我的目的而言,如果出现这样的问题,可以很容易地通过使用\frac和轻松解决,因此,虽然这个例子说明了一个缺点以及\over对更强大的东西的需求,\over当它确实产生所需的输出时,它并没有向我说明任何要避免的理由。

根本没有您所寻找的实际差异:当\over产生所需的输出时,它们是等效的;唯一的使用要点\frac是有时它们并不等效并且\over可能会给您不想要的输出。

总结一下:您的选择可以归结为两个选项:

  1. 你喜欢这个\frac语法。那就使用它吧,然后庆幸自己不必担心意外得到错误的输出,并且可以“符合”冗长的 LaTeX 语法约定。

  2. 你喜欢这个\over语法。那就使用它吧,然后庆幸自己有了这个更简单的语法(Knuth 也喜欢这个语法),如果你不小心得到了错误的输出,只要注意到它并修复它,告诉自己这不是什么大问题。

当你要求“实际后果”并说你

无法想象在什么情况下使用会\over导致无法通过仅使用来解决的问题\frac

我不知道你在寻找什么样的答案,因为不存在这样的背景,根据定义(of \frac):如果在某些情况下\over给出了错误的输出,您可以随时通过添加括号或组来修复它,实际上也可以通过使用 来修复它\frac。这就是它的用途。

答案2

\over在 LaTeX 文档中使用没有任何优势。

LaTeX 的一个主要目标是为基于 tex 的标记提供一致的语法,在{}可选参数中包括强制参数[]等。因此,\rule{2pt}{3pt}使用\hrule width 2pt height 3pt可以\over完全打破这种局面。

如果你使用\overwith amsmathloaded 你会收到警告

Package amsmath Warning: Foreign command \over;
(amsmath)                \frac or \genfrac should be used instead
(amsmath)                 on input line 6.

从很多方面来说,这很遗憾,这只是一个警告,而不是错误,我们和 AMS 当时还不够勇敢 :-)

实际上,TeX 在\over大多数情况下都可以工作,除非某些包变得更大胆并取消定义它,但它不遵循相同的语法规则这一事实确实有代价,尤其是在 TeX 到 html 和其他转换器上。如果不使用完整的 TeX 执行引擎,很难知道参数是什么\over,因此它使转换器的工作变得复杂,这些转换器可能根本不支持它,或者只支持简单的情况。

如果您认为\over语法更简单,请在运行示例之前回答以下问题。

上述每种情况的分数是多少?

\documentclass{article}



\begin{document}
$  1 + \begingroup a \over b \endgroup + 2$

$  1 + \bgroup a \over b \egroup + 2$

$  1 + { a \over b \egroup + 2$


$  1 + \bgroup a \over b } + 2$

\end{document}

相关内容