1108 lines
35 KiB
Plaintext
1108 lines
35 KiB
Plaintext
|
%%
|
||
|
%% This is file `mathtools.sty',
|
||
|
%% generated with the docstrip utility.
|
||
|
%%
|
||
|
%% The original source files were:
|
||
|
%%
|
||
|
%% mathtools.dtx (with options: `package')
|
||
|
%%
|
||
|
%% This is a generated file.
|
||
|
%%
|
||
|
%% Copyright (C) 2002-2007 by Morten Hoegholm <mh.ctan@gmail.com>
|
||
|
%%
|
||
|
%% 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".
|
||
|
%%
|
||
|
%% This Current Maintainer of this work is Morten Hoegholm.
|
||
|
%%
|
||
|
%% This work consists of the main source file mathtools.dtx
|
||
|
%% and the derived files
|
||
|
%% mathtools.sty, mathtools.pdf, mathtools.ins, mathtools.drv.
|
||
|
%%
|
||
|
\ProvidesPackage{mathtools}%
|
||
|
[2008/08/01 v1.06 mathematical typesetting tools (MH)]
|
||
|
\RequirePackage{keyval,calc}
|
||
|
\RequirePackage{mhsetup}[2007/12/03]
|
||
|
\MHInternalSyntaxOn
|
||
|
\def\MT_options_name:{mathtools}
|
||
|
\newcommand*\mathtoolsset[1]{\setkeys{\MT_options_name:}{#1}}
|
||
|
\MH_new_boolean:n {fixamsmath}
|
||
|
\DeclareOption{fixamsmath}{
|
||
|
\MH_set_boolean_T:n {fixamsmath}
|
||
|
}
|
||
|
\DeclareOption{donotfixamsmathbugs}{
|
||
|
\MH_set_boolean_F:n {fixamsmath}
|
||
|
}
|
||
|
\DeclareOption{allowspaces}{
|
||
|
\MH_let:NwN \MaybeMHPrecedingSpacesOff
|
||
|
\relax
|
||
|
\MH_let:NwN \MH_maybe_nospace_ifnextchar:Nnn \kernel@ifnextchar
|
||
|
}
|
||
|
\DeclareOption{disallowspaces}{
|
||
|
\MH_let:NwN \MaybeMHPrecedingSpacesOff
|
||
|
\MHPrecedingSpacesOff
|
||
|
\MH_let:NwN \MH_maybe_nospace_ifnextchar:Nnn \MH_nospace_ifnextchar:Nnn
|
||
|
}
|
||
|
\DeclareOption*{
|
||
|
\PassOptionsToPackage{\CurrentOption}{amsmath}
|
||
|
}
|
||
|
\ExecuteOptions{fixamsmath,disallowspaces}
|
||
|
\ProcessOptions\relax
|
||
|
\MHInternalSyntaxOff
|
||
|
\RequirePackage{amsmath}[2000/07/18]
|
||
|
\MHInternalSyntaxOn
|
||
|
\AtEndOfPackage{\MHInternalSyntaxOff}
|
||
|
\def\MT_true_false_error:{
|
||
|
\PackageError{mathtools}
|
||
|
{You~ have~ to~ select~ either~ `true'~ or~ `false'}
|
||
|
{I'll~ assume~ you~ chose~ `false'~ for~ now.}
|
||
|
}
|
||
|
\def\MT_define_tagform:nwnn #1[#2]#3#4{
|
||
|
\@namedef{MT_tagform_#1:n}##1
|
||
|
{\maketag@@@{#3\ignorespaces#2{##1}\unskip\@@italiccorr#4}}
|
||
|
}
|
||
|
\providecommand*\newtagform[1]{%
|
||
|
\@ifundefined{MT_tagform_#1:n}
|
||
|
{\@ifnextchar[%
|
||
|
{\MT_define_tagform:nwnn #1}%
|
||
|
{\MT_define_tagform:nwnn #1[]}%
|
||
|
}{\PackageError{mathtools}
|
||
|
{The~ tag~ form~ `#1'~ is~ already~ defined\MessageBreak
|
||
|
You~ probably~ want~ to~ look~ up~ \@backslashchar renewtagform~
|
||
|
instead}
|
||
|
{I~ will~ just~ ignore~ your~ wish~ for~ now.}}
|
||
|
}
|
||
|
\newtagform{default}{(}{)}
|
||
|
\providecommand*\renewtagform[1]{%
|
||
|
\@ifundefined{MT_tagform_#1:n}
|
||
|
{\PackageError{mathtools}
|
||
|
{The~ tag~ form~ `#1'~ is~ not~ defined\MessageBreak
|
||
|
You~ probably~ want~ to~ look~ up~ \@backslashchar newtagform~ instead}
|
||
|
{I~ will~ just~ ignore~ your~ wish~ for~ now.}}
|
||
|
{\@ifnextchar[%
|
||
|
{\MT_define_tagform:nwnn #1}%
|
||
|
{\MT_define_tagform:nwnn #1[]}%
|
||
|
}
|
||
|
}
|
||
|
\providecommand*\usetagform[1]{%
|
||
|
\@ifundefined{MT_tagform_#1:n}
|
||
|
{
|
||
|
\PackageError{mathtools}{%
|
||
|
You~ have~ chosen~ the~ tag~ form~ `#1'\MessageBreak
|
||
|
but~ it~ appears~ to~ be~ undefined}
|
||
|
{I~ will~ use~ the~ default~ tag~ form~ instead.}%
|
||
|
\@namedef{tagform@}{\@nameuse{MT_tagform_default:n}}
|
||
|
}
|
||
|
{ \@namedef{tagform@}{\@nameuse{MT_tagform_#1:n}} }
|
||
|
\MH_if_boolean:nT {show_only_refs}{
|
||
|
\MH_let:NwN \MT_prev_tagform:n \tagform@
|
||
|
\def\tagform@##1{\MT_extended_tagform:n {##1}}
|
||
|
}
|
||
|
}
|
||
|
\MH_new_boolean:n {manual_tag}
|
||
|
\MH_new_boolean:n {raw_maketag}
|
||
|
\MH_let:NwN \MT_AmS_tag_in_align: \tag@in@align
|
||
|
\def\tag@in@align{
|
||
|
\global\MH_set_boolean_T:n {manual_tag}
|
||
|
\MT_AmS_tag_in_align:
|
||
|
}
|
||
|
\def\tag@in@display#1#{
|
||
|
\relax
|
||
|
\global\MH_set_boolean_T:n {manual_tag}
|
||
|
\tag@in@display@a{#1}
|
||
|
}
|
||
|
\def\MT_extended_tagform:n #1{
|
||
|
\MH_set_boolean_F:n {raw_maketag}
|
||
|
\if_meaning:NN \df@label\@empty
|
||
|
\MH_if_boolean:nTF {manual_tag}% this was \MH_if_boolean:nT before
|
||
|
{ \MH_if_boolean:nTF {show_manual_tags}
|
||
|
{ \MT_prev_tagform:n {#1} }
|
||
|
{ \stepcounter{equation} }
|
||
|
}{\kern1sp}% this last {\kern1sp} is new.
|
||
|
\else:
|
||
|
\MH_if_boolean:nTF {manual_tag}
|
||
|
{ \MH_if_boolean:nTF {show_manual_tags}
|
||
|
{ \MT_prev_tagform:n {#1} }
|
||
|
{ \@ifundefined{MT_r_\df@label}
|
||
|
{ }
|
||
|
{ \MT_prev_tagform:n {#1} }
|
||
|
}
|
||
|
}
|
||
|
{ \@ifundefined{MT_r_\df@label}
|
||
|
{ }
|
||
|
{ \refstepcounter{equation}\MT_prev_tagform:n {#1} }
|
||
|
}
|
||
|
\fi:
|
||
|
\global\MH_set_boolean_T:n {raw_maketag}
|
||
|
}
|
||
|
\def\MT_extended_maketag:n #1{
|
||
|
\ifx\df@label\@empty
|
||
|
\MT_maketag:n {#1}
|
||
|
\else:
|
||
|
\MH_if_boolean:nTF {raw_maketag}
|
||
|
{
|
||
|
\MH_if_boolean:nTF {show_manual_tags}
|
||
|
{ \MT_maketag:n {#1} }
|
||
|
{ \@ifundefined{MT_r_\df@label}
|
||
|
{ }
|
||
|
{ \MT_maketag:n {#1} }
|
||
|
}
|
||
|
}
|
||
|
{ \MT_maketag:n {#1} }
|
||
|
\fi:
|
||
|
\global\MH_set_boolean_F:n {manual_tag}
|
||
|
}
|
||
|
\def\MT_extended_eqref:n #1{
|
||
|
\protected@write\@auxout{}
|
||
|
{\string\MT@newlabel{#1}}
|
||
|
\textup{\MT_prev_tagform:n {\ref{#1}}}
|
||
|
}
|
||
|
\newcommand*\refeq[1]{
|
||
|
\textup{\ref{#1}}
|
||
|
}
|
||
|
\def\MT_extended_refeq:n #1{
|
||
|
\protected@write\@auxout{}
|
||
|
{\string\MT@newlabel{#1}}
|
||
|
\textup{\ref{#1}}
|
||
|
}
|
||
|
\newcommand*\MT@newlabel[1]{ \global\@namedef{MT_r_#1}{} }
|
||
|
\MH_new_boolean:n {show_only_refs}
|
||
|
\MH_new_boolean:n {show_manual_tags}
|
||
|
\define@key{\MT_options_name:}{showmanualtags}[true]{
|
||
|
\@ifundefined{boolean_show_manual_tags_#1:}
|
||
|
{ \MT_true_false_error:
|
||
|
\@nameuse{boolean_show_manual_tags_false:}
|
||
|
}
|
||
|
{ \@nameuse{boolean_show_manual_tags_#1:} }
|
||
|
}
|
||
|
\newcommand*\MT_showonlyrefs_true:{
|
||
|
\MH_if_boolean:nF {show_only_refs}{
|
||
|
\MH_set_boolean_T:n {show_only_refs}
|
||
|
\MH_let:NwN \MT_incr_eqnum: \incr@eqnum
|
||
|
\MH_let:NwN \incr@eqnum \@empty
|
||
|
\MH_let:NwN \MT_array_parbox_restore: \@arrayparboxrestore
|
||
|
\@xp\def\@xp\@arrayparboxrestore\@xp{\@arrayparboxrestore
|
||
|
\MH_let:NwN \incr@eqnum \@empty
|
||
|
}
|
||
|
\MH_let:NwN \MT_prev_tagform:n \tagform@
|
||
|
\MH_let:NwN \MT_eqref:n \eqref
|
||
|
\MH_let:NwN \MT_refeq:n \refeq
|
||
|
\MH_let:NwN \MT_maketag:n \maketag@@@
|
||
|
\MH_let:NwN \maketag@@@ \MT_extended_maketag:n
|
||
|
\def\tagform@##1{\MT_extended_tagform:n {##1}}
|
||
|
\MH_let:NwN \eqref \MT_extended_eqref:n
|
||
|
\MH_let:NwN \refeq \MT_extended_refeq:n
|
||
|
}
|
||
|
}
|
||
|
\def\MT_showonlyrefs_false: {
|
||
|
\MH_if_boolean:nT {show_only_refs}{
|
||
|
\MH_set_boolean_F:n {show_only_refs}
|
||
|
\MH_let:NwN \tagform@ \MT_prev_tagform:n
|
||
|
\MH_let:NwN \eqref \MT_eqref:n
|
||
|
\MH_let:NwN \refeq \MT_refeq:n
|
||
|
\MH_let:NwN \maketag@@@ \MT_maketag:n
|
||
|
\MH_let:NwN \incr@eqnum \MT_incr_eqnum:
|
||
|
\MH_let:NwN \@arrayparboxrestore \MT_array_parbox_restore:
|
||
|
}
|
||
|
}
|
||
|
\define@key{\MT_options_name:}{showonlyrefs}[true]{
|
||
|
\@nameuse{MT_showonlyrefs_#1:}
|
||
|
}
|
||
|
\renewcommand\nonumber{
|
||
|
\if@eqnsw
|
||
|
\if_meaning:NN \incr@eqnum\@empty
|
||
|
\MH_if_boolean:nF {show_only_refs}
|
||
|
{\addtocounter{equation}\m@ne}
|
||
|
\fi:
|
||
|
\fi:
|
||
|
\MH_let:NwN \print@eqnum\@empty \MH_let:NwN \incr@eqnum\@empty
|
||
|
\global\@eqnswfalse
|
||
|
}
|
||
|
\MHInternalSyntaxOff
|
||
|
\newcommand\noeqref[1]{\@bsphack
|
||
|
\@for\@tempa:=#1\do{%
|
||
|
\edef\@tempa{\expandafter\@firstofone\@tempa}%
|
||
|
\if@filesw\protected@write\@auxout{}%
|
||
|
{\string\MT@newlabel{\@tempa}}\fi}
|
||
|
\@esphack}
|
||
|
\MHInternalSyntaxOn
|
||
|
\providecommand*\xleftrightarrow[2][]{%
|
||
|
\ext@arrow 3095\MT_leftrightarrow_fill:{#1}{#2}}
|
||
|
\def\MT_leftrightarrow_fill:{%
|
||
|
\arrowfill@\leftarrow\relbar\rightarrow}
|
||
|
\providecommand*\xLeftarrow[2][]{%
|
||
|
\ext@arrow 0055{\Leftarrowfill@}{#1}{#2}}
|
||
|
\providecommand*\xRightarrow[2][]{%
|
||
|
\ext@arrow 0055{\Rightarrowfill@}{#1}{#2}}
|
||
|
\providecommand*\xLeftrightarrow[2][]{%
|
||
|
\ext@arrow 0055{\Leftrightarrowfill@}{#1}{#2}}
|
||
|
\def\MT_rightharpoondown_fill:{%
|
||
|
\arrowfill@\relbar\relbar\rightharpoondown}
|
||
|
\def\MT_rightharpoonup_fill:{%
|
||
|
\arrowfill@\relbar\relbar\rightharpoonup}
|
||
|
\def\MT_leftharpoondown_fill:{%
|
||
|
\arrowfill@\leftharpoondown\relbar\relbar}
|
||
|
\def\MT_leftharpoonup_fill:{%
|
||
|
\arrowfill@\leftharpoonup\relbar\relbar}
|
||
|
\providecommand*\xrightharpoondown[2][]{%
|
||
|
\ext@arrow 0359\MT_rightharpoondown_fill:{#1}{#2}}
|
||
|
\providecommand*\xrightharpoonup[2][]{%
|
||
|
\ext@arrow 0359\MT_rightharpoonup_fill:{#1}{#2}}
|
||
|
\providecommand*\xleftharpoondown[2][]{%
|
||
|
\ext@arrow 3095\MT_leftharpoondown_fill:{#1}{#2}}
|
||
|
\providecommand*\xleftharpoonup[2][]{%
|
||
|
\ext@arrow 3095\MT_leftharpoonup_fill:{#1}{#2}}
|
||
|
\providecommand*\xleftrightharpoons[2][]{\mathrel{%
|
||
|
\raise.22ex\hbox{%
|
||
|
$\ext@arrow 3095\MT_leftharpoonup_fill:{\phantom{#1}}{#2}$}%
|
||
|
\setbox0=\hbox{%
|
||
|
$\ext@arrow 0359\MT_rightharpoondown_fill:{#1}{\phantom{#2}}$}%
|
||
|
\kern-\wd0 \lower.22ex\box0}}
|
||
|
\providecommand*\xrightleftharpoons[2][]{\mathrel{%
|
||
|
\raise.22ex\hbox{%
|
||
|
$\ext@arrow 0359\MT_rightharpoonup_fill:{\phantom{#1}}{#2}$}%
|
||
|
\setbox0=\hbox{%
|
||
|
$\ext@arrow 3095\MT_leftharpoondown_fill:{#1}{\phantom{#2}}$}%
|
||
|
\kern-\wd0 \lower.22ex\box0}}
|
||
|
\providecommand*\xhookleftarrow[2][]{%
|
||
|
\ext@arrow 3095\MT_hookleft_fill:{#1}{#2}}
|
||
|
\def\MT_hookleft_fill:{%
|
||
|
\arrowfill@\leftarrow\relbar{\relbar\joinrel\rhook}}
|
||
|
\providecommand*\xhookrightarrow[2][]{%
|
||
|
\ext@arrow 3095\MT_hookright_fill:{#1}{#2}}
|
||
|
\def\MT_hookright_fill:{%
|
||
|
\arrowfill@{\lhook\joinrel\relbar}\relbar\rightarrow}
|
||
|
\providecommand*\xmapsto[2][]{%
|
||
|
\ext@arrow 0395\MT_mapsto_fill:{#1}{#2}}
|
||
|
\def\MT_mapsto_fill:{%
|
||
|
\arrowfill@{\mapstochar\relbar}\relbar\rightarrow}
|
||
|
\providecommand*\underbracket{
|
||
|
\@ifnextchar[
|
||
|
{\MT_underbracket_I:w}
|
||
|
{\MT_underbracket_I:w[\l_MT_bracketheight_fdim]}}
|
||
|
\def\MT_underbracket_I:w[#1]{
|
||
|
\@ifnextchar[
|
||
|
{\MT_underbracket_II:w[#1]}
|
||
|
{\MT_underbracket_II:w[#1][.7\fontdimen5\textfont2]}}
|
||
|
\def\MT_underbracket_II:w[#1][#2]#3{%
|
||
|
\mathop{\vtop{\m@th\ialign{##
|
||
|
\crcr
|
||
|
$\hfil\displaystyle{#3}\hfil$%
|
||
|
\crcr
|
||
|
\noalign{\kern .2\fontdimen5\textfont2 \nointerlineskip}%
|
||
|
\upbracketfill {#1}{#2}%
|
||
|
\crcr}}}
|
||
|
\limits}
|
||
|
\def\upbracketfill#1#2{%
|
||
|
\sbox\z@{$\braceld$}
|
||
|
\edef\l_MT_bracketheight_fdim{\the\ht\z@}%
|
||
|
\upbracketend{#1}{#2}
|
||
|
\leaders \vrule \@height \z@ \@depth #1 \hfill
|
||
|
\upbracketend{#1}{#2}%
|
||
|
}
|
||
|
\def\upbracketend#1#2{\vrule \@height #2 \@width #1\relax}
|
||
|
\providecommand*\overbracket{
|
||
|
\@ifnextchar[
|
||
|
{\MT_overbracket_I:w}
|
||
|
{\MT_overbracket_I:w[\l_MT_bracketheight_fdim]}}
|
||
|
\def\MT_overbracket_I:w[#1]{
|
||
|
\@ifnextchar[
|
||
|
{\MT_overbracket_II:w[#1]}
|
||
|
{\MT_overbracket_II:w[#1][.7\fontdimen5\textfont2]}}
|
||
|
\def\MT_overbracket_II:w[#1][#2]#3{%
|
||
|
\mathop{\vbox{\m@th\ialign{##
|
||
|
\crcr
|
||
|
\downbracketfill{#1}{#2}%
|
||
|
\crcr
|
||
|
\noalign{\kern .2\fontdimen5\textfont2 \nointerlineskip}%
|
||
|
$\hfil\displaystyle{#3}\hfil$
|
||
|
\crcr}}}%
|
||
|
\limits}
|
||
|
\def\downbracketfill#1#2{%
|
||
|
\sbox\z@{$\braceld$}\edef\l_MT_bracketheight_fdim{\the\ht\z@}
|
||
|
\downbracketend{#1}{#2}
|
||
|
\leaders \vrule \@height #1 \@depth \z@ \hfill
|
||
|
\downbracketend{#1}{#2}%
|
||
|
}
|
||
|
\def\downbracketend#1#2{\vrule \@width #1\@depth #2\relax}
|
||
|
\MH_let:NwN \LaTeXunderbrace \underbrace
|
||
|
\def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr
|
||
|
$\hfil\displaystyle{#1}\hfil$\crcr
|
||
|
\noalign{\kern.7\fontdimen5\textfont2\nointerlineskip}%
|
||
|
\upbracefill\crcr\noalign{\kern.5\fontdimen5\textfont2}}}}\limits}
|
||
|
\MH_let:NwN \LaTeXoverbrace \overbrace
|
||
|
\def\overbrace#1{\mathop{\vbox{\m@th\ialign{##\crcr
|
||
|
\noalign{\kern.5\fontdimen5\textfont2}%
|
||
|
\downbracefill\crcr
|
||
|
\noalign{\kern.7\fontdimen5\textfont2\nointerlineskip}%
|
||
|
$\hfil\displaystyle{#1}\hfil$\crcr}}}\limits}
|
||
|
\providecommand*\lparen{(}
|
||
|
\providecommand*\rparen{)}
|
||
|
|
||
|
\def\vcentcolon{\mathrel{\mathop\ordinarycolon}}
|
||
|
\begingroup
|
||
|
\catcode`\:=\active
|
||
|
\lowercase{\endgroup
|
||
|
\ifnum\mathcode`\:=32768\relax
|
||
|
\let\ordinarycolon= :%
|
||
|
\else
|
||
|
\mathchardef\ordinarycolon\mathcode`\: %
|
||
|
\fi
|
||
|
\let :\vcentcolon
|
||
|
}
|
||
|
\MH_new_boolean:n {center_colon}
|
||
|
\define@key{\MT_options_name:}{centercolon}[true]{
|
||
|
\@ifundefined{MT_active_colon_#1:}
|
||
|
{ \MT_true_false_error:n
|
||
|
\@nameuse{MT_active_colon_false:}
|
||
|
}
|
||
|
{ \@nameuse{MT_active_colon_#1:} }
|
||
|
}
|
||
|
\def\MT_active_colon_true: {
|
||
|
\MH_if_boolean:nF {center_colon}{
|
||
|
\MH_set_boolean_T:n {center_colon}
|
||
|
\edef\MT_active_colon_false:
|
||
|
{\mathcode`\noexpand\:=\the\mathcode`\:\relax}
|
||
|
\mathcode`\:=32768
|
||
|
}
|
||
|
}
|
||
|
\AtBeginDocument{
|
||
|
\providecommand*\dblcolon{\vcentcolon\mkern-.9mu\vcentcolon}
|
||
|
\providecommand*\coloneqq{\vcentcolon\mkern-1.2mu=}
|
||
|
\providecommand*\Coloneqq{\dblcolon\mkern-1.2mu=}
|
||
|
\providecommand*\coloneq{\vcentcolon\mkern-1.2mu\mathrel{-}}
|
||
|
\providecommand*\Coloneq{\dblcolon\mkern-1.2mu\mathrel{-}}
|
||
|
\providecommand*\eqqcolon{=\mkern-1.2mu\vcentcolon}
|
||
|
\providecommand*\Eqqcolon{=\mkern-1.2mu\dblcolon}
|
||
|
\providecommand*\eqcolon{\mathrel{-}\mkern-1.2mu\vcentcolon}
|
||
|
\providecommand*\Eqcolon{\mathrel{-}\mkern-1.2mu\dblcolon}
|
||
|
\providecommand*\colonapprox{\vcentcolon\mkern-1.2mu\approx}
|
||
|
\providecommand*\Colonapprox{\dblcolon\mkern-1.2mu\approx}
|
||
|
\providecommand*\colonsim{\vcentcolon\mkern-1.2mu\sim}
|
||
|
\providecommand*\Colonsim{\dblcolon\mkern-1.2mu\sim}
|
||
|
}
|
||
|
\let \AMS@math@cr@@ \math@cr@@
|
||
|
\MH_new_boolean:n {mult_firstline}
|
||
|
\MH_new_boolean:n {outer_mult}
|
||
|
\newcount\g_MT_multlinerow_int
|
||
|
\newdimen\l_MT_multwidth_dim
|
||
|
\newcommand*\MT_test_for_tcb_other:nnnnn [1]{
|
||
|
\if:w t#1\relax
|
||
|
\expandafter\MH_use_choice_i:nnnn
|
||
|
\else:
|
||
|
\if:w c#1\relax
|
||
|
\expandafter\expandafter\expandafter\MH_use_choice_ii:nnnn
|
||
|
\else:
|
||
|
\if:w b#1\relax
|
||
|
\expandafter\expandafter\expandafter
|
||
|
\expandafter\expandafter\expandafter\expandafter
|
||
|
\MH_use_choice_iii:nnnn
|
||
|
\else:
|
||
|
\expandafter\expandafter\expandafter
|
||
|
\expandafter\expandafter\expandafter\expandafter
|
||
|
\MH_use_choice_iv:nnnn
|
||
|
\fi:
|
||
|
\fi:
|
||
|
\fi:
|
||
|
}
|
||
|
\def\MT_mult_invisible_line: {
|
||
|
\crcr
|
||
|
\global\MH_set_boolean_F:n {mult_firstline}
|
||
|
\hbox to \l_MT_multwidth_dim{}\crcr
|
||
|
\noalign{\vskip-\baselineskip \vskip-\normallineskip}
|
||
|
}
|
||
|
\def\MT_mult_mathcr_atat:w [#1]{%
|
||
|
\if_num:w 0=`{\fi: \iffalse}\fi:
|
||
|
\MH_if_boolean:nT {mult_firstline}{
|
||
|
\kern\l_MT_mult_left_fdim
|
||
|
\MT_mult_invisible_line:
|
||
|
}
|
||
|
\crcr
|
||
|
\noalign{\vskip#1\relax}
|
||
|
\global\advance\g_MT_multlinerow_int\@ne
|
||
|
\if_num:w \g_MT_multlinerow_int=\l_MT_multline_lastline_fint
|
||
|
\MH_let:NwN \math@cr@@\MT_mult_last_mathcr:w
|
||
|
\fi:
|
||
|
}
|
||
|
\def\MT_mult_firstandlast_mathcr:w [#1]{%
|
||
|
\if_num:w 0=`{\fi: \iffalse}\fi:
|
||
|
\kern\l_MT_mult_left_fdim
|
||
|
\MT_mult_invisible_line:
|
||
|
\noalign{\vskip#1\relax}
|
||
|
\kern\l_MT_mult_right_fdim
|
||
|
}
|
||
|
\def\MT_mult_last_mathcr:w [#1]{
|
||
|
\if_num:w 0=`{\fi: \iffalse}\fi:\math@cr@@@
|
||
|
\noalign{\vskip#1\relax}
|
||
|
\kern\l_MT_mult_right_fdim}
|
||
|
\newcommand\MT_start_mult:N [1]{
|
||
|
\MT_test_for_tcb_other:nnnnn {#1}
|
||
|
{ \MH_let:NwN \MT_next:\vtop }
|
||
|
{ \MH_let:NwN \MT_next:\vcenter }
|
||
|
{ \MH_let:NwN \MT_next:\vbox }
|
||
|
{
|
||
|
\PackageError{mathtools}
|
||
|
{Invalid~ position~ specifier.~ I'll~ try~ to~ recover~ with~
|
||
|
`c'}\@ehc
|
||
|
}
|
||
|
\collect@body\MT_mult_internal:n
|
||
|
}
|
||
|
\newcommand*\MT_shoveright:wn [2][0pt]{%
|
||
|
#2\hfilneg
|
||
|
\setlength\@tempdima{#1}
|
||
|
\kern\@tempdima
|
||
|
}
|
||
|
\newcommand*\MT_shoveleft:wn [2][0pt]{%
|
||
|
\hfilneg
|
||
|
\setlength\@tempdima{#1}
|
||
|
\kern\@tempdima
|
||
|
#2
|
||
|
}
|
||
|
\newcommand*\MT_mult_internal:n [1]{
|
||
|
\MH_if_boolean:nF {outer_mult}{\null\,}
|
||
|
\MT_next:
|
||
|
\bgroup
|
||
|
\Let@
|
||
|
\def\l_MT_multline_lastline_fint{0 }
|
||
|
\chardef\dspbrk@context\@ne \restore@math@cr
|
||
|
\MH_let:NwN \math@cr@@\MT_mult_mathcr_atat:w
|
||
|
\MH_let:NwN \shoveleft\MT_shoveleft:wn
|
||
|
\MH_let:NwN \shoveright\MT_shoveright:wn
|
||
|
\spread@equation
|
||
|
\MH_set_boolean_F:n {mult_firstline}
|
||
|
\MT_measure_mult:n {#1}
|
||
|
\if_dim:w \l_MT_multwidth_dim<\l_MT_multline_measure_fdim
|
||
|
\MH_setlength:dn \l_MT_multwidth_dim{\l_MT_multline_measure_fdim}
|
||
|
\fi
|
||
|
\MH_set_boolean_T:n {mult_firstline}
|
||
|
\if_num:w \l_MT_multline_lastline_fint=\@ne
|
||
|
\MH_let:NwN \math@cr@@ \MT_mult_firstandlast_mathcr:w
|
||
|
\fi:
|
||
|
\ialign\bgroup
|
||
|
\hfil\strut@$\m@th\displaystyle{}##$\hfil
|
||
|
\crcr
|
||
|
\hfilneg
|
||
|
#1
|
||
|
}
|
||
|
\newcommand\MT_measure_mult:n [1]{
|
||
|
\begingroup
|
||
|
\g_MT_multlinerow_int\@ne
|
||
|
\MH_let:NwN \label\MT_gobblelabel:w
|
||
|
\MH_let:NwN \tag\gobble@tag
|
||
|
\setbox\z@\vbox{
|
||
|
\ialign{\strut@$\m@th\displaystyle{}##$
|
||
|
\crcr
|
||
|
#1
|
||
|
\crcr
|
||
|
}
|
||
|
}
|
||
|
\xdef\l_MT_multline_measure_fdim{\the\wdz@}
|
||
|
\advance\g_MT_multlinerow_int\m@ne
|
||
|
\xdef\l_MT_multline_lastline_fint{\number\g_MT_multlinerow_int}
|
||
|
\endgroup
|
||
|
\g_MT_multlinerow_int\@ne
|
||
|
}
|
||
|
\MaybeMHPrecedingSpacesOff
|
||
|
\newcommand*\MT_multlined_second_arg:w [1][\@empty]{
|
||
|
\MT_test_for_tcb_other:nnnnn {#1}
|
||
|
{\def\MT_mult_default_pos:{#1}}
|
||
|
{\def\MT_mult_default_pos:{#1}}
|
||
|
{\def\MT_mult_default_pos:{#1}}
|
||
|
{
|
||
|
\if_meaning:NN \@empty#1\@empty
|
||
|
\else:
|
||
|
\setlength \l_MT_multwidth_dim{#1}
|
||
|
\fi:
|
||
|
}
|
||
|
\MT_start_mult:N \MT_mult_default_pos:
|
||
|
}
|
||
|
\newenvironment{multlined}[1][]
|
||
|
{\MH_group_align_safe_begin:
|
||
|
\MT_test_for_tcb_other:nnnnn {#1}
|
||
|
{\def\MT_mult_default_pos:{#1}}
|
||
|
{\def\MT_mult_default_pos:{#1}}
|
||
|
{\def\MT_mult_default_pos:{#1}}
|
||
|
{
|
||
|
\if_meaning:NN \@empty#1\@empty
|
||
|
\else:
|
||
|
\setlength \l_MT_multwidth_dim{#1}
|
||
|
\fi:
|
||
|
}
|
||
|
\MT_multlined_second_arg:w
|
||
|
}
|
||
|
{
|
||
|
\hfilneg \endaligned \MH_group_align_safe_end:
|
||
|
}
|
||
|
\MHPrecedingSpacesOn
|
||
|
\define@key{\MT_options_name:}
|
||
|
{firstline-afterskip}{\def\l_MT_mult_left_fdim{#1}}
|
||
|
\define@key{\MT_options_name:}
|
||
|
{lastline-preskip}{\def\l_MT_mult_right_fdim{#1}}
|
||
|
\define@key{\MT_options_name:}
|
||
|
{multlined-width}{\setlength \l_MT_multwidth_dim{#1}}
|
||
|
\define@key{\MT_options_name:}
|
||
|
{multlined-pos}{\def\MT_mult_default_pos:{#1}}
|
||
|
\setkeys{\MT_options_name:}{
|
||
|
firstline-afterskip=\multlinegap,
|
||
|
lastline-preskip=\multlinegap,
|
||
|
multlined-width=0pt,
|
||
|
multlined-pos=c,
|
||
|
}
|
||
|
\def\MT_gobblelabel:w #1{}
|
||
|
\newcommand*\DeclarePairedDelimiter[3]{%
|
||
|
\@ifdefinable{#1}{
|
||
|
\@namedef{MT_delim_\MH_cs_to_str:N #1 _star:}##1
|
||
|
{\left#2 ##1 \right #3}%
|
||
|
\@xp\@xp\@xp
|
||
|
\newcommand
|
||
|
\@xp\csname MT_delim_\MH_cs_to_str:N #1 _nostar:\endcsname
|
||
|
[2][\\@gobble]
|
||
|
{
|
||
|
\mathopen{\@nameuse {\MH_cs_to_str:N ##1 l} #2} ##2
|
||
|
\mathclose{\@nameuse {\MH_cs_to_str:N ##1 r} #3}}
|
||
|
\DeclareRobustCommand{#1}{
|
||
|
\@ifstar
|
||
|
{\@nameuse{MT_delim_\MH_cs_to_str:N #1 _star:}}
|
||
|
{\@nameuse{MT_delim_\MH_cs_to_str:N #1 _nostar:}}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
\def\MT_start_cases:nnn #1#2#3{ % #1=sep,#2=preamble,#3=delim
|
||
|
\RIfM@\else
|
||
|
\nonmatherr@{\begin{\@currenvir}}
|
||
|
\fi
|
||
|
\MH_group_align_safe_begin:
|
||
|
\left#3
|
||
|
\vcenter \bgroup
|
||
|
\Let@ \chardef\dspbrk@context\@ne \restore@math@cr
|
||
|
\let \math@cr@@\AMS@math@cr@@
|
||
|
\spread@equation
|
||
|
\ialign\bgroup
|
||
|
\strut@$\m@th \displaystyle{##}$\hfil \strut@
|
||
|
#2
|
||
|
\crcr
|
||
|
}
|
||
|
\def\MH_end_cases:{\crcr\egroup
|
||
|
\restorecolumn@
|
||
|
\egroup
|
||
|
\MH_group_align_safe_end:
|
||
|
}
|
||
|
\newcommand*\newcases[5]{% #1=name, #2=sep, #3=preamble, #4=left, #5=right
|
||
|
\newenvironment{#1}
|
||
|
{\MT_start_cases:nnn {#2}{#3}{#4}}
|
||
|
{\MH_end_cases:\right#5}
|
||
|
}
|
||
|
\newcommand*\renewcases[5]{
|
||
|
\renewenvironment{#1}
|
||
|
{\MT_start_cases:nnn {#2}{#3}{#4}}
|
||
|
{\MH_end_cases:\right#5}
|
||
|
}
|
||
|
\newcases{dcases}{\quad}{$\m@th\displaystyle{##}$\hfil}{\lbrace}{.}
|
||
|
\newcases{dcases*}{\quad}{{##}\hfil}{\lbrace}{.}
|
||
|
\def\MT_matrix_begin:N #1{%
|
||
|
\hskip -\arraycolsep
|
||
|
\MH_let:NwN \@ifnextchar \MH_nospace_ifnextchar:Nnn
|
||
|
\array{*\c@MaxMatrixCols #1}}
|
||
|
\def\MT_matrix_end:{\endarray \hskip -\arraycolsep}
|
||
|
\MaybeMHPrecedingSpacesOff
|
||
|
\newenvironment{matrix*}[1][c]
|
||
|
{\MT_matrix_begin:N #1}
|
||
|
{\MT_matrix_end:}
|
||
|
\newenvironment{pmatrix*}[1][c]
|
||
|
{\left(\MT_matrix_begin:N #1}
|
||
|
{\MT_matrix_end:\right)}
|
||
|
\newenvironment{bmatrix*}[1][c]
|
||
|
{\left[\MT_matrix_begin:N #1}
|
||
|
{\MT_matrix_end:\right]}
|
||
|
\newenvironment{Bmatrix*}[1][c]
|
||
|
{\left\lbrace\MT_matrix_begin:N #1}
|
||
|
{\MT_matrix_end:\right\rbrace}
|
||
|
\newenvironment{vmatrix*}[1][c]
|
||
|
{\left\lvert\MT_matrix_begin:N #1}
|
||
|
{\MT_matrix_end:\right\rvert}
|
||
|
\newenvironment{Vmatrix*}[1][c]
|
||
|
{\left\lVert\MT_matrix_begin:N #1}
|
||
|
{\MT_matrix_end:\right\lVert}
|
||
|
\MHPrecedingSpacesOn
|
||
|
\newcommand*\smashoperator[2][lr]{
|
||
|
\def\MT_smop_use:NNNNN {\@nameuse{MT_smop_smash_#1:NNNNN}}
|
||
|
\toks@{#2}
|
||
|
\expandafter\MT_smop_get_args:wwwNnNn
|
||
|
\the\toks@\@nil\@nil\@nil\@nil\@nil\@nil\@@nil
|
||
|
}
|
||
|
\def\MT_smop_remove_nil_vi:N #1\@nil\@nil\@nil\@nil\@nil\@nil{#1}
|
||
|
\def\MT_smop_mathop:n {\mathop}
|
||
|
\def\MT_smop_limits: {\limits}
|
||
|
\MH_new_boolean:n {smop_one}
|
||
|
\MH_new_boolean:n {smop_two}
|
||
|
\def\MT_smop_get_args:wwwNnNn #1#2#3#4#5#6#7\@@nil{%
|
||
|
\begingroup
|
||
|
\def\MT_smop_arg_A: {#1} \def\MT_smop_arg_B: {#2}
|
||
|
\def\MT_smop_arg_C: {#3} \def\MT_smop_arg_D: {#4}
|
||
|
\def\MT_smop_arg_E: {#5} \def\MT_smop_arg_F: {#6}
|
||
|
\def\MT_smop_arg_G: {#7}
|
||
|
\if_meaning:NN \MT_smop_arg_A: \MT_smop_mathop:n
|
||
|
\if_meaning:NN \MT_smop_arg_C:\MT_smop_limits:
|
||
|
\def\MT_smop_final_arg_A:{#1{#2}}%
|
||
|
\if_meaning:NN \MT_smop_arg_D: \@nnil
|
||
|
\else:
|
||
|
\MH_set_boolean_T:n {smop_one}
|
||
|
\MH_let:NwN \MT_smop_final_arg_B: \MT_smop_arg_D:
|
||
|
\MH_let:NwN \MT_smop_final_arg_C: \MT_smop_arg_E:
|
||
|
\if_meaning:NN \MT_smop_arg_F: \@nnil
|
||
|
\else:
|
||
|
\MH_set_boolean_T:n {smop_two}
|
||
|
\MH_let:NwN \MT_smop_final_arg_D: \MT_smop_arg_F:
|
||
|
\edef\MT_smop_final_arg_E:
|
||
|
{\expandafter\MT_smop_remove_nil_vi:N \MT_smop_arg_G: }
|
||
|
\fi:
|
||
|
\fi:
|
||
|
\else:
|
||
|
\def\MT_smop_final_arg_A:{#1{#2}}%
|
||
|
\if_meaning:NN \MT_smop_arg_D: \@nnil
|
||
|
\else:
|
||
|
\MH_set_boolean_T:n {smop_one}
|
||
|
\MH_let:NwN \MT_smop_final_arg_B: \MT_smop_arg_C:
|
||
|
\MH_let:NwN \MT_smop_final_arg_C: \MT_smop_arg_D:
|
||
|
\if_meaning:NN \MT_smop_arg_F: \@nnil
|
||
|
\else:
|
||
|
\MH_set_boolean_T:n {smop_two}
|
||
|
\MH_let:NwN \MT_smop_final_arg_D: \MT_smop_arg_E:
|
||
|
\MH_let:NwN \MT_smop_final_arg_E: \MT_smop_arg_F:
|
||
|
\fi:
|
||
|
\fi:
|
||
|
\fi:
|
||
|
\else:
|
||
|
\if_meaning:NN \MT_smop_arg_B:\MT_smop_limits:
|
||
|
\def\MT_smop_final_arg_A:{#1}%
|
||
|
\if_meaning:NN \MT_smop_arg_D: \@nnil
|
||
|
\else:
|
||
|
\MH_set_boolean_T:n {smop_one}
|
||
|
\MH_let:NwN \MT_smop_final_arg_B: \MT_smop_arg_C:
|
||
|
\MH_let:NwN \MT_smop_final_arg_C: \MT_smop_arg_D:
|
||
|
\if_meaning:NN \MT_smop_arg_F: \@nnil
|
||
|
\else:
|
||
|
\MH_set_boolean_T:n {smop_two}
|
||
|
\MH_let:NwN \MT_smop_final_arg_D: \MT_smop_arg_E:
|
||
|
\MH_let:NwN \MT_smop_final_arg_E: \MT_smop_arg_F:
|
||
|
\fi:
|
||
|
\fi:
|
||
|
\else:
|
||
|
\def\MT_smop_final_arg_A:{#1}%
|
||
|
\if_meaning:NN \MT_smop_arg_C: \@nnil
|
||
|
\else:
|
||
|
\MH_set_boolean_T:n {smop_one}
|
||
|
\MH_let:NwN \MT_smop_final_arg_B: \MT_smop_arg_B:
|
||
|
\MH_let:NwN \MT_smop_final_arg_C: \MT_smop_arg_C:
|
||
|
\if_meaning:NN \MT_smop_arg_D: \@nnil
|
||
|
\else:
|
||
|
\MH_set_boolean_T:n {smop_two}
|
||
|
\MH_let:NwN \MT_smop_final_arg_D: \MT_smop_arg_D:
|
||
|
\MH_let:NwN \MT_smop_final_arg_E: \MT_smop_arg_E:
|
||
|
\fi:
|
||
|
\fi:
|
||
|
\fi:
|
||
|
\fi:
|
||
|
\MH_if_boolean:nT {smop_one}{
|
||
|
\MT_smop_measure:NNNNN
|
||
|
\MT_smop_final_arg_A: \MT_smop_final_arg_B: \MT_smop_final_arg_C:
|
||
|
\MT_smop_final_arg_D: \MT_smop_final_arg_E:
|
||
|
}
|
||
|
\MT_smop_use:NNNNN
|
||
|
\MT_smop_final_arg_A: \MT_smop_final_arg_B: \MT_smop_final_arg_C:
|
||
|
\MT_smop_final_arg_D: \MT_smop_final_arg_E:
|
||
|
\endgroup
|
||
|
}
|
||
|
\def\MT_smop_needed_args:NNNNN #1#2#3#4#5{%
|
||
|
\displaystyle #1
|
||
|
\MH_if_boolean:nT {smop_one}{
|
||
|
\limits#2{\MT_cramped_clap_internal:Nn \scriptstyle{#3}}
|
||
|
\MH_if_boolean:nT {smop_two}{
|
||
|
#4{\MT_cramped_clap_internal:Nn \scriptstyle{#5}}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
\def\MT_smop_measure:NNNNN #1#2#3#4#5{%
|
||
|
\MH_let:NwN \MT_saved_mathclap:Nn \MT_cramped_clap_internal:Nn
|
||
|
\MH_let:NwN \MT_cramped_clap_internal:Nn \@secondoftwo
|
||
|
\sbox\z@{$\m@th\MT_smop_needed_args:NNNNN #1#2#3#4#5$}
|
||
|
\MH_let:NwN \MT_cramped_clap_internal:Nn \MT_saved_mathclap:Nn
|
||
|
\sbox\tw@{$\m@th\displaystyle#1$}
|
||
|
\@tempdima=.5\wd0
|
||
|
\advance\@tempdima-.5\wd2
|
||
|
}
|
||
|
\def\MT_smop_smash_l:NNNNN #1#2#3#4#5{
|
||
|
\MT_smop_needed_args:NNNNN #1#2#3#4#5\kern\@tempdima
|
||
|
}
|
||
|
\def\MT_smop_smash_r:NNNNN #1#2#3#4#5{
|
||
|
\kern\@tempdima\MT_smop_needed_args:NNNNN #1#2#3#4#5
|
||
|
}
|
||
|
\def\MT_smop_smash_lr:NNNNN #1#2#3#4#5{
|
||
|
\MT_smop_needed_args:NNNNN #1#2#3#4#5
|
||
|
}
|
||
|
\def\MT_vphantom:Nn {\v@true\h@false\MT_internal_phantom:N}
|
||
|
\def\MT_hphantom:Nn {\v@false\h@true\MT_internal_phantom:N}
|
||
|
\def\MT_phantom:Nn {\v@true\h@true\MT_internal_phantom:N}
|
||
|
\def\MT_internal_phantom:N #1{
|
||
|
\ifmmode
|
||
|
\expandafter\mathph@nt\expandafter#1
|
||
|
\else
|
||
|
\expandafter\makeph@nt
|
||
|
\fi
|
||
|
}
|
||
|
\newcommand*\adjustlimits[6]{
|
||
|
\sbox\z@{$\m@th \displaystyle #1$}
|
||
|
\sbox\tw@{$\m@th \displaystyle #4$}
|
||
|
\@tempdima=\dp\z@ \advance\@tempdima-\dp\tw@
|
||
|
\if_dim:w \@tempdima>\z@
|
||
|
\mathop{#1}\limits#2{#3}
|
||
|
\else:
|
||
|
\mathop{#1\MT_vphantom:Nn \displaystyle{#4}}\limits
|
||
|
#2{
|
||
|
\def\finsm@sh{\ht\z@\z@ \box\z@}
|
||
|
\mathsm@sh\scriptstyle{\MT_cramped_internal:Nn \scriptstyle{#3}}
|
||
|
\MT_vphantom:Nn \scriptstyle
|
||
|
{\MT_cramped_internal:Nn \scriptstyle{#6}}
|
||
|
}
|
||
|
\fi:
|
||
|
\if_dim:w \@tempdima>\z@
|
||
|
\mathop{#4\MT_vphantom:Nn \displaystyle{#1}}\limits
|
||
|
#5
|
||
|
{
|
||
|
\MT_vphantom:Nn \scriptstyle
|
||
|
{\MT_cramped_internal:Nn \scriptstyle{#3}}
|
||
|
\def\finsm@sh{\ht\z@\z@ \box\z@}
|
||
|
\mathsm@sh\scriptstyle{\MT_cramped_internal:Nn \scriptstyle{#6}}
|
||
|
}
|
||
|
\else:
|
||
|
\mathop{#4}\limits#5{#6}
|
||
|
\fi:
|
||
|
}
|
||
|
\newcommand\MoveEqLeft[1][2]{%
|
||
|
\global\@tempdima=#1em%
|
||
|
\kern\@tempdima%
|
||
|
&
|
||
|
\kern-\@tempdima}
|
||
|
\MHInternalSyntaxOff
|
||
|
\def\ArrowBetweenLines{\relax
|
||
|
\iffalse{\fi\ifnum0=`}\fi
|
||
|
\@ifstar{\ArrowBetweenLines@auxI{00}}{\ArrowBetweenLines@auxI{01}}}
|
||
|
\def\ArrowBetweenLines@auxI#1{%
|
||
|
\@ifnextchar[%
|
||
|
{\ArrowBetweenLines@auxII{#1}}%
|
||
|
{\ArrowBetweenLines@auxII{#1}[\Updownarrow]}}
|
||
|
\def\ArrowBetweenLines@auxII#1[#2]{%
|
||
|
\ifnum0=`{\fi \iffalse}\fi
|
||
|
\crcr
|
||
|
\noalign{\nobreak\vskip-\baselineskip\vskip-\lineskip}%
|
||
|
\noalign{\expandafter\in@\expandafter{\@currenvir}%
|
||
|
{alignedat,aligned,gathered}%
|
||
|
\ifin@ \else\notag\fi%
|
||
|
}%
|
||
|
\if#1 &&\quad #2\else #2\quad\fi
|
||
|
\\\noalign{\nobreak\vskip-\lineskip}}
|
||
|
\MHInternalSyntaxOn
|
||
|
\def\shortintertext#1{%
|
||
|
\ifvmode\else\\\@empty\fi
|
||
|
\noalign{%
|
||
|
\penalty\postdisplaypenalty\vskip\abovedisplayshortskip
|
||
|
\vbox{\normalbaselines
|
||
|
\if_dim:w \linewidth=\columnwidth
|
||
|
\else:
|
||
|
\parshape\@ne \@totalleftmargin \linewidth
|
||
|
\fi:
|
||
|
\noindent#1\par}%
|
||
|
\penalty\predisplaypenalty\vskip\abovedisplayshortskip%
|
||
|
}%
|
||
|
}
|
||
|
\providecommand*\clap[1]{\hb@xt@\z@{\hss#1\hss}}
|
||
|
\providecommand*\mathllap[1][\@empty]{
|
||
|
\ifx\@empty#1\@empty
|
||
|
\expandafter \mathpalette \expandafter \MT_mathllap:Nn
|
||
|
\else
|
||
|
\expandafter \MT_mathllap:Nn \expandafter #1
|
||
|
\fi
|
||
|
}
|
||
|
\providecommand*\mathrlap[1][\@empty]{
|
||
|
\ifx\@empty#1\@empty
|
||
|
\expandafter \mathpalette \expandafter \MT_mathrlap:Nn
|
||
|
\else
|
||
|
\expandafter \MT_mathrlap:Nn \expandafter #1
|
||
|
\fi
|
||
|
}
|
||
|
\providecommand*\mathclap[1][\@empty]{
|
||
|
\ifx\@empty#1\@empty
|
||
|
\expandafter \mathpalette \expandafter \MT_mathclap:Nn
|
||
|
\else
|
||
|
\expandafter \MT_mathclap:Nn \expandafter #1
|
||
|
\fi
|
||
|
}
|
||
|
\def\MT_mathllap:Nn #1#2{{}\llap{$\m@th#1{#2}$}}
|
||
|
\def\MT_mathrlap:Nn #1#2{{}\rlap{$\m@th#1{#2}$}}
|
||
|
\def\MT_mathclap:Nn #1#2{{}\clap{$\m@th#1{#2}$}}
|
||
|
\providecommand*\mathmbox{\mathpalette\MT_mathmbox:nn}
|
||
|
\def\MT_mathmbox:nn #1#2{\mbox{$\m@th#1#2$}}
|
||
|
\providecommand*\mathmakebox{
|
||
|
\@ifnextchar[ \MT_mathmakebox_I:w
|
||
|
\mathmbox}
|
||
|
\def\MT_mathmakebox_I:w[#1]{%
|
||
|
\@ifnextchar[ {\MT_mathmakebox_II:w[#1]}
|
||
|
{\MT_mathmakebox_II:w[#1][c]}}
|
||
|
\def\MT_mathmakebox_II:w[#1][#2]{
|
||
|
\mathpalette{\MT_mathmakebox_III:w[#1][#2]}}
|
||
|
\def\MT_mathmakebox_III:w[#1][#2]#3#4{%
|
||
|
\@begin@tempboxa\hbox{$\m@th#3#4$}%
|
||
|
\setlength\@tempdima{#1}%
|
||
|
\hbox{\hb@xt@\@tempdima{\csname bm@#2\endcsname}}%
|
||
|
\@end@tempboxa}
|
||
|
\def\mathsm@sh#1#2{%
|
||
|
\setbox\z@\hbox{$\m@th#1{#2}$}{}\finsm@sh}
|
||
|
\providecommand*\cramped[1][\@empty]{
|
||
|
\ifx\@empty#1\@empty
|
||
|
\expandafter \mathpalette \expandafter \MT_cramped_internal:Nn
|
||
|
\else
|
||
|
\expandafter \MT_cramped_internal:Nn \expandafter #1
|
||
|
\fi
|
||
|
}
|
||
|
\def\MT_cramped_internal:Nn #1#2{
|
||
|
\sbox\z@{$\m@th#1\nulldelimiterspace=\z@\radical\z@{#2}$}
|
||
|
\ifx#1\displaystyle
|
||
|
\dimen@=\fontdimen8\textfont3
|
||
|
\advance\dimen@ .25\fontdimen5\textfont2
|
||
|
\else
|
||
|
\dimen@=1.25\fontdimen8
|
||
|
\ifx#1\textstyle\textfont
|
||
|
\else
|
||
|
\ifx#1\scriptstyle
|
||
|
\scriptfont
|
||
|
\else
|
||
|
\scriptscriptfont
|
||
|
\fi
|
||
|
\fi
|
||
|
3
|
||
|
\fi
|
||
|
\advance\dimen@-\ht\z@ \ht\z@=-\dimen@
|
||
|
\box\z@
|
||
|
}
|
||
|
\providecommand*\crampedllap[1][\@empty]{
|
||
|
\ifx\@empty#1\@empty
|
||
|
\expandafter \mathpalette \expandafter \MT_cramped_llap_internal:Nn
|
||
|
\else
|
||
|
\expandafter \MT_cramped_llap_internal:Nn \expandafter #1
|
||
|
\fi
|
||
|
}
|
||
|
\def\MT_cramped_llap_internal:Nn #1#2{
|
||
|
{}\llap{\MT_cramped_internal:Nn #1{#2}}
|
||
|
}
|
||
|
\providecommand*\crampedclap[1][\@empty]{
|
||
|
\ifx\@empty#1\@empty
|
||
|
\expandafter \mathpalette \expandafter \MT_cramped_clap_internal:Nn
|
||
|
\else
|
||
|
\expandafter \MT_cramped_clap_internal:Nn \expandafter #1
|
||
|
\fi
|
||
|
}
|
||
|
\def\MT_cramped_clap_internal:Nn #1#2{
|
||
|
{}\clap{\MT_cramped_internal:Nn #1{#2}}
|
||
|
}
|
||
|
\providecommand*\crampedrlap[1][\@empty]{
|
||
|
\ifx\@empty#1\@empty
|
||
|
\expandafter \mathpalette \expandafter \MT_cramped_rlap_internal:Nn
|
||
|
\else
|
||
|
\expandafter \MT_cramped_rlap_internal:Nn \expandafter #1
|
||
|
\fi
|
||
|
}
|
||
|
\def\MT_cramped_rlap_internal:Nn #1#2{
|
||
|
{}\rlap{\MT_cramped_internal:Nn #1{#2}}
|
||
|
}
|
||
|
\DeclareRobustCommand{\prescript}[3]{
|
||
|
\@mathmeasure\z@\scriptstyle{\MT_prescript_sup:{#1}}
|
||
|
\@mathmeasure\tw@\scriptstyle{\MT_prescript_sub:{#2}}
|
||
|
\if_dim:w \wd\tw@>\wd\z@
|
||
|
\setbox\z@\hbox to\wd\tw@{\hfil\unhbox\z@}
|
||
|
\else:
|
||
|
\setbox\tw@\hbox to\wd\z@{\hfil\unhbox\tw@}
|
||
|
\fi:
|
||
|
\mathop{}
|
||
|
\mathopen{\vphantom{\MT_prescript_arg:{#3}}}^{\box\z@}\sb{\box\tw@}
|
||
|
\MT_prescript_arg:{#3}
|
||
|
}
|
||
|
\define@key{\MT_options_name:}
|
||
|
{prescript-sup-format}{\def\MT_prescript_sup:{#1}}
|
||
|
\define@key{\MT_options_name:}
|
||
|
{prescript-sub-format}{\def\MT_prescript_sub:{#1}}
|
||
|
\define@key{\MT_options_name:}
|
||
|
{prescript-arg-format}{\def\MT_prescript_arg:{#1}}
|
||
|
\setkeys{\MT_options_name:}{
|
||
|
prescript-sup-format={},
|
||
|
prescript-sub-format={},
|
||
|
prescript-arg-format={},
|
||
|
}
|
||
|
\def\@DeclareMathSizes #1#2#3#4#5{%
|
||
|
\@defaultunits\dimen@ #2pt\relax\@nnil
|
||
|
\if:w $#3$%
|
||
|
\MH_let:cN {S@\strip@pt\dimen@}\math@fontsfalse
|
||
|
\else:
|
||
|
\@defaultunits\dimen@ii #3pt\relax\@nnil
|
||
|
\@defaultunits\@tempdima #4pt\relax\@nnil
|
||
|
\@defaultunits\@tempdimb #5pt\relax\@nnil
|
||
|
\toks@{#1}%
|
||
|
\expandafter\xdef\csname S@\strip@pt\dimen@\endcsname{%
|
||
|
\gdef\noexpand\tf@size{\strip@pt\dimen@ii}%
|
||
|
\gdef\noexpand\sf@size{\strip@pt\@tempdima}%
|
||
|
\gdef\noexpand\ssf@size{\strip@pt\@tempdimb}%
|
||
|
\the\toks@
|
||
|
}%
|
||
|
\fi:
|
||
|
}
|
||
|
\def\MT_mathic_true: {
|
||
|
\MH_if_boolean:nF {math_italic_corr}{
|
||
|
\MH_set_boolean_T:n {math_italic_corr}
|
||
|
\MH_let:NwN \MT_begin_inlinemath: \(
|
||
|
\renewcommand*\({\relax\ifmmode\@badmath\else
|
||
|
\ifhmode
|
||
|
\if_dim:w \fontdimen\@ne\font>\z@
|
||
|
\if_dim:w \lastskip>\z@
|
||
|
\skip@\lastskip\unskip
|
||
|
\@@italiccorr
|
||
|
\hskip\skip@
|
||
|
\else:
|
||
|
\@@italiccorr
|
||
|
\fi:
|
||
|
\fi:
|
||
|
\fi:
|
||
|
$\fi:
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
\def\MT_mathic_false: {
|
||
|
\MH_if_boolean:nT {math_italic_corr}{
|
||
|
\MH_set_boolean_F:n {math_italic_corr}
|
||
|
\MH_let:NwN \( \MT_begin_inlinemath:
|
||
|
}
|
||
|
}
|
||
|
\MH_new_boolean:n {math_italic_corr}
|
||
|
\define@key{\MT_options_name:}{mathic}[true]{
|
||
|
\@ifundefined{MT_mathic_#1:}
|
||
|
{ \MT_true_false_error:
|
||
|
\@nameuse{MT_mathic_false:}
|
||
|
}
|
||
|
{ \@nameuse{MT_mathic_#1:} }
|
||
|
}
|
||
|
\newenvironment{spreadlines}[1]{
|
||
|
\setlength{\jot}{#1}
|
||
|
\ignorespaces
|
||
|
}{ \ignorespacesafterend }
|
||
|
\MaybeMHPrecedingSpacesOff
|
||
|
\newenvironment{MT_gathered_env}[1][c]{%
|
||
|
\RIfM@\else
|
||
|
\nonmatherr@{\begin{\@currenvir}}%
|
||
|
\fi
|
||
|
\null\,%
|
||
|
\if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi \bgroup
|
||
|
\Let@ \chardef\dspbrk@context\@ne \restore@math@cr
|
||
|
\spread@equation
|
||
|
\ialign\bgroup
|
||
|
\MT_gathered_pre:
|
||
|
\strut@$\m@th\displaystyle##$
|
||
|
\MT_gathered_post:
|
||
|
\crcr
|
||
|
}{%
|
||
|
\endaligned
|
||
|
\MT_gathered_env_end:
|
||
|
}
|
||
|
\MHPrecedingSpacesOn
|
||
|
\newcommand*\newgathered[4]{
|
||
|
\newenvironment{#1}
|
||
|
{ \def\MT_gathered_pre:{#2}
|
||
|
\def\MT_gathered_post:{#3}
|
||
|
\def\MT_gathered_env_end:{#4}
|
||
|
\MT_gathered_env
|
||
|
}{\endMT_gathered_env}
|
||
|
}
|
||
|
\newcommand*\renewgathered[4]{
|
||
|
\renewenvironment{#1}
|
||
|
{ \def\MT_gathered_pre:{#2}
|
||
|
\def\MT_gathered_post:{#3}
|
||
|
\def\MT_gathered_env_end:{#4}
|
||
|
\MT_gathered_env
|
||
|
}{\endMT_gathered_env}
|
||
|
}
|
||
|
\newgathered{lgathered}{}{\hfil}{}
|
||
|
\newgathered{rgathered}{\hfil}{}{}
|
||
|
\renewgathered{gathered}{\hfil}{\hfil}{}
|
||
|
\newcommand*\splitfrac[2]{%
|
||
|
\genfrac{}{}{0pt}{1}%
|
||
|
{\textstyle#1\quad\hfill}%
|
||
|
{\textstyle\hfill\quad\mathstrut#2}%
|
||
|
}
|
||
|
\newcommand*\splitdfrac[2]{%
|
||
|
\genfrac{}{}{0pt}{0}{#1\quad\hfill}{\hfill\quad\mathstrut #2}%
|
||
|
}
|
||
|
\MH_if_boolean:nT {fixamsmath}{
|
||
|
\def\place@tag{%
|
||
|
\iftagsleft@
|
||
|
\kern-\tagshift@
|
||
|
\if@fleqn
|
||
|
\if_num:w \xatlevel@=\tw@
|
||
|
\kern-\@mathmargin
|
||
|
\fi:
|
||
|
\fi:
|
||
|
\if:w 1\shift@tag\row@\relax
|
||
|
\rlap{\vbox{%
|
||
|
\normalbaselines
|
||
|
\boxz@
|
||
|
\vbox to\lineht@{}%
|
||
|
\raise@tag
|
||
|
}}%
|
||
|
\else:
|
||
|
\rlap{\boxz@}%
|
||
|
\fi:
|
||
|
\kern\displaywidth@
|
||
|
\else:
|
||
|
\kern-\tagshift@
|
||
|
\if:w 1\shift@tag\row@\relax
|
||
|
\llap{\vtop{%
|
||
|
\raise@tag
|
||
|
\normalbaselines
|
||
|
\setbox\@ne\null
|
||
|
\dp\@ne\lineht@
|
||
|
\box\@ne
|
||
|
\boxz@
|
||
|
}}%
|
||
|
\else:
|
||
|
\llap{\boxz@}%
|
||
|
\fi:
|
||
|
\fi:
|
||
|
}
|
||
|
\def\x@calc@shift@lf{%
|
||
|
\if_dim:w \eqnshift@=\z@
|
||
|
\global\eqnshift@\@mathmargin\relax
|
||
|
\alignsep@\displaywidth
|
||
|
\advance\alignsep@-\totwidth@
|
||
|
\if_num:w \@tempcntb=0
|
||
|
\else:
|
||
|
\global\divide\alignsep@\@tempcntb % original line
|
||
|
\fi:
|
||
|
\if_dim:w \alignsep@<\minalignsep\relax
|
||
|
\global\alignsep@\minalignsep\relax
|
||
|
\fi:
|
||
|
\fi:
|
||
|
\if_dim:w \tag@width\row@>\@tempdima
|
||
|
\saveshift@1%
|
||
|
\else:
|
||
|
\saveshift@0%
|
||
|
\fi:}%
|
||
|
}
|
||
|
\MaybeMHPrecedingSpacesOff
|
||
|
\renewcommand\aligned@a[1][c]{\start@aligned{#1}\m@ne}
|
||
|
\MHPrecedingSpacesOn
|
||
|
\endinput
|
||
|
%%
|
||
|
%% End of file `mathtools.sty'.
|