我该怎么做才能制作出不被分离的代码“单元”?

我该怎么做才能制作出不被分离的代码“单元”?

让我们看一下我正在编写的一段随机文本。我在$k\in\{1\dots,K\}$这里将 $k\in{1\dots,K}$ 写成了一个,但它被分开了,这让我很不满意:

在此处输入图片描述

为了将代码的各个部分保持在一起,您建议使用什么来将它们视为某种“单元”/“砖块”,将它们作为一个整体放置在文本中而不是分成下一行?

答案1

使用

 ${k\in\{1\dots,K\}}$

${...}$不能有换行符

答案2

TeX 只会在两个地方自动中断公式:在二进制或关系运算符之后。它们通过参数\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}

输出结果如下:

在此处输入图片描述

相关内容