如何在内联数学中括号前/后自动换行

如何在内联数学中括号前/后自动换行

我读过这个答案“在内联数学模式中允许在‘,’处换行”会破坏引用

我想自动更改 ( 的 catcode 以避免破坏某些包。

\documentclass[a5paper]{ltjsarticle}

\usepackage{etoolbox}
\usepackage{amsmath, amssymb}
\usepackage[math-style=TeX]{unicode-math}

\makeatletter
\def\old@lparen{(}
\catcode`\(=13
\def({%
  \ifmmode%
    \discretionary{}{}{}\old@lparen%
  \else% for \mbox, \text, etc...
    \old@lparen%
  \fi}
\catcode`\(=12
\makeatother
\preto{\(}{\catcode`\(=13}{}{}
\appto{\)}{\catcode`\(=12}{}{}

\begin{document}
\renewcommand{\mid}{\mathopen{}\,|\,\mathclose{}}

\hrulefill

\((A \mid B),(A \mid B),(A \mid B),(A \mid B),(A \mid B),(A \mid B),(A \mid B),(A \mid B),(A \mid B),(A \mid B),(A \mid B)\)

$(A \mid B),(A \mid B),(A \mid B),(A \mid B),(A \mid B),(A \mid B),(A \mid B),(A \mid B),(A \mid B),(A \mid B),(A \mid B)$

\end{document}

\( 和 \) 可以通过 etoolbox 轻松修补,但是 $ 和 $ 对我来说很顽固……

更新

我想在之后休息一下,(最高优先级)。我想在之前(或之后休息一下)

更新2

(我认为“在 之前或之后换行)”相当于“在 \mid 和操作数之前/之后不换行(在本例中)”。但这个想法不正确吗?

“在内联数学模式中允许在‘,’处换行”会破坏引用此页面的技巧是在内部括号中换行(当然,这是正常行为)。

egreg 的建议看起来很棒,除了换行符 rparen 后跟逗号。

我想要混合灵魂解决方案。

在此处输入图片描述

答案1

我不确定你想休息一下 (,而是之后可能的突破)

\documentclass[a5paper]{ltjsarticle}

\usepackage{etoolbox}
\usepackage{amsmath, amssymb}
\usepackage[math-style=TeX]{unicode-math}

\begingroup\lccode`~=`)
\AtBeginDocument{%
  \edef\rparen{\Umathcharnum\the\Umathcodenum`) }
  \mathcode`)=\string"8000
}
\lowercase{\endgroup\def~}{\rparen\penalty0 }

\begin{document}

\noindent\hrulefill

\(
 (A \mid B)(A \mid B)(A \mid B)(A \mid B)(A \mid B)(A \mid B)
 (A \mid B)(A \mid B)(A \mid B)(A \mid B)(A \mid B)
\)

$(A \mid B)(A \mid B)(A \mid B)(A \mid B)(A \mid B)(A \mid B)
 (A \mid B)(A \mid B)(A \mid B)(A \mid B)(A \mid B)$

\end{document}

请注意,这也允许使用\right),但您的方法会使其变得\left(非法。

诀窍是让)数学变得主动而不是被动。

在此处输入图片描述

相关内容