我該怎麼做才能讓程式碼的「單元格」不被分離?

我該怎麼做才能讓程式碼的「單元格」不被分離?

讓我們來看看我正在寫的一些隨機文字片段。我在這裡將 $k\in{1\dots,K}$ 寫成 a $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,那麼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}

這會產生以下輸出:

在此輸入影像描述

相關內容