%\iffalse meta-comment
% !Mode:: "TeX:DTX:UK"
% !DTXversion:: "2.5a"
%
% Copyright (C) 2008-2020 by Denis Ryabov <dryabov@yandex.ru>
% ---------------------------------------------------------------------------
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Denis Ryabov.
%
% This work consists of the files rmathbr.dtx and rmathbr.ins
% and the derived filebase rmathbr.sty.
%
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{rmathbr.dtx}
%</driver>
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{rmathbr}
%<*package>
    [2020/12/18 1.1.1 Repeating of math operator at the broken line and the new
                      line in inline equations]
%</package>
%
%<*driver>
\documentclass[a4paper]{ltxdoc}
\usepackage[colorlinks,
            bookmarks,
            pdfstartview=FitH,
            pdfpagelayout=OneColumn,
            pdfauthor={Denis Ryabov},
            pdftitle={rmathbr : Repeating of math operator at the broken line and
                                the new line in inline equations}]{hyperref}
\usepackage{microtype}
\usepackage{enumitem}
\usepackage{multicol}
\setlength{\columnseprule}{0.2pt}
\usepackage{array,longtable}
\usepackage{rmathbr}
\setlist{nosep}
\pagestyle{headings}
\frenchspacing
\sloppy
\clubpenalty=10000
\widowpenalty=10000

\begin{document}
  \DocInput{rmathbr.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{3913}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
%
% \providecommand*{\url}{\texttt}
% \GetFileInfo{rmathbr.dtx}
% \title{The \textsf{rmathbr} package}
% \author{Denis Ryabov \\ \url{dryabov@yandex.ru}}
% \date{\fileversion~from \filedate}
%
% \maketitle
%
% \tableofcontents
%
% \section{Introduction}
%
% Repeating of math operator at the broken line and the new line in inline
% equations is used in Cyrillic mathematical typography (Russian for example),
% but unfortunately, \LaTeX{} doesn't provide such an option. There was an attempt
% to do it many years ago [see M.I.~Grinchuk ``TeX and Russian Traditions of
% Typesetting'', TUGboat 17(4) (1996) 385], but there was no ready to use package.
%
% This package extends ideas described in the ``TeX and Russian Traditions of
% Typesetting'' and supports most of \LaTeX's mathematical packages (some known
% issues are listed in the ``Known issues'' section below).
%
%
% \section{Usage}
%
% Just include the package using \verb|\usepackage{rmathbr}| command.
%
% \begin{multicols}{5}
% \noindent $(a+b)^2=a^2+2ab+b^2$, $a^2-b^2=(a+b)\*(a-b)$,
% $a^3\pm b^3=(a\pm b)\*(a^2\mp ab+b^2)$, $(1-x)^{-2}=1+2x+3x^2+\ldots$,
% $\sin^2\alpha+\cos^2\alpha=1$, $\int x\sin ax\,dx=a^{-2}(\sin ax-ax\cos ax)$,
% $t_1t_2\cos\theta=\vec t_1\cdot\vec t_2$, $x=12\cdott 3\cdott 10^3$.
% \end{multicols}
%
% It's recommended to load \textsf{rmathbr} after other packages because
% \textsf{rmathbr} has special support of many math-related packages:
% \textsf{amsfonts}, \textsf{amssymb}, \mbox{\textsf{amstex}}, \textsf{bm},
% \textsf{boisik}, \textsf{euler}, \textsf{eulervm}, \textsf{fourier},
% \textsf{icomma}, \textsf{latexsym}, \textsf{lucbmath}, \textsf{lucidabr},
% \textsf{lucmin}, \mbox{\textsf{lucmtime}}, \textsf{luctime}, \textsf{mathbbol},
% \textsf{mathtools}, \textsf{mdwmath}, \textsf{program}, \textsf{sbbm},
% \textsf{stmaryrd}, \textsf{unicode-math}, \textsf{wasysym}, \textsf{xy}.
%
% Please, submit any found bugs to \url{https://github.com/dryabov/rmathbr/issues}.
%
% \section{Options}
%
% Some aspects of the \textsf{rmathbr} can be altered using package options.
% In most cases, it should be sufficient to load the package without extra
% options, but sometimes it may be necessary to change default options for
% compatibility with other packages.
%
% The ``key=value'' scheme is used with the following possible options (default
% value is printed in italics):
%
% \begin{longtable}{>{\texttt}l>{\raggedright}p{2.5cm}p{6.5cm}}
% |script| & noactive\par\textit{mathactive}\par active &
%         This option declares what way \textsf{rmathbr} will affect |_| and |^|
%         commands (sub- and superscripts). In the ``noactive'' mode, they have
%         default \TeX{} behavior, but it may be necessary to manually wrap some
%         indices into curly braces, e.g. |A^{\star}| instead of just
%         a |A^\star|. In the ``mathactive'' mode, both |_| and |^| become
%         commands in math mode that process arguments properly, and extra
%         wrapping is unnecessary. And in the ``active'' mode these commands can
%         be used for scripts even in the text mode (e.g. |H_2O|). \\
% |run| & atload\par atbegindocument\par\textit{auto} &
%         This option declares when to affect math commands for hyphenation,
%         directly at package loading time, or later at the |\begin{document}|.
%         The latter is necessary to deal with packages that declare math symbols
%         at the |\begin{document}|. The ``auto'' value allows to switch to the
%         ``atbegindocument'' mode automatically (currently, if
%         \textsf{unicode-math} or \textsf{mathtools} packages are loaded). \\
% |cdottimes|   & true\par\textit{false} &
%         Re-declare \verb|\cdot| command as \verb|\cdott| (see \verb|\cdott|
%         description below) to hyphenate it using the \verb|\times| character.
%         By default, it is disabled because \verb|\cdot| is also used for scalar
%         products (e.g. $\vec a\cdot\vec b$), and in this case, it is wrong to
%         replace it with \verb|\times| on break, because \verb|\times| is usually
%         used for cross products. \\
% |brokencolon| & true\par\textit{false} &
%         According to Russian typography traditions, math expression shouldn't be
%         broken on the division character (|:|). But if you like to allow it,
%         just set this option to true. \\
% |brokenminus| & \textit{true}\par false &
%         Usually, it's allowed to break math expression on the ``minus''
%         character, but it's possible to disable it. \\
% |brokenbin|   & true\par\textit{false} &
%         This option disables breaks on binary operations (keeping relations
%         only). See also |\BrokenBinOff| and |\BrokenBinOn| macros. \\
% \end{longtable}%
%
% Internally, |scripts=mathactive| assigns the mathactive (12) category to
% \verb|^| and \verb|_| characters, |scripts=active| assigns the active (13)
% category, and |scripts=noactive| keeps default categories to \verb|^| and
% \verb|_| characters (7 and 8, correspondingly).
%
% For backward compatibility, \textsf{rmathbr} supports
% the |noactivechars| option as an alias for |scripts=noactive|,
% the |mathactivechars| option as an alias for |scripts=mathactive|, and
% the |activechars| option as an alias for |scripts=active|. These options are
% deprecated, and it's recommended to switch to the corresponding |script| option.
%
%
%
% \section{Macros}
%
% \DescribeMacro{\*}
%
% Macro \verb|\*| is used to mark multiplication point that is invisible and
% changed to $\times$ at the break only. E.g. \verb|(a+b)\*(a-b)|.
%
% \DescribeMacro{\cdott}
%
% This command displays \verb|\cdot| ($\cdot$) that is changed to \verb|\times|
% ($\times$) at the break.
%
% \DescribeMacro{\nobr}
%
% This command is used to prevent break expression on the following math
% operator. E.g. \verb|a\nobr-b|.
%
% \DescribeMacro{\SetBreakableRel}
%
% Declares breakable relation operator, e.g. \verb|\SetBreakableRel{\MyEqual}|.
%
% \DescribeMacro{\SetBreakableBin}
%
% Declares breakable binary operator, e.g. \verb|\SetBreakableBin{\MyPlus}|.
%
% \DescribeMacro{\SetBreakableInner}
%
% Declares breakable ``inner'' expression, e.g. \verb|\SetBreakableInner{\ldots}|.
%
% \DescribeMacro{\SetOpenBracket}
%
% Declares opening bracket (\textsf{rmathbr} disables break directly after
% brackets), e.g. \verb|\SetOpenBracket{\MyOpenBracket}|.
%
% \DescribeMacro{\SetMathOperator}
%
% Declares math operator (\textsf{rmathbr} disables break directly after
% operators), e.g. \verb|\SetMathOperator{\MySum}|.
%
% \DescribeMacro{\SetPunctuation}
%
% Declares punctuation command (\textsf{rmathbr} disables break directly after
% punctuation to prevent break and duplication in the case like \verb|$1,-1$|),
% e.g. \verb|\SetPunctuation{\MyColon}|.
%
% \DescribeMacro{\UnsetBrokenCmd}
%
% Restores original command, e.g. to avoid potential issues or conflicts with
% other packages. Usage example: \verb|\UnsetBrokenCmd{\cdot}| to disable break on
% \verb|\cdot|. Note that in the case of |run=atbegindocument| (or |auto|) this
% command should be used after \verb|\begin{document}|.
%
% \DescribeMacro{\BrokenBinOff}
%
% Disables break on binary operations, see also |brokenbin=false| option.
%
% \DescribeMacro{\BrokenBinOn}
%
% Enables break on binary operations.
%
%
%
% \section{Known issues}
% \begin{itemize}
%   \item \textsf{breqn} package: cannot work together with \textsf{rmathbr} (as
%         \textsf{breqn} redefines all the math in \TeX)
%  \end{itemize}
%
% \section{Changelog}
%
% \subsection*{1.1.1 (18-December-2020)}
% \begin{itemize}
%   \item fix issue with a prime (|'|) followed by a superscript
%   \item fix issue with \verb|\text| command as sub-/superscripts
% \end{itemize}
% \subsection*{1.1 (11-December-2020)}
% \begin{itemize}
%   \item add support of XeTeX/LuaTeX and \textsf{unicode-math} package
%   \item add new key-value options (|script|, |run|, |cdottimes|, |brokenminus|,
%         |brokencolon|, |brokenbin|)
%   \item add new commands (\verb|\UnsetBrokenCmd|, \verb|\BrokenBinOff| and
%         \verb|\BrokenBinOn|)
%   \item add support of \textsf{mathtools} package
%   \item add a patch for \textsf{bm} package
%   \item add a patch for \textsf{xy} package
%   \item remove dependence on \textsf{mathstyle} package
%   \item fix math class for \verb|=|, \verb|<|, \verb|>| (\verb|\mathrel| instead
%         of \verb|\mathbin|)
%   \item fix math class for \verb|:| (\verb|\mathbin| instead of \verb|\mathrel|)
%   \item fix processing of colon-related commands (e.g. \verb|\coloneq| from
%         \textsf{mathtools}, etc.)
%   \item performance optimizations
% \end{itemize}
% \subsection*{1.0.3 (10-April-2016)}
% \begin{itemize}
%   \item fix issue with sub-/superscripts in \verb|\Biggl|, \verb|\biggl|,
%    \verb|\Bigl|, \verb|\bigl|
% \end{itemize}
% \subsection*{1.0.2 (23-June-2015)}
% \begin{itemize}
%   \item fix issue with expanding of math operators
% \end{itemize}
% \subsection*{1.0.1 (14-June-2015)}
% \begin{itemize}
%   \item fix \verb|\cdott|-related issues (thanks to Bruno Le Floch)
%   \item fix some \verb|\SetBreakableRel| and \verb|\SetBreakableBin| declarations
%   \item fix mathematical operators with \verb|\limits| or \verb|\nolimits|
% \end{itemize}
% \subsection*{1.0 (02-June-2015)}
% \begin{itemize}
%   \item fix break after math operators (\verb|\sum|, \verb|\int|, etc.)
%   \item add documentation
% \end{itemize}
% \subsection*{0.99 (15-November-2010)}
% \begin{itemize}
%   \item don't hyphenate trailing mathsign (e.g.\ in \verb|$2+2=$|)
%   \item don't change redefined symbols (\verb|\le|, \verb|\ge|, \verb|\to|, etc.)
% \end{itemize}
% \subsection*{0.98 (31-January-2010)}
% \begin{itemize}
%   \item fix hyphenation on~\verb|:=|
%   \item correct work with \textsf{icomma} package and
%         option \verb|[icomma]| of \textsf{eulervm} package
%   \item correct work with \textsf{program} package
%   \item symbols have been added from \textsf{boisik}, \textsf{euler},
%         \textsf{fourier}, \textsf{lucbmath}, \textsf{lucidabr}, \textsf{lucmin},
%         \textsf{lucmtime}, \textsf{luctime}, \textsf{mathbbol},
%         \textsf{mdwmath}, \textsf{sbbm}, \textsf{stmaryrd}, and \textsf{wasysym}
%         packages.
%   \item remove shrinking of space in math (breaked \textsf{url} package)
%   \item don't hyphenate after punctuation (``\verb|,|'', ``\verb|;|'',
%         ``\verb|\colon|'' etc.)
%   \item create broken commands as robust ones
%   \item some fixes of redeclaring of AMS commands
%   \item commented hyphenation on \verb|\ldots| and \verb|\cdots|, as \TeX{}
%         doesn't break here
% \end{itemize}
% \subsection*{0.97 (08-October-2009)}
% \begin{itemize}
%   \item fix problem with operators like ``\verb|+^\leq|''
% \end{itemize}
% \subsection*{0.96 (29-September-2009)}
% \begin{itemize}
%   \item fix problem with ``\verb|-|'' in AMS's \verb|\DeclareMathOperator|
%   \item fix problem with \verb|\ldots| in text mode
% \end{itemize}
% \subsection*{0.95 (28-September-2009)}
% \begin{itemize}
%   \item fix problem with sub/sup-scripts after relations
%   \item fix hyphenation on \verb|\ldots|
%   \item AMS/Lucida left brackets (\verb|\lvert|, \verb|\lVert|,
%         \verb|\ulcorner|, \verb|\llcorner|) support
%   \item \textsf{mathbbol} left bracket (\verb|\Lbrack|) support
%   \item huge code refactoring
% \end{itemize}
% \subsection*{0.91 (21-September-2009)}
% \begin{itemize}
%   \item fix problem with problem with space after brackets
% \end{itemize}
% \subsection*{0.90 (20-September-2009)}
% \begin{itemize}
%   \item first public release
% \end{itemize}
%
%
% \StopEventually{}
%
% \section{Code}
%
% \iffalse
%<*package>
% \fi
%
%
% \subsection*{Initialization}
%
% Load required packages.
%    \begin{macrocode}
\RequirePackage{ifetex}
\RequirePackage{ifluatex}
\RequirePackage{xkeyval}
\RequirePackage{expl3}
%    \end{macrocode}
%
% \begin{macro}{\rmathbr@kv}
%    \begin{macrocode}
\edef\rmathbr@kv{\@currname.\@currext}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\xDeclareBoolOptionX}
% The macro to declare a boolean option.
%    \begin{macrocode}
\def\xDeclareBoolOptionX#1#2{%
  \define@boolkey{\rmathbr@kv}[rmathbr@kv@]{#1}[true]{#2}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\xDeclareChoiceOptionX}
% The macro to declare a choice option.
%    \begin{macrocode}
\def\xDeclareChoiceOptionX#1[#2]#3[#4]#5{%
  \define@choicekey{\rmathbr@kv}{#1}[#2]{#3}[#4]{#5}%
}
%    \end{macrocode}
% \end{macro}
%
% Warn about known issues.
%    \begin{macrocode}
\@ifpackageloaded{breqn}{%
  \PackageError{rmathbr}{'rmathbr' package cannot be used together with 'breqn' package!}{}%
}{}
%    \end{macrocode}
%
%
% \subsection*{Interface}
%
% \begin{macro}{\nobr}
% Makes next symbol nonbreakable.
%    \begin{macrocode}
\def\nobr{\penalty\relpenalty}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\SetBreakableRel}
% Makes breakable relation sign.
%    \begin{macrocode}
\def\SetBreakableRel#1{\rmathbr@setbreakable{#1}{\brokenrel}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\SetBreakableBin}
% Makes breakable binary operation.
%    \begin{macrocode}
\def\SetBreakableBin#1{\rmathbr@setbreakable{#1}{\brokenbin}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\SetBreakableInner}
% Makes breakable inner (like \verb|\ldots|).
%    \begin{macrocode}
\def\SetBreakableInner#1{\rmathbr@setbreakable{#1}{\brokeninner}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\SetOpenBracket}
% Disables breaks after open bracket.
%    \begin{macrocode}
\def\SetOpenBracket#1{\rmathbr@nobrafter{#1}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\SetPunctuation}
% Disables breaks after punctuation sign.
%    \begin{macrocode}
\def\SetPunctuation#1{\rmathbr@nobrafter{#1}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\SetMathOperator}
% Disables breaks after math operator.
%    \begin{macrocode}
\def\SetMathOperator#1{\rmathbr@setbreakable{#1}{\rmathbr@mathop}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\UnsetBrokenCmd}
% Restores original command.
%    \begin{macrocode}
\def\UnsetBrokenCmd#1{\rmathbr@unsetbroken{#1}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\BrokenBinOff}
% Disables break on binary operations.
%    \begin{macrocode}
\def\BrokenBinOff{\rmathbr@brokenbinoff}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\BrokenBinOn}
% Enables break on binary operations.
%    \begin{macrocode}
\def\BrokenBinOn{\rmathbr@brokenbinon}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\brokenrel}
% Makes argument as breakable relation sign.
%    \begin{macrocode}
\DeclareRobustCommand{\brokenrel}[1]{\rmathbr@brokenrel{#1}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\brokenbin}
% Makes argument as breakable binary operation.
%    \begin{macrocode}
\DeclareRobustCommand{\brokenbin}[1]{\rmathbr@brokenbin{#1}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\brokeninner}
% Makes argument as breakable inner.
%    \begin{macrocode}
\DeclareRobustCommand{\brokeninner}[1]{\rmathbr@brokeninner{#1}}
%    \end{macrocode}
% \end{macro}
%
%
% \subsection*{Options}
%
% Start to process options.
%
% First of all, warn about deprecated options:
%    \begin{macrocode}
\xDeclareBoolOptionX{noactivechars}{
  \ifrmathbr@kv@noactivechars
    \PackageWarning{rmathbr}{^^J Option 'noactivechars' is deprecated.^^J
                             Use 'scripts=noactive' instead.^^J}
    \ExecuteOptionsX{scripts=noactive}
  \fi
}
%    \end{macrocode}
%    \begin{macrocode}
\xDeclareBoolOptionX{mathactivechars}{
  \ifrmathbr@kv@mathactivechars
    \PackageWarning{rmathbr}{^^J Option 'mathactivechars' is deprecated.^^J
                             Use 'scripts=mathactive' instead.^^J}
    \ExecuteOptionsX{scripts=mathactive}
  \fi
}
%    \end{macrocode}
%    \begin{macrocode}
\xDeclareBoolOptionX{activechars}{
  \ifrmathbr@kv@activechars
    \PackageWarning{rmathbr}{^^J Option 'activechars' is deprecated.^^J
                             Use 'scripts=active' instead.^^J}
    \ExecuteOptionsX{scripts=active}
  \fi
}
%    \end{macrocode}
%
% Process |script| option:
%    \begin{macrocode}
\xDeclareChoiceOptionX{scripts}[\xkv@val\xkv@nr]{noactive,mathactive,active}[mathactive]{
  \let\rmathbr@kv@scriptsmode=\xkv@nr
}
%    \end{macrocode}
%
% Set when to patch math commands, at the package loading or at the
% \verb|\begin{document}| (i.e.\ after other packages are loaded and set its
% macros):
%    \begin{macrocode}
\newif\ifrmathbr@patch@begindocument
%    \end{macrocode}
% Note that by default 'atload' is used unless 'unicode-math' or 'mathtools' are
% loaded.
%    \begin{macrocode}
\xDeclareChoiceOptionX{run}[\xkv@val\xkv@nr]{atload,atbegindocument,auto}[auto]{
  \ifcase\xkv@nr\relax
    \rmathbr@patch@begindocumentfalse
  \or
    \rmathbr@patch@begindocumenttrue
  \or
    \@ifpackageloaded{unicode-math}{\rmathbr@patch@begindocumenttrue}{}
    \@ifpackageloaded{mathtools}{\rmathbr@patch@begindocumenttrue}{}
  \fi
}
%    \end{macrocode}
%
% The option to make \verb|\cdot| works like \verb|\cdott|:
%    \begin{macrocode}
\xDeclareBoolOptionX{cdottimes}{}
%    \end{macrocode}
%
% Other options (see documentation):
%    \begin{macrocode}
\xDeclareBoolOptionX{brokenminus}{}
%    \end{macrocode}
%    \begin{macrocode}
\xDeclareBoolOptionX{brokencolon}{}
%    \end{macrocode}
%    \begin{macrocode}
\xDeclareBoolOptionX{brokenbin}{%
  \ifrmathbr@kv@brokenbin
  \else
    \AtBeginDocument{\BrokenBinOff}
  \fi
}
%    \end{macrocode}
%
% Default values:
%    \begin{macrocode}
\ExecuteOptionsX{scripts=mathactive}
\ExecuteOptionsX{run=auto}
\ExecuteOptionsX{cdottimes=false}
\ExecuteOptionsX{brokenminus=true}
\ExecuteOptionsX{brokencolon=false}
\ExecuteOptionsX{brokenbin=true}
%    \end{macrocode}
%
% Execute options:
%    \begin{macrocode}
\ProcessOptionsX
%    \end{macrocode}
%
%
% \subsection*{Implementation}
%
% Switch to scripts mode
%    \begin{macrocode}
\ifcase\rmathbr@kv@scriptsmode
  % nop
\or
  \AtBeginDocument{\catcode`\^=12\mathcode`\^=32768\catcode`\_=12\mathcode`\_=32768}
\or
  \AtBeginDocument{\catcode`\^\active\catcode`\_\active}
\fi
%    \end{macrocode}
%
% \begin{macro}{\rmathbr@pr@m@s}
% Fix the prime symbol to take into account active math superscripts.
%    \begin{macrocode}
\def\rmathbr@pr@m@s{%
  \ifx'\@let@token
    \let\rmathbr@command=\pr@@@s
  \else\ifx\rmathbr@superscript@std\@let@token
    \let\rmathbr@command=\pr@@@t
  \else\ifx\rmathbr@superscript@other\@let@token
    \let\rmathbr@command=\pr@@@t
  \else
    \let\rmathbr@command=\egroup
  \fi\fi\fi
  \rmathbr@command}
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
\ifnum\rmathbr@kv@scriptsmode>0\relax
  \let\pr@m@s=\rmathbr@pr@m@s
\fi
%    \end{macrocode}
%
% \begin{macro}{\rmathbr@unicodemath@primes@patch}
% \begin{macro}{\__um_superscript:n}
% Fix the prime symbol for unicode-math package.
%    \begin{macrocode}
\ExplSyntaxOn
\def\rmathbr@unicodemath@primes@patch{
  \cs_gset:Nn \__um_superscript:n
    {
      \rmathbr@superscript@std\bgroup ##1
      \peek_meaning_remove:NTF \rmathbr@superscript@other \__um_arg_i_before_egroup:n {
        \peek_meaning_remove:NTF \rmathbr@superscript@std \__um_arg_i_before_egroup:n \egroup
      }
    }
}
\ExplSyntaxOff
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% Store original penalty values (via mathchardef trick).
%    \begin{macrocode}
\mathchardef\rmathbr@orig@relpenalty=\relpenalty
\mathchardef\rmathbr@orig@binoppenalty=\binoppenalty
%    \end{macrocode}
%
% Independent hyphen penalties are supported by LuaTeX only. That's why we save
% default penalty to \verb|\exhyphenpenalty| (as \verb|\exhyphenpenalty| will
% be actual penalty for math breaks in \TeX{} and XeTeX).
%    \begin{macrocode}
\ifluatex\else
  \exhyphenpenalty=\relpenalty
\fi
%    \end{macrocode}
%
% Disable default breaks.
%    \begin{macrocode}
\relpenalty=13131
\binoppenalty=14141
%    \end{macrocode}
%
% \begin{macro}{\everymath}
% First symbol/command in equation is nonbreakable.
%    \begin{macrocode}
\expandafter\everymath\expandafter{\the\everymath\nobr }
%    \end{macrocode}
% \end{macro}
% Save some characters definitions.
% \begin{macro}{\rmathbr@superscript@std}
%    \begin{macrocode}
\begingroup\catcode`\^=7 \global\let\rmathbr@superscript@std=^\endgroup
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@superscript@other}
%    \begin{macrocode}
\begingroup\catcode`\^=12\global\let\rmathbr@superscript@other=^\endgroup
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@subscript@std}
%    \begin{macrocode}
\begingroup\catcode`\_=8 \global\let\rmathbr@subscript@std=_\endgroup
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@subscript@other}
%    \begin{macrocode}
\begingroup\catcode`\_=12\global\let\rmathbr@subscript@other=_\endgroup
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@prime}
%    \begin{macrocode}
\begingroup\catcode`\'=12\global\let\rmathbr@prime='\endgroup
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@superscript}
%    \begin{macrocode}
\def\rmathbr@superscript{\rmathbr@check@arg\rmathbr@superscript@std}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@subscript}
%    \begin{macrocode}
\def\rmathbr@subscript{\rmathbr@check@arg\rmathbr@subscript@std}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@check@arg}
% Check that argument is rmathbr-processed command and wrap it into braces
% (if necessary)
%    \begin{macrocode}
\def\rmathbr@check@arg#1{%
  \let\rmathbr@checkarg@cmd=#1
  \futurelet\rmathbr@let@token\rmathbr@check@@arg%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@check@@arg}
%    \begin{macrocode}
\def\rmathbr@check@@arg#1{%
  \let\rmathbr@command=\rmathbr@wrap@arg
  \ifx\rmathbr@let@token\bgroup\else
    \edef\rmathbr@orig{\expandafter\@gobble\string#1}
    \ifx\rmathbr@orig\empty\else
      \expandafter\ifx\csname rmathbr@orig@\rmathbr@orig\endcsname\relax
        \let\rmathbr@command=\@firstofone
      \fi
    \fi
  \fi
  \rmathbr@checkarg@cmd\rmathbr@command{#1}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@wrap@arg}
%    \begin{macrocode}
\def\rmathbr@wrap@arg#1{{#1}}
%    \end{macrocode}
% \end{macro}
%
% Setup sub- and superscripts.
%    \begin{macrocode}
\begingroup
  \catcode`\^\active\gdef^{\rmathbr@superscript}
  \catcode`\_\active\gdef_{\rmathbr@subscript}
\endgroup
%    \end{macrocode}
%
%    \begin{macrocode}
\newif\ifrmathbr@activemathchar
%    \end{macrocode}
% Check for XeTeX/LuaTeX
%    \begin{macrocode}
\ifx\Umathcode\@undefined
%    \end{macrocode}
% Standard TeX
% \begin{macro}{\rmathbr@checkmathchar}
%    \begin{macrocode}
  \def\rmathbr@checkmathchar#1{%
    \ifnum\mathcode#1<32768\relax%
      \rmathbr@activemathcharfalse%
    \else%
      \rmathbr@activemathchartrue%
    \fi}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@mathchar}
%    \begin{macrocode}
  \def\rmathbr@mathchar#1{\mathchar\number\mathcode#1}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@makeactivemathopen}
%    \begin{macrocode}
  \def\rmathbr@makeactivemathopen#1{%
    \begingroup
      \xdef\@tempa{\mathopen\delimiter\number\delcode#1 \noexpand\nobr }
      \begingroup\lccode`~=#1\catcode#1\active\lowercase{\endgroup\xdef~}{\@tempa}
    \endgroup
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
  }
\else
%    \end{macrocode}
% XeTeX/LuaTeX
% \begin{macro}{\rmathbr@activemathcode}
%    \begin{macrocode}
  \begingroup
    \mathcode`\+="8000
    \xdef\rmathbr@activemathcode{\number\Umathcodenum`\+}
  \endgroup
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@checkmathchar}
%    \begin{macrocode}
  \def\rmathbr@checkmathchar#1{%
    \ifnum\Umathcodenum#1=\rmathbr@activemathcode\relax%
      \expandafter\rmathbr@activemathchartrue%
    \else%
      \expandafter\rmathbr@activemathcharfalse%
    \fi}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@mathchar}
%    \begin{macrocode}
  \def\rmathbr@mathchar#1{\Umathcharnum\number\Umathcodenum#1}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@truncdiv}
%    \begin{macrocode}
  \def\rmathbr@truncdiv#1#2{((#1-(#2-1)/2)/#2)}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@modulo}
%    \begin{macrocode}
  \def\rmathbr@modulo#1#2{(#1-\rmathbr@truncdiv{#1}{#2}*#2)}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@makeactivemathopen}
%    \begin{macrocode}
  \def\rmathbr@makeactivemathopen#1{%
    \begingroup
      \def\@tempa{\Udelcodenum#1}
      \ifnum\@tempa<"1000000
        \xdef\@tempb{\mathopen\delimiter\number\@tempa\space\noexpand\nobr }
      \else
        \xdef\@tempb{\mathopen\Udelimiter4 %
\number\numexpr\rmathbr@truncdiv{\rmathbr@modulo{\@tempa}{"40000000}}{"200000}\relax%
\space\number\numexpr\rmathbr@modulo{\@tempa}{"200000}\relax\noexpand\nobr }
      \fi
      \begingroup\lccode`~=#1\catcode#1\active\expandafter\lowercase\expandafter%
{\expandafter\endgroup\expandafter\gdef\expandafter~\expandafter}\expandafter{\@tempb}
    \endgroup
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
  }
\fi
%    \end{macrocode}
%
% \begin{macro}{\rmathbr@makeactivemath}
%    \begin{macrocode}
\def\rmathbr@makeactivemath#1#2#3{
  \begingroup
    \rmathbr@checkmathchar{#1}
    \lccode`~=#1
    \catcode#1\active
    \ifrmathbr@activemathchar
      \PackageWarning{rmathbr}{Redeclare active math #1 symbol to default mathchar value}
      \lowercase{\gdef~}{#2{#3}}
    \else
      \lowercase{\xdef~}{\noexpand#2{\rmathbr@mathchar{#1}}}
    \fi
  \endgroup
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@makeactivemathpunct}
%    \begin{macrocode}
\def\rmathbr@makeactivemathpunct#1#2{
  \begingroup
    \rmathbr@checkmathchar{#1}
    \lccode`~=#1
    \catcode#1\active
    \ifrmathbr@activemathchar
      \PackageWarning{rmathbr}{Redeclare active math #1 symbol to default mathchar value}
      \lowercase{\gdef~}{\mathpunct#2\nobr }
    \else
      \lowercase{\xdef~}{\mathpunct\rmathbr@mathchar{#1} \noexpand\nobr }
    \fi
  \endgroup
}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\newif\ifrmathbr@protected
%    \end{macrocode}
%
% \begin{macro}{\rmathbr@str@contains}
%    \begin{macrocode}
\def\rmathbr@str@contains#1#2{\begingroup\edef\x{\endgroup\noexpand\in@{#1}{#2}}\x}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@ifprotected}
%    \begin{macrocode}
\def\rmathbr@ifprotected#1{%
  \rmathbr@protectedfalse
  \edef\meaning@cmd{\meaning#1}
  \rmathbr@str@contains{\string#1\space}\meaning@cmd
  \ifin@
    \rmathbr@str@contains{\string\protect\space}\meaning@cmd
    \ifin@\rmathbr@protectedtrue\else
      \rmathbr@str@contains{\string\x@protect\space}\meaning@cmd
      \ifin@\rmathbr@protectedtrue\else
        \rmathbr@str@contains{\string\@testopt\space}\meaning@cmd
        \ifin@\rmathbr@protectedtrue\else
          \rmathbr@str@contains{\string\@protected@testopt\space}\meaning@cmd
          \ifin@\rmathbr@protectedtrue\fi
        \fi
      \fi
    \fi
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@ReDeclareRobustCommand}
% Command without arguments
%    \begin{macrocode}
\def\rmathbr@ReDeclareRobustCommand#1#2{%
  \begingroup
    \ifx#1\@undefined
    \else
      \edef\var@orig@I{rmathbr@orig@\expandafter\@gobble\string#1}
      \edef\var@Ispace{\expandafter\@gobble\string#1 }
      \expandafter\ifx\csname\var@orig@I\endcsname\relax
        \ifetex
          \expandafter\global\expandafter\let\csname\var@orig@I\endcsname#1
        \else
          \rmathbr@ifprotected#1
          \ifrmathbr@protected
            \expandafter\global\expandafter\let\csname\var@orig@I\expandafter\endcsname%
\csname\var@Ispace\endcsname
          \else
            \expandafter\global\expandafter\let\csname\var@orig@I\endcsname#1
          \fi
        \fi
      \fi
      \ifetex
        \protected\gdef#1{#2}
      \else
        \expandafter\gdef\csname\var@Ispace\endcsname{#2}% no arguments
        \xdef#1{\noexpand\protect\expandafter\noexpand\csname\var@Ispace\endcsname}
      \fi
    \fi
  \endgroup%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@ReDeclareRobustCommandI}
% Command with one argument
%    \begin{macrocode}
\def\rmathbr@ReDeclareRobustCommandI#1#2{%
  \begingroup
    \ifx#1\@undefined
    \else
      \edef\var@orig@I{rmathbr@orig@\expandafter\@gobble\string#1}
      \edef\var@Ispace{\expandafter\@gobble\string#1\space}
      \expandafter\ifx\csname\var@orig@I\endcsname\relax
        \ifetex
          \expandafter\global\expandafter\let\csname\var@orig@I\endcsname#1
        \else
          \rmathbr@ifprotected#1
          \ifrmathbr@protected
            \expandafter\global\expandafter\let\csname\var@orig@I\expandafter\endcsname%
\csname\var@Ispace\endcsname
          \else
            \expandafter\global\expandafter\let\csname\var@orig@I\endcsname#1
          \fi
        \fi
      \fi
      \ifetex
        \protected\gdef#1##1{#2}
      \else
        \expandafter\gdef\csname\var@Ispace\endcsname##1{#2}% one argument
        \xdef#1{\noexpand\protect\expandafter\noexpand\csname\var@Ispace\endcsname}
      \fi
    \fi
  \endgroup%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\brokenrel}
%    \begin{macrocode}
\rmathbr@ReDeclareRobustCommandI{\brokenrel}{\rmathbr@brokenrel{#1}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\brokenbin}
%    \begin{macrocode}
\rmathbr@ReDeclareRobustCommandI{\brokenbin}{\rmathbr@brokenbin{#1}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\brokeninner}
%    \begin{macrocode}
\rmathbr@ReDeclareRobustCommandI{\brokeninner}{\rmathbr@brokeninner{#1}}%
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\let\rmathbr@save@brokenrel=\brokenrel
\let\rmathbr@save@brokenbin@on=\brokenbin
\let\rmathbr@save@brokenbin=\brokenbin
\let\rmathbr@save@brokeninner=\brokeninner
%    \end{macrocode}
%
% \begin{macro}{\rmathbr@brokenbinon}
%    \begin{macrocode}
\def\rmathbr@brokenbinon{%
  \let\rmathbr@save@brokenbin=\rmathbr@save@brokenbin@on
  \ifx\brokenbin\@firstofone\else
    \let\brokenbin=\rmathbr@save@brokenbin
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@brokenbinoff}
%    \begin{macrocode}
\def\rmathbr@brokenbinoff{%
  \let\rmathbr@save@brokenbin=\mathbin
  \ifx\brokenbin\@firstofone\else
    \let\brokenbin=\rmathbr@save@brokenbin
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@setbrokens}
%    \begin{macrocode}
\def\rmathbr@setbrokens{%
  \let\brokenrel=\rmathbr@save@brokenrel
  \let\brokenbin=\rmathbr@save@brokenbin
  \let\brokeninner=\rmathbr@save@brokeninner
  \let\rmathbr@colontest=\rmathbr@save@colontest
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@unsetbrokens}
%    \begin{macrocode}
\def\rmathbr@unsetbrokens{%
  \let\brokenrel=\@firstofone
  \let\brokenbin=\@firstofone
  \let\brokeninner=\@firstofone
  \let\rmathbr@colontest=\rmathbr@colon@std
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@brokenrel}
%    \begin{macrocode}
\def\rmathbr@brokenrel#1{%
  \def\rmathbr@arg{#1}
  \let\rmathbr@this=\rmathbr@brokenrel
  \let\rmathbr@output=\rmathbr@@brokenrel
  \futurelet\rmathbr@let@token\rmathbr@brokenop%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@brokenbin}
%    \begin{macrocode}
\def\rmathbr@brokenbin#1{%
  \def\rmathbr@arg{#1}
  \let\rmathbr@this=\rmathbr@brokenbin
  \let\rmathbr@output=\rmathbr@@brokenbin
  \futurelet\rmathbr@let@token\rmathbr@brokenop%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@brokeninner}
%    \begin{macrocode}
\def\rmathbr@brokeninner#1{%
  \def\rmathbr@arg{#1}
  \let\rmathbr@this=\rmathbr@brokeninner
  \let\rmathbr@output=\rmathbr@@brokeninner
  \futurelet\rmathbr@let@token\rmathbr@brokenop%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@mathop}
%    \begin{macrocode}
\def\rmathbr@mathop#1{%
  \def\rmathbr@arg{#1}
  \let\rmathbr@this=\rmathbr@mathop
  \let\rmathbr@output=\rmathbr@@mathop
  \futurelet\rmathbr@let@token\rmathbr@brokenop%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@@brokenrel}
% LuaTeX only supports per-disc-node penalties
%    \begin{macrocode}
\def\rmathbr@@brokenrel#1{%
  \ifnum\lastpenalty=\relpenalty
    \mathrel{#1}
  \else
    \mathrel{#1}
    \ifx$\rmathbr@let@token
    \else
      \begingroup
        \hyphenpenalty\rmathbr@orig@relpenalty
        \rmathbr@selector{#1}
      \endgroup
    \fi
  \fi
  \rmathbr@setbrokens
  \penalty\relpenalty %
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@@brokenbin}
%    \begin{macrocode}
\def\rmathbr@@brokenbin#1{%
  \ifnum\lastpenalty=\relpenalty
    \mathbin{#1}
  \else
    \mathbin{#1}
    \ifx$\rmathbr@let@token
    \else
      \begingroup
        \hyphenpenalty\rmathbr@orig@binoppenalty
        \rmathbr@selector{#1}
      \endgroup
    \fi
  \fi
  \rmathbr@setbrokens
  \penalty\binoppenalty %
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@@brokeninner}
%    \begin{macrocode}
\def\rmathbr@@brokeninner#1{%
  \ifnum\lastpenalty=\relpenalty
    \mathinner{#1}
  \else
    \mathinner{#1}
    \ifx$\rmathbr@let@token
    \else
      \begingroup
        \hyphenpenalty\rmathbr@orig@relpenalty
        \rmathbr@selector{#1}
      \endgroup
    \fi
  \fi
  \rmathbr@setbrokens
  \penalty\relpenalty %
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@@mathop}
%    \begin{macrocode}
\def\rmathbr@@mathop#1{%
  \rmathbr@setbrokens
  #1\nobr %
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@selector}
%    \begin{macrocode}
\def\rmathbr@selector#1{%
  \mathchoice
    {\discretionary{}{\hbox{$\m@th\displaystyle#1$}}{}}
    {\discretionary{}{\hbox{$\m@th\textstyle#1$}}{}}
    {\discretionary{}{\hbox{$\m@th\scriptstyle#1$}}{}}
    {\discretionary{}{\hbox{$\m@th\scriptscriptstyle#1$}}{}}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@brokenop}
%    \begin{macrocode}
\def\rmathbr@brokenop{%
  \ifmmode
    \rmathbr@unsetbrokens
    \ifx\rmathbr@subscript@std\rmathbr@let@token
      \let\@command=\rmathbr@brokenglue
    \else\ifx\rmathbr@subscript@other\rmathbr@let@token
      \let\@command=\rmathbr@brokenglue
    \else\ifx\rmathbr@superscript@std\rmathbr@let@token
      \let\@command=\rmathbr@brokenglue
    \else\ifx\rmathbr@superscript@other\rmathbr@let@token
      \let\@command=\rmathbr@brokenglue
    \else\ifx\limits\rmathbr@let@token
      \let\@command=\rmathbr@brokenskip
    \else\ifx\nolimits\rmathbr@let@token
      \let\@command=\rmathbr@brokenskip
    \else\ifx\rmathbr@prime\rmathbr@let@token
      \let\@command=\rmathbr@brokenskip
    \else\ifx\relax\rmathbr@let@token
      \let\@command=\rmathbr@brokenskip
    \else
      \let\@command=\rmathbr@output
    \fi\fi\fi\fi\fi\fi\fi\fi
  \else
    \let\@command=\relax
  \fi
  \expandafter\@command\expandafter{\rmathbr@arg}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@brokenglue}
%    \begin{macrocode}
\def\rmathbr@brokenglue#1#2#3{%
  \def\rmathbr@temp{#1#2{#3}}
  \expandafter\rmathbr@this\expandafter{\rmathbr@temp}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@brokenskip}
%    \begin{macrocode}
\def\rmathbr@brokenskip#1#2{%
  \def\rmathbr@temp{#1#2}
  \expandafter\rmathbr@this\expandafter{\rmathbr@temp}%
}
%    \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\rmathbr@setbreakable}
%    \begin{macrocode}
\def\rmathbr@setbreakable#1#2{%
  \begingroup
    \ifx#1\@undefined
    \else
      \edef\rmathbr@orig{rmathbr@orig@\expandafter\@gobble\string#1}
      \expandafter\ifx\csname\rmathbr@orig\endcsname\relax
        \expandafter\rmathbr@ReDeclareRobustCommand\expandafter#1\expandafter{%
\expandafter#2\expandafter{\csname\rmathbr@orig\endcsname}}
      \fi
    \fi
  \endgroup%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@nobrafter}
%    \begin{macrocode}
\def\rmathbr@nobrafter#1{%
  \begingroup
    \ifx#1\@undefined
    \else
      \edef\rmathbr@orig{rmathbr@orig@\expandafter\@gobble\string#1}
      \expandafter\ifx\csname\rmathbr@orig\endcsname\relax
        \expandafter\rmathbr@ReDeclareRobustCommand\expandafter#1\expandafter{%
\csname\rmathbr@orig\endcsname\nobr}
      \fi
    \fi
  \endgroup%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@unsetbroken}
%    \begin{macrocode}
\def\rmathbr@unsetbroken#1{
  \begingroup
    \ifx#1\@undefined
    \else
      \edef\rmathbr@orig{rmathbr@orig@\expandafter\@gobble\string#1}
      \expandafter\ifx\csname\rmathbr@orig\endcsname\relax
      \else
        \expandafter\global\expandafter\let\expandafter#1\csname\rmathbr@orig\endcsname
        \expandafter\global\expandafter\let\csname\rmathbr@orig\endcsname=\undefined
      \fi
    \fi
  \endgroup%
}
%    \end{macrocode}
% \end{macro}
%
% \subsection*{Redeclaration of math signs}
%
% \begin{macro}{\rmathbr@patch@commands}
%    \begin{macrocode}
\def\rmathbr@patch@commands{%
%    \end{macrocode}
% \end{macro}
%
% Basic math.
% \begin{macro}{=}
%    \begin{macrocode}
\rmathbr@makeactivemath{`\=}{\brokenrel}{\mathchar12349}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{<}
%    \begin{macrocode}
\rmathbr@makeactivemath{`\<}{\brokenrel}{\mathchar12604}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{>}
%    \begin{macrocode}
\rmathbr@makeactivemath{`\>}{\brokenrel}{\mathchar12606}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{+}
%    \begin{macrocode}
\rmathbr@makeactivemath{`\+}{\brokenbin}{\mathchar8235}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{-}
%    \begin{macrocode}
\ifrmathbr@kv@brokenminus
  \rmathbr@makeactivemath{`\-}{\brokenbin}{\mathchar8704}
\fi
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{*}
%    \begin{macrocode}
\rmathbr@makeactivemath{`\*}{\brokenbin}{\mathchar8707}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{(}
%    \begin{macrocode}
\rmathbr@makeactivemathopen{`\(}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{[}
%    \begin{macrocode}
\rmathbr@makeactivemathopen{`\[}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{,}
% Check for the \textsf{icomma} package and the \textsf{eulervm} package with \verb|icomma| option.
%    \begin{macrocode}
\@ifpackageloaded{icomma}{%
  \expandafter\def\expandafter\sm@rtcomma\expandafter{\sm@rtcomma\nobr}
}{
  \ifx\domathcomma\@undefined%
    \rmathbr@makeactivemathpunct{`\,}{\mathchar24891}
  \else%
    \expandafter\def\expandafter\domathcomma\expandafter{\domathcomma\nobr}
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{;}
% Check for the \textsf{program} package.
%    \begin{macrocode}
\@ifpackageloaded{program}{%
  \begingroup
    \catcode`\;\active
    \lccode`\~=`\;%
    \lowercase{\gdef~}{\ifmmode\semicolon\;\nobr\else\@semicolon\fi}
  \endgroup
}{
  \rmathbr@makeactivemathpunct{`\;}{\mathchar24635}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{:}
% Some extra code is necessary to distinguish between binary operation |:| and
% relation |:=|.
%    \begin{macrocode}
\begingroup%
  \catcode`\:\active%
  \lccode`\~=`\:%
  \lowercase{\gdef~}{\rmathbr@colontest}%
\endgroup
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@colontest}
% Check for \verb|:=|.
%    \begin{macrocode}
\def\rmathbr@colontest{\futurelet\rmathbr@let@token\rmathbr@do@colontest}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rmathbr@do@colontest}
%    \begin{macrocode}
\def\rmathbr@do@colontest{%
  \ifx=\rmathbr@let@token
    \expandafter\rmathbr@letsign
  \else
    \expandafter\rmathbr@colon
  \fi
}%
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\rmathbr@checkmathchar{`\:}
%    \end{macrocode}
%    \begin{macrocode}
\ifrmathbr@activemathchar
%    \end{macrocode}
%    \begin{macrocode}
  \PackageWarning{rmathbr}{Redeclare active math `\: symbol to default mathchar value}
%    \end{macrocode}
%    \begin{macrocode}
  \def\rmathbr@colon@std{\mathchar12346}
%    \end{macrocode}
%    \begin{macrocode}
  \ifrmathbr@kv@brokencolon
    \def\rmathbr@colon{\brokenbin{\rmathbr@colon@std}}
  \else
    \def\rmathbr@colon{\mathbin{\rmathbr@colon@std}}
  \fi
%    \end{macrocode}
%    \begin{macrocode}
  \def\rmathbr@letsign##1{\brokenrel{\rmathbr@colon@std\mathchar12349}}
%    \end{macrocode}
%    \begin{macrocode}
\else
%    \end{macrocode}
%    \begin{macrocode}
  \edef\rmathbr@colon@std{\rmathbr@mathchar{`\:}}
%    \end{macrocode}
%    \begin{macrocode}
  \ifrmathbr@kv@brokencolon
    \def\rmathbr@colon{\brokenbin{\rmathbr@colon@std}}
  \else
    \def\rmathbr@colon{\mathbin{\rmathbr@colon@std}}
  \fi
%    \end{macrocode}
%    \begin{macrocode}
  \edef\rmathbr@letsign##1{\noexpand\brokenrel{\rmathbr@colon@std\rmathbr@mathchar{`\=}}}
%    \end{macrocode}
%    \begin{macrocode}
\fi
%    \end{macrocode}
%    \begin{macrocode}
\let\rmathbr@save@colontest=\rmathbr@colontest%
%    \end{macrocode}
% Support of \textsf{unicode-math} package
%    \begin{macrocode}
\@ifpackageloaded{unicode-math}{
  \begingroup
    \def\UnicodeMathSymbol##1##2##3##4{%
      \ifnum\number##1>127\relax
        \expandafter\let\expandafter\@char\Uchar\number##1\relax
        \ifx\@char##2\relax
          \let\cmd\relax
          \ifx##3\mathrel
            \def\cmd{\brokenrel}
          \else\ifx##3\mathbin
            \def\cmd{\brokenbin}
          \else\ifx##3\mathop
            \def\cmd{\rmathbr@mathop}
          \else\ifx##3\mathpunct
            \let\cmd=\nobr
          \fi\fi\fi\fi
          \ifx\cmd\relax\else
            \edef\var@orig@name{rmathbr@orig@\expandafter\@gobble\string##2}
            \expandafter\def\expandafter\var@orig\expandafter{\csname\var@orig@name\endcsname}
            \rmathbr@checkmathchar{\number##1}
            \ifrmathbr@activemathchar
              \begingroup
                \lccode`~=\number##1
                \catcode\number##1\active
                \lowercase{\endgroup\expandafter\global\expandafter\let\var@orig~}
            \else
              \expandafter\xdef\var@orig{\rmathbr@mathchar{\number##1}}
              \global\mathcode\number##1="8000
            \fi
            \ifx\cmd\nobr
              \edef\@tempa{\expandafter\noexpand\var@orig\noexpand\nobr}
            \else
              \edef\@tempa{\expandafter\noexpand\cmd{\expandafter\noexpand\var@orig}}
            \fi
            \begingroup
              \lccode`~=\number##1
              \catcode\number##1\active
              \lowercase{\endgroup\expandafter\gdef\expandafter~\expandafter}{\@tempa}
          \fi
        \fi
      \fi
    }
    \let\par=\relax
    \catcode`\"=12
    \@@input{unicode-math-table.tex}
  \endgroup
  \ifnum\rmathbr@kv@scriptsmode>0\relax
    \rmathbr@unicodemath@primes@patch
  \fi
}{}
%    \end{macrocode}
%
% \begin{macro}{\not}
% Redeclare \verb|\not|.
%    \begin{macrocode}
\rmathbr@ReDeclareRobustCommandI{\not}{%
  \begingroup
    \edef\rmathbr@orig{rmathbr@orig@\expandafter\@gobble\string##1}
    \expandafter\let\expandafter\rmathbr@origmacro\csname\rmathbr@orig\endcsname
    \ifx\rmathbr@origmacro##1\relax
      \begingroup
        \let##1=\rmathbr@origmacro
        \brokenrel{\rmathbr@orig@not##1}
      \endgroup
    \else
      \brokenrel{\rmathbr@orig@not##1}
    \fi
  \endgroup%
}
%    \end{macrocode}
% \end{macro}
% Open brackets.
%    \begin{macrocode}
\rmathbr@ReDeclareRobustCommandI{\bigl}{\rmathbr@mathop{\mathopen\big##1}}
\rmathbr@ReDeclareRobustCommandI{\Bigl}{\rmathbr@mathop{\mathopen\Big##1}}
\rmathbr@ReDeclareRobustCommandI{\biggl}{\rmathbr@mathop{\mathopen\bigg##1}}
\rmathbr@ReDeclareRobustCommandI{\Biggl}{\rmathbr@mathop{\mathopen\Bigg##1}}
\SetOpenBracket{\lmoustache}
\SetOpenBracket{\langle}
\SetOpenBracket{\lbrace}
\SetOpenBracket{\lceil}
\SetOpenBracket{\lfloor}
\SetOpenBracket{\lgroup}
\SetOpenBracket{\lvert}
\SetOpenBracket{\lVert}
\SetOpenBracket{\ulcorner}
\SetOpenBracket{\llcorner}
\SetOpenBracket{\Lbrack}
%    \end{macrocode}
% Math operators.
%    \begin{macrocode}
\SetMathOperator{\coprod}
\SetMathOperator{\bigvee}
\SetMathOperator{\bigwedge}
\SetMathOperator{\biguplus}
\SetMathOperator{\bigcap}
\SetMathOperator{\bigcup}
\SetMathOperator{\int}
\SetMathOperator{\prod}
\SetMathOperator{\sum}
\SetMathOperator{\bigotimes}
\SetMathOperator{\bigoplus}
\SetMathOperator{\bigodot}
\SetMathOperator{\oint}
\SetMathOperator{\bigsqcup}
\SetMathOperator{\smallint}
%    \end{macrocode}
% Punctuations.
%    \begin{macrocode}
\SetPunctuation{\ldotp}
\SetPunctuation{\cdotp}
\SetPunctuation{\colon}
\SetPunctuation{\period}
%    \end{macrocode}
% Binary Operations.
%    \begin{macrocode}
\SetBreakableBin{\triangleleft}
\SetBreakableBin{\triangleright}
\SetBreakableBin{\bigtriangleup}
\SetBreakableBin{\bigtriangledown}
\SetBreakableBin{\wedge} \SetBreakableBin{\land}
\SetBreakableBin{\vee}   \SetBreakableBin{\lor}
\SetBreakableBin{\cap}
\SetBreakableBin{\cup}
\SetBreakableBin{\ddagger}
\SetBreakableBin{\dagger}
\SetBreakableBin{\sqcap}
\SetBreakableBin{\sqcup}
\SetBreakableBin{\uplus}
\SetBreakableBin{\amalg}
\SetBreakableBin{\diamond}
\SetBreakableBin{\bullet}
\SetBreakableBin{\wr}
\SetBreakableBin{\div}
\SetBreakableBin{\odot}
\SetBreakableBin{\oslash}
\SetBreakableBin{\otimes}
\SetBreakableBin{\ominus}
\SetBreakableBin{\oplus}
\SetBreakableBin{\mp}
\SetBreakableBin{\pm}
\SetBreakableBin{\circ}
\SetBreakableBin{\bigcirc}
\SetBreakableBin{\setminus}
\SetBreakableBin{\ast}
\SetBreakableBin{\star}
\SetBreakableBin{\times}
\SetBreakableBin{\cdot}
%    \end{macrocode}
%
% \begin{macro}{\rmathbr@cdott}
% \verb|\cdott| is \verb|\cdot| that is changed to \verb|\times| at break point.
%    \begin{macrocode}
\def\rmathbr@cdott{%
  $\begingroup\hyphenpenalty\rmathbr@orig@binoppenalty\discretionary%
    {\hbox{$\m@th\rmathbr@orig@times$}}%
    {\hbox{$\m@th\rmathbr@orig@times$}}%
    {\hbox{$\m@th\mkern\medmuskip\rmathbr@orig@cdot\mkern\medmuskip$}}\endgroup$
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\cdott}
%    \begin{macrocode}
\def\cdott{%
  \ifmmode
    \ifetex
      \ifinner%
        \ifnum\currentgrouptype=15\relax
          \rmathbr@cdott
        \else
          \rmathbr@orig@cdot
        \fi
      \else
        \rmathbr@orig@cdot
      \fi
    \else
      \rmathbr@cdott
    \fi
  \else
    \rmathbr@orig@cdot
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\cdot}
%    \begin{macrocode}
\ifrmathbr@kv@cdottimes
  \let\cdot\cdott
\fi
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\*}
%    \begin{macrocode}
\def\*{\mathbin{}%
  \begingroup%
    \hyphenpenalty\rmathbr@orig@binoppenalty%
    \mathchoice{%
        \discretionary{\hbox{$\m@th\displaystyle\mkern\thinmuskip\times$}}%
{\hbox{$\m@th\displaystyle\times\mkern\thinmuskip$}}{}%
      }{%
        \discretionary{\hbox{$\m@th\textstyle\mkern\thinmuskip\times$}}%
{\hbox{$\m@th\textstyle\times\mkern\thinmuskip$}}{}%
      }{%
        \discretionary{\hbox{$\m@th\scriptstyle\mkern\thinmuskip\times$}}%
{\hbox{$\m@th\scriptstyle\times\mkern\thinmuskip$}}{}%
      }{%
        \discretionary{\hbox{$\m@th\scriptscriptstyle\mkern\thinmuskip\times$}}%
{\hbox{$\m@th\scriptscriptstyle\times\mkern\thinmuskip$}}{}%
      }%
  \endgroup%
  \penalty\binoppenalty%
}
%    \end{macrocode}
% \end{macro}
% Relations.
%    \begin{macrocode}
\SetBreakableRel{\propto}
\SetBreakableRel{\sqsubseteq}
\SetBreakableRel{\sqsupseteq}
\SetBreakableRel{\parallel}
\SetBreakableRel{\mid}
\SetBreakableRel{\dashv}
\SetBreakableRel{\vdash}
\SetBreakableRel{\leq} \SetBreakableRel{\le}
\SetBreakableRel{\geq} \SetBreakableRel{\ge}
\SetBreakableRel{\succ}
\SetBreakableRel{\prec}
\SetBreakableRel{\approx}
\SetBreakableRel{\succeq}
\SetBreakableRel{\preceq}
\SetBreakableRel{\supset}
\SetBreakableRel{\subset}
\SetBreakableRel{\supseteq}
\SetBreakableRel{\subseteq}
\SetBreakableRel{\in}
\SetBreakableRel{\ni} \SetBreakableRel{\owns}
\SetBreakableRel{\gg}
\SetBreakableRel{\ll}
\SetBreakableRel{\sim}
\SetBreakableRel{\simeq}
\SetBreakableRel{\perp}
\SetBreakableRel{\equiv}
\SetBreakableRel{\asymp}
\SetBreakableRel{\smile}
\SetBreakableRel{\frown}
\SetBreakableRel{\models}
\SetBreakableRel{\cong}
\SetBreakableRel{\notin}
\SetBreakableRel{\doteq}
\SetBreakableRel{\bowtie}
\SetBreakableRel{\neq} % Works well without \SetBreakableRel
\SetBreakableRel{\ne}  % Works well without \SetBreakableRel
%    \end{macrocode}
% Arrows.
%    \begin{macrocode}
\SetBreakableRel{\nearrow}
\SetBreakableRel{\searrow}
\SetBreakableRel{\nwarrow}
\SetBreakableRel{\swarrow}
\SetBreakableRel{\Leftrightarrow}
\SetBreakableRel{\Leftarrow}
\SetBreakableRel{\Rightarrow}
\SetBreakableRel{\leftrightarrow}
\SetBreakableRel{\leftarrow}  \SetBreakableRel{\gets}
\SetBreakableRel{\rightarrow} \SetBreakableRel{\to}
\SetBreakableRel{\leftharpoonup}
\SetBreakableRel{\leftharpoondown}
\SetBreakableRel{\rightharpoonup}
\SetBreakableRel{\rightharpoondown}
\SetBreakableRel{\longleftarrow}
\SetBreakableRel{\Longleftarrow}
\SetBreakableRel{\longrightarrow}
\SetBreakableRel{\Longrightarrow}
\SetBreakableRel{\longleftrightarrow}
\SetBreakableRel{\Longleftrightarrow}
\SetBreakableRel{\mapsto}
\SetBreakableRel{\longmapsto}
\SetBreakableRel{\hookleftarrow}
\SetBreakableRel{\hookrightarrow}
\SetBreakableRel{\rightleftharpoons}
%    \end{macrocode}
% Commands from \textsf{latexsym}.
%    \begin{macrocode}
\SetBreakableBin{\lhd}
\SetBreakableBin{\unlhd}
\SetBreakableBin{\rhd}
\SetBreakableBin{\unrhd}
\SetBreakableRel{\Join}
\SetBreakableRel{\leadsto}
\SetBreakableRel{\sqsubset}
\SetBreakableRel{\sqsupset}
%    \end{macrocode}
% Support \textsf{amsfonts} package
%    \begin{macrocode}
\@ifpackageloaded{amsfonts}{
  \SetBreakableRel{\dashrightarrow} \SetBreakableRel{\dasharrow}
  \SetBreakableRel{\dashleftarrow}
  \SetBreakableRel{\vartriangleright}
  \SetBreakableRel{\vartriangleleft}
  \SetBreakableRel{\trianglerighteq}
  \SetBreakableRel{\trianglelefteq}
  \SetBreakableRel{\rightsquigarrow} \SetBreakableRel{\leadsto}
}{}
%    \end{macrocode}
% Support \textsf{amssymb} package
%    \begin{macrocode}
\@ifpackageloaded{amssymb}{
  \SetBreakableBin{\boxdot}
  \SetBreakableBin{\boxplus}
  \SetBreakableBin{\boxtimes}
  \SetBreakableBin{\centerdot}
  \SetBreakableBin{\boxminus}
  \SetBreakableBin{\veebar}
  \SetBreakableBin{\barwedge}
  \SetBreakableBin{\doublebarwedge}
  \SetBreakableBin{\Cup} \SetBreakableBin{\doublecup}
  \SetBreakableBin{\Cap} \SetBreakableBin{\doublecap}
  \SetBreakableBin{\curlywedge}
  \SetBreakableBin{\curlyvee}
  \SetBreakableBin{\leftthreetimes}
  \SetBreakableBin{\rightthreetimes}
  \SetBreakableBin{\dotplus}
  \SetBreakableBin{\intercal}
  \SetBreakableBin{\circledcirc}
  \SetBreakableBin{\circledast}
  \SetBreakableBin{\circleddash}
  \SetBreakableBin{\divideontimes}
  \SetBreakableBin{\lessdot}
  \SetBreakableBin{\gtrdot}
  \SetBreakableBin{\ltimes}
  \SetBreakableBin{\rtimes}
  \SetBreakableBin{\smallsetminus}
  \SetBreakableRel{\circlearrowright}
  \SetBreakableRel{\circlearrowleft}
  \SetBreakableRel{\leftrightharpoons}
  \SetBreakableRel{\Vdash}
  \SetBreakableRel{\Vvdash}
  \SetBreakableRel{\vDash}
  \SetBreakableRel{\twoheadrightarrow}
  \SetBreakableRel{\twoheadleftarrow}
  \SetBreakableRel{\leftleftarrows}
  \SetBreakableRel{\rightrightarrows}
  \SetBreakableRel{\upuparrows}
  \SetBreakableRel{\downdownarrows}
  \SetBreakableRel{\upharpoonright} \SetBreakableRel{\restriction}
  \SetBreakableRel{\downharpoonright}
  \SetBreakableRel{\upharpoonleft}
  \SetBreakableRel{\downharpoonleft}
  \SetBreakableRel{\rightarrowtail}
  \SetBreakableRel{\leftarrowtail}
  \SetBreakableRel{\leftrightarrows}
  \SetBreakableRel{\rightleftarrows}
  \SetBreakableRel{\Lsh}
  \SetBreakableRel{\Rsh}
  \SetBreakableRel{\rightsquigarrow}
  \SetBreakableRel{\leftrightsquigarrow}
  \SetBreakableRel{\looparrowleft}
  \SetBreakableRel{\looparrowright}
  \SetBreakableRel{\circeq}
  \SetBreakableRel{\succsim}
  \SetBreakableRel{\gtrsim}
  \SetBreakableRel{\gtrapprox}
  \SetBreakableRel{\multimap}
  \SetBreakableRel{\therefore}
  \SetBreakableRel{\because}
  \SetBreakableRel{\doteqdot} \SetBreakableRel{\Doteq}
  \SetBreakableRel{\triangleq}
  \SetBreakableRel{\precsim}
  \SetBreakableRel{\lesssim}
  \SetBreakableRel{\lessapprox}
  \SetBreakableRel{\eqslantless}
  \SetBreakableRel{\eqslantgtr}
  \SetBreakableRel{\curlyeqprec}
  \SetBreakableRel{\curlyeqsucc}
  \SetBreakableRel{\preccurlyeq}
  \SetBreakableRel{\leqq}
  \SetBreakableRel{\leqslant}
  \SetBreakableRel{\lessgtr}
  \SetBreakableRel{\risingdotseq}
  \SetBreakableRel{\fallingdotseq}
  \SetBreakableRel{\succcurlyeq}
  \SetBreakableRel{\geqq}
  \SetBreakableRel{\geqslant}
  \SetBreakableRel{\gtrless}
  \SetBreakableRel{\vartriangleright}
  \SetBreakableRel{\vartriangleleft}
  \SetBreakableRel{\trianglerighteq}
  \SetBreakableRel{\trianglelefteq}
  \SetBreakableRel{\between}
  \SetBreakableRel{\blacktriangleright}
  \SetBreakableRel{\blacktriangleleft}
  \SetBreakableRel{\vartriangle}
  \SetBreakableRel{\eqcirc}
  \SetBreakableRel{\lesseqgtr}
  \SetBreakableRel{\gtreqless}
  \SetBreakableRel{\lesseqqgtr}
  \SetBreakableRel{\gtreqqless}
  \SetBreakableRel{\Rrightarrow}
  \SetBreakableRel{\Lleftarrow}
  \SetBreakableRel{\varpropto}
  \SetBreakableRel{\smallsmile}
  \SetBreakableRel{\smallfrown}
  \SetBreakableRel{\Subset}
  \SetBreakableRel{\Supset}
  \SetBreakableRel{\subseteqq}
  \SetBreakableRel{\supseteqq}
  \SetBreakableRel{\bumpeq}
  \SetBreakableRel{\Bumpeq}
  \SetBreakableRel{\lll} \SetBreakableRel{\llless}
  \SetBreakableRel{\ggg} \SetBreakableRel{\gggtr}
  \SetBreakableRel{\pitchfork}
  \SetBreakableRel{\backsim}
  \SetBreakableRel{\backsimeq}
  \SetBreakableRel{\lvertneqq}
  \SetBreakableRel{\gvertneqq}
  \SetBreakableRel{\nleq}
  \SetBreakableRel{\ngeq}
  \SetBreakableRel{\nless}
  \SetBreakableRel{\ngtr}
  \SetBreakableRel{\nprec}
  \SetBreakableRel{\nsucc}
  \SetBreakableRel{\lneqq}
  \SetBreakableRel{\gneqq}
  \SetBreakableRel{\nleqslant}
  \SetBreakableRel{\ngeqslant}
  \SetBreakableRel{\lneq}
  \SetBreakableRel{\gneq}
  \SetBreakableRel{\npreceq}
  \SetBreakableRel{\nsucceq}
  \SetBreakableRel{\precnsim}
  \SetBreakableRel{\succnsim}
  \SetBreakableRel{\lnsim}
  \SetBreakableRel{\gnsim}
  \SetBreakableRel{\nleqq}
  \SetBreakableRel{\ngeqq}
  \SetBreakableRel{\precneqq}
  \SetBreakableRel{\succneqq}
  \SetBreakableRel{\precnapprox}
  \SetBreakableRel{\succnapprox}
  \SetBreakableRel{\lnapprox}
  \SetBreakableRel{\gnapprox}
  \SetBreakableRel{\nsim}
  \SetBreakableRel{\ncong}
  \SetBreakableRel{\varsubsetneq}
  \SetBreakableRel{\varsupsetneq}
  \SetBreakableRel{\nsubseteqq}
  \SetBreakableRel{\nsupseteqq}
  \SetBreakableRel{\subsetneqq}
  \SetBreakableRel{\supsetneqq}
  \SetBreakableRel{\varsubsetneqq}
  \SetBreakableRel{\varsupsetneqq}
  \SetBreakableRel{\subsetneq}
  \SetBreakableRel{\supsetneq}
  \SetBreakableRel{\nsubseteq}
  \SetBreakableRel{\nsupseteq}
  \SetBreakableRel{\nparallel}
  \SetBreakableRel{\nmid}
  \SetBreakableRel{\nshortmid}
  \SetBreakableRel{\nshortparallel}
  \SetBreakableRel{\nvdash}
  \SetBreakableRel{\nVdash}
  \SetBreakableRel{\nvDash}
  \SetBreakableRel{\nVDash}
  \SetBreakableRel{\ntrianglerighteq}
  \SetBreakableRel{\ntrianglelefteq}
  \SetBreakableRel{\ntriangleleft}
  \SetBreakableRel{\ntriangleright}
  \SetBreakableRel{\nleftarrow}
  \SetBreakableRel{\nrightarrow}
  \SetBreakableRel{\nLeftarrow}
  \SetBreakableRel{\nRightarrow}
  \SetBreakableRel{\nLeftrightarrow}
  \SetBreakableRel{\nleftrightarrow}
  \SetBreakableRel{\eqsim}
  \SetBreakableRel{\shortmid}
  \SetBreakableRel{\shortparallel}
  \SetBreakableRel{\thicksim}
  \SetBreakableRel{\thickapprox}
  \SetBreakableRel{\approxeq}
  \SetBreakableRel{\succapprox}
  \SetBreakableRel{\precapprox}
  \SetBreakableRel{\curvearrowleft}
  \SetBreakableRel{\curvearrowright}
  \SetBreakableRel{\backepsilon}
}{}
%    \end{macrocode}
% Support \textsf{amstex} package
%    \begin{macrocode}
\@ifpackageloaded{amstex}{
  \SetBreakableRel{\vartriangleright} \SetBreakableRel{\rhd}
  \SetBreakableRel{\vartriangleleft}  \SetBreakableRel{\lhd}
  \SetBreakableRel{\trianglerighteq}  \SetBreakableRel{\unrhd}
  \SetBreakableRel{\trianglelefteq}   \SetBreakableRel{\unlhd}
  \SetBreakableRel{\rightsquigarrow}  \SetBreakableRel{\leadsto}
}{}
%    \end{macrocode}
% Support \textsf{boisik} package
%    \begin{macrocode}
\@ifpackageloaded{boisik}{
  \SetMathOperator{\intup}
  \SetOpenBracket{\binampersand}
  \SetBreakableRel{\upharpoonright}
  \SetBreakableRel{\downharpoonright}
  \SetBreakableRel{\upharpoonleft}
  \SetBreakableRel{\downharpoonleft}
  \SetBreakableRel{\leftrightarrows}
  \SetBreakableRel{\rightleftarrows}
  \SetBreakableRel{\leftrightharpoons}
  \SetBreakableRel{\leftleftarrows}
  \SetBreakableRel{\rightrightarrows}
  \SetBreakableRel{\upuparrows}
  \SetBreakableRel{\downdownarrows}
  \SetBreakableRel{\twoheadrightarrow}
  \SetBreakableRel{\twoheadleftarrow}
  \SetBreakableRel{\rightarrowtail}
  \SetBreakableRel{\leftarrowtail}
  \SetBreakableRel{\rightsquigarrow}
  \SetBreakableRel{\leftrightsquigarrow}
  \SetBreakableRel{\Lsh}
  \SetBreakableRel{\Rsh}
  \SetBreakableRel{\looparrowleft}
  \SetBreakableRel{\looparrowright}
  \SetBreakableRel{\circlearrowright}
  \SetBreakableRel{\circlearrowleft}
  \SetBreakableRel{\curvearrowleft}
  \SetBreakableRel{\curvearrowright}
  \SetBreakableRel{\nleftarrow}
  \SetBreakableRel{\nrightarrow}
  \SetBreakableRel{\nleftrightarrow}
  \SetBreakableRel{\nLeftarrow}
  \SetBreakableRel{\nRightarrow}
  \SetBreakableRel{\nLeftrightarrow}
  \SetBreakableRel{\Lleftarrow}
  \SetBreakableRel{\Rrightarrow}
  \SetBreakableRel{\nLeftrightarroW}
  % \SetBreakableRel{\lhook}
  % \SetBreakableRel{\rhook}
  \SetBreakableRel{\multimap}
  \SetBreakableRel{\multimapdot}
  \SetBreakableRel{\therefore}
  \SetBreakableRel{\because}
  \SetBreakableRel{\between}
  \SetBreakableRel{\Vdash}
  \SetBreakableRel{\Vvdash}
  \SetBreakableRel{\VDash}
  \SetBreakableRel{\vDash}
  \SetBreakableRel{\smallsmile}
  \SetBreakableRel{\smallfrown}
  \SetBreakableRel{\shortmid}
  \SetBreakableRel{\shortparallel}
  \SetBreakableRel{\thickapprox}
  \SetBreakableBin{\divideontimes}
  \SetBreakableBin{\lessdot}
  \SetBreakableBin{\gtrdot}
  \SetBreakableRel{\bumpeq}
  \SetBreakableRel{\Bumpeq}
  \SetBreakableRel{\leqslant}
  \SetBreakableRel{\geqslant}
  \SetBreakableRel{\eqslantless}
  \SetBreakableRel{\eqslantgtr}
  \SetBreakableRel{\curlyeqprec}
  \SetBreakableRel{\curlyeqsucc}
  \SetBreakableRel{\preccurlyeq}
  \SetBreakableRel{\succcurlyeq}
  \SetBreakableRel{\thicksim}
  \SetBreakableRel{\backsim}
  \SetBreakableRel{\eqsim}
  \SetBreakableRel{\backsimeq}
  \SetBreakableBin{\ltimes}
  \SetBreakableBin{\rtimes}
  \SetBreakableRel{\lll} \SetBreakableRel{\llless}
  \SetBreakableRel{\ggg} \SetBreakableRel{\gggtr}
  \SetBreakableRel{\triangleq}
  \SetBreakableRel{\circeq}
  \SetBreakableRel{\eqcirc}
  \SetBreakableRel{\doteqdot} \SetBreakableRel{\Doteq}
  \SetBreakableRel{\risingdotseq}
  \SetBreakableRel{\fallingdotseq}
  \SetBreakableRel{\varpropto}
  \SetBreakableRel{\vartriangleright}
  \SetBreakableRel{\vartriangleleft}
  \SetBreakableRel{\trianglerighteq}
  \SetBreakableRel{\trianglelefteq}
  \SetBreakableRel{\blacktriangleright}
  \SetBreakableRel{\blacktriangleleft}
  \SetBreakableRel{\vartriangle}
  \SetBreakableBin{\centerdot}
  \SetBreakableBin{\boxplus}
  \SetBreakableBin{\boxminus}
  \SetBreakableBin{\boxtimes}
  \SetBreakableBin{\boxdot}
  \SetBreakableBin{\circledcirc}
  \SetBreakableBin{\circledast}
  \SetBreakableBin{\circleddash}
  \SetBreakableBin{\intercal}
  \SetBreakableRel{\prurel}
  \SetBreakableRel{\scurel}
  \SetBreakableRel{\disin}
  \SetBreakableRel{\nisd}
  \SetBreakableRel{\fatslash}
  \SetBreakableRel{\fatbslash}
  \SetBreakableRel{\nequiv}
  \SetBreakableRel{\bagmember}
  \SetBreakableRel{\lvertneqq}
  \SetBreakableRel{\gvertneqq}
  \SetBreakableRel{\nleq}
  \SetBreakableRel{\ngeq}
  \SetBreakableRel{\nless}
  \SetBreakableRel{\ngtr}
  \SetBreakableRel{\nprec}
  \SetBreakableRel{\nsucc}
  \SetBreakableRel{\lneqq}
  \SetBreakableRel{\gneqq}
  \SetBreakableRel{\nleqslant}
  \SetBreakableRel{\ngeqslant}
  \SetBreakableRel{\lneq}
  \SetBreakableRel{\gneq}
  \SetBreakableRel{\npreceq}
  \SetBreakableRel{\nsucceq}
  \SetBreakableRel{\nleqq}
  \SetBreakableRel{\ngeqq}
  \SetBreakableRel{\lnsim}
  \SetBreakableRel{\gnsim}
  \SetBreakableRel{\precnsim}
  \SetBreakableRel{\succnsim}
  \SetBreakableRel{\precneqq}
  \SetBreakableRel{\succneqq}
  \SetBreakableRel{\nsim}
  \SetBreakableRel{\ncong}
  \SetBreakableRel{\lnapprox}
  \SetBreakableRel{\gnapprox}
  \SetBreakableRel{\precnapprox}
  \SetBreakableRel{\succnapprox}
  \SetBreakableRel{\nsubset}
  \SetBreakableRel{\nsupset}
  \SetBreakableRel{\varsubsetneq}
  \SetBreakableRel{\varsupsetneq}
  \SetBreakableRel{\nsubseteqq}
  \SetBreakableRel{\nsupseteqq}
  \SetBreakableRel{\subsetneqq}
  \SetBreakableRel{\supsetneqq}
  \SetBreakableRel{\varsubsetneqq}
  \SetBreakableRel{\varsupsetneqq}
  \SetBreakableRel{\subsetneq}
  \SetBreakableRel{\supsetneq}
  \SetBreakableRel{\nsubseteq}
  \SetBreakableRel{\nsupseteq}
  \SetBreakableRel{\nparallel}
  \SetBreakableRel{\nmid}
  \SetBreakableRel{\nshortmid}
  \SetBreakableRel{\nshortparallel}
  \SetBreakableRel{\nvdash}
  \SetBreakableRel{\nVdash}
  \SetBreakableRel{\nvDash}
  \SetBreakableRel{\nVDash}
  \SetBreakableRel{\ntrianglerighteq}
  \SetBreakableRel{\ntrianglelefteq}
  \SetBreakableRel{\ntriangleleft}
  \SetBreakableRel{\ntriangleright}
  \SetBreakableRel{\precapprox}
  \SetBreakableRel{\succapprox}
  \SetBreakableRel{\precsim}
  \SetBreakableRel{\succsim}
  \SetBreakableRel{\lesssim}
  \SetBreakableRel{\gtrsim}
  \SetBreakableRel{\lessapprox}
  \SetBreakableRel{\gtrapprox}
  \SetBreakableRel{\leqq}
  \SetBreakableRel{\geqq}
  \SetBreakableRel{\lessgtr}
  \SetBreakableRel{\gtrless}
  \SetBreakableRel{\lesseqgtr}
  \SetBreakableRel{\gtreqless}
  \SetBreakableRel{\lesseqqgtr}
  \SetBreakableRel{\gtreqqless}
  \SetBreakableRel{\Subset}
  \SetBreakableRel{\Supset}
  \SetBreakableBin{\Cup} \SetBreakableBin{\doublecup}
  \SetBreakableBin{\Cap} \SetBreakableBin{\doublecap}
  \SetBreakableRel{\subseteqq}
  \SetBreakableRel{\supseteqq}
  \SetBreakableBin{\curlywedge}
  \SetBreakableBin{\curlyvee}
  \SetBreakableBin{\veebar}
  \SetBreakableBin{\barwedge}
  \SetBreakableBin{\doublebarwedge}
  \SetBreakableBin{\leftthreetimes}
  \SetBreakableBin{\rightthreetimes}
  \SetBreakableBin{\smallsetminus}
  \SetBreakableRel{\approxeq}
  \SetBreakableBin{\dotplus}
  \SetBreakableRel{\pitchfork}
  \SetBreakableBin{\oblong}
  \SetBreakableBin{\talloblong}
  \SetBreakableBin{\sslash}
  \SetBreakableBin{\bbslash}
  \SetBreakableRel{\hash}
  \SetBreakableRel{\varhash}
  \SetBreakableBin{\convolution}
  \SetBreakableBin{\coAsterisk}
  \SetBreakableRel{\veeeq}
  \SetBreakableRel{\corresponds}
  \SetBreakableRel{\arceq}
  \SetBreakableRel{\CircledEq}
  \SetBreakableRel{\eqbumped}
  \SetBreakableRel{\dotminus}
  \SetBreakableRel{\kernelcontraction}
  \SetBreakableRel{\dotsim}
  \SetBreakableRel{\simrdots}
  \SetBreakableBin{\circplus}
  \SetBreakableBin{\dottimes}
  \SetBreakableBin{\vartimes}
  \SetBreakableBin{\merge}
  \SetBreakableBin{\veeonvee}
  \SetBreakableBin{\obslash}
  \SetBreakableBin{\otop}
  \SetBreakableBin{\obot}
  \SetBreakableBin{\oleft}
  \SetBreakableBin{\oright}
  \SetBreakableBin{\obar}
  \SetBreakableBin{\otriangle}
  \SetBreakableBin{\olessthan}
  \SetBreakableBin{\ogreaterthan}
  \SetBreakableBin{\ovee}
  \SetBreakableBin{\owedge}
  \SetBreakableBin{\boxbslash}
  \SetBreakableBin{\boxtop}
  \SetBreakableBin{\boxbot}
  \SetBreakableBin{\boxleft}
  \SetBreakableBin{\boxright}
  \SetBreakableBin{\boxbar}
  \SetBreakableBin{\boxslash}
  \SetBreakableBin{\boxtriangle}
  \SetBreakableBin{\boxast}
  \SetBreakableBin{\boxcircle}
  \SetBreakableBin{\boxdivision}
  \SetBreakableBin{\boxbox}
  \SetBreakableBin{\diamondop}
  \SetBreakableBin{\diamondminus}
  \SetBreakableBin{\diamondbar}
  \SetBreakableBin{\diamondtimes}
  \SetBreakableBin{\diamondplus}
  \SetBreakableBin{\diamondtriangle}
  \SetBreakableBin{\diamondcircle}
  \SetBreakableBin{\cupleftarrow}
  \SetBreakableBin{\varcup}
  \SetBreakableBin{\varcap}
  \SetBreakableBin{\varsqcup}
  \SetBreakableBin{\varsqcap}
  \SetBreakableRel{\sqSubset}
  \SetBreakableRel{\sqSupset}
  \SetBreakableRel{\inplus}
  \SetBreakableRel{\niplus}
  \SetBreakableRel{\varisins}
  \SetBreakableRel{\varnis}
  \SetBreakableRel{\subsetplus}
  \SetBreakableRel{\supsetplus}
  \SetBreakableRel{\subsetpluseq}
  \SetBreakableRel{\supsetpluseq}
  \SetBreakableBin{\nplus}
  \SetBreakableBin{\squplus}
  \SetBreakableRel{\multimapboth}
  \SetBreakableRel{\multimapdotboth}
  \SetBreakableRel{\multimapdotbothB}
  \SetBreakableRel{\multimapdotbothA}
  \SetBreakableRel{\multimapinv}
  \SetBreakableRel{\multimapdotinv}
  \SetBreakableRel{\multimapbothvert}
  \SetBreakableRel{\multimapdotbothvert}
  \SetBreakableRel{\multimapdotbothBvert}
  \SetBreakableRel{\multimapdotbothAvert}
  \SetBreakableRel{\dfourier}
  \SetBreakableRel{\Dfourier}
  \SetBreakableRel{\ztransf}
  \SetBreakableRel{\Ztransf}
  \SetBreakableRel{\Lt}
  \SetBreakableRel{\Gt}
  \SetBreakableBin{\leftslice}
  \SetBreakableBin{\rightslice}
  \SetBreakableRel{\trianglelefteqslant}
  \SetBreakableRel{\trianglerighteqslant}
  \SetBreakableBin{\Ydown}
  \SetBreakableBin{\Yup}
  \SetBreakableBin{\Yleft}
  \SetBreakableBin{\Yright}
  \SetBreakableRel{\dashVv}
  \SetBreakableRel{\DashV}
  \SetBreakableRel{\DashV}
  \SetBreakableRel{\dashV}
  \SetBreakableBin{\lbag}
  \SetBreakableBin{\rbag}
  \SetBreakableRel{\Perp}
  \SetBreakableBin{\moo}
  \SetBreakableBin{\baro}
  \SetBreakableBin{\pluscirc}
  \SetBreakableBin{\minuso}
  \SetBreakableRel{\llcurly}
  \SetBreakableRel{\ggcurly}
  \SetBreakableRel{\strictfi}
  \SetBreakableRel{\strictif}
  \SetBreakableRel{\ac}
  \SetBreakableBin{\varintercal}
  \SetBreakableRel{\equalparallel}
  \SetBreakableBin{\plustrif}
  \SetBreakableBin{\smashtimes}
  \SetBreakableRel{\ltcir}
  \SetBreakableRel{\gtcir}
  \SetBreakableRel{\glj}
  \SetBreakableBin{\Vee}
  \SetBreakableBin{\Wedge}
  \SetBreakableBin{\fatsemi}
  \SetBreakableRel{\forkv}
  \SetBreakableRel{\topfork}
  \SetBreakableRel{\twoheaduparrow}
  \SetBreakableRel{\twoheaddownarrow}
  \SetBreakableRel{\mapsfrom}
  \SetBreakableRel{\mapsup}
  \SetBreakableRel{\mapsdown}
  \SetBreakableRel{\nVleftarrow}
  \SetBreakableRel{\nVrightarrow}
  \SetBreakableRel{\rightarrowcircle}
  \SetBreakableRel{\nwarrowcorner}
  \SetBreakableRel{\nearrowcorner}
  \SetBreakableRel{\barovernorthwestarrow}
  \SetBreakableRel{\carriagereturn}
  \SetBreakableRel{\linefeed}
  \SetBreakableRel{\leftzigzagarrow}
  \SetBreakableRel{\Nwarrow}
  \SetBreakableRel{\Nearrow}
  \SetBreakableRel{\Swarrow}
  \SetBreakableRel{\Searrow}
  \SetBreakableRel{\nHuparrow}
  \SetBreakableRel{\nHdownarrow}
  \SetBreakableRel{\updownarrowbar}
  \SetBreakableRel{\barleftarrow}
  \SetBreakableRel{\rightarrowbar}
  \SetBreakableRel{\leftsquigarrow}
  \SetBreakableRel{\rightsquigarrow}
  \SetBreakableRel{\leftrightsquigarrow}
  \SetBreakableRel{\downzigzagarrow}
  \SetBreakableRel{\rightthreearrows}
  \SetBreakableRel{\barleftarrowrightarrowbar}
  \SetBreakableRel{\leftdasharrow}
  \SetBreakableRel{\rightdasharrow}
  \SetBreakableRel{\updasharrow}
  \SetBreakableRel{\downdasharrow}
  \SetBreakableRel{\upwhitearrow}
  \SetBreakableRel{\downwhitearrow}
  \SetBreakableRel{\whitearrowupfrombar}
  \SetBreakableRel{\whitearrowuppedestal}
  \SetBreakableRel{\whitearrowuppedestalhbar}
  \SetBreakableRel{\whitearrowuppedestalvbar}
  \SetBreakableRel{\twoheadwhiteuparrow}
  \SetBreakableRel{\twoheadwhiteuparrowpedestal}
  \SetBreakableRel{\updownwhitearrow}
  \SetBreakableRel{\leftblackarrow}
  \SetBreakableRel{\rightblackarrow}
  \SetBreakableRel{\upblackarrow}
  \SetBreakableRel{\downblackarrow}
  \SetBreakableRel{\leftrightblackarrow}
  \SetBreakableRel{\updownblackarrow}
  \SetBreakableRel{\curlyveeuparrow}
  \SetBreakableRel{\curlyveedownarrow}
  \SetBreakableRel{\curlywedgeuparrow}
  \SetBreakableRel{\curlywedgedownarrow}
  \SetBreakableRel{\Mapsfrom}
  \SetBreakableRel{\Mapsto}
  \SetBreakableRel{\leftwhitearrow}
  \SetBreakableRel{\rightwhitearrow}
  \SetBreakableRel{\leftwhiteroundarrow}
  \SetBreakableRel{\rightwhiteroundarrow}
  \SetBreakableRel{\righttoleftarrow}
  \SetBreakableRel{\lefttorightarrow}
  \SetBreakableRel{\looparrowdownleft}
  \SetBreakableRel{\looparrowdownright}
  \SetBreakableRel{\uptodownarrow}
  \SetBreakableRel{\downtouparrow}
  \SetBreakableRel{\nnearrow}
  \SetBreakableRel{\ssearrow}
  \SetBreakableRel{\nnwarrow}
  \SetBreakableRel{\sswarrow}
  \SetBreakableRel{\curvearrowleft}
  \SetBreakableRel{\curvearrowright}
  \SetBreakableRel{\curvearrowleftright}
  \SetBreakableRel{\curvearrowbotleft}
  \SetBreakableRel{\curvearrowbotright}
  \SetBreakableRel{\curvearrowbotleftright}
  \SetBreakableRel{\leftrightarroweq}
  \SetBreakableRel{\eqleftrightarrow}
  \SetBreakableRel{\dlsh}
  \SetBreakableRel{\drsh}
  \SetBreakableRel{\leftarrowTriangle}
  \SetBreakableRel{\rightarrowTriangle}
  \SetBreakableRel{\leftrightarrowTriangle}
  \SetBreakableRel{\leftarrowtriangle}
  \SetBreakableRel{\rightarrowtriangle}
  \SetBreakableRel{\leftrightarrowtriangle}
}{}
%    \end{macrocode}
% Support \textsf{euler} package
%    \begin{macrocode}
\@ifpackageloaded{euler}{% euler
  \SetBreakableRel{\uparrow}
  \SetBreakableRel{\downarrow}
  \SetBreakableRel{\updownarrow}
  \SetBreakableRel{\Uparrow}
  \SetBreakableRel{\Downarrow}
  \SetBreakableRel{\Updownarrow}
  % \SetBreakableRel{\lhook}
  % \SetBreakableRel{\rhook}
}{}
%    \end{macrocode}
% Support \textsf{fourier} package
%    \begin{macrocode}
\@ifpackageloaded{fourier}{
  \SetMathOperator{\iint}
  \SetMathOperator{\iiint}
  \SetMathOperator{\oiint}
  \SetMathOperator{\oiiint}
  \SetMathOperator{\slashint}
  \SetOpenBracket{\llbracket}
  \SetBreakableRel{\leqslant}
  \SetBreakableRel{\geqslant}
  \SetBreakableRel{\parallelslant}
  \SetBreakableRel{\vDash}
  \SetBreakableRel{\blacktriangleleft}
  \SetBreakableRel{\blacktriangleright}
  \SetBreakableRel{\nleqslant}
  \SetBreakableRel{\ngeqslant}
  \SetBreakableRel{\nparallel}
  \SetBreakableRel{\nparallelslant}
  \SetBreakableRel{\nvDash}
  \SetBreakableBin{\intercal}
  \SetBreakableRel{\varsubsetneq}
  \SetBreakableRel{\notowns}
  \SetBreakableBin{\smallsetminus}
  \SetBreakableRel{\subsetneqq}
  \SetBreakableRel{\rightrightarrows}
  \SetBreakableRel{\leftleftarrows}
  \SetBreakableRel{\curvearrowleft}
  \SetBreakableRel{\curvearrowright}
  \SetBreakableRel{\Downarrow}
}{}
%    \end{macrocode}
%
% Support Lucida font packages (\textsf{lucbmath}, \textsf{lucidabr}, \textsf{lucmin},
% \textsf{lucmtime}, \textsf{luctime})
%    \begin{macrocode}
\ifnum\@ifpackageloaded{lucbmath}{1}{%
\@ifpackageloaded{lucidabr}{1}{%
\@ifpackageloaded{lucmin}{1}{%
\@ifpackageloaded{lucmtime}{1}{%
\@ifpackageloaded{luctime}{1}{0}}}}}=1\relax%
  \SetMathOperator{\surfint}
  \SetMathOperator{\midint}
  \SetMathOperator{\midoint}
  \SetMathOperator{\midsurfint}
  \SetMathOperator{\largeint}
  \SetBreakableRel{\leadsfrom}
  \SetBreakableRel{\defineequal}
  \SetBreakableRel{\notequiv}
  \SetBreakableRel{\notapprox}
  \SetBreakableRel{\notasymp}
  \SetBreakableRel{\notsubset}
  \SetBreakableRel{\notsupset}
  \SetBreakableRel{\notsim}
  \SetBreakableRel{\notsubseteq}
  \SetBreakableRel{\notsupseteq}
  \SetBreakableRel{\notsimeq}
  \SetBreakableRel{\notsqsubseteq}
  \SetBreakableRel{\notsqsupseteq}
  \SetBreakableRel{\notcong}
  \SetBreakableRel{\notni}
  \SetBreakableBin{\boxdot}
  \SetBreakableBin{\boxplus}
  \SetBreakableBin{\boxtimes}
  \SetBreakableBin{\centerdot}
  \SetBreakableRel{\circlearrowright}
  \SetBreakableRel{\circlearrowleft}
  \SetBreakableRel{\leftrightharpoons}
  \SetBreakableBin{\boxminus}
  \SetBreakableRel{\Vdash}
  \SetBreakableRel{\Vvdash}
  \SetBreakableRel{\vDash}
  \SetBreakableRel{\twoheadrightarrow}
  \SetBreakableRel{\twoheadleftarrow}
  \SetBreakableRel{\leftleftarrows}
  \SetBreakableRel{\rightrightarrows}
  \SetBreakableRel{\upuparrows}
  \SetBreakableRel{\downdownarrows}
  \SetBreakableRel{\upharpoonright}
  \SetBreakableRel{\downharpoonright}
  \SetBreakableRel{\upharpoonleft}
  \SetBreakableRel{\downharpoonleft}
  \SetBreakableRel{\rightarrowtail}
  \SetBreakableRel{\leftarrowtail}
  \SetBreakableRel{\leftrightarrows}
  \SetBreakableRel{\rightleftarrows}
  \SetBreakableRel{\Lsh}
  \SetBreakableRel{\Rsh}
  \SetBreakableRel{\rightsquigarrow}
  \SetBreakableRel{\leftsquigarrow}
  \SetBreakableRel{\leftrightsquigarrow}
  \SetBreakableRel{\looparrowleft}
  \SetBreakableRel{\looparrowright}
  \SetBreakableRel{\circeq}
  \SetBreakableRel{\succsim}
  \SetBreakableRel{\gtrsim}
  \SetBreakableRel{\gtrapprox}
  \SetBreakableRel{\multimap}
  \SetBreakableRel{\image}
  \SetBreakableRel{\original}
  \SetBreakableRel{\therefore}
  \SetBreakableRel{\because}
  \SetBreakableRel{\doteqdot}
  \SetBreakableRel{\triangleq}
  \SetBreakableRel{\precsim}
  \SetBreakableRel{\lesssim}
  \SetBreakableRel{\lessapprox}
  \SetBreakableRel{\eqslantless}
  \SetBreakableRel{\eqslantgtr}
  \SetBreakableRel{\curlyeqprec}
  \SetBreakableRel{\curlyeqsucc}
  \SetBreakableRel{\preccurlyeq}
  \SetBreakableRel{\leqq}
  \SetBreakableRel{\leqslant}
  \SetBreakableRel{\lessgtr}
  \SetBreakableRel{\risingdotseq}
  \SetBreakableRel{\fallingdotseq}
  \SetBreakableRel{\succcurlyeq}
  \SetBreakableRel{\geqq}
  \SetBreakableRel{\geqslant}
  \SetBreakableRel{\gtrless}
  \SetBreakableRel{\vartriangleright}
  \SetBreakableRel{\vartriangleleft}
  \SetBreakableRel{\trianglerighteq}
  \SetBreakableRel{\trianglelefteq}
  \SetBreakableRel{\between}
  \SetBreakableRel{\blacktriangleright}
  \SetBreakableRel{\blacktriangleleft}
  \SetBreakableRel{\vartriangle}
  \SetBreakableRel{\eqcirc}
  \SetBreakableRel{\lesseqgtr}
  \SetBreakableRel{\gtreqless}
  \SetBreakableRel{\lesseqqgtr}
  \SetBreakableRel{\gtreqqless}
  \SetBreakableRel{\Rrightarrow}
  \SetBreakableRel{\Lleftarrow}
  \SetBreakableBin{\veebar}
  \SetBreakableBin{\barwedge}
  \SetBreakableRel{\varpropto}
  \SetBreakableRel{\smallsmile}
  \SetBreakableRel{\smallfrown}
  \SetBreakableRel{\Subset}
  \SetBreakableRel{\Supset}
  \SetBreakableBin{\Cup}
  \SetBreakableBin{\Cap}
  \SetBreakableBin{\curlywedge}
  \SetBreakableBin{\curlyvee}
  \SetBreakableBin{\leftthreetimes}
  \SetBreakableBin{\rightthreetimes}
  \SetBreakableRel{\subseteqq}
  \SetBreakableRel{\supseteqq}
  \SetBreakableRel{\bumpeq}
  \SetBreakableRel{\Bumpeq}
  \SetBreakableRel{\lll}
  \SetBreakableRel{\ggg}
  \SetBreakableRel{\pitchfork}
  \SetBreakableBin{\dotplus}
  \SetBreakableRel{\backsim}
  \SetBreakableRel{\backsimeq}
  \SetBreakableBin{\intercal}
  \SetBreakableBin{\circledcirc}
  \SetBreakableBin{\circledast}
  \SetBreakableBin{\circleddash}
  \SetBreakableRel{\lvertneqq}
  \SetBreakableRel{\gvertneqq}
  \SetBreakableRel{\nleq}
  \SetBreakableRel{\ngeq}
  \SetBreakableRel{\nless}
  \SetBreakableRel{\ngtr}
  \SetBreakableRel{\nprec}
  \SetBreakableRel{\nsucc}
  \SetBreakableRel{\lneqq}
  \SetBreakableRel{\gneqq}
  \SetBreakableRel{\nleqslant}
  \SetBreakableRel{\ngeqslant}
  \SetBreakableRel{\lneq}
  \SetBreakableRel{\gneq}
  \SetBreakableRel{\npreceq}
  \SetBreakableRel{\nsucceq}
  \SetBreakableRel{\precnsim}
  \SetBreakableRel{\succnsim}
  \SetBreakableRel{\lnsim}
  \SetBreakableRel{\gnsim}
  \SetBreakableRel{\nleqq}
  \SetBreakableRel{\ngeqq}
  \SetBreakableRel{\precneqq}
  \SetBreakableRel{\succneqq}
  \SetBreakableRel{\precnapprox}
  \SetBreakableRel{\succnapprox}
  \SetBreakableRel{\lnapprox}
  \SetBreakableRel{\gnapprox}
  \SetBreakableRel{\nsim}
  \SetBreakableRel{\ncong}
  \SetBreakableRel{\diagup}
  \SetBreakableRel{\diagdown}
  \SetBreakableRel{\varsubsetneq}
  \SetBreakableRel{\varsupsetneq}
  \SetBreakableRel{\nsubseteqq}
  \SetBreakableRel{\nsupseteqq}
  \SetBreakableRel{\subsetneqq}
  \SetBreakableRel{\supsetneqq}
  \SetBreakableRel{\varsubsetneqq}
  \SetBreakableRel{\varsupsetneqq}
  \SetBreakableRel{\subsetneq}
  \SetBreakableRel{\supsetneq}
  \SetBreakableRel{\nsubseteq}
  \SetBreakableRel{\nsupseteq}
  \SetBreakableRel{\nparallel}
  \SetBreakableRel{\nmid}
  \SetBreakableRel{\nshortmid}
  \SetBreakableRel{\nshortparallel}
  \SetBreakableRel{\nvdash}
  \SetBreakableRel{\nVdash}
  \SetBreakableRel{\nvDash}
  \SetBreakableRel{\nVDash}
  \SetBreakableRel{\ntrianglerighteq}
  \SetBreakableRel{\ntrianglelefteq}
  \SetBreakableRel{\ntriangleleft}
  \SetBreakableRel{\ntriangleright}
  \SetBreakableRel{\nleftarrow}
  \SetBreakableRel{\nrightarrow}
  \SetBreakableRel{\nLeftarrow}
  \SetBreakableRel{\nRightarrow}
  \SetBreakableRel{\nLeftrightarrow}
  \SetBreakableRel{\nleftrightarrow}
  \SetBreakableBin{\divideontimes}
  \SetBreakableRel{\eqsim}
  \SetBreakableRel{\lessdot}
  \SetBreakableRel{\gtrdot}
  \SetBreakableBin{\ltimes}
  \SetBreakableBin{\rtimes}
  \SetBreakableRel{\shortmid}
  \SetBreakableRel{\shortparallel}
  \SetBreakableBin{\smallsetminus}
  \SetBreakableRel{\thicksim}
  \SetBreakableRel{\thickapprox}
  \SetBreakableRel{\approxeq}
  \SetBreakableRel{\succapprox}
  \SetBreakableRel{\precapprox}
  \SetBreakableRel{\curvearrowleft}
  \SetBreakableRel{\curvearrowright}
  \SetBreakableRel{\backepsilon}
\fi
%    \end{macrocode}
% Support \textsf{mathbbol} package
%    \begin{macrocode}
\@ifpackageloaded{mathbbol}{
  \SetOpenBracket{\Langle}
  \SetOpenBracket{\Lparen}
}{}
%    \end{macrocode}
% Support \textsf{mathtools}/\textsf{empheq} packages
%    \begin{macrocode}
\@ifpackageloaded{mathtools}{
  \SetBreakableRel{\vcentcolon}
  \SetBreakableRel{\dblcolon}
  \SetBreakableRel{\coloneqq}
  \SetBreakableRel{\Coloneqq}
  \SetBreakableRel{\coloneq}
  \SetBreakableRel{\Coloneq}
  \SetBreakableRel{\eqqcolon}
  \SetBreakableRel{\Eqqcolon}
  \SetBreakableRel{\eqcolon}
  \SetBreakableRel{\Eqcolon}
  \SetBreakableRel{\colonapprox}
  \SetBreakableRel{\Colonapprox}
  \SetBreakableRel{\colonsim}
  \SetBreakableRel{\Colonsim}
}{}
%    \end{macrocode}
% Support \textsf{mdwmath} package
%    \begin{macrocode}
\@ifpackageloaded{mdwmath}{
  \SetBreakableBin{\bitand}
  \begingroup
    \catcode`\&\active
    \xdef&{\noexpand\brokenbin{\rmathbr@mathchar{`\&}}}
  \endgroup
  \AtBeginDocument{\mathcode`\&=32768 }
}{}
%    \end{macrocode}
% Support \textsf{sbmm} package
%    \begin{macrocode}
\@ifpackageloaded{sbbm}{
  \SetOpenBracket{\Lparen}
}{}
%    \end{macrocode}
% Support \textsf{stmaryrd} package
%    \begin{macrocode}
\@ifpackageloaded{stmaryrd}{
  \SetOpenBracket{\Lbag}
  \SetOpenBracket{\llparenthesis}
  \SetOpenBracket{\binampersand}
  \SetOpenBracket{\llfloor}
  \SetOpenBracket{\llceil}
  \SetOpenBracket{\llbracket}
  \SetBreakableRel{\shortleftarrow}
  \SetBreakableRel{\shortrightarrow}
  \SetBreakableRel{\shortuparrow}
  \SetBreakableRel{\shortdownarrow}
  \SetBreakableBin{\Yup}
  \SetBreakableBin{\Ydown}
  \SetBreakableBin{\Yleft}
  \SetBreakableBin{\Yright}
  \SetBreakableBin{\varcurlyvee}
  \SetBreakableBin{\varcurlywedge}
  \SetBreakableBin{\minuso}
  \SetBreakableBin{\baro}
  \SetBreakableBin{\sslash}
  \SetBreakableBin{\bbslash}
  \SetBreakableBin{\moo}
  \SetBreakableBin{\varotimes}
  \SetBreakableBin{\varoast}
  \SetBreakableBin{\varobar}
  \SetBreakableBin{\varodot}
  \SetBreakableBin{\varoslash}
  \SetBreakableBin{\varobslash}
  \SetBreakableBin{\varocircle}
  \SetBreakableBin{\varoplus}
  \SetBreakableBin{\varominus}
  \SetBreakableBin{\boxast}
  \SetBreakableBin{\boxbar}
  \SetBreakableBin{\boxdot}
  \SetBreakableBin{\boxslash}
  \SetBreakableBin{\boxbslash}
  \SetBreakableBin{\boxcircle}
  \SetBreakableBin{\boxbox}
  \SetBreakableBin{\boxempty}
  \SetBreakableBin{\merge}
  \SetBreakableBin{\vartimes}
  \SetBreakableBin{\fatsemi}
  \SetBreakableRel{\sswarrow}
  \SetBreakableRel{\ssearrow}
  \SetBreakableRel{\curlywedgeuparrow}
  \SetBreakableRel{\curlywedgedownarrow}
  \SetBreakableBin{\fatslash}
  \SetBreakableBin{\fatbslash}
  \SetBreakableBin{\lbag}
  \SetBreakableBin{\rbag}
  \SetBreakableBin{\varbigcirc}
  \SetBreakableRel{\leftrightarroweq}
  \SetBreakableRel{\curlyveedownarrow}
  \SetBreakableRel{\curlyveeuparrow}
  \SetBreakableRel{\nnwarrow}
  \SetBreakableRel{\nnearrow}
  \SetBreakableBin{\leftslice}
  \SetBreakableBin{\rightslice}
  \SetBreakableBin{\varolessthan}
  \SetBreakableBin{\varogreaterthan}
  \SetBreakableBin{\varovee}
  \SetBreakableBin{\varowedge}
  \SetBreakableBin{\talloblong}
  \SetBreakableBin{\interleave}
  \SetBreakableBin{\obar}
  \SetBreakableBin{\obslash}
  \SetBreakableBin{\olessthan}
  \SetBreakableBin{\ogreaterthan}
  \SetBreakableBin{\ovee}
  \SetBreakableBin{\owedge}
  \SetBreakableBin{\oblong}
  \SetBreakableRel{\inplus}
  \SetBreakableRel{\niplus}
  \SetBreakableBin{\nplus}
  \SetBreakableRel{\subsetplus}
  \SetBreakableRel{\supsetplus}
  \SetBreakableRel{\subsetpluseq}
  \SetBreakableRel{\supsetpluseq}
  \SetBreakableRel{\trianglelefteqslant}
  \SetBreakableRel{\trianglerighteqslant}
  \SetBreakableRel{\ntrianglelefteqslant}
  \SetBreakableRel{\ntrianglerighteqslant}
  \SetBreakableRel{\arrownot}
  \SetBreakableRel{\Arrownot}
  \SetBreakableRel{\Mapstochar}
  \SetBreakableRel{\mapsfromchar}
  \SetBreakableRel{\Mapsfromchar}
  \SetBreakableBin{\leftrightarrowtriangle}
  \SetBreakableRel{\leftarrowtriangle}
  \SetBreakableRel{\rightarrowtriangle}
  \SetBreakableRel{\longarrownot}
  \SetBreakableRel{\Longarrownot}
  \SetBreakableRel{\Mapsto}
  \SetBreakableRel{\mapsfrom}
  \SetBreakableRel{\Mapsfrom}
  \SetBreakableRel{\Longmapsto}
  \SetBreakableRel{\longmapsfrom}
  \SetBreakableRel{\Longmapsfrom}
}{}
%    \end{macrocode}
% Support \textsf{wasysym} package
%    \begin{macrocode}
\@ifpackageloaded{wasysym}{
  \SetMathOperator{\varint}
  \SetMathOperator{\iint}
  \SetMathOperator{\iiint}
  \SetMathOperator{\varoint}
  \SetMathOperator{\oiint}
  \SetBreakableBin{\LHD}
  \SetBreakableBin{\RHD}
  \SetBreakableRel{\apprle}
  \SetBreakableRel{\apprge}
  \SetBreakableRel{\wasypropto}
  \SetBreakableRel{\invneg}
  \SetBreakableBin{\ocircle}
  \SetBreakableRel{\logof}
}{}
%    \end{macrocode}
%    \begin{macrocode}
} % \rmathbr@patch@commands
%    \end{macrocode}
%
% Execute \verb|\rmathbr@patch@commands| depending on options:
%    \begin{macrocode}
\ifrmathbr@patch@begindocument
  \AtBeginDocument{\rmathbr@patch@commands}
\else
  \rmathbr@patch@commands
\fi
%    \end{macrocode}
%
% Switch to active math mode at \verb|\begin{document}|
%    \begin{macrocode}
\AtBeginDocument{%
  \mathcode`\==32768% "8000
  \mathcode`\<=32768
  \mathcode`\>=32768
  \mathcode`\+=32768
  \ifrmathbr@kv@brokenminus
    \mathcode`\-=32768
  \fi
  \mathcode`\*=32768
  \mathcode`\(=32768
  \mathcode`\[=32768 %\]
  \mathcode`\,=32768
  \mathcode`\;=32768
  \mathcode`\:=32768
  \@ifundefined{resetMathstrut@}{}{% fix amsmath
    \let\rmathbr@orig@resetMathstrut=\resetMathstrut@
    \gdef\resetMathstrut@{%
      \mathcode`\(=16424% "4028
      \rmathbr@orig@resetMathstrut
      \mathcode`\(=32768% "8000
    }
    \gdef\newmcodes@{%
      \mathcode`\'=39
      \mathcode`\*=42
      \mathcode`\.=24890% "613A
      \mathcode`\-=45
      \mathcode`\/=47
      \mathcode`\:=24634% "603A
      \relax
    }
  }%
}
%    \end{macrocode}
%
% Patch for \textsf{bm} package:
%    \begin{macrocode}
\@ifpackageloaded{bm}{%
  \let\rmathbr@save@bm@general=\bm@general
  \def\bm@general#1#2#3#4#5{
    \rmathbr@save@bm@general{#1}{#2}{%
      \let\nobr\copy
      \def\brokenrel##1{\unvcopy{\brokenrel{##1}}}
      \def\brokenbin##1{\unvcopy{\brokenbin{##1}}}
      \def\brokeninner##1{\unvcopy{\brokeninner{##1}}}
      \def\rmathbr@mathop##1{\unvcopy{\rmathbr@mathop{##1}}}
      \begingroup\catcode`\_\active\lccode`\~`\_\lowercase{\endgroup\def~}##1{\unvcopy{_{##1}}}
      \begingroup\catcode`\^\active\lccode`\~`\^\lowercase{\endgroup\def~}##1{\unvcopy{^{##1}}}
      #3}{#4}{#5}
  }
  \PackageInfo{rmathbr}{Note: 'bm' package has been patched}{}%
}{}
%    \end{macrocode}
%
% Patch for \textsf{xy} package:
%    \begin{macrocode}
\@ifpackageloaded{xy}{%
  \ifnum\rmathbr@kv@scriptsmode>0\relax
    \let\rmathbr@save@xy=\xy
    \let\rmathbr@save@endxy=\endxy
    \def\xy{\begingroup\catcode`\^7\catcode`\_8\rmathbr@save@xy}
    \def\endxy{\rmathbr@save@endxy\endgroup}
    \PackageInfo{rmathbr}{Note: \string\xy and \string\endxy commands from 'xy'
                                package have been patched}{}%
  \fi
}{}
%    \end{macrocode}
%
% \iffalse
%</package>
% \fi
%
% \Finale
\endinput
