我读过这个答案“在内联数学模式中允许在‘,’处换行”会破坏引用
我想自动更改 ( 的 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(
非法。
诀窍是让)
数学变得主动而不是被动。