Этот вопрособъясняет разницу между \over
и , \frac
и, похоже, наиболее опытные участники единодушно согласны, что \over
это неполноценно (если не то, о чем стоит искренне сожалеть); однако пример egreg, хотя и иллюстрирует потенциальную проблему, недостаточен, чтобы удержать меня от практичности \over
.
Я только что открыл для себя эту команду и пока нигде ее не реализовал, но нахожу существенную привлекательность в практичности отсутствия необходимости использовать разделители везде (особенно с учетом того, что я использую обширное цветовое кодирование выражений, что также умножает разделители).
Я доверяю опыту этого сообщества, но хотел бы, если возможно, понять, какого родапрактичныйс какими проблемами я рискую столкнуться при случайном использовании \over
при работе с простыми выражениями?
Потому чтопрактичныйсубъективно, я попытаюсь проиллюстрировать предполагаемую меру на примере egreg: он проиллюстрировал разницу в передаче между:
\[
\fam0 a \over b
\]
и
\[
\frac{\fam0 a}{b}
\]
Для моих целей, если возникнет такая проблема, ее легко решить с помощью \frac
и, поэтому, хотя этот пример иллюстрируетнедостаток и \over
необходимости чего-то более надежного, это не показывает мне никаких причин отказываться от него, \over
когда оно действительно дает желаемый результат.
решение1
ВНастройка TeX 2014 года(TUGboat, том 35 (2014), № 1), в котором обсуждаются все изменения, внесенные в TeX на основе комментариев, полученных в 2008–2013 годах (все изменения = одно изменение:см. этот вопрос), Дональд Кнут отвечает на вопрос о \over
versus \frac
и подобных:
Вопросы и ответы Барбара [Битон] также попросила меня ответить на три вопроса, которые, по ее словам, «продолжают возникать на различных форумах», чтобы она могла указать людям на ответы, если эти вопросы возникнут снова.
[…]
(2) Если бы вы разрабатывали TeX сегодня, вы бы по-прежнему использовали
\over
и друзей, а не что-то вроде\frac{...}{...}
, когда последнее позволило бы избежать необходимости в\mathchoice
и\mathpalette
?Этот вопрос, от
tex.stackexchange.com
, также цитируется со страницы 151 [TeXbook]:
\mathchoice
довольно затратен с точки зрения времени и пространства, и использовать его следует только тогда, когда вы готовы заплатить эту цену.Ну, я думаю, эта цитата подразумевает мой ответ. Ведь я был явно готов заплатить цену в 1982 году, так что я определенно готов заплатить ноль сегодня!
Полагаю, в мире есть люди, которые предпочитают выражения вроде 'sum(2, 3)' '2 + 3'; но я, конечно, не из их числа. С тех пор, как появился TeX, я был чрезвычайно рад возможности писать '
2\over3
' или 'n\choose k
' или 'p\atop q
' или ···, вместо того, чтобы быть вынужденным писать что-то вроде 'frac{2}{3}
', что отвлекло бы мое внимание от текущей задачи.Автор вопроса, похоже, хочет возложить бремя на всех пользователей, а не на нескольких макроразработчиков.
Если вы посмотрите на определение LaTeX \frac
(вы можете вызвать texdoc source2e
его, чтобы прочитать), вы увидите, что оно следующее:
(Вы также можете найти это определение
\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
могут дать вам нежелательный результат.
Итак, подведем итог: ваш выбор сводится к двум вариантам:
Вам нравится
\frac
синтаксис. Тогда используйте его и поздравьте себя с тем, что вам не нужно беспокоиться о случайном получении неправильного вывода, и с тем, что вы «соответствуете» многословным соглашениям о синтаксисе LaTeX.Вам нравится
\over
синтаксис. Тогда используйте его и поздравьте себя с более простым синтаксисом (который также предпочитает Кнут), и если вы когда-нибудь случайно получите неправильный вывод, просто заметьте это и исправьте, сказав себе, что это не имеет большого значения.
Когда вы спрашиваете о «практических последствиях» и говорите, что
не могу представить себе контекст, в котором использование
\over
могло бы вызвать проблему, которую нельзя было бы решить, просто используя\frac
для этого случая
Я не знаю, какой ответ вы ищете, потому что такого контекста не существует.по определению(of \frac
): если в каком-то контексте \over
выдает неправильный вывод, вы всегда можете исправить это, добавив фигурные скобки или группы, и, конечно, используя \frac
. Вот для чего он нужен.
решение2
Использование \over
в документе LaTeX не дает никаких преимуществ.
Основная цель LaTeX — предоставить последовательный синтаксис для разметки на основе tex, с обязательными аргументами, {}
необязательными в []
и т. д., поэтому \rule{2pt}{3pt}
нет \hrule width 2pt height 3pt
. Использование \over
полностью разрушает это.
Если вы используете \over
с amsmath
загруженным, вы получите предупреждение
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}