texlive[57114] Master/texmf-dist: rmathbr (11dec20)

commits+karl at tug.org commits+karl at tug.org
Fri Dec 11 22:47:54 CET 2020


Revision: 57114
          http://tug.org/svn/texlive?view=revision&revision=57114
Author:   karl
Date:     2020-12-11 22:47:54 +0100 (Fri, 11 Dec 2020)
Log Message:
-----------
rmathbr (11dec20)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/rmathbr/README
    trunk/Master/texmf-dist/doc/latex/rmathbr/rmathbr.pdf
    trunk/Master/texmf-dist/source/latex/rmathbr/rmathbr.dtx
    trunk/Master/texmf-dist/source/latex/rmathbr/rmathbr.ins
    trunk/Master/texmf-dist/tex/latex/rmathbr/rmathbr.sty

Modified: trunk/Master/texmf-dist/doc/latex/rmathbr/README
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/rmathbr/rmathbr.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/rmathbr/rmathbr.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/rmathbr/rmathbr.dtx	2020-12-11 21:47:38 UTC (rev 57113)
+++ trunk/Master/texmf-dist/source/latex/rmathbr/rmathbr.dtx	2020-12-11 21:47:54 UTC (rev 57114)
@@ -2,7 +2,7 @@
 % !Mode:: "TeX:DTX:UK"
 % !DTXversion:: "2.5a"
 %
-% Copyright (C) 2008-2016 by Denis Ryabov <dryabov at yandex.ru>
+% Copyright (C) 2008-2020 by Denis Ryabov <dryabov at yandex.ru>
 % ---------------------------------------------------------------------------
 % This work may be distributed and/or modified under the
 % conditions of the LaTeX Project Public License, either version 1.3
@@ -28,7 +28,8 @@
 %<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
 %<package>\ProvidesPackage{rmathbr}
 %<*package>
-    [2016/04/10 1.0.3 Repeating of math operator at the broken line and the new line in inline equations]
+    [2020/12/11 1.1 Repeating of math operator at the broken line and the new
+                    line in inline equations]
 %</package>
 %
 %<*driver>
@@ -38,12 +39,15 @@
             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}
+            pdftitle={rmathbr : Repeating of math operator at the broken line and
+                                the new line in inline equations}]{hyperref}
 \usepackage{enumitem}
 \usepackage{multicol}
+\usepackage{array,longtable}
 \usepackage{rmathbr}
 \setlist{nosep}
 \pagestyle{headings}
+\frenchspacing
 \sloppy
 \clubpenalty=10000
 \widowpenalty=10000
@@ -54,7 +58,7 @@
 %</driver>
 % \fi
 %
-% \CheckSum{3299}
+% \CheckSum{3823}
 %
 % \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
@@ -87,13 +91,13 @@
 %
 % 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
+% 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 ``TeX and Russian Traditions of
-% Typesetting'' and supports most of \LaTeX{} mathematical packages (some known
-% issues are listed in ``Known issues'' section below).
+% 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}
@@ -107,40 +111,87 @@
 % $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 of \textsf{rmathbr} has
-% special support of many math-related packages: amsfonts, amssymb, amstex,
-% boisik, euler, eulervm, fourier, icomma, latexsym, lucbmath, lucidabr, lucmin,
-% lucmtime, luctime, mathbbol, mdwmath, program, sbbm, stmaryrd, wasysym.
+% 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}, \textsf{amstex}, \textsf{bm},
+% \textsf{boisik}, \textsf{euler}, \textsf{eulervm}, \textsf{fourier},
+% \textsf{icomma}, \textsf{latexsym}, \textsf{lucbmath}, \textsf{lucidabr},
+% \textsf{lucmin}, \textsf{lucmtime}, \textsf{luctime}, \textsf{mathbbol},
+% \textsf{mathtools}, \textsf{mdwmath}, \textsf{program}, \textsf{sbbm},
+% \textsf{stmaryrd}, \textsf{wasysym}, \textsf{xy}.
 %
 % Please, submit any found bugs to \url{https://github.com/dryabov/rmathbr/issues}.
 %
 % \section{Options}
 %
-% The \textsf{rmathbr} package supports following options:
-% \begin{itemize}
-% \item \verb|mathactivechars| (default): assign mathactive (12) category to
-%       \verb|^| and \verb|_| characters.
-% \item \verb|activechars|: assign active (13) category to \verb|^| and
-%       \verb|_| characters.
-% \item \verb|noactivechars|: assign default categories to \verb|^| and
-%       \verb|_| characters (7 and 8, correspondingly).
-% \end{itemize}
+% 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.
 %
-% In some cases it might be necessary to change default option 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 brackets, 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 break only. E.g. \verb|(a+b)\*(a-b)|.
+% 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 break.
+% This command displays \verb|\cdot| ($\cdot$) that is changed to \verb|\times|
+% ($\times$) at the break.
 %
 % \DescribeMacro{\nobr}
 %
@@ -147,14 +198,14 @@
 % 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{\SetBreakableRel}
-%
-% Declares breakable relation operator, e.g. \verb|\SetBreakableRel{\MyEqual}|.
-%
 % \DescribeMacro{\SetBreakableInner}
 %
 % Declares breakable ``inner'' expression, e.g. \verb|\SetBreakableInner{\ldots}|.
@@ -161,28 +212,63 @@
 %
 % \DescribeMacro{\SetOpenBracket}
 %
-% Declares opening bracket (\textsf{rmathbr} disables break directly after brackets),
-% e.g. \verb|\SetOpenBracket{\MyOpenBracket}|.
+% 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}|.
+% 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),
+% 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 'xy' package: should be loaded after 'rmathbr' to work properly
-%   \item 'breqn' package: cannot work together with 'rmathbr'
+%   \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 (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|,
@@ -211,23 +297,29 @@
 % \subsection*{0.98 (31-January-2010)}
 % \begin{itemize}
 %   \item fix hyphenation on~\verb|:=|
-%   \item correct work with 'icomma' package and option 'icomma' of 'eulervm' package
-%   \item correct work with 'program' package
-%   \item symbols have been added from boisik, euler, fourier, lucbmath, lucidabr,
-%    lucmin, lucmtime, luctime, mathbbol, mdwmath, sbbm, stmaryrd and wasysym packages.
-%   \item remove shrinking of space in math (breaked url package)
-%   \item don't hyphenate after punctuation ('\verb|,|', '\verb|;|', '\verb|\colon|' etc.)
+%   \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
+%   \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|'
+%   \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|-|'' in AMS's \verb|\DeclareMathOperator|
 %   \item fix problem with \verb|\ldots| in text mode
 % \end{itemize}
 % \subsection*{0.95 (28-September-2009)}
@@ -234,8 +326,9 @@
 % \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 mathbbol.sty left bracket (\verb|\Lbrack|) support
+%   \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)}
@@ -256,25 +349,45 @@
 %<*package>
 % \fi
 %
+%
 % \subsection*{Initialization}
 %
+% Load required packages.
 %    \begin{macrocode}
 \RequirePackage{ifetex}
-\RequirePackage{mathstyle}
+\RequirePackage{ifluatex}
+\RequirePackage{xkeyval}
 %    \end{macrocode}
+% \begin{macro}{\rmathbr at kv}
 %    \begin{macrocode}
-\@ifpackageloaded{breqn}%
-{
-  \PackageError{rmathbr}{'rmathbr' package cannot be used together with 'breqn' package!}{}%
-}{}
+\edef\rmathbr at kv{\@currname.\@currext}
 %    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\xDeclareBoolOptionX}
+% The macro to declare boolean option.
 %    \begin{macrocode}
-\@ifpackageloaded{xy}%
-{
-  \PackageError{rmathbr}{'rmathbr' package should be loaded before 'xy' package!}{}%
+\def\xDeclareBoolOptionX#1#2{%
+  \define at boolkey{\rmathbr at kv}[rmathbr at kv@]{#1}[true]{#2}%
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\xDeclareChoiceOptionX}
+% The macro to declare multi-choice option.
+%    \begin{macrocode}
+\def\xDeclareChoiceOptionX#1[#2]#3[#4]#5{%
+  \define at choicekey{\rmathbr at 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}
@@ -284,7 +397,12 @@
 %    \end{macrocode}
 % \end{macro}
 %
-%
+% \begin{macro}{\SetBreakableRel}
+% Makes breakable relation sign.
+%    \begin{macrocode}
+\def\SetBreakableRel#1{\rmathbr at setbreakable{#1}{\brokenrel}}
+%    \end{macrocode}
+% \end{macro}
 % \begin{macro}{\SetBreakableBin}
 % Makes breakable binary operation.
 %    \begin{macrocode}
@@ -291,16 +409,6 @@
 \def\SetBreakableBin#1{\rmathbr at setbreakable{#1}{\brokenbin}}
 %    \end{macrocode}
 % \end{macro}
-%
-%
-% \begin{macro}{\SetBreakableRel}
-% Makes breakable relation sign.
-%    \begin{macrocode}
-\def\SetBreakableRel#1{\rmathbr at setbreakable{#1}{\brokenrel}}
-%    \end{macrocode}
-% \end{macro}
-%
-%
 % \begin{macro}{\SetBreakableInner}
 % Makes breakable inner (like \verb|\ldots|).
 %    \begin{macrocode}
@@ -307,8 +415,6 @@
 \def\SetBreakableInner#1{\rmathbr at setbreakable{#1}{\brokeninner}}
 %    \end{macrocode}
 % \end{macro}
-%
-%
 % \begin{macro}{\SetOpenBracket}
 % Disables breaks after open bracket.
 %    \begin{macrocode}
@@ -315,8 +421,12 @@
 \def\SetOpenBracket#1{\rmathbr at nobrafter{#1}}
 %    \end{macrocode}
 % \end{macro}
-%
-%
+% \begin{macro}{\SetPunctuation}
+% Disables breaks after punctuation sign.
+%    \begin{macrocode}
+\def\SetPunctuation#1{\rmathbr at nobrafter{#1}}
+%    \end{macrocode}
+% \end{macro}
 % \begin{macro}{\SetMathOperator}
 % Disables breaks after math operator.
 %    \begin{macrocode}
@@ -323,76 +433,229 @@
 \def\SetMathOperator#1{\rmathbr at setbreakable{#1}{\rmathbr at mathop}}
 %    \end{macrocode}
 % \end{macro}
-%
-%
-% \begin{macro}{\SetPunctuation}
-% Disables breaks after punctuation sign.
+% \begin{macro}{\UnsetBrokenCmd}
+% Restores original command.
 %    \begin{macrocode}
-\def\SetPunctuation#1{\rmathbr at nobrafter{#1}}
+\def\UnsetBrokenCmd#1{\rmathbr at unsetbroken{#1}}
 %    \end{macrocode}
 % \end{macro}
-%
-% \noindent Makes argument as breakable binary operation.
+% \begin{macro}{\BrokenBinOff}
+% Disables break on binary operations.
 %    \begin{macrocode}
-\DeclareRobustCommand{\brokenbin}[1]{\rmathbr at brokenbin{#1}}
+\def\BrokenBinOff{\rmathbr at brokenbinoff}
 %    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\BrokenBinOn}
+% Enables break on binary operations.
+%    \begin{macrocode}
+\def\BrokenBinOn{\rmathbr at brokenbinon}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\brokenrel}
 % Makes argument as breakable relation sign.
 %    \begin{macrocode}
 \DeclareRobustCommand{\brokenrel}[1]{\rmathbr at brokenrel{#1}}
 %    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\brokenbin}
+% Makes argument as breakable binary operation.
+%    \begin{macrocode}
+\DeclareRobustCommand{\brokenbin}[1]{\rmathbr at brokenbin{#1}}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\brokeninner}
 % Makes argument as breakable inner.
 %    \begin{macrocode}
 \DeclareRobustCommand{\brokeninner}[1]{\rmathbr at brokeninner{#1}}
 %    \end{macrocode}
+% \end{macro}
 %
+%
+% \subsection*{Options}
+%
+% Start to process options.
+%
+% First of all, warn about deprecated options:
+%    \begin{macrocode}
+\xDeclareBoolOptionX{noactivechars}{
+  \ifrmathbr at 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 at 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 at 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}
+\let\rmathbr at scriptsmode=\@ne
+%    \end{macrocode}
+%    \begin{macrocode}
+\xDeclareChoiceOptionX{scripts}[\val\nr]{noactive,mathactive,active}[mathactive]{
+  \ifcase\nr\relax
+    \let\rmathbr at scriptsmode=\z@
+  \or
+    \let\rmathbr at scriptsmode=\@ne
+  \or
+    \let\rmathbr at scriptsmode=\tw@
+  \fi
+}
+%    \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 at patch@begindocument
+%    \end{macrocode}
+% Note that by default 'atload' is used unless 'unicode-math' or 'mathtools' are
+% loaded.
+%    \begin{macrocode}
+\xDeclareChoiceOptionX{run}[\val\nr]{atload,atbegindocument,auto}[auto]{
+  \ifcase\nr\relax
+    \rmathbr at patch@begindocumentfalse
+  \or
+    \rmathbr at patch@begindocumenttrue
+  \or
+    \@ifpackageloaded{unicode-math}{\rmathbr at patch@begindocumenttrue}{}
+    \@ifpackageloaded{mathtools}{\rmathbr at 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 at 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}
 %
-% Save default penalty to \verb|\exhyphenpenalty| (as \verb|\exhyphenpenalty| will be actual penalty for math breaks).
+% Switch to scripts mode
 %    \begin{macrocode}
-\exhyphenpenalty=\relpenalty
+\ifcase\rmathbr at scriptsmode
+  % nop
+\or
+  \AtBeginDocument{\catcode`\^=12\mathcode`\^=32768\catcode`\_=12\mathcode`\_=32768}
+\or
+  \AtBeginDocument{\catcode`\^\active\catcode`\_\active}
+\fi
 %    \end{macrocode}
+%
+% Store original penalty values (via mathchardef trick).
+%    \begin{macrocode}
+\mathchardef\rmathbr at orig@relpenalty=\relpenalty
+\mathchardef\rmathbr at 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}
-% First symbol in equation is nonbreakable.
+% \begin{macro}{\everymath}
+% First symbol/command in equation is nonbreakable.
 %    \begin{macrocode}
 \expandafter\everymath\expandafter{\the\everymath\nobr }
 %    \end{macrocode}
-% Setup sub- and superscripts.
+% \end{macro}
+% Save some characters definitions.
+% \begin{macro}{\rmathbr at superscript@std}
 %    \begin{macrocode}
-\ifnum\catcode`\^=12%
-  \begingroup%
-    \catcode`\^\active
-    \global\let\rmathbr at superscript@text=^%
-  \endgroup%
-\else%
-  \let\rmathbr at superscript@text=^%
-\fi
-\ifnum\catcode`\_=12%
-  \begingroup%
-    \catcode`\_\active
-    \global\let\rmathbr at subscript@text=_%
-  \endgroup%
-\else%
-  \let\rmathbr at subscript@text=_%
-\fi
+\begingroup\catcode`\^=7 \global\let\rmathbr at superscript@std=^\endgroup
 %    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\rmathbr at superscript@other}
+%    \begin{macrocode}
+\begingroup\catcode`\^=12\global\let\rmathbr at superscript@other=^\endgroup
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\rmathbr at subscript@std}
+%    \begin{macrocode}
+\begingroup\catcode`\_=8 \global\let\rmathbr at subscript@std=_\endgroup
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\rmathbr at subscript@other}
+%    \begin{macrocode}
+\begingroup\catcode`\_=12\global\let\rmathbr at subscript@other=_\endgroup
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\rmathbr at prime}
+%    \begin{macrocode}
+\begingroup\catcode`\'=12\global\let\rmathbr at prime='\endgroup
+%    \end{macrocode}
+% \end{macro}
 %
 % \begin{macro}{\rmathbr at superscript}
 %    \begin{macrocode}
-\def\rmathbr at superscript#1{\rmathbr at superscript@text{{#1}}}
+\def\rmathbr at superscript#1{\rmathbr at superscript@std{{#1}}}
 %    \end{macrocode}
 % \end{macro}
-%
-%
 % \begin{macro}{\rmathbr at subscript}
 %    \begin{macrocode}
-\def\rmathbr at subscript#1{\rmathbr at subscript@text{{#1}}}
+\def\rmathbr at subscript#1{\rmathbr at subscript@std{{#1}}}
 %    \end{macrocode}
 % \end{macro}
 %
+% Setup sub- and superscripts.
 %    \begin{macrocode}
 \begingroup
   \catcode`\^\active\gdef^{\rmathbr at superscript}
@@ -399,377 +662,370 @@
   \catcode`\_\active\gdef_{\rmathbr at subscript}
 \endgroup
 %    \end{macrocode}
-% Save existing commands.
+%
 %    \begin{macrocode}
-\begingroup\catcode`\_=13\catcode`\^=13\lowercase{\endgroup
-\AtBeginDocument%
-{%
-  \ifnum\catcode`\^=13
-    \let\rmathbr at superscript@text at active=^
-    \DeclareRobustCommand{\rmathbrsuperscript}[1]{\rmathbr at superscript@text at active{{#1}}}
-  \else
-    \DeclareRobustCommand{\rmathbrsuperscript}[1]{\rmathbr at superscript@text{{#1}}}
-  \fi
-  \def^{\rmathbrsuperscript}
-  \def\rmathbr at superscript@macro{\rmathbrsuperscript}
-  \ifnum\catcode`\_=13
-    \let\rmathbr at subscript@text at active=_
-    \DeclareRobustCommand{\rmathbrsubscript}[1]{\rmathbr at subscript@text at active{{#1}}}
-  \else
-    \DeclareRobustCommand{\rmathbrsubscript}[1]{\rmathbr at subscript@text{{#1}}}
-  \fi
-  \def_{\rmathbrsubscript}
-  \def\rmathbr at subscript@macro{\rmathbrsubscript}
-}}
+\newif\ifrmathbr at activemathchar
 %    \end{macrocode}
-% Process options.
+% Check for XeTeX/LuaTeX
 %    \begin{macrocode}
-\DeclareOption{mathactivechars}%
-{
-  \catcode`\^=12\catcode`\_=12
-}
-\DeclareOption{activechars}%
-{
-  \catcode`\^\active\catcode`\_\active
-}
-\DeclareOption{noactivechars}%
-{
-  \catcode`\^=7\catcode`\_=8
-}
-\ExecuteOptions{mathactivechars}%
-\ProcessOptions
+\ifx\Umathcode\@undefined
 %    \end{macrocode}
-% Basic math.
+% Standard TeX
+% \begin{macro}{\rmathbr at checkmathchar}
 %    \begin{macrocode}
-\begingroup
-  \catcode`\=\active
-  \ifnum\mathcode`\=<32768
-    \xdef={\noexpand\brokenbin{\mathchar\number\mathcode`\=}}
-  \else
-    \gdef={\brokenbin{\mathchar12349}}
-  \fi
-\endgroup
-\begingroup
-  \catcode`\+\active
-  \ifnum\mathcode`\+<32768
-    \xdef+{\noexpand\brokenbin{\mathchar\number\mathcode`\+}}
-  \else
-    \gdef+{\brokenbin{\mathchar8235}}
-  \fi
-\endgroup
-\begingroup
-  \catcode`\-\active
-  \ifnum\mathcode`\-<32768
-    \xdef-{\noexpand\brokenbin{\mathchar\number\mathcode`\-}}
-  \else
-    \gdef-{\brokenbin{\mathchar8704}}
-  \fi
-\endgroup
-\begingroup
-  \catcode`\*\active
-  \ifnum\mathcode`\*<32768
-    \xdef*{\noexpand\brokenbin{\mathchar\number\mathcode`\*}}
-  \else
-    \gdef*{\brokenbin{\mathchar8707}}
-  \fi
-\endgroup
-\begingroup
-  \ifnum\mathcode`\<<32768
-    \catcode`\<\active
-    \xdef<{\noexpand\brokenbin{\mathchar\number\mathcode`\<}}
-  \else
-    \catcode`\<\active
-    \gdef<{\brokenbin{\mathchar12604}}
-  \fi
-\endgroup
-\begingroup
-  \catcode`\>\active
-  \ifnum\mathcode`\><32768
-    \xdef>{\noexpand\brokenbin{\mathchar\number\mathcode`\>}}
-  \else
-    \gdef>{\brokenbin{\mathchar12606}}
-  \fi
-\endgroup
-\begingroup
-  \catcode`\(\active
-  \xdef({\mathopen\delimiter\number\delcode`\(\noexpand\nobr }
-\endgroup
-\begingroup
-  \catcode`\[\active %\]
-  \xdef[{\mathopen\delimiter\number\delcode`\[\noexpand\nobr }
-\endgroup
-\AtBeginDocument%
-{
-  \mathcode`\==32768% "8000
-  \mathcode`\<=32768
-  \mathcode`\>=32768
-  \mathcode`\+=32768
-  \mathcode`\-=32768
-  \mathcode`\*=32768
-  \mathcode`\_=32768
-  \mathcode`\^=32768
-  \mathcode`\(=32768
-  \mathcode`\[=32768 %\]
-  \mathcode`\:=32768
-  \mathcode`\,=32768
-  \mathcode`\;=32768
-  \let\rmathbr at orig@resetMathstrut=\resetMathstrut@
-  \begingroup
-    \gdef\resetMathstrut@
-    {
-      \mathcode`\(=16424% "4028
-      \rmathbr at orig@resetMathstrut
-      \mathcode`\(=32768% "8000
-    }
-    \gdef\newmcodes@
-    {
-      \mathcode`\'=39
-      \mathcode`\*=42
-      \mathcode`\.=24890% "613A
-      \mathcode`\-=45
-      \mathcode`\/=47
-      \mathcode`\:=24634% "603A
-      \relax
-    }
-  \endgroup%
-}
-\begingroup
-  \catcode`\:\active \gdef:{\futurelet\rmathbr at let@token\rmathbr at colontest}
-\endgroup
+  \def\rmathbr at checkmathchar#1{%
+    \ifnum\mathcode#1<32768\relax%
+      \rmathbr at activemathcharfalse%
+    \else%
+      \rmathbr at activemathchartrue%
+    \fi}
 %    \end{macrocode}
-%
-% \begin{macro}{\rmathbr at colontest}
-% Check for \verb|:=|.
+% \end{macro}
+% \begin{macro}{\rmathbr at mathchar}
 %    \begin{macrocode}
-\def\rmathbr at colontest%
-{
-  \ifx=\rmathbr at let@token
-    \expandafter\rmathbr at letsign
-  \else
-    \expandafter\rmathbr at colon
-  \fi
-}%
-\ifnum\mathcode`\:<32768
-  \edef\rmathbr at letsign#1{\noexpand\brokenrel{\mathchar\number\mathcode`\:\mathchar\number\mathcode`\=}}
-  \edef\rmathbr at colon{\noexpand\brokenrel{\mathchar\number\mathcode`\:}}
+  \def\rmathbr at mathchar#1{\mathchar\number\mathcode#1}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\rmathbr at makeactivemathopen}
+%    \begin{macrocode}
+  \def\rmathbr at 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
-  \def\rmathbr at letsign#1{\brokenrel{\mathchar12346\mathchar12349}}
-  \def\rmathbr at colon{\brokenrel{\mathchar12346}}
-\fi
 %    \end{macrocode}
+% XeTeX/LuaTeX
+% \begin{macro}{\rmathbr at activemathcode}
+%    \begin{macrocode}
+  \begingroup
+    \mathcode`\+="8000
+    \xdef\rmathbr at activemathcode{\number\Umathcodenum`\+}
+  \endgroup
+%    \end{macrocode}
 % \end{macro}
-%
-% Check for 'icomma' package and 'eulervm' package with 'icomma' option.
+% \begin{macro}{\rmathbr at checkmathchar}
 %    \begin{macrocode}
-\begingroup
-  \catcode`\,\active
-  \@ifpackageloaded{icomma}% check for 'icomma' package
-  {
-    \expandafter\gdef\expandafter\sm at rtcomma\expandafter{\sm at rtcomma\nobr}
-  }{
-    \ifx\domathcomma\undefined% check for 'eulervm' package with 'icomma' option
-      \ifnum\mathcode`\,<32768
-        \xdef,{\mathpunct\mathchar\number\mathcode`\,\noexpand\nobr }
+  \def\rmathbr at checkmathchar#1{%
+    \ifnum\Umathcodenum#1=\rmathbr at activemathcode\relax%
+      \expandafter\rmathbr at activemathchartrue%
+    \else%
+      \expandafter\rmathbr at activemathcharfalse%
+    \fi}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\rmathbr at mathchar}
+%    \begin{macrocode}
+  \def\rmathbr at mathchar#1{\Umathcharnum\number\Umathcodenum#1}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\rmathbr at truncdiv}
+%    \begin{macrocode}
+  \def\rmathbr at truncdiv#1#2{((#1-(#2-1)/2)/#2)}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\rmathbr at modulo}
+%    \begin{macrocode}
+  \def\rmathbr at modulo#1#2{(#1-\rmathbr at truncdiv{#1}{#2}*#2)}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\rmathbr at makeactivemathopen}
+%    \begin{macrocode}
+  \def\rmathbr at makeactivemathopen#1{%
+    \begingroup
+      \def\@tempa{\Udelcodenum#1}
+      \ifnum\@tempa<"1000000
+        \xdef\@tempb{\mathopen\delimiter\number\@tempa\space\noexpand\nobr }
       \else
-        \gdef,{\mathpunct\mathchar24891\nobr }
+        \xdef\@tempb{\mathopen\Udelimiter4 %
+\number\numexpr\rmathbr at truncdiv{\rmathbr at modulo{\@tempa}{"40000000}}{"200000}\relax%
+\space\number\numexpr\rmathbr at 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 at makeactivemath}
+%    \begin{macrocode}
+\def\rmathbr at makeactivemath#1#2#3{
+  \begingroup
+    \rmathbr at checkmathchar{#1}
+    \lccode`~=#1
+    \catcode#1\active
+    \ifrmathbr at activemathchar
+      \PackageWarning{rmathbr}{Redeclare active math #1 symbol to default mathchar value}
+      \lowercase{\gdef~}{#2{#3}}
     \else
-      \expandafter\gdef\expandafter\domathcomma\expandafter{\domathcomma\nobr}
+      \lowercase{\xdef~}{\noexpand#2{\rmathbr at mathchar{#1}}}
     \fi
-  }
-\endgroup
+  \endgroup
+}
 %    \end{macrocode}
-%
-% Check for 'program' package.
+% \end{macro}
+% \begin{macro}{\rmathbr at makeactivemathpunct}
 %    \begin{macrocode}
-\begingroup
-  \catcode`\;\active
-  \@ifpackageloaded{program}%
-  {
-    \gdef;{\ifmmode\semicolon\;\nobr\else\@semicolon\fi}
-  }{
-    \ifnum\mathcode`\;<32768
-      \xdef;{\mathpunct\mathchar\number\mathcode`\;\noexpand\nobr }
+\def\rmathbr at makeactivemathpunct#1#2{
+  \begingroup
+    \rmathbr at checkmathchar{#1}
+    \lccode`~=#1
+    \catcode#1\active
+    \ifrmathbr at activemathchar
+      \PackageWarning{rmathbr}{Redeclare active math #1 symbol to default mathchar value}
+      \lowercase{\gdef~}{\mathpunct#2\nobr }
     \else
-      \gdef;{\mathpunct\mathchar24635\nobr }
+      \lowercase{\xdef~}{\mathpunct\rmathbr at mathchar{#1} \noexpand\nobr }
     \fi
-  }
-\endgroup
+  \endgroup
+}
 %    \end{macrocode}
-%
+% \end{macro}
+%    \begin{macrocode}
+\newif\ifrmathbr at protected
+%    \end{macrocode}
+% \begin{macro}{\rmathbr at ifprotected}
+%    \begin{macrocode}
+\def\rmathbr at ifprotected#1{%
+  \rmathbr at protectedfalse
+  \edef\str at cmd{\string#1\space}
+  \edef\meaning at cmd{\meaning#1}
+  \def\str at contains##1##2{\begingroup\edef\x{\endgroup\noexpand\in@{##1}{##2}}\x}
+  \str at contains\str at cmd\meaning at cmd
+  \ifin@
+    \str at contains{\string\protect\space}\meaning at cmd
+    \ifin@\rmathbr at protectedtrue\else
+      \str at contains{\string\x at protect\space}\meaning at cmd
+      \ifin@\rmathbr at protectedtrue\else
+        \str at contains{\string\@testopt\space}\meaning at cmd
+        \ifin@\rmathbr at protectedtrue\else
+          \str at contains{\string\@protected at testopt\space}\meaning at cmd
+          \ifin@\rmathbr at protectedtrue\fi
+        \fi
+      \fi
+    \fi
+  \fi
+}
+%    \end{macrocode}
+% \end{macro}
 % \begin{macro}{\rmathbr at ReDeclareRobustCommand}
+% Command without arguments
 %    \begin{macrocode}
-\def\rmathbr at ReDeclareRobustCommand#1#2% Command without arguments
-{
+\def\rmathbr at ReDeclareRobustCommand#1#2{%
   \begingroup
-    \ifx#1\undefined
+    \ifx#1\@undefined
     \else
       \edef\var at orig@I{rmathbr at orig@\expandafter\@gobble\string#1}
       \edef\var at Ispace{\expandafter\@gobble\string#1 }
       \expandafter\ifx\csname\var at orig@I\endcsname\relax
-        \expandafter\ifx\csname\var at Ispace\endcsname\relax
-          \global\expandafter\let\csname\var at orig@I\endcsname#1
+        \ifetex
+          \expandafter\global\expandafter\let\csname\var at orig@I\endcsname#1
         \else
-          \global\expandafter\let\csname\var at orig@I\expandafter\endcsname\csname\var at Ispace\endcsname
+          \rmathbr at ifprotected#1
+          \ifrmathbr at protected
+            \expandafter\global\expandafter\let\csname\var at orig@I\expandafter\endcsname%
+\csname\var at Ispace\endcsname
+          \else
+            \expandafter\global\expandafter\let\csname\var at orig@I\endcsname#1
+          \fi
         \fi
       \fi
-      \expandafter\gdef\csname\var at Ispace\endcsname{#2}% no arguments
-      \xdef#1{\noexpand\protect\expandafter\noexpand\csname\var at Ispace\endcsname}
+      \ifetex
+        \protected\gdef#1{#2}
+      \else
+        \expandafter\gdef\csname\var at Ispace\endcsname{#2}% no arguments
+        \xdef#1{\noexpand\protect\expandafter\noexpand\csname\var at Ispace\endcsname}
+      \fi
     \fi
   \endgroup%
 }
 %    \end{macrocode}
 % \end{macro}
-%
 % \begin{macro}{\rmathbr at ReDeclareRobustCommandI}
+% Command with one argument
 %    \begin{macrocode}
-\def\rmathbr at ReDeclareRobustCommandI#1#2% Command with one argument
-{
+\def\rmathbr at ReDeclareRobustCommandI#1#2{%
   \begingroup
-    \ifx#1\undefined
+    \ifx#1\@undefined
     \else
       \edef\var at orig@I{rmathbr at orig@\expandafter\@gobble\string#1}
-      \edef\var at Ispace{\expandafter\@gobble\string#1 }
+      \edef\var at Ispace{\expandafter\@gobble\string#1\space}
       \expandafter\ifx\csname\var at orig@I\endcsname\relax
-        \expandafter\ifx\csname\var at Ispace\endcsname\relax
-          \global\expandafter\let\csname\var at orig@I\endcsname#1
+        \ifetex
+          \expandafter\global\expandafter\let\csname\var at orig@I\endcsname#1
         \else
-          \global\expandafter\let\csname\var at orig@I\expandafter\endcsname\csname\var at Ispace\endcsname
+          \rmathbr at ifprotected#1
+          \ifrmathbr at protected
+            \expandafter\global\expandafter\let\csname\var at orig@I\expandafter\endcsname%
+\csname\var at Ispace\endcsname
+          \else
+            \expandafter\global\expandafter\let\csname\var at orig@I\endcsname#1
+          \fi
         \fi
       \fi
-      \expandafter\gdef\csname\var at Ispace\endcsname##1{#2}% one argument
-      \xdef#1{\noexpand\protect\expandafter\noexpand\csname\var at Ispace\endcsname}
+      \ifetex
+        \protected\gdef#1##1{#2}
+      \else
+        \expandafter\gdef\csname\var at Ispace\endcsname##1{#2}% one argument
+        \xdef#1{\noexpand\protect\expandafter\noexpand\csname\var at Ispace\endcsname}
+      \fi
     \fi
   \endgroup%
 }
 %    \end{macrocode}
 % \end{macro}
-%
-%
+% \begin{macro}{\brokenrel}
+%    \begin{macrocode}
+\rmathbr at ReDeclareRobustCommandI{\brokenrel}{\rmathbr at brokenrel{#1}}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\brokenbin}
+%    \begin{macrocode}
+\rmathbr at ReDeclareRobustCommandI{\brokenbin}{\rmathbr at brokenbin{#1}}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\brokeninner}
+%    \begin{macrocode}
+\rmathbr at ReDeclareRobustCommandI{\brokeninner}{\rmathbr at brokeninner{#1}}%
+%    \end{macrocode}
+% \end{macro}
+%    \begin{macrocode}
+\let\rmathbr at save@brokenrel=\brokenrel
+\let\rmathbr at save@brokenbin at on=\brokenbin
+\let\rmathbr at save@brokenbin=\brokenbin
+\let\rmathbr at save@brokeninner=\brokeninner
+%    \end{macrocode}
+% \begin{macro}{\rmathbr at brokenbinon}
+%    \begin{macrocode}
+\def\rmathbr at brokenbinon{%
+  \let\rmathbr at save@brokenbin=\rmathbr at save@brokenbin at on
+  \ifx\brokenbin\@firstofone\else
+    \let\brokenbin=\rmathbr at save@brokenbin
+  \fi
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\rmathbr at brokenbinoff}
+%    \begin{macrocode}
+\def\rmathbr at brokenbinoff{%
+  \let\rmathbr at save@brokenbin=\mathbin
+  \ifx\brokenbin\@firstofone\else
+    \let\brokenbin=\rmathbr at save@brokenbin
+  \fi
+}
+%    \end{macrocode}
+% \end{macro}
 % \begin{macro}{\rmathbr at setbrokens}
 %    \begin{macrocode}
-\def\rmathbr at setbrokens%
-{
-  \rmathbr at ReDeclareRobustCommandI{\brokenbin}{\rmathbr at brokenbin{##1}}
-  \rmathbr at ReDeclareRobustCommandI{\brokenrel}{\rmathbr at brokenrel{##1}}
-  \rmathbr at ReDeclareRobustCommandI{\brokeninner}{\rmathbr at brokeninner{##1}}%
+\def\rmathbr at setbrokens{%
+  \let\brokenrel=\rmathbr at save@brokenrel
+  \let\brokenbin=\rmathbr at save@brokenbin
+  \let\brokeninner=\rmathbr at save@brokeninner
+  \let\rmathbr at colontest=\rmathbr at save@colontest
 }
 %    \end{macrocode}
 % \end{macro}
-%
-%
 % \begin{macro}{\rmathbr at unsetbrokens}
 %    \begin{macrocode}
-\def\rmathbr at unsetbrokens%
-{
-  \def\brokenbin##1{##1}
-  \def\brokenrel##1{##1}
-  \def\brokeninner##1{##1}%
+\def\rmathbr at unsetbrokens{%
+  \let\brokenrel=\@firstofone
+  \let\brokenbin=\@firstofone
+  \let\brokeninner=\@firstofone
+  \let\rmathbr at colontest=\rmathbr at colon@std
 }
 %    \end{macrocode}
 % \end{macro}
-%
-%
-% \begin{macro}{\rmathbr at brokenbin}
+% \begin{macro}{\rmathbr at brokenrel}
 %    \begin{macrocode}
-\def\rmathbr at brokenbin#1%
-{
-  \relax
+\def\rmathbr at brokenrel#1{%
   \def\rmathbr at arg{#1}
-  \def\rmathbr at this{\rmathbr at brokenbin}
-  \def\rmathbr at output{\rmathbr@@brokenbin}
+  \let\rmathbr at this=\rmathbr at brokenrel
+  \let\rmathbr at output=\rmathbr@@brokenrel
   \futurelet\rmathbr at let@token\rmathbr at brokenop%
 }
 %    \end{macrocode}
 % \end{macro}
-%
-%
-% \begin{macro}{\rmathbr at brokenrel}
+% \begin{macro}{\rmathbr at brokenbin}
 %    \begin{macrocode}
-\def\rmathbr at brokenrel#1%
-{
-  \relax
+\def\rmathbr at brokenbin#1{%
   \def\rmathbr at arg{#1}
-  \def\rmathbr at this{\rmathbr at brokenrel}
-  \def\rmathbr at output{\rmathbr@@brokenrel}
+  \let\rmathbr at this=\rmathbr at brokenbin
+  \let\rmathbr at output=\rmathbr@@brokenbin
   \futurelet\rmathbr at let@token\rmathbr at brokenop%
 }
 %    \end{macrocode}
 % \end{macro}
-%
-%
 % \begin{macro}{\rmathbr at brokeninner}
 %    \begin{macrocode}
-\def\rmathbr at brokeninner#1%
-{
-  \relax
+\def\rmathbr at brokeninner#1{%
   \def\rmathbr at arg{#1}
-  \def\rmathbr at this{\rmathbr at brokeninner}
-  \def\rmathbr at output{\rmathbr@@brokeninner}
+  \let\rmathbr at this=\rmathbr at brokeninner
+  \let\rmathbr at output=\rmathbr@@brokeninner
   \futurelet\rmathbr at let@token\rmathbr at brokenop%
 }
 %    \end{macrocode}
 % \end{macro}
-%
-%
 % \begin{macro}{\rmathbr at mathop}
 %    \begin{macrocode}
-\def\rmathbr at mathop#1%
-{
-  \relax
+\def\rmathbr at mathop#1{%
   \def\rmathbr at arg{#1}
-  \def\rmathbr at this{\rmathbr at mathop}
-  \def\rmathbr at output{\rmathbr@@mathop}
+  \let\rmathbr at this=\rmathbr at mathop
+  \let\rmathbr at output=\rmathbr@@mathop
   \futurelet\rmathbr at let@token\rmathbr at brokenop%
 }
 %    \end{macrocode}
 % \end{macro}
-%
-%
-% \begin{macro}{\rmathbr@@brokenbin}
+% \begin{macro}{\rmathbr@@brokenrel}
+% LuaTeX only supports per-disc-node penalties
 %    \begin{macrocode}
-\def\rmathbr@@brokenbin#1%
-{
+\def\rmathbr@@brokenrel#1{%
   \ifnum\lastpenalty=\relpenalty
-    \mathbin{#1}
+    \mathrel{#1}
   \else
-    \mathbin{#1}
+    \mathrel{#1}
     \ifx$\rmathbr at let@token
     \else
-      \rmathbr at selector{#1}
+      \begingroup
+        \hyphenpenalty\rmathbr at orig@relpenalty
+        \rmathbr at selector{#1}
+      \endgroup
     \fi
   \fi
   \rmathbr at setbrokens
-  \penalty\binoppenalty %
+  \penalty\relpenalty %
 }
 %    \end{macrocode}
 % \end{macro}
-%
-%
-% \begin{macro}{\rmathbr@@brokenrel}
+% \begin{macro}{\rmathbr@@brokenbin}
 %    \begin{macrocode}
-\def\rmathbr@@brokenrel#1%
-{
+\def\rmathbr@@brokenbin#1{%
   \ifnum\lastpenalty=\relpenalty
-    \mathrel{#1}
+    \mathbin{#1}
   \else
-    \mathrel{#1}
+    \mathbin{#1}
     \ifx$\rmathbr at let@token
     \else
-      \rmathbr at selector{#1}
+      \begingroup
+        \hyphenpenalty\rmathbr at orig@binoppenalty
+        \rmathbr at selector{#1}
+      \endgroup
     \fi
   \fi
   \rmathbr at setbrokens
-  \penalty\relpenalty %
+  \penalty\binoppenalty %
 }
 %    \end{macrocode}
 % \end{macro}
-%
-%
 % \begin{macro}{\rmathbr@@brokeninner}
 %    \begin{macrocode}
-\def\rmathbr@@brokeninner#1%
-{
+\def\rmathbr@@brokeninner#1{%
   \ifnum\lastpenalty=\relpenalty
     \mathinner{#1}
   \else
@@ -776,7 +1032,10 @@
     \mathinner{#1}
     \ifx$\rmathbr at let@token
     \else
-      \rmathbr at selector{#1}
+      \begingroup
+        \hyphenpenalty\rmathbr at orig@relpenalty
+        \rmathbr at selector{#1}
+      \endgroup
     \fi
   \fi
   \rmathbr at setbrokens
@@ -784,23 +1043,17 @@
 }
 %    \end{macrocode}
 % \end{macro}
-%
-%
 % \begin{macro}{\rmathbr@@mathop}
 %    \begin{macrocode}
-\def\rmathbr@@mathop#1%
-{
+\def\rmathbr@@mathop#1{%
   \rmathbr at setbrokens
   #1\nobr %
 }
 %    \end{macrocode}
 % \end{macro}
-%
-%
 % \begin{macro}{\rmathbr at selector}
 %    \begin{macrocode}
-\def\rmathbr at selector#1%
-{
+\def\rmathbr at selector#1{%
   \mathchoice
     {\discretionary{}{\hbox{$\m at th\displaystyle#1$}}{}}
     {\discretionary{}{\hbox{$\m at th\textstyle#1$}}{}}
@@ -809,33 +1062,30 @@
 }
 %    \end{macrocode}
 % \end{macro}
-%    \begin{macrocode}
-\begingroup\catcode`\_=12\catcode`\^=12
-%    \end{macrocode}
-%
 % \begin{macro}{\rmathbr at brokenop}
 %    \begin{macrocode}
-\gdef\rmathbr at brokenop%
-{
+\def\rmathbr at brokenop{%
   \ifmmode
     \rmathbr at unsetbrokens
-    \ifx\rmathbr at subscript@macro\rmathbr at let@token
+    \ifx\rmathbr at subscript@std\rmathbr at let@token
       \let\@command=\rmathbr at brokenglue
-    \else\ifx_\rmathbr at let@token
+    \else\ifx\rmathbr at subscript@other\rmathbr at let@token
       \let\@command=\rmathbr at brokenglue
-    \else\ifx\rmathbr at superscript@macro\rmathbr at let@token
+    \else\ifx\rmathbr at superscript@std\rmathbr at let@token
       \let\@command=\rmathbr at brokenglue
-    \else\ifx^\rmathbr at let@token
+    \else\ifx\rmathbr at superscript@other\rmathbr at let@token
       \let\@command=\rmathbr at brokenglue
     \else\ifx\limits\rmathbr at let@token
       \let\@command=\rmathbr at brokenskip
     \else\ifx\nolimits\rmathbr at let@token
       \let\@command=\rmathbr at brokenskip
+    \else\ifx\rmathbr at prime\rmathbr at let@token
+      \let\@command=\rmathbr at brokenskip
     \else\ifx\relax\rmathbr at let@token
       \let\@command=\rmathbr at brokenskip
     \else
       \let\@command=\rmathbr at output
-    \fi\fi\fi\fi\fi\fi\fi
+    \fi\fi\fi\fi\fi\fi\fi\fi
   \else
     \let\@command=\relax
   \fi
@@ -843,24 +1093,17 @@
 }
 %    \end{macrocode}
 % \end{macro}
-%    \begin{macrocode}
-\endgroup
-%    \end{macrocode}
-%
 % \begin{macro}{\rmathbr at brokenglue}
 %    \begin{macrocode}
-\def\rmathbr at brokenglue#1#2#3%
-{
+\def\rmathbr at brokenglue#1#2#3{%
   \def\rmathbr at temp{#1#2{#3}}
   \expandafter\rmathbr at this\expandafter{\rmathbr at temp}%
 }
 %    \end{macrocode}
 % \end{macro}
-%
 % \begin{macro}{\rmathbr at brokenskip}
 %    \begin{macrocode}
-\def\rmathbr at brokenskip#1#2%
-{
+\def\rmathbr at brokenskip#1#2{%
   \def\rmathbr at temp{#1#2}
   \expandafter\rmathbr at this\expandafter{\rmathbr at temp}%
 }
@@ -867,16 +1110,18 @@
 %    \end{macrocode}
 % \end{macro}
 %
+%
+%
 % \begin{macro}{\rmathbr at setbreakable}
 %    \begin{macrocode}
-\def\rmathbr at setbreakable#1#2%
-{
+\def\rmathbr at setbreakable#1#2{%
   \begingroup
-    \ifx#1\undefined
+    \ifx#1\@undefined
     \else
       \edef\rmathbr at orig{rmathbr at orig@\expandafter\@gobble\string#1}
       \expandafter\ifx\csname\rmathbr at orig\endcsname\relax
-        \expandafter\rmathbr at ReDeclareRobustCommand\expandafter#1\expandafter{\expandafter#2\expandafter{\csname\rmathbr at orig\endcsname}}
+        \expandafter\rmathbr at ReDeclareRobustCommand\expandafter#1\expandafter{%
+\expandafter#2\expandafter{\csname\rmathbr at orig\endcsname}}
       \fi
     \fi
   \endgroup%
@@ -883,17 +1128,16 @@
 }
 %    \end{macrocode}
 % \end{macro}
-%
 % \begin{macro}{\rmathbr at nobrafter}
 %    \begin{macrocode}
-\def\rmathbr at nobrafter#1%
-{
+\def\rmathbr at nobrafter#1{%
   \begingroup
-    \ifx#1\undefined
+    \ifx#1\@undefined
     \else
       \edef\rmathbr at orig{rmathbr at orig@\expandafter\@gobble\string#1}
       \expandafter\ifx\csname\rmathbr at orig\endcsname\relax
-        \expandafter\rmathbr at ReDeclareRobustCommand\expandafter#1\expandafter{\csname\rmathbr at orig\endcsname\nobr}
+        \expandafter\rmathbr at ReDeclareRobustCommand\expandafter#1\expandafter{%
+\csname\rmathbr at orig\endcsname\nobr}
       \fi
     \fi
   \endgroup%
@@ -900,29 +1144,253 @@
 }
 %    \end{macrocode}
 % \end{macro}
+% \begin{macro}{\rmathbr at unsetbroken}
+%    \begin{macrocode}
+\def\rmathbr at unsetbroken#1{
+  \begingroup
+    \ifx#1\@undefined
+    \else
+      \edef\rmathbr at orig{rmathbr at orig@\expandafter\@gobble\string#1}
+      \expandafter\ifx\csname\rmathbr at orig\endcsname\relax
+	  \else
+	    \expandafter\global\expandafter\let\expandafter#1\csname\rmathbr at orig\endcsname
+      \fi
+    \fi
+  \endgroup%
+}
+%    \end{macrocode}
+% \end{macro}
 %
 % \subsection*{Redeclaration of math signs}
 %
+% \begin{macro}{\rmathbr at patch@commands}
+%    \begin{macrocode}
+\def\rmathbr at patch@commands{%
+%    \end{macrocode}
+% \end{macro}
+%
+% Basic math.
+% \begin{macro}{=}
+%    \begin{macrocode}
+\rmathbr at makeactivemath{`\=}{\brokenrel}{\mathchar12349}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{<}
+%    \begin{macrocode}
+\rmathbr at makeactivemath{`\<}{\brokenrel}{\mathchar12604}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{>}
+%    \begin{macrocode}
+\rmathbr at makeactivemath{`\>}{\brokenrel}{\mathchar12606}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{+}
+%    \begin{macrocode}
+\rmathbr at makeactivemath{`\+}{\brokenbin}{\mathchar8235}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{-}
+%    \begin{macrocode}
+\ifrmathbr at kv@brokenminus
+  \rmathbr at makeactivemath{`\-}{\brokenbin}{\mathchar8704}
+\fi
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{*}
+%    \begin{macrocode}
+\rmathbr at makeactivemath{`\*}{\brokenbin}{\mathchar8707}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{(}
+%    \begin{macrocode}
+\rmathbr at makeactivemathopen{`\(}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{[}
+%    \begin{macrocode}
+\rmathbr at 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 at rtcomma\expandafter{\sm at rtcomma\nobr}
+}{
+  \ifx\domathcomma\@undefined%
+    \rmathbr at 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 at 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 at colontest}%
+\endgroup
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\rmathbr at colontest}
+% Check for \verb|:=|.
+%    \begin{macrocode}
+\def\rmathbr at colontest{\futurelet\rmathbr at let@token\rmathbr at do@colontest}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\rmathbr at do@colontest}
+%    \begin{macrocode}
+\def\rmathbr at do@colontest{%
+  \ifx=\rmathbr at let@token
+    \expandafter\rmathbr at letsign
+  \else
+    \expandafter\rmathbr at colon
+  \fi
+}%
+%    \end{macrocode}
+% \end{macro}
+%    \begin{macrocode}
+\rmathbr at checkmathchar{`\:}
+%    \end{macrocode}
+%    \begin{macrocode}
+\ifrmathbr at activemathchar
+%    \end{macrocode}
+%    \begin{macrocode}
+  \PackageWarning{rmathbr}{Redeclare active math `\: symbol to default mathchar value}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \def\rmathbr at colon@std{\mathchar12346}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \ifrmathbr at kv@brokencolon
+    \def\rmathbr at colon{\brokenbin{\rmathbr at colon@std}}
+  \else
+    \def\rmathbr at colon{\mathbin{\rmathbr at colon@std}}
+  \fi
+%    \end{macrocode}
+%    \begin{macrocode}
+  \def\rmathbr at letsign##1{\brokenrel{\rmathbr at colon@std\mathchar12349}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\else
+%    \end{macrocode}
+%    \begin{macrocode}
+  \edef\rmathbr at colon@std{\rmathbr at mathchar{`\:}}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \ifrmathbr at kv@brokencolon
+    \def\rmathbr at colon{\brokenbin{\rmathbr at colon@std}}
+  \else
+    \def\rmathbr at colon{\mathbin{\rmathbr at colon@std}}
+  \fi
+%    \end{macrocode}
+%    \begin{macrocode}
+  \edef\rmathbr at letsign##1{\noexpand\brokenrel{\rmathbr at colon@std\rmathbr at mathchar{`\=}}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\fi
+%    \end{macrocode}
+%    \begin{macrocode}
+\let\rmathbr at save@colontest=\rmathbr at 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 at mathop}
+          \else\ifx##3\mathpunct
+            \let\cmd=\nobr
+          \fi\fi\fi\fi
+          \ifx\cmd\relax\else
+            \edef\var at orig@name{rmathbr at orig@\expandafter\@gobble\string##2}
+            \expandafter\def\expandafter\var at orig\expandafter{\csname\var at orig@name\endcsname}
+            \rmathbr at checkmathchar{\number##1}
+            \ifrmathbr at activemathchar
+              \begingroup
+                \lccode`~=\number##1
+                \catcode\number##1\active
+                \lowercase{\endgroup\expandafter\global\expandafter\let\var at orig~}
+            \else
+              \expandafter\xdef\var at orig{\rmathbr at mathchar{\number##1}}
+              \global\mathcode\number##1="8000
+            \fi
+            \ifx\cmd\nobr
+              \edef\@tempa{\expandafter\noexpand\var at orig\noexpand\nobr}
+            \else
+              \edef\@tempa{\expandafter\noexpand\cmd{\expandafter\noexpand\var at 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
+}{}
+%    \end{macrocode}
+%
+% \begin{macro}{\not}
 % Redeclare \verb|\not|.
 %    \begin{macrocode}
-\rmathbr at ReDeclareRobustCommandI{\not}%
-{
+\rmathbr at ReDeclareRobustCommandI{\not}{%
   \begingroup
-    \edef\rmathbr at orig{rmathbr at orig@\expandafter\@gobble\string#1}
-    \expandafter\ifx\csname\rmathbr at orig\endcsname\relax
-      \brokenrel{\rmathbr at orig@not#1}
+    \edef\rmathbr at orig{rmathbr at orig@\expandafter\@gobble\string##1}
+    \expandafter\let\expandafter\rmathbr at origmacro\csname\rmathbr at orig\endcsname
+    \ifx\rmathbr at origmacro##1\relax
+      \begingroup
+        \let##1=\rmathbr at origmacro
+        \brokenrel{\rmathbr at orig@not##1}
+      \endgroup
     \else
-      \expandafter\brokenrel\expandafter{\expandafter\rmathbr at orig@not\csname\rmathbr at orig\endcsname}
+      \brokenrel{\rmathbr at orig@not##1}
     \fi
   \endgroup%
 }
 %    \end{macrocode}
+% \end{macro}
 % Open brackets.
 %    \begin{macrocode}
-\rmathbr at ReDeclareRobustCommandI{\bigl}{\rmathbr at mathop{\mathopen\big#1}}
-\rmathbr at ReDeclareRobustCommandI{\Bigl}{\rmathbr at mathop{\mathopen\Big#1}}
-\rmathbr at ReDeclareRobustCommandI{\biggl}{\rmathbr at mathop{\mathopen\bigg#1}}
-\rmathbr at ReDeclareRobustCommandI{\Biggl}{\rmathbr at mathop{\mathopen\Bigg#1}}
+\rmathbr at ReDeclareRobustCommandI{\bigl}{\rmathbr at mathop{\mathopen\big##1}}
+\rmathbr at ReDeclareRobustCommandI{\Bigl}{\rmathbr at mathop{\mathopen\Big##1}}
+\rmathbr at ReDeclareRobustCommandI{\biggl}{\rmathbr at mathop{\mathopen\bigg##1}}
+\rmathbr at ReDeclareRobustCommandI{\Biggl}{\rmathbr at mathop{\mathopen\Bigg##1}}
 \SetOpenBracket{\lmoustache}
 \SetOpenBracket{\langle}
 \SetOpenBracket{\lbrace}
@@ -960,7 +1428,6 @@
 \SetPunctuation{\colon}
 \SetPunctuation{\period}
 %    \end{macrocode}
-%
 % Binary Operations.
 %    \begin{macrocode}
 \SetBreakableBin{\triangleleft}
@@ -996,66 +1463,70 @@
 \SetBreakableBin{\times}
 \SetBreakableBin{\cdot}
 %    \end{macrocode}
-%
-% \begin{macro}{\cdott}
+% \begin{macro}{\rmathbr at cdott}
 % \verb|\cdott| is \verb|\cdot| that is changed to \verb|\times| at break point.
 %    \begin{macrocode}
 \def\rmathbr at cdott{%
-  %% inplace-expanded mathchoice from mathstyle.sty
-  \mathchoice{%
-    \mkern\medmuskip$%
-    \discretionary{\the\textfont2\char2}{\the\textfont2\char2}{\the\textfont2\char1}%
-    $\displaystyle\mkern\medmuskip%
-  }{%
-    \mkern\medmuskip$%
-    \discretionary{\the\textfont2\char2}{\the\textfont2\char2}{\the\textfont2\char1}%
-    $\textstyle\mkern\medmuskip%
-  }{%
-    $%
-    \discretionary{\the\scriptfont2\char2}{\the\scriptfont2\char2}{\the\scriptfont2\char1}%
-    $\scriptstyle%
-  }{%
-    $%
-    \discretionary{\the\scriptscriptfont2\char2}{\the\scriptscriptfont2\char2}{\the\scriptscriptfont2\char1}%
-    $\scriptscriptstyle%
-  }
+  $\begingroup\hyphenpenalty\rmathbr at orig@binoppenalty\discretionary%
+    {\hbox{$\m at th\rmathbr at orig@times$}}%
+    {\hbox{$\m at th\rmathbr at orig@times$}}%
+    {\hbox{$\m at th\mkern\medmuskip\rmathbr at orig@cdot\mkern\medmuskip$}}\endgroup$
 }
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\cdott}
+%    \begin{macrocode}
 \def\cdott{%
-  \ensuremath
-  \ifetex
-    \ifinner%
-      \ifnum\currentgrouptype=15\relax
-        \rmathbr at cdott
+  \ifmmode
+    \ifetex
+      \ifinner%
+        \ifnum\currentgrouptype=15\relax
+          \rmathbr at cdott
+        \else
+          \rmathbr at orig@cdot
+        \fi
       \else
-        \cdot
+        \rmathbr at orig@cdot
       \fi
     \else
-      \cdot
+      \rmathbr at cdott
     \fi
   \else
-    \rmathbr at cdott
+    \rmathbr at orig@cdot
   \fi
 }
 %    \end{macrocode}
 % \end{macro}
-%
+% \begin{macro}{\cdot}
+%    \begin{macrocode}
+\ifrmathbr at kv@cdottimes
+  \let\cdot\cdott
+\fi
+%    \end{macrocode}
+% \end{macro}
 % \begin{macro}{\*}
 %    \begin{macrocode}
 \def\*{\mathbin{}%
-  \mathchoice{%
-      \discretionary{\hbox{$\m at th\displaystyle\times$}}{\hbox{$\m at th\displaystyle\times$}}{}%
-    }{%
-      \discretionary{\hbox{$\m at th\textstyle\times$}}{\hbox{$\m at th\textstyle\times$}}{}%
-    }{%
-      \discretionary{\hbox{$\m at th\scriptstyle\times$}}{\hbox{$\m at th\scriptstyle\times$}}{}%
-    }{%
-      \discretionary{\hbox{$\m at th\scriptscriptstyle\times$}}{\hbox{$\m at th\scriptscriptstyle\times$}}{}%
-    }%
+  \begingroup%
+    \hyphenpenalty\rmathbr at orig@binoppenalty%
+    \mathchoice{%
+        \discretionary{\hbox{$\m at th\displaystyle\mkern\thinmuskip\times$}}%
+{\hbox{$\m at th\displaystyle\times\mkern\thinmuskip$}}{}%
+      }{%
+        \discretionary{\hbox{$\m at th\textstyle\mkern\thinmuskip\times$}}%
+{\hbox{$\m at th\textstyle\times\mkern\thinmuskip$}}{}%
+      }{%
+        \discretionary{\hbox{$\m at th\scriptstyle\mkern\thinmuskip\times$}}%
+{\hbox{$\m at th\scriptstyle\times\mkern\thinmuskip$}}{}%
+      }{%
+        \discretionary{\hbox{$\m at th\scriptscriptstyle\mkern\thinmuskip\times$}}%
+{\hbox{$\m at th\scriptscriptstyle\times\mkern\thinmuskip$}}{}%
+      }%
+  \endgroup%
   \penalty\binoppenalty%
 }
 %    \end{macrocode}
 % \end{macro}
-%
 % Relations.
 %    \begin{macrocode}
 \SetBreakableRel{\propto}
@@ -1123,7 +1594,7 @@
 \SetBreakableRel{\hookrightarrow}
 \SetBreakableRel{\rightleftharpoons}
 %    \end{macrocode}
-% From latexsym.
+% Commands from \textsf{latexsym}.
 %    \begin{macrocode}
 \SetBreakableBin{\lhd}
 \SetBreakableBin{\unlhd}
@@ -1134,10 +1605,9 @@
 \SetBreakableRel{\sqsubset}
 \SetBreakableRel{\sqsupset}
 %    \end{macrocode}
-% amsfonts
+% Support \textsf{amsfonts} package
 %    \begin{macrocode}
-\@ifpackageloaded{amsfonts}% amsfonts
-{
+\@ifpackageloaded{amsfonts}{
   \SetBreakableRel{\dashrightarrow} \SetBreakableRel{\dasharrow}
   \SetBreakableRel{\dashleftarrow}
   \SetBreakableRel{\vartriangleright}
@@ -1147,10 +1617,9 @@
   \SetBreakableRel{\rightsquigarrow} \SetBreakableRel{\leadsto}
 }{}
 %    \end{macrocode}
-% amssymb
+% Support \textsf{amssymb} package
 %    \begin{macrocode}
-\@ifpackageloaded{amssymb}% amssymb
-{
+\@ifpackageloaded{amssymb}{
   \SetBreakableBin{\boxdot}
   \SetBreakableBin{\boxplus}
   \SetBreakableBin{\boxtimes}
@@ -1330,10 +1799,9 @@
   \SetBreakableRel{\backepsilon}
 }{}
 %    \end{macrocode}
-% amstex
+% Support \textsf{amstex} package
 %    \begin{macrocode}
-\@ifpackageloaded{amstex}% amstex
-{
+\@ifpackageloaded{amstex}{
   \SetBreakableRel{\vartriangleright} \SetBreakableRel{\rhd}
   \SetBreakableRel{\vartriangleleft}  \SetBreakableRel{\lhd}
   \SetBreakableRel{\trianglerighteq}  \SetBreakableRel{\unrhd}
@@ -1341,10 +1809,9 @@
   \SetBreakableRel{\rightsquigarrow}  \SetBreakableRel{\leadsto}
 }{}
 %    \end{macrocode}
-% boisik
+% Support \textsf{boisik} package
 %    \begin{macrocode}
-\@ifpackageloaded{boisik}% boisik
-{
+\@ifpackageloaded{boisik}{
   \SetMathOperator{\intup}
   \SetOpenBracket{\binampersand}
   \SetBreakableRel{\upharpoonright}
@@ -1745,10 +2212,9 @@
   \SetBreakableRel{\leftrightarrowtriangle}
 }{}
 %    \end{macrocode}
-% euler
+% Support \textsf{euler} package
 %    \begin{macrocode}
-\@ifpackageloaded{euler}% euler
-{
+\@ifpackageloaded{euler}{% euler
   \SetBreakableRel{\uparrow}
   \SetBreakableRel{\downarrow}
   \SetBreakableRel{\updownarrow}
@@ -1759,10 +2225,9 @@
   % \SetBreakableRel{\rhook}
 }{}
 %    \end{macrocode}
-% fourier
+% Support \textsf{fourier} package
 %    \begin{macrocode}
-\@ifpackageloaded{fourier}% fourier
-{
+\@ifpackageloaded{fourier}{
   \SetMathOperator{\iint}
   \SetMathOperator{\iiint}
   \SetMathOperator{\oiint}
@@ -1793,10 +2258,9 @@
 }{}
 %    \end{macrocode}
 %
-% Lucida font (lucbmath,lucidabr,lucmin,lucmtime,luctime)
-%
+% 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}{%
@@ -2005,36 +2469,52 @@
   \SetBreakableRel{\backepsilon}
 \fi
 %    \end{macrocode}
-% mathbbol
+% Support \textsf{mathbbol} package
 %    \begin{macrocode}
-\@ifpackageloaded{mathbbol}% mathbbol
-{
+\@ifpackageloaded{mathbbol}{
   \SetOpenBracket{\Langle}
   \SetOpenBracket{\Lparen}
 }{}
 %    \end{macrocode}
-% mdwmath
+% Support \textsf{mathtools}/\textsf{empheq} packages
 %    \begin{macrocode}
-\@ifpackageloaded{mdwmath}% mdwmath
-{
+\@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{\mathchar\number\mathcode`\&}}
+    \catcode`\&\active
+    \xdef&{\noexpand\brokenbin{\rmathbr at mathchar{`\&}}}
   \endgroup
   \AtBeginDocument{\mathcode`\&=32768 }
 }{}
 %    \end{macrocode}
-% sbmm
+% Support \textsf{sbmm} package
 %    \begin{macrocode}
-\@ifpackageloaded{sbbm}% sbbm
-{
+\@ifpackageloaded{sbbm}{
   \SetOpenBracket{\Lparen}
 }{}
 %    \end{macrocode}
-% stmaryrd
+% Support \textsf{stmaryrd} package
 %    \begin{macrocode}
-\@ifpackageloaded{stmaryrd}% stmaryrd
-{
+\@ifpackageloaded{stmaryrd}{
   \SetOpenBracket{\Lbag}
   \SetOpenBracket{\llparenthesis}
   \SetOpenBracket{\binampersand}
@@ -2134,10 +2614,9 @@
   \SetBreakableRel{\Longmapsfrom}
 }{}
 %    \end{macrocode}
-% wasysym
+% Support \textsf{wasysym} package
 %    \begin{macrocode}
-\@ifpackageloaded{wasysym}% wasysym
-{
+\@ifpackageloaded{wasysym}{
   \SetMathOperator{\varint}
   \SetMathOperator{\iint}
   \SetMathOperator{\iiint}
@@ -2153,7 +2632,88 @@
   \SetBreakableRel{\logof}
 }{}
 %    \end{macrocode}
+%    \begin{macrocode}
+} % \rmathbr at patch@commands
+%    \end{macrocode}
 %
+% Execute \verb|\rmathbr at patch@commands| depending on options:
+%    \begin{macrocode}
+\ifrmathbr at patch@begindocument
+  \AtBeginDocument{\rmathbr at patch@commands}
+\else
+  \rmathbr at 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 at kv@brokenminus
+    \mathcode`\-=32768
+  \fi
+  \mathcode`\*=32768
+  \mathcode`\(=32768
+  \mathcode`\[=32768 %\]
+  \mathcode`\,=32768
+  \mathcode`\;=32768
+  \mathcode`\:=32768
+  \@ifundefined{resetMathstrut@}{}{% fix amsmath
+    \let\rmathbr at orig@resetMathstrut=\resetMathstrut@
+    \gdef\resetMathstrut@{%
+      \mathcode`\(=16424% "4028
+      \rmathbr at 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 at save@bm at general=\bm at general
+  \def\bm at general#1#2#3#4#5{
+    \rmathbr at save@bm at 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 at mathop##1{\unvcopy{\rmathbr at 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 at scriptsmode>0\relax
+    \let\rmathbr at save@xy=\xy
+    \let\rmathbr at save@endxy=\endxy
+    \def\xy{\begingroup\catcode`\^7\catcode`\_8\rmathbr at save@xy}
+    \def\endxy{\rmathbr at save@endxy\endgroup}
+    \PackageInfo{rmathbr}{Note: \string\xy and \string\endxy commands from 'xy'
+                                package have been patched}{}%
+  \fi
+}{}
+%    \end{macrocode}
+%
 % \iffalse
 %</package>
 % \fi

Modified: trunk/Master/texmf-dist/source/latex/rmathbr/rmathbr.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/rmathbr/rmathbr.ins	2020-12-11 21:47:38 UTC (rev 57113)
+++ trunk/Master/texmf-dist/source/latex/rmathbr/rmathbr.ins	2020-12-11 21:47:54 UTC (rev 57114)
@@ -1,4 +1,4 @@
-%% Copyright (C) 2008-2016 by Denis Ryabov <dryabov at yandex.ru>
+%% Copyright (C) 2008-2020 by Denis Ryabov <dryabov at yandex.ru>
 %% --------------------------------------------------------------------------
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License, either version 1.3
@@ -25,7 +25,7 @@
 
 This is a generated file.
 
-Copyright (C) 2008-2016 by Denis Ryabov <dryabov at yandex.ru>
+Copyright (C) 2008-2020 by Denis Ryabov <dryabov at yandex.ru>
 --------------------------------------------------------------------------
 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License, either version 1.3
@@ -45,9 +45,9 @@
 \Msg{* To finish the installation you have to move the following *}
 \Msg{* file into a directory searched by TeX:                    *}
 \Msg{*                                                           *}
-\Msg{*     rmathbr.sty                                          *}
+\Msg{*     rmathbr.sty                                           *}
 \Msg{*                                                           *}
-\Msg{* To produce the documentation run the file rmathbr.dtx    *}
+\Msg{* To produce the documentation run the file rmathbr.dtx     *}
 \Msg{* through LaTeX.                                            *}
 \Msg{*                                                           *}
 \Msg{* Happy TeXing!                                             *}

Modified: trunk/Master/texmf-dist/tex/latex/rmathbr/rmathbr.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/rmathbr/rmathbr.sty	2020-12-11 21:47:38 UTC (rev 57113)
+++ trunk/Master/texmf-dist/tex/latex/rmathbr/rmathbr.sty	2020-12-11 21:47:54 UTC (rev 57114)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 2008-2016 by Denis Ryabov <dryabov at yandex.ru>
+%% Copyright (C) 2008-2020 by Denis Ryabov <dryabov at yandex.ru>
 %% --------------------------------------------------------------------------
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License, either version 1.3
@@ -20,339 +20,353 @@
 %% 
 \NeedsTeXFormat{LaTeX2e}[1999/12/01]
 \ProvidesPackage{rmathbr}
-    [2016/04/10 1.0.3 Repeating of math operator at the broken line and the new line in inline equations]
+    [2020/12/11 1.1 Repeating of math operator at the broken line and the new
+                    line in inline equations]
 \RequirePackage{ifetex}
-\RequirePackage{mathstyle}
-\@ifpackageloaded{breqn}%
-{
+\RequirePackage{ifluatex}
+\RequirePackage{xkeyval}
+\edef\rmathbr at kv{\@currname.\@currext}
+\def\xDeclareBoolOptionX#1#2{%
+  \define at boolkey{\rmathbr at kv}[rmathbr at kv@]{#1}[true]{#2}%
+}
+\def\xDeclareChoiceOptionX#1[#2]#3[#4]#5{%
+  \define at choicekey{\rmathbr at kv}{#1}[#2]{#3}[#4]{#5}%
+}
+\@ifpackageloaded{breqn}{%
   \PackageError{rmathbr}{'rmathbr' package cannot be used together with 'breqn' package!}{}%
 }{}
-\@ifpackageloaded{xy}%
-{
-  \PackageError{rmathbr}{'rmathbr' package should be loaded before 'xy' package!}{}%
-}{}
 \def\nobr{\penalty\relpenalty}
+\def\SetBreakableRel#1{\rmathbr at setbreakable{#1}{\brokenrel}}
 \def\SetBreakableBin#1{\rmathbr at setbreakable{#1}{\brokenbin}}
-\def\SetBreakableRel#1{\rmathbr at setbreakable{#1}{\brokenrel}}
 \def\SetBreakableInner#1{\rmathbr at setbreakable{#1}{\brokeninner}}
 \def\SetOpenBracket#1{\rmathbr at nobrafter{#1}}
+\def\SetPunctuation#1{\rmathbr at nobrafter{#1}}
 \def\SetMathOperator#1{\rmathbr at setbreakable{#1}{\rmathbr at mathop}}
-\def\SetPunctuation#1{\rmathbr at nobrafter{#1}}
+\def\UnsetBrokenCmd#1{\rmathbr at unsetbroken{#1}}
+\def\BrokenBinOff{\rmathbr at brokenbinoff}
+\def\BrokenBinOn{\rmathbr at brokenbinon}
+\DeclareRobustCommand{\brokenrel}[1]{\rmathbr at brokenrel{#1}}
 \DeclareRobustCommand{\brokenbin}[1]{\rmathbr at brokenbin{#1}}
-\DeclareRobustCommand{\brokenrel}[1]{\rmathbr at brokenrel{#1}}
 \DeclareRobustCommand{\brokeninner}[1]{\rmathbr at brokeninner{#1}}
-\exhyphenpenalty=\relpenalty
-\relpenalty=13131
-\binoppenalty=14141
-\expandafter\everymath\expandafter{\the\everymath\nobr }
-\ifnum\catcode`\^=12%
-  \begingroup%
-    \catcode`\^\active
-    \global\let\rmathbr at superscript@text=^%
-  \endgroup%
-\else%
-  \let\rmathbr at superscript@text=^%
-\fi
-\ifnum\catcode`\_=12%
-  \begingroup%
-    \catcode`\_\active
-    \global\let\rmathbr at subscript@text=_%
-  \endgroup%
-\else%
-  \let\rmathbr at subscript@text=_%
-\fi
-\def\rmathbr at superscript#1{\rmathbr at superscript@text{{#1}}}
-\def\rmathbr at subscript#1{\rmathbr at subscript@text{{#1}}}
-\begingroup
-  \catcode`\^\active\gdef^{\rmathbr at superscript}
-  \catcode`\_\active\gdef_{\rmathbr at subscript}
-\endgroup
-\begingroup\catcode`\_=13\catcode`\^=13\lowercase{\endgroup
-\AtBeginDocument%
-{%
-  \ifnum\catcode`\^=13
-    \let\rmathbr at superscript@text at active=^
-    \DeclareRobustCommand{\rmathbrsuperscript}[1]{\rmathbr at superscript@text at active{{#1}}}
-  \else
-    \DeclareRobustCommand{\rmathbrsuperscript}[1]{\rmathbr at superscript@text{{#1}}}
+\xDeclareBoolOptionX{noactivechars}{
+  \ifrmathbr at kv@noactivechars
+    \PackageWarning{rmathbr}{^^J Option 'noactivechars' is deprecated.^^J
+                             Use 'scripts=noactive' instead.^^J}
+    \ExecuteOptionsX{scripts=noactive}
   \fi
-  \def^{\rmathbrsuperscript}
-  \def\rmathbr at superscript@macro{\rmathbrsuperscript}
-  \ifnum\catcode`\_=13
-    \let\rmathbr at subscript@text at active=_
-    \DeclareRobustCommand{\rmathbrsubscript}[1]{\rmathbr at subscript@text at active{{#1}}}
-  \else
-    \DeclareRobustCommand{\rmathbrsubscript}[1]{\rmathbr at subscript@text{{#1}}}
+}
+\xDeclareBoolOptionX{mathactivechars}{
+  \ifrmathbr at kv@mathactivechars
+    \PackageWarning{rmathbr}{^^J Option 'mathactivechars' is deprecated.^^J
+                             Use 'scripts=mathactive' instead.^^J}
+    \ExecuteOptionsX{scripts=mathactive}
   \fi
-  \def_{\rmathbrsubscript}
-  \def\rmathbr at subscript@macro{\rmathbrsubscript}
-}}
-\DeclareOption{mathactivechars}%
-{
-  \catcode`\^=12\catcode`\_=12
 }
-\DeclareOption{activechars}%
-{
-  \catcode`\^\active\catcode`\_\active
+\xDeclareBoolOptionX{activechars}{
+  \ifrmathbr at kv@activechars
+    \PackageWarning{rmathbr}{^^J Option 'activechars' is deprecated.^^J
+                             Use 'scripts=active' instead.^^J}
+    \ExecuteOptionsX{scripts=active}
+  \fi
 }
-\DeclareOption{noactivechars}%
-{
-  \catcode`\^=7\catcode`\_=8
+\let\rmathbr at scriptsmode=\@ne
+\xDeclareChoiceOptionX{scripts}[\val\nr]{noactive,mathactive,active}[mathactive]{
+  \ifcase\nr\relax
+    \let\rmathbr at scriptsmode=\z@
+  \or
+    \let\rmathbr at scriptsmode=\@ne
+  \or
+    \let\rmathbr at scriptsmode=\tw@
+  \fi
 }
-\ExecuteOptions{mathactivechars}%
-\ProcessOptions
-\begingroup
-  \catcode`\=\active
-  \ifnum\mathcode`\=<32768
-    \xdef={\noexpand\brokenbin{\mathchar\number\mathcode`\=}}
-  \else
-    \gdef={\brokenbin{\mathchar12349}}
+\newif\ifrmathbr at patch@begindocument
+\xDeclareChoiceOptionX{run}[\val\nr]{atload,atbegindocument,auto}[auto]{
+  \ifcase\nr\relax
+    \rmathbr at patch@begindocumentfalse
+  \or
+    \rmathbr at patch@begindocumenttrue
+  \or
+    \@ifpackageloaded{unicode-math}{\rmathbr at patch@begindocumenttrue}{}
+    \@ifpackageloaded{mathtools}{\rmathbr at patch@begindocumenttrue}{}
   \fi
-\endgroup
-\begingroup
-  \catcode`\+\active
-  \ifnum\mathcode`\+<32768
-    \xdef+{\noexpand\brokenbin{\mathchar\number\mathcode`\+}}
+}
+\xDeclareBoolOptionX{cdottimes}{}
+\xDeclareBoolOptionX{brokenminus}{}
+\xDeclareBoolOptionX{brokencolon}{}
+\xDeclareBoolOptionX{brokenbin}{%
+  \ifrmathbr at kv@brokenbin
   \else
-    \gdef+{\brokenbin{\mathchar8235}}
+    \AtBeginDocument{\BrokenBinOff}
   \fi
-\endgroup
-\begingroup
-  \catcode`\-\active
-  \ifnum\mathcode`\-<32768
-    \xdef-{\noexpand\brokenbin{\mathchar\number\mathcode`\-}}
-  \else
-    \gdef-{\brokenbin{\mathchar8704}}
-  \fi
-\endgroup
-\begingroup
-  \catcode`\*\active
-  \ifnum\mathcode`\*<32768
-    \xdef*{\noexpand\brokenbin{\mathchar\number\mathcode`\*}}
-  \else
-    \gdef*{\brokenbin{\mathchar8707}}
-  \fi
-\endgroup
-\begingroup
-  \ifnum\mathcode`\<<32768
-    \catcode`\<\active
-    \xdef<{\noexpand\brokenbin{\mathchar\number\mathcode`\<}}
-  \else
-    \catcode`\<\active
-    \gdef<{\brokenbin{\mathchar12604}}
-  \fi
-\endgroup
-\begingroup
-  \catcode`\>\active
-  \ifnum\mathcode`\><32768
-    \xdef>{\noexpand\brokenbin{\mathchar\number\mathcode`\>}}
-  \else
-    \gdef>{\brokenbin{\mathchar12606}}
-  \fi
-\endgroup
-\begingroup
-  \catcode`\(\active
-  \xdef({\mathopen\delimiter\number\delcode`\(\noexpand\nobr }
-\endgroup
-\begingroup
-  \catcode`\[\active %\]
-  \xdef[{\mathopen\delimiter\number\delcode`\[\noexpand\nobr }
-\endgroup
-\AtBeginDocument%
-{
-  \mathcode`\==32768% "8000
-  \mathcode`\<=32768
-  \mathcode`\>=32768
-  \mathcode`\+=32768
-  \mathcode`\-=32768
-  \mathcode`\*=32768
-  \mathcode`\_=32768
-  \mathcode`\^=32768
-  \mathcode`\(=32768
-  \mathcode`\[=32768 %\]
-  \mathcode`\:=32768
-  \mathcode`\,=32768
-  \mathcode`\;=32768
-  \let\rmathbr at orig@resetMathstrut=\resetMathstrut@
-  \begingroup
-    \gdef\resetMathstrut@
-    {
-      \mathcode`\(=16424% "4028
-      \rmathbr at orig@resetMathstrut
-      \mathcode`\(=32768% "8000
-    }
-    \gdef\newmcodes@
-    {
-      \mathcode`\'=39
-      \mathcode`\*=42
-      \mathcode`\.=24890% "613A
-      \mathcode`\-=45
-      \mathcode`\/=47
-      \mathcode`\:=24634% "603A
-      \relax
-    }
-  \endgroup%
 }
+\ExecuteOptionsX{scripts=mathactive}
+\ExecuteOptionsX{run=auto}
+\ExecuteOptionsX{cdottimes=false}
+\ExecuteOptionsX{brokenminus=true}
+\ExecuteOptionsX{brokencolon=false}
+\ExecuteOptionsX{brokenbin=true}
+\ProcessOptionsX
+\ifcase\rmathbr at scriptsmode
+  % nop
+\or
+  \AtBeginDocument{\catcode`\^=12\mathcode`\^=32768\catcode`\_=12\mathcode`\_=32768}
+\or
+  \AtBeginDocument{\catcode`\^\active\catcode`\_\active}
+\fi
+\mathchardef\rmathbr at orig@relpenalty=\relpenalty
+\mathchardef\rmathbr at orig@binoppenalty=\binoppenalty
+\ifluatex\else
+  \exhyphenpenalty=\relpenalty
+\fi
+\relpenalty=13131
+\binoppenalty=14141
+\expandafter\everymath\expandafter{\the\everymath\nobr }
+\begingroup\catcode`\^=7 \global\let\rmathbr at superscript@std=^\endgroup
+\begingroup\catcode`\^=12\global\let\rmathbr at superscript@other=^\endgroup
+\begingroup\catcode`\_=8 \global\let\rmathbr at subscript@std=_\endgroup
+\begingroup\catcode`\_=12\global\let\rmathbr at subscript@other=_\endgroup
+\begingroup\catcode`\'=12\global\let\rmathbr at prime='\endgroup
+\def\rmathbr at superscript#1{\rmathbr at superscript@std{{#1}}}
+\def\rmathbr at subscript#1{\rmathbr at subscript@std{{#1}}}
 \begingroup
-  \catcode`\:\active \gdef:{\futurelet\rmathbr at let@token\rmathbr at colontest}
+  \catcode`\^\active\gdef^{\rmathbr at superscript}
+  \catcode`\_\active\gdef_{\rmathbr at subscript}
 \endgroup
-\def\rmathbr at colontest%
-{
-  \ifx=\rmathbr at let@token
-    \expandafter\rmathbr at letsign
-  \else
-    \expandafter\rmathbr at colon
-  \fi
-}%
-\ifnum\mathcode`\:<32768
-  \edef\rmathbr at letsign#1{\noexpand\brokenrel{\mathchar\number\mathcode`\:\mathchar\number\mathcode`\=}}
-  \edef\rmathbr at colon{\noexpand\brokenrel{\mathchar\number\mathcode`\:}}
+\newif\ifrmathbr at activemathchar
+\ifx\Umathcode\@undefined
+  \def\rmathbr at checkmathchar#1{%
+    \ifnum\mathcode#1<32768\relax%
+      \rmathbr at activemathcharfalse%
+    \else%
+      \rmathbr at activemathchartrue%
+    \fi}
+  \def\rmathbr at mathchar#1{\mathchar\number\mathcode#1}
+  \def\rmathbr at makeactivemathopen#1{%
+    \begingroup
+      \xdef\@tempa{\mathopen\delimiter\number\delcode#1 \noexpand\nobr }
+      \begingroup\lccode`~=#1\catcode#1\active\lowercase{\endgroup\xdef~}{\@tempa}
+    \endgroup
+  }
 \else
-  \def\rmathbr at letsign#1{\brokenrel{\mathchar12346\mathchar12349}}
-  \def\rmathbr at colon{\brokenrel{\mathchar12346}}
-\fi
-\begingroup
-  \catcode`\,\active
-  \@ifpackageloaded{icomma}% check for 'icomma' package
-  {
-    \expandafter\gdef\expandafter\sm at rtcomma\expandafter{\sm at rtcomma\nobr}
-  }{
-    \ifx\domathcomma\undefined% check for 'eulervm' package with 'icomma' option
-      \ifnum\mathcode`\,<32768
-        \xdef,{\mathpunct\mathchar\number\mathcode`\,\noexpand\nobr }
+  \begingroup
+    \mathcode`\+="8000
+    \xdef\rmathbr at activemathcode{\number\Umathcodenum`\+}
+  \endgroup
+  \def\rmathbr at checkmathchar#1{%
+    \ifnum\Umathcodenum#1=\rmathbr at activemathcode\relax%
+      \expandafter\rmathbr at activemathchartrue%
+    \else%
+      \expandafter\rmathbr at activemathcharfalse%
+    \fi}
+  \def\rmathbr at mathchar#1{\Umathcharnum\number\Umathcodenum#1}
+  \def\rmathbr at truncdiv#1#2{((#1-(#2-1)/2)/#2)}
+  \def\rmathbr at modulo#1#2{(#1-\rmathbr at truncdiv{#1}{#2}*#2)}
+  \def\rmathbr at makeactivemathopen#1{%
+    \begingroup
+      \def\@tempa{\Udelcodenum#1}
+      \ifnum\@tempa<"1000000
+        \xdef\@tempb{\mathopen\delimiter\number\@tempa\space\noexpand\nobr }
       \else
-        \gdef,{\mathpunct\mathchar24891\nobr }
+        \xdef\@tempb{\mathopen\Udelimiter4 %
+\number\numexpr\rmathbr at truncdiv{\rmathbr at modulo{\@tempa}{"40000000}}{"200000}\relax%
+\space\number\numexpr\rmathbr at 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
+  }
+\fi
+\def\rmathbr at makeactivemath#1#2#3{
+  \begingroup
+    \rmathbr at checkmathchar{#1}
+    \lccode`~=#1
+    \catcode#1\active
+    \ifrmathbr at activemathchar
+      \PackageWarning{rmathbr}{Redeclare active math #1 symbol to default mathchar value}
+      \lowercase{\gdef~}{#2{#3}}
     \else
-      \expandafter\gdef\expandafter\domathcomma\expandafter{\domathcomma\nobr}
+      \lowercase{\xdef~}{\noexpand#2{\rmathbr at mathchar{#1}}}
     \fi
-  }
-\endgroup
-\begingroup
-  \catcode`\;\active
-  \@ifpackageloaded{program}%
-  {
-    \gdef;{\ifmmode\semicolon\;\nobr\else\@semicolon\fi}
-  }{
-    \ifnum\mathcode`\;<32768
-      \xdef;{\mathpunct\mathchar\number\mathcode`\;\noexpand\nobr }
+  \endgroup
+}
+\def\rmathbr at makeactivemathpunct#1#2{
+  \begingroup
+    \rmathbr at checkmathchar{#1}
+    \lccode`~=#1
+    \catcode#1\active
+    \ifrmathbr at activemathchar
+      \PackageWarning{rmathbr}{Redeclare active math #1 symbol to default mathchar value}
+      \lowercase{\gdef~}{\mathpunct#2\nobr }
     \else
-      \gdef;{\mathpunct\mathchar24635\nobr }
+      \lowercase{\xdef~}{\mathpunct\rmathbr at mathchar{#1} \noexpand\nobr }
     \fi
-  }
-\endgroup
-\def\rmathbr at ReDeclareRobustCommand#1#2% Command without arguments
-{
+  \endgroup
+}
+\newif\ifrmathbr at protected
+\def\rmathbr at ifprotected#1{%
+  \rmathbr at protectedfalse
+  \edef\str at cmd{\string#1\space}
+  \edef\meaning at cmd{\meaning#1}
+  \def\str at contains##1##2{\begingroup\edef\x{\endgroup\noexpand\in@{##1}{##2}}\x}
+  \str at contains\str at cmd\meaning at cmd
+  \ifin@
+    \str at contains{\string\protect\space}\meaning at cmd
+    \ifin@\rmathbr at protectedtrue\else
+      \str at contains{\string\x at protect\space}\meaning at cmd
+      \ifin@\rmathbr at protectedtrue\else
+        \str at contains{\string\@testopt\space}\meaning at cmd
+        \ifin@\rmathbr at protectedtrue\else
+          \str at contains{\string\@protected at testopt\space}\meaning at cmd
+          \ifin@\rmathbr at protectedtrue\fi
+        \fi
+      \fi
+    \fi
+  \fi
+}
+\def\rmathbr at ReDeclareRobustCommand#1#2{%
   \begingroup
-    \ifx#1\undefined
+    \ifx#1\@undefined
     \else
       \edef\var at orig@I{rmathbr at orig@\expandafter\@gobble\string#1}
       \edef\var at Ispace{\expandafter\@gobble\string#1 }
       \expandafter\ifx\csname\var at orig@I\endcsname\relax
-        \expandafter\ifx\csname\var at Ispace\endcsname\relax
-          \global\expandafter\let\csname\var at orig@I\endcsname#1
+        \ifetex
+          \expandafter\global\expandafter\let\csname\var at orig@I\endcsname#1
         \else
-          \global\expandafter\let\csname\var at orig@I\expandafter\endcsname\csname\var at Ispace\endcsname
+          \rmathbr at ifprotected#1
+          \ifrmathbr at protected
+            \expandafter\global\expandafter\let\csname\var at orig@I\expandafter\endcsname%
+\csname\var at Ispace\endcsname
+          \else
+            \expandafter\global\expandafter\let\csname\var at orig@I\endcsname#1
+          \fi
         \fi
       \fi
-      \expandafter\gdef\csname\var at Ispace\endcsname{#2}% no arguments
-      \xdef#1{\noexpand\protect\expandafter\noexpand\csname\var at Ispace\endcsname}
+      \ifetex
+        \protected\gdef#1{#2}
+      \else
+        \expandafter\gdef\csname\var at Ispace\endcsname{#2}% no arguments
+        \xdef#1{\noexpand\protect\expandafter\noexpand\csname\var at Ispace\endcsname}
+      \fi
     \fi
   \endgroup%
 }
-\def\rmathbr at ReDeclareRobustCommandI#1#2% Command with one argument
-{
+\def\rmathbr at ReDeclareRobustCommandI#1#2{%
   \begingroup
-    \ifx#1\undefined
+    \ifx#1\@undefined
     \else
       \edef\var at orig@I{rmathbr at orig@\expandafter\@gobble\string#1}
-      \edef\var at Ispace{\expandafter\@gobble\string#1 }
+      \edef\var at Ispace{\expandafter\@gobble\string#1\space}
       \expandafter\ifx\csname\var at orig@I\endcsname\relax
-        \expandafter\ifx\csname\var at Ispace\endcsname\relax
-          \global\expandafter\let\csname\var at orig@I\endcsname#1
+        \ifetex
+          \expandafter\global\expandafter\let\csname\var at orig@I\endcsname#1
         \else
-          \global\expandafter\let\csname\var at orig@I\expandafter\endcsname\csname\var at Ispace\endcsname
+          \rmathbr at ifprotected#1
+          \ifrmathbr at protected
+            \expandafter\global\expandafter\let\csname\var at orig@I\expandafter\endcsname%
+\csname\var at Ispace\endcsname
+          \else
+            \expandafter\global\expandafter\let\csname\var at orig@I\endcsname#1
+          \fi
         \fi
       \fi
-      \expandafter\gdef\csname\var at Ispace\endcsname##1{#2}% one argument
-      \xdef#1{\noexpand\protect\expandafter\noexpand\csname\var at Ispace\endcsname}
+      \ifetex
+        \protected\gdef#1##1{#2}
+      \else
+        \expandafter\gdef\csname\var at Ispace\endcsname##1{#2}% one argument
+        \xdef#1{\noexpand\protect\expandafter\noexpand\csname\var at Ispace\endcsname}
+      \fi
     \fi
   \endgroup%
 }
-\def\rmathbr at setbrokens%
-{
-  \rmathbr at ReDeclareRobustCommandI{\brokenbin}{\rmathbr at brokenbin{##1}}
-  \rmathbr at ReDeclareRobustCommandI{\brokenrel}{\rmathbr at brokenrel{##1}}
-  \rmathbr at ReDeclareRobustCommandI{\brokeninner}{\rmathbr at brokeninner{##1}}%
+\rmathbr at ReDeclareRobustCommandI{\brokenrel}{\rmathbr at brokenrel{#1}}
+\rmathbr at ReDeclareRobustCommandI{\brokenbin}{\rmathbr at brokenbin{#1}}
+\rmathbr at ReDeclareRobustCommandI{\brokeninner}{\rmathbr at brokeninner{#1}}%
+\let\rmathbr at save@brokenrel=\brokenrel
+\let\rmathbr at save@brokenbin at on=\brokenbin
+\let\rmathbr at save@brokenbin=\brokenbin
+\let\rmathbr at save@brokeninner=\brokeninner
+\def\rmathbr at brokenbinon{%
+  \let\rmathbr at save@brokenbin=\rmathbr at save@brokenbin at on
+  \ifx\brokenbin\@firstofone\else
+    \let\brokenbin=\rmathbr at save@brokenbin
+  \fi
 }
-\def\rmathbr at unsetbrokens%
-{
-  \def\brokenbin##1{##1}
-  \def\brokenrel##1{##1}
-  \def\brokeninner##1{##1}%
+\def\rmathbr at brokenbinoff{%
+  \let\rmathbr at save@brokenbin=\mathbin
+  \ifx\brokenbin\@firstofone\else
+    \let\brokenbin=\rmathbr at save@brokenbin
+  \fi
 }
-\def\rmathbr at brokenbin#1%
-{
-  \relax
+\def\rmathbr at setbrokens{%
+  \let\brokenrel=\rmathbr at save@brokenrel
+  \let\brokenbin=\rmathbr at save@brokenbin
+  \let\brokeninner=\rmathbr at save@brokeninner
+  \let\rmathbr at colontest=\rmathbr at save@colontest
+}
+\def\rmathbr at unsetbrokens{%
+  \let\brokenrel=\@firstofone
+  \let\brokenbin=\@firstofone
+  \let\brokeninner=\@firstofone
+  \let\rmathbr at colontest=\rmathbr at colon@std
+}
+\def\rmathbr at brokenrel#1{%
   \def\rmathbr at arg{#1}
-  \def\rmathbr at this{\rmathbr at brokenbin}
-  \def\rmathbr at output{\rmathbr@@brokenbin}
+  \let\rmathbr at this=\rmathbr at brokenrel
+  \let\rmathbr at output=\rmathbr@@brokenrel
   \futurelet\rmathbr at let@token\rmathbr at brokenop%
 }
-\def\rmathbr at brokenrel#1%
-{
-  \relax
+\def\rmathbr at brokenbin#1{%
   \def\rmathbr at arg{#1}
-  \def\rmathbr at this{\rmathbr at brokenrel}
-  \def\rmathbr at output{\rmathbr@@brokenrel}
+  \let\rmathbr at this=\rmathbr at brokenbin
+  \let\rmathbr at output=\rmathbr@@brokenbin
   \futurelet\rmathbr at let@token\rmathbr at brokenop%
 }
-\def\rmathbr at brokeninner#1%
-{
-  \relax
+\def\rmathbr at brokeninner#1{%
   \def\rmathbr at arg{#1}
-  \def\rmathbr at this{\rmathbr at brokeninner}
-  \def\rmathbr at output{\rmathbr@@brokeninner}
+  \let\rmathbr at this=\rmathbr at brokeninner
+  \let\rmathbr at output=\rmathbr@@brokeninner
   \futurelet\rmathbr at let@token\rmathbr at brokenop%
 }
-\def\rmathbr at mathop#1%
-{
-  \relax
+\def\rmathbr at mathop#1{%
   \def\rmathbr at arg{#1}
-  \def\rmathbr at this{\rmathbr at mathop}
-  \def\rmathbr at output{\rmathbr@@mathop}
+  \let\rmathbr at this=\rmathbr at mathop
+  \let\rmathbr at output=\rmathbr@@mathop
   \futurelet\rmathbr at let@token\rmathbr at brokenop%
 }
-\def\rmathbr@@brokenbin#1%
-{
+\def\rmathbr@@brokenrel#1{%
   \ifnum\lastpenalty=\relpenalty
-    \mathbin{#1}
+    \mathrel{#1}
   \else
-    \mathbin{#1}
+    \mathrel{#1}
     \ifx$\rmathbr at let@token
     \else
-      \rmathbr at selector{#1}
+      \begingroup
+        \hyphenpenalty\rmathbr at orig@relpenalty
+        \rmathbr at selector{#1}
+      \endgroup
     \fi
   \fi
   \rmathbr at setbrokens
-  \penalty\binoppenalty %
+  \penalty\relpenalty %
 }
-\def\rmathbr@@brokenrel#1%
-{
+\def\rmathbr@@brokenbin#1{%
   \ifnum\lastpenalty=\relpenalty
-    \mathrel{#1}
+    \mathbin{#1}
   \else
-    \mathrel{#1}
+    \mathbin{#1}
     \ifx$\rmathbr at let@token
     \else
-      \rmathbr at selector{#1}
+      \begingroup
+        \hyphenpenalty\rmathbr at orig@binoppenalty
+        \rmathbr at selector{#1}
+      \endgroup
     \fi
   \fi
   \rmathbr at setbrokens
-  \penalty\relpenalty %
+  \penalty\binoppenalty %
 }
-\def\rmathbr@@brokeninner#1%
-{
+\def\rmathbr@@brokeninner#1{%
   \ifnum\lastpenalty=\relpenalty
     \mathinner{#1}
   \else
@@ -359,19 +373,20 @@
     \mathinner{#1}
     \ifx$\rmathbr at let@token
     \else
-      \rmathbr at selector{#1}
+      \begingroup
+        \hyphenpenalty\rmathbr at orig@relpenalty
+        \rmathbr at selector{#1}
+      \endgroup
     \fi
   \fi
   \rmathbr at setbrokens
   \penalty\relpenalty %
 }
-\def\rmathbr@@mathop#1%
-{
+\def\rmathbr@@mathop#1{%
   \rmathbr at setbrokens
   #1\nobr %
 }
-\def\rmathbr at selector#1%
-{
+\def\rmathbr at selector#1{%
   \mathchoice
     {\discretionary{}{\hbox{$\m at th\displaystyle#1$}}{}}
     {\discretionary{}{\hbox{$\m at th\textstyle#1$}}{}}
@@ -378,83 +393,204 @@
     {\discretionary{}{\hbox{$\m at th\scriptstyle#1$}}{}}
     {\discretionary{}{\hbox{$\m at th\scriptscriptstyle#1$}}{}}%
 }
-\begingroup\catcode`\_=12\catcode`\^=12
-\gdef\rmathbr at brokenop%
-{
+\def\rmathbr at brokenop{%
   \ifmmode
     \rmathbr at unsetbrokens
-    \ifx\rmathbr at subscript@macro\rmathbr at let@token
+    \ifx\rmathbr at subscript@std\rmathbr at let@token
       \let\@command=\rmathbr at brokenglue
-    \else\ifx_\rmathbr at let@token
+    \else\ifx\rmathbr at subscript@other\rmathbr at let@token
       \let\@command=\rmathbr at brokenglue
-    \else\ifx\rmathbr at superscript@macro\rmathbr at let@token
+    \else\ifx\rmathbr at superscript@std\rmathbr at let@token
       \let\@command=\rmathbr at brokenglue
-    \else\ifx^\rmathbr at let@token
+    \else\ifx\rmathbr at superscript@other\rmathbr at let@token
       \let\@command=\rmathbr at brokenglue
     \else\ifx\limits\rmathbr at let@token
       \let\@command=\rmathbr at brokenskip
     \else\ifx\nolimits\rmathbr at let@token
       \let\@command=\rmathbr at brokenskip
+    \else\ifx\rmathbr at prime\rmathbr at let@token
+      \let\@command=\rmathbr at brokenskip
     \else\ifx\relax\rmathbr at let@token
       \let\@command=\rmathbr at brokenskip
     \else
       \let\@command=\rmathbr at output
-    \fi\fi\fi\fi\fi\fi\fi
+    \fi\fi\fi\fi\fi\fi\fi\fi
   \else
     \let\@command=\relax
   \fi
   \expandafter\@command\expandafter{\rmathbr at arg}%
 }
-\endgroup
-\def\rmathbr at brokenglue#1#2#3%
-{
+\def\rmathbr at brokenglue#1#2#3{%
   \def\rmathbr at temp{#1#2{#3}}
   \expandafter\rmathbr at this\expandafter{\rmathbr at temp}%
 }
-\def\rmathbr at brokenskip#1#2%
-{
+\def\rmathbr at brokenskip#1#2{%
   \def\rmathbr at temp{#1#2}
   \expandafter\rmathbr at this\expandafter{\rmathbr at temp}%
 }
-\def\rmathbr at setbreakable#1#2%
-{
+\def\rmathbr at setbreakable#1#2{%
   \begingroup
-    \ifx#1\undefined
+    \ifx#1\@undefined
     \else
       \edef\rmathbr at orig{rmathbr at orig@\expandafter\@gobble\string#1}
       \expandafter\ifx\csname\rmathbr at orig\endcsname\relax
-        \expandafter\rmathbr at ReDeclareRobustCommand\expandafter#1\expandafter{\expandafter#2\expandafter{\csname\rmathbr at orig\endcsname}}
+        \expandafter\rmathbr at ReDeclareRobustCommand\expandafter#1\expandafter{%
+\expandafter#2\expandafter{\csname\rmathbr at orig\endcsname}}
       \fi
     \fi
   \endgroup%
 }
-\def\rmathbr at nobrafter#1%
-{
+\def\rmathbr at nobrafter#1{%
   \begingroup
-    \ifx#1\undefined
+    \ifx#1\@undefined
     \else
       \edef\rmathbr at orig{rmathbr at orig@\expandafter\@gobble\string#1}
       \expandafter\ifx\csname\rmathbr at orig\endcsname\relax
-        \expandafter\rmathbr at ReDeclareRobustCommand\expandafter#1\expandafter{\csname\rmathbr at orig\endcsname\nobr}
+        \expandafter\rmathbr at ReDeclareRobustCommand\expandafter#1\expandafter{%
+\csname\rmathbr at orig\endcsname\nobr}
       \fi
     \fi
   \endgroup%
 }
-\rmathbr at ReDeclareRobustCommandI{\not}%
-{
+\def\rmathbr at unsetbroken#1{
   \begingroup
-    \edef\rmathbr at orig{rmathbr at orig@\expandafter\@gobble\string#1}
-    \expandafter\ifx\csname\rmathbr at orig\endcsname\relax
-      \brokenrel{\rmathbr at orig@not#1}
+    \ifx#1\@undefined
     \else
-      \expandafter\brokenrel\expandafter{\expandafter\rmathbr at orig@not\csname\rmathbr at orig\endcsname}
+      \edef\rmathbr at orig{rmathbr at orig@\expandafter\@gobble\string#1}
+      \expandafter\ifx\csname\rmathbr at orig\endcsname\relax
+  \else
+    \expandafter\global\expandafter\let\expandafter#1\csname\rmathbr at orig\endcsname
+      \fi
     \fi
   \endgroup%
 }
-\rmathbr at ReDeclareRobustCommandI{\bigl}{\rmathbr at mathop{\mathopen\big#1}}
-\rmathbr at ReDeclareRobustCommandI{\Bigl}{\rmathbr at mathop{\mathopen\Big#1}}
-\rmathbr at ReDeclareRobustCommandI{\biggl}{\rmathbr at mathop{\mathopen\bigg#1}}
-\rmathbr at ReDeclareRobustCommandI{\Biggl}{\rmathbr at mathop{\mathopen\Bigg#1}}
+\def\rmathbr at patch@commands{%
+\rmathbr at makeactivemath{`\=}{\brokenrel}{\mathchar12349}
+\rmathbr at makeactivemath{`\<}{\brokenrel}{\mathchar12604}
+\rmathbr at makeactivemath{`\>}{\brokenrel}{\mathchar12606}
+\rmathbr at makeactivemath{`\+}{\brokenbin}{\mathchar8235}
+\ifrmathbr at kv@brokenminus
+  \rmathbr at makeactivemath{`\-}{\brokenbin}{\mathchar8704}
+\fi
+\rmathbr at makeactivemath{`\*}{\brokenbin}{\mathchar8707}
+\rmathbr at makeactivemathopen{`\(}
+\rmathbr at makeactivemathopen{`\[}
+\@ifpackageloaded{icomma}{%
+  \expandafter\def\expandafter\sm at rtcomma\expandafter{\sm at rtcomma\nobr}
+}{
+  \ifx\domathcomma\@undefined%
+    \rmathbr at makeactivemathpunct{`\,}{\mathchar24891}
+  \else%
+    \expandafter\def\expandafter\domathcomma\expandafter{\domathcomma\nobr}
+  \fi
+}
+\@ifpackageloaded{program}{%
+  \begingroup
+    \catcode`\;\active
+    \lccode`\~=`\;%
+    \lowercase{\gdef~}{\ifmmode\semicolon\;\nobr\else\@semicolon\fi}
+  \endgroup
+}{
+  \rmathbr at makeactivemathpunct{`\;}{\mathchar24635}
+}
+\begingroup%
+  \catcode`\:\active%
+  \lccode`\~=`\:%
+  \lowercase{\gdef~}{\rmathbr at colontest}%
+\endgroup
+\def\rmathbr at colontest{\futurelet\rmathbr at let@token\rmathbr at do@colontest}
+\def\rmathbr at do@colontest{%
+  \ifx=\rmathbr at let@token
+    \expandafter\rmathbr at letsign
+  \else
+    \expandafter\rmathbr at colon
+  \fi
+}%
+\rmathbr at checkmathchar{`\:}
+\ifrmathbr at activemathchar
+  \PackageWarning{rmathbr}{Redeclare active math `\: symbol to default mathchar value}
+  \def\rmathbr at colon@std{\mathchar12346}
+  \ifrmathbr at kv@brokencolon
+    \def\rmathbr at colon{\brokenbin{\rmathbr at colon@std}}
+  \else
+    \def\rmathbr at colon{\mathbin{\rmathbr at colon@std}}
+  \fi
+  \def\rmathbr at letsign##1{\brokenrel{\rmathbr at colon@std\mathchar12349}}
+\else
+  \edef\rmathbr at colon@std{\rmathbr at mathchar{`\:}}
+  \ifrmathbr at kv@brokencolon
+    \def\rmathbr at colon{\brokenbin{\rmathbr at colon@std}}
+  \else
+    \def\rmathbr at colon{\mathbin{\rmathbr at colon@std}}
+  \fi
+  \edef\rmathbr at letsign##1{\noexpand\brokenrel{\rmathbr at colon@std\rmathbr at mathchar{`\=}}}
+\fi
+\let\rmathbr at save@colontest=\rmathbr at colontest%
+\@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 at mathop}
+          \else\ifx##3\mathpunct
+            \let\cmd=\nobr
+          \fi\fi\fi\fi
+          \ifx\cmd\relax\else
+            \edef\var at orig@name{rmathbr at orig@\expandafter\@gobble\string##2}
+            \expandafter\def\expandafter\var at orig\expandafter{\csname\var at orig@name\endcsname}
+            \rmathbr at checkmathchar{\number##1}
+            \ifrmathbr at activemathchar
+              \begingroup
+                \lccode`~=\number##1
+                \catcode\number##1\active
+                \lowercase{\endgroup\expandafter\global\expandafter\let\var at orig~}
+            \else
+              \expandafter\xdef\var at orig{\rmathbr at mathchar{\number##1}}
+              \global\mathcode\number##1="8000
+            \fi
+            \ifx\cmd\nobr
+              \edef\@tempa{\expandafter\noexpand\var at orig\noexpand\nobr}
+            \else
+              \edef\@tempa{\expandafter\noexpand\cmd{\expandafter\noexpand\var at 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
+}{}
+\rmathbr at ReDeclareRobustCommandI{\not}{%
+  \begingroup
+    \edef\rmathbr at orig{rmathbr at orig@\expandafter\@gobble\string##1}
+    \expandafter\let\expandafter\rmathbr at origmacro\csname\rmathbr at orig\endcsname
+    \ifx\rmathbr at origmacro##1\relax
+      \begingroup
+        \let##1=\rmathbr at origmacro
+        \brokenrel{\rmathbr at orig@not##1}
+      \endgroup
+    \else
+      \brokenrel{\rmathbr at orig@not##1}
+    \fi
+  \endgroup%
+}
+\rmathbr at ReDeclareRobustCommandI{\bigl}{\rmathbr at mathop{\mathopen\big##1}}
+\rmathbr at ReDeclareRobustCommandI{\Bigl}{\rmathbr at mathop{\mathopen\Big##1}}
+\rmathbr at ReDeclareRobustCommandI{\biggl}{\rmathbr at mathop{\mathopen\bigg##1}}
+\rmathbr at ReDeclareRobustCommandI{\Biggl}{\rmathbr at mathop{\mathopen\Bigg##1}}
 \SetOpenBracket{\lmoustache}
 \SetOpenBracket{\langle}
 \SetOpenBracket{\lbrace}
@@ -518,51 +654,50 @@
 \SetBreakableBin{\times}
 \SetBreakableBin{\cdot}
 \def\rmathbr at cdott{%
-  %% inplace-expanded mathchoice from mathstyle.sty
-  \mathchoice{%
-    \mkern\medmuskip$%
-    \discretionary{\the\textfont2\char2}{\the\textfont2\char2}{\the\textfont2\char1}%
-    $\displaystyle\mkern\medmuskip%
-  }{%
-    \mkern\medmuskip$%
-    \discretionary{\the\textfont2\char2}{\the\textfont2\char2}{\the\textfont2\char1}%
-    $\textstyle\mkern\medmuskip%
-  }{%
-    $%
-    \discretionary{\the\scriptfont2\char2}{\the\scriptfont2\char2}{\the\scriptfont2\char1}%
-    $\scriptstyle%
-  }{%
-    $%
-    \discretionary{\the\scriptscriptfont2\char2}{\the\scriptscriptfont2\char2}{\the\scriptscriptfont2\char1}%
-    $\scriptscriptstyle%
-  }
+  $\begingroup\hyphenpenalty\rmathbr at orig@binoppenalty\discretionary%
+    {\hbox{$\m at th\rmathbr at orig@times$}}%
+    {\hbox{$\m at th\rmathbr at orig@times$}}%
+    {\hbox{$\m at th\mkern\medmuskip\rmathbr at orig@cdot\mkern\medmuskip$}}\endgroup$
 }
 \def\cdott{%
-  \ensuremath
-  \ifetex
-    \ifinner%
-      \ifnum\currentgrouptype=15\relax
-        \rmathbr at cdott
+  \ifmmode
+    \ifetex
+      \ifinner%
+        \ifnum\currentgrouptype=15\relax
+          \rmathbr at cdott
+        \else
+          \rmathbr at orig@cdot
+        \fi
       \else
-        \cdot
+        \rmathbr at orig@cdot
       \fi
     \else
-      \cdot
+      \rmathbr at cdott
     \fi
   \else
-    \rmathbr at cdott
+    \rmathbr at orig@cdot
   \fi
 }
+\ifrmathbr at kv@cdottimes
+  \let\cdot\cdott
+\fi
 \def\*{\mathbin{}%
-  \mathchoice{%
-      \discretionary{\hbox{$\m at th\displaystyle\times$}}{\hbox{$\m at th\displaystyle\times$}}{}%
-    }{%
-      \discretionary{\hbox{$\m at th\textstyle\times$}}{\hbox{$\m at th\textstyle\times$}}{}%
-    }{%
-      \discretionary{\hbox{$\m at th\scriptstyle\times$}}{\hbox{$\m at th\scriptstyle\times$}}{}%
-    }{%
-      \discretionary{\hbox{$\m at th\scriptscriptstyle\times$}}{\hbox{$\m at th\scriptscriptstyle\times$}}{}%
-    }%
+  \begingroup%
+    \hyphenpenalty\rmathbr at orig@binoppenalty%
+    \mathchoice{%
+        \discretionary{\hbox{$\m at th\displaystyle\mkern\thinmuskip\times$}}%
+{\hbox{$\m at th\displaystyle\times\mkern\thinmuskip$}}{}%
+      }{%
+        \discretionary{\hbox{$\m at th\textstyle\mkern\thinmuskip\times$}}%
+{\hbox{$\m at th\textstyle\times\mkern\thinmuskip$}}{}%
+      }{%
+        \discretionary{\hbox{$\m at th\scriptstyle\mkern\thinmuskip\times$}}%
+{\hbox{$\m at th\scriptstyle\times\mkern\thinmuskip$}}{}%
+      }{%
+        \discretionary{\hbox{$\m at th\scriptscriptstyle\mkern\thinmuskip\times$}}%
+{\hbox{$\m at th\scriptscriptstyle\times\mkern\thinmuskip$}}{}%
+      }%
+  \endgroup%
   \penalty\binoppenalty%
 }
 \SetBreakableRel{\propto}
@@ -634,8 +769,7 @@
 \SetBreakableRel{\leadsto}
 \SetBreakableRel{\sqsubset}
 \SetBreakableRel{\sqsupset}
-\@ifpackageloaded{amsfonts}% amsfonts
-{
+\@ifpackageloaded{amsfonts}{
   \SetBreakableRel{\dashrightarrow} \SetBreakableRel{\dasharrow}
   \SetBreakableRel{\dashleftarrow}
   \SetBreakableRel{\vartriangleright}
@@ -644,8 +778,7 @@
   \SetBreakableRel{\trianglelefteq}
   \SetBreakableRel{\rightsquigarrow} \SetBreakableRel{\leadsto}
 }{}
-\@ifpackageloaded{amssymb}% amssymb
-{
+\@ifpackageloaded{amssymb}{
   \SetBreakableBin{\boxdot}
   \SetBreakableBin{\boxplus}
   \SetBreakableBin{\boxtimes}
@@ -824,8 +957,7 @@
   \SetBreakableRel{\curvearrowright}
   \SetBreakableRel{\backepsilon}
 }{}
-\@ifpackageloaded{amstex}% amstex
-{
+\@ifpackageloaded{amstex}{
   \SetBreakableRel{\vartriangleright} \SetBreakableRel{\rhd}
   \SetBreakableRel{\vartriangleleft}  \SetBreakableRel{\lhd}
   \SetBreakableRel{\trianglerighteq}  \SetBreakableRel{\unrhd}
@@ -832,8 +964,7 @@
   \SetBreakableRel{\trianglelefteq}   \SetBreakableRel{\unlhd}
   \SetBreakableRel{\rightsquigarrow}  \SetBreakableRel{\leadsto}
 }{}
-\@ifpackageloaded{boisik}% boisik
-{
+\@ifpackageloaded{boisik}{
   \SetMathOperator{\intup}
   \SetOpenBracket{\binampersand}
   \SetBreakableRel{\upharpoonright}
@@ -1233,8 +1364,7 @@
   \SetBreakableRel{\rightarrowtriangle}
   \SetBreakableRel{\leftrightarrowtriangle}
 }{}
-\@ifpackageloaded{euler}% euler
-{
+\@ifpackageloaded{euler}{% euler
   \SetBreakableRel{\uparrow}
   \SetBreakableRel{\downarrow}
   \SetBreakableRel{\updownarrow}
@@ -1244,8 +1374,7 @@
   % \SetBreakableRel{\lhook}
   % \SetBreakableRel{\rhook}
 }{}
-\@ifpackageloaded{fourier}% fourier
-{
+\@ifpackageloaded{fourier}{
   \SetMathOperator{\iint}
   \SetMathOperator{\iiint}
   \SetMathOperator{\oiint}
@@ -1274,7 +1403,6 @@
   \SetBreakableRel{\curvearrowright}
   \SetBreakableRel{\Downarrow}
 }{}
-
 \ifnum\@ifpackageloaded{lucbmath}{1}{%
 \@ifpackageloaded{lucidabr}{1}{%
 \@ifpackageloaded{lucmin}{1}{%
@@ -1482,25 +1610,38 @@
   \SetBreakableRel{\curvearrowright}
   \SetBreakableRel{\backepsilon}
 \fi
-\@ifpackageloaded{mathbbol}% mathbbol
-{
+\@ifpackageloaded{mathbbol}{
   \SetOpenBracket{\Langle}
   \SetOpenBracket{\Lparen}
 }{}
-\@ifpackageloaded{mdwmath}% mdwmath
-{
+\@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}
+}{}
+\@ifpackageloaded{mdwmath}{
   \SetBreakableBin{\bitand}
   \begingroup
-    \catcode`\&\active \xdef&{\noexpand\brokenbin{\mathchar\number\mathcode`\&}}
+    \catcode`\&\active
+    \xdef&{\noexpand\brokenbin{\rmathbr at mathchar{`\&}}}
   \endgroup
   \AtBeginDocument{\mathcode`\&=32768 }
 }{}
-\@ifpackageloaded{sbbm}% sbbm
-{
+\@ifpackageloaded{sbbm}{
   \SetOpenBracket{\Lparen}
 }{}
-\@ifpackageloaded{stmaryrd}% stmaryrd
-{
+\@ifpackageloaded{stmaryrd}{
   \SetOpenBracket{\Lbag}
   \SetOpenBracket{\llparenthesis}
   \SetOpenBracket{\binampersand}
@@ -1599,8 +1740,7 @@
   \SetBreakableRel{\longmapsfrom}
   \SetBreakableRel{\Longmapsfrom}
 }{}
-\@ifpackageloaded{wasysym}% wasysym
-{
+\@ifpackageloaded{wasysym}{
   \SetMathOperator{\varint}
   \SetMathOperator{\iint}
   \SetMathOperator{\iiint}
@@ -1615,6 +1755,69 @@
   \SetBreakableBin{\ocircle}
   \SetBreakableRel{\logof}
 }{}
+} % \rmathbr at patch@commands
+\ifrmathbr at patch@begindocument
+  \AtBeginDocument{\rmathbr at patch@commands}
+\else
+  \rmathbr at patch@commands
+\fi
+\AtBeginDocument{%
+  \mathcode`\==32768% "8000
+  \mathcode`\<=32768
+  \mathcode`\>=32768
+  \mathcode`\+=32768
+  \ifrmathbr at kv@brokenminus
+    \mathcode`\-=32768
+  \fi
+  \mathcode`\*=32768
+  \mathcode`\(=32768
+  \mathcode`\[=32768 %\]
+  \mathcode`\,=32768
+  \mathcode`\;=32768
+  \mathcode`\:=32768
+  \@ifundefined{resetMathstrut@}{}{% fix amsmath
+    \let\rmathbr at orig@resetMathstrut=\resetMathstrut@
+    \gdef\resetMathstrut@{%
+      \mathcode`\(=16424% "4028
+      \rmathbr at orig@resetMathstrut
+      \mathcode`\(=32768% "8000
+    }
+    \gdef\newmcodes@{%
+      \mathcode`\'=39
+      \mathcode`\*=42
+      \mathcode`\.=24890% "613A
+      \mathcode`\-=45
+      \mathcode`\/=47
+      \mathcode`\:=24634% "603A
+      \relax
+    }
+  }%
+}
+\@ifpackageloaded{bm}{%
+  \let\rmathbr at save@bm at general=\bm at general
+  \def\bm at general#1#2#3#4#5{
+    \rmathbr at save@bm at 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 at mathop##1{\unvcopy{\rmathbr at 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}{}%
+}{}
+\@ifpackageloaded{xy}{%
+  \ifnum\rmathbr at scriptsmode>0\relax
+    \let\rmathbr at save@xy=\xy
+    \let\rmathbr at save@endxy=\endxy
+    \def\xy{\begingroup\catcode`\^7\catcode`\_8\rmathbr at save@xy}
+    \def\endxy{\rmathbr at save@endxy\endgroup}
+    \PackageInfo{rmathbr}{Note: \string\xy and \string\endxy commands from 'xy'
+                                package have been patched}{}%
+  \fi
+}{}
 \endinput
 %%
 %% End of file `rmathbr.sty'.



More information about the tex-live-commits mailing list.