Пунктуация в формулах LaTeX

По-видимому, при написании математики обычной практикой является добавление пунктуации к отображаемым формулам.

Есть ли какой-нибудь трюк, чтобы не ставить знак препинания внутри формулы?

я хочу избежать

Consider the function
\[ \sin(x).\]

Я бы предпочел что-то вроде:

Consider the function
\[ \sin(x)\].

Но, конечно, точка отображается под формулой.

Есть ли умный способ разделить формулы и знаки препинания в LaTeX?


person Olivier Verdier    schedule 10.02.2010    source источник


Ответы (4)


Вы можете загрузить пакет breqn (совместимый с amsmath) и встроить это поведение в среду dmath:

Consider the function
\begin{dmath}\sin(x)\end{dmath}.

Выведет то же самое, что и \[\sin(x).\], т. е. как если бы точка находилась внутри выражения.

В качестве бонуса вы также получите автоматический разрыв строки в своем математическом уравнении.

person Will Robertson    schedule 16.01.2011
comment
Интересный пакет, но я не вижу связи с исходным вопросом... breqn кажется пакетом для разбиения длинных уравнений; ОП касался пунктуации в отображаемом уравнении. - person Olivier Verdier; 17.01.2011
comment
@Olivier: Я что-то пропустил в своем объяснении? ОП попросил \[\sin(x)\]. вывести точку внутри математического отображения, и это именно то, что делает мой пример выше. - person Will Robertson; 17.01.2011
comment
Ой! Ты прав. Это гениально! Просто документы для breqn настолько запутаны, что я не смог их найти. Большое спасибо! - person Olivier Verdier; 21.01.2011

\catcode`\@=11 
\let\seveendformula\]
\def\]{\@ifnextchar.\PointAndEndFormula\seveendformula}
\def \PointAndEndFormula #1{.\seveendformula}
\catcode`\@=12 

Добавить

Более сложное решение работает с .,?!;: :

\catcode`\@=11 
\def\addtopunct#1{\expandafter\let\csname punct@\meaning#1\endcsname\let}
\addtopunct{.}    \addtopunct{,}    \addtopunct{?}
\addtopunct{!}    \addtopunct{;}    \addtopunct{:}

\let\seveendformula\]
\def\PunctAndEndFormula #1{#1\seveendformula}
\def\]{\futurelet\punctlet\checkpunct@i}
\def\checkpunct@i{\expandafter\ifx\csname punct@\meaning\punctlet\endcsname\let  
       \expandafter\PunctAndEndFormula 
       \else \expandafter\seveendformula\fi}
\catcode`\@=12 
person Alexey Malistov    schedule 10.02.2010
comment
Да, в самом деле. Я думал об этом, но проблема в том, что существует довольно много возможных знаков препинания, которым вы, возможно, захотите следовать математике отображения: вероятно, не '!' или ':', но кроме '.' каждый из ',', ';' и '?' довольно распространены. +1 за ответ на вопрос без мелких сомнений. - person Charles Stewart; 10.02.2010
comment
Очень стильный. Я не думаю, что смог бы написать этот новый код: это довольно глубокий материал. - person Charles Stewart; 10.02.2010
comment
Это гениально! Он настолько полезен, что, может быть, его стоит собрать в виде пакета LaTeX? - person Olivier Verdier; 10.02.2010
comment
Вот улучшение: я поставлю знаки препинания после отображаемых уравнений, воспользуюсь вашей хитростью, а если я передумаю, то легко отключить отображение знаков препинания, заменив ваши \def\PunctAndEndFormula #1{#1\seveendformula} на \def\PunctAndEndFormula #1{\seveendformula}. Магия! Спасибо еще раз! - person Olivier Verdier; 10.02.2010
comment
Не могли бы вы объяснить, что делает этот код / ​​как он должен использоваться? - person balu; 01.03.2015

Существует также вопрос, каким шрифтом должны быть знаки препинания. Вы не заметите проблемы, пока не попробуете другой математический шрифт, например Euler. Тогда запятые и точки явно отличаются в текстовом режиме и в математическом режиме. Я написал пунктуацию текстового режима в отображаемых формулах как \mbox{,} или лениво как \mbox, непосредственно перед $$.

person lhf    schedule 10.02.2010
comment
\text, более высокого уровня. - person Veky; 15.08.2018

Помещение знаков препинания в среду отображения является обычным способом. Проблема в том, что когда Latex обрабатывает \], он завершает mathbox, поэтому все, что последует за ним, будет частью нового вертикального блока.

Вы можете попробовать что-то вроде:

\hbox{\[My formula\]}.

Это не проверено и, вероятно, имеет проблемы с интервалами, но если вас интересует такое решение, я мог бы попытаться заставить что-то работать.

FWIW, вас может заинтересовать https://mathoverflow.net/questions/6675/periods-and-commas-in-mathematical-writing

person Charles Stewart    schedule 10.02.2010
comment
Спасибо за ссылку! Читая ответы там, я с облегчением вижу, что я не единственный, кто считает, что пунктуация не должна быть частью формул. - person Olivier Verdier; 10.02.2010