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