
Учитывая режим встроенных математических вычислений, есть ли концептуальная или типографская причина, по которой TeX автоматически ставит штраф после атомов типа Rel и Bin, но не после типа Punct?
Одна из причин, которая приходит мне на ум, заключается в том, что это может позволить вам как-то удобно контролировать разрешенные переносы строк. Так что, возможно, вам следует написать Let $a$, $b$ be numbers
istead of, Let $a,b$ be numbers
поскольку нет причин избегать переноса строки между переменными. С другой стороны, вы можете захотеть написать Let $a,b\in Z
вместо , Let $a$, $b\in Z$
поскольку вы можете захотеть запретить перенос строки между переменными здесь.
Но, по моему мнению, даже во втором случае перенос строки между $a$
и $b$
все равно будет лучше, чем перенос строки после \in
, поэтому, я думаю, было бы разумнее включить некоторый положительный штраф ниже, чем \relpenalty
после запятой.
Другой пример: я склонен определять карты в математике как $f\colon A\to B$
(я думаю, что в этом контексте более уместно использовать двоеточие в качестве знака препинания вместо отношения, то есть иметь пробел только после двоеточия, но не перед). В этом примере TeX допускает перенос строки после \to
, но не после \colon
, где это определенно более уместно.
Самым простым решением обеих проблем, вероятно, будет использование знаков препинания только вне математического режима и, возможно, переопределение макроса \colon
с целью включения некоторого штрафа. (Дополнительные возможности рассматривались в другой теме)Разрешить ли перенос строки на «,» в режиме встроенных математических вычислений?) Тем не менее, мне очень интересно узнать причину, по которой TeX ведет себя таким образом, поскольку, возможно, я упускаю из виду что-то важное.
EDIT: @egreg в комментариях высказал интересное замечание об упорядоченных парах, которое, однако, еще лучше иллюстрирует, насколько бессмысленным, на мой взгляд, является такое поведение.
Итак, если у нас есть упорядоченная пара (а,б), мы, конечно, не хотим его нарушать. Это можно рассматривать как аргумент в пользу запрета разрывов после запятой. Но теперь рассмотрим пару (а+б,с). Здесь TeX допускает разрыв после плюса, но не после запятой. Но разрыв после плюса имеет еще меньше смысла, чем после запятой. С другой стороны, имея более сложный кортеж, такой как (а+б,а2 +б2 ,а3 +б3 ), я думаю, было бы совсем неплохо разбить его после запятой, но определенно плохо разбить его после плюса.
Наконец, обратите внимание, что если пунктуация позволяет переносить строки, то есть изящный способ запретить перенос строк в простой паре (а,б), было бы записать его в группе ${(a,b)}$
, которая каким-то образом уважает внутреннюю логику формулы.
решение1
Ответ, как это поведениеимел в видупо-видимому, представлен в TeXbook (стр. 173)
Например, если вы введетев середине абзаца есть вероятность, что TEX сделает перерыв после любого из знаков = (он предпочитает это) или после - или + или - (в экстренной ситуации). Но после запятой в любом случае не будет перерыва — запятые, после которых желательны перерывы, не должны появляться между $.$f(x,y) = x^2-y^2 = (x+y)(x-y)$
Если вы хотите разрешить перерыв в какой-то точке внешнего уровня формулы, вы можете сказать \allowbreak. Например, если формулапоявляется в тексте абзаца, TEX позволит разбить его на две части '(Икс1 , ...,Иксм ,' и 'у1 , ...,ун )'.$(x_1,\ldots,x_m,\allowbreak y_1,\ldots,y_n)$
Я не считаю это большой удачей, но, думаю, мне придется с этим смириться.
EDIT: Чтобы как-то завершить тему и дать исчерпывающий ответ на мой собственный вопрос, позвольте мне поделиться своим решением этой проблемы.
Что касается переноса строки после запятой, я определяю
\def\ppen{\penalty300 } %punctuation penalty
\let\col=\colon
\def\colon{\col\ppen}
То есть после каждого \colon
, начисляется штраф \ppen
величиной 300. Теперь можно использовать \ppen
и в других местах, например, (a,\ppen b+c)
при наборе упорядоченных пар.