Давайте посмотрим на какой-то случайный фрагмент текста, который я пишу. У меня есть $k\in{1\dots,K}$, записанный как $k\in\{1\dots,K\}$
здесь, который разделяется и не очень мне нравится:
Что бы вы посоветовали использовать, чтобы объединить части кода, рассматривать их как некие «ячейки»/«кирпичики», которые размещаются в тексте как единое целое, а не делятся на следующую строку?
решение1
Использовать
${k\in\{1\dots,K\}}$
${...}$
не может иметь переноса строки
решение2
TeX автоматически разрывает формулу только в 2 местах: после бинарного или относительного оператора. Они управляются параметрами \binoppenalty
и \relpenalty
. Если вы установите оба значения на 10000, разрыва не будет. Если вы сделаете это локально в формуле, то это будет применяться только там. Поэтому определение типа
\newcommand\nobreakformula{\relpenalty10000\relax \binoppenalty 10000\relax}
может быть вашим другом (возможно, с более коротким именем команды :-))
Если вы хотите предотвратить только один разрыв в формуле, а не все, то вы можете использовать \nolinebreak
в точке, где TeX действительно разорвался. Однако вы можете получить даже менее желательный разрыв, так что это действительно зависит от ситуации (поэтому используйте этот тип тонкой настройки, только если ваш документ будет готов следующим). Например, если в примере ниже мы используем, $a+b =\nolinebreak c+d+e$
то TeX разорвется после a +
этого, что, по-моему, хуже, чем разрыв после знака равенства.
Использование группы скобок или использование \mbox
менее целесообразно, поскольку это приведет к тому, что формула всегда будет установлена на ее номинальной ширине независимо от того, насколько сильно растягивается или сжимается линия. Вы можете это хорошо увидеть в следующем примере:
\documentclass{article}
\usepackage{calc}
\begin{document}
\newlength\normwidth
\newcommand\myline{A test $a+b=c$ with $1+1$ formulas inside}
\settowidth\normwidth{\myline}
Spreading a line b 0, 5,15,25 and 50 points:
\indent \mbox{\myline}
\makebox[\normwidth+5pt][s]{\myline}
\makebox[\normwidth+15pt][s]{\myline}
\makebox[\normwidth+25pt][s]{\myline}
\makebox[\normwidth+50pt][s]{\myline}
\bigskip
Contrast this with using a brace group or \verb=mbox= on the first formula:
\renewcommand\myline{A test ${a+b=c}$ with $1+1$ formulas inside}
\indent \mbox{\myline}
\makebox[\normwidth+5pt][s]{\myline}
\makebox[\normwidth+15pt][s]{\myline}
\makebox[\normwidth+25pt][s]{\myline}
\makebox[\normwidth+50pt][s]{\myline}
\bigskip
\newcommand\nobreakformula{\relpenalty10000\relax \binoppenalty 10000\relax}
Testing \verb=\nobreakformula=:
Some sample text to make this break inside the first formula
A test $ a+b=c + d + e$ with $1+1$ formulas inside
And now with suppression:
Some sample text to make this break inside the first formula
A test $\nobreakformula a+b=c + d + e$ with $1+1$ formulas inside
\end{document}
что приводит к такому выводу: