Что мне сделать, чтобы создать «ячейки» кода, которые не разделяются?

Что мне сделать, чтобы создать «ячейки» кода, которые не разделяются?

Давайте посмотрим на какой-то случайный фрагмент текста, который я пишу. У меня есть $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}

что приводит к такому выводу:

введите описание изображения здесь

Связанный контент