2010-02-10 2 views
7

Как правило, при написании математики, чтобы добавить знаки препинания к отображаемым формулам, обычно применяется.Пунктуация в формулах LaTeX

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

Я хочу, чтобы избежать

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

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

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

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

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

ответ

4

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

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

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

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

+0

Интересный пакет, но я не вижу отношения с исходным вопросом ... 'breqn' кажется пакетом для разрыва длинных уравнений; ОП представлял собой пунктуацию в отображаемом уравнении. –

+0

@ Оливье: Я что-то пропустил в своих объяснениях? ОП попросил '\ [\ sin (x) \].' вытащить период внутри отображаемой математики, и это точно, что делает мой пример выше. –

+0

О! Ты прав. Это великолепно! Дело в том, что документы для 'breqn' настолько грязны, что я не смог их найти. Большое спасибо! –

2

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

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

 
\hbox{\[My formula\]}. 

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

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

+0

Спасибо за ссылку! Читая ответы там, я с облегчением вижу, что я не единственный, кто думает, что пунктуация не должна быть частью формул. –

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

Добавить

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

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

\let\seveendformula\] 
\def\PunctAndEndFormula #1{#1\seveendformula} 
\def\]{\futurelet\punctlet\[email protected]} 
\def\[email protected]{\expandafter\ifx\csname [email protected]\meaning\punctlet\endcsname\let 
     \expandafter\PunctAndEndFormula 
     \else \expandafter\seveendformula\fi} 
\catcode`\@=12 
+1

Да, действительно. Я подумал об этом, но проблема в том, что существует довольно много возможных знаков препинания, которые вы, возможно, захотите последовать за displaymath: возможно, нет! или ':', но кроме '.' каждый из ',', ';' а также '?' довольно распространены. +1 для ответа на вопрос без мелких сомнений. –

+0

Очень стильный. Я не думаю, что мог бы написать этот новый код: это довольно глубокий материал. –

+0

Это * блестящий *! Это настолько полезно, что его можно скомпоновать как пакет LaTeX? –

7

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