4

I read this answer "Allowing line break at ',' in inline math mode" breaks citations

I want to change ('s catcode automatically to avoid breaking some packages.

\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}

\( and \) are easily patched with etoolbox but $ and $ are stubbron for me...

Update

I want a break after , (highest priority). And I want a break before ( or after )

Update2

I thought "a break before ( or after )" is equivalent to "nolinebreak before/after \mid and operands (in this case)". But this idea is not correct?

"Allowing line break at ',' in inline math mode" breaks citations this page's trick makes linebreak in inner parenthesis (of course, this is normal behavior).

egreg's suggestion looks great except linebreaking rparen followed comma.

I want mixed soulution.

enter image description here

1 Answer 1

3

I'm not sure you want a break before (, but rather a possible break after ).

\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}

Note that this also allows using \right), while your approach would make \left( illegal.

The trick is making ) math active and not active.

enter image description here

4
  • The trick looks great. But I'm sorry I failed to show correct example.
    – watiko
    Apr 6, 2015 at 15:41
  • @watiko Breaking after , has already been dealt with on the site.
    – egreg
    Apr 6, 2015 at 15:49
  • I checked your code(added comma and \\documentclass[a5paper]{article} ) on other environment(cloudlatex.io xelatex). i.imgur.com/DVcKNMJ.png
    – watiko
    Apr 6, 2015 at 16:11
  • @watiko You should only do the comma bit, not the parenthesis.
    – egreg
    Apr 6, 2015 at 16:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.