From 954e518677de512ede9e6ee73428d4a0b8a933c4 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 15 Dec 2007 00:58:47 +0000 Subject: mh update (11dec07) git-svn-id: svn://tug.org/texlive/trunk@5787 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/mh/README | 72 +- Master/texmf-dist/doc/latex/mh/breqn.pdf | Bin 0 -> 377686 bytes Master/texmf-dist/doc/latex/mh/cmbase.sym | 367 ++ Master/texmf-dist/doc/latex/mh/empheq.pdf | Bin 219551 -> 276729 bytes Master/texmf-dist/doc/latex/mh/empheq07.pdf | Bin 55835 -> 128399 bytes Master/texmf-dist/doc/latex/mh/eqbreaks.pdf | 976 ++++ Master/texmf-dist/doc/latex/mh/eqlayouts.pdf | Bin 0 -> 110022 bytes Master/texmf-dist/doc/latex/mh/eqlayouts.tex | 346 ++ Master/texmf-dist/doc/latex/mh/flexisym.pdf | Bin 0 -> 139528 bytes Master/texmf-dist/doc/latex/mh/mathpazo.sym | 367 ++ Master/texmf-dist/doc/latex/mh/mathptmx.sym | 367 ++ Master/texmf-dist/doc/latex/mh/mathstyle.pdf | Bin 0 -> 86156 bytes Master/texmf-dist/doc/latex/mh/mathtools.pdf | Bin 210111 -> 375263 bytes Master/texmf-dist/doc/latex/mh/mhsetup.pdf | Bin 82328 -> 127028 bytes Master/texmf-dist/doc/latex/mh/msabm.sym | 253 + Master/texmf-dist/source/latex/mh/breqn.dtx | 6648 +++++++++++++++++++++++ Master/texmf-dist/source/latex/mh/empheq.dtx | 200 +- Master/texmf-dist/source/latex/mh/empheq07.dtx | 148 +- Master/texmf-dist/source/latex/mh/flexisym.dtx | 1279 +++++ Master/texmf-dist/source/latex/mh/mathstyle.dtx | 396 ++ Master/texmf-dist/source/latex/mh/mathtools.dtx | 262 +- Master/texmf-dist/source/latex/mh/mhsetup.dtx | 166 +- Master/texmf-dist/tex/latex/mh/breqn.sty | 2056 +++++++ Master/texmf-dist/tex/latex/mh/empheq.sty | 419 +- Master/texmf-dist/tex/latex/mh/empheq07.sty | 30 +- Master/texmf-dist/tex/latex/mh/flexisym.sty | 293 + Master/texmf-dist/tex/latex/mh/mathstyle.sty | 161 + Master/texmf-dist/tex/latex/mh/mathtools.sty | 119 +- Master/texmf-dist/tex/latex/mh/mhsetup.sty | 32 +- Master/texmf-dist/tex/latex/mh/ntheorem.fix | 402 -- Master/tlpkg/bin/ctan2tds | 7 +- Master/tlpkg/bin/tlpkg-ctan-check | 2 +- 32 files changed, 14675 insertions(+), 693 deletions(-) create mode 100644 Master/texmf-dist/doc/latex/mh/breqn.pdf create mode 100644 Master/texmf-dist/doc/latex/mh/cmbase.sym create mode 100644 Master/texmf-dist/doc/latex/mh/eqbreaks.pdf create mode 100644 Master/texmf-dist/doc/latex/mh/eqlayouts.pdf create mode 100644 Master/texmf-dist/doc/latex/mh/eqlayouts.tex create mode 100644 Master/texmf-dist/doc/latex/mh/flexisym.pdf create mode 100644 Master/texmf-dist/doc/latex/mh/mathpazo.sym create mode 100644 Master/texmf-dist/doc/latex/mh/mathptmx.sym create mode 100644 Master/texmf-dist/doc/latex/mh/mathstyle.pdf create mode 100644 Master/texmf-dist/doc/latex/mh/msabm.sym create mode 100644 Master/texmf-dist/source/latex/mh/breqn.dtx create mode 100644 Master/texmf-dist/source/latex/mh/flexisym.dtx create mode 100644 Master/texmf-dist/source/latex/mh/mathstyle.dtx create mode 100644 Master/texmf-dist/tex/latex/mh/breqn.sty create mode 100644 Master/texmf-dist/tex/latex/mh/flexisym.sty create mode 100644 Master/texmf-dist/tex/latex/mh/mathstyle.sty delete mode 100644 Master/texmf-dist/tex/latex/mh/ntheorem.fix diff --git a/Master/texmf-dist/doc/latex/mh/README b/Master/texmf-dist/doc/latex/mh/README index 569f67b4eae..d41d1ccb3db 100644 --- a/Master/texmf-dist/doc/latex/mh/README +++ b/Master/texmf-dist/doc/latex/mh/README @@ -1,38 +1,54 @@ - The mh bundle - ============= - Morten H\o gholm (c) 2002-2004 - email: moho01ab@student.cbs.dk - License: LaTeX Project Public License - -The files in the mh bundle are: - - mhsetup.dtx mhsetup.ins - mathtools.dtx mathtools.ins - empheq.dtx empheq.ins - empheq07.dtx empheq07.ins - +The mh bundle +============= +Morten Hoegholm (c) 2002-2007 +email: mh.ctan@gmail.com +License: LaTeX Project Public License + +The files in the mh bundle are listed are + breqn.dtx + flexisym.dtx + mathstyle.dtx + mhsetup.dtx + mathtools.dtx + empheq.dtx + empheq07.dtx + eqlayouts.tex + eqbreaks.pdf and derived files. The derived files of each .dtx-file are listed at the top of the respective .dtx-file. INSTALLATION ============ -This follows the usual procedure of .dtx-files. Run LaTeX on each -.ins-file to get the runtime files. These should all be placed in - TEXMF/tex/latex/mh -on your computer, where TEXMF is your (local) texmf tree. - +See the .dtx-files for details. DESCRIPTION =========== -The mh bundle is a series of packages designed to enhance the -appearance of documents containing a lot of math. The main -backbone is amsmath, so those unfamiliar with this required part -of the LaTeX system will probably not find the packages very -useful. +breqn +========= + +The breqn package facilitates automatic line-breaking of displayed +math expressions. The package was originally developed by Michael +J. Downes. + +flexisym +========= + +This package turns math symbols into macros. +Is is required by breqn so that breqn can make intelligent decisions +with respect to line-breaking and other details. + +mathstyle +========= + +Ensures uniform syntax for math subscript (_) and superscript (^) +operations so that they always take exactly one argument. +Grants access to the current mathstyle which eases several tasks such +as avoiding the many pitfalls of \mathchoice and \mathpalette. +This package is used by flexisym. -mathtools v1.01a 2004/10/10 +mathtools ========= The mathtools package provides many useful tools for mathematical @@ -53,7 +69,7 @@ of amsmath and standard LaTeX. It provides: mathtools requires mhsetup. -empheq v2.11a 2004/10/10 +empheq ====== The empheq package is a visual markup extension designed to @@ -68,7 +84,7 @@ function on top of amsmath. It features: empheq requires mathtools. -empheq07 v0.7d 2004/07/27 +empheq07 ======== The obsolete version of the empheq package. It is incompatible @@ -76,7 +92,7 @@ with current empheq (and will continue to be so) and is only provided to make old documents work. -mhsetup v1.01a 2004/10/10 +mhsetup ======= The mhsetup package defines various programming tools needed by @@ -85,4 +101,4 @@ probably be an integral part of LaTeX3. =========== -This README file was last revised 2004/10/10. +This README file was last revised 2007/12/10. diff --git a/Master/texmf-dist/doc/latex/mh/breqn.pdf b/Master/texmf-dist/doc/latex/mh/breqn.pdf new file mode 100644 index 00000000000..120e081c698 Binary files /dev/null and b/Master/texmf-dist/doc/latex/mh/breqn.pdf differ diff --git a/Master/texmf-dist/doc/latex/mh/cmbase.sym b/Master/texmf-dist/doc/latex/mh/cmbase.sym new file mode 100644 index 00000000000..151aac3c742 --- /dev/null +++ b/Master/texmf-dist/doc/latex/mh/cmbase.sym @@ -0,0 +1,367 @@ +%% +%% This is file `cmbase.sym', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% flexisym.dtx (with options: `cmbase') +%% +%% This is a generated file. +%% +%% Copyright (C) 1997-2003 by Michael J. Downes +%% Copyright (C) 2007 by Morten Hoegholm +%% +%% 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 flexisym.dtx +%% and the derived files +%% flexisym.sty, flexisym.pdf, flexisym.ins, flexisym.drv, +%% cmbase.sym, mathpazo.sym, mathptmx.sym, msabm.sym. +%% +\ProvidesSymbols{cmbase}[2001/09/07 v0.91] +\@xp\xdef\csname mg@OT1\endcsname{\hexnumber@\symoperators} +\@xp\xdef\csname mg@OML\endcsname{\hexnumber@\symletters} +\@xp\xdef\csname mg@OMS\endcsname{\hexnumber@\symsymbols} +\@xp\xdef\csname mg@OMX\endcsname{\hexnumber@\symlargesymbols} +\gdef\mg@bin{\mg@OMS} +\gdef\mg@del{\mg@OMX} +\xdef\mg@digit{\@xp\@nx\csname mg@OT1\endcsname} +\gdef\mg@latin{\mg@OML} +\global\let\mg@Latin\mg@latin +\global\let\mg@greek\mg@latin +\global\let\mg@Greek\mg@digit +\global\let\mg@rel\mg@bin +\global\let\mg@ord\mg@bin +\global\let\mg@cop\mg@del +\DeclareFlexSymbol{!} {Pun}{OT1}{21} +\DeclareFlexSymbol{+} {Bin}{OT1}{2B} +\DeclareFlexSymbol{:} {Rel}{OT1}{3A} +\DeclareFlexSymbol{\colon}{Pun}{OT1}{3A} +\DeclareFlexSymbol{;} {Pun}{OT1}{3B} +\DeclareFlexSymbol{=} {Rel}{OT1}{3D} +\DeclareFlexSymbol{?} {Pun}{OT1}{3F} +\DeclareFlexSymbol{\Gamma} {Var}{Greek}{00} +\DeclareFlexSymbol{\Delta} {Var}{Greek}{01} +\DeclareFlexSymbol{\Theta} {Var}{Greek}{02} +\DeclareFlexSymbol{\Lambda} {Var}{Greek}{03} +\DeclareFlexSymbol{\Xi} {Var}{Greek}{04} +\DeclareFlexSymbol{\Pi} {Var}{Greek}{05} +\DeclareFlexSymbol{\Sigma} {Var}{Greek}{06} +\DeclareFlexSymbol{\Upsilon}{Var}{Greek}{07} +\DeclareFlexSymbol{\Phi} {Var}{Greek}{08} +\DeclareFlexSymbol{\Psi} {Var}{Greek}{09} +\DeclareFlexSymbol{\Omega} {Var}{Greek}{0A} +\DeclareFlexSymbol{0}{Var}{digit}{30} +\DeclareFlexSymbol{1}{Var}{digit}{31} +\DeclareFlexSymbol{2}{Var}{digit}{32} +\DeclareFlexSymbol{3}{Var}{digit}{33} +\DeclareFlexSymbol{4}{Var}{digit}{34} +\DeclareFlexSymbol{5}{Var}{digit}{35} +\DeclareFlexSymbol{6}{Var}{digit}{36} +\DeclareFlexSymbol{7}{Var}{digit}{37} +\DeclareFlexSymbol{8}{Var}{digit}{38} +\DeclareFlexSymbol{9}{Var}{digit}{39} +\DeclareFlexSymbol{,}{Pun}{OML}{3B} +\DeclareFlexSymbol{.}{Ord}{OML}{3A} +\DeclareFlexSymbol{/}{Ord}{OML}{3D} +\DeclareFlexSymbol{<}{Rel}{OML}{3C} +\DeclareFlexSymbol{>}{Rel}{OML}{3E} +\DeclareFlexSymbol{\alpha}{Var}{greek}{0B} +\DeclareFlexSymbol{\beta}{Var}{greek}{0C} +\DeclareFlexSymbol{\gamma}{Var}{greek}{0D} +\DeclareFlexSymbol{\delta}{Var}{greek}{0E} +\DeclareFlexSymbol{\epsilon}{Var}{greek}{0F} +\DeclareFlexSymbol{\zeta}{Var}{greek}{10} +\DeclareFlexSymbol{\eta}{Var}{greek}{11} +\DeclareFlexSymbol{\theta}{Var}{greek}{12} +\DeclareFlexSymbol{\iota}{Var}{greek}{13} +\DeclareFlexSymbol{\kappa}{Var}{greek}{14} +\DeclareFlexSymbol{\lambda}{Var}{greek}{15} +\DeclareFlexSymbol{\mu}{Var}{greek}{16} +\DeclareFlexSymbol{\nu}{Var}{greek}{17} +\DeclareFlexSymbol{\xi}{Var}{greek}{18} +\DeclareFlexSymbol{\pi}{Var}{greek}{19} +\DeclareFlexSymbol{\rho}{Var}{greek}{1A} +\DeclareFlexSymbol{\sigma}{Var}{greek}{1B} +\DeclareFlexSymbol{\tau}{Var}{greek}{1C} +\DeclareFlexSymbol{\upsilon}{Var}{greek}{1D} +\DeclareFlexSymbol{\phi}{Var}{greek}{1E} +\DeclareFlexSymbol{\chi}{Var}{greek}{1F} +\DeclareFlexSymbol{\psi}{Var}{greek}{20} +\DeclareFlexSymbol{\omega}{Var}{greek}{21} +\DeclareFlexSymbol{\varepsilon}{Var}{greek}{22} +\DeclareFlexSymbol{\vartheta}{Var}{greek}{23} +\DeclareFlexSymbol{\varpi}{Var}{greek}{24} +\DeclareFlexSymbol{\varrho}{Var}{greek}{25} +\DeclareFlexSymbol{\varsigma}{Var}{greek}{26} +\DeclareFlexSymbol{\varphi}{Var}{greek}{27} +\DeclareFlexSymbol{\imath}{Var}{OML}{7B} +\DeclareFlexSymbol{\jmath}{Var}{OML}{7C} +\DeclareFlexSymbol{\ell}{Ord}{OML}{60} +\DeclareFlexSymbol{\wp}{Ord}{OML}{7D} +\DeclareFlexSymbol{\partial}{Ord}{OML}{40} +\DeclareFlexSymbol{\flat}{Ord}{OML}{5B} +\DeclareFlexSymbol{\natural}{Ord}{OML}{5C} +\DeclareFlexSymbol{\sharp}{Ord}{OML}{5D} +\DeclareFlexSymbol{\triangleleft}{Bin}{OML}{2F} +\DeclareFlexSymbol{\triangleright}{Bin}{OML}{2E} +\DeclareFlexSymbol{\star}{Bin}{OML}{3F} +\DeclareFlexSymbol{\smile}{Rel}{OML}{5E} +\DeclareFlexSymbol{\frown}{Rel}{OML}{5F} +\DeclareFlexSymbol{\leftharpoonup}{Rel}{OML}{28} +\DeclareFlexSymbol{\leftharpoondown}{Rel}{OML}{29} +\DeclareFlexSymbol{\rightharpoonup}{Rel}{OML}{2A} +\DeclareFlexSymbol{\rightharpoondown}{Rel}{OML}{2B} +\DeclareFlexSymbol{a}{Var}{latin}{61} +\DeclareFlexSymbol{b}{Var}{latin}{62} +\DeclareFlexSymbol{c}{Var}{latin}{63} +\DeclareFlexSymbol{d}{Var}{latin}{64} +\DeclareFlexSymbol{e}{Var}{latin}{65} +\DeclareFlexSymbol{f}{Var}{latin}{66} +\DeclareFlexSymbol{g}{Var}{latin}{67} +\DeclareFlexSymbol{h}{Var}{latin}{68} +\DeclareFlexSymbol{i}{Var}{latin}{69} +\DeclareFlexSymbol{j}{Var}{latin}{6A} +\DeclareFlexSymbol{k}{Var}{latin}{6B} +\DeclareFlexSymbol{l}{Var}{latin}{6C} +\DeclareFlexSymbol{m}{Var}{latin}{6D} +\DeclareFlexSymbol{n}{Var}{latin}{6E} +\DeclareFlexSymbol{o}{Var}{latin}{6F} +\DeclareFlexSymbol{p}{Var}{latin}{70} +\DeclareFlexSymbol{q}{Var}{latin}{71} +\DeclareFlexSymbol{r}{Var}{latin}{72} +\DeclareFlexSymbol{s}{Var}{latin}{73} +\DeclareFlexSymbol{t}{Var}{latin}{74} +\DeclareFlexSymbol{u}{Var}{latin}{75} +\DeclareFlexSymbol{v}{Var}{latin}{76} +\DeclareFlexSymbol{w}{Var}{latin}{77} +\DeclareFlexSymbol{x}{Var}{latin}{78} +\DeclareFlexSymbol{y}{Var}{latin}{79} +\DeclareFlexSymbol{z}{Var}{latin}{7A} +\DeclareFlexSymbol{A}{Var}{Latin}{41} +\DeclareFlexSymbol{B}{Var}{Latin}{42} +\DeclareFlexSymbol{C}{Var}{Latin}{43} +\DeclareFlexSymbol{D}{Var}{Latin}{44} +\DeclareFlexSymbol{E}{Var}{Latin}{45} +\DeclareFlexSymbol{F}{Var}{Latin}{46} +\DeclareFlexSymbol{G}{Var}{Latin}{47} +\DeclareFlexSymbol{H}{Var}{Latin}{48} +\DeclareFlexSymbol{I}{Var}{Latin}{49} +\DeclareFlexSymbol{J}{Var}{Latin}{4A} +\DeclareFlexSymbol{K}{Var}{Latin}{4B} +\DeclareFlexSymbol{L}{Var}{Latin}{4C} +\DeclareFlexSymbol{M}{Var}{Latin}{4D} +\DeclareFlexSymbol{N}{Var}{Latin}{4E} +\DeclareFlexSymbol{O}{Var}{Latin}{4F} +\DeclareFlexSymbol{P}{Var}{Latin}{50} +\DeclareFlexSymbol{Q}{Var}{Latin}{51} +\DeclareFlexSymbol{R}{Var}{Latin}{52} +\DeclareFlexSymbol{S}{Var}{Latin}{53} +\DeclareFlexSymbol{T}{Var}{Latin}{54} +\DeclareFlexSymbol{U}{Var}{Latin}{55} +\DeclareFlexSymbol{V}{Var}{Latin}{56} +\DeclareFlexSymbol{W}{Var}{Latin}{57} +\DeclareFlexSymbol{X}{Var}{Latin}{58} +\DeclareFlexSymbol{Y}{Var}{Latin}{59} +\DeclareFlexSymbol{Z}{Var}{Latin}{5A} +\DeclareFlexSymbol{\ldotPun}{Pun}{OML}{3A} +\def\ldotp{\ldotPun} +\DeclareFlexSymbol{\lhookRel}{Rel}{OML}{2C} +\DeclareFlexSymbol{\rhookRel}{Rel}{OML}{2D} +\DeclareFlexSymbol{*}{Bin}{bin}{03} % \ast +\DeclareFlexSymbol{-}{Bin}{bin}{00} +\DeclareFlexSymbol{|}{Ord}{OMS}{6A} +\DeclareFlexSymbol{\aleph}{Ord}{ord}{40} +\DeclareFlexSymbol{\Re}{Ord}{ord}{3C} +\DeclareFlexSymbol{\Im}{Ord}{ord}{3D} +\DeclareFlexSymbol{\infty}{Ord}{ord}{31} +\DeclareFlexSymbol{\prime}{Ord}{ord}{30} +\DeclareFlexSymbol{\emptyset}{Ord}{ord}{3B} +\DeclareFlexSymbol{\nabla}{Ord}{ord}{72} +\DeclareFlexSymbol{\top}{Ord}{ord}{3E} +\DeclareFlexSymbol{\bot}{Ord}{ord}{3F} +\DeclareFlexSymbol{\triangle}{Ord}{ord}{34} +\DeclareFlexSymbol{\forall}{Ord}{ord}{38} +\DeclareFlexSymbol{\exists}{Ord}{ord}{39} +\DeclareFlexSymbol{\neg}{Ord}{ord}{3A} +\DeclareFlexSymbol{\clubsuit}{Ord}{ord}{7C} +\DeclareFlexSymbol{\diamondsuit}{Ord}{ord}{7D} +\DeclareFlexSymbol{\heartsuit}{Ord}{ord}{7E} +\DeclareFlexSymbol{\spadesuit}{Ord}{ord}{7F} +\DeclareFlexSymbol{\smallint}{COs}{OMS}{73} +\DeclareFlexSymbol{\bigtriangleup}{Bin}{bin}{34} +\DeclareFlexSymbol{\bigtriangledown}{Bin}{bin}{35} +\DeclareFlexSymbol{\wedge}{Bin}{bin}{5E} +\DeclareFlexSymbol{\vee}{Bin}{bin}{5F} +\DeclareFlexSymbol{\cap}{Bin}{bin}{5C} +\DeclareFlexSymbol{\cup}{Bin}{bin}{5B} +\DeclareFlexSymbol{\ddagger}{Bin}{bin}{7A} +\DeclareFlexSymbol{\dagger}{Bin}{bin}{79} +\DeclareFlexSymbol{\sqcap}{Bin}{bin}{75} +\DeclareFlexSymbol{\sqcup}{Bin}{bin}{74} +\DeclareFlexSymbol{\uplus}{Bin}{bin}{5D} +\DeclareFlexSymbol{\amalg}{Bin}{bin}{71} +\DeclareFlexSymbol{\diamond}{Bin}{bin}{05} +\DeclareFlexSymbol{\bullet}{Bin}{bin}{0F} +\DeclareFlexSymbol{\wr}{Bin}{bin}{6F} +\DeclareFlexSymbol{\div}{Bin}{bin}{04} +\DeclareFlexSymbol{\odot}{Bin}{bin}{0C} +\DeclareFlexSymbol{\oslash}{Bin}{bin}{0B} +\DeclareFlexSymbol{\otimes}{Bin}{bin}{0A} +\DeclareFlexSymbol{\ominus}{Bin}{bin}{09} +\DeclareFlexSymbol{\oplus}{Bin}{bin}{08} +\DeclareFlexSymbol{\mp}{Bin}{bin}{07} +\DeclareFlexSymbol{\pm}{Bin}{bin}{06} +\DeclareFlexSymbol{\circ}{Bin}{bin}{0E} +\DeclareFlexSymbol{\bigcirc}{Bin}{bin}{0D} +\DeclareFlexSymbol{\setminus}{Bin}{bin}{6E} +\DeclareFlexSymbol{\cdot}{Bin}{bin}{01} +\DeclareFlexSymbol{\ast}{Bin}{bin}{03} +\DeclareFlexSymbol{\times}{Bin}{bin}{02} +\DeclareFlexSymbol{\propto}{Rel}{rel}{2F} +\DeclareFlexSymbol{\sqsubseteq}{Rel}{rel}{76} +\DeclareFlexSymbol{\sqsupseteq}{Rel}{rel}{77} +\DeclareFlexSymbol{\parallel}{Rel}{rel}{6B} +\DeclareFlexSymbol{\mid}{Rel}{rel}{6A} +\DeclareFlexSymbol{\dashv}{Rel}{rel}{61} +\DeclareFlexSymbol{\vdash}{Rel}{rel}{60} +\DeclareFlexSymbol{\nearrow}{Rel}{rel}{25} +\DeclareFlexSymbol{\searrow}{Rel}{rel}{26} +\DeclareFlexSymbol{\nwarrow}{Rel}{rel}{2D} +\DeclareFlexSymbol{\swarrow}{Rel}{rel}{2E} +\DeclareFlexSymbol{\Leftrightarrow}{Rel}{rel}{2C} +\DeclareFlexSymbol{\Leftarrow}{Rel}{rel}{28} +\DeclareFlexSymbol{\Rightarrow}{Rel}{rel}{29} +\DeclareFlexSymbol{\leq}{Rel}{rel}{14} +\DeclareFlexSymbol{\geq}{Rel}{rel}{15} +\DeclareFlexSymbol{\succ}{Rel}{rel}{1F} +\DeclareFlexSymbol{\prec}{Rel}{rel}{1E} +\DeclareFlexSymbol{\approx}{Rel}{rel}{19} +\DeclareFlexSymbol{\succeq}{Rel}{rel}{17} +\DeclareFlexSymbol{\preceq}{Rel}{rel}{16} +\DeclareFlexSymbol{\supset}{Rel}{rel}{1B} +\DeclareFlexSymbol{\subset}{Rel}{rel}{1A} +\DeclareFlexSymbol{\supseteq}{Rel}{rel}{13} +\DeclareFlexSymbol{\subseteq}{Rel}{rel}{12} +\DeclareFlexSymbol{\in}{Rel}{rel}{32} +\DeclareFlexSymbol{\ni}{Rel}{rel}{33} +\DeclareFlexSymbol{\gg}{Rel}{rel}{1D} +\DeclareFlexSymbol{\ll}{Rel}{rel}{1C} +\DeclareFlexSymbol{\leftrightarrow}{Rel}{rel}{24} +\DeclareFlexSymbol{\leftarrow}{Rel}{rel}{20} +\DeclareFlexSymbol{\rightarrow}{Rel}{rel}{21} +\DeclareFlexSymbol{\sim}{Rel}{rel}{18} +\DeclareFlexSymbol{\simeq}{Rel}{rel}{27} +\DeclareFlexSymbol{\perp}{Rel}{rel}{3F} +\DeclareFlexSymbol{\equiv}{Rel}{rel}{11} +\DeclareFlexSymbol{\asymp}{Rel}{rel}{10} +\DeclareFlexSymbol{\notRel}{Rel}{rel}{36} +\DeclareFlexSymbol{\mapstoOrd}{Ord}{OMS}{37} +\DeclareFlexSymbol{\cdotOrd}{Ord}{OMS}{01} +\def\cdotp{\mathpunct{\cdotOrd}} +\DeclareFlexSymbol{\coprod}{COs}{cop}{60} +\DeclareFlexSymbol{\bigvee}{COs}{cop}{57} +\DeclareFlexSymbol{\bigwedge}{COs}{cop}{56} +\DeclareFlexSymbol{\biguplus}{COs}{cop}{55} +\DeclareFlexSymbol{\bigcap}{COs}{cop}{54} +\DeclareFlexSymbol{\bigcup}{COs}{cop}{53} +\DeclareFlexSymbol{\int}{COi}{cop}{52} +\DeclareFlexSymbol{\prod}{COs}{cop}{51} +\DeclareFlexSymbol{\sum}{COs}{cop}{50} +\DeclareFlexSymbol{\bigotimes}{COs}{cop}{4E} +\DeclareFlexSymbol{\bigoplus}{COs}{cop}{4C} +\DeclareFlexSymbol{\bigodot}{COs}{cop}{4A} +\DeclareFlexSymbol{\oint}{COi}{cop}{48} +\DeclareFlexSymbol{\bigsqcup}{COs}{cop}{46} +\DeclareFlexSymbol{\rangle}{DeR}{del}{0B} +\DeclareFlexSymbol{\langle}{DeL}{del}{0A} +\DeclareFlexSymbol{\rbrace}{DeR}{del}{09} +\DeclareFlexSymbol{\lbrace}{DeL}{del}{08} +\DeclareFlexSymbol{\rceil}{DeR}{del}{07} +\DeclareFlexSymbol{\lceil}{DeL}{del}{06} +\DeclareFlexSymbol{\rfloor}{DeR}{del}{05} +\DeclareFlexSymbol{\lfloor}{DeL}{del}{04} +\DeclareFlexSymbol{(}{DeL}{del}{00} +\DeclareFlexSymbol{)}{DeR}{del}{01} +\DeclareFlexSymbol{[}{DeL}{del}{02} +\DeclareFlexSymbol{]}{DeR}{del}{03} +\DeclareFlexSymbol{\lVert}{DeL}{del}{0D} +\DeclareFlexSymbol{\rVert}{DeR}{del}{0D} +\DeclareFlexSymbol{\lvert}{DeL}{del}{0C} +\DeclareFlexSymbol{\rvert}{DeR}{del}{0C} +\DeclareFlexSymbol{\Vert}{DeB}{del}{0D} +\DeclareFlexSymbol{\vert}{DeB}{del}{0C} +\DeclareFlexSymbol{|}{DeB}{del}{0C} +\DeclareFlexSymbol{/}{DeB}{del}{0E} +\DeclareFlexSymbol{\lmoustache}{DeL}{del}{40} +\DeclareFlexSymbol{\rmoustache}{DeR}{del}{41} +\DeclareFlexSymbol{\lgroup}{DeL}{del}{3A} +\DeclareFlexSymbol{\rgroup}{DeR}{del}{3B} +\DeclareFlexSymbol{\bracevert}{DeB}{del}{3E} +\DeclareFlexSymbol{\arrowvert}{DeB}{del}{3C} +\DeclareFlexSymbol{\Arrowvert}{DeB}{del}{3D} +\DeclareFlexSymbol{\uparrow}{DeA}{del}{78} +\DeclareFlexSymbol{\downarrow}{DeA}{del}{79} +\DeclareFlexSymbol{\updownarrow}{DeA}{del}{3F} +\DeclareFlexSymbol{\Uparrow}{DeA}{del}{7E} +\DeclareFlexSymbol{\Downarrow}{DeA}{del}{7F} +\DeclareFlexSymbol{\Updownarrow}{DeA}{del}{77} +\DeclareFlexSymbol{\backslash}{DeB}{del}{0F} +\DeclareFlexSymbol{\hbarOrd}{Ord}{OT1}{16} +\DeclareFlexCompoundSymbol{\hbar}{Ord}{\hbarOrd\mkern-9mu h} +\DeclareFlexSymbol{\surdOrd}{Ord}{OMS}{70} +\DeclareFlexCompoundSymbol{\surd}{Ord}{\mathop{\surdOrd}} +\DeclareFlexCompoundSymbol{\angle}{Ord}{% + \vbox{\ialign{% + $\m@th\scriptstyle##$\crcr + \notRel\mathrel{\mkern14mu}\crcr + \noalign{\nointerlineskip}% + \mkern2.5mu\leaders\hrule \@height.34pt\hfill\mkern2.5mu\crcr + }}% +} +\DeclareFlexCompoundSymbol{\neq}{Rel}{\not{=}} +\DeclareFlexCompoundSymbol{\mapsto}{Rel}{\mapstoOrd\rightarrow} +\DeclareFlexCompoundSymbol{\cong}{Rel}{\mathpalette\@vereq\sim} +\newcommand*\joinord{\mkern-3mu } +\DeclareFlexCompoundSymbol{\notin}{Rel}{\mathpalette\c@ncel\in} +\DeclareFlexCompoundSymbol{\rightleftharpoons}{Rel}{\mathpalette\rlh@{}} +\DeclareFlexCompoundSymbol{\doteq}{Rel}{\buildrel\textstyle.\over=} +\DeclareFlexCompoundSymbol{\hookrightarrow}{Rel}{\lhookRel\joinord\rightarrow} +\DeclareFlexCompoundSymbol{\hookleftarrow}{Rel}{\leftarrow\joinord\rhookRel} +\DeclareFlexCompoundSymbol{\bowtie}{Rel}{\triangleright\joinord\triangleleft} +\DeclareFlexCompoundSymbol{\models}{Rel}{\vert\joinord=} +\DeclareFlexCompoundSymbol{\Longrightarrow}{Rel}{\Relbar\joinord\Rightarrow} +\DeclareFlexCompoundSymbol{\longrightarrow}{Rel}{\relbar\joinord\rightarrow} +\DeclareFlexCompoundSymbol{\Longleftarrow}{Rel}{\Leftarrow\joinord\Relbar} +\DeclareFlexCompoundSymbol{\longleftarrow}{Rel}{\leftarrow\joinord\relbar} +\DeclareFlexCompoundSymbol{\longmapsto}{Rel}{\mapstochar\longrightarrow} +\DeclareFlexCompoundSymbol{\longleftrightarrow}{Rel}{\leftarrow\joinord\rightarrow} +\DeclareFlexCompoundSymbol{\Longleftrightarrow}{Rel}{\Leftarrow\joinord\Rightarrow} +\renewcommand*\iff{% + \mskip\thickmuskip\Longleftrightarrow\mskip\thickmuskip +} +\DeclareFlexCompoundSymbol{\cdots}{Inn}{\cdotp\cdotp\cdotp}% +\DeclareFlexCompoundSymbol{\vdots}{Ord}{% + \vbox{\baselineskip4\p@ \lineskiplimit\z@ + \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} +\DeclareFlexCompoundSymbol{\ddots}{Inn}{% + \mkern1mu\raise7\p@ + \vbox{\kern7\p@\hbox{.}}\mkern2mu% + \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu% +} +\def\relbar{\begingroup \def\smash@{tb}% in case amsmath is loaded + \mathpalette\mathsm@sh{\mathchar"200 }\endgroup} +\def\Relbar{\mathchar"3D } +\endinput +%% +%% End of file `cmbase.sym'. diff --git a/Master/texmf-dist/doc/latex/mh/empheq.pdf b/Master/texmf-dist/doc/latex/mh/empheq.pdf index 3c86b03eebf..3bcbcd25716 100644 Binary files a/Master/texmf-dist/doc/latex/mh/empheq.pdf and b/Master/texmf-dist/doc/latex/mh/empheq.pdf differ diff --git a/Master/texmf-dist/doc/latex/mh/empheq07.pdf b/Master/texmf-dist/doc/latex/mh/empheq07.pdf index 5a8fd6bbfc2..bad1ab5511f 100644 Binary files a/Master/texmf-dist/doc/latex/mh/empheq07.pdf and b/Master/texmf-dist/doc/latex/mh/empheq07.pdf differ diff --git a/Master/texmf-dist/doc/latex/mh/eqbreaks.pdf b/Master/texmf-dist/doc/latex/mh/eqbreaks.pdf new file mode 100644 index 00000000000..621bcc75dba --- /dev/null +++ b/Master/texmf-dist/doc/latex/mh/eqbreaks.pdf @@ -0,0 +1,976 @@ +%PDF-1.2 +7 0 obj +<< +/Type/Encoding +/Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/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/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/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/endash/emdash/hungarumlaut/tilde/dieresis/suppress +160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis] +>> +endobj +10 0 obj +<< +/Encoding 7 0 R +/Type/Font +/Subtype/Type1 +/Name/F1 +/FontDescriptor 9 0 R +/BaseFont/MALWXI+CMR12 +/FirstChar 33 +/LastChar 196 +/Widths[272 489.6 816 489.6 816 761.6 272 380.8 380.8 489.6 761.6 272 326.4 272 489.6 +489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 +462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 +734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 +272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 +544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8 435.2 489.6 979.2 489.6 489.6 +489.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611.8 816 +761.6 679.6 652.8 734 707.2 761.6 707.2 761.6 0 0 707.2 571.2 544 544 816 816 272 +299.2 489.6 489.6 489.6 489.6 489.6 734 435.2 489.6 707.2 761.6 489.6 883.8 992.6 +761.6 272 489.6] +>> +endobj +13 0 obj +<< +/Encoding 7 0 R +/Type/Font +/Subtype/Type1 +/Name/F2 +/FontDescriptor 12 0 R +/BaseFont/WFEUNY+CMR10 +/FirstChar 33 +/LastChar 196 +/Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 +500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 +750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 +680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 +277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 +500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 +500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3 +777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3 +277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 +277.8 500] +>> +endobj +14 0 obj +<< +/Type/Encoding +/Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/alpha/beta/gamma/delta/epsilon1/zeta/eta/theta/iota/kappa/lambda/mu/nu/xi/pi/rho/sigma/tau/upsilon/phi/chi/psi/omega/epsilon/theta1/pi1/rho1/sigma1/phi1/arrowlefttophalf/arrowleftbothalf/arrowrighttophalf/arrowrightbothalf/arrowhookleft/arrowhookright/triangleright/triangleleft/zerooldstyle/oneoldstyle/twooldstyle/threeoldstyle/fouroldstyle/fiveoldstyle/sixoldstyle/sevenoldstyle/eightoldstyle/nineoldstyle/period/comma/less/slash/greater/star/partialdiff/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/flat/natural/sharp/slurbelow/slurabove/lscript/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/dotlessi/dotlessj/weierstrass/vector/tie/psi +160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/alpha/beta/gamma/delta/epsilon1/zeta/eta/theta/iota/kappa/lambda/mu/nu/xi/pi/rho/sigma/tau/upsilon/phi/chi/psi/tie] +>> +endobj +17 0 obj +<< +/Encoding 14 0 R +/Type/Font +/Subtype/Type1 +/Name/F3 +/FontDescriptor 16 0 R +/BaseFont/KCMZHQ+CMMI10 +/FirstChar 33 +/LastChar 196 +/Widths[622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 +500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 +750 758.5 714.7 827.9 738.2 643.1 786.2 831.3 439.6 554.5 849.3 680.6 970.1 803.5 +762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 +388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 +298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1 572.5 484.7 715.9 571.5 490.3 +465 322.5 384 636.5 500 277.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 615.3 833.3 762.8 694.4 742.4 831.3 779.9 583.3 666.7 612.2 0 0 772.4 +639.7 565.6 517.7 444.4 405.9 437.5 496.5 469.4 353.9 576.2 583.3 602.5 494 437.5 +570 517 571.4 437.2 540.3 595.8 625.7 651.4 277.8] +>> +endobj +20 0 obj +<< +/Encoding 7 0 R +/Type/Font +/Subtype/Type1 +/Name/F4 +/FontDescriptor 19 0 R +/BaseFont/ZNSNNO+CMR7 +/FirstChar 33 +/LastChar 196 +/Widths[323.4 569.4 938.5 569.4 938.5 877 323.4 446.4 446.4 569.4 877 323.4 384.9 +323.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 323.4 323.4 +323.4 877 538.7 538.7 877 843.3 798.6 815.5 860.1 767.9 737.1 883.9 843.3 412.7 583.3 +874 706.4 1027.8 843.3 877 767.9 877 829.4 631 815.5 843.3 843.3 1150.8 843.3 843.3 +692.5 323.4 569.4 323.4 569.4 323.4 323.4 569.4 631 507.9 631 507.9 354.2 569.4 631 +323.4 354.2 600.2 323.4 938.5 631 569.4 631 600.2 446.4 452.6 446.4 631 600.2 815.5 +600.2 600.2 507.9 569.4 1138.9 569.4 569.4 569.4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 706.4 938.5 877 781.8 754 843.3 815.5 877 815.5 +877 0 0 815.5 677.6 646.8 646.8 970.2 970.2 323.4 354.2 569.4 569.4 569.4 569.4 569.4 +843.3 507.9 569.4 815.5 877 569.4 1013.9 1136.9 877 323.4 569.4] +>> +endobj +21 0 obj +<< +/Type/Encoding +/Differences[0/minus/periodcentered/multiply/asteriskmath/divide/diamondmath/plusminus/minusplus/circleplus/circleminus/circlemultiply/circledivide/circledot/circlecopyrt/openbullet/bullet/equivasymptotic/equivalence/reflexsubset/reflexsuperset/lessequal/greaterequal/precedesequal/followsequal/similar/approxequal/propersubset/propersuperset/lessmuch/greatermuch/precedes/follows/arrowleft/arrowright/arrowup/arrowdown/arrowboth/arrownortheast/arrowsoutheast/similarequal/arrowdblleft/arrowdblright/arrowdblup/arrowdbldown/arrowdblboth/arrownorthwest/arrowsouthwest/proportional/prime/infinity/element/owner/triangle/triangleinv/negationslash/mapsto/universal/existential/logicalnot/emptyset/Rfractur/Ifractur/latticetop/perpendicular/aleph/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/union/intersection/unionmulti/logicaland/logicalor/turnstileleft/turnstileright/floorleft/floorright/ceilingleft/ceilingright/braceleft/braceright/angbracketleft/angbracketright/bar/bardbl/arrowbothv/arrowdblbothv/backslash/wreathproduct/radical/coproduct/nabla/integral/unionsq/intersectionsq/subsetsqequal/supersetsqequal/section/dagger/daggerdbl/paragraph/club/diamond/heart/spade/arrowleft +161/minus/periodcentered/multiply/asteriskmath/divide/diamondmath/plusminus/minusplus/circleplus/circleminus +173/circlemultiply/circledivide/circledot/circlecopyrt/openbullet/bullet/equivasymptotic/equivalence/reflexsubset/reflexsuperset/lessequal/greaterequal/precedesequal/followsequal/similar/approxequal/propersubset/propersuperset/lessmuch/greatermuch/precedes/follows/arrowleft/spade] +>> +endobj +24 0 obj +<< +/Encoding 21 0 R +/Type/Font +/Subtype/Type1 +/Name/F5 +/FontDescriptor 23 0 R +/BaseFont/QGRDUG+CMSY10 +/FirstChar 33 +/LastChar 196 +/Widths[1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 +275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 +611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 +820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 +666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 +500 500 611.1 500 277.8 833.3 750 833.3 416.7 666.7 666.7 777.8 777.8 444.4 444.4 +444.4 611.1 777.8 777.8 777.8 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 0 0 777.8 +777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 +777.8 777.8 1000 1000 777.8 777.8 1000 777.8] +>> +endobj +27 0 obj +<< +/Type/Font +/Subtype/Type1 +/Name/F6 +/FontDescriptor 26 0 R +/BaseFont/PAMJDP+CMEX10 +/FirstChar 33 +/LastChar 196 +/Widths[791.7 583.3 583.3 638.9 638.9 638.9 638.9 805.6 805.6 805.6 805.6 1277.8 +1277.8 811.1 811.1 875 875 666.7 666.7 666.7 666.7 666.7 666.7 888.9 888.9 888.9 +888.9 888.9 888.9 888.9 666.7 875 875 875 875 611.1 611.1 833.3 1111.1 472.2 555.6 +1111.1 1511.1 1111.1 1511.1 1111.1 1511.1 1055.6 944.4 472.2 833.3 833.3 833.3 833.3 +833.3 1444.4 1277.8 555.6 1111.1 1111.1 1111.1 1111.1 1111.1 944.4 1277.8 555.6 1000 +1444.4 555.6 1000 1444.4 472.2 472.2 527.8 527.8 527.8 527.8 666.7 666.7 1000 1000 +1000 1000 1055.6 1055.6 1055.6 777.8 666.7 666.7 450 450 450 450 777.8 777.8 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 458.3 458.3 416.7 416.7 +472.2 472.2 472.2 472.2 583.3 583.3 0 0 472.2 472.2 333.3 555.6 577.8 577.8 597.2 +597.2 736.1 736.1 527.8 527.8 583.3 583.3 583.3 583.3 750 750 750 750 1044.4 1044.4 +791.7 777.8] +>> +endobj +30 0 obj +<< +/Encoding 14 0 R +/Type/Font +/Subtype/Type1 +/Name/F7 +/FontDescriptor 29 0 R +/BaseFont/QVRZWB+CMMI7 +/FirstChar 33 +/LastChar 196 +/Widths[719.7 539.7 689.9 950 592.7 439.2 751.4 1138.9 1138.9 1138.9 1138.9 339.3 +339.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 339.3 +339.3 892.9 585.3 892.9 585.3 610.1 859.1 863.2 819.4 934.1 838.7 724.5 889.4 935.6 +506.3 632 959.9 783.7 1089.4 904.9 868.9 727.3 899.7 860.6 701.5 674.8 778.2 674.6 +1074.4 936.9 671.5 778.4 462.3 462.3 462.3 1138.9 1138.9 478.2 619.7 502.4 510.5 +594.7 542 557.1 557.3 668.8 404.2 472.7 607.3 361.3 1013.7 706.2 563.9 588.9 523.6 +530.4 539.2 431.6 675.4 571.4 826.4 647.8 579.4 545.8 398.6 442 730.1 585.3 339.3 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 693.8 954.4 868.9 +797.6 844.5 935.6 886.3 677.6 769.8 716.9 0 0 880 742.7 647.8 600.1 519.2 476.1 519.8 +588.6 544.1 422.8 668.8 677.6 694.6 572.8 519.8 668 592.7 662 526.8 632.9 686.9 713.8 +756 339.3] +>> +endobj +31 0 obj +<< +/Type/Encoding +/Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/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/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/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/endash/emdash/hungarumlaut/tilde/dieresis/suppress +160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis] +>> +endobj +34 0 obj +<< +/Encoding 31 0 R +/Type/Font +/Subtype/Type1 +/Name/F8 +/FontDescriptor 33 0 R +/BaseFont/UZMPRB+CMR5 +/FirstChar 33 +/LastChar 196 +/Widths[402.8 680.6 1097.2 680.6 1097.2 1027.8 402.8 541.7 541.7 680.6 1027.8 402.8 +472.2 402.8 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 402.8 +402.8 1027.8 1027.8 1027.8 645.8 1027.8 980.6 934.7 958.3 1004.2 900 865.3 1033.4 +980.6 494.5 691.7 1015.3 830.6 1188.9 980.6 1027.8 900 1027.8 969.5 750 958.3 980.6 +980.6 1327.8 980.6 980.6 819.5 402.8 680.6 402.8 680.6 402.8 402.8 680.6 750 611.1 +750 611.1 437.5 680.6 750 402.8 437.5 715.3 402.8 1097.2 750 680.6 750 715.3 541.7 +548.6 541.7 750 715.3 958.3 715.3 715.3 611.1 680.6 1361.1 680.6 680.6 680.6 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 830.6 1097.2 1027.8 +911.1 888.9 980.6 958.3 1027.8 958.3 1027.8 0 0 958.3 680.6 680.6 402.8 402.8 645.8 +402.8 437.5 680.6 680.6 680.6 680.6 680.6 980.6 611.1 680.6 958.3 1027.8 680.6 1177.8 +1316.7 1027.8 402.8 680.6] +>> +endobj +37 0 obj +<< +/Encoding 21 0 R +/Type/Font +/Subtype/Type1 +/Name/F9 +/FontDescriptor 36 0 R +/BaseFont/JBJZGS+CMSY7 +/FirstChar 33 +/LastChar 196 +/Widths[1138.9 585.3 585.3 1138.9 1138.9 1138.9 892.9 1138.9 1138.9 708.3 708.3 1138.9 +1138.9 1138.9 892.9 329.4 1138.9 769.8 769.8 1015.9 1015.9 0 0 646.8 646.8 769.8 +585.3 831.4 831.4 892.9 892.9 708.3 917.6 753.4 620.2 889.5 616.1 818.4 688.5 978.6 +646.5 782.1 871.7 791.7 1342.7 935.6 905.8 809.2 935.9 981 702.2 647.8 717.8 719.9 +1135.1 818.9 764.4 823.1 769.8 769.8 769.8 769.8 769.8 708.3 708.3 523.8 523.8 523.8 +523.8 585.3 585.3 462.3 462.3 339.3 585.3 585.3 708.3 585.3 339.3 938.5 859.1 954.4 +493.6 769.8 769.8 892.9 892.9 523.8 523.8 523.8 708.3 892.9 892.9 892.9 892.9 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 892.9 339.3 892.9 585.3 +892.9 585.3 892.9 892.9 892.9 892.9 0 0 892.9 892.9 892.9 1138.9 585.3 585.3 892.9 +892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 1138.9 892.9 +892.9 1138.9 892.9] +>> +endobj +38 0 obj +<< +/Type/Encoding +/Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/visiblespace/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/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/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/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/braceleft/bar/braceright/asciitilde/dieresis/visiblespace +160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/visiblespace/dieresis] +>> +endobj +41 0 obj +<< +/Encoding 38 0 R +/Type/Font +/Subtype/Type1 +/Name/F10 +/FontDescriptor 40 0 R +/BaseFont/PMDWMQ+CMTT10 +/FirstChar 33 +/LastChar 196 +/Widths[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 +525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 +525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 +525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 +525 525 525 525 525 525 525 525 525 525 525 525 525 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 525 525 525 525 525 525 525 525 525 525 0 0 525 +525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 +525 525] +>> +endobj +43 0 obj +<< +/Filter[/FlateDecode] +/Length 1370 +>> +stream +xڥW͓6'A$3=M&3mmk 5:ۿ u&3݃> fq<{=8g +KRDfwzlW" ˦*J +֚:l|27>t8Tc &eew%%HOdqVD1Gͻ"Y1 Y)Ҁxãe p!=ْ4D;[ R:,=zf]l}]r#^!Fӳ+@,pr85cہU!pO5bHek|z,љW[Vr& +ƩJ +5e[#\Szk齨mG^ALj-s㈯!Ti3Ե'R?8{tj>^wh+<8fΥ6B]`n$~g,?Vdy"9 9Ӌ mjgƾS~:Տ/J:&ɝM06+\h$B+9cMLluQ~JiBz3V,Vr&Sp/"0}dpJL12gz"'7.:a -$(9.nKFd$MgDw)5$yBSY bǜi=9$gA5N3PАgLT?,c$܇&<4_#x?\X"eJm2II`U]ө,py6n0`?5hEh،fwr=aOyZnm7تu}(<<it!ꪷ#`xKfx8ܜ@{4'CW[:y90^_}Y)5<.$^\_IV?-!dj$[h19ʮy|kcA)fi{|e0+jZmE0+eo"D0|s|ϫTAp'P csp/a<փxḫ?T'X4NKun0-B0p~"͠wWVW^m 9,$u +oToeUz5xC]w>V͌ +0Z: {.ղY$_D;rc^)^;5w܃܄o&-ɾ[/!ސT> +endobj +6 0 obj +<< +/ProcSet[/PDF/Text/ImageC] +/Font 45 0 R +>> +endobj +48 0 obj +<< +/Type/Encoding +/Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/sterling/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/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/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/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/endash/emdash/hungarumlaut/tilde/dieresis/suppress +160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis] +>> +endobj +51 0 obj +<< +/Encoding 48 0 R +/Type/Font +/Subtype/Type1 +/Name/F11 +/FontDescriptor 50 0 R +/BaseFont/BJZUOD+CMTI10 +/FirstChar 33 +/LastChar 196 +/Widths[306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 +306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 +306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 +525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 +743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 +460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 +460 664.4 463.9 485.6 408.9 511.1 1022.2 511.1 511.1 511.1 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 627.2 817.8 766.7 692.2 664.4 743.3 715.6 +766.7 715.6 766.7 0 0 715.6 613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 +511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 511.1] +>> +endobj +52 0 obj +<< +/Filter[/FlateDecode] +/Length 2398 +>> +stream +xڅYKWرF"d& =ZQ_zQ/*U"YUDam7çjSey8mrjT| pK(x۝ʓORi6uLAF 릪l]U.٪oUDGN b-NjTjU\[X Z)|''2R \#W.xg> Y=D{``k\!C35AzhV=5"u&s@΃9"d4(>2n 5CFyQD/;a 5Ct>{;+VcdƦ> @Ic5X Oˀ8[e*@eZH_(0bǪ,P2vw{0Gkx +#0 +~})dY+_Empש̂@ͥN>Y %AAo \YLv֙{xvU7«gP m}觮b,"r8t6oq3U Ҝ4;k8 N9%`>THy/ 4:-SqT2FUMן *䒸pWNM']dYA 7a }| X98bz08;ig+K g,gZHg +qXג!VUrm\MŒCc-~"| +a7uM7{Db1OA!hbfR1,s֫`v4'E$rnh!֙PYrweG}CnGP|u[@ 娏:g-sJ%R \a'\ȉjRq=GfM{bsS}5)w]Pb$K:uR92R[|!H +AAiNj`Z-;8Oğ釰+8d焱eD\ZZD23vB_ J@4:)Wq+:Ly8.IH"ԕZ)`%}t$C}WJJƀ= 98Cub5@>6s"UQfkΗ +Y~0̅4SK!ouh>VIBLM8JuSh\w1Y5UAj_DLbI lu}8gnZGFBLG[+˕ݧ#lFsՇe֫|RK0IָzZj5B*s*|*r+uGlw}]W{" > +endobj +47 0 obj +<< +/ProcSet[/PDF/Text/ImageC] +/Font 53 0 R +>> +endobj +56 0 obj +<< +/Filter[/FlateDecode] +/Length 428 +>> +stream +xڕMs09&cY L/p3=hM[F*o ~Puʁ ɻ/ 9 mx"wi0H@A"-`Hz?`Kb/"F"%τLX^+xVueޒ+x]r(ʋ$veEIKQ9 +66-Dj'eXVr8uy3*lyV6v}W>nwYd &CD 2j + ?\gya#4Xx@άr+ %TKz7d#$ǜLo)w9u_*+`J)i#:eR ӈom`E>϶Yש^*Wz:wHTI f?7L4 +endstream +endobj +57 0 obj +<< +/F10 41 0 R +/F2 13 0 R +>> +endobj +55 0 obj +<< +/ProcSet[/PDF/Text/ImageC] +/Font 57 0 R +>> +endobj +9 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-34 -251 988 750] +/FontName/MALWXI+CMR12 +/ItalicAngle 0 +/StemV 65 +/FontFile 8 0 R +/Flags 4 +>> +endobj +8 0 obj +<< +/Filter[/FlateDecode] +/Length1 714 +/Length2 5296 +/Length3 533 +/Length 5848 +>> +stream +xg8 F"QH%zoc )D.h=z&QC5쬵w>xsy゙M[_eUB! S +FP`4ʹA" !1rr; +<$r+ F5h(w  0(KÁnyԅCmaa- @aHLH;Po_-w\@ߜ<ߔ($ h j~?P3\ #sN F^i@!PW&7&gW rH{8({j +EBԔ02V}' !^W-_ǧ'FM#3ڀւ9tcp|Yǰ'9ܬë^kJub, nOPך A̪X/栝{]Mn-5}60WތL+z?δYIU5f|B 187Qq0_3,d%?gSEŚo/[\g^@{soh2i2H׻()^5V PM@&e +*_,0 (i0\KLĘJݛѸ @Y Bʕl5[l8Bǽ7!$]YvzMW]:?z;u8_?g yUlSٝZv05|n7ü{z^lxKI?큌QsYb'%)+?E;Mo(M}.!ץDWJU#9PR3Z%@0N]53k/fsįylM$EQ ŸHސcBzU{fNtHm`(9פp֡^] ]MىrmzKY?3`3$[ݲO`# l_䪙e˪OWdtf5lZ"+Tn5_e/??/TExz.0zs[b#èLG?09v~ eq\$&ī4M&E2'}׵ }M٭T՟ßc7U9Zgr~Ds +e LM^BZ ixqUJ$T-Z>hY[ݷ!s&.T L>iﰺwcsGzDc=H2vK_S +Y=BPE']>Pwj>kр:'I/ Q}Nn÷ÄR oG=k !`i9¥#7#K!#J+Q.]Hoꛮlx!St>C-z/+ͧ>a.\_A ;Ȧ( 9AimG#[_HJ}ڪ^;8^<)x-v! +M!3 65Obi,5Ճ9956sزƽ&b8 ٠3$5Hu͎^L>?\uRKgHTHK[KnWm.=%̓HDH[ФYշ|ۨ޻gQ(/gҜQ„۷eҝ}2s){l(rs)lѲ.,H j$fs9+el|sء +jFcJ&nJBH2D]9&RgO> hl<#̉*d$:3E pH/5UyiƋMC5tݬ1 MDݙ,?k'lۡ1Pw*.3k6YuUƫ2wv 7$W ɥ-ݲؠM +-϶e3=M*Zw I-y}x "Tl neٵM H)[%Q?&N. >5|MfQ^%Źʃ*ԪueG~+{"\xMě{Ogҗ4THJdr}'4?m`I3u*9w56UѢG_Y.(/2xK Nj~%~54RcrLvԋcΙ: Z'9SHQ Zi֠q4.txq"E1$@뻻oJ&tqR*̦0 a-48&ٰDn|aKG't)l^2 Iw6v-ep7=٧."4rKel%D׻/[Gpe& +;_3]Qgh#$<"VyNyBm}2A,F(MNr1^ۭwmqXC?yaeeOJU˸BKaVLc~oJ`R٘DۼB4s:Ԥ>gW`*;\3`:u$C\x0UFЅFq3z)L 5 ]MqВRJbU}"@@ +/͏jA۽f4r0ήl޵v`_'4()ZuǪN/6bgT[*gYz;a7?!rMĻuAb?>Zd9JKG!IuƵbP_Xb* B uyQ +TG@TKx$Y",Jφ +o͑l'('a&+mmwW ͍m> ;Z}Uݱ`Oih>?'EvKaAGGʛ[\N.os[¾GW5oݝ rLE|{ʆSίYr| J5/f۟9NPlKhd?}}L>C cQ$ Hn44ʦ/"xhP;=T/#Aqe-2˧>;S])d|f[WĶedԭ0=0{X+2?ivR>@%E_o "heڤn˟{oī5%PFv@| _*_0fi|K9hJiI~ ~Z{2Ei|Z`{!̦+3;z35]D}T ht/A!1Z7dtCG^l?^võqUF4H}3Q$ !E[3o mƊ7ujaHYܤG6MP3ىj^Q=SHp9y"~F`cijg5whw}eX7Pe8cd$9{ղB,; cQKMf)IgKȔ%N)ٝ}d)?sWRm\=d5(d)~n')i MJn8*3M`ιɦ?؟u}t{qM70$T*(QL?V'ɟPoMS#R7"MVhp8ڏZ/]&)׵3ncO洚E NTbւt4U3 >8 WE?\r0 ύnOor]ĞC[_z:/K%wŽ1~j5I* uDl'FX+-9nvf<=̧#0 +&7gKY^[]k+դ?Ǭd簦z@k: ISѵf%_g{!l{9:A61Tѭ:瘛d^eJc->?9'8XGS;'֝|`7\#kQq;}-Sg܇,z ɛ1#t^vd:/Sgg؊ɸbi#| +7rY7|Bdy7S +( l\#w35L4jP}ZדWH}|O8F!Nn +endstream +endobj +12 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-251 -250 1009 969] +/FontName/WFEUNY+CMR10 +/ItalicAngle 0 +/StemV 69 +/FontFile 11 0 R +/Flags 4 +>> +endobj +11 0 obj +<< +/Filter[/FlateDecode] +/Length1 720 +/Length2 11506 +/Length3 533 +/Length 12059 +>> +stream +xctoM';m۶m[m۶c۶m;9<r֣WF9uկf + =72#!=#04 NŌP?/7+7344҅R_*B![3'?&&F6*&3OzBB!BLllffJ Dh +0q!46A3Jܞ?iSW*99EHoR*8Ml< M̡Ymn.jc#od/)lR] Aoa_XY?a gcy_5}4\B>(ZHWJkM҄ZDm7&62‚=d_8@``\!ļ}] ۟<> :߶[; +҆4{noxU]ԻW)" 6?S١5zk?3~Gt^͎ \oQL;4ᑧ" +2OqB؃0ƺd119~WVkH +YcɅ7Ϙmu }GLJ6ጕ|z-Y[?rUYKT)&"--hiz׀]c=U60bAZX#H D LHLJq[^j!ebZ4iC*iVT:K?C, H&LTq,ChvVr(^}oE}^.iAHʺ*~hdAگ"| +k[F`s:be&5pM ͐D{TɦUs]GaeֶB 5hU}#iX_ `1ΑеkR5o#jFFu(;au3D>o;-`TyRDKqCg`_+аpia^![TZ&޲I.i/#n +SD'фйāy}%Dܧ_Q4?65BL|>/kL5Ҕ&olU#8tx5hRi̅LOe͸94^zsw:FR/-V=GNj^ڰ_9*՛%=cg"13"Z=D"*Ͼ2Q! V2cMvX}o8bfD[1mFFD}O.Wm){_lM$2STМF +<aY'# E +ݵpQ~IPQ5"Gu + JgI8j3[TRؐJ|jIfv:{}@g}︪ #ja:^av Ȟ|HSȮA!rȮ;1tN V2'C-U0"'ҏYnuE6qe#>EiW,~Hc]Izބ7bDc\̋bHgehUaj6hWD ȉyp+RL*(nU=@rWڌgSQZ~؅QVp>2(nG2%hc fELR/nPᎵex^`I$:۩܊n$[ոDPBt@|lw<eBK9Ǫޟ{@laEјv{,gľ+ wL%zn V#jPۥSn'ǻaܒb D8t<*TOg$o6'yqsImwF^T4I p:E.a st2*TiG&:IJTWFGa?]d)ⷌ\\LRlj$Ͽr#:.AenxvS- C:˹{sr-e; ]CNX@C njU]fM!LSLܛCousv/Q*%y U伎(}T Ϻ(j' +xVg&㖈vfCP59l3&?< PZ0oY:f_o{R\._qS$m8opp(\ⲻc)dEs%9McImU4 +u2iP6-VWmL?9lU$~{x2>GCpIhacų&Y%c=b4gn^X4.X]c;k;39Ѣcvi11N;[bFjY* GXBfNN-SlpR#Lо $u"j>+.4`lٮv۳Q@$Ǯ9KNZ~8/mԗ``bvy3 ީB4R ocfY7:gZ¾D)_o}sRop>W(؄J+vs 㵒^ߤyv"è\%AI?Zs/.,hSjrS7X5H3P h ayrh0y`+En: +j2X:hK#%ٕ'&+Fs_l|^\#9iڡ d%vQ5QJ[hq_eԈoH#ۉdvB ~jg՛T3uYϹ9;c#3{wx"B9]]JFp)oƵY۠ gkTO= 钵nj ē+xɫF4GFZw❥Eƨ#m%.Կ:A1e?=Jo5 [\n @ҨuZT;4ܶ#ZMF=an/v`X_~ y8̾E"rw.r9nG8ud7.O |'Oek:-RԁNJqY:7LЗRR8t%-s/C8(o2+!I34\<^ldZea cj~PD1TwT4NȤSyZש)JqyD ՛_{T&v0K6嬰dw`~H?}rb-mq0wcQٶ/i.d?fB*-n9jX@] +sYzs7đ4aM0K\~ݨlĨ+~cr+/X^76y6p;Ҕ97@>-3MpbЊ 6Hv'zȭIVq-y%Op`0 4sOЋ JS\uJ=,ˊa= )}(A?U {Ε]\Nk  o|T={E9*ž̙w +`x&n莤Ӈ[- p Ύ|&W~" dOADaԇ "XW,wb|):حuRS޹8E9~}j ^j7_Z\JO{أ۹|< ta#~6e3SbFkQkr:pI<@0UH&*!N)%LNIxDīT0o&^cZy YPY?-#y<ù;_|]#;"1LCBfWXwZ|';LHX.{2/0Ot͹Ǣa;5ްD򪎵AWpddZ|c&dž!O9 <<\ط@%ECn3'GVQ-:x5{xW&y/tvQni95C|YEJʍ$(>JN<, j46CNJoD1 k)ggg<rauGO>۞>3!c c/¥v\ +.h(Wr ,2ˎ6&X 05HRZC2V~L7|qRg1*k<3 lOAzTns$siݎ$qĀczKXT i/V>N?{#mfts V.NMgXtaV'*L~(5gή)1,t4Ȭ{?r3A>/a錓 +۪b1fmjjBWGw^* (&:>LoP;CTޭHr^4'5';FSsk(ՇamC_MkyB$hL8iƿl%naA/AU9ae7(U|pEX1urowm1='{yk)6;Yz2o5kQDrScӥWz e.0MzO2WAXWR8n,+?R`cHܲ *5{`n'E{[#ְZO_Htȇ~*ift\d:.5fv +wA5xn0BGx* @_/eLJE\WP JNT(lID使v#wwOk.Mp{ H>$2m,X슰as`,]-QY# +rx1a^M~ج&!< +02Gv 箶hrubKC?Φo]B>Lf0C6VC6P>p-cO̤? [KlP-&,{?PeƻKxr|h33yhl~S\06Iݴíei *R}ӝIItFTbGO539[}#70b2ÄORWp Dk_jJ8-'D "_UX}9IͿ3P$&͌S3ɪuGg! [i0mdm6O2Wq}LDŅvQm!4&m܁0Vt_?oˡB싨r.Jwn%Bu.@Ymsd(Jp%#ZZCF#Tx"}R_z6YgI(j1D4tkV(p0>\Q +^P(9@ +gPIҩN+ f,ʤ{agaS ABi@Z0dΫ!2eZ2WL68+`*"(7GΔu䆚|T JT@r&tdVClGƭYޞ4+\}9-e1 Dn -aˆs1DAaJjc+LNLöJ z1<1:#i#xTJJǙPe! zT.a6zv烰/R58tw +[PxW'5*֪S`^3t %c]|Dž297n<(A!ox }T _g] +~4P*;wFSTⱬvf"Vn,.%3-6H'IN,RV4&~LAsGHq@Ejqᘒ-[ȵ"='T1z{GL8V`&o,Y9$+4->4C=ܔ^[ZeCAaRדIP|T/"p $5eROZ `2S]o:7?+5\JF2!133[L~LCƿڑ > zc{폽+U.Fψ +;֓)Z!nDe:1}b},~x̋6|o]iH@ރ+ +=.ȇ⎽=2R[즠ġq`B3!/m'^x>t( E8ϥ\[YI庒#K|uFhxuK +Ry!@HuހFgO@ ȦOV^\޼W{#޼v8}`rD>hMr=/g{wM,wj֑篰t[D6v j9xQ+9RZ,)op/0,/_!3ktyŎ"qhyhNjl4m_RW# Nl^ި>k{(hՠ߳Y/.OzPo4m `*j_NR[wVUT:Hhi(PC6n>t;Ty/Vn;*pQo܂6`zj<_~T/ +wh0qmUSc-]= Z*^;(:dzEL$X*FMBYf o&En0~;I)\k܌"ܜ"2UX % f H`)vv:7PңG%B!%DA͕X2cUUIKK+E7c?awؙT`NuOQr)GjX LcQѫ 3kX3W?X11'QL*K~#&$څHuL_m8QZ-7LͲ-3NY]TBX;Ċg, bƆ4H6a+n\/r_2|~qt Ƶg4M%ҶfNA= )Id6#.vNsOC#8Ps%u{3oߩ/N*"/:-qT-ּ$nZt}9$YdC6ݲ[垊 K4tre Nu@r+K9bc2z"Hi͚#."p +7ؽ|forZDEtA挫RK!F *AvO#*qGVZГ>Iē5-{cA̗fR~%i\5ְ~ԁ2cgu(}깖ՙWX7MnlH;(J겯22l Ci-b /)ğg+iM%L"ϒлARE[Ц,Zqkw7|&$[bxxHF3+>*َÅ[ Dm7K>̮ϑ/Xg~/O+!G2]/ + _D.wi h`=גP;}Ϩ>wT +we:`|P4<_LJ8s( K.e z, ѐw{3%^=׭KPM*,:jotMU_iNށ4 .y.`Š KT &:B`r +њ?m{MN\̖n+k0k()>1;x/ ]˄p=CыN+e-{ e7Ә0EjǝC1F㛇gF5 &\~?DNKԲtNsZPgn2OH +X5n8{)N*ӜэȣdH^qQ!dY`,g|U96Vm; 1H}4q,ܴjui AULm,JbCK>f{RϙΆ- f?|Oؘ99YCC=ﶩ +endstream +endobj +16 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-32 -250 1048 750] +/FontName/KCMZHQ+CMMI10 +/ItalicAngle -14.04 +/StemV 72 +/FontFile 15 0 R +/Flags 68 +>> +endobj +15 0 obj +<< +/Filter[/FlateDecode] +/Length1 727 +/Length2 1844 +/Length3 533 +/Length 2389 +>> +stream +x{<DZD$al ff m.3q˺dӺt D,I=eS[l*ΤݳӞw^y}?{?WsuCXQ$Ў`#P(SǡhDBpHdӘ ["4P&&ƀH6H-hvaE#Ȧ!214Vt:p00 EA +H`  `/2G D\ Rm@Ia2 sfE41ؿ:܎C;C>o /}ba,Ϥ,VRh86N#[1 @/:-̎R\il2 dP&oc !+`GOFMEG#(Q 2Bcnl"BdQ)ښ04FۆDc2_ 1X!hC%sX,޸/ LjbGNʠP{. N"mZ#BlC5垎?5&Z`}{FSP2QSߡàE[Xe{ĜYj[a-c>egį,ʝN.>_g8#jTddňkJ䛟*m}eya8;}?#=%Nu619hmZ6c3zc;QVE7Kzs6/510cIUOBMvRUBX99$#ѻkmz}n1-u˜Y.{wǯ}/rp"1iN[^or%:%e>JK޺tW6ft}nSb^@~f`=jMBcVeP>'N~kqg$6$_ ?5(wv>k\pQ#<Ҩ-Eu/'84Nۤ ȫ`=?exIy(Ku6eִO'V +-p6R52kuТoJcDPY֟LTπ4_Y dhrzL֏Ujka?OT +> ;&UL[_:C)PL,rKjlY77=Vqaci)i."j|> GE]~u$A/"u)庯2p +̄dl)w(iiT ţgt4<[~Xc&N.|Ôͳ0&q&|?4 6-y:$7 +^/r-ޚ|V8k,vx]H\36|nF?v'XGpBxIuSX[Iץ7 YKCnnȜy E =ョw4'>'禟YN" l;C#1ּܥ ORO-n)aڞ+ +<ۥc{z 8}w陳jޮ_7WqCwnY wth{&/u5[oN> :|E~c듗ߦ!^?a%Bt9 +ݓt6ډߢ"U&rY\1_z^WBhakw0Xl뎞 +䦰+»N8Bͪk@ًMJs{'>\uLJSQݯŢ9iw +SW ~X?5F lwH!Q5m=Pz.o>ŧӿXW[Ӱ5 6.Nnerg?'`AJU{A5 VyLE~շ*~0Ҳ퀻%̩EOy@&_P_>O fY?eR +endstream +endobj +19 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-27 -250 1122 750] +/FontName/ZNSNNO+CMR7 +/ItalicAngle 0 +/StemV 79 +/FontFile 18 0 R +/Flags 4 +>> +endobj +18 0 obj +<< +/Filter[/FlateDecode] +/Length1 712 +/Length2 1837 +/Length3 533 +/Length 2376 +>> +stream +x{O5柵b8\F$FQ~f-Ʀ3 £Bt*gLȃր%Vq05F/S8 `h5 %-!K:F4ŬUE{7OwW6aľ}dLJjך&R'o85iouζ=l>uZ-ٯh*>pJt3r'g}.UY'>7W)7!G<gߋ:MKG)ģB+%2cUm$j SҸk7|1myA9@ZHd?2GʰIf^>kQ/jF]טv eIt'lZUb3Vэ .nfgR\eER~Vu^|GHՙP\_5#ZlVrR4|)Nuspo 9ءOFiRW{kH}v`Rc*jG#j?>O*>d @HnhJg:T(a둔':\JN?CJ)ᔿGiI3ׄjߞ='N_nSU+NttDzHE)VzЙi<3Cok+Z潆,{q\ wAkN滣z4iT\;╕rua'6#|ho#WeN\I+}ICీ7Ժt6r͠^ټ! GQbU 󐪒4lX¡`qIDr~*M!"zTN;u txP•إèe%mB%XsIJB#|`1A*fQ0 +endstream +endobj +23 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-29 -960 1116 775] +/FontName/QGRDUG+CMSY10 +/ItalicAngle -14.035 +/StemV 85 +/FontFile 22 0 R +/Flags 68 +>> +endobj +22 0 obj +<< +/Filter[/FlateDecode] +/Length1 724 +/Length2 826 +/Length3 533 +/Length 1351 +>> +stream +xSU uLOJu+53Rp 44P03RUu.JM,sI,IR04Tp,MW04U002225RUp/,L(Qp2WpM-LNSM,HZRRZZTeh\ǥrg^Z9D8&UZT tН +@WT*qmKdgaqn99~ !S U[PZZZ4<8Ԕ\tYϒĜdǼT]C=cSDf[fEjJ@fIrBZbNq*X<5/);D?=%]ـ̼ʂTr0SQfB!P!Xh%d+$$0]_QkdkiLjf +榵 +C2 KS=]L , L.-*J+'aL`(V&s͞##5ˁJNaz&CIMXǞ;w\[Žg40њ3;nY($ǝg0eXWҞ1Jԗ]aKuz]XU- ݣ%6 t6,`N|+Kgdq;)yAWpq3z]K&j؟u~x?˰ *wO٭\vwv%|3:YY}|v߿Xd?/ya^:-w^fys[Ӟ|g;} +[ף~m7 {?hr=<ɩ qKݮ<:w}Լ8wÛK3?'lqfz#]>bX8eEM^?Q[Mcnێk5'+}q%HzǧJwZ fK_y(nb:d۪>;7eF롟~VܖȄ7~{^|yeՈ'_Ťئ|Vbά. {cֹ?zcG }Zh9u[^\]gc]UA33x{߾vkI:y7Mnk:/&[68]=:OBJ:X!-r\ih.7L٩4O\t8ŷkXmRgG-5 (n߼LBnw?0Y )=r*:a_O?ta[fc96n1os''+:4|.b7sME4ߒ jm7ՀB5j0 9'5$?7( $ +endstream +endobj +26 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-24 -2960 1454 772] +/FontName/PAMJDP+CMEX10 +/ItalicAngle 0 +/StemV 47 +/FontFile 25 0 R +/Flags 4 +>> +endobj +25 0 obj +<< +/Filter[/FlateDecode] +/Length1 809 +/Length2 1313 +/Length3 534 +/Length 1905 +>> +stream +xR{8Tnt9{\vnc.lktDi̬aif-C.'C.H-ܵ7ν\*ٔ]1cs;Y}{wOg5%Ȁ7x-r!rA2@07'yLWH dc34ZEl? ꭲH5 dC4* P K"B2# |#f2# &:D~?q`>鼠/i͑tWtf:@\8Pb?olw1T֪ZT©,@XA<.\:ȆSO\@:cGT&D Ԃ8P(HwAer>כ$ffrZ?nTz~]Մ?jI@l(8L%4T>Zr$ N `2F#$ѫ+%\ LW3߱? %Xd1@"# C<0$ZcKp׮$/5 m?Wfn )T"+H~* fLϔidRT4ǦMPXEԤYCdfr"4^c&w:)UȭO?'^t|Q&+L¢Nu}ŸeN&,sOTfhwcj܂CVXG6˴ f7>Cvڶ5f? 4kqw#9˕2z.S z ݋%*/8\[5Źs)`0${9sC`¶;#Z(ovc={~LY9BtAC?޳>QEi o6S@c231⎞K;_䨩86_)muOᒽ0L.,3ZlYC 05 接kgΈEEc,rvZWeKxff0%Es5j7#fLuΧ'sZ]oPi&m6-٘_mc흅KX'i#uZ.tT$CV?iWofYiFnz~",UPا+[wC\QEgJ|>hU-iTCIiY˷˭R #S|\d [+(X*xSL7!+:HV +]L[tk\reEIP^yAbKrk|۫C>t-}v)?cY|%2\FL-}d)JWy-;ҼZLǎ:aw6*ϸ.g@8wSʼs! IԪZ5&~xQf6SN +WWf_^?Q>$-@ƪ Wc@:6Yo_}{xdx_ITeZ3+Re=Ţ ?rajc)L>C4[OJ:ECb;K鈡t乥[=I-d5a Zn?X^O̍]\)mʚ4hBjJ(|#Iht*9Q9U}:ҖZLҪM< =Gu3 J9{b}S9C]}p&U~:PѫuoRfƥSJ y QTmyoz>5U=jW=cx^S8*P1sL7h5<>1%5A+ +o' + 5UL1A*Sh?* +endstream +endobj +29 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[0 -250 1171 750] +/FontName/QVRZWB+CMMI7 +/ItalicAngle -14.04 +/StemV 81 +/FontFile 28 0 R +/Flags 68 +>> +endobj +28 0 obj +<< +/Filter[/FlateDecode] +/Length1 722 +/Length2 1452 +/Length3 533 +/Length 1987 +>> +stream +x{8[yǫT[2:T\%PƸ_H9 BI^ԴZ:tP>2eA6,۝g;>>{~>=?֎ +YLȖ `Hl ,āpS$MeHH> q᪋1`6Bġ Y^, +s8WO8f`**Bp8DRa,.S[<- H 'Ť*6vge41ؿ2ܑKCY 1:#ˁـ +_Zu67p_vPtpٺD;"10Ph@DtID65o}=zBo~$ jolFl$q eUeRXTxq &bS)ޞXs x`͇Dqa`ZL-MT +͆ u" 3~=+p)ܲ9e/o)frO^Ӊԟq:wBeϋWct[tNnPҺԱwuJ&NayM)36܁))zMCĕ^tʵKyNmfi+^ݽj^ۘM7"VؔO;R2t%;kpIfRTjwTj?9,Rrj i\ _^Ւ[b6RHnjd&dܠS} f ާ#r~c_YEʏT6agXb{,uqkөF=cf ޯySћ>yCdg:WbW[FNӸ*yoj;2>yyR +U"է{<'~0=5J{Fk/Ƽ +1x|A{$ōK(OJ)'m(ja>8}98Շ_&5D?Dsm&srN +<KP.Rx3bCց URQ6{sی ڬ)aV;/W*\^oxvRDo+OUUY?GDClO)S/& +endstream +endobj +33 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-341 -250 1304 965] +/FontName/UZMPRB+CMR5 +/ItalicAngle 0 +/StemV 89 +/FontFile 32 0 R +/Flags 4 +>> +endobj +32 0 obj +<< +/Filter[/FlateDecode] +/Length1 717 +/Length2 1238 +/Length3 533 +/Length 1768 +>> +stream +xkTgKh6(,TPKn " I$D. +pQZ"͠rE",Y_췞̇yy%m ,ބ"[: x0:FcI$oE";91Mpz~LgH$XB +D7yx `(`:6A`Q +| d! a<(D"@G<%RP.8oCR" \)PsBO Kb`5 _o`1^=ߨK brk-`' a7!08q >B!ԃ[B  +a,Z/R~M]4/H2ISO6e{ BP(Я2XX>[;{:``pȔ3Ea?I1èh?CEdCLgX=z`L3ʼt uxw{7T<*T_3>[=Нhy;uAKWtm7zYq{Uvn@O~iG|םk:pɺ0сRF`Uvv AO3ي c_u6(K8Tj0!MڏjsGT.ђ\j;#^ |ĆfL|"c׍-Yq,)DZ}ZM´N˲V%Z&Gd-s$x]9\STs9P5e.`-]Ϯ1( AF'2;\dT]Zxleq*ʓ.jfxf_Ǹ6yHggbUo??!pݚZ^2_^L?/q&x" +endstream +endobj +36 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-15 -951 1252 782] +/FontName/JBJZGS+CMSY7 +/ItalicAngle -14.035 +/StemV 93 +/FontFile 35 0 R +/Flags 68 +>> +endobj +35 0 obj +<< +/Filter[/FlateDecode] +/Length1 721 +/Length2 599 +/Length3 533 +/Length 1109 +>> +stream +xSU uLOJu+53Rp 4W03RUu.JM,sI,IR04Tp,MW04U002225RUp/,L(Qp2WpM-LNSM,HZRRZZTeh\ǥrg^Z9D8&UZT tН +@WT*qmKdgaqn99~ A!S U[PZZZ4<6Ԕ\tYϒĜdǼT]C=cSDf[fEjJ@fIrBZbNq*X<5/);D+=Xɀ̼ʂTj0RQfB!P!Xh%d+$$0_Q LC +FF +F +C2 KS=]L , ɥEEy%0 ԊdsD3ud&|9pU)|׉s77Rd(wirkSsk|^1=6Zsas_y2-3%^ Jړ}9_+l5_ ?ܛ%a{TĆ6ႮԦ,؉v3k02<[RZlez_ 6n? qܸs)_Ǵ3٩F&dL淖g2)D^c]Q,'$'Z㛾 l>uy;Mwָhl49"K]9h\8?Lj#oY~8qo{ jVf4HOc_s&z򏲫۽;|]}xNezesC&Ꝧ[֭fS!ES:ZK8sJhOOʝv2+ìRZޖ(ynY҇3 +=m^un)[TZbeQ9E%E\\S\w +endstream +endobj +40 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-4 -235 731 800] +/FontName/PMDWMQ+CMTT10 +/ItalicAngle 0 +/StemV 69 +/FontFile 39 0 R +/Flags 4 +>> +endobj +39 0 obj +<< +/Filter[/FlateDecode] +/Length1 719 +/Length2 9085 +/Length3 533 +/Length 9643 +>> +stream +xUT\Ѷqww +w. ^R@Aa N]Kp  nACNsK~{=5cm&w\@W+ēO `b=kOOT  10nP'U*a  +4=@.Ml`/7 +rc``[O   + 4%//l@W/t;/1͕`Κ.g[ +W7' +pa.^UvBAJ` As$y`_w`CϘLy6'Mb +C5_N%'K/ 2}RQ3k BA9 #HW[uIJ5d428DB_Yr%n5mC-j'!&˃˪@UY#a~2O9VV^x .;#ZCψl~Mz-Fw24m s5rߛ'\VǖW^#4}ԝnE1`(J'gi8,Ra؉ +x ʙ{sʰB*d20C)",bohWzL5w4Ϗk}=1Os~R)6 % +*dోX@ s̈(lf`1(FmRDSЦ52`kXNJs.NRTF_…djOGob[5Ws' Ih3[H&((*=H za,m#8#Q#!ipȧ;_Y| A +p8Mf4̜|0"*/`LU)Ŋ`VoL8NSU= +&1rĜdVg.`M塺:]/=I' ^XnK%Z5?S\i ?4nnI}H* r'“ +^3q;Ҡ4]'X< +10{) u(7[b]}oΙG!̪qE[(2gBk_@dod!PMgkō]R&wD wjr~彎/aXϺΙ3LjD=bеi㋃'|i 7&"K+qrû`M98MzM%Oʉ6 i;5ƌ5CBz(]5,;}j1$H_'? %pK2Mˀ3x4lhY7wcz2?gxx7_NPr}G0|qHQZxDUx.׽w A`=KJo#ȃ豨) 1uK!{HMˆƒp +jh+At-c <]EQ%&wj󖆋.[4$L`!iVAoAGBjkq;<$41DQD-m=-_șx?%7\m=Mw'=o w!.5XQ0jemIEܱUIN`P// ͘TP{1I827s4. +$󰠨c[W=}MI c0OE{?`HQ[%wyD8GaX?ךdY5IdXO ajZ]S>[PF8睦_ox/Bp(m4Н1I|r1b"da\&=^HGoH5z w'Q}%8l"jF݉-mJ|nD xe O;yXVTdl^D 1蠣-\fojsܸS_*̅}~@RI5:'a ^۱*~%q$뎷VuF6_}H50-3~s:"_˺0qfu3GIHNK[}5I˔DMhwJYv9H.˔ߙXoÎKTb_4-瑤4@tc0MpLh8.V%dv úZ?g!+-VVG{r@mL)V:sj8E a_U՛ߵ< dG":+2uHs轡oF$WA{F^Eq_#17g 1P`Y<8$xDXٺKpcXnMgngKoWK/k imMkj9iEar&5&gE_&WEK.L>Hq݋f2a YCWds'gW?9B ߄5x&[= iߞx+dە_UzL2zDrGԨK`qzbdEG}xE2H׾Q&-RcgTXXR_6vJqB T}0 ZZ{l]lՓoKb,qVSJ17|Mcs鮒 +gG4_? cL&ODy0s. 4ķ!.㰺+ d5sI |ѱ߮qS` tek +:ߜ,p+}w(v"ΉY*Ԏ:vؼY(7/U/.uVǗUIfXlWCw>!ܩUeO~gãQDqڄv˂TʜZU4h$S?COsH2,>~3FWTbIg (.C˙fj$-15e7MTu^GzhtU.;t6EG o9Ig>V+?@%(W"놛^ `c'7ZOi[DOAeRᕿ պ d_i%G4r߄X|ԛ~lGL5*A< χ8[(iTo.g `)s7S]@#OUR8r{uѹwd5>Ϲ*fsc]H*Mo3_%Kz0u(4@=zq1q{7u#el*S6{Ai_%'86ʙ8 =i}Q^8ȣn?R]4 HXAJ7i +_]|adƓ؁1{Jc$'i1p8V6}{cΫ/ Hh +&g5tKǯ]3z"0@Lzjm΢_q}Iӿ^x}^"b~,F)Bl +aYS-$qDW5oC_,כ_cƋw$q"]l!%?Oc4P:R.N'Grn/MDkp%x!yfR7yUvNRka3Jzd zu)^.t>AbyP=*f8W=m&Z£!7~/&m8f!%@wh.{:tvģ8 +uGZ0fN447֯_i exP sDdW8 bqc3@FB#ݯUX:I17|+rn.xViW=lު#.(¯])H:^pfP$pVwݲS4צ;hhϟtW41L*UЈa'%vRX>ʆymؿj1\#4(MQ\|omsvilKvQ5SP9̥K\yOb-U9G =$ŻMhJZwj_>wjnݍo=Z<(BI 4K?Ohb`uk$<>4W$22((\-;[PY{->*O C4ܣ w*r3ES3RK !HG?#wNqK I{.*5* 6϶rn?[Bi + Ra7[*D#L;En{Ș5n[54HG %_I\2rE3_s"&q#.f+h /2jK_BAY{Ȱt,'ܾ&^DПy7*sdX*RTDCL<*ŕ)F t+y/5Ĵߑprx^\4A^2sBB}$N~ɉ%e؝^peȬÐ߱& uf1DQZs?5'΄m-է3 3hfzЄRAfhCPk ``M?'wl4 +k[ +&OwRU#zPt +z/yGGyDkC +=#i-Z +PC o nē.@~Sy\˝)g 1;ZR s>x 4K> v@Ke#Ynl~~ .QA(7Z6l "i 8]ftYubӜ ]'.9sB*b1’%ul$[J⢾ +* ൬YFv_(M n65)\Zo.==B[o4!O"L +wJH'ՀQmE` sx]j&!ؒϤ> ^wƹo&;_c4Jfz}*NV1.Z[hOn,A?r >.i|?g4tgU?WU?]ɰU/ ^㕍򥋲.b!RLe-O[pɯku]yYfEwV0!z>_/#1LmbLX!(;.$T$?hAsgk9h)3Q^ +cmʻ ;q&?"ir'a*)r1 K~5D5cxW7?b~]6$ )2 >_u)=+g."(jI=S0}?-R}{~B{?1nS=cNo~D~S5>yʮ||Ψd;a盹L҄I/l̔I:dkJa؇;`,0< 7ɑg`9+g61[}f4Bxs-69SByc^"-`޳8Fh>qwVqA?b赨å"2vV$cfe*|w&x~y>2=s.&OOtue4n2ICOޚ4J@2Q>4R!OPĸw-Vs-Iq6" .PbU.=x{Fs$Ee+OrJiF5„8"{[Pm^@ FCo4|AdVJ>ގMۜb1ENq>rȵ(9N Y"4δdrvUP\=j}X+jG ~TW2۟˦$^QJ4,i._BhdfJ^lq}#Bx߻V%^kR,Hً[d`䖄Sҷbkn2*(9I&369; }9j^´af{ω4kѮRBk9k!t@@?|*Z/c2-}etAq: ^:;>MzW*)>#3''I^+xrAIZ6Ua\jE"@Cv<>y*e^.v_ѵ2u4CqpB~,ʐP)vjww,:Z0"aK }.TG6*24FKDt*@U@).^=SM8`#>/~h$6׼JTS0zG :'NLmȜi +|uTO@VI[ᝑVn!}Nc%.?~9k.34 Qڤ!TO0m0,+ԣO܆ uY+0&/״Ոdpϛ } 7"/!a= gq뗉ӽL}BC99VbN~ O5Z lyΫhMε] 9T7ErѫX>}Vfa32`< {-wX۟级ȃ4-X2 C̯¹kt(J6$@}ӽ}M92DnN6K-2bcM?.QjIUk0Wc{\<@tM>mUګc4)pNi1IIظD`J{P]\vRsJ2QgVݣno.1n>w(YޞXGz戼u1nYCu4|h ѐCVMͣMr3c oXgޛDCGh$i0]g+Cڨ'hʙ{$IǺi`x< MC-L]8 du2O$HQYXwh2mW c@nNJ|.rlR)u[ƒ` χut\q$Uǚe_'I[[gF"T7_92؞>a7^.*ηQ=2Կr$1h۾:Yو 嘚~B"C&)[iNb7gYMyI?FHbT%Zu 31rrڳEh2E`O<:bKzuO8U[5^*I+M${ι~79 eh)䟢vnj2Ɖ#&vV:P:R8 ӌjڏQ~Sb͟}sKiiu _|^QOKi^nSVFM*>WW6䞈@x&j: IbŸ 8獩׈{5BOT 94ݽk j %=<4 +!kݖ0 e0W r|i;F+`ޖ\x[#JEQ'iWTI==k޺DlɌ +b>77vVf}}'%pLǐzp,2yݡJHC)MV@<t_g(lrgpo+@.la*V}y~ 'eRŴrL'>iJ{3qGs d4ΐ=x IώJK@n*@:xD:x{X%cRNΫ7baxo|ť=Mq12$t=SJy?=Y1E_Y0 k5 Tv +endstream +endobj +50 0 obj +<< +/Type/FontDescriptor +/CapHeight 850 +/Ascent 850 +/Descent -200 +/FontBBox[-163 -250 1146 969] +/FontName/BJZUOD+CMTI10 +/ItalicAngle -14.04 +/StemV 68 +/FontFile 49 0 R +/Flags 68 +>> +endobj +49 0 obj +<< +/Filter[/FlateDecode] +/Length1 728 +/Length2 2335 +/Length3 533 +/Length 2880 +>> +stream +xi8UDžNbDCYl{/,mB !22e.C*E(mCHٙS:vwk]g}_L\ZGruHD4TFH т g1P@*+eo+ `01M Cn@-ͥh@2# $ b9 8hٷW3$88 D8K\@7C|'2ϖ/H$J{8@W˜G·[C8HO +HH8Lj 3q>D7<H#2r?t[q&bw$~&;Bٓ] DXx_5z/%2Ō3M% `Nq2ߩHHY@%wܐr +r:-QB)}W>d2H|?{g + jnj$9/9#T..޻KeO qYճ%;7xoEzP|]wdtCM_ItPYxڣwd?{:N8 9;b Wp+}:yz~i\Q7[rv`5\EM.y~E'_?_w̬} EnS> o]l:?M<:{\֌>8zwǰquh2㶧i:qp~Gv_2 H`A[1ghwkmUfo\3e{1hL@7+̀ +QN*{lIe^6c 6Z{Үъ҉L6F:u /J&fzr5z(kTd4Dn ;jrymĜ /8WﻐTW8+7;y:w!z;&7EjҸ9.ZL>{dt.[fe%ܘ׏ 'ywY7ykΔLyj&T;vW,\֗orءKq2CŸ0L$4;Ռ`U`6~+fs5]vD"wZt-|N٤m^T@#OL]lp)jG*yR'#[/ Sgno8.]^L\[u}Δ]w9: Pj޲lGi4⫣[Ϟ|v!uc)7~ŋy;!ඕ*/a=zf02+Tj OjNu8.R[%ԟ:ݢ]}Vao\mT9sOk(N6,䙁_-t6̃4ƠAQa;Cm%uPg$*82ާvV5&@ZWP@{9ЩPг7]^mhIÙ~ ʡh{QW")95Ss6ާ̚v++;9AԚMXv4Zvk`.S*Kꝺ"mY>0/M3f~xחCOxx;Ei7 &2elEʓYڏ1` -hNmYV󫾓 Ӿ1]X99DfjZ&OxpQp-yyddxQ)!.zJ,&xC{_]]Nkt;FO[LffnƢ/wGr?M*qﲊP5)=#^XkQ>߄YEd)K=Ө}:>+^oؒq^cFDe\[Uim=噫%3T1O_gZ+DRKOte,.}P6^iâؙ +74\+;X<׮bZkWb<_y?bbC٬ +endstream +endobj +1 0 obj +<< +/Creator( TeX output 2001.09.01:0924) +/Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) +/CreationDate(D:20071202130931+00'00') +>> +endobj +5 0 obj +<< +/Type/Page +/Resources 6 0 R +/Contents[42 0 R 4 0 R 43 0 R 44 0 R] +/Parent 3 0 R +>> +endobj +46 0 obj +<< +/Type/Page +/Resources 47 0 R +/Contents[42 0 R 4 0 R 52 0 R 44 0 R] +/Parent 3 0 R +>> +endobj +54 0 obj +<< +/Type/Page +/Resources 55 0 R +/Contents[42 0 R 4 0 R 56 0 R 44 0 R] +/Parent 3 0 R +>> +endobj +3 0 obj +<< +/Type/Pages +/Count 3 +/Kids[5 0 R 46 0 R 54 0 R] +/MediaBox[0 0 595 842] +>> +endobj +42 0 obj +<< +/Length 1 +>> +stream + +endstream +endobj +44 0 obj +<< +/Length 1 +>> +stream + +endstream +endobj +4 0 obj +<< +/Length 33 +>> +stream +1.00028 0 0 1.00028 72 769.82 cm +endstream +endobj +58 0 obj +<< +>> +endobj +59 0 obj +null +endobj +60 0 obj +<< +>> +endobj +2 0 obj +<< +/Type/Catalog +/Pages 3 0 R +/Outlines 58 0 R +/Threads 59 0 R +/Names 60 0 R +>> +endobj +xref +0 61 +0000000000 65535 f +0000068247 00000 n +0000069057 00000 n +0000068718 00000 n +0000068910 00000 n +0000068411 00000 n +0000016430 00000 n +0000000009 00000 n +0000021774 00000 n +0000021590 00000 n +0000000913 00000 n +0000027923 00000 n +0000027735 00000 n +0000001829 00000 n +0000002746 00000 n +0000040292 00000 n +0000040098 00000 n +0000003700 00000 n +0000042981 00000 n +0000042795 00000 n +0000004646 00000 n +0000005610 00000 n +0000045666 00000 n +0000045471 00000 n +0000007226 00000 n +0000047319 00000 n +0000047130 00000 n +0000008177 00000 n +0000049529 00000 n +0000049338 00000 n +0000009153 00000 n +0000010147 00000 n +0000051817 00000 n +0000051630 00000 n +0000011115 00000 n +0000053893 00000 n +0000053699 00000 n +0000012122 00000 n +0000013131 00000 n +0000055301 00000 n +0000055115 00000 n +0000014108 00000 n +0000068810 00000 n +0000014853 00000 n +0000068860 00000 n +0000016297 00000 n +0000068512 00000 n +0000020920 00000 n +0000016491 00000 n +0000065253 00000 n +0000065058 00000 n +0000017398 00000 n +0000018380 00000 n +0000020852 00000 n +0000068615 00000 n +0000021528 00000 n +0000020982 00000 n +0000021483 00000 n +0000068992 00000 n +0000069014 00000 n +0000069035 00000 n +trailer +<< +/Size 61 +/Root 2 0 R +/Info 1 0 R +>> +startxref +69152 +%%EOF diff --git a/Master/texmf-dist/doc/latex/mh/eqlayouts.pdf b/Master/texmf-dist/doc/latex/mh/eqlayouts.pdf new file mode 100644 index 00000000000..3104a4b6fc0 Binary files /dev/null and b/Master/texmf-dist/doc/latex/mh/eqlayouts.pdf differ diff --git a/Master/texmf-dist/doc/latex/mh/eqlayouts.tex b/Master/texmf-dist/doc/latex/mh/eqlayouts.tex new file mode 100644 index 00000000000..f0542ef5a6e --- /dev/null +++ b/Master/texmf-dist/doc/latex/mh/eqlayouts.tex @@ -0,0 +1,346 @@ +\documentclass[twocolumn]{article} +\pagestyle{myheadings} +\raggedbottom +\makeatletter +\def\maketitle{% + \twocolumn[% + \centering + \noindent + \begingroup \Large\bfseries \@title\par\endgroup + \medskip + \textsc{\@author}% + \par \bigskip + ]\thispagestyle{plain}% + \markboth{\@title}{\@title}% +} + +\def\@oddhead{\quad\hfil\textsc{\rightmark}\hfil\quad\llap{\thepage}} +\def\@evenhead{\rlap{\thepage}\quad\hfil\textsc{\leftmark}\quad\hfil} + +\providecommand{\qq}[1]{\textquotedblleft#1\textquotedblright} +\providecommand{\mdash}{\textemdash} +\providecommand{\ndash}{\textendash} + +\newcommand{\ititle}[1]{\textit{#1}} + +\newcommand{\LR}[2][.4]{% + \framebox[#1\displaywidth]{$\displaystyle{}#2$}% +} + +\newcommand{\LHS}[1]{\LR[\relifactor]{#1}} + +\newdimen\relindent \newdimen\rhswd + +\newcommand{\dwline}{% + \hbox to\curdw{\vrule height1ex + \leaders\hrule height.55ex depth-.45ex\hfil + \tiny \space display width + \leaders\hrule height.55ex depth-.45ex\hfil + \vrule height1ex}% +} + +\newenvironment{layout}[1][.15]{% + \noindent + $$\edef\curdw{\the\displaywidth}% + \def\relifactor{#1}% + \gdef\layoutcr{\cr}\def\\{\layoutcr}% + \binoppenalty 10000 \relpenalty 10000 + \setbox8\vbox\bgroup + \advance\baselineskip .35\baselineskip + \advance\lineskip .35\baselineskip \lineskiplimit\lineskip + \relindent=#1\displaywidth + \rhswd=\displaywidth \advance\rhswd-\relindent + \global\row 0 \gdef\rhsskew{}% + \halign\bgroup \global\advance\row 1 $\hfil\displaystyle{}##$&% + \ifnum\row>1 \rhsskew \fi $\displaystyle{}##\hfil$\cr +}{% + \crcr\egroup\egroup + \vcenter{\halign{\hfil##\hfil\cr + \hbox{\hss\dwline\hss}\cr\noalign{\vskip.6\baselineskip}\box8 \cr}}% + $$\relax + \ignorespacesafterend +} + +\newcommand{\stagger}{\omit\span\gdef\layoutcr{\cr\omit\span}} + +\newcount\row + +\newcommand{\rhsskew}{} +\newcommand{\skewleft}[1]{\gdef\rhsskew{\kern-#1\relax}} + +\parskip\baselineskip + +% Tone down the usual large font sizes of section heads. +\let\Huge\large \let\huge\large \let\LARGE\large \let\Large\large +\let\large\normalsize + +\begin{document} +\title{Equation Layouts} +\author{MJD [1998/12/28]} +\date{} +\maketitle + +\section{Misc examples} + +Let us consider which of these have 50\% or more of wasted whitespace +\emph{within the bounding box of the visible material}. +\begin{layout}[.4] +\LHS{L}&=\LR[.35]{R_{1}}\\ +&=\LR[.25]{R_{1}} +\end{layout} + +\section{Ladder and step layouts} + +\subsection{Straight ladder layout} +This is distinguished by a relatively short LHS and one or more RHS's of +any length. +\begin{layout} +\LHS{L} &= \LR[.5]{R_{1}}\\ +&=\LR[.3]{R_{2}}\\ +&=\LR[.25]{R_{3}}\\ +&\qquad\ldots +\end{layout} +The simplest kind of equation that fits on one line and has only one RHS +may be viewed as a trivial subcase of the straight ladder layout: +\begin{layout} +\LHS{L} &= \LR[.5]{R} +\end{layout} +If some of the RHS's are too wide to fit on a single line they may be +broken at binary operator symbols such as plus or minus. This is still +classified as a straight ladder layout if none of the fragments intrude +into the LHS column, because the underlying parshape is the same. +\begin{layout} +\LHS{L} &= \LR[.4]{R_{1a}}\\ +&\quad +\LR[.6]{R_{1b}}\\ +&=\LR[.3]{R_{2}}\\ +&=\LR[.25]{R_{3a}}\\ +&\quad +\LR[.45]{R_{3b}}\\ +&\quad +\LR[.54]{R_{3c}}\\ +&\qquad\ldots +\end{layout} + +\subsection{Skew ladder layout} +\begin{layout}[.5] +\skewleft{.35\displaywidth} +\LHS{L}&= \LR[.3]{R_{1}}\\ +&=\LR[.6]{R_{2}}\\ +&=\LR[.25]{R_{3}}\\ +&\qquad\ldots +\end{layout} +In a skew ladder layout, the combined LHS width plus width of $R_{1}$ +does not exceed the available width, but one of the other RHS's is so +wide that aligning its relation symbol with the others cannot be done +without making it run over the right margin: $\mbox{width}(L) + +\mbox{width}_{\mathrm{max}}(R_{i})>\mbox{width}_{\mathrm{avail}}$. In +that case we next try aligning all but the first relation symbol, +allowing all the $R_{i}$ after $R_1$ to shift leftward. + +\subsection{Drop ladder layout} +\begin{layout}[.6] +\makebox[.15\displaywidth][l]{\LHS{L}}\\ +&= \LR[.6]{R_{1}}\\ +&=\LR[.3]{R_{2}}\\ +&=\LR[.25]{R_{3}}\\ +&\qquad\ldots +\end{layout} +The drop ladder layout is similar to the skew ladder layout but with the +width of $R_1$ too large for it to fit on the same line as the LHS. Then +we move $R_1$ down to a separate line and try again to align all the +relation symbols. Note that this layout consumes more vertical space +than the skew ladder layout. + +\subsection{Step layout} +\begin{layout}[.6] +\stagger +\LHS{R_{a}}\\ +\qquad + \LR[.7]{R_{b}}\\ +\qquad\qquad + \LR[.6]{R_{c}}\\ +\qquad\qquad\qquad + \LR[.45]{R_{d}}\\ +\qquad\qquad\qquad\qquad\ldots +\end{layout} +The chief characteristic of the step layout is that there is no relation +symbol, so that the available line breaks are (usually) all at binary +operator symbols. Let $w_1$ and $w_l$ be the widths of the first and +last fragments. We postulate that the ideal presentation is as follows: +Choose a small stairstep indent $I$ (let's say 1 or 2 em). We want the +last fragment to be offset at least $I$ from the start of the first +fragment, and to end at least $I$ past the end of the first fragment. If +there are only two lines these requirements determine a target width +$w_T=\max(w_1+I,w_l+I)$. If there are more than two lines ($l>2$) then +use $w_T = \max(w_1 + (l-1)I, w_l+I, w_{\mathrm{avail}}$ and reset $I$ +to $w_T/(l-1)$ if $w_T = w_{\mathrm{avail}}$. + +Furthermore, we would like the material to be distributed as evenly as +possible over all the lines rather than leave the last line exceedingly +short. If the total width is $1.1(\mbox{width}_{\mathrm{avail}})$, we +don't want to have .9 of that on line 1 and .2 of it on line 2: +\begin{layout}[.9] +\stagger +\LHS{R_{a}\hfil+\hfil R_{b}\hfil+\hfil R_{c}}\\ +\qquad + \LR[.1]{R_{d}} +\end{layout} +Better to split it as evenly as possible, if the available breakpoints +permit. +\begin{layout}[.5] +\stagger +\LHS{R_{a}\hfil+\hfil R_{b}}\\ +\qquad + \LR[.5]{R_{c}\hfil+\hfil R_d} +\end{layout} +A degenerate step layout may arise if an unbreakable fragment of +the equation is so wide that indenting it to its appointed starting +point would cause it to run over the right margin. In that case, we want +to shift the fragment leftward just enough to bring it within the right +margin: +\begin{layout}[.6] +\stagger +\LHS{L_{a}}\\ +\quad + \LR[.8]{L_{b}}\\ +\qquad + \LR[.7]{L_{c}}\\ +\; + \LR[.87]{L_{d}}\\ +\qquad\ldots +\end{layout} +And then we may want to regularize the indents as in the drop ladder +layout. Let's call this a dropped step layout: +\begin{layout}[.6] +\stagger +\LHS{L_{a}}\\ +\quad + \LR[.8]{L_{b}}\\ +\quad + \LR[.7]{L_{c}}\\ +\quad + \LR[.87]{L_{d}}\\ +\qquad\ldots +\end{layout} + +\section{Strategy} + +Here is the basic procedure for deciding which equation layout to use, +before complications like equation numbers and delimiter clearance come +into the picture. Let $A$ be the available width, $w_{\mathrm{total}}$ +the total width of the equation contents, $w(L)$ the width of the +left-hand side, $w_{\max}(R)$ the max width of the right-hand sides, $I$ +the standard indent for step layout, and $O$ the standard offset for +binary operators if a break occurs in the middle of an RHS. Also let +$t_L$ and $t_R$ represent certain thresholds for the width of the LHS or +the RHS at which a layout decision may change, as explained below. + +\newpage +\begin{small} +\begin{enumerate} +\renewcommand{\labelenumi}{(\theenumi)} +\item \ititle{Does everything fit on one line?}\label{i:LR} + $w_{\mathrm{total}}\leq A$? + +Yes: print the equation on a single line (done). + +No: Check whether the equation has both LHS and RHS (\ref{i:lhs-check}). + +\item \ititle{Is there a left-hand side?}\label{i:lhs-check} +Are there any relation symbols in the equation? + +Yes: Try a ladder layout (\ref{i:ladder}). + +No: Try a step layout (\ref{i:step}). + +\item\ititle{Does the LHS leave room to fit the widest RHS?}\label{i:ladder} + $w(L)+w_{\max}(R)1$) is wider than +$A-I$; try an almost-columnar layout (\ref{i:almost-columnar}). + +\item\ititle{Drop ladder layout}\label{i:drop} +Set up a parshape [0pt $w(L)$ $I$ $A-I$] and run a trial break. +This is the same parshape as for a skew ladder layout except that the +width of the first line is limited to the LHS width, so that the RHS is +forced to drop down to the next line. + +\ititle{Line breaks OK?} + +Yes: Drop ladder layout succeeded (done). + +No: One of the unbreakable fragments of the $R_i$ ($i>1$) is wider than +$A-I$; try an almost-columnar layout (\ref{i:almost-columnar}). + +\item\ititle{Almost-columnar layout}\label{i:almost-columnar} +This presupposes a trial break that yielded a series of expressions or +fragments, one per line. Let $w(F)$ denote the width of the first +fragment and $w(R_i)$ the widths of the remaining fragments. +Set up a parshape [0pt $w(F)$ $A-w_{\max}(R_i)$ $w_{\max}(R_i)$]: in other +words, set the first line flush left and the longest line flush right +and all other lines indented to the same position as the longest line. +But as a matter of fact there is one other refinement for extreme cases: +if $w_{\max}(R_i)>A$ then the parshape can be simplified without loss to +[0pt $w(F)$ 0pt $A$]\mdash for that is the net effect of substituting +$\min(A,w_{\max})$ in stead of $w_{\max}$. +(Done.) + +\item\ititle{Step layout}\label{i:step} Set target width $w_T$ to $A - + 2I$. Set parshape to [0pt $w_T$ $I$ $w_T -I$ $2I$ $w_T -2I$ \ldots\ + $(l-1)I$ $w_T - (l-1)I$], where $l=\lceil w_{\mathrm{total}}/A\rceil$ + is the expected number of lines that will be required. Trial break + with that parshape in order to find out the width of the last line. + +\ititle{Indents OK?} + +Yes: Step layout succeeded (done). + +No: One of the fragments is too wide to fit in +the allotted line width, after subtracting the indent specified by the +parshape. Try a dropped step layout (\ref{i:drop-step}) + +\item\ititle{Dropped step layout}\label{i:drop-step} Set up a parshape + [0pt $A$ $I$ $A-I$] and run a trial break. Note that this is actually + the same parshape as for a skew ladder layout. + +\ititle{Line breaks OK?} + +Yes: Dropped step layout succeeded (done). + +No: One of the unbreakable fragments of the $R_i$ ($i>1$) is wider than +$A-I$; as a last resort try an almost-columnar layout (\ref{i:almost-columnar}). + +\end{enumerate} +\par\end{small} + +\end{document} diff --git a/Master/texmf-dist/doc/latex/mh/flexisym.pdf b/Master/texmf-dist/doc/latex/mh/flexisym.pdf new file mode 100644 index 00000000000..bfd83b1eb99 Binary files /dev/null and b/Master/texmf-dist/doc/latex/mh/flexisym.pdf differ diff --git a/Master/texmf-dist/doc/latex/mh/mathpazo.sym b/Master/texmf-dist/doc/latex/mh/mathpazo.sym new file mode 100644 index 00000000000..ceaad938a6a --- /dev/null +++ b/Master/texmf-dist/doc/latex/mh/mathpazo.sym @@ -0,0 +1,367 @@ +%% +%% This is file `mathpazo.sym', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% flexisym.dtx (with options: `mathpazo') +%% +%% This is a generated file. +%% +%% Copyright (C) 1997-2003 by Michael J. Downes +%% Copyright (C) 2007 by Morten Hoegholm +%% +%% 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 flexisym.dtx +%% and the derived files +%% flexisym.sty, flexisym.pdf, flexisym.ins, flexisym.drv, +%% cmbase.sym, mathpazo.sym, mathptmx.sym, msabm.sym. +%% +\ProvidesSymbols{mathpazo}[2007/12/09 v0.1] +\@xp\xdef\csname mg@OT1\endcsname{\hexnumber@\symoperators} +\@xp\xdef\csname mg@OML\endcsname{\hexnumber@\symletters} +\@xp\xdef\csname mg@OMS\endcsname{\hexnumber@\symsymbols} +\@xp\xdef\csname mg@OMX\endcsname{\hexnumber@\symlargesymbols} +\gdef\mg@bin{\mg@OMS} +\gdef\mg@del{\mg@OMX} +\xdef\mg@digit{\@xp\@nx\csname mg@OT1\endcsname} +\gdef\mg@latin{\mg@OML} +\global\let\mg@Latin\mg@latin +\global\let\mg@greek\mg@latin +\global\let\mg@Greek\mg@digit +\global\let\mg@rel\mg@bin +\global\let\mg@ord\mg@bin +\global\let\mg@cop\mg@del +\DeclareFlexSymbol{!} {Pun}{OT1}{21} +\DeclareFlexSymbol{+} {Bin}{OT1}{2B} +\DeclareFlexSymbol{:} {Rel}{OT1}{3A} +\DeclareFlexSymbol{\colon}{Pun}{OT1}{3A} +\DeclareFlexSymbol{;} {Pun}{OT1}{3B} +\DeclareFlexSymbol{=} {Rel}{OT1}{3D} +\DeclareFlexSymbol{?} {Pun}{OT1}{3F} +\DeclareFlexSymbol{\Gamma} {Var}{Greek}{00} +\DeclareFlexSymbol{\Delta} {Var}{Greek}{01} +\DeclareFlexSymbol{\Theta} {Var}{Greek}{02} +\DeclareFlexSymbol{\Lambda} {Var}{Greek}{03} +\DeclareFlexSymbol{\Xi} {Var}{Greek}{04} +\DeclareFlexSymbol{\Pi} {Var}{Greek}{05} +\DeclareFlexSymbol{\Sigma} {Var}{Greek}{06} +\DeclareFlexSymbol{\Upsilon}{Var}{Greek}{07} +\DeclareFlexSymbol{\Phi} {Var}{Greek}{08} +\DeclareFlexSymbol{\Psi} {Var}{Greek}{09} +\DeclareFlexSymbol{\Omega} {Var}{Greek}{0A} +\DeclareFlexSymbol{0}{Var}{digit}{30} +\DeclareFlexSymbol{1}{Var}{digit}{31} +\DeclareFlexSymbol{2}{Var}{digit}{32} +\DeclareFlexSymbol{3}{Var}{digit}{33} +\DeclareFlexSymbol{4}{Var}{digit}{34} +\DeclareFlexSymbol{5}{Var}{digit}{35} +\DeclareFlexSymbol{6}{Var}{digit}{36} +\DeclareFlexSymbol{7}{Var}{digit}{37} +\DeclareFlexSymbol{8}{Var}{digit}{38} +\DeclareFlexSymbol{9}{Var}{digit}{39} +\DeclareFlexSymbol{,}{Pun}{OML}{3B} +\DeclareFlexSymbol{.}{Ord}{OML}{3A} +\DeclareFlexSymbol{/}{Ord}{OML}{3D} +\DeclareFlexSymbol{<}{Rel}{OML}{3C} +\DeclareFlexSymbol{>}{Rel}{OML}{3E} +\DeclareFlexSymbol{\alpha}{Var}{greek}{0B} +\DeclareFlexSymbol{\beta}{Var}{greek}{0C} +\DeclareFlexSymbol{\gamma}{Var}{greek}{0D} +\DeclareFlexSymbol{\delta}{Var}{greek}{0E} +\DeclareFlexSymbol{\epsilon}{Var}{greek}{0F} +\DeclareFlexSymbol{\zeta}{Var}{greek}{10} +\DeclareFlexSymbol{\eta}{Var}{greek}{11} +\DeclareFlexSymbol{\theta}{Var}{greek}{12} +\DeclareFlexSymbol{\iota}{Var}{greek}{13} +\DeclareFlexSymbol{\kappa}{Var}{greek}{14} +\DeclareFlexSymbol{\lambda}{Var}{greek}{15} +\DeclareFlexSymbol{\mu}{Var}{greek}{16} +\DeclareFlexSymbol{\nu}{Var}{greek}{17} +\DeclareFlexSymbol{\xi}{Var}{greek}{18} +\DeclareFlexSymbol{\pi}{Var}{greek}{19} +\DeclareFlexSymbol{\rho}{Var}{greek}{1A} +\DeclareFlexSymbol{\sigma}{Var}{greek}{1B} +\DeclareFlexSymbol{\tau}{Var}{greek}{1C} +\DeclareFlexSymbol{\upsilon}{Var}{greek}{1D} +\DeclareFlexSymbol{\phi}{Var}{greek}{1E} +\DeclareFlexSymbol{\chi}{Var}{greek}{1F} +\DeclareFlexSymbol{\psi}{Var}{greek}{20} +\DeclareFlexSymbol{\omega}{Var}{greek}{21} +\DeclareFlexSymbol{\varepsilon}{Var}{greek}{22} +\DeclareFlexSymbol{\vartheta}{Var}{greek}{23} +\DeclareFlexSymbol{\varpi}{Var}{greek}{24} +\DeclareFlexSymbol{\varrho}{Var}{greek}{25} +\DeclareFlexSymbol{\varsigma}{Var}{greek}{26} +\DeclareFlexSymbol{\varphi}{Var}{greek}{27} +\DeclareFlexSymbol{\imath}{Var}{OML}{7B} +\DeclareFlexSymbol{\jmath}{Var}{OML}{7C} +\DeclareFlexSymbol{\ell}{Ord}{OML}{60} +\DeclareFlexSymbol{\wp}{Ord}{OML}{7D} +\DeclareFlexSymbol{\partial}{Ord}{OML}{40} +\DeclareFlexSymbol{\flat}{Ord}{OML}{5B} +\DeclareFlexSymbol{\natural}{Ord}{OML}{5C} +\DeclareFlexSymbol{\sharp}{Ord}{OML}{5D} +\DeclareFlexSymbol{\triangleleft}{Bin}{OML}{2F} +\DeclareFlexSymbol{\triangleright}{Bin}{OML}{2E} +\DeclareFlexSymbol{\star}{Bin}{OML}{3F} +\DeclareFlexSymbol{\smile}{Rel}{OML}{5E} +\DeclareFlexSymbol{\frown}{Rel}{OML}{5F} +\DeclareFlexSymbol{\leftharpoonup}{Rel}{OML}{28} +\DeclareFlexSymbol{\leftharpoondown}{Rel}{OML}{29} +\DeclareFlexSymbol{\rightharpoonup}{Rel}{OML}{2A} +\DeclareFlexSymbol{\rightharpoondown}{Rel}{OML}{2B} +\DeclareFlexSymbol{a}{Var}{latin}{61} +\DeclareFlexSymbol{b}{Var}{latin}{62} +\DeclareFlexSymbol{c}{Var}{latin}{63} +\DeclareFlexSymbol{d}{Var}{latin}{64} +\DeclareFlexSymbol{e}{Var}{latin}{65} +\DeclareFlexSymbol{f}{Var}{latin}{66} +\DeclareFlexSymbol{g}{Var}{latin}{67} +\DeclareFlexSymbol{h}{Var}{latin}{68} +\DeclareFlexSymbol{i}{Var}{latin}{69} +\DeclareFlexSymbol{j}{Var}{latin}{6A} +\DeclareFlexSymbol{k}{Var}{latin}{6B} +\DeclareFlexSymbol{l}{Var}{latin}{6C} +\DeclareFlexSymbol{m}{Var}{latin}{6D} +\DeclareFlexSymbol{n}{Var}{latin}{6E} +\DeclareFlexSymbol{o}{Var}{latin}{6F} +\DeclareFlexSymbol{p}{Var}{latin}{70} +\DeclareFlexSymbol{q}{Var}{latin}{71} +\DeclareFlexSymbol{r}{Var}{latin}{72} +\DeclareFlexSymbol{s}{Var}{latin}{73} +\DeclareFlexSymbol{t}{Var}{latin}{74} +\DeclareFlexSymbol{u}{Var}{latin}{75} +\DeclareFlexSymbol{v}{Var}{latin}{76} +\DeclareFlexSymbol{w}{Var}{latin}{77} +\DeclareFlexSymbol{x}{Var}{latin}{78} +\DeclareFlexSymbol{y}{Var}{latin}{79} +\DeclareFlexSymbol{z}{Var}{latin}{7A} +\DeclareFlexSymbol{A}{Var}{Latin}{41} +\DeclareFlexSymbol{B}{Var}{Latin}{42} +\DeclareFlexSymbol{C}{Var}{Latin}{43} +\DeclareFlexSymbol{D}{Var}{Latin}{44} +\DeclareFlexSymbol{E}{Var}{Latin}{45} +\DeclareFlexSymbol{F}{Var}{Latin}{46} +\DeclareFlexSymbol{G}{Var}{Latin}{47} +\DeclareFlexSymbol{H}{Var}{Latin}{48} +\DeclareFlexSymbol{I}{Var}{Latin}{49} +\DeclareFlexSymbol{J}{Var}{Latin}{4A} +\DeclareFlexSymbol{K}{Var}{Latin}{4B} +\DeclareFlexSymbol{L}{Var}{Latin}{4C} +\DeclareFlexSymbol{M}{Var}{Latin}{4D} +\DeclareFlexSymbol{N}{Var}{Latin}{4E} +\DeclareFlexSymbol{O}{Var}{Latin}{4F} +\DeclareFlexSymbol{P}{Var}{Latin}{50} +\DeclareFlexSymbol{Q}{Var}{Latin}{51} +\DeclareFlexSymbol{R}{Var}{Latin}{52} +\DeclareFlexSymbol{S}{Var}{Latin}{53} +\DeclareFlexSymbol{T}{Var}{Latin}{54} +\DeclareFlexSymbol{U}{Var}{Latin}{55} +\DeclareFlexSymbol{V}{Var}{Latin}{56} +\DeclareFlexSymbol{W}{Var}{Latin}{57} +\DeclareFlexSymbol{X}{Var}{Latin}{58} +\DeclareFlexSymbol{Y}{Var}{Latin}{59} +\DeclareFlexSymbol{Z}{Var}{Latin}{5A} +\DeclareFlexSymbol{\ldotPun}{Pun}{OML}{3A} +\def\ldotp{\ldotPun} +\DeclareFlexSymbol{\lhookRel}{Rel}{OML}{2C} +\DeclareFlexSymbol{\rhookRel}{Rel}{OML}{2D} +\DeclareFlexSymbol{*}{Bin}{bin}{03} % \ast +\DeclareFlexSymbol{-}{Bin}{bin}{00} +\DeclareFlexSymbol{|}{Ord}{OMS}{6A} +\DeclareFlexSymbol{\aleph}{Ord}{ord}{40} +\DeclareFlexSymbol{\Re}{Ord}{ord}{3C} +\DeclareFlexSymbol{\Im}{Ord}{ord}{3D} +\DeclareFlexSymbol{\infty}{Ord}{ord}{31} +\DeclareFlexSymbol{\prime}{Ord}{ord}{30} +\DeclareFlexSymbol{\emptyset}{Ord}{ord}{3B} +\DeclareFlexSymbol{\nabla}{Ord}{ord}{72} +\DeclareFlexSymbol{\top}{Ord}{ord}{3E} +\DeclareFlexSymbol{\bot}{Ord}{ord}{3F} +\DeclareFlexSymbol{\triangle}{Ord}{ord}{34} +\DeclareFlexSymbol{\forall}{Ord}{ord}{38} +\DeclareFlexSymbol{\exists}{Ord}{ord}{39} +\DeclareFlexSymbol{\neg}{Ord}{ord}{3A} +\DeclareFlexSymbol{\clubsuit}{Ord}{ord}{7C} +\DeclareFlexSymbol{\diamondsuit}{Ord}{ord}{7D} +\DeclareFlexSymbol{\heartsuit}{Ord}{ord}{7E} +\DeclareFlexSymbol{\spadesuit}{Ord}{ord}{7F} +\DeclareFlexSymbol{\smallint}{COs}{OMS}{73} +\DeclareFlexSymbol{\bigtriangleup}{Bin}{bin}{34} +\DeclareFlexSymbol{\bigtriangledown}{Bin}{bin}{35} +\DeclareFlexSymbol{\wedge}{Bin}{bin}{5E} +\DeclareFlexSymbol{\vee}{Bin}{bin}{5F} +\DeclareFlexSymbol{\cap}{Bin}{bin}{5C} +\DeclareFlexSymbol{\cup}{Bin}{bin}{5B} +\DeclareFlexSymbol{\ddagger}{Bin}{bin}{7A} +\DeclareFlexSymbol{\dagger}{Bin}{bin}{79} +\DeclareFlexSymbol{\sqcap}{Bin}{bin}{75} +\DeclareFlexSymbol{\sqcup}{Bin}{bin}{74} +\DeclareFlexSymbol{\uplus}{Bin}{bin}{5D} +\DeclareFlexSymbol{\amalg}{Bin}{bin}{71} +\DeclareFlexSymbol{\diamond}{Bin}{bin}{05} +\DeclareFlexSymbol{\bullet}{Bin}{bin}{0F} +\DeclareFlexSymbol{\wr}{Bin}{bin}{6F} +\DeclareFlexSymbol{\div}{Bin}{bin}{04} +\DeclareFlexSymbol{\odot}{Bin}{bin}{0C} +\DeclareFlexSymbol{\oslash}{Bin}{bin}{0B} +\DeclareFlexSymbol{\otimes}{Bin}{bin}{0A} +\DeclareFlexSymbol{\ominus}{Bin}{bin}{09} +\DeclareFlexSymbol{\oplus}{Bin}{bin}{08} +\DeclareFlexSymbol{\mp}{Bin}{bin}{07} +\DeclareFlexSymbol{\pm}{Bin}{bin}{06} +\DeclareFlexSymbol{\circ}{Bin}{bin}{0E} +\DeclareFlexSymbol{\bigcirc}{Bin}{bin}{0D} +\DeclareFlexSymbol{\setminus}{Bin}{bin}{6E} +\DeclareFlexSymbol{\cdot}{Bin}{bin}{01} +\DeclareFlexSymbol{\ast}{Bin}{bin}{03} +\DeclareFlexSymbol{\times}{Bin}{bin}{02} +\DeclareFlexSymbol{\propto}{Rel}{rel}{2F} +\DeclareFlexSymbol{\sqsubseteq}{Rel}{rel}{76} +\DeclareFlexSymbol{\sqsupseteq}{Rel}{rel}{77} +\DeclareFlexSymbol{\parallel}{Rel}{rel}{6B} +\DeclareFlexSymbol{\mid}{Rel}{rel}{6A} +\DeclareFlexSymbol{\dashv}{Rel}{rel}{61} +\DeclareFlexSymbol{\vdash}{Rel}{rel}{60} +\DeclareFlexSymbol{\nearrow}{Rel}{rel}{25} +\DeclareFlexSymbol{\searrow}{Rel}{rel}{26} +\DeclareFlexSymbol{\nwarrow}{Rel}{rel}{2D} +\DeclareFlexSymbol{\swarrow}{Rel}{rel}{2E} +\DeclareFlexSymbol{\Leftrightarrow}{Rel}{rel}{2C} +\DeclareFlexSymbol{\Leftarrow}{Rel}{rel}{28} +\DeclareFlexSymbol{\Rightarrow}{Rel}{rel}{29} +\DeclareFlexSymbol{\leq}{Rel}{rel}{14} +\DeclareFlexSymbol{\geq}{Rel}{rel}{15} +\DeclareFlexSymbol{\succ}{Rel}{rel}{1F} +\DeclareFlexSymbol{\prec}{Rel}{rel}{1E} +\DeclareFlexSymbol{\approx}{Rel}{rel}{19} +\DeclareFlexSymbol{\succeq}{Rel}{rel}{17} +\DeclareFlexSymbol{\preceq}{Rel}{rel}{16} +\DeclareFlexSymbol{\supset}{Rel}{rel}{1B} +\DeclareFlexSymbol{\subset}{Rel}{rel}{1A} +\DeclareFlexSymbol{\supseteq}{Rel}{rel}{13} +\DeclareFlexSymbol{\subseteq}{Rel}{rel}{12} +\DeclareFlexSymbol{\in}{Rel}{rel}{32} +\DeclareFlexSymbol{\ni}{Rel}{rel}{33} +\DeclareFlexSymbol{\gg}{Rel}{rel}{1D} +\DeclareFlexSymbol{\ll}{Rel}{rel}{1C} +\DeclareFlexSymbol{\leftrightarrow}{Rel}{rel}{24} +\DeclareFlexSymbol{\leftarrow}{Rel}{rel}{20} +\DeclareFlexSymbol{\rightarrow}{Rel}{rel}{21} +\DeclareFlexSymbol{\sim}{Rel}{rel}{18} +\DeclareFlexSymbol{\simeq}{Rel}{rel}{27} +\DeclareFlexSymbol{\perp}{Rel}{rel}{3F} +\DeclareFlexSymbol{\equiv}{Rel}{rel}{11} +\DeclareFlexSymbol{\asymp}{Rel}{rel}{10} +\DeclareFlexSymbol{\notRel}{Rel}{rel}{36} +\DeclareFlexSymbol{\mapstoOrd}{Ord}{OMS}{37} +\DeclareFlexSymbol{\cdotOrd}{Ord}{OMS}{01} +\def\cdotp{\mathpunct{\cdotOrd}} +\DeclareFlexSymbol{\coprod}{COs}{cop}{60} +\DeclareFlexSymbol{\bigvee}{COs}{cop}{57} +\DeclareFlexSymbol{\bigwedge}{COs}{cop}{56} +\DeclareFlexSymbol{\biguplus}{COs}{cop}{55} +\DeclareFlexSymbol{\bigcap}{COs}{cop}{54} +\DeclareFlexSymbol{\bigcup}{COs}{cop}{53} +\DeclareFlexSymbol{\int}{COi}{cop}{52} +\DeclareFlexSymbol{\prod}{COs}{cop}{51} +\DeclareFlexSymbol{\sum}{COs}{cop}{50} +\DeclareFlexSymbol{\bigotimes}{COs}{cop}{4E} +\DeclareFlexSymbol{\bigoplus}{COs}{cop}{4C} +\DeclareFlexSymbol{\bigodot}{COs}{cop}{4A} +\DeclareFlexSymbol{\oint}{COi}{cop}{48} +\DeclareFlexSymbol{\bigsqcup}{COs}{cop}{46} +\DeclareFlexSymbol{\rangle}{DeR}{del}{0B} +\DeclareFlexSymbol{\langle}{DeL}{del}{0A} +\DeclareFlexSymbol{\rbrace}{DeR}{del}{09} +\DeclareFlexSymbol{\lbrace}{DeL}{del}{08} +\DeclareFlexSymbol{\rceil}{DeR}{del}{07} +\DeclareFlexSymbol{\lceil}{DeL}{del}{06} +\DeclareFlexSymbol{\rfloor}{DeR}{del}{05} +\DeclareFlexSymbol{\lfloor}{DeL}{del}{04} +\DeclareFlexSymbol{(}{DeL}{del}{00} +\DeclareFlexSymbol{)}{DeR}{del}{01} +\DeclareFlexSymbol{[}{DeL}{del}{02} +\DeclareFlexSymbol{]}{DeR}{del}{03} +\DeclareFlexSymbol{\lVert}{DeL}{del}{0D} +\DeclareFlexSymbol{\rVert}{DeR}{del}{0D} +\DeclareFlexSymbol{\lvert}{DeL}{del}{0C} +\DeclareFlexSymbol{\rvert}{DeR}{del}{0C} +\DeclareFlexSymbol{\Vert}{DeB}{del}{0D} +\DeclareFlexSymbol{\vert}{DeB}{del}{0C} +\DeclareFlexSymbol{|}{DeB}{del}{0C} +\DeclareFlexSymbol{/}{DeB}{del}{0E} +\DeclareFlexSymbol{\lmoustache}{DeL}{del}{40} +\DeclareFlexSymbol{\rmoustache}{DeR}{del}{41} +\DeclareFlexSymbol{\lgroup}{DeL}{del}{3A} +\DeclareFlexSymbol{\rgroup}{DeR}{del}{3B} +\DeclareFlexSymbol{\bracevert}{DeB}{del}{3E} +\DeclareFlexSymbol{\arrowvert}{DeB}{del}{3C} +\DeclareFlexSymbol{\Arrowvert}{DeB}{del}{3D} +\DeclareFlexSymbol{\uparrow}{DeA}{del}{78} +\DeclareFlexSymbol{\downarrow}{DeA}{del}{79} +\DeclareFlexSymbol{\updownarrow}{DeA}{del}{3F} +\DeclareFlexSymbol{\Uparrow}{DeA}{del}{7E} +\DeclareFlexSymbol{\Downarrow}{DeA}{del}{7F} +\DeclareFlexSymbol{\Updownarrow}{DeA}{del}{77} +\DeclareFlexSymbol{\backslash}{DeB}{del}{0F} +\DeclareFlexSymbol{\hbarOrd}{Ord}{OT1}{16} +\DeclareFlexCompoundSymbol{\hbar}{Ord}{\hbarOrd\mkern-9mu h} +\DeclareFlexSymbol{\surdOrd}{Ord}{OMS}{70} +\DeclareFlexCompoundSymbol{\surd}{Ord}{\mathop{\surdOrd}} +\DeclareFlexCompoundSymbol{\angle}{Ord}{% + \vbox{\ialign{% + $\m@th\scriptstyle##$\crcr + \notRel\mathrel{\mkern14mu}\crcr + \noalign{\nointerlineskip}% + \mkern2.5mu\leaders\hrule \@height.34pt\hfill\mkern2.5mu\crcr + }}% +} +\DeclareFlexCompoundSymbol{\neq}{Rel}{\not{=}} +\DeclareFlexCompoundSymbol{\mapsto}{Rel}{\mapstoOrd\rightarrow} +\DeclareFlexCompoundSymbol{\cong}{Rel}{\mathpalette\@vereq\sim} +\newcommand*\joinord{\mkern-3.45mu } +\DeclareFlexCompoundSymbol{\notin}{Rel}{\mathpalette\c@ncel\in} +\DeclareFlexCompoundSymbol{\rightleftharpoons}{Rel}{\mathpalette\rlh@{}} +\DeclareFlexCompoundSymbol{\doteq}{Rel}{\buildrel\textstyle.\over=} +\DeclareFlexCompoundSymbol{\hookrightarrow}{Rel}{\lhookRel\joinord\rightarrow} +\DeclareFlexCompoundSymbol{\hookleftarrow}{Rel}{\leftarrow\joinord\rhookRel} +\DeclareFlexCompoundSymbol{\bowtie}{Rel}{\triangleright\joinord\triangleleft} +\DeclareFlexCompoundSymbol{\models}{Rel}{\vert\joinord=} +\DeclareFlexCompoundSymbol{\Longrightarrow}{Rel}{\Relbar\joinord\Rightarrow} +\DeclareFlexCompoundSymbol{\longrightarrow}{Rel}{\relbar\joinord\rightarrow} +\DeclareFlexCompoundSymbol{\Longleftarrow}{Rel}{\Leftarrow\joinord\Relbar} +\DeclareFlexCompoundSymbol{\longleftarrow}{Rel}{\leftarrow\joinord\relbar} +\DeclareFlexCompoundSymbol{\longmapsto}{Rel}{\mapstochar\longrightarrow} +\DeclareFlexCompoundSymbol{\longleftrightarrow}{Rel}{\leftarrow\joinord\rightarrow} +\DeclareFlexCompoundSymbol{\Longleftrightarrow}{Rel}{\Leftarrow\joinord\Rightarrow} +\renewcommand*\iff{% + \mskip\thickmuskip\Longleftrightarrow\mskip\thickmuskip +} +\DeclareFlexCompoundSymbol{\cdots}{Inn}{\cdotp\cdotp\cdotp}% +\DeclareFlexCompoundSymbol{\vdots}{Ord}{% + \vbox{\baselineskip4\p@ \lineskiplimit\z@ + \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} +\DeclareFlexCompoundSymbol{\ddots}{Inn}{% + \mkern1mu\raise7\p@ + \vbox{\kern7\p@\hbox{.}}\mkern2mu% + \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu% +} +\def\relbar{\begingroup \def\smash@{tb}% in case amsmath is loaded + \mathpalette\mathsm@sh{\mathchar"200 }\endgroup} +\edef\Relbar{\mathchar\string"\hexnumber@\symupright3D } +\endinput +%% +%% End of file `mathpazo.sym'. diff --git a/Master/texmf-dist/doc/latex/mh/mathptmx.sym b/Master/texmf-dist/doc/latex/mh/mathptmx.sym new file mode 100644 index 00000000000..c612cfc516f --- /dev/null +++ b/Master/texmf-dist/doc/latex/mh/mathptmx.sym @@ -0,0 +1,367 @@ +%% +%% This is file `mathptmx.sym', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% flexisym.dtx (with options: `mathptmx') +%% +%% This is a generated file. +%% +%% Copyright (C) 1997-2003 by Michael J. Downes +%% Copyright (C) 2007 by Morten Hoegholm +%% +%% 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 flexisym.dtx +%% and the derived files +%% flexisym.sty, flexisym.pdf, flexisym.ins, flexisym.drv, +%% cmbase.sym, mathpazo.sym, mathptmx.sym, msabm.sym. +%% +\ProvidesSymbols{mathptmx}[2007/12/09 v0.1] +\@xp\xdef\csname mg@OT1\endcsname{\hexnumber@\symoperators} +\@xp\xdef\csname mg@OML\endcsname{\hexnumber@\symletters} +\@xp\xdef\csname mg@OMS\endcsname{\hexnumber@\symsymbols} +\@xp\xdef\csname mg@OMX\endcsname{\hexnumber@\symlargesymbols} +\gdef\mg@bin{\mg@OMS} +\gdef\mg@del{\mg@OMX} +\xdef\mg@digit{\@xp\@nx\csname mg@OT1\endcsname} +\gdef\mg@latin{\mg@OML} +\global\let\mg@Latin\mg@latin +\global\let\mg@greek\mg@latin +\global\let\mg@Greek\mg@digit +\global\let\mg@rel\mg@bin +\global\let\mg@ord\mg@bin +\global\let\mg@cop\mg@del +\DeclareFlexSymbol{!} {Pun}{OT1}{21} +\DeclareFlexSymbol{+} {Bin}{OT1}{2B} +\DeclareFlexSymbol{:} {Rel}{OT1}{3A} +\DeclareFlexSymbol{\colon}{Pun}{OT1}{3A} +\DeclareFlexSymbol{;} {Pun}{OT1}{3B} +\DeclareFlexSymbol{=} {Rel}{OT1}{3D} +\DeclareFlexSymbol{?} {Pun}{OT1}{3F} +\DeclareFlexSymbol{\Gamma} {Var}{Greek}{00} +\DeclareFlexSymbol{\Delta} {Var}{Greek}{01} +\DeclareFlexSymbol{\Theta} {Var}{Greek}{02} +\DeclareFlexSymbol{\Lambda} {Var}{Greek}{03} +\DeclareFlexSymbol{\Xi} {Var}{Greek}{04} +\DeclareFlexSymbol{\Pi} {Var}{Greek}{05} +\DeclareFlexSymbol{\Sigma} {Var}{Greek}{06} +\DeclareFlexSymbol{\Upsilon}{Var}{Greek}{07} +\DeclareFlexSymbol{\Phi} {Var}{Greek}{08} +\DeclareFlexSymbol{\Psi} {Var}{Greek}{09} +\DeclareFlexSymbol{\Omega} {Var}{Greek}{0A} +\DeclareFlexSymbol{0}{Var}{digit}{30} +\DeclareFlexSymbol{1}{Var}{digit}{31} +\DeclareFlexSymbol{2}{Var}{digit}{32} +\DeclareFlexSymbol{3}{Var}{digit}{33} +\DeclareFlexSymbol{4}{Var}{digit}{34} +\DeclareFlexSymbol{5}{Var}{digit}{35} +\DeclareFlexSymbol{6}{Var}{digit}{36} +\DeclareFlexSymbol{7}{Var}{digit}{37} +\DeclareFlexSymbol{8}{Var}{digit}{38} +\DeclareFlexSymbol{9}{Var}{digit}{39} +\DeclareFlexSymbol{,}{Pun}{OML}{3B} +\DeclareFlexSymbol{.}{Ord}{OML}{3A} +\DeclareFlexSymbol{/}{Ord}{OML}{3D} +\DeclareFlexSymbol{<}{Rel}{OML}{3C} +\DeclareFlexSymbol{>}{Rel}{OML}{3E} +\DeclareFlexSymbol{\alpha}{Var}{greek}{0B} +\DeclareFlexSymbol{\beta}{Var}{greek}{0C} +\DeclareFlexSymbol{\gamma}{Var}{greek}{0D} +\DeclareFlexSymbol{\delta}{Var}{greek}{0E} +\DeclareFlexSymbol{\epsilon}{Var}{greek}{0F} +\DeclareFlexSymbol{\zeta}{Var}{greek}{10} +\DeclareFlexSymbol{\eta}{Var}{greek}{11} +\DeclareFlexSymbol{\theta}{Var}{greek}{12} +\DeclareFlexSymbol{\iota}{Var}{greek}{13} +\DeclareFlexSymbol{\kappa}{Var}{greek}{14} +\DeclareFlexSymbol{\lambda}{Var}{greek}{15} +\DeclareFlexSymbol{\mu}{Var}{greek}{16} +\DeclareFlexSymbol{\nu}{Var}{greek}{17} +\DeclareFlexSymbol{\xi}{Var}{greek}{18} +\DeclareFlexSymbol{\pi}{Var}{greek}{19} +\DeclareFlexSymbol{\rho}{Var}{greek}{1A} +\DeclareFlexSymbol{\sigma}{Var}{greek}{1B} +\DeclareFlexSymbol{\tau}{Var}{greek}{1C} +\DeclareFlexSymbol{\upsilon}{Var}{greek}{1D} +\DeclareFlexSymbol{\phi}{Var}{greek}{1E} +\DeclareFlexSymbol{\chi}{Var}{greek}{1F} +\DeclareFlexSymbol{\psi}{Var}{greek}{20} +\DeclareFlexSymbol{\omega}{Var}{greek}{21} +\DeclareFlexSymbol{\varepsilon}{Var}{greek}{22} +\DeclareFlexSymbol{\vartheta}{Var}{greek}{23} +\DeclareFlexSymbol{\varpi}{Var}{greek}{24} +\DeclareFlexSymbol{\varrho}{Var}{greek}{25} +\DeclareFlexSymbol{\varsigma}{Var}{greek}{26} +\DeclareFlexSymbol{\varphi}{Var}{greek}{27} +\DeclareFlexSymbol{\imath}{Var}{OML}{7B} +\DeclareFlexSymbol{\jmath}{Var}{OML}{7C} +\DeclareFlexSymbol{\ell}{Ord}{OML}{60} +\DeclareFlexSymbol{\wp}{Ord}{OML}{7D} +\DeclareFlexSymbol{\partial}{Ord}{OML}{40} +\DeclareFlexSymbol{\flat}{Ord}{OML}{5B} +\DeclareFlexSymbol{\natural}{Ord}{OML}{5C} +\DeclareFlexSymbol{\sharp}{Ord}{OML}{5D} +\DeclareFlexSymbol{\triangleleft}{Bin}{OML}{2F} +\DeclareFlexSymbol{\triangleright}{Bin}{OML}{2E} +\DeclareFlexSymbol{\star}{Bin}{OML}{3F} +\DeclareFlexSymbol{\smile}{Rel}{OML}{5E} +\DeclareFlexSymbol{\frown}{Rel}{OML}{5F} +\DeclareFlexSymbol{\leftharpoonup}{Rel}{OML}{28} +\DeclareFlexSymbol{\leftharpoondown}{Rel}{OML}{29} +\DeclareFlexSymbol{\rightharpoonup}{Rel}{OML}{2A} +\DeclareFlexSymbol{\rightharpoondown}{Rel}{OML}{2B} +\DeclareFlexSymbol{a}{Var}{latin}{61} +\DeclareFlexSymbol{b}{Var}{latin}{62} +\DeclareFlexSymbol{c}{Var}{latin}{63} +\DeclareFlexSymbol{d}{Var}{latin}{64} +\DeclareFlexSymbol{e}{Var}{latin}{65} +\DeclareFlexSymbol{f}{Var}{latin}{66} +\DeclareFlexSymbol{g}{Var}{latin}{67} +\DeclareFlexSymbol{h}{Var}{latin}{68} +\DeclareFlexSymbol{i}{Var}{latin}{69} +\DeclareFlexSymbol{j}{Var}{latin}{6A} +\DeclareFlexSymbol{k}{Var}{latin}{6B} +\DeclareFlexSymbol{l}{Var}{latin}{6C} +\DeclareFlexSymbol{m}{Var}{latin}{6D} +\DeclareFlexSymbol{n}{Var}{latin}{6E} +\DeclareFlexSymbol{o}{Var}{latin}{6F} +\DeclareFlexSymbol{p}{Var}{latin}{70} +\DeclareFlexSymbol{q}{Var}{latin}{71} +\DeclareFlexSymbol{r}{Var}{latin}{72} +\DeclareFlexSymbol{s}{Var}{latin}{73} +\DeclareFlexSymbol{t}{Var}{latin}{74} +\DeclareFlexSymbol{u}{Var}{latin}{75} +\DeclareFlexSymbol{v}{Var}{latin}{76} +\DeclareFlexSymbol{w}{Var}{latin}{77} +\DeclareFlexSymbol{x}{Var}{latin}{78} +\DeclareFlexSymbol{y}{Var}{latin}{79} +\DeclareFlexSymbol{z}{Var}{latin}{7A} +\DeclareFlexSymbol{A}{Var}{Latin}{41} +\DeclareFlexSymbol{B}{Var}{Latin}{42} +\DeclareFlexSymbol{C}{Var}{Latin}{43} +\DeclareFlexSymbol{D}{Var}{Latin}{44} +\DeclareFlexSymbol{E}{Var}{Latin}{45} +\DeclareFlexSymbol{F}{Var}{Latin}{46} +\DeclareFlexSymbol{G}{Var}{Latin}{47} +\DeclareFlexSymbol{H}{Var}{Latin}{48} +\DeclareFlexSymbol{I}{Var}{Latin}{49} +\DeclareFlexSymbol{J}{Var}{Latin}{4A} +\DeclareFlexSymbol{K}{Var}{Latin}{4B} +\DeclareFlexSymbol{L}{Var}{Latin}{4C} +\DeclareFlexSymbol{M}{Var}{Latin}{4D} +\DeclareFlexSymbol{N}{Var}{Latin}{4E} +\DeclareFlexSymbol{O}{Var}{Latin}{4F} +\DeclareFlexSymbol{P}{Var}{Latin}{50} +\DeclareFlexSymbol{Q}{Var}{Latin}{51} +\DeclareFlexSymbol{R}{Var}{Latin}{52} +\DeclareFlexSymbol{S}{Var}{Latin}{53} +\DeclareFlexSymbol{T}{Var}{Latin}{54} +\DeclareFlexSymbol{U}{Var}{Latin}{55} +\DeclareFlexSymbol{V}{Var}{Latin}{56} +\DeclareFlexSymbol{W}{Var}{Latin}{57} +\DeclareFlexSymbol{X}{Var}{Latin}{58} +\DeclareFlexSymbol{Y}{Var}{Latin}{59} +\DeclareFlexSymbol{Z}{Var}{Latin}{5A} +\DeclareFlexSymbol{\ldotPun}{Pun}{OML}{3A} +\def\ldotp{\ldotPun} +\DeclareFlexSymbol{\lhookRel}{Rel}{OML}{2C} +\DeclareFlexSymbol{\rhookRel}{Rel}{OML}{2D} +\DeclareFlexSymbol{*}{Bin}{bin}{03} % \ast +\DeclareFlexSymbol{-}{Bin}{bin}{00} +\DeclareFlexSymbol{|}{Ord}{OMS}{6A} +\DeclareFlexSymbol{\aleph}{Ord}{ord}{40} +\DeclareFlexSymbol{\Re}{Ord}{ord}{3C} +\DeclareFlexSymbol{\Im}{Ord}{ord}{3D} +\DeclareFlexSymbol{\infty}{Ord}{ord}{31} +\DeclareFlexSymbol{\prime}{Ord}{ord}{30} +\DeclareFlexSymbol{\emptyset}{Ord}{ord}{3B} +\DeclareFlexSymbol{\nabla}{Ord}{ord}{72} +\DeclareFlexSymbol{\top}{Ord}{ord}{3E} +\DeclareFlexSymbol{\bot}{Ord}{ord}{3F} +\DeclareFlexSymbol{\triangle}{Ord}{ord}{34} +\DeclareFlexSymbol{\forall}{Ord}{ord}{38} +\DeclareFlexSymbol{\exists}{Ord}{ord}{39} +\DeclareFlexSymbol{\neg}{Ord}{ord}{3A} +\DeclareFlexSymbol{\clubsuit}{Ord}{ord}{7C} +\DeclareFlexSymbol{\diamondsuit}{Ord}{ord}{7D} +\DeclareFlexSymbol{\heartsuit}{Ord}{ord}{7E} +\DeclareFlexSymbol{\spadesuit}{Ord}{ord}{7F} +\DeclareFlexSymbol{\smallint}{COs}{OMS}{73} +\DeclareFlexSymbol{\bigtriangleup}{Bin}{bin}{34} +\DeclareFlexSymbol{\bigtriangledown}{Bin}{bin}{35} +\DeclareFlexSymbol{\wedge}{Bin}{bin}{5E} +\DeclareFlexSymbol{\vee}{Bin}{bin}{5F} +\DeclareFlexSymbol{\cap}{Bin}{bin}{5C} +\DeclareFlexSymbol{\cup}{Bin}{bin}{5B} +\DeclareFlexSymbol{\ddagger}{Bin}{bin}{7A} +\DeclareFlexSymbol{\dagger}{Bin}{bin}{79} +\DeclareFlexSymbol{\sqcap}{Bin}{bin}{75} +\DeclareFlexSymbol{\sqcup}{Bin}{bin}{74} +\DeclareFlexSymbol{\uplus}{Bin}{bin}{5D} +\DeclareFlexSymbol{\amalg}{Bin}{bin}{71} +\DeclareFlexSymbol{\diamond}{Bin}{bin}{05} +\DeclareFlexSymbol{\bullet}{Bin}{bin}{0F} +\DeclareFlexSymbol{\wr}{Bin}{bin}{6F} +\DeclareFlexSymbol{\div}{Bin}{bin}{04} +\DeclareFlexSymbol{\odot}{Bin}{bin}{0C} +\DeclareFlexSymbol{\oslash}{Bin}{bin}{0B} +\DeclareFlexSymbol{\otimes}{Bin}{bin}{0A} +\DeclareFlexSymbol{\ominus}{Bin}{bin}{09} +\DeclareFlexSymbol{\oplus}{Bin}{bin}{08} +\DeclareFlexSymbol{\mp}{Bin}{bin}{07} +\DeclareFlexSymbol{\pm}{Bin}{bin}{06} +\DeclareFlexSymbol{\circ}{Bin}{bin}{0E} +\DeclareFlexSymbol{\bigcirc}{Bin}{bin}{0D} +\DeclareFlexSymbol{\setminus}{Bin}{bin}{6E} +\DeclareFlexSymbol{\cdot}{Bin}{bin}{01} +\DeclareFlexSymbol{\ast}{Bin}{bin}{03} +\DeclareFlexSymbol{\times}{Bin}{bin}{02} +\DeclareFlexSymbol{\propto}{Rel}{rel}{2F} +\DeclareFlexSymbol{\sqsubseteq}{Rel}{rel}{76} +\DeclareFlexSymbol{\sqsupseteq}{Rel}{rel}{77} +\DeclareFlexSymbol{\parallel}{Rel}{rel}{6B} +\DeclareFlexSymbol{\mid}{Rel}{rel}{6A} +\DeclareFlexSymbol{\dashv}{Rel}{rel}{61} +\DeclareFlexSymbol{\vdash}{Rel}{rel}{60} +\DeclareFlexSymbol{\nearrow}{Rel}{rel}{25} +\DeclareFlexSymbol{\searrow}{Rel}{rel}{26} +\DeclareFlexSymbol{\nwarrow}{Rel}{rel}{2D} +\DeclareFlexSymbol{\swarrow}{Rel}{rel}{2E} +\DeclareFlexSymbol{\Leftrightarrow}{Rel}{rel}{2C} +\DeclareFlexSymbol{\Leftarrow}{Rel}{rel}{28} +\DeclareFlexSymbol{\Rightarrow}{Rel}{rel}{29} +\DeclareFlexSymbol{\leq}{Rel}{rel}{14} +\DeclareFlexSymbol{\geq}{Rel}{rel}{15} +\DeclareFlexSymbol{\succ}{Rel}{rel}{1F} +\DeclareFlexSymbol{\prec}{Rel}{rel}{1E} +\DeclareFlexSymbol{\approx}{Rel}{rel}{19} +\DeclareFlexSymbol{\succeq}{Rel}{rel}{17} +\DeclareFlexSymbol{\preceq}{Rel}{rel}{16} +\DeclareFlexSymbol{\supset}{Rel}{rel}{1B} +\DeclareFlexSymbol{\subset}{Rel}{rel}{1A} +\DeclareFlexSymbol{\supseteq}{Rel}{rel}{13} +\DeclareFlexSymbol{\subseteq}{Rel}{rel}{12} +\DeclareFlexSymbol{\in}{Rel}{rel}{32} +\DeclareFlexSymbol{\ni}{Rel}{rel}{33} +\DeclareFlexSymbol{\gg}{Rel}{rel}{1D} +\DeclareFlexSymbol{\ll}{Rel}{rel}{1C} +\DeclareFlexSymbol{\leftrightarrow}{Rel}{rel}{24} +\DeclareFlexSymbol{\leftarrow}{Rel}{rel}{20} +\DeclareFlexSymbol{\rightarrow}{Rel}{rel}{21} +\DeclareFlexSymbol{\sim}{Rel}{rel}{18} +\DeclareFlexSymbol{\simeq}{Rel}{rel}{27} +\DeclareFlexSymbol{\perp}{Rel}{rel}{3F} +\DeclareFlexSymbol{\equiv}{Rel}{rel}{11} +\DeclareFlexSymbol{\asymp}{Rel}{rel}{10} +\DeclareFlexSymbol{\notRel}{Rel}{rel}{36} +\DeclareFlexSymbol{\mapstoOrd}{Ord}{OMS}{37} +\DeclareFlexSymbol{\cdotOrd}{Ord}{OMS}{01} +\def\cdotp{\mathpunct{\cdotOrd}} +\DeclareFlexSymbol{\coprod}{COs}{cop}{60} +\DeclareFlexSymbol{\bigvee}{COs}{cop}{57} +\DeclareFlexSymbol{\bigwedge}{COs}{cop}{56} +\DeclareFlexSymbol{\biguplus}{COs}{cop}{55} +\DeclareFlexSymbol{\bigcap}{COs}{cop}{54} +\DeclareFlexSymbol{\bigcup}{COs}{cop}{53} +\DeclareFlexSymbol{\int}{COi}{cop}{52} +\DeclareFlexSymbol{\prod}{COs}{cop}{51} +\DeclareFlexSymbol{\sum}{COs}{cop}{50} +\DeclareFlexSymbol{\bigotimes}{COs}{cop}{4E} +\DeclareFlexSymbol{\bigoplus}{COs}{cop}{4C} +\DeclareFlexSymbol{\bigodot}{COs}{cop}{4A} +\DeclareFlexSymbol{\oint}{COi}{cop}{48} +\DeclareFlexSymbol{\bigsqcup}{COs}{cop}{46} +\DeclareFlexSymbol{\rangle}{DeR}{del}{0B} +\DeclareFlexSymbol{\langle}{DeL}{del}{0A} +\DeclareFlexSymbol{\rbrace}{DeR}{del}{09} +\DeclareFlexSymbol{\lbrace}{DeL}{del}{08} +\DeclareFlexSymbol{\rceil}{DeR}{del}{07} +\DeclareFlexSymbol{\lceil}{DeL}{del}{06} +\DeclareFlexSymbol{\rfloor}{DeR}{del}{05} +\DeclareFlexSymbol{\lfloor}{DeL}{del}{04} +\DeclareFlexSymbol{(}{DeL}{del}{00} +\DeclareFlexSymbol{)}{DeR}{del}{01} +\DeclareFlexSymbol{[}{DeL}{del}{02} +\DeclareFlexSymbol{]}{DeR}{del}{03} +\DeclareFlexSymbol{\lVert}{DeL}{del}{0D} +\DeclareFlexSymbol{\rVert}{DeR}{del}{0D} +\DeclareFlexSymbol{\lvert}{DeL}{del}{0C} +\DeclareFlexSymbol{\rvert}{DeR}{del}{0C} +\DeclareFlexSymbol{\Vert}{DeB}{del}{0D} +\DeclareFlexSymbol{\vert}{DeB}{del}{0C} +\DeclareFlexSymbol{|}{DeB}{del}{0C} +\DeclareFlexSymbol{/}{DeB}{del}{0E} +\DeclareFlexSymbol{\lmoustache}{DeL}{del}{40} +\DeclareFlexSymbol{\rmoustache}{DeR}{del}{41} +\DeclareFlexSymbol{\lgroup}{DeL}{del}{3A} +\DeclareFlexSymbol{\rgroup}{DeR}{del}{3B} +\DeclareFlexSymbol{\bracevert}{DeB}{del}{3E} +\DeclareFlexSymbol{\arrowvert}{DeB}{del}{3C} +\DeclareFlexSymbol{\Arrowvert}{DeB}{del}{3D} +\DeclareFlexSymbol{\uparrow}{DeA}{del}{78} +\DeclareFlexSymbol{\downarrow}{DeA}{del}{79} +\DeclareFlexSymbol{\updownarrow}{DeA}{del}{3F} +\DeclareFlexSymbol{\Uparrow}{DeA}{del}{7E} +\DeclareFlexSymbol{\Downarrow}{DeA}{del}{7F} +\DeclareFlexSymbol{\Updownarrow}{DeA}{del}{77} +\DeclareFlexSymbol{\backslash}{DeB}{del}{0F} +\DeclareFlexSymbol{\hbarOrd}{Ord}{OT1}{16} +\DeclareFlexCompoundSymbol{\hbar}{Ord}{\hbarOrd\mkern-9mu h} +\DeclareFlexSymbol{\surdOrd}{Ord}{OMS}{70} +\DeclareFlexCompoundSymbol{\surd}{Ord}{\mathop{\surdOrd}} +\DeclareFlexCompoundSymbol{\angle}{Ord}{% + \vbox{\ialign{% + $\m@th\scriptstyle##$\crcr + \notRel\mathrel{\mkern14mu}\crcr + \noalign{\nointerlineskip}% + \mkern2.5mu\leaders\hrule \@height.34pt\hfill\mkern2.5mu\crcr + }}% +} +\DeclareFlexCompoundSymbol{\neq}{Rel}{\not{=}} +\DeclareFlexCompoundSymbol{\mapsto}{Rel}{\mapstoOrd\rightarrow} +\DeclareFlexCompoundSymbol{\cong}{Rel}{\mathpalette\@vereq\sim} +\newcommand*\joinord{\mkern-3mu } +\DeclareFlexCompoundSymbol{\notin}{Rel}{\mathpalette\c@ncel\in} +\DeclareFlexCompoundSymbol{\rightleftharpoons}{Rel}{\mathpalette\rlh@{}} +\DeclareFlexCompoundSymbol{\doteq}{Rel}{\buildrel\textstyle.\over=} +\DeclareFlexCompoundSymbol{\hookrightarrow}{Rel}{\lhookRel\joinord\rightarrow} +\DeclareFlexCompoundSymbol{\hookleftarrow}{Rel}{\leftarrow\joinord\rhookRel} +\DeclareFlexCompoundSymbol{\bowtie}{Rel}{\triangleright\joinord\triangleleft} +\DeclareFlexCompoundSymbol{\models}{Rel}{\vert\joinord=} +\DeclareFlexCompoundSymbol{\Longrightarrow}{Rel}{\Relbar\joinord\Rightarrow} +\DeclareFlexCompoundSymbol{\longrightarrow}{Rel}{\relbar\joinord\rightarrow} +\DeclareFlexCompoundSymbol{\Longleftarrow}{Rel}{\Leftarrow\joinord\Relbar} +\DeclareFlexCompoundSymbol{\longleftarrow}{Rel}{\leftarrow\joinord\relbar} +\DeclareFlexCompoundSymbol{\longmapsto}{Rel}{\mapstochar\longrightarrow} +\DeclareFlexCompoundSymbol{\longleftrightarrow}{Rel}{\leftarrow\joinord\rightarrow} +\DeclareFlexCompoundSymbol{\Longleftrightarrow}{Rel}{\Leftarrow\joinord\Rightarrow} +\renewcommand*\iff{% + \mskip\thickmuskip\Longleftrightarrow\mskip\thickmuskip +} +\DeclareFlexCompoundSymbol{\cdots}{Inn}{\cdotp\cdotp\cdotp}% +\DeclareFlexCompoundSymbol{\vdots}{Ord}{% + \vbox{\baselineskip4\p@ \lineskiplimit\z@ + \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} +\DeclareFlexCompoundSymbol{\ddots}{Inn}{% + \mkern1mu\raise7\p@ + \vbox{\kern7\p@\hbox{.}}\mkern2mu% + \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu% +} +\def\relbar{\begingroup \def\smash@{tb}% in case amsmath is loaded + \mathpalette\mathsm@sh{\mathchar"200 }\endgroup} +\def\Relbar{\mathchar"3D } +\endinput +%% +%% End of file `mathptmx.sym'. diff --git a/Master/texmf-dist/doc/latex/mh/mathstyle.pdf b/Master/texmf-dist/doc/latex/mh/mathstyle.pdf new file mode 100644 index 00000000000..ae2163e3ea1 Binary files /dev/null and b/Master/texmf-dist/doc/latex/mh/mathstyle.pdf differ diff --git a/Master/texmf-dist/doc/latex/mh/mathtools.pdf b/Master/texmf-dist/doc/latex/mh/mathtools.pdf index 16978fd9df5..afd0be65d43 100644 Binary files a/Master/texmf-dist/doc/latex/mh/mathtools.pdf and b/Master/texmf-dist/doc/latex/mh/mathtools.pdf differ diff --git a/Master/texmf-dist/doc/latex/mh/mhsetup.pdf b/Master/texmf-dist/doc/latex/mh/mhsetup.pdf index e72e4c090c2..484483621b6 100644 Binary files a/Master/texmf-dist/doc/latex/mh/mhsetup.pdf and b/Master/texmf-dist/doc/latex/mh/mhsetup.pdf differ diff --git a/Master/texmf-dist/doc/latex/mh/msabm.sym b/Master/texmf-dist/doc/latex/mh/msabm.sym new file mode 100644 index 00000000000..fde30ef6dc8 --- /dev/null +++ b/Master/texmf-dist/doc/latex/mh/msabm.sym @@ -0,0 +1,253 @@ +%% +%% This is file `msabm.sym', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% flexisym.dtx (with options: `msabm') +%% +%% This is a generated file. +%% +%% Copyright (C) 1997-2003 by Michael J. Downes +%% Copyright (C) 2007 by Morten Hoegholm +%% +%% 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 flexisym.dtx +%% and the derived files +%% flexisym.sty, flexisym.pdf, flexisym.ins, flexisym.drv, +%% cmbase.sym, mathpazo.sym, mathptmx.sym, msabm.sym. +%% +\ProvidesSymbols{msabm}[2001/09/08 v0.91] +\RequirePackage{amsfonts}\relax +\@xp\xdef\csname mg@MSA\endcsname{\hexnumber@\symAMSa}% +\@xp\xdef\csname mg@MSB\endcsname{\hexnumber@\symAMSb}% +\DeclareFlexSymbol{\boxdot} {Bin}{MSA}{00} +\DeclareFlexSymbol{\boxplus} {Bin}{MSA}{01} +\DeclareFlexSymbol{\boxtimes} {Bin}{MSA}{02} +\DeclareFlexSymbol{\square} {Ord}{MSA}{03} +\DeclareFlexSymbol{\blacksquare} {Ord}{MSA}{04} +\DeclareFlexSymbol{\centerdot} {Bin}{MSA}{05} +\DeclareFlexSymbol{\lozenge} {Ord}{MSA}{06} +\DeclareFlexSymbol{\blacklozenge} {Ord}{MSA}{07} +\DeclareFlexSymbol{\circlearrowright} {Rel}{MSA}{08} +\DeclareFlexSymbol{\circlearrowleft} {Rel}{MSA}{09} +%%\DeclareFlexSymbol{\rightleftharpoons}{Rel}{MSA}{0A} +\DeclareFlexSymbol{\leftrightharpoons} {Rel}{MSA}{0B} +\DeclareFlexSymbol{\boxminus} {Bin}{MSA}{0C} +\DeclareFlexSymbol{\Vdash} {Rel}{MSA}{0D} +\DeclareFlexSymbol{\Vvdash} {Rel}{MSA}{0E} +\DeclareFlexSymbol{\vDash} {Rel}{MSA}{0F} +\DeclareFlexSymbol{\twoheadrightarrow} {Rel}{MSA}{10} +\DeclareFlexSymbol{\twoheadleftarrow} {Rel}{MSA}{11} +\DeclareFlexSymbol{\leftleftarrows} {Rel}{MSA}{12} +\DeclareFlexSymbol{\rightrightarrows} {Rel}{MSA}{13} +\DeclareFlexSymbol{\upuparrows} {Rel}{MSA}{14} +\DeclareFlexSymbol{\downdownarrows} {Rel}{MSA}{15} +\DeclareFlexSymbol{\upharpoonright} {Rel}{MSA}{16} + \let\restriction\upharpoonright +\DeclareFlexSymbol{\downharpoonright} {Rel}{MSA}{17} +\DeclareFlexSymbol{\upharpoonleft} {Rel}{MSA}{18} +\DeclareFlexSymbol{\downharpoonleft}{Rel}{MSA}{19} +\DeclareFlexSymbol{\rightarrowtail} {Rel}{MSA}{1A} +\DeclareFlexSymbol{\leftarrowtail} {Rel}{MSA}{1B} +\DeclareFlexSymbol{\leftrightarrows}{Rel}{MSA}{1C} +\DeclareFlexSymbol{\rightleftarrows}{Rel}{MSA}{1D} +\DeclareFlexSymbol{\Lsh} {Rel}{MSA}{1E} +\DeclareFlexSymbol{\Rsh} {Rel}{MSA}{1F} +\DeclareFlexSymbol{\rightsquigarrow} {Rel}{MSA}{20} +\DeclareFlexSymbol{\leftrightsquigarrow}{Rel}{MSA}{21} +\DeclareFlexSymbol{\looparrowleft} {Rel}{MSA}{22} +\DeclareFlexSymbol{\looparrowright} {Rel}{MSA}{23} +\DeclareFlexSymbol{\circeq} {Rel}{MSA}{24} +\DeclareFlexSymbol{\succsim} {Rel}{MSA}{25} +\DeclareFlexSymbol{\gtrsim} {Rel}{MSA}{26} +\DeclareFlexSymbol{\gtrapprox} {Rel}{MSA}{27} +\DeclareFlexSymbol{\multimap} {Rel}{MSA}{28} +\DeclareFlexSymbol{\therefore} {Rel}{MSA}{29} +\DeclareFlexSymbol{\because} {Rel}{MSA}{2A} +\DeclareFlexSymbol{\doteqdot} {Rel}{MSA}{2B} + \let\Doteq\doteqdot +\DeclareFlexSymbol{\triangleq} {Rel}{MSA}{2C} +\DeclareFlexSymbol{\precsim} {Rel}{MSA}{2D} +\DeclareFlexSymbol{\lesssim} {Rel}{MSA}{2E} +\DeclareFlexSymbol{\lessapprox} {Rel}{MSA}{2F} +\DeclareFlexSymbol{\eqslantless} {Rel}{MSA}{30} +\DeclareFlexSymbol{\eqslantgtr} {Rel}{MSA}{31} +\DeclareFlexSymbol{\curlyeqprec} {Rel}{MSA}{32} +\DeclareFlexSymbol{\curlyeqsucc} {Rel}{MSA}{33} +\DeclareFlexSymbol{\preccurlyeq} {Rel}{MSA}{34} +\DeclareFlexSymbol{\leqq} {Rel}{MSA}{35} +\DeclareFlexSymbol{\leqslant} {Rel}{MSA}{36} +\DeclareFlexSymbol{\lessgtr} {Rel}{MSA}{37} +\DeclareFlexSymbol{\backprime} {Ord}{MSA}{38} +\DeclareFlexSymbol{\risingdotseq} {Rel}{MSA}{3A} +\DeclareFlexSymbol{\fallingdotseq}{Rel}{MSA}{3B} +\DeclareFlexSymbol{\succcurlyeq} {Rel}{MSA}{3C} +\DeclareFlexSymbol{\geqq} {Rel}{MSA}{3D} +\DeclareFlexSymbol{\geqslant} {Rel}{MSA}{3E} +\DeclareFlexSymbol{\gtrless} {Rel}{MSA}{3F} +%% \DeclareFlexSymbol{\sqsubset} {Rel}{MSA}{40} +%% \DeclareFlexSymbol{\sqsupset} {Rel}{MSA}{41} +\DeclareFlexSymbol{\vartriangleright}{Rel}{MSA}{42} +\DeclareFlexSymbol{\vartriangleleft} {Rel}{MSA}{43} +\DeclareFlexSymbol{\trianglerighteq} {Rel}{MSA}{44} +\DeclareFlexSymbol{\trianglelefteq} {Rel}{MSA}{45} +\DeclareFlexSymbol{\bigstar} {Ord}{MSA}{46} +\DeclareFlexSymbol{\between} {Rel}{MSA}{47} +\DeclareFlexSymbol{\blacktriangledown} {Ord}{MSA}{48} +\DeclareFlexSymbol{\blacktriangleright} {Rel}{MSA}{49} +\DeclareFlexSymbol{\blacktriangleleft} {Rel}{MSA}{4A} +\DeclareFlexSymbol{\vartriangle} {Rel}{MSA}{4D} +\DeclareFlexSymbol{\blacktriangle} {Ord}{MSA}{4E} +\DeclareFlexSymbol{\triangledown} {Ord}{MSA}{4F} +\DeclareFlexSymbol{\eqcirc} {Rel}{MSA}{50} +\DeclareFlexSymbol{\lesseqgtr} {Rel}{MSA}{51} +\DeclareFlexSymbol{\gtreqless} {Rel}{MSA}{52} +\DeclareFlexSymbol{\lesseqqgtr} {Rel}{MSA}{53} +\DeclareFlexSymbol{\gtreqqless} {Rel}{MSA}{54} +\DeclareFlexSymbol{\Rrightarrow} {Rel}{MSA}{56} +\DeclareFlexSymbol{\Lleftarrow} {Rel}{MSA}{57} +\DeclareFlexSymbol{\veebar} {Bin}{MSA}{59} +\DeclareFlexSymbol{\barwedge} {Bin}{MSA}{5A} +\DeclareFlexSymbol{\doublebarwedge} {Bin}{MSA}{5B} +%%\DeclareFlexSymbol{\angle} {Ord}{MSA}{5C} +\DeclareFlexSymbol{\measuredangle} {Ord}{MSA}{5D} +\DeclareFlexSymbol{\sphericalangle} {Ord}{MSA}{5E} +\DeclareFlexSymbol{\varpropto} {Rel}{MSA}{5F} +\DeclareFlexSymbol{\smallsmile} {Rel}{MSA}{60} +\DeclareFlexSymbol{\smallfrown} {Rel}{MSA}{61} +\DeclareFlexSymbol{\Subset} {Rel}{MSA}{62} +\DeclareFlexSymbol{\Supset} {Rel}{MSA}{63} +\DeclareFlexSymbol{\Cup} {Bin}{MSA}{64} + \let\doublecup\Cup +\DeclareFlexSymbol{\Cap} {Bin}{MSA}{65} + \let\doublecap\Cap +\DeclareFlexSymbol{\curlywedge} {Bin}{MSA}{66} +\DeclareFlexSymbol{\curlyvee} {Bin}{MSA}{67} +\DeclareFlexSymbol{\leftthreetimes} {Bin}{MSA}{68} +\DeclareFlexSymbol{\rightthreetimes}{Bin}{MSA}{69} +\DeclareFlexSymbol{\subseteqq} {Rel}{MSA}{6A} +\DeclareFlexSymbol{\supseteqq} {Rel}{MSA}{6B} +\DeclareFlexSymbol{\bumpeq} {Rel}{MSA}{6C} +\DeclareFlexSymbol{\Bumpeq} {Rel}{MSA}{6D} +\DeclareFlexSymbol{\lll} {Rel}{MSA}{6E} + \let\llless\lll +\DeclareFlexSymbol{\ggg} {Rel}{MSA}{6F} + \let\gggtr\ggg +\DeclareFlexSymbol{\circledS} {Ord}{MSA}{73} +\DeclareFlexSymbol{\pitchfork} {Rel}{MSA}{74} +\DeclareFlexSymbol{\dotplus} {Bin}{MSA}{75} +\DeclareFlexSymbol{\backsim} {Rel}{MSA}{76} +\DeclareFlexSymbol{\backsimeq} {Rel}{MSA}{77} +\DeclareFlexSymbol{\complement} {Ord}{MSA}{7B} +\DeclareFlexSymbol{\intercal} {Bin}{MSA}{7C} +\DeclareFlexSymbol{\circledcirc} {Bin}{MSA}{7D} +\DeclareFlexSymbol{\circledast} {Bin}{MSA}{7E} +\DeclareFlexSymbol{\circleddash} {Bin}{MSA}{7F} +\DeclareFlexSymbol{\lvertneqq} {Rel}{MSB}{00} +\DeclareFlexSymbol{\gvertneqq} {Rel}{MSB}{01} +\DeclareFlexSymbol{\nleq} {Rel}{MSB}{02} +\DeclareFlexSymbol{\ngeq} {Rel}{MSB}{03} +\DeclareFlexSymbol{\nless} {Rel}{MSB}{04} +\DeclareFlexSymbol{\ngtr} {Rel}{MSB}{05} +\DeclareFlexSymbol{\nprec} {Rel}{MSB}{06} +\DeclareFlexSymbol{\nsucc} {Rel}{MSB}{07} +\DeclareFlexSymbol{\lneqq} {Rel}{MSB}{08} +\DeclareFlexSymbol{\gneqq} {Rel}{MSB}{09} +\DeclareFlexSymbol{\nleqslant} {Rel}{MSB}{0A} +\DeclareFlexSymbol{\ngeqslant} {Rel}{MSB}{0B} +\DeclareFlexSymbol{\lneq} {Rel}{MSB}{0C} +\DeclareFlexSymbol{\gneq} {Rel}{MSB}{0D} +\DeclareFlexSymbol{\npreceq} {Rel}{MSB}{0E} +\DeclareFlexSymbol{\nsucceq} {Rel}{MSB}{0F} +\DeclareFlexSymbol{\precnsim} {Rel}{MSB}{10} +\DeclareFlexSymbol{\succnsim} {Rel}{MSB}{11} +\DeclareFlexSymbol{\lnsim} {Rel}{MSB}{12} +\DeclareFlexSymbol{\gnsim} {Rel}{MSB}{13} +\DeclareFlexSymbol{\nleqq} {Rel}{MSB}{14} +\DeclareFlexSymbol{\ngeqq} {Rel}{MSB}{15} +\DeclareFlexSymbol{\precneqq} {Rel}{MSB}{16} +\DeclareFlexSymbol{\succneqq} {Rel}{MSB}{17} +\DeclareFlexSymbol{\precnapprox} {Rel}{MSB}{18} +\DeclareFlexSymbol{\succnapprox} {Rel}{MSB}{19} +\DeclareFlexSymbol{\lnapprox} {Rel}{MSB}{1A} +\DeclareFlexSymbol{\gnapprox} {Rel}{MSB}{1B} +\DeclareFlexSymbol{\nsim} {Rel}{MSB}{1C} +\DeclareFlexSymbol{\ncong} {Rel}{MSB}{1D} +\DeclareFlexSymbol{\diagup} {Ord}{MSB}{1E} +\DeclareFlexSymbol{\diagdown} {Ord}{MSB}{1F} +\DeclareFlexSymbol{\varsubsetneq} {Rel}{MSB}{20} +\DeclareFlexSymbol{\varsupsetneq} {Rel}{MSB}{21} +\DeclareFlexSymbol{\nsubseteqq} {Rel}{MSB}{22} +\DeclareFlexSymbol{\nsupseteqq} {Rel}{MSB}{23} +\DeclareFlexSymbol{\subsetneqq} {Rel}{MSB}{24} +\DeclareFlexSymbol{\supsetneqq} {Rel}{MSB}{25} +\DeclareFlexSymbol{\varsubsetneqq} {Rel}{MSB}{26} +\DeclareFlexSymbol{\varsupsetneqq} {Rel}{MSB}{27} +\DeclareFlexSymbol{\subsetneq} {Rel}{MSB}{28} +\DeclareFlexSymbol{\supsetneq} {Rel}{MSB}{29} +\DeclareFlexSymbol{\nsubseteq} {Rel}{MSB}{2A} +\DeclareFlexSymbol{\nsupseteq} {Rel}{MSB}{2B} +\DeclareFlexSymbol{\nparallel} {Rel}{MSB}{2C} +\DeclareFlexSymbol{\nmid} {Rel}{MSB}{2D} +\DeclareFlexSymbol{\nshortmid} {Rel}{MSB}{2E} +\DeclareFlexSymbol{\nshortparallel} {Rel}{MSB}{2F} +\DeclareFlexSymbol{\nvdash} {Rel}{MSB}{30} +\DeclareFlexSymbol{\nVdash} {Rel}{MSB}{31} +\DeclareFlexSymbol{\nvDash} {Rel}{MSB}{32} +\DeclareFlexSymbol{\nVDash} {Rel}{MSB}{33} +\DeclareFlexSymbol{\ntrianglerighteq}{Rel}{MSB}{34} +\DeclareFlexSymbol{\ntrianglelefteq}{Rel}{MSB}{35} +\DeclareFlexSymbol{\ntriangleleft} {Rel}{MSB}{36} +\DeclareFlexSymbol{\ntriangleright} {Rel}{MSB}{37} +\DeclareFlexSymbol{\nleftarrow} {Rel}{MSB}{38} +\DeclareFlexSymbol{\nrightarrow} {Rel}{MSB}{39} +\DeclareFlexSymbol{\nLeftarrow} {Rel}{MSB}{3A} +\DeclareFlexSymbol{\nRightarrow} {Rel}{MSB}{3B} +\DeclareFlexSymbol{\nLeftrightarrow}{Rel}{MSB}{3C} +\DeclareFlexSymbol{\nleftrightarrow}{Rel}{MSB}{3D} +\DeclareFlexSymbol{\divideontimes} {Bin}{MSB}{3E} +\DeclareFlexSymbol{\varnothing} {Ord}{MSB}{3F} +\DeclareFlexSymbol{\nexists} {Ord}{MSB}{40} +\DeclareFlexSymbol{\Finv} {Ord}{MSB}{60} +\DeclareFlexSymbol{\Game} {Ord}{MSB}{61} +%%\DeclareFlexSymbol{\mho} {Ord}{MSB}{66} +\DeclareFlexSymbol{\eth} {Ord}{MSB}{67} +\DeclareFlexSymbol{\eqsim} {Rel}{MSB}{68} +\DeclareFlexSymbol{\beth} {Ord}{MSB}{69} +\DeclareFlexSymbol{\gimel} {Ord}{MSB}{6A} +\DeclareFlexSymbol{\daleth} {Ord}{MSB}{6B} +\DeclareFlexSymbol{\lessdot} {Bin}{MSB}{6C} +\DeclareFlexSymbol{\gtrdot} {Bin}{MSB}{6D} +\DeclareFlexSymbol{\ltimes} {Bin}{MSB}{6E} +\DeclareFlexSymbol{\rtimes} {Bin}{MSB}{6F} +\DeclareFlexSymbol{\shortmid} {Rel}{MSB}{70} +\DeclareFlexSymbol{\shortparallel} {Rel}{MSB}{71} +\DeclareFlexSymbol{\smallsetminus} {Bin}{MSB}{72} +\DeclareFlexSymbol{\thicksim} {Rel}{MSB}{73} +\DeclareFlexSymbol{\thickapprox} {Rel}{MSB}{74} +\DeclareFlexSymbol{\approxeq} {Rel}{MSB}{75} +\DeclareFlexSymbol{\succapprox} {Rel}{MSB}{76} +\DeclareFlexSymbol{\precapprox} {Rel}{MSB}{77} +\DeclareFlexSymbol{\curvearrowleft} {Rel}{MSB}{78} +\DeclareFlexSymbol{\curvearrowright}{Rel}{MSB}{79} +\DeclareFlexSymbol{\digamma} {Ord}{MSB}{7A} +\DeclareFlexSymbol{\varkappa} {Ord}{MSB}{7B} +\DeclareFlexSymbol{\Bbbk} {Ord}{MSB}{7C} +\DeclareFlexSymbol{\hslash} {Ord}{MSB}{7D} +%%\DeclareFlexSymbol{\hbar} {Ord}{MSB}{7E} +\DeclareFlexSymbol{\backepsilon} {Rel}{MSB}{7F} +\endinput +%% +%% End of file `msabm.sym'. diff --git a/Master/texmf-dist/source/latex/mh/breqn.dtx b/Master/texmf-dist/source/latex/mh/breqn.dtx new file mode 100644 index 00000000000..81d0fc39d7a --- /dev/null +++ b/Master/texmf-dist/source/latex/mh/breqn.dtx @@ -0,0 +1,6648 @@ +% \iffalse meta-comment +% +% Copyright (C) 1997-2003 by Michael J. Downes +% Copyright (C) 2007 by Morten Hoegholm +% +% 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 breqn.dtx +% and the derived files +% breqn.sty, breqn.pdf, breqn.ins, breqn.drv. +% +% Distribution: +% CTAN:macros/latex/contrib/mh/breqn.dtx +% CTAN:macros/latex/contrib/mh/breqn.pdf +% +% Unpacking: +% (a) If breqn.ins is present: +% tex breqn.ins +% (b) Without breqn.ins: +% tex breqn.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{breqn.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If breqn.drv is present: +% latex breqn.drv +% (b) Without breqn.drv: +% latex breqn.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex breqn.dtx +% makeindex -s gind.ist breqn.idx +% pdflatex breqn.dtx +% makeindex -s gind.ist breqn.idx +% pdflatex breqn.dtx +% +% Installation: +% TDS:tex/latex/mh/breqn.sty +% TDS:doc/latex/mh/breqn.pdf +% TDS:source/latex/mh/breqn.dtx +% +%<*ignore> +\begingroup + \def\x{LaTeX2e} +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +% +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: breqn 2007/12/10 v0.96 Breqn (MH)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\preamble + +This is a generated file. + +Copyright (C) 1997-2003 by Michael J. Downes +Copyright (C) 2007 by Morten Hoegholm + +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 breqn.dtx +and the derived files + breqn.sty, breqn.pdf, breqn.ins, breqn.drv. + +\endpreamble + +\generate{% + \file{breqn.ins}{\from{breqn.dtx}{install}}% + \file{breqn.drv}{\from{breqn.dtx}{driver}}% + \usedir{tex/latex/mh}% + \file{breqn.sty}{\from{breqn.dtx}{package}}% +} + +\obeyspaces +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* breqn.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `breqn.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +% +%<*ignore> +\fi +% +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{breqn.drv}% + [2007/12/10 v0.96 breqn (MH)] +\documentclass{ltxdoc} + +\usepackage{color,verbatim,xspace,varioref,listings} + +\definecolor{hilite}{rgb}{0.2,0.4,0.7} +\def\theCodelineNo{\textcolor{hilite}{\sffamily\tiny\arabic{CodelineNo}}} + +\lstloadlanguages{[AlLaTeX]TeX} + +\lstnewenvironment{literalcode} + {\lstset{gobble=2,columns=fullflexible,basicstyle=\color{hilite}\ttfamily}} + {} +\makeatletter + +{\catcode`\%=12 + \long\gdef\@gobble@percent@space#1{\ifx + #1%\expandafter\@gobble\else\expandafter#1\fi}} + + +\AtBeginDocument{\def\verbatim@processline{\expandafter\check@percent + \the\verbatim@line\par}} +\newwrite\tmp@out +\newcounter{xio} +\newenvironment{xio}{% example input and output + \par\addvspace\bigskipamount + \hbox{\itshape + \refstepcounter{xio}\kern-\p@ Example \thexio}\@nobreaktrue + \immediate\openout\tmp@out\jobname.tmp \relax + \begingroup + \let\do\@makeother\dospecials\catcode`\^^M\active + \def\verbatim@processline{ + \immediate\write\tmp@out{\expandafter\@gobble@percent@space + \the\verbatim@line}}% + \verbatim@start +}{% + \immediate\closeout\tmp@out + \@verbatim\frenchspacing\@vobeyspaces + \@@input \jobname.tmp \relax + \endgroup + \par\medskip + \noindent\ignorespaces + \@@input \jobname.tmp \relax + \par\medskip +} + + + + +\providecommand*\pkg[1]{\textsf{#1}} +\providecommand*\cls[1]{\textsf{#1}} +\providecommand*\opt[1]{\texttt{#1}} +\providecommand*\env[1]{\texttt{#1}} +\providecommand*\fn[1]{\texttt{#1}} + + +\providecommand*\cn[1]{\cs{#1}} +\providecommand*\csarg[1]{\texttt{\char`\{#1\char`\}}} + +\providecommand*\tex{\TeX\xspace} +\providecommand*\latex{\LaTeX\xspace} +\providecommand*\dbldollars{\texttt{\detokenize{$$}}}%$$ +\providecommand*\arg{} +\edef\arg{\expandafter\@gobble\string\#} + +\newenvironment{aside}{\begin{quote}\bfseries}{\end{quote}} +\newenvironment{dn}{\begin{quote}\bfseries}{\end{quote}} + +\newcommand\dash{\textemdash} +\newcommand\dbslash[1]{\texttt{\string\\}} +\newcommand\thepkg{the \pkg{breqn} package\xspace} + +\providecommand*\texbook{\textsl{The \protect\TeX{}book}\xspace} + +\providecommand*\dotsc{\ldots} +\providecommand*\eqref[1]{(\ref{#1})} + +\providecommand*\qq[1]{\textquotedblleft#1\textquotedblright} +\providecommand*\quoted[1]{\textquoteleft#1\textquoteright} +\providecommand*\dquoted[1]{\textquotedblleft#1\textquotedblright} + +\providecommand*\ie{i.e.,\xspace} +\providecommand*\eg{e.g.,\xspace} +\providecommand*\etc{etc.\xspace} +\providecommand*\cf{cf.\xspace} + +\providecommand*\ndash{\unskip\textendash\ignorespaces} +\providecommand*\mdash{\unskip\textemdash\ignorespaces} + +\makeatother + +\usepackage{breqn} + +\begin{document} + \DocInput{breqn.dtx} +\end{document} +% +% \fi +% +% \title{The \pkg{breqn} package} +% \date{2007/12/10 v0.96} +% \author{Morten H\o gholm \\\texttt{mh.ctan@gmail.com}} +% +% \maketitle +% \begin{abstract} +% The \pkg{breqn} package facilitates automatic line-breaking of +% displayed math expressions. +% \end{abstract} +% +% \part*{User's guide} +% +% \section{A bit of history} +% +% Originally \pkg{breqn}, \pkg{flexisym}, and \pkg{mathstyle} were +% created by Michael J.~Downes from the American Mathematical Society +% during the 1990's up to late 2002. Sadly---and much to the shock of +% the \TeX\ world---Michael passed away in early 2003 at the age of +% only~44. +% +% The American Mathematical Society has kindly allowed me to assume +% maintainership of this part of his work and I wish to express my +% gratitude to them and to Barbara Beeton in particular for providing +% me with the files I needed. +% +% I hope to continue Michael's work, thereby allowing users to create +% more \emph{masterpieces of the publishing art} as I think he would +% have wanted. +% +% +% +% \section{Package loading} +% +% +% The recommended way of loading the \pkg{breqn} package is to load it +% \emph{after} other packages dealing with math, \ie, after +% \pkg{amsmath}, \pkg{amssymb}, or packages such as \pkg{mathpazo} or +% \pkg{mathptmx}. +% +% The \pkg{flexisym} package (described in section \vref{flexisym}) is +% required by \pkg{breqn} and ensures the math symbols are set up +% correctly. By default \pkg{breqn} loads it with support for Computer +% Modern but if you use a different math package requiring slightly +% different definitions, it must be loaded before \pkg{breqn}. Below +% is an example of how you enable \pkg{breqn} to work with the widely +% used \pkg{mathpazo} package. +% \begin{verbatim} +%\usepackage{mathpazo} +%\usepackage[mathpazo]{flexisym} +%\usepackage{breqn} +% \end{verbatim} +% Currently, the packages \pkg{mathpazo} and \pkg{mathptmx} are +% supported. Despair not: Chances are that the package will work using +% the default settings. If you find that a particular math font +% package doesn't work then please see implementation in +% \fn{flexisym.dtx} for how to create a support file---it is easier +% than one might think. Contributions welcome. +% +% The documentation for the package was formerly found in +% \fn{breqndoc}. It has now been added to this implementation +% file. Below follows the contents of the original \pkg{breqn} +% documentation. Not all details hold anymore but I have prioritized +% fixing the package. +% +% \section{To do} +% +% \begin{itemize} +% \item Handling of QED +% \item Space between \verb'\end{dmath}' and following punctuation will +% prevent the punctuation from being drawn into the equation. +% \item Overriding the equation layout +% \item Overriding the placement of the equation number +% \item \qq{alignid} option for more widely separated equations where +% shared alignment is desired (requires two passes) +% \item Or maybe provide an \qq{alignwidths} option where you give +% lhs/rhs width in terms of ems? And get feedback later on discrepancies +% with the actual measured contents? +% \item \cs{intertext} not needed within dgroup! But currently there are +% limitations on floating objects within dgroup. +% \item \verb'align={1}' or 2, 3, 4 expressing various levels of demand +% for group-wide alignment. Level 4 means force alignment even if some +% lines then have to run over the right margin! Level 1, the default, +% means first break LHS-RHS equations as if it occurred by itself, then +% move them left or right within the current line width to align them if +% possible. Levels 2 and 3 mean try harder to align but give up if +% overfull lines result. +% \item Need an \cs{hshift} command to help with alignment of +% lines broken at a discretionary times sign. Also useful for adjusting +% inside-delimiter breaks. +% \end{itemize} +% +% \section{Introduction} +% +% The \pkg{breqn} package for \LaTeX\ provides solutions to a number of +% common difficulties in writing displayed equations and getting +% high-quality output. For example, it is a well-known inconvenience that +% if an equation must be broken into more than one line, \cs{left} \dots\ +% \cs{right} constructs cannot span lines. The \pkg{breqn} package makes +% them work as one would expect whether or not there is an intervening +% line break. +% +% The single most ambitious goal of the \pkg{breqn} package, however, is +% to support automatic linebreaking of displayed equations. Such +% linebreaking cannot be done without substantial changes under the hood +% in the way math formulas are processed. For this reason, especially in +% the alpha release, users should proceed with care and keep an eye out +% for unexpected glitches or side effects. +% +% \section{Principal features} +% The principal features of the \pkg{breqn} package are: +% \begin{description} +% +% \item[semantically oriented structure] The way in which compound +% displayed formulas are subdivided matches the logical structure more +% closely than, say, the standard \env{eqnarray} environment. Separate +% equations in a group of equations are written as separate environments +% instead of being bounded merely by \dbslash/ commands. Among other +% things, this clears up a common problem of wrong math symbol spacing at +% the beginning of continuation lines. It also makes it possible to +% specify different vertical space values for the space between lines of a +% long, broken equation and the space between separate equations in a +% group of equations. +% +% \item[automatic line breaking] Overlong equations will be broken +% automatically to the prevailing column width, and continuation lines +% will be indented following standard conventions. +% +% \item[line breaks within delimiters] Line breaks within \cs{left} \dots\ +% \cs{right} delimiters work in a natural way. Line breaks can be +% forbidden below a given depth of delimiter nesting through a package +% option. +% +% \item[mixed math and text] Display equations that contain mixed +% math and text, or even text only, are handled naturally by means of a +% \env{dseries} environment that starts out in text mode instead of math +% mode. +% +% \item[ending punctuation] The punctuation at the end of a displayed +% equation can be handled in a natural way that makes it easier to promote +% or demote formulas from\slash to inline math, and to apply special +% effects such as adding space before the punctuation. +% +% \item[flexible numbering] Equation numbering is handled in a natural +% way, with all the flexibility of the \pkg{amsmath} package and with no +% need for a special \cs{nonumber} command. +% +% \item[special effects] It is easy to apply special effects to individual +% displays, e.g., changing the type size or adding a frame. +% +% \item[using available space] Horizontal shrink is made use of +% whenever feasible. With most other equation macros it is frozen when it +% occurs between \cs{left} \dots\ \cs{right} delimiters, or in any sort of +% multiline structure, so that some expressions require two lines that would +% otherwise fit on one. +% +% \item[high-quality spacing] The \cs{abovedisplayshortskip} is used when +% applicable (other equation macros fail to apply it in equations of more +% than one line). +% +% \item[abbreviations] Unlike the \pkg{amsmath} equation environments, the +% \pkg{breqn} environments can be called through user-defined abbreviations +% such as \cs{beq} \dots\ \cs{eeq}. +% +% \end{description} +% +% \section{Shortcomings of the package} +% The principal known deficiencies of the \pkg{breqn} package are: +% +% \subsection{Incompatibilities} As it pushes the envelope +% of what is possible within the context of \LaTeXe, \thepkg will tend +% to break other packages when used in combination with them, or to fail +% itself, when there are any areas of internal overlap; successful use may +% in some cases depend on package loading order. +% +% +% +% \subsection{Indention of delimited fragments} When line breaks within +% delimiters are involved, the automatic indention of continuation lines +% is likely to be unsatisfactory and need manual adjustment. I don't see +% any easy way to provide a general solution for this, though I have some +% ideas on how to attain partial improvements. +% +% \subsection{Math symbol subversion} +% In order for automatic line breaking to work, the operation of all the +% math symbols of class 2, 3, 4, and 5 must be altered (relations, binary +% operators, opening delimiters, closing delimiters). This is done by an +% auxiliary package \pkg{flexisym}. As long as you stick to the advertised +% \LaTeX\ interface for defining math symbols (\cs{DeclareMathSymbol}), +% things should work OK most of the time. Any more complex math symbol +% setup is quite likely to quarrel with the \pkg{flexisym} package. +% See Section~\ref{flexisym} for further information. +% +% \subsection{Subscripts and superscripts} +% +% Because of the changes to math symbols of class 2--5, writing certain +% combinations such as \verb'^+' or \verb'_\pm' or \verb'^\geq' without +% braces would lead to error messages; (The problem described here +% already exists in standard \LaTeX\ to a lesser extent, as you may know +% if you ever tried \verb'^\neq' or \verb'^\cong'; and indeed there are +% no examples in the \LaTeX\ book to indicate any sanction for omitting +% braces around a subscript or superscript.) +% +% The \pkg{flexisym} package therefore calls, as of version 0.92, another +% package called \pkg{mathstyle} which turns \verb'^' and \verb'_' into +% active characters. This is something that I believe is desirable in any +% case, in the long run, because having a proper mathstyle variable +% eliminates some enormous burdens that affect almost any +% nontrivial math macros, as well as many other things where the +% connection is not immediately obvious, e.g., the \LaTeX\ facilities for +% loading fonts on demand. +% +% Not that this doesn't introduce new and interesting problems of its +% own---for example, you don't want to put usepackage statements +% after flexisym for any package that refers to, e.g., \verb'^^J' or +% \verb'^^M' +% internally (too bad that the \LaTeX\ package loading code does not +% include automatic defenses to ensure normal catcodes in the interior of +% a package; but it only handles the \verb'@' character). +% +% But I took a random AMS journal article, with normal end-user kind of +% \LaTeX\ writing, did some straightforward substitutions to change all +% the equations into dmath environments, and ran it with active math +% sub/sup: everything worked OK. This suggests to me that it can work in +% the real world, without an impossible amount of compatibility work. +% +% \section{Incomplete} +% In addition, in the \textbf{alpha release [1997/10/30]} the following +% gaps remain to be filled in: +% \begin{description} +% \item[documentation] +% The documentation could use amplification, especially more +% illustrations, and I have undoubtedly overlooked more than a few errors. +% +% \item[group alignment] The algorithm for doing alignment +% of mathrel symbols across equations in a \env{dgroup} environment +% needs work. Currently the standard and \opt{noalign} alternatives +% produce the same output. +% +% \item[single group number] When a \env{dgroup} has a group number and +% the individual equations are unnumbered, the handling and placement of +% the group number aren't right. +% +% \item[group frame] Framing a group doesn't work, you might be able to +% get frames on the individual equations at best. +% +% \item[group brace] The \opt{brace} option for \env{dgroup} is intended +% to produce a large brace encompassing the whole group. This hasn't been +% implemented yet. +% +% \item[darray environment] The \env{darray} environment is unfinished. +% +% \item[dseries environment] The syntax and usage for the \env{dseries} +% environment are in doubt and may change. +% +% \item[failure arrangements] When none of the line-breaking passes for a +% \env{dmath} environment succeeds\dash i.e., at least one line is +% overfull\dash the final arrangement is usually rather poor. A better +% fall-back arrangement in the failure case is needed. +% +% \end{description} +% +% \section{Package options} +% +% Many of the package options for \thepkg are the same as options of the +% \env{dmath} or \env{dgroup} environments, and some of them require an +% argument, which is something that cannot be done through the normal +% package option mechanism. Therefore most of the \pkg{breqn} package +% options are designed to be set with a \cs{setkeys} command after the +% package is loaded. For example, to load the package and set the +% maximum delimiter nesting depth for line breaks to~1: +% \begin{verbatim} +% \usepackage{breqn} +% \setkeys{breqn}{breakdepth={1}} +% \end{verbatim} +% +% See the discussion of environment options, Section~\ref{envopts}, for +% more information. +% +% One package option that may be of interest to \TeX nicians is the +% \opt{debug} option; this activates some debugging statements embedded in +% the code of the alpha release which trace measuring activities related +% to line breaking. +% +% \section{Environments and commands} +% \subsection{Environments} +% All of the following environments take an optional argument for +% applying local effects such as changing the typesize or adding a +% frame to an individual equation. +% +% \begin{description} +% \item[\env{dmath}] Like \env{equation} but supports line breaking and variant +% numbers. +% +% \item[\env{dmath*}] Unnumbered; like \env{displaymath} but supports line +% breaking +% +% \item[\env{dseries}] Like \env{equation} but starts out in text mode; +% intended for series of mathematical expressions of the form `A, B, and +% C'. As a special feature, if you use +% \begin{verbatim} +% \begin{math} ... \end{math} +% \end{verbatim} +% for each expression in the series, a suitable amount of inter-expression +% space will be automatically added. This is a small step in the direction of +% facilitating conversion of display math to inline math, and vice versa: If +% you write a display as +% \begin{verbatim} +% \begin{dseries} +% \begin{math}A\end{math}, +% \begin{math}B\end{math}, +% and +% \begin{math}C\end{math}. +% \end{dseries} +% \end{verbatim} +% then conversion to inline form is simply a matter of removing the +% \verb'\begin{dseries}' and \verb'\end{dseries}' lines; the contents of the +% display need no alterations. +% +% It would be nice to provide the same feature for \verb'$' notation but +% there is no easy way to do that because the \verb'$' function has no +% entry point to allow changing what happens before math mode is entered. +% Making it work would therefore require turning \verb'$' into an active +% character, something that I hesitate to do in a \LaTeXe\ context. +% +% \item[\env{dseries*}] Unnumbered variant of \env{dseries} +% +% \item[\env{dgroup}] Like the \env{align} environment of \pkg{amsmath}, +% but with each constituent equation wrapped in a \env{dmath}, +% \env{dmath*}, \env{dseries}, or \env{dseries*} environment instead of being +% separated by \dbslash/. The equations are numbered with a group number. +% When the constituent environments are the numbered forms (\env{dmath} or +% \env{dseries}) they automatically switch to `subequations'-style +% numbering, i.e., something like (3a), (3b), (3c), \dots, depending on +% the current form of non-grouped equation numbers. See also +% \env{dgroup*}. +% +% \item[\env{dgroup*}] Unnumbered variant of \env{dgroup}. If the +% constituent environments are the numbered forms, they get normal +% individual equation numbers, i.e., something like (3), (4), (5), \dots~. +% +% \item[\env{darray}] Similar to \env{eqnarray} but with an argument like +% \env{array} for giving column specs. Automatic line breaking is not +% done here. +% +% \item[\env{darray*}] Unnumbered variant of \env{darray}, rather like +% \env{array} except in using \cs{displaystyle} for all column +% entries. +% +% \item[\env{dsuspend}] Suspend the current display in order to print +% some text, without loss of the alignment. There is also a command +% form of the same thing, \cs{intertext}. +% \end{description} +% +% \subsection{Commands} +% +% The commands provided by \thepkg are: +% \begin{description} +% \item[\cs{condition}] This command is used for +% a part of a display which functions as a condition on the main +% assertion. For example: +% \begin{verbatim} +% \begin{dmath} +% f(x)=\frac{1}{x} \condition{for $x\neq 0$} +% \end{dmath}. +% \end{verbatim} +% \begin{dmath} +% f(x)=\frac{1}{x} \condition{for $x\neq 0$} +% \end{dmath}. +% The \cs{condition} command automatically switches to text mode (so that +% interword spaces function the way they should), puts in a comma, and +% adds an appropriate amount of space. To facilitate promotion\slash +% demotion of formulas, \cs{condition} \qq{does the right thing} if used +% outside of display math. +% +% To substitute a different punctuation mark instead of the default comma, +% supply it as an optional argument for the \cs{condition} command: +% \begin{verbatim} +% \condition[;]{...} +% \end{verbatim} +% (Thus, to get no punctuation: \verb'\condition[]{...}'.) +% +% For conditions that contain no text, you can use the starred form of the +% command, which means to stay in math mode: +% \begin{verbatim} +% \begin{dmath} +% f(x)=\frac{1}{x} \condition*{x\neq 0} +% \end{dmath}. +% +% If your material contains a lot of conditions like these, you might like +% to define shorter abbreviations, e.g., +% \begin{verbatim} +% \newcommand{\mc}{\condition*}% math condition +% \newcommand{\tc}{\condition}% text condition +% \end{verbatim} +% But \thepkg refrains from predefining such abbreviations in order that +% they may be left to the individual author's taste. +% +% \item[\cs{hiderel}] In a compound equation it is sometimes desired to +% use a later relation symbol as the alignment point, rather than the +% first one. To do this, mark all the relation symbols up to the desired +% one with \cs{hiderel}: +% \begin{verbatim} +% T(n) \hiderel{\leq} T(2^n) \leq c(3^n - 2^n) ... +% \end{verbatim} +% \end{description} +% +% \section{Various environment options}\label{envopts} +% +% The following options are recognized for the \env{dmath}, \env{dgroup}, +% \env{darray}, and \env{dseries} environments; some of the options do not +% make sense for all of the environments, but if an option is used where +% not applicable it is silently ignored rather than treated as an error. +% +% \begin{verbatim} +% \begin{dmath}[style={\small}] +% \begin{dmath}[number={BV}] +% \begin{dmath}[label={xyz}] +% \begin{dmath}[relindent={1em}] +% \begin{dmath}[compact] +% \begin{dmath}[spread={1pt}] +% \begin{dmath}[frame] +% \begin{dmath}[frame={1pt},framesep={2pt}] +% \begin{dmath}[background={red}] +% \begin{dmath}[color={purple}] +% \begin{dmath}[breakdepth={0}] +% \end{verbatim} +% +% Use the \opt{style} option to change the type size of an individual +% equation. This option can also serve as a catch-all option for +% altering the equation style in other ways; the contents are simply +% executed directly within the context of the equation. +% +% Use the \opt{number} option if you want the number for a particular +% equation to fall outside of the usual sequence. If this option is used +% the equation counter is not incremented. If for some reason you need to +% increment the counter and change the number at the same time, use the +% \opt{style} option in addition to the \opt{number} option: +% \begin{verbatim} +% style={\refstepcounter{equation}} +% \end{verbatim} +% +% Use of the normal \cs{label} command instead of the \opt{label} option +% works, I think, most of the time (untested). +% +% Use the \opt{relindent} option to specify something other than the +% default amount for the indention of relation symbols. The default is +% 2em. +% +% Use the \opt{compact} option in compound equations to inhibit line +% breaks at relation symbols. By default a line break will be taken before +% each relation symbol except the first one. With the \opt{compact} option +% \LaTeX\ will try to fit as much material as possible on each line, but +% breaks at relation symbols will still be preferred over breaks at binary +% operator symbols. +% +% Use the \opt{spread} option to increase (or decrease) the amount of +% interline space in an equation. See the example given above. +% +% Use the \opt{frame} option to produce a frame around the body of the +% equation. The thickness of the frame can optionally be specified by +% giving it as an argument of the option. The default thickness is +% \cs{fboxrule}. +% +% Use the \opt{framesep} option to change the amount of space separating +% the frame from what it encloses. The default space is \cs{fboxsep}. +% +% Use the \opt{background} option to produce a colored background for the +% equation body. The \pkg{breqn} package doesn't automatically load the +% \pkg{color} package, so this option won't work unless you remember +% to load the \pkg{color} package yourself. +% +% Use the \opt{color} option to specify a different color for the contents +% of the equation. Like the \opt{background} option, this doesn't work if +% you forgot to load the \pkg{color} package. +% +% Use the \opt{breakdepth} option to change the level of delimiter nesting +% to which line breaks are allowed. To prohibit line breaks within +% delimiters, set this to 0: +% \begin{verbatim} +% \begin{dmath}[breakdepth={0}] +% \end{verbatim} +% The default value for breakdepth is 2. Even when breaks are allowed +% inside delimiters, they are marked as less desirable than breaks outside +% delimiters. Most of the time a break will not be taken within delimiters +% until the alternatives have been exhausted. +% +% Options for the \env{dgroup} environment: all of the above, and also +% \begin{verbatim} +% \begin{dgroup}[noalign] +% \begin{dgroup}[brace] +% \end{verbatim} +% +% By default the equations in a \env{dgroup} are mutually aligned on their +% relation symbols ($=$, $<$, $\geq$, and the like). With the +% \opt{noalign} option each equation is placed individually without +% reference to the others. +% +% The \opt{brace} option means to place a large brace encompassing the +% whole group on the same side as the equation number. +% +% Options for the \env{darray} environment: all of the above (where +% sensible), and also +% \begin{verbatim} +% \begin{darray}[cols={lcr@{\hspace{2em}}lcr}] +% \end{verbatim} +% The value of the \opt{cols} option for the darray environment should be +% a series of column specs as for the \env{array} environment, with the +% following differences: +% \begin{itemize} +% \item For l, c, and r what you get is not text, but math, and +% displaystyle math at that. To get text you must use a 'p' column +% specifier, or put an \cs{mbox} in each of the individual cells. +% +% \item Vertical rules don't connect across lines. +% \end{itemize} +% +% \section{The \pkg{flexisym} package}\label{flexisym} +% +% The \pkg{flexisym} package does some radical changes in the setup for +% math symbols to allow their definitions to change dynamically throughout +% a document. The \pkg{breqn} package uses this to make symbols of classes +% 2, 3, 4, 5 run special functions inside an environment such as +% \env{dmath} that provide the necessary support for automatic line +% breaking. +% +% The method used to effect these changes is to change the definitions of +% \cs{DeclareMathSymbol} and \cs{DeclareMathDelimiter}, and then +% re-execute the standard set of \LaTeX\ math symbol definitions. +% Consequently, additional mathrel and mathbin symbols defined by other +% packages will get proper line-breaking behavior if the other package is +% loaded after the \pkg{flexisym} package and the symbols are defined +% through the standard interface. +% +% +% +% \section{Caution! Warning!} +% Things to keep in mind when writing documents with \thepkg: +% \begin{itemize} +% +% \item The notation $:=$ must be written with the command \cs{coloneq}. +% Otherwise the $:$ and the $=$ will be treated as two separate relation +% symbols with an \qq{empty RHS} between them, and they will be printed +% on separate lines. +% +% \item Watch out for constructions like \verb'^+' where a single binary +% operator or binary relation symbol is subscripted or superscripted. When +% the \pkg{breqn} or \pkg{flexisym} package is used, braces are mandatory +% in such constructions: \verb'^{+}'. This applies for both display and +% in-line math. +% +% \item If you want \LaTeX\ to make intelligent decisions about line +% breaks when vert bars are involved, use proper pairing versions of the +% vert-bar symbols according to context: \verb'\lvert n\rvert' instead of +% \verb'|n|'. With the nondirectional \verb'|' there is no way for \LaTeX\ +% to reliably deduce which potential breakpoints are inside delimiters +% (more highly discouraged) and which are not. +% +% \item If you use the \pkg{german} package or some other package that +% turns double quote \verb'"' into a special character, you may encounter +% some problems with named math symbols of type mathbin, mathrel, +% mathopen, or mathclose in moving arguments. For example, \cs{leq} in a +% section title will be written to the \fn{.aux} file as something like +% \verb'\mathchar "3214'. This situation probably ought to be improved, +% but for now use \cs{protect}. +% +% \item Watch out for the \texttt{[} character at the beginning of a +% \env{dmath} or similar environment, if it is supposed to be interpreted +% as mathematical content rather than the start of the environment's +% optional argument. +% +% This is OK: +% \begin{verbatim} +% \begin{dmath} +% [\lambda,1]... +% \end{dmath} +% \end{verbatim} +% This will not work as expected: +% \begin{verbatim} +% \begin{dmath}[\lambda,1]...\end{dmath} +% \end{verbatim} +% +% \item Watch out for unpaired delimiter symbols (in display math only): +% \begin{verbatim} +% ( ) [ ] \langle \rangle \{ \} \lvert \rvert ... +% \end{verbatim} +% If an open delimiter is used without a close delimiter, or vice versa, +% it is normally harmless but may adversely affect line breaking. This is only +% for symbols that have a natural left or right directionality. Unpaired +% \cs{vert} and so on are fine. +% +% When a null delimiter is used as the other member of the pair +% (\verb'\left.' or \verb'\right.') this warning doesn't apply. +% +% \item If you inadvertently apply \cs{left} or \cs{right} to something +% that is not a delimiter, the error messages are likely to be a bit +% more confusing than usual. The normal \LaTeX\ response to an error such +% as +% \begin{verbatim} +% \left + +% \end{verbatim} +% is an immediate message +% \begin{verbatim} +% ! Missing delimiter (. inserted). +% \end{verbatim} +% When \thepkg is in use, \LaTeX\ will fail to realize anything is wrong +% until it hits the end of the math formula, or a closing delimiter +% without a matching opening delimiter, and then the first message is an +% apparently pointless +% \begin{verbatim} +% ! Missing \endgroup inserted. +% \end{verbatim} +% +% \end{itemize} +% +% \section{Examples} +% +% \renewcommand\theequation{\thesection.\arabic{equation}} +% % Knuth, SNA p74 +% \begin{xio} +% Replace $j$ by $h-j$ and by $k-j$ in these sums to get [cf.~(26)] +% \begin{dmath}[label={sna74}] +% \frac{1}{6} \left(\sigma(k,h,0) +\frac{3(h-1)}{h}\right) +% +\frac{1}{6} \left(\sigma(h,k,0) +\frac{3(k-1)}{k}\right) +% =\frac{1}{6} \left(\frac{h}{k} +\frac{k}{h} +\frac{1}{hk}\right) +% +\frac{1}{2} -\frac{1}{2h} -\frac{1}{2k}, +% \end{dmath} +% which is equivalent to the desired result. +% \end{xio} +% +% % Knuth, SNA 4.6.2, p387 +% \begin{xio} +% \newcommand\mx[1]{\begin{math}#1\end{math}}% math expression +% % +% Now every column which has no circled entry is completely zero; +% so when $k=6$ and $k=7$ the algorithm outputs two more vectors, +% namely +% \begin{dseries}[frame] +% \mx{v^{[2]} =(0,5,5,0,9,5,1,0)}, +% \mx{v^{[3]} =(0,9,11,9,10,12,0,1)}. +% \end{dseries} +% From the form of the matrix $A$ after $k=5$, it is evident that +% these vectors satisfy the equation $vA =(0,\dotsc,0)$. +% \end{xio} +% +% \begin{xio} +% \begin{dmath*} +% T(n) \hiderel{\leq} T(2^{\lceil\lg n\rceil}) +% \leq c(3^{\lceil\lg n\rceil} +% -2^{\lceil\lg n\rceil}) +% <3c\cdot3^{\lg n} +% =3c\,n^{\lg3} +% \end{dmath*}. +% \end{xio} +% +% \begin{xio} +% The reduced minimal Gr\"obner basis for $I^q_3$ consists of +% \begin{dgroup*} +% \begin{dmath*} +% H_1^3 = x_1 + x_2 + x_3 +% \end{dmath*}, +% \begin{dmath*} +% H_2^2 = x_1^2 + x_1 x_2 + x_2^2 - q_1 - q_2 +% \end{dmath*}, +% \begin{dsuspend} +% and +% \end{dsuspend} +% \begin{dmath*} +% H_3^1 = x_1^3 - 2x_1 q_1 - x_2 q_1 +% \end{dmath*}. +% \end{dgroup*} +% \end{xio} +% +% +% \StopEventually{} +% \part*{Implementation} +% +% +% The package version here is Michael's v0.90 updated by Bruce +% Miller. Michael's changes between v0.90 and his last v0.94 will be +% incorporated where applicable. +% +% +% The original sources of \pkg{breqn} and related files exist in a +% non-dtx format devised by Michael Downes himself. +% Lars Madsen has kindly written a Perl script for transforming the +% original source files into near-perfect dtx state, requiring only +% very little hand tuning. Without his help it would have been nigh +% impossible to incorporate the original sources with Michael's +% comments. A big, big thank you to him. +% +% +% +% \section{Introduction} +% The \pkg{breqn} package provides environments +% \env{dmath}, \env{dseries}, and \env{dgroup} for +% displayed equations with \emph{automatic line breaking}, +% including automatic indention of relation symbols and binary operator +% symbols at the beginning of broken lines. These environments +% automatically pull in following punctuation so that it can be written in +% a natural way. The \pkg{breqn} package also provides a +% \env{darray} environment similar to the \env{array} +% environment but using \cs{displaystyle} for all the array cells and +% providing better interline spacing (because the vertical ruling +% feature of \env{array} is dropped). +% These are all autonumbered environments like \env{equation} +% and have starred forms that don't add a number. For a more +% comprehensive and detailed description of the features and intended +% usage of the \pkg{breqn} package see \fn{breqndoc.tex}. +% +% +% +% +% \section{Strategy} +% Features of particular note are the ability to have +% linebreaks even within a \cs{left} \ndash \cs{right} pair of +% delimiters, and the automatic alignment on relations and binary +% operators of a split equation. To make \env{dmath} handle +% all this, we begin by setting the body of the equation in a special +% paragraph form with strategic line breaks whose purpose is not to +% produce line breaks in the final printed output but rather to mark +% significant points in the equation and give us entry points for +% unpacking \cn{left} \ndash \cn{right} boxes. +% After the initial typesetting, we take the resulting stack of line +% fragments and, working backward, splice them into a new, single-line +% paragraph; this will eventually be poured into a custom parshape, after +% we do some measuring to calculate what that parshape should be. +% This streamlined horizontal list may contain embedded material +% from user commands intended to alter line breaks, horizontal alignment, +% and interline spacing; such material requires special handling. +% +% To make the `shortskip' possibility work even for +% multiline equations, we must plug in a dummy \tex display to give us +% the value of \cs{predisplaysize}, and calculate for ourselves when +% to apply the short skips. +% +% In order to measure the equation body and do various +% enervating calculations on whether the equation number will fit and so +% on, we have to set it in a box. Among other things, this means +% that we can't unhbox it inside \dbldollars \dots \dbldollars , or +% even \verb"$" \dots \verb"$": \tex doesn't allow you to +% \cs{unhbox} in math mode. But we do want to unhbox it rather +% than just call \cs{box}, otherwise we can't take advantage of +% available shrink from \cs{medmuskip} to make equations shrink to +% fit in the available width. So even for simple one-line equations +% we are forced to fake a whole display without going through \tex 's +% primitive display mechanism (except for using it to get +% \cs{predisplaysize} as mentioned above). +% +% +% In the case of a framed equation body, the current implementation is +% to set the frame in a separate box, of width zero and height zero, +% pinned to the upper left corner of the equation body, and then print the +% equation body on top of it. +% For attaching an equation number it would be much simpler to wrap +% the equation body in the frame and from then on treat the body as a +% single box instead of multiple line boxes. +% But I had a notion that it might be possible some day to support +% vertical stretching of the frame. +% +% +% +% +% \section{Prelim} +% +% This package doesn't work with \latex 2.09, nor with other +% versions of \latex earlier than 1994/12/01. +% \begin{macrocode} +%<*package> +\NeedsTeXFormat{LaTeX2e} +% \end{macrocode} +% +% Declare package name and date. +% \begin{macrocode} +\ProvidesPackage{breqn}[2007/12/10 v0.96] +% \end{macrocode} +% +% +% \section{Package options} +% +% Most options are set with the \cs{options} command (which +% calls \cs{setkeys}) because the standard package option +% mechanism doesn't provide support for key-value syntax. +% Cf \fn{breqndoc.tex}. +% +% It seems easier to turn off debugging than turn it on so the +% implementation of the \opt{debug} option is sort of backward. +% \begin{macrocode} +\edef\breqnpopcats{% + \catcode\number`\"=\number\catcode`\" + \relax} +\AtEndOfPackage{\breqnpopcats}% +\catcode`\^=7 \catcode`\_=8 \catcode`\"=12 \relax +\DeclareOption{debug}{\errorcontextlines=2000\relax} +\DeclareOption{mathstyleoff}{% + \PassOptionsToPackage{mathstyleoff}{flexisym}% +} +% \end{macrocode} +% Process options. +% \begin{macrocode} +\ProcessOptions\relax +% \end{macrocode} +% +% +% +% +% \section{Required packages} +% The \pkg{flexisym} package makes it possible to attach +% extra actions to math symbols, in particular mathbin, mathrel, mathopen, +% and mathclose symbols. +% Normally it would suffice to call \cs{RequirePackage} without +% any extra testing, but the nature of the package is such that it is +% likely to be called earlier with different (no) options. +% Then is it really helpful to be always warning the user about +% \quoted{Incompatible Package Options!}? +% I don't think so. +% \begin{macrocode} +\@ifpackageloaded{flexisym}{}{% + \RequirePackage[cmbase]{flexisym}[2007/12/10] + \edef\breqnpopcats{\breqnpopcats + \catcode\number`\^=\number\catcode`\^ + \catcode\number`\_=\number\catcode`\_ + }% + \catcode`\^=7 \catcode`\_=8 \catcode`\"=12 \relax +} +% \end{macrocode} +% The \pkg{keyval} package for handling equation options and +% \pkg{calc} to ease writing computations. +% \begin{macrocode} +\RequirePackage{keyval,calc}\relax +% \end{macrocode} +% +% +% And add an \cs{options} cmd for processing package +% options that require an argument. Maybe this will get added to +% the \pkg{keyval} package eventually. +% \begin{macrocode} +\@ifundefined{options}{% +% \end{macrocode} +% +% +% \begin{macro}{\options} +% Get the package options and run setkeys on them. +% \begin{macrocode} +\newcommand{\options}[2]{% + \expandafter\options@a\csname opt@#1.sty\endcsname{#2}% + \setkeys{#1}{#2}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\options@a} +% \begin{macro}{\options@b} +% \begin{macro}{\options@c} +% \begin{macro}{\options@d} +% Redefine \cs{opt@pkgname.sty} as we go along to take out +% the options that are handled and leave the ones that are not. +% \begin{macrocode} +\def\options@a#1#2{% + \edef\@tempa{\options@b#2,\@empty\@nil}% + \ifx#1\relax \let#1\@empty\fi + \xdef#1{#1\ifx#1\@empty\@xp\@gobble\@tempa\@empty\else\@tempa \fi}% +} +% \end{macrocode} +% Add the next option, and recurse if there remain more +% options. +% \begin{macrocode} +\def\options@b#1,#2#3\@nil{% + \options@c#1 \@nil + \ifx#2\@empty \else\options@b#2#3\@nil\fi +} +% \end{macrocode} +% Discard everything after the first space. +% \begin{macrocode} +\def\options@c#1 #2\@nil{\options@d#1=\@nil} +% \end{macrocode} +% Discard everything after the first = sign; add a comma only if the +% remainder is not empty. +% \begin{macrocode} +\def\options@d#1=#2\@nil{\ifx\@empty #1\@empty\else,\fi#1} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% The tail of the \cs{@ifundefined} test. +% \begin{macrocode} +}{}% end @ifundefined test +% \end{macrocode} +% +% +% +% +% \section{Some useful tools} +% +% \begin{macro}{\@nx} +% \begin{macro}{\@xp} +% The comparative brevity of \cs{@nx} and \cs{@xp} is +% valuable not so much for typing convenience as for reducing visual +% clutter in code sections that require a lot of expansion control. +% \begin{macrocode} +\let\@nx\noexpand +\let\@xp\expandafter +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@emptytoks} +% Constant empty token register, analogous to \cs{@empty}. +% \begin{macrocode} +\@ifundefined{@emptytoks}{\newtoks\@emptytoks}{} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\f@ur} +% Constants 0\ndash 3 are provided in plain \tex , but not 4. +% \begin{macrocode} +\chardef\f@ur=4 +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\inf@bad} +% \cs{inf@bad} is for testing box badness. +% \begin{macrocode} +\newcount\inf@bad \inf@bad=1000000 +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\maxint} +% +% We want to use \cs{maxint} rather than coerced +% \cs{maxdimen} for \cs{linepenalty} in one place. +% \begin{macrocode} +\newcount\maxint \maxint=2147483647 +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\int@a} +% \begin{macro}{\int@b} +% \begin{macro}{\int@b} +% +% Provide some shorter aliases for various scratch registers. +% \begin{macrocode} +\let\int@a=\@tempcnta +\let\int@b=\@tempcntb +\let\int@c=\count@ +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\dim@a} +% \begin{macro}{\dim@b} +% \begin{macro}{\dim@c} +% \begin{macro}{\dim@d} +% \begin{macro}{\dim@e} +% \begin{macro}{\dim@A} +% +% Same for dimen registers. +% \begin{macrocode} +\let\dim@a\@tempdima +\let\dim@b\@tempdimb +\let\dim@c\@tempdimc +\let\dim@d\dimen@ +\let\dim@e\dimen@ii +\let\dim@A\dimen@i +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\skip@a} +% \begin{macro}{\skip@b} +% \begin{macro}{\skip@c} +% +% Same for skip registers. +% \begin{macrocode} +\let\skip@a\@tempskipa +\let\skip@b\@tempskipb +\let\skip@c\skip@ +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\toks@a} +% \begin{macro}{\toks@b} +% \begin{macro}{\toks@c} +% \begin{macro}{\toks@d} +% \begin{macro}{\toks@e} +% \begin{macro}{\toks@f} +% +% Same for token registers. +% \begin{macrocode} +\let\toks@a\@temptokena +\let\toks@b\toks@ +\toksdef\toks@c=2 +\toksdef\toks@d=4 +\toksdef\toks@e=6 +\toksdef\toks@f=8 +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\abs@num} +% We need an absolute value function for comparing +% penalties. +% \begin{macrocode} +\def\abs@num#1{\ifnum#1<\z@-\fi#1} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@ifnext} +% \begin{macro}{\@ifnexta} +% The \cs{@ifnext} function is a variation of +% \cs{@ifnextchar} that doesn't skip over intervening whitespace. +% We use it for the optional arg of \dbslash inside +% \env{dmath} \etc because we don't want +% unwary users to be tripped up by an unexpected attempt on \latex 's part +% to interpret a bit of math as an optional arg: +% \begin{literalcode} +% \begin{equation} +% ...\\ +% [z,w]... +% \end{equation} +% \end{literalcode} +% . +% \begin{macrocode} +\def\@ifnext#1#2#3{% + \let\@tempd= #1\def\@tempa{#2}\def\@tempb{#3}% + \futurelet\@tempc\@ifnexta +} +% \end{macrocode} +% Switch to \cs{@tempa} iff the next token matches. +% \begin{macrocode} +\def\@ifnexta{\ifx\@tempc\@tempd \let\@tempb\@tempa \fi \@tempb} +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@ifstar} +% Similarly let's remove space-skipping from \cs{@ifstar} +% because in some rare case of \dbslash inside an equation, followed by +% a space and a \verb"*" where the \verb"*" is intended as the math +% binary operator, it would be a disservice to gobble the star as an +% option of the \dbslash command. In all other contexts the chance +% of having a space \emph{before} the star is extremely small: either +% the command is a control word which will get no space token after it in +% any case because of \tex 's tokenization rules; or it is a control +% symbol such as \dbslash \verb"*" which is exceedingly unlikely to be +% written as \dbslash \verb"*" by any one who really wants the +% \verb"*" to act as a modifier for the \dbslash command. +% \begin{macrocode} +\def\@ifstar#1#2{% + \let\@tempd*\def\@tempa*{#1}\def\@tempb{#2}% + \futurelet\@tempc\@ifnexta +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@optarg} +% Utility function for reading an optional arg +% \emph{without} skipping over any intervening spaces. +% \begin{macrocode} +\def\@optarg#1#2{\@ifnext[{#1}{#1[#2]}} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\@True} +% \begin{macro}{\@False} +% \begin{macro}{\@Not} +% \begin{macro}{\@And} +% After \verb"\let\foo\@True" the test +% \begin{literalcode} +% \if\foo +% \end{literalcode} +% evaluates to true. Would rather avoid \cs{newif} because it +% uses three csnames per Boolean variable; this uses only one. +% \begin{macrocode} +\def\@True{00} +\def\@False{01} +\def\@Not#1{0\ifcase#11 \or\@xp 1\else \@xp 0\fi} +\def\@And#1#2{0\ifcase#1#2 \@xp 0\else \@xp 1\fi} +\def\@Or#1#2{0\ifnum#1#2<101 \@xp 0\else \@xp 1\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% \begin{macrocode} +\def\theb@@le#1{\if#1 True\else False\fi} +% \end{macrocode} +% \begin{macro}{\freeze@glue} +% +% Remove the stretch and shrink from a glue register. +% \begin{macrocode} +\def\freeze@glue#1{#11#1\relax} +% \end{macrocode} +% +% \end{macro} +% \begin{macro}{\z@rule} +% \begin{macro}{\keep@glue} +% Note well +% the intentional absence of \cs{relax} at the end of the replacement +% text of \cs{z@rule}; use it with care. +% \begin{macrocode} +\def\z@rule{\vrule\@width\z@}% no \relax ! use with care +% \end{macrocode} +% Different ways to keep a bit of glue from disappearing at the +% beginning of a line after line breaking: +% \begin{itemize} +% \item Zero-thickness rule +% \item Null character +% \item \cs{vadjust}\verb"{}" (\texbook , Exercise ??) +% \end{itemize} +% The null character idea would be nice except it +% creates a mathord which then screws up math spacing for \eg a following +% unary minus sign. (the vrule \emph{is} transparent to +% the math spacing). The vadjust is the cheapest in terms of box +% memory\mdash it vanishes after the pass through \tex 's +% paragrapher. +% It is what I would have used, except that the equation contents get +% run through two paragraphing passes, once for breaking up LR boxes and +% once for the real typesetting. +% If \cs{keep@glue} were done with an empty vadjust, it would +% disappear after the first pass and\mdash in particular\mdash the +% pre-bin-op adjustment for relation symbols would disappear at a line break. +% \begin{macrocode} +\def\keep@glue{\z@rule\relax} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\replicate} +% +% This is a fully expandable way of making N copies of a token +% list. +% Based on a post of David Kastrup to comp.text.tex circa January +% 1999. +% The extra application of \cs{number} is needed for maximal +% robustness in case the repeat count N is given in some weird \tex form +% such as \verb""E9" or \verb"\count9". +% \begin{macrocode} +% usage: \message{H\replicate{5}{i h}ow de doo dee!} +\begingroup \catcode`\&=11 +\gdef\replicate#1{% + \csname &\expandafter\replicate@a\romannumeral\number\number#1 000q\endcsname +} +\endgroup +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\replicate@a} +% \begin{macrocode} +\long\def\replicate@a#1#2\endcsname#3{#1\endcsname{#3}#2} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\8m}% fix +% \begin{macrocode} +\begingroup \catcode`\&=11 +\long\gdef\&m#1#2{#1\csname \endcsname{#1}} +\endgroup +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\8q}% fix +% \begin{macrocode} +\@xp\let\csname\string &q\endcsname\@gobble +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\mathchars@reset} +% +% Need to patch up this function from flexisym a little, to better +% handle certain constructed symbols like \cs{neq}. +% \begin{macrocode} +\g@addto@macro\mathchars@reset{% + \let\@symRel\@secondoftwo \let\@symBin\@secondoftwo + \let\@symDeL\@secondoftwo \let\@symDeR\@secondoftwo + \let\@symDeB\@secondoftwo +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\eq@cons} +% +% \latex 's \cs{@cons} appends to the end of a list, but we need +% a function that adds material at the beginning. +% \begin{macrocode} +\def\eq@cons#1#2{% + \begingroup \let\@elt\relax \xdef#1{\@elt{#2}#1}\endgroup +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@saveprimitive} +% If some preceding package redefined one of the +% primitives that we must change, we had better do some checking to make +% sure that we are able to save the primitive meaning for internal use. +% This is handled by the \cs{@saveprimitive} function. We +% follow the example of \cs{@@input} where the primitive meaning is +% stored in an internal control sequence with a \verb"@@" prefix. +% Primitive control sequences can be distinguished by the fact that +% \cs{string} and \cs{meaning} return the same information. +% Well, not quite all: \cs{nullfont} and \cs{topmark} +% and the other \cs{...mark} primitives being the exceptions. +% \begin{macrocode} +\providecommand{\@saveprimitive}[2]{% + \begingroup + \edef\@tempa{\string#1}\edef\@tempb{\meaning#1}% + \ifx\@tempa\@tempb \global\let#2#1% + \else +% \end{macrocode}% +% If [arg1] is no longer primitive, then we are in trouble unless +% [arg2] was already given the desired primitive meaning somewhere +% else. +% \begin{macrocode} + \edef\@tempb{\meaning#2}% + \ifx\@tempa\@tempb + \else \@saveprimitive@a#1#2% + \fi + \fi + \endgroup +} +% \end{macrocode} +% Aux function, check for the special cases. +% Most of the time this branch will be skipped so we can +% stuff a lot of work into it without worrying about speed costs. +% \begin{macrocode} +\providecommand\@saveprimitive@a[2]{% + \begingroup + \def\@tempb##1#1##2{\edef\@tempb{##2}\@car{}}% + \@tempb\nullfont{select font nullfont}% + \topmark{\string\topmark:}% + \firstmark{\string\firstmark:}% + \botmark{\string\botmark:}% + \splitfirstmark{\string\splitfirstmark:}% + \splitbotmark{\string\splitbotmark:}% + #1{\string#1}% + \edef\@tempa{\expandafter\strip@prefix\meaning\@tempb}% + \edef\@tempb{\meaning#1}% + \ifx\@tempa\@tempb \global\let#2#1% + \else + \PackageError{breqn}% + {Unable to properly define \string#2; primitive + \noexpand#1no longer primitive}\@eha + \fi + \fi + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@@math} +% \begin{macro}{\@@endmath} +% \begin{macro}{\@@display} +% \begin{macro}{\@@enddisplay} +% Move the math-start and math-end functions into control +% sequences. If I were redesigning \tex I guess I'd put these +% functions into primitive control words instead of linking them to a +% catcode. That way \tex would not have to do the special +% lookahead at a \verb"$" to see if there's another one coming up. +% Of course that's related to the question of how to provide user +% shorthand for common constructions: \tex , or an editing interface of +% some sort. +% \begin{macrocode} +\begingroup \catcode`\$=\thr@@ % just to make sure + \global\let\@@math=$ \gdef\@@display{$$}% $$$ +\endgroup +\let\@@endmath=\@@math +\let\@@enddisplay=\@@display +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@@insert} +% \begin{macro}{\@@mark} +% \begin{macro}{\@@vadjust} +% Save the primitives \cs{vadjust}, \cs{insert}, +% \cs{mark} because we will want to change them locally during +% equation measuring to keep them from getting in the way of our vertical +% decomposition procedures. We follow the example of +% \cs{@@input}, \cs{@@end}, \cs{@@par} where the primitive +% meaning is stored in an internal control sequence with a \verb"@@" +% prefix. +% \begin{macrocode} +\@saveprimitive\vadjust\@@vadjust +\@saveprimitive\insert\@@insert +\@saveprimitive\mark\@@mark +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% +% \section{Debugging} +% Debugging help. +% +% \begin{macro}{\debug} +% \begin{macrocode} +\let\debug=\begingroup +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\gubed} +% \begin{macrocode} +\let\gubed=\endgroup +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\debugmsg} +% Print a debugging message. +% \begin{macrocode} +\def\debugmsg{\message{||= \iffalse}\fi + \@xp\@gobble\string +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\debugwr} +% Sometimes the newline behavior of \cs{message} is +% unsatisfactory; this provides an alternative. +% \begin{macrocode} +\def\debugwr#1{\immediate\write\sixt@@n{||= #1}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\debug@box} +% Record the contents of a box in the log file, without stopping. +% \begin{macrocode} +\def\debug@box#1{% + \batchmode{\showboxbreadth\maxdimen\showboxdepth99\showbox#1}% + \errorstopmode +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\eqinfo} +% Show lots of info about the material before launching into the +% trials. +% \begin{macrocode} +\def\eqinfo{% + \debug@box\EQ@copy + \wlog{!! EQ@copy: \the\wd\EQ@copy\space x + \the\ht\EQ@copy+\the\dp\EQ@copy + }% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\debug@para} +% Check params that affect line breaking. +% \begin{macrocode} +\def\debug@para{% + \debugwr{\hsize\the\hsize, \parfillskip\the\parfillskip}% + \debugmsg{\leftskip\the\leftskip, \rightskip\the\rightskip}% + \debugmsg{\linepenalty\the\linepenalty, \adjdemerits\the\adjdemerits}% + \debugmsg{\pretolerance\the\pretolerance, \tolerance\the\tolerance, + \parindent\the\parindent}% +} +% \end{macrocode} +% \end{macro} +% +% +% Turn off debugging unless it was asked for. +% \begin{macrocode} +\@ifpackagewith{breqn}{debug}{}{% + \let\debug\relax \let\gubed\relax + \let\debugmsg\@gobble \let\debug@lines\relax \let\debug@para\relax + \let\debugwr\@gobble + \let\debug@box\@gobble \let\debug@push\@gobbletwo +} +% \end{macrocode} +% +% +% +% +% \section{The \cs{listwidth} variable} +% The dimen variable \cs{listwidth} is \cs{linewidth} +% plus \cs{leftmargin} plus \cs{rightmargin}, which is typically +% less than \cs{hsize} if the list depth is greater than one. +% In case a future package will provide this variable, define it only +% if not yet defined. +% \begin{macrocode} +\@ifundefined{listwidth}{\newdimen\listwidth}{} +\listwidth=\z@ +% \end{macrocode} +% +% +% +% +% \section{Parameters} +% +% Here follows a list of parameters needed. +% +% \begin{macro}{\eqfontsize} +% \begin{macro}{\eqcolor} +% \begin{macro}{\eqmargin} +% \begin{macro}{\eqindent} +% \begin{macro}{\eqbinoffset} +% \begin{macro}{\eqnumside} +% \begin{macro}{\eqnumplace} +% \begin{macro}{\eqnumsep} +% \begin{macro}{\eqnumfont} +% \begin{macro}{\eqnumform} +% \begin{macro}{\eqnumsize} +% \begin{macro}{\eqnumcolor} +% \begin{macro}{\eqlinespacing} +% \begin{macro}{\eqlineskip} +% \begin{macro}{\eqlineskiplimit} +% \begin{macro}{\eqstyle} +% \begin{macro}{\eqinterlinepenalty} +% \begin{macro}{\intereqpenalty} +% \begin{macro}{\intereqskip} +% +% Note: avoid M, m, P, p because they look like they might be the +% start of a keyword \quoted{minus} or \quoted{plus}. Then +% \tex looks further to see if the next letter is i or l. And if +% the next thing is an undefined macro, the attempt to expand the macro +% results in an error message. +% \begin{macrocode} +\def\eqfontsize{} % Inherit from context [NOT USED?] +\def\eqcolor{black} % Default to black [NOT USED?] +\newdimen\eqnumsep \eqnumsep=10pt % Min space between equ number and body +\newdimen\eqmargin \eqmargin=8pt % For `multline' gap emulation +% \end{macrocode} +% The \cs{eqindent} and \cs{eqnumside} variables need to +% have their values initialized from context, actually. But +% that takes a bit of work, which is postponed till later. +% \begin{macrocode} +\def\eqindent{C}% % C or I, centered or indented +\def\eqnumside{R}% % R or L, right or left +\def\eqnumplace{M}% % M or T or B, middle top or bottom +% \end{macrocode} +% Typesetting the equation number is done thus: +% \begin{literalcode} +% {\eqnumcolor \eqnumsize \eqnumfont{\eqnumform{\eq@number}}} +% \end{literalcode} +% . +% \begin{macrocode} +%d\eqnumfont{\upshape}% % Upright even when surrounding text is slanted +\def\eqnumfont{}% % Null for easier debugging [mjd,1997/09/26] +\def\eqnumform#1{(#1\@@italiccorr)} % Add parens +\def\eqnumsize{} % Allow numbers to have different typesize ... +% \end{macrocode} +% Tricky questions on \cs{eqnumsize}. Should the default +% be \cs{normalsize}? Then the user can scale down the +% equation body with \cs{small} and not affect the equation +% number. Or should the default be empty? Then in large +% sections of smaller text, like the dangerous bend stuff in +% \emph{\TeX book}, the equation number size will keep in synch +% with the context. +% Maybe need an \cs{eqbodysize} param as well to allow separating +% the two cases. +% \begin{macrocode} +\def\eqnumcolor{} % ... or color than eq body e.g. \color{blue} +\newlength\eqlinespacing \eqlinespacing=14pt plus2pt % Base-to-base space between lines +\newlength\eqlineskip \eqlineskip=3pt plus2pt % Min space if eqlinespacing too small +\newdimen\eqlineskiplimit \eqlineskiplimit=2pt % Threshold for switching to eqlineskip +% \end{macrocode} +% The value of \cs{eqbinoffset} should include a negative shrink +% component that cancels the shrink component of medmuskip, otherwise +% there can be a noticeable variation in the indent of adjacent lines if +% one is shrunken a lot and the other isn't. +% \begin{macrocode} +\newmuskip \eqbinoffset \eqbinoffset=15mu minus-3mu % Offset from mathrel alignment pt for mathbins +\newmuskip\eqdelimoffset \eqdelimoffset=2mu % Additional offset for break inside delims +\newdimen\eqindentstep \eqindentstep=8pt % Indent used when LHS wd is n/a or too large +\newtoks\eqstyle % Customization hook +\newcount\eqbreakdepth \eqbreakdepth=2 % Allow breaks within delimiters to this depth +\newcount \eqinterlinepenalty \eqinterlinepenalty=10000 % No page breaks between equation lines +\newcount \intereqpenalty \intereqpenalty=1000 % Pagebreak penalty between equations [BRM: Was \@M] +\newlength \intereqskip \intereqskip=3pt plus2pt % Additional vert space between equations +\newcount\prerelpenalty \prerelpenalty=-\@M % Linebreak penalty before mathrel symbols +\newcount\prebinoppenalty \prebinoppenalty=888 % Linebreak penalty before mathbins +% \end{macrocode} +% When breaking equations we never right-justify, so a stretch +% component of the muskip is never helpful and sometimes it is definitely +% undesirable. Note that thick\slash medmuskips frozen inside a +% fraction or radical may turn out noticeably larger than neighboring +% unfrozen ones. Nonetheless I think this way is the best +% compromise short of a new \tex that can make those built-up objects +% shrink horizontally in proportion; the alternative is to pretty much +% eliminate the shrink possibility completely in displays. +% \begin{macrocode} +\newmuskip \Dmedmuskip \Dmedmuskip=4mu minus 3mu % medmuskip in displays +\newmuskip \Dthickmuskip \Dthickmuskip=5mu minus 2mu % thickmuskip in displays +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% And now some internal variables. 1997/10/22: some of +% these are dead branches that need to be pruned. +% +% MH: Started cleaning up a bit. No more funny loops. +% \begin{macrocode} +\def\eq@number{} % Internal variable +\newlength\eqleftskip \eqleftskip=\@centering % Space on the left [NOT USED?] +\newlength\eqrightskip \eqrightskip=\@centering % Space on the right [NOT USED?] +\newlength\eq@vspan \eq@vspan=\z@skip % Glue used to vcenter the eq number +\newmuskip\eq@binoffset \eq@binoffset=\eqbinoffset % Roughly, \eqbinoffset + \eqdelimoffset +\newsavebox\EQ@box % Storage for equation body +\newsavebox\EQ@copy % For eq body sans vadjust/insert/mark material +\newsavebox\EQ@numbox % For equation number +\newdimen\eq@wdNum % width of number + separation [NEW] +\newsavebox\GRP@numbox % For group number [NEW] +\newdimen\grp@wdNum % width of number + separation [NEW] +%%B\EQ@vimbox % Vadjust, insert, or mark material +%%B\EQ@vimcopy % Spare copy of same +%%B\eq@impinging % Temporary box for measuring number placement +\newcount \eq@lines % Internal counter, actual number of lines +\newcount \eq@curline % Loop counter +\newcount \eq@badness % Used in testing for overfull lines +\newcount \EQ@vims % For bookkeeping +\def\@eq@numbertrue{\let\eq@hasNumber\@True}% +\def\@eq@numberfalse{\let\eq@hasNumber\@False}% +\let\eq@hasNumber\@False +% \end{macrocode} +% Here for the dimens, it would be advisable to do some more careful +% management to conserve dimen registers. First of all, most of the +% dimen registers are needed in the measuring phase, which is a tightly +% contained step that happens after the contents of the equation have been +% typeset into a box and before any external functions have a chance to +% regain control\mdash \eg , the output routine. +% Therefore it is possible to make use of the the dimen registers 0--9, +% reserved by convention for scratch use, without fear of conflict with +% other macros. But I don't want to use them directly with the +% available names: +% \begin{literalcode} +% \dimen@ \dimen@i \dimen@ii \dimen3 \dimen4 ... \dimen9 +% \end{literalcode} +% . It would be much more useful to have names for these registers +% indicative of way they are used. +% +% Another source whence dimen registers could be borrowed is the +% \pkg{amsmath} package, which allocates six registers for +% equation-measuring purposes. We can reuse them under different +% names since the \pkg{amsmath} functions and our functions will +% never be used simultaneously. +% \begin{literalcode} +% \eqnshift@ \alignsep@ \tagshift@ \tagwidth@ \totwidth@ \lineht@ +% \end{literalcode} +% \begin{macrocode} +\newdimen\eq@dp % Depth of last line +\newdimen\eq@wdL % Width of the left-hand-side +\newdimen\eq@wdT % Total width for framing +\newdimen\eq@wdMin % Width of narrowest line in equation +\newdimen\grp@wdL % Max width of LHS's in a group +\newdimen\grp@wdR % Max RHS of all equations in a group +\newdimen\grp@wdT +\newdimen\eq@wdRmax +\newdimen\eq@firstht % Height of first line +% \end{macrocode} +% BRM: measure the condition too. +% \begin{macrocode} +\newdimen\eq@wdCond +\newdimen\eq@indentstep % Indent amount when LHS is not present +\newdimen\eq@linewidth % Width actually used for display +\newdimen\grp@linewidth % Max eq@linewidth over a group +% \end{macrocode} +% Maybe \cs{eq@hshift} could share the same register as +% \cs{mathindent} [mjd,1997/10/22]. +% \begin{macrocode} +\newdimen\eq@hshift +\let\eq@isIntertext\@False +% \end{macrocode} +% Init \cs{eq@indentstep} to a nonzero value so that we can +% detect and refrain from clobbering a user setting of zero. +% And \cs{eq@sidespace} to \cs{maxdimen} because +% that is the right init before computing a min. +% \begin{macrocode} +\eq@indentstep=\maxdimen +\newdimen\eq@given@sidespace +% \end{macrocode} +% +% \begin{macro}{\eq@overrun} +% MH: Appears to be unused. +% +% Not a dimen register; don't need to advance it. +% \begin{macrocode} +\def\eq@overrun{0pt} +% \end{macrocode} +% +% \end{macro} +% +% +% To initialize \cs{eqnumside} and \cs{eqindent} properly, +% we may need to grub around a bit in \cs{@filelist}. However, +% if the \pkg{amsmath} package was used, we can use its option +% data. More trouble: if a documentclass sends an option of +% \opt{leqno} to \pkg{amsmath} by default, and it gets +% overridden by the user with a \opt{reqno} documentclass option, +% then \pkg{amsmath} believes itself to have received +% \emph{both} options. +% \begin{macrocode} +\@ifpackagewith{amsmath}{leqno}{% + \@ifpackagewith{amsmath}{reqno}{}{\def\eqnumside{L}}% +}{% +% \end{macrocode} +% If the \pkg{amsmath} package was not used, the next +% method for testing the \opt{leqno} option is to see if +% \fn{leqno.clo} is present in \cs{@filelist}. +% \begin{macrocode} + \def\@tempa#1,leqno.clo,#2#3\@nil{% + \ifx @#2\relax\else \def\eqnumside{L}\fi + }% + \@xp\@tempa\@filelist,leqno.clo,@\@nil +% \end{macrocode} +% Even that test may fail in the case of \cls{amsart} if it does +% not load \pkg{amsmath}. Then we have to look whether +% \cs{iftagsleft@} is defined, and if so whether it is true. +% This is tricky if you want to be careful about conditional nesting +% and don't want to put anything in the hash table unnecessarily. +% \begin{macrocode} + \if L\eqnumside + \else + \@ifundefined{iftagsleft@}{}{% + \edef\eqnumside{% + \if TT\csname fi\endcsname\csname iftagsleft@\endcsname + L\else R\fi + }% + } + \fi +} +% \end{macrocode} +% A similar sequence of tests handles the \quoted{fleqn or not fleqn} +% question for the \cls{article} and \cls{amsart} +% documentclasses. +% \begin{macrocode} +\@ifpackagewith{amsmath}{fleqn}{% + \def\eqindent{I}% +}{% + \def\@tempa#1,fleqn.clo,#2#3\@nil{% + \ifx @#2\relax\else \def\eqindent{I}\fi + }% + \@xp\@tempa\@filelist,fleqn.clo,@\@nil + \if I\eqindent + \else + \@ifundefined{if@fleqn}{}{% + \edef\eqindent{% + \if TT\csname fi\endcsname\csname if@fleqn\endcsname + I\else C\fi + }% + }% + \fi +} +% \end{macrocode} +% BRM: This conditional implies we must use ALL indented or ALL centered? +% \begin{macrocode} +%\if I\eqindent + \@ifundefined{mathindent}{% + \newdimen\mathindent + }{% + \@ifundefined{@mathmargin}{}{% + \mathindent\@mathmargin + }% + } +%\fi +% \end{macrocode} +% +% +% +% +% \section{Measuring equation components} +% Measure the left-hand side of an equation. This +% function is called by mathrel symbols. For the first mathrel we +% want to discourage a line break more than for following mathrels; so +% \cs{mark@lhs} gobbles the following \cs{rel@break} and +% substitutes a higher penalty. +% \begin{aside} +% Maybe the LHS should be kept in a separate box. +% \end{aside} +% +% +% +% \begin{macro}{\EQ@hasLHS} +% +% Boolean: does this equation have a \dquoted{left-hand side}? +% \begin{macrocode} +\let\EQ@hasLHS=\@False +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\EQ@QED} +% +% If nonempty: the qed material that should be incorporated into this +% equation after the final punctuation. +% \begin{macrocode} +\let\EQ@QED=\@empty +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\mark@lhs} +% +% \begin{macrocode} +\def\mark@lhs#1{% + \ifnum\lr@level<\@ne + \let\mark@lhs\relax + \global\let\EQ@hasLHS=\@True + \global\let\EQ@prebin@space\EQ@prebin@space@a + \mark@lhs@a +% \end{macrocode} +% But the penalty for the first mathrel should still be lower than a +% binoppenalty. If not, when the LHS contains a binop, the split +% will occur inside the LHS rather than at the mathrel. +% On the other hand if we end up with a multline sort of equation +% layout where the RHS is very short, the break before the relation symbol +% should be made \emph{less} desirable than the breakpoints inside +% the LHS. +% Since a lower penalty takes precedence over a higher one, we start +% by putting in the highest relpenalty; during subsequent measuring if we +% find that that RHS is not excessively short then we put in an extra +% \dquoted{normal} relpenalty when rejoining the LHS and RHS. +% \begin{macrocode} + \penalty9999 % instead of normal \rel@break + % else no penalty = forbid break + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\mark@lhs@a} +% +% Temporarily add an extra thickmuskip to the LHS; it will be removed +% later. This is necessary to compensate for the disappearance of +% the thickmuskip glue preceding a mathrel if a line break is taken at +% that point. Otherwise we would have to make our definition of +% mathrel symbols more complicated, like the one for mathbins. The +% penalty of $2$ put in with vadjust is a flag for +% \cs{eq@repack} to suggest that the box containing this line should +% be measured to find the value of \cs{eq@wdL}. The +% second vadjust ensures that the normal prerelpenalty and thickmuskip +% will not get lost at the line break during this preliminary pass. +% +% BRM: I originally thought the \verb"\mskip\thickmuskip" was messing +% up summation limits in LHS. But I may have fixed that problem by +% fixing other things\ldots +% \begin{macrocode} +\def\mark@lhs@a{% + \mskip\thickmuskip \@@vadjust{\penalty\tw@}\penalty-\@Mi\@@vadjust{}% +} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\hiderel} +% If you want the LHS to extend past the first mathrel symbol to a +% following one, mark the first one with \cs{hiderel}: +% \begin{literalcode} +% a \hiderel{=} b = c... +% \end{literalcode} +% . +% \begin{aside} +% I'm not sure now why I didn't use \cs{begingroup} +% \cs{endgroup} here \begin{dn} +% mjd,1999/01/21 +% \end{dn} +% . +% \end{aside} +% +% \begin{macrocode} +\newcommand\hiderel[1]{\mathrel{\advance\lr@level\@ne#1}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\m@@Bin} +% \begin{macro}{\m@@Rel} +% \begin{macro}{\bin@break} +% \begin{macro}{\rel@break} +% \begin{macro}{\bin@mark} +% \begin{macro}{\rel@mark} +% \begin{macro}{\d@@Bin} +% \begin{macro}{\d@@Rel} +% +% \cf \pkg{flexisym} handling of mathbins and mathrels. These +% are alternate definitions of \cs{m@Bin} and \cs{m@Rel}, +% activated by \cs{display@setup}. +% \begin{macrocode} +\let\m@@Bin\m@Bin +\let\m@@Rel\m@Rel +\let\EQ@prebin@space\relax +\def\EQ@prebin@space@a{\mskip-\eq@binoffset \keep@glue \mskip\eq@binoffset} +\def\bin@break{\ifnum\lastpenalty=\z@\penalty\prebinoppenalty\fi + \EQ@prebin@space} +\def\rel@break{% + \ifnum\abs@num\lastpenalty <\abs@num\prerelpenalty + \penalty\prerelpenalty + \fi +} +\def\d@@Bin{\bin@break \m@@Bin} +\def\d@@Rel{\mark@lhs \rel@break \m@@Rel} +% \end{macrocode} +% The difficulty of dealing properly with the subscripts and +% superscripts sometimes appended to mathbins and mathrels is one of the +% reasons that we do not attempt to handle the mathrels as a separate +% \quoted{column} a la \env{eqnarray}. +% +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\m@@symRel} +% \begin{macro}{\d@@symRel} +% \begin{macro}{\m@@symBin} +% \begin{macro}{\d@@symBin} +% \begin{macro}{\m@@symDel} +% \begin{macro}{\d@@symDel} +% \begin{macro}{\m@@symDeR} +% \begin{macro}{\d@@symDeR} +% \begin{macro}{\m@@symDeB} +% \begin{macro}{\d@@symDeB} +% \begin{macro}{\m@@symDeA} +% \begin{macro}{\d@@symDeA} +% +% More of the same. +% \begin{macrocode} +\let\m@@symRel\@symRel \def\d@@symRel{\mark@lhs \rel@break \m@@symRel} +\let\m@@symBin\@symBin \def\d@@symBin{\bin@break \m@@symBin} +\let\m@@symDel\@symDel +\let\m@@symDeR\@symDeR +\let\m@@symDeB\@symDeB +\let\m@@symDeA\@symDeA +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\display@setup} +% \begin{macro}{\everydisplay} +% Setup. Note that \latex reserves the primitive +% \cs{everydisplay} under the name \cs{frozen@everydisplay}. +% BRM: Disable this! It also affects non-breqn math!!!! +% \begin{macrocode} +%\global\everydisplay\expandafter{\the\everydisplay \display@setup} +% \end{macrocode} +% Change some math symbol function calls. +% \begin{macrocode} +\def\display@setup{% + \medmuskip\Dmedmuskip \thickmuskip\Dthickmuskip + \let\m@Bin\d@@Bin \let\m@Rel\d@@Rel + \let\@symRel\d@@symRel \let\@symBin\d@@symBin + \let\m@DeL\d@@DeL \let\m@DeR\d@@DeR \let\m@DeB\d@@DeB + \let\m@DeA\d@@DeA + \let\@symDeL\d@@symDeL \let\@symDeR\d@@symDeR + \let\@symDeB\d@@symDeB \let\@symDeA\d@@symDeA + \let\left\eq@left \let\right\eq@right \global\lr@level\z@ + \global\eq@wdCond\z@ %BRM: new +% \end{macrocode} +% If we have an embedded array environment (for example), we +% don't want to have each math cell within the array resetting +% \cs{lr@level} globally to 0\mdash not good! +% And in general I think it is safe to say that whenever we have a +% subordinate level of boxing we want to revert to a normal math setup. +% \begin{macrocode} + \everyhbox{\everyhbox\@emptytoks + \let\display@setup\relax \textmath@setup \let\textmath@setup\relax + }% + \everyvbox{\everyvbox\@emptytoks + \let\display@setup\relax \textmath@setup \let\textmath@setup\relax + }% +} +% \end{macrocode} +% The \cs{textmath@setup} function is needed for embedded inline +% math inside text inside a display. +% +% BRM: DS Experiment: Variant of \cs{display@setup} for use within +% dseries environmnents +% \begin{macrocode} +\def\dseries@display@setup{% + \medmuskip\Dmedmuskip \thickmuskip\Dthickmuskip + \let\m@Bin\d@@Bin +%\let\m@Rel\d@@Rel +% \let\@symRel\d@@symRel + \let\@symBin\d@@symBin + \let\m@DeL\d@@DeL \let\m@DeR\d@@DeR \let\m@DeB\d@@DeB + \let\m@DeA\d@@DeA + \let\@symDeL\d@@symDeL \let\@symDeR\d@@symDeR + \let\@symDeB\d@@symDeB \let\@symDeA\d@@symDeA + \let\left\eq@left \let\right\eq@right \global\lr@level\z@ + \everyhbox{\everyhbox\@emptytoks + \let\display@setup\relax \textmath@setup \let\textmath@setup\relax + }% + \everyvbox{\everyvbox\@emptytoks + \let\display@setup\relax \textmath@setup \let\textmath@setup\relax + }% + \displaystyle +} +% \end{macrocode} +% +% \begin{macrocode} +\def\textmath@setup{% + \let\m@Bin\m@@Bin \let\m@Rel\m@@Rel + \let\@symRel\m@@symRel \let\@symBin\m@@symBin + \let\m@DeL\m@@DeL \let\m@DeR\m@@DeR \let\m@DeB\m@@DeB + \let\m@DeA\m@@DeA + \let\@symDeL\m@@symDeL \let\@symDeR\m@@symDeR + \let\@symDeB\m@@symDeB \let\@symDeA\m@@symDeA + \let\left\@@left \let\right\@@right +} +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% +% \begin{macro}{\if@display} +% \begin{macro}{\everydisplay} +% The test \cs{ifinner} is unreliable for distinguishing +% whether we are in a displayed formula or an inline formula: any display +% more complex than a simple one-line equation typically involves the use +% of \verb"$" \cs{displaystyle} \dots \verb"$" instead of +% \dbldollars \dots \dbldollars . So we provide a more reliable +% test. But it might have been provided already by the +% \pkg{amsmath} package. +% \begin{macrocode} +\@ifundefined{@displaytrue}{% + \@xp\newif\csname if@display\endcsname + \everydisplay\@xp{\the\everydisplay \@displaytrue}% +}{} +% \end{macrocode} +% +% \begin{aside} +% Is there any reason to maintain separate +% \cs{everydisplay} and \cn{eqstyle}? +% +% \end{aside} +% +% +% \end{macro} +% \end{macro} +% +% +% +% +% \section{The \env{dmath} and \env{dmath*} environments} +% +% Options for the \env{dmath} and \env{dmath*} +% environments. +% \begin{literalcode} +% \begin{dmath}[label={xyz}] +% \end{literalcode} +% \begin{macrocode} +\define@key{breqn}{label}{\def\next@label{\label{#1}}} +\global\let\next@label\@empty +% \end{macrocode} +% Allow a variant number. +% \begin{literalcode} +% \begin{dmath}[number={\nref{foo}\textprime}] +% \end{literalcode} +% \begin{macrocode} +\define@key{breqn}{number}{\def\eq@number{#1}% + \let\@currentlabel\eq@number +} +% \end{macrocode} +% \begin{literalcode} +% \begin{dmath}[shiftnumber] +% \begin{dmath}[holdnumber] +% \end{literalcode} +% Holding or shifting the number. +% \begin{macrocode} +\define@key{breqn}{shiftnumber}{\let\eq@shiftnumber\@True} +\define@key{breqn}{holdnumber}{\let\eq@holdnumber\@True} +% \end{macrocode} +% \begin{literalcode} +% \begin{dmath}[density={.5}] +% \end{literalcode} +% \begin{macrocode} +\define@key{breqn}{density}{\def\eq@density@factor{#1}} +% \end{macrocode} +% \begin{literalcode} +% \begin{dmath}[indentstep={1em}] +% \end{literalcode} +% To change the amount of indent for post-initial lines. Note: +% for lines that begin with a mathbin symbol there is a fixed amount of +% indent already built in (\cs{eqbinoffset}) and it cannot be +% reduced through this option. The indentstep amount is the indent +% used for lines that begin with a mathrel symbol. +% \begin{macrocode} +\define@key{breqn}{indentstep}{\eqindentstep#1\relax} +% \end{macrocode} +% \begin{literalcode} +% \begin{dmath}[compact] +% \begin{dmath}[compact=-2000] +% \end{literalcode} +% To make mathrels stay inline to the extent possible, use the compact +% option. +% Can give a numeric value in the range $-10000 \dots 10000$ +% to adjust the behavior. +% $-10000$: always break at a rel symbol; $10000$: never +% break at a rel symbol. +% \begin{macrocode} +\define@key{breqn}{compact}[-99]{\prerelpenalty=#1\relax} +% \end{macrocode} +% \begin{literalcode} +% \begin{dmath}[layout={S}]% +% \end{literalcode} +% Specify a particular layout. +% We take care to ensure that \cs{eq@layout} ends up containing +% one and only one letter. +% \begin{macrocode} +\define@key{breqn}{layout}[?]{% + \edef\eq@layout{\@car#1?\@nil}% +} +% \end{macrocode} +% \begin{literalcode} +% \begin{dmath}[spread={1pt}] +% \end{literalcode} +% To change the interline spacing in a particular equation. +% \begin{macrocode} +\define@key{breqn}{spread}{% + \addtolength\eqlinespacing{#1}% + \addtolength\eqlineskip{#1}% + \eqlineskiplimit\eqlineskip +} +% \end{macrocode} +% To change the amount of space on the side for \dquoted{multline} layout. +% \begin{macrocode} +\define@key{breqn}{sidespace}{% + \setlength\eq@given@sidespace{#1}% +} +% \end{macrocode} +% \begin{literalcode} +% \begin{dmath}[style={\small}] +% \end{literalcode} +% The \opt{style} option is mainly intended for changing the +% type size of an equation but as a matter of fact you could put arbitrary +% \latex code here \mdash thus the option name is \quoted{style} rather +% than just \quoted{typesize}. In order for this option to work when +% setting options globally, we need to put the code in +% \cs{eqstyle} rather than execute it directly. +% \begin{macrocode} +\define@key{breqn}{style}{\eqstyle\@xp{\the\eqstyle #1}} +% \end{macrocode} +% \begin{literalcode} +% \begin{dmath}[frame] +% \end{literalcode} +% The \opt{frame} option merely puts a framebox around the body +% of the equation. To change the thickness of the frame, give the +% thickness as the argument of the option. For greater control, you +% can change the appearance of the frame by redefining +% \cs{eqframe}. It must be a command taking two arguments, the +% width and height of the equation body. The top left corner of the +% box produced by \cs{eqframe} will be pinned to the top-left corner +% of the equation body. +% \begin{macrocode} +\define@key{breqn}{frame}[\fboxrule]{\def\eq@frame{T}% + \dim@a#1\relax\edef\eq@framewd{\the\dim@a}% +% \end{macrocode} +% Until such time as we provide a frame implementation that allows the +% frame to stretch and shrink, we'd better remove any stretch/shrink from +% the interline glue in this case. +% \begin{macrocode} + \freeze@glue\eqlinespacing \freeze@glue\eqlineskip +} +\define@key{breqn}{fullframe}[]{\def\eq@frame{U}% + \freeze@glue\eqlinespacing \freeze@glue\eqlineskip +} +\def\eq@frame{F} % no frame +\def\eq@framewd{\fboxrule} +% \end{macrocode} +% Wishful thinking? +% \begin{literalcode} +% \begin{dmath}[frame={width={2pt},color={blue},sep={2pt}}] +% \end{literalcode} +% To change the space between the frame and the equation there is a +% framesep option. +% \begin{macrocode} +\define@key{breqn}{framesep}[\fboxsep]{% + \if\eq@frame F\def\eq@frame{T}\fi + \dim@a#1\relax \edef\eq@framesep{\the\dim@a}% + \freeze@glue\eqlinespacing \freeze@glue\eqlineskip +} +\def\eq@framesep{\fboxsep} +% \end{macrocode} +% \begin{literalcode} +% \begin{dmath}[background={red}] +% \end{literalcode} +% Foreground and background colors for the equation. By default +% the background area that is colored is the size of the equation, plus +% fboxsep. If you need anything fancier for the background, you'd +% better do it by defining \cs{eqframe} in terms of +% \cs{colorbox} or \cs{fcolorbox}. +% \begin{macrocode} +\define@key{breqn}{background}{\def\eq@background{#1}% + \freeze@glue\eqlinespacing \freeze@glue\eqlineskip +} +% \end{macrocode} +% \begin{literalcode} +% \begin{dmath}[color={purple}] +% \end{literalcode} +% \begin{macrocode} +\define@key{breqn}{color}{\def\eq@foreground{#1}} +% \end{macrocode} +% \begin{literalcode} +% \begin{dmath}[center] +% \begin{dmath}[nocenter] +% \end{literalcode} +% The \opt{center} option means add leftskip stretch to make the +% individual lines be centered; this is the default for +% \env{dseries}. +% \begin{macrocode} +\define@key{breqn}{center}[]{\let\eq@centerlines\@True} +\define@key{breqn}{nocenter}[]{\let\eq@centerlines\@False} +\let\eq@centerlines\@False +% \end{macrocode} +% \begin{literalcode} +% \begin{dgroup}[noalign] +% \end{literalcode} +% Equation groups normally have alignment of the primary relation +% symbols across the whole group. The \opt{noalign} option +% switches that behavior. +% \begin{macrocode} +\define@key{breqn}{noalign}[]{\let\grp@aligned\@False} +\let\grp@aligned\@True % default +% \end{macrocode} +% \begin{literalcode} +% \begin{dgroup}[breakdepth={2}] +% \end{literalcode} +% Break depth of 2 means that breaks are allowed at mathbin symbols +% inside two pairs of delimiters, but not three. +% \begin{macrocode} +\define@key{breqn}{breakdepth}{\eqbreakdepth#1\relax} +% \end{macrocode} +% \begin{literalcode} +% \begin{darray}[cols={lcrlcr}] +% \end{literalcode} +% The \opt{cols} option only makes sense for the +% \env{darray} environment but we liberally allow all the options to +% be used with all the environments and just ignore any unsensible ones +% that happen to come along. +% \begin{macrocode} +\define@key{breqn}{cols}{\global\let\@preamble\@empty + \darray@mkpream#1\@percentchar +} +% \end{macrocode} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% FORMAT STATUS% +% \begin{verbatim} +% \def\eq@frame{T}% +% CLM works tolerably +% \def\eqindent{C}\def\eqnumside{L}\def\eqnumplace{M} +% CLT works tolerably +% \def\eqindent{C}\def\eqnumside{L}\def\eqnumplace{T} +% ILM +% \def\eqindent{I}\def\eqnumside{L}\def\eqnumplace{M}\mathindent40\p@ +% ILT +% \def\eqindent{I}\def\eqnumside{L}\def\eqnumplace{T}\mathindent40\p@ +% Indended w/left number +% work ok if mathindent is larger than number width, +% but then equations must fit into smaller space. +% Is shiftnumber allowed to put eqn at left, instead of indent? +% CRM +% \def\eqindent{C}\def\eqnumside{R}\def\eqnumplace{M} +% CRB +% \def\eqindent{C}\def\eqnumside{R}\def\eqnumplace{B} +% IRM +% \def\eqindent{I}\def\eqnumside{R}\def\eqnumplace{M}\mathindent10\p@ +% IRB +% \def\eqindent{I}\def\eqnumside{R}\def\eqnumplace{B}\mathindent10\p@ +% \end{verbatim} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% The main environments. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%BRM: The following incorporates several changes: +%% 1) modifications supplied by MJD to fix the eaten \cs{paragraph} problem. +%% 2) Added \cs{display@setup} here, rather than globally. +% +% \begin{macro}{\dmath} +% \begin{macro}{\enddmath} +% For the \env{dmath} environment we don't want the standard +% optional arg processing because of the way it skips over whitespace, +% including newline, while looking for the \verb"[" char; which is not good +% for math material. So we call \cs{@optarg} instead. +% \begin{macrocode} +\newenvironment{dmath}{% + \let\eq@hasNumber\@True \@optarg\@dmath{}}{} +\def\@dmath[#1]{% + \debugmsg{=== DMATH ==================================================}% + \everydisplay\expandafter{\the\everydisplay \display@setup}% + \if@noskipsec \leavevmode \fi + \if@inlabel \leavevmode \global\@inlabelfalse \fi + \if\eq@group\else\eq@prelim\fi + \setkeys{breqn}{#1}% + \the\eqstyle +% \end{macrocode} +% The equation number might have been overridden in \verb|#1|. +% \begin{macrocode} + \eq@setnumber +% \end{macrocode} +% Start up the displayed equation by reading the contents into a +% box register. Enclose this phase in an extra group so that +% modified \cs{hsize} and other params will be auto-restored +% afterwards. +% \begin{macrocode} + \begingroup + \eq@setup@a + \eq@startup +} +% \end{macrocode} +% Before it finishes off the box holding the equation body, +% \cs{enddmath} needs to look ahead for punctuation (and +% \cs{qed}?). +% \begin{macrocode} +\def\enddmath#1{\check@punct@or@qed} +\def\end@dmath{% + \gdef\EQ@setwdL{}% Occasionally undefined ??? + \eq@capture + \endgroup + \EQ@setwdL +% \end{macrocode} +% Measure (a copy of) the equation body to find the minimum width +% required to get acceptable line breaks, how many lines will be required +% at that width, and whether the equation number needs to be shifted to +% avoid overlapping. This information will then be used by +% \cs{eq@finish} to do the typesetting of the real equation body. +% \begin{macrocode} + \eq@measure +% \end{macrocode} +% Piece together the equation from its constituents, recognizing +% current constraints. If we are in an equation group, this might +% just save the material on a stack for later processing. +% \begin{macrocode} + \if\eq@group \grp@push \else \eq@finish\fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\dmath*} +% \begin{macro}{\enddmath*} +% Ah yes, now the lovely \env{dmath*} environment. +% \begin{macrocode} +\newenvironment{dmath*}{% + \let\eq@hasNumber\@False \@optarg\@dmath{}% +}{} +\@namedef{end@dmath*}{\end@dmath} +\@namedef{enddmath*}#1{\check@punct@or@qed} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\eq@prelim} +% If \cs{everypar} has a non-null value, it's probably +% some code from \cs{@afterheading} that sets \cs{clubpenalty} +% and\slash or removes the parindent box. Both of those actions +% are irrelevant and interfering for our purposes and need to be deflected +% for the time being. +% If an equation appears at the very beginning of a list item +% (possibly from a trivlist such as \env{proof}), we need to +% trigger the item label. +% \begin{macrocode} +\def\eq@prelim{% + \if@inlabel \indent \par \fi + \if@nobreak \global\@nobreakfalse \predisplaypenalty\@M \fi + \everypar\@emptytoks +% \end{macrocode} +% If for some reason \env{dmath} is called between paragraphs, +% \cn{noindent} is better than \cn{leavevmode}, which would produce +% an indent box and an empty line to hold it. If we are in a list +% environment, \cn{par} is defined as \verb"{\@@par}" to preserve +% \cs{parshape}. +% \begin{macrocode} + \noindent + \eq@nulldisplay + \par %% \eq@saveparinfo %% needs work + \let\intertext\breqn@intertext +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\breqn@parshape@warning} +% Warning message extracted to a separate function to streamline the +% calling function. +% \begin{macrocode} +\def\breqn@parshape@warning{% + \PackageWarning{breqn}{% + Complex paragraph shape cannot be followed by this equation}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\eq@prevshape} +% Storage; see \cs{eq@saveparinfo}. +% \begin{macrocode} +\let\eq@prevshape\@empty +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\eq@saveparinfo} +% Save the number of lines and parshape info for the text preceding +% the equation. +% \begin{macrocode} +\def\eq@saveparinfo{% + \count@\prevgraf \advance\count@-\thr@@ % for the null display + \edef\eq@prevshape{\prevgraf\the\count@\space}% + \ifcase\parshape + % case 0: no action required + \or \edef\eq@prevshape{\eq@prevshape + \parshape\@ne\displayindent\displaywidth\relax + }% +% \end{macrocode} +% Maybe best to set \cs{eq@prevshape} the same in the else case +% also. Better than nothing. +% \begin{macrocode} + \else + \breqn@parshape@warning + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\eq@setnumber} +% If the current equation number is not explicitly given, then +% use an auto-generated number, unless the no-number switch has been +% thrown (\env{dmath*}). +% \cs{theequation} is the number form to be used for all equations, +% \cs{eq@number} is the actual value for the current equation +% (might be an exception to the usual sequence). +% \begin{macrocode} +\def\eq@setnumber{% + \eq@wdNum\z@ + \if\eq@hasNumber + \ifx\eq@number\@empty + \stepcounter{equation}\let\eq@number\theequation + \fi +% \fi +% \end{macrocode} + % This sets up numbox, etc, even if unnumbered????? +% \begin{macrocode} + \ifx\eq@number\@empty + \else +% \end{macrocode} +% Put the number in a box so we can use its measurements in our +% number-placement calculations. The extra braces around +% \cs{eqnumform} make it possible for \cs{eqnumfont} to have +% either an \cs{itshape} (recommended) or a \cs{textit} +% value. +% \begin{macrocode} + \debugmsg{Number \eq@number}% + \set@label{equation}\eq@number + \global\sbox\EQ@numbox{% + \next@label \global\let\next@label\@empty + \eqnumcolor\eqnumsize\eqnumfont{\eqnumform{\eq@number}}% + }% + \global\eq@wdNum\wd\EQ@numbox\global\advance\eq@wdNum\eqnumsep +% \let\eq@hasNumber\@True % locally true + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\eq@finish} +% The information available at this point from preliminary +% measuring includes the number of lines required, the width of the +% equation number, the total height of the equation body, and (most +% important) the parshape spec that was used in determining height and +% number of lines. +% +% Invoke the equation formatter for the requested centering/indentation +% having worked out the best parshape. +% BRM: This portion is extensively refactored to get common operations +% together (so corrections get consistently applied). +% \begin{macrocode} +\def\eq@finish{% + \begingroup + \debugmsg{Formatting equation}% + \debug@showmeasurements + \if F\eq@frame\else + \freeze@glue\eqlinespacing \freeze@glue\eqlineskip + \fi +% \eq@topspace{\vskip\parskip}% Set top spacing + \csname eq@\eqindent @setsides\endcsname % Compute \leftskip,\rightskip + \adjust@parshape\eq@parshape% Final adjustment of parshape for left|right skips + \eq@topspace{\vskip\parskip}% Set top spacing + \debug@showformat + % Now, invoke the appropriate typesetter according to number placement + \if\eq@hasNumber + \if\eq@shiftnumber + \csname eq@typeset@\eqnumside Shifted\endcsname + \else + \csname eq@typeset@\eqnumside\eqnumplace\endcsname + \fi + \else + \eq@typeset@Unnumbered + \fi + \endgroup + \eq@botspace +} +% \end{macrocode} +% +% \end{macro} +% +% +% +% +% \section{Special processing for end-of-equation} +% +% At the end of a displayed equation environment we need to peek ahead +% for two things: following punction such as period or command that +% should be pulled in for inclusion at the end of the equation; and +% possibly also an \verb"\end{proof}" with an implied \dquoted{qed} +% symbol that is traditionally included at the end of the display rather +% than typeset on a separate line. +% We could require that the users type \cs{qed} explicitly at the +% end of the display when they want to have the display take notice of it. +% But the reason for doing that would only be to save work for the +% programmer; the most natural document markup would allow an inline +% equation and a displayed equation at the end of a proof to differ only +% in the environment name: +% \begin{literalcode} +% ... \begin{math} ... \end{math}. +% \end{proof} +% \end{literalcode} +% versus +% \begin{literalcode} +% ... +% \begin{dmath} +% ... +% \end{dmath}. +% \end{proof} +% \end{literalcode} +% . +% The technical difficulties involved in supporting this markup within +% \latex2e are, admittedly, nontrivial. +% Nonetheless, let's see how far we can go. +% +% +% The variations that we will support are only the most +% straightforward ones: +% \begin{literalcode} +% \end{dmath}. +% \end{proof} +% \end{literalcode} +% or +% \begin{literalcode} +% \end{dmath}. +% Perhaps a comment +% \end{proof} +% \end{literalcode} +% . +% If there is anything more complicated than a space after the +% period we will not attempt to scan any further for a possible +% \verb"\end{proof}". +% This includes material such as: +% \begin{literalcode} +% \begin{figure}...\end{figure}% +% \footnote{...} +% \renewcommand{\foo}{...} +% \par +% \end{literalcode} +% or even a blank line\mdash because in \latex a blank line is +% equivalent to \cs{par} and the meaning of \cs{par} is +% \dquoted{end-paragraph}; in my opinion if explicit end-of-paragraph +% markup is given before the end of an element, it has to be respected, +% and the preceding paragraph has to be fully finished off before +% proceeding further, even inside an element like \dquoted{proof} whose +% end-element formatting requires integration with the end of the +% paragraph text. +% And \tex nically speaking, a \cs{par} token that comes from a +% blank line and one that comes from the sequence of characters +% \verb"\" \verb"p" \verb"a" \verb"r" are equally explicit. +% I hope to add support for \cs{footnote} in the future, as it +% seems to be a legitimate markup possibility in that context from a +% purely logical point of view, but there are additional technical +% complications if one wants to handle it in full generality +% \begin{dn} +% mjd,1999/02/08 +% \end{dn} +% . +% +% +% \begin{macro}{\peek@branch} +% +% This is a generalized \dquoted{look at next token and choose some action +% based on it} function. +% \begin{macrocode} +\def\peek@branch#1#2{% + \let\peek@b#1\let\peek@space#2\futurelet\@let@token\peek@a +} +\def\peek@skipping@spaces#1{\peek@branch#1\peek@skip@space} +\def\peek@a{% + \ifx\@let@token\@sptoken \expandafter\peek@space + \else \expandafter\peek@b\fi +} +\lowercase{\def\peek@skip@space} {\futurelet\@let@token\peek@a}% +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\check@punct} +% +% For this one we need to recognize and grab for inclusion any of the +% following tokens: \verb",;.!?", both catcode 12 (standard \latex +% value) and catcode 13 (as might hold when the Babel package is +% being used). +% We do not support a space preceding the punctuation since that would +% be considered simply invalid markup if a display-math environment were +% demoted to in-line math; and we want to keep their markup as parallel as +% possible. +% If punctuation does not follow, then the \cs{check@qed} branch +% is not applicable. +% \begin{macrocode} +\def\check@punct{\futurelet\@let@token\check@punct@a} +\def\check@punct@a{% + \edef\@tempa{% + \ifx\@let@token\@sptoken\@nx\finish@end + \else\ifx\@let@token ,\@nx\check@qed + \else\ifx\@let@token .\@nx\check@qed + \else\check@punct@b % check the less common possibilities + \fi\fi\fi + }% + \@tempa +} +\begingroup +\toks@a{% + \ifx\@let@token ;\@nx\check@qed + \else\ifx\@let@token ?\@nx\check@qed + \else\ifx\@let@token !\@nx\check@qed +} +\toks@c{\fi\fi\fi}% matching with \toks@a +\catcode`\.=\active \catcode`\,=\active \catcode`\;=\active +\catcode`\?=\active \catcode`\!=\active +\toks@b{% + \else\ifx\@let@token ,\@nx\check@qed + \else\ifx\@let@token .\@nx\check@qed + \else\ifx\@let@token ;\@nx\check@qed + \else\ifx\@let@token ?\@nx\check@qed + \else\ifx\@let@token !\@nx\check@qed + \fi\fi\fi\fi\fi +} +\xdef\check@punct@b{% + \the\toks@a\the\toks@b\the\toks@c +} +\endgroup +% \end{macrocode} +% +% \begin{macrocode} +\let\found@punct\@empty +\def\check@qed#1{% + \gdef\found@punct{#1}% + \peek@skipping@spaces\check@qed@a +} +\def\check@qed@a{% + \ifx\end\@let@token \@xp\check@qed@b + \else \@xp\finish@end + \fi +} +% \end{macrocode} +% For each environment ENV that takes an implied qed at the end, the +% control sequence ENVqed must be defined; and it must include suitable +% code to yield the desired results in a displayed equation. +% \begin{macrocode} +\def\check@qed@b#1#2{% + \@ifundefined{#2qed}{}{% + \toks@\@xp{\found@punct\csname#2qed\endcsname}% + \xdef\found@punct{\the\toks@}% + }% + \finish@end + \end{#2}% +} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\latex@end} +% \begin{macro}{\finish@end} +% The lookahead for punctuation following a display requires +% mucking about with the normal operation of \cn{end}. Although +% this is not exactly something to be done lightly, on the other hand this +% whole package is so over-the-top anyway, what's a little more +% going to hurt? And rationalizing this aspect of +% equation markup is a worthy cause. Here is the usual +% definition of \cs{end}. +% \begin{literalcode} +% \def\end#1{ +% \csname end#1\endcsname \@checkend{#1}% +% \expandafter\endgroup\if@endpe\@doendpe\fi +% \if@ignore \global\@ignorefalse \ignorespaces \fi +% } +% \end{literalcode} +% We can improve the chances of this code surviving through future +% minor changes in the fundamental definition of \cs{end} by taking a +% little care in saving the original meaning. +% \begin{macrocode} +\def\@tempa#1\endcsname#2\@nil{\def\latex@end##1{#2}} +\expandafter\@tempa\end{#1}\@nil +\def\end#1{\csname end#1\endcsname \latex@end{#1}}% +% \end{macrocode} +% Why don't we call \cs{CheckCommand} here? Because that +% doesn't help end users much; it works better to use it during package +% testing by the maintainer. +% +% +% If a particular environment needs to call a different end action, the +% end command of the environment should be defined to gobble two args and +% then call a function like \cs{check@punct@or@qed}. +% \begin{macrocode} +\def\check@punct@or@qed#1{% + \xdef\found@punct{\@empty}% BRM: punctuation was being remembered past this eqn. + \def\finish@end{\csname end@#1\endcsname\latex@end{#1}}% + \check@punct +} +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\eqpunct} +% User-settable function for handling +% the punctuation at the end of an equation. You could, for example, +% define it to just discard the punctuation. +% \begin{macrocode} +\newcommand\eqpunct[1]{\thinspace#1} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\set@label} +% \cs{set@label} just sets \cs{@currentlabel} but it +% takes the counter as an argument, in the hope that \latex will some +% day provide an improved labeling system that includes type info on the +% labels. +% \begin{macrocode} +\providecommand\set@label[2]{\protected@edef\@currentlabel{#2}} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\eq@topspace} +% \begin{macro}{\eq@botspace} +% The action of \cs{eq@topspace} is complicated by the +% need to test whether the \quoted{short} versions of the display skips +% should be used. This can be done only after the final parshape +% and indent have been determined, so the calls of this function are +% buried relatively deeply in the code by comparison to the calls of +% \cs{eq@botspace}. This also allows us to optimize +% slightly by setting the above-skip with \cs{parskip} instead of +% \cs{vskip}. \verb|#1| is either \cs{noindent} or +% \verb"\vskip\parskip". +% +% BRM: Hmm; we need to do *@setspace BEFORE this for small skips to work! +% \begin{macrocode} +\def\eq@topspace#1{% + \begingroup + \global\let\EQ@shortskips\@False + \if\@And{\eq@group}{\@Not\GRP@top}% + \parskip\intereqskip \penalty\intereqpenalty + \else + \eq@check@shortskip + \if\EQ@shortskips + \parskip\abovedisplayshortskip + \aftergroup\belowdisplayskip\aftergroup\belowdisplayshortskip +% \end{macrocode} +% BRM: Not exactly \TeX's approach, but seems right\ldots +% \begin{macrocode} + \ifdim\predisplaysize>\z@\nointerlineskip\fi + \else + \parskip\abovedisplayskip + \fi + \fi + \if F\eq@frame + \else + \addtolength\parskip{\eq@framesep+\eq@framewd}% + \fi +\debugmsg{Topspace: \theb@@le\EQ@shortskips, \parskip=\the\parskip, \predisplaysize=\the\predisplaysize}% + #1% + \endgroup +} +\def\eq@check@shortskip{% + \global\let\EQ@shortskips\@False + \setlength\dim@a{\abovedisplayskip+\ht\EQ@numbox}% + \addtolength\leftskip{-2em}% standard TeX value + \ifdim\leftskip<\predisplaysize + \else\if R\eqnumside \global\let\EQ@shortskips\@True + \else\if\eq@shiftnumber + \else\if T\eqnumplace + \ifdim\dim@a<\eq@firstht + \global\let\EQ@shortskips\@True + \fi + \else + \setlength\dim@b{\eq@vspan/2}% + \ifdim\dim@a<\dim@b + \global\let\EQ@shortskips\@True + \fi + \fi\fi\fi\fi +} +% \end{macrocode} +% +% At the end of an equation, need to put in a pagebreak penalty +% and some vertical space. Also set some flags to remove parindent +% and extra word space if the current paragraph text continues without an +% intervening \cs{par}. +% \begin{macrocode} +\def\eq@botspace{% + \penalty\postdisplaypenalty +% \end{macrocode} +% Earlier calculations will have set \cs{belowdisplayskip} locally +% to \cs{belowdisplayshortskip} if applicable. So we can just use +% it here. +% \begin{macrocode} + \if F\eq@frame + \else + \addtolength\belowdisplayskip{\eq@framesep+\eq@framewd}% + \fi + \vskip\belowdisplayskip + \@endpetrue % kill parindent if current paragraph continues + \global\@ignoretrue % ignore following spaces + \eq@resume@parshape +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\eq@resume@parshape} +% This should calculate the total height of the equation, +% including space above and below, and set prevgraf to the number it would +% be if that height were taken up by normally-spaced normal-height +% lines. We also need to restore parshape if it had a non-null +% value before the equation. Not implemented yet. +% \begin{macrocode} +\def\eq@resume@parshape{} +% \end{macrocode} +% \end{macro} +% +% +% +% +% \section{Preprocessing the equation body} +% \begin{macro}{\eq@startup} +% Here is the function that initially collects the equation +% material in a box. +% +% +% \begin{macrocode} +\def\eq@startup{% + \global\let\EQ@hasLHS\@False + \setbox\z@\vbox\bgroup + \noindent \@@math \displaystyle + \penalty-\@Mi +} +% \end{macrocode} +% +% This setup defines the environment for the first typesetting +% pass, note the \cs{hsize} value for example. +% \begin{macrocode} +\def\eq@setup@a{% + \everymath\everydisplay + %\let\@newline\eq@newline % future possibility? + \let\\\eq@newline + \let\insert\eq@insert \let\mark\eq@mark \let\vadjust\eq@vadjust + \hsize\maxdimen \pretolerance\@M +% \end{macrocode} +% Here it is better not to use \cs{@flushglue} (0pt +% plus1fil) for \cs{rightskip}, or else a negative penalty +% (such as $-99$ for \cs{prerelpenalty}) will tempt +% \tex to use more line breaks than necessary in the first typesetting +% pass. Ideal values for \cs{rightskip} and +% \cs{linepenalty} are unclear to me, but they are rather sensitively +% interdependent. Choice of 10000 pt for rightskip is derived by +% saying, let's use a value smaller than 1 fil and smaller than +% \cs{hsize}, but more than half of \cs{hsize} so that if a line +% is nearly empty, the glue stretch factor will always be less than 2.0 +% and so the badness will be less than 100 and so \tex will not issue +% badness warnings. +% \begin{macrocode} + \linepenalty\@m + \rightskip\z@\@plus\@M\p@ \leftskip\z@skip \parfillskip\z@skip + \clubpenalty\@ne \widowpenalty\z@ \interlinepenalty\z@ +% \end{macrocode} +% After a relation symbol is discovered, binop symbols should start +% including a special offset space. +% But until then \cs{EQ@prebin@space} is a no-op. +% \begin{macrocode} + \global\let\EQ@prebin@space\relax +% \end{macrocode} +% Set binoppenalty and relpenalty high to prohibit line breaks +% after mathbins and mathrels. As a matter of fact, the penalties are +% then omitted by \tex , since bare glue without a penalty is +% \emph{not} a valid breakpoint if it occurs within +% mathon\ndash mathoff items. +% \begin{macrocode} + \binoppenalty\@M \relpenalty\@M +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{figure} +% \centering +% The contents of an equation after the initial typesetting pass, +% as shown by \cs{showlists}. This is the material on which the +% \cs{eq@repack} function operates. The equation was +% \begin{literalcode} +% a=b +\left(\frac{c\sp 2}{2} -d\right) +(e -f) +g +% \end{literalcode} +% . The contents are shown in four parts in this figure and the next +% three. The first part contains two line boxes, one for the mathon +% node and one for the LHS. +% \begin{literalcode} +% \hbox(0.0+0.0)x16383.99998, glue set 1.6384 +% .\mathon +% .\penalty -10000 +% .\glue(\rightskip) 0.0 plus 10000.0 +% \penalty 1 +% \glue(\baselineskip) 7.69446 +% \hbox(4.30554+0.0)x16383.99998, glue set 1.63759 +% .\OML/cmm/m/it/10 a +% .\glue 2.77771 minus 1.11108 +% .\penalty -10001 +% .\glue(\rightskip) 0.0 plus 10000.0 +% \penalty 2 +% \glue(\lineskip) 1.0 +% ... +% \end{literalcode} +% \caption{Preliminary equation contents, part 1} +% \end{figure} +% \begin{figure}\centering +% This is the first part of the RHS, up to the +% \cs{right}, where a line break has been forced so that we can break +% open the left-right box. +% \begin{literalcode} +% ... +% \penalty 2 +% \glue(\lineskip) 1.0 +% \hbox(14.9051+9.50012)x16383.99998, glue set 1.63107 +% .\penalty -99 +% .\glue(\thickmuskip) 2.77771 minus 1.11108 +% .\OT1/cmr/m/n/10 = +% .\glue(\thickmuskip) 2.77771 minus 1.11108 +% .\OML/cmm/m/it/10 b +% .\penalty 888 +% .\glue -10.5553 +% .\rule(*+*)x0.0 +% .\penalty 10000 +% .\glue 10.5553 +% .\glue(\medmuskip) 2.22217 minus 1.66663 +% .\OT1/cmr/m/n/10 + +% .\glue(\medmuskip) 2.22217 minus 1.66663 +% .\hbox(14.9051+9.50012)x43.36298 +% ..\hbox(0.39998+23.60025)x7.36115, shifted -14.10013 +% ...\OMX/cmex/m/n/5 \hat \hat R +% ..\hbox(14.9051+6.85951)x11.21368 +% ...\hbox(14.9051+6.85951)x11.21368 +% ... [fraction contents, elided] +% ..\penalty 5332 +% ..\glue -10.5553 +% ..\rule(*+*)x0.0 +% ..\penalty 10000 +% ..\glue 10.5553 +% ..\glue(\medmuskip) 2.22217 minus 1.66663 +% ..\OMS/cmsy/m/n/10 \hat \hat @ +% ..\glue(\medmuskip) 2.22217 minus 1.66663 +% ..\OML/cmm/m/it/10 d +% ..\hbox(0.39998+23.60025)x7.36115, shifted -14.10013 +% ...\OMX/cmex/m/n/5 \hat \hat S +% .\penalty -10000 +% .\glue(\rightskip) 0.0 plus 10000.0 +% \penalty 3 +% \glue(\lineskip) 1.0 +% ... +% \end{literalcode} +% \caption{Preliminary equation contents, part 2} +% \end{figure} +% +% \begin{figure} +% \centering +% This is the remainder of the RHS after the post-\cs{right} +% split. +% \begin{literalcode} +% ... +% \penalty 3 +% \glue(\lineskip) 1.0 +% \hbox(7.5+2.5)x16383.99998, glue set 1.63239 +% .\penalty 888 +% .\glue -10.5553 +% .\rule(*+*)x0.0 +% .\penalty 10000 +% .\glue 10.5553 +% .\glue(\medmuskip) 2.22217 minus 1.66663 +% .\OT1/cmr/m/n/10 + +% .\glue(\medmuskip) 2.22217 minus 1.66663 +% .\OT1/cmr/m/n/10 ( +% .\OML/cmm/m/it/10 e +% .\penalty 5332 +% .\glue -10.5553 +% .\rule(*+*)x0.0 +% .\penalty 10000 +% .\glue 10.5553 +% .\glue(\medmuskip) 2.22217 minus 1.66663 +% .\OMS/cmsy/m/n/10 \hat \hat @ +% .\glue(\medmuskip) 2.22217 minus 1.66663 +% .\OML/cmm/m/it/10 f +% .\kern1.0764 +% .\OT1/cmr/m/n/10 ) +% .\penalty 888 +% .\glue -10.5553 +% .\rule(*+*)x0.0 +% .\penalty 10000 +% .\glue 10.5553 +% .\glue(\medmuskip) 2.22217 minus 1.66663 +% .\OT1/cmr/m/n/10 + +% .\glue(\medmuskip) 2.22217 minus 1.66663 +% .\OML/cmm/m/it/10 g +% .\kern0.35878 +% .\penalty -10000 +% .\glue(\rightskip) 0.0 plus 10000.0 +% \glue(\baselineskip) 9.5 +% ... +% \end{literalcode} +% \caption{Preliminary equation contents, part 3} +% \end{figure} +% +% \begin{figure} +% \centering +% This is the mathoff fragment. +% \begin{literalcode} +% ... +% \glue(\baselineskip) 9.5 +% \hbox(0.0+0.0)x16383.99998, glue set 1.6384 +% .\mathoff +% .\penalty 10000 +% .\glue(\parfillskip) 0.0 +% .\glue(\rightskip) 0.0 plus 10000.0 +% \end{literalcode} +% \caption{Preliminary equation contents, part 4} +% \end{figure} +% +% \begin{macro}{\eq@capture} +% \begin{macro}{\eq@punct} +% If an equation ends with a \cs{right} delim, the last thing +% on the math list will be a force-break penalty. Then don't +% redundantly add another forcing penalty. (question: when does a +% penalty after a linebreak not disappear? Answer: when you have +% two forced break penalties in a row). Ending punctuation, if +% any, goes into the last box with the mathoff kern. If the math list +% ends with a slanted letter, then there will be an italic correction +% added after it by \tex . Should we remove it? I guess +% so. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Capturing the equation +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% BRM: There's a problem here (or with \cs{ss@scan}). If the LHS has +% \cs{left} \cs{right} pairs, \ss@scan gets involved. It seems to produce +% a separate box marked w/\cs{penalty} 3. But it appears that \cs{eq@repack} +% is only expecting a single box for the LHS; when it measures that +% box it's missing the (typically larger) bracketted section, +% so the LHS is measured => 0pt (or very small). +% I'm not entirely clear what Michael had in mind for this case; +% whether it's an oversight, or whether I've introduced some other bug. +% At any rate, my solution is to measure the RHS (accumulated in \cs{EQ@box}), +% at the time of the relation, and subtract that from the total size. +% \begin{macrocode} +\newdimen\eq@wdR\eq@wdR\z@%BRM +\def\eq@capture{% + \ifnum\lastpenalty>-\@M \penalty-\@Mi \fi +% \end{macrocode} +% We want to keep the mathoff kern from vanishing at the line break, +% so that we can reuse it later. +% \begin{macrocode} + \keep@glue\@@endmath + \eq@addpunct + \@@par + \eq@wdL\z@ +% \end{macrocode} +% First snip the last box, which contains the mathoff node, and put it +% into \cs{EQ@box}. Then when we call \cs{eq@repack} it +% will recurse properly. +% \begin{macrocode} + \setbox\tw@\lastbox + \global\setbox\EQ@box\hbox{\unhbox\tw@\unskip\unskip\unpenalty}% + \unskip\unpenalty + \global\setbox\EQ@copy\copy\EQ@box +%% \global\setbox\EQ@vimcopy\copy\EQ@vimbox + \clubpenalty\z@ +%\batchmode\showboxbreadth\maxdimen\showboxdepth99\showlists\errorstopmode + \eq@wdR\z@%BRM: eq@wdL patch + \eq@repack % recursive +% \end{macrocode} +% Finally, add the mathon item to \cs{EQ@box} and \cs{EQ@copy}. +% \begin{macrocode} + \setbox\tw@\lastbox + \global\setbox\EQ@box\hbox{\unhcopy\tw@\unskip\unpenalty \unhbox\EQ@box}% + \global\setbox\EQ@copy\hbox{\unhbox\tw@\unskip\unpenalty \unhbox\EQ@copy}% +%\batchmode\showbox\EQ@copy \showthe\eq@wdL\errorstopmode + \ifdim\eq@wdR>\z@% BRM: eq@wdL patch + \setlength\dim@a{\wd\EQ@box-\eq@wdR + % Apparently missing a \thickmuskip = 5mu = 5/18em=0.27777777777.. ? + + 0.2777777777777em}% FUDGE??!?!?! + \ifdim\dim@a>\eq@wdL + \debugmsg{Correcting LHS from \the\eq@wdL\space to \the\dim@a = \the\wd\EQ@box - \the\eq@wdR}% + \eq@wdL\dim@a + \xdef\EQ@setwdL{\eq@wdL\the\eq@wdL\relax}% + \fi + \fi + \debugmsg{Capture: total length=\the\wd\EQ@box + ^^J||===== has LHS=\theb@@le\EQ@hasLHS, \eq@wdL=\the\eq@wdL, \eq@wdR=\the\eq@wdR, + ^^J||===== \eq@wdCond=\the\eq@wdCond}% + \egroup % end vbox started earlier +%\debugwr{EQ@box}\debug@box\EQ@box +%\debugwr{EQ@copy}\debug@box\EQ@copy +} +% \end{macrocode} +% Now we have two copies of the equation, one in \cs{EQ@box}, +% and one in \cs{EQ@copy} with inconvenient stuff like inserts and +% marks omitted. +% +% \cs{eq@addpunct} is for tacking on text punctuation at the end +% of a display, if any was captured by the \quoted{gp} lookahead. +% \begin{macrocode} +\def\eq@addpunct{% + \ifx\found@punct\@empty + \else \eqpunct{\found@punct}% + \fi + % BRM: Added; the punctuation kept getting carried to following environs + \xdef\found@punct{\@empty}% + \EQ@afterspace +} +% \end{macrocode} +% Needed for the \env{dseries} environment, among other things. +% \begin{macrocode} +\global\let\EQ@afterspace\@empty +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% +% \begin{macro}{\eq@repack} +% The \cs{eq@repack} function looks at the information at hand +% and proceeds accordingly. +% +% TeX Note: this scans BACKWARDS from the end of the math. +% \begin{macrocode} +\def\eq@repack{% +% A previous penalty of 3 on the vertical list means that we need +% to break open a left-right box. +% \begin{macrocode} + \ifcase\lastpenalty + % case 0: normal case + \setbox\tw@\lastbox + \eq@repacka\EQ@copy \eq@repacka\EQ@box + \unskip + \or % case 1: finished recursing +% \end{macrocode} +% Grab the mathon object since we need it to inhibit line breaking at +% bare glue nodes later. +% \begin{macrocode} + \unpenalty + \setbox\tw@\lastbox + \eq@repacka\EQ@copy \eq@repacka\EQ@box + \@xp\@gobble + \or % case 2: save box width = LHS width +% \end{macrocode} +% Don't need to set \cs{EQ@hasLHS} here because it was set earlier +% if applicable. +% \begin{macrocode} + \unpenalty + \setbox\tw@\lastbox + \setbox\z@\copy\tw@ \setbox\z@\hbox{\unhbox\z@\unskip\unpenalty}% + \addtolength\eq@wdL{\wd\z@} + \setlength\eq@wdR{\wd\EQ@box}% BRM: eq@wdL patch + \xdef\EQ@setwdL{\eq@wdL\the\eq@wdL\relax}% +% \end{macrocode} +% At this point, box 2 typically ends with +% \begin{literalcode} +% .\mi10 a +% .\glue 2.77771 plus 2.77771 +% .\penalty -10001 +% .\glue(\rightskip) 0.0 plus 10000.0 +% \end{literalcode} +% and we want to ensure that the thickmuskip glue gets removed. +% And we now arrange for \cs{EQ@copy} and \cs{EQ@box} to +% keep the LHS in a separate subbox; this is so that we can introduce a +% different penalty before the first relation symbol if necessary, +% depending on the layout decisions that are made later. +% \begin{macrocode} + \global\setbox\EQ@copy\hbox{% + \hbox{\unhcopy\tw@\unskip\unpenalty\unskip}% + \box\EQ@copy + }% + \global\setbox\EQ@box\hbox{% + \hbox{\unhbox\tw@\unskip\unpenalty\unskip}% + \box\EQ@box + }% + \unskip + \or % case 3: unpack left-right box + \unpenalty + \eq@lrunpack + \else + \breqn@repack@err + \fi + \eq@repack % RECURSE +} +% \end{macrocode} +% Error message extracted to streamline calling function. +% \begin{macrocode} +\def\breqn@repack@err{% + \PackageError{breqn}{eq@repack penalty neq 0,1,2,3}\relax +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\eq@repacka} +% We need to transfer each line into two separate boxes, one +% containing everything and one that omits stuff like \cs{insert}s +% that would interfere with measuring. +% \begin{macrocode} +\def\eq@repacka#1{% + \global\setbox#1\hbox{\unhcopy\tw@ \unskip + \count@-\lastpenalty + \ifnum\count@<\@M \else \advance\count@-\@M \fi + \unpenalty +% \end{macrocode} +% If creating the measure copy, ignore all cases above case 3 by +% folding them into case 1. +% \begin{macrocode} + \ifx\EQ@copy#1\ifnum\count@>\thr@@ \count@\@ne\fi\fi + \ifcase\count@ + % case 0, normal line break + \penalty-\@M % put back the linebreak penalty + \or % case 1, do nothing (end of equation) + \relax + \or % case 2, no-op (obsolete case) + \or % case 3, transfer vspace and/or penalty + \ifx#1\EQ@box \eq@revspace \else \eq@revspaceb \fi + \or % case 4, put back an insert + \eq@reinsert + \or % case 5, put back a mark + \eq@remark + \or % case 6, put back a vadjust + \eq@readjust + \else % some other break penalty + \penalty-\count@ + \fi + \unhbox#1}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\eq@nulldisplay} +% Throw in a null display in order to get predisplaysize \etc . +% My original approach here was to start the null display, then measure +% the equation, and set a phantom of the equation's first line before +% ending the null display. That would allow finding out if \tex used +% the short displayskips instead of the normal ones. But because of +% some complications with grouping and the desirability of omitting +% unnecessary invisible material on the vertical list, it seems better to +% just collect information about the display (getting \cs{prevdepth} +% requires \cs{halign}) and manually perform our own version of +% \TeX's shortskip calculations. This approach also gives greater +% control, \eg , the threshold amount of horizontal space between +% predisplaysize and the equation's left edge that determines when the +% short skips kick in becomes a designer-settable parameter rather than +% hardwired into \TeX . +% \begin{macrocode} +\def\eq@nulldisplay{% + \begingroup \frozen@everydisplay\@emptytoks + \@@display + \predisplaypenalty\@M \postdisplaypenalty\@M + \abovedisplayskip\z@skip \abovedisplayshortskip\z@skip + \belowdisplayskip\z@skip \belowdisplayshortskip\z@skip + \xdef\EQ@displayinfo{% + \prevgraf\the\prevgraf \predisplaysize\the\predisplaysize + \displaywidth\the\displaywidth \displayindent\the\displayindent + \listwidth\the\linewidth +% \end{macrocode} +% Not sure how best to test whether leftmargin should be +% added. Let's do this for now [mjd,1997/10/08]. +% \begin{macrocode} + \ifdim\displayindent>\z@ + \advance\listwidth\the\leftmargin + \advance\listwidth\the\rightmargin + \fi + \relax}% +% \end{macrocode} +% An \cs{halign} containing only one \cs{cr} (for the +% preamble) puts no box on the vertical list, which means that no +% \cs{baselineskip} will be added (so we didn't need to set it to +% zero) and the previous value of prevdepth carries through. Those +% properties do not hold for an empty simple equation without +% \cs{halign}. +% \begin{macrocode} + \halign{##\cr}% + \@@enddisplay + \par + \endgroup + \EQ@displayinfo +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\eq@newline} +% \begin{macro}{\eq@newlinea} +% \begin{macro}{\eq@newlineb} +% Here we use \cs{@ifnext} so that in a sequence like +% \begin{literalcode} +% ...\\ +% [a,b] +% \end{literalcode} +% \latex does not attempt to interpret the \verb"[a,b]" as a +% vertical space amount. We would have used \cs{eq@break} in the +% definition of \cs{eq@newlineb} except that it puts in a +% \cs{keep@glue} object which is not such a good idea if a mathbin +% symbol follows \mdash the indent of the mathbin will be wrong because +% the leading negative glue will not disappear as it should at the line +% break. +% \begin{macrocode} +\def\eq@newline{% + \@ifstar{\eq@newlinea\@M}{\eq@newlinea\eqinterlinepenalty}} +\def\eq@newlinea#1{% + \@ifnext[{\eq@newlineb{#1}}{\eq@newlineb{#1}[\maxdimen]}} +\def\eq@newlineb#1[#2]{\penalty-\@M} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\eq@revspace} +% \begin{macro}{\eq@revspaceb} +% When \cs{eq@revspace} (re-vspace) is called, we are the +% end of an equation line; we need to remove the existing penalty of +% $-10002$ in order to put a vadjust object in front of it, then put +% back the penalty so that the line break will still take place in the +% final result. +% \begin{macrocode} +\def\eq@revspace{% + \global\setbox\EQ@vimbox\vbox{\unvbox\EQ@vimbox + \unpenalty + \global\setbox\@ne\lastbox}% + \@@vadjust{\unvbox\@ne}% + \penalty-\@M +} +% \end{macrocode} +% The b version is used for the \cs{EQ@copy} box. +% \begin{macrocode} +\def\eq@revspaceb{% + \global\setbox\EQ@vimcopy\vbox{\unvbox\EQ@vimcopy + \unpenalty + \global\setbox\@ne\lastbox}% + \@@vadjust{\unvbox\@ne}% + \penalty-\@M +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\eq@break} +% The function \cs{eq@break} does a preliminary linebreak with +% a flag penalty. +% \begin{macrocode} +\def\eq@break#1{\penalty-1000#1 \keep@glue} +% \end{macrocode} +% \end{macro} +% +% +% +% +% \section{Choosing optimal line breaks} +% The question of what line width to use when breaking an +% equation into several lines is best examined in the light of an extreme +% example. Suppose we have a two-column layout and a displayed +% equation falls inside a second-level list with nonzero leftmargin and +% rightmargin. Then we want to try in succession a number of +% different possibilities. In each case if the next possibility is +% no wider than the previous one, skip ahead to the one after. +% \begin{enumerate} +% \item First try linewidth(2), the linewidth for the current +% level-2 list. +% +% +% \item If we cannot find adequate linebreaks at that width, next try +% listwidth(2), the sum of leftmargin, linewidth, and rightmargin for +% the current list. +% +% +% \item If we cannot find linebreaks at that width, next try linewidth +% (1) (skipping this step if it is no larger then +% listwidth(2)). +% +% +% \item If we cannot find linebreaks at that width, next try +% listwidth(1). +% +% +% \item If we cannot find linebreaks at that width, next try column +% width. +% +% +% \item If we cannot find linebreaks at that width, next try text +% width. +% +% +% \item If we cannot find linebreaks at that width, next try equation +% width, if it exceeds text width (\ie , if the style allows equations +% to extend into the margins). +% +% +% \end{enumerate} +% +% +% \begin{figure} +% \centering +% needs work +% \caption{first-approximation parshape for equations}\label{f:parshape-1} +% \end{figure} +% +% At any given line width, we run through a series of parshape +% trials and, essentially, use the first one that gives decent line +% breaks. +% But the process is a bit more complicated in fact. +% In order to do a really good job of setting up the parshapes, we +% need to know how many lines the equation will require. +% And of course the number of lines needed depends on the parshape! +% So as our very first trial we run a simple first-approximation +% parshape (Figure~\ref{f:parshape-1}) whose +% main purpose is to get an estimate on the number of lines that will be +% needed; it chooses a uniform indent for all lines after the first one +% and does not take any account of the equation number. +% A substantial majority of equations only require one line anyway, +% and for them this first trial will succeed. +% In the one-line case if there is an equation number and it doesn't +% fit on the same line as the equation body, we don't go on to other +% trials because breaking up the equation body will not gain us +% anything\mdash we know that we'll have to use two lines in any case +% \mdash so we might as well keep the equation body together on one line +% and shift the number to a separate line. +% +% If we learn from the first trial that the equation body +% requires more than one line, the next parshape trial involves adjusting +% the previous parshape to leave room for the equation number, if +% present. If no number is present, again no further trials are +% needed. +% +% Some remarks about parshape handling. The \tex +% primitive doesn't store the line specs anywhere, \verb"\the\parshape" +% only returns the number of line specs. This makes it well nigh +% impossible for different packages that use \cs{parshape} to work +% together. Not that it would be terribly easy for the package +% authors to make inter-package collaboration work, if it were +% possible. If we optimistically conjecture that +% someone some day may take on such a task, then the thing to do, +% obviously, is provide a parshape interface that includes a record of all +% the line specs. For that we designate a macro \cs{@parshape} +% which includes not only the line specs, but also the line count and even +% the leading \cs{parshape} token. +% This allows it to be directly executed without an auxiliary if-empty +% test. It should include a trailing \cs{relax} when it has a +% nonempty value. +% \begin{macrocode} +\let\@parshape\@empty +% \end{macrocode} +% +% +% The function \cs{eq@measure} runs line-breaking trials +% on the copy of the equation body that is stored in the box register +% \cs{EQ@copy}, trying various possible layouts in order of +% preference until we get successful line breaks, where \quoted{successful} +% means there were no overfull lines. The result of the trials is, +% first, a parshape spec that can be used for typesetting the real +% equation body in \cs{EQ@box}, and second, some information that +% depends on the line breaks such as the depth of the last line, the +% height of the first line, and positioning information for the equation +% number. The two main variables in the equation layout are the line +% width and the placement of the equation number, if one is present. +% +% +% \begin{macro}{\eq@measure} +% Run linebreak trials on the equation contents and measure the +% results. +% \begin{macrocode} +\def\eq@measure{% +% \end{macrocode} +% If an override value is given for indentstep in the env options, use +% it. +% \begin{macrocode} + \ifdim\eq@indentstep=\maxdimen \eq@indentstep\eqindentstep \fi +% \end{macrocode} +% If \cs{eq@linewidth} is nonzero at this point, it means that +% the user specified a particular target width for this equation. +% In that case we override the normal list of trial widths. +% \begin{macrocode} + \ifdim\eq@linewidth=\z@ \else \edef\eq@linewidths{{\the\eq@linewidth}}\fi + \begingroup \eq@params + \leftskip\z@skip +% \end{macrocode} +% Even if \cs{hfuzz} is greater than zero a box whose contents +% exceed the target width by less then hfuzz still has a reported badness +% value of 1000000 (infinitely bad). Because we use inf-bad +% to test whether a particular trial succeeds or fails, we want to make +% such boxes return a smaller badness. To this end we include an +% \cs{hfuzz} allowance in \cs{rightskip}. In fact, +% \cs{eq@params} ensures that \cs{hfuzz} for equations is at +% least 1pt. +% \begin{macrocode} + \rightskip\z@\@plus\columnwidth\@minus\hfuzz +% \eqinfo + \global\EQ@continue{\eq@trial}% + \eq@trial % uses \eq@linewidths + \eq@failout % will be a no-op if the trial succeeded + \endgroup +% \end{macrocode} +% \quoted{local} parameter settings are passed outside the endgroup through +% \cs{EQ@trial}. +% \begin{macrocode} + \EQ@trial +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\def\debug@showmeasurements{% + \debugmsg{=> \number\eq@lines\space lines}% + \debug + \def\@elt##1^^J##2{^^J||===== \space\space##1/##2}% + \let\@endelt\@empty + \debugmsg{=> trial info:\eq@measurements}% + \debugmsg{=> bounding box: \the\eq@wdT x\the\eq@vspan, badness=\the\eq@badness}% + \let\@elt\relax \let\@endelt\relax + \gubed +} +\def\debug@showmeasurements{% + \begingroup + \def\@elt##1^^J##2{^^J||===== ##1/##2}% + \let\@endelt\@empty + \debugmsg{===> Measurements: \number\eq@lines\space lines + \eq@measurements + ^^J||===== bounding box: \the\eq@wdT x\the\eq@vspan, badness=\the\eq@badness + ^^J||===== \leftskip=\the\leftskip, \rightskip=\the\rightskip}% + \endgroup +} +% \end{macrocode} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Layout Trials Driver +% Basically, trying different sequences of parshapes. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \begin{macro}{\EQ@trial} +% Init. +% \begin{macrocode} +\let\EQ@trial\@empty +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\EQ@continue} +% This is a token register used to carry trial info past a +% group boundary with only one global assignment. +% \begin{macrocode} +\newtoks\EQ@continue +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\EQ@widths} +% This is used for storing the actual line-width info of the equation +% contents after breaking. +% \begin{macrocode} +\let\EQ@widths\@empty +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EQ@fallback} +% \begin{macrocode} +\let\EQ@fallback\@empty +% \end{macrocode} +% \end{macro} +% \begin{macro}{\eq@linewidths} +% This is the list of target widths for line breaking. +% +%======================================== +% BRM: Odd; I don't think I've seen this use anything but \cs{displaywidth}... +% \begin{macrocode} +\def\eq@linewidths{\displaywidth\linewidth\columnwidth} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\eq@trial} +% +% The \cs{eq@trial} function tries each candidate +% line width in \cs{eq@linewidths} until an equation layout is found +% that yields satisfactory line breaks. +% \begin{macrocode} +\def\eq@trial{% + \ifx\@empty\eq@linewidths + \global\EQ@continue{}% + \else + \iffalse{\fi \@xp\eq@trial@a \eq@linewidths}% + \fi + \the\EQ@continue +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\eq@trial@a} +% The \cs{eq@trial@a} function reads the leading line +% width from \cs{eq@linewidths}; if the new line width is greater +% than the previous one, start running trials with it; otherwise do +% nothing with it. +% Finally, run a peculiar \cs{edef} that leaves +% \cs{eq@linewidths} redefined to be the tail of the list. +% If we succeed in finding satisfactory line breaks +% for the equation, we will reset \cs{EQ@continue} in such a +% way that it will terminate the current trials. +% An obvious branch here would be to check whether the width of +% \cs{EQ@copy} is less than \cs{eq@linewidth} and go immediately +% to the one-line case if so. +% However, if the equation contains more than one RHS, by +% default each additional RHS starts on a new line\mdash \ie , we want +% the ladder layout anyway. +% So we choose the initial trial on an assumption of multiple lines +% and leave the one-line case to fall out naturally at a later point. +% \begin{macrocode} +\def\eq@trial@a#1{% + \dim@c#1\relax + \if T\eq@frame \eq@frame@adjust\dim@c \fi + \ifdim\dim@c>\eq@linewidth + \eq@linewidth\dim@c + \debugmsg{Choose Shape for width(#1)=\the\eq@linewidth}% + \let\eq@trial@b\eq@trial@d + \csname eq@try@layout@\eq@layout\endcsname + \else + \debugmsg{Next width (#1) is shorter; skip it}% + \fi + \edef\eq@linewidths{\iffalse}\fi +} +\def\eq@frame@adjust#1{% + \addtolength#1{-2\eq@framewd-2\eq@framesep}% +} +% \end{macrocode} +% \end{macro} +%======================================== +% Note curious control structure. +% Try to understand interaction of \cs{EQ@fallback}, \cs{EQ@continue}, +% \cs{eq@failout} +% \begin{macrocode} +\def\eq@trial@succeed{% + \aftergroup\@gobbletwo % cancel the \EQ@fallback code; see \eq@trial@c (?) + \global\EQ@continue{\eq@trial@done}% +} +% \end{macrocode} +% \begin{macro}{\eq@trial@done} +% Success. +% \begin{macrocode} +\def\eq@trial@done{% + \debugmsg{End trial: Success!}% + \let\eq@failout\relax +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\eq@trial@init} +% This is called from \cs{eq@trial@b} to initialize or +% re-initialize certain variables as needed when running one or more +% trials at a given line width. +% By default assume success, skip the fallback code. +% \begin{macrocode} +\def\eq@trial@init{\global\let\EQ@fallback\eq@nextlayout} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\eq@nextlayout} +% +% In the fallback case cancel the current group to avoid unnecessary +% group nesting (with associated save-stack cost, \etc ). +% \begin{macrocode} +\def\eq@nextlayout#1{% + \endgroup + \debugmsg{Nope ... that ain't gonna work.}% + \begingroup #1% +} +% \end{macrocode} +% +% \end{macro} +% \begin{macro}{\eq@failout} +% +% . +% \begin{macrocode} +\def\eq@failout{% +\debugmsg{End trial: failout}% + \global\let\EQ@trial\EQ@last@trial +} +% \end{macrocode} +% +% \end{macro} +% \begin{macro}{\eq@trial@save} +% +% Save the parameters of the current trial. +% \begin{macrocode} +\def\eq@trial@save#1{% +% \debug \def\@elt##1^^J##2{^^J||===== \space\space##1/##2}\let\@endelt\@empty\debugmsg{=> trial info:\eq@measurements}% +% \debugmsg{=> bounding box: \the\eq@wdT x\the\eq@vspan, badness=\the\eq@badness^^J}% +% \let\@elt\relax \let\@endelt\relax +% \gubed + \xdef#1{% + \eq@linewidth\the\eq@linewidth + % save info about the fit + \eq@lines\the\eq@lines \eq@badness\the\eq@badness \def\@nx\eq@badline{\eq@badline}% + % save size info + \eq@wdT\the\eq@wdT \eq@wdMin\the\eq@wdMin + \eq@vspan\the\eq@vspan \eq@dp\the\eq@dp \eq@firstht\the\eq@firstht + % save info about the LHS + \eq@wdL\the\eq@wdL \def\@nx\EQ@hasLHS{\EQ@hasLHS}% + % save info about the numbering + \def\@nx\eq@hasNumber{\eq@hasNumber}% + % save info about the chosen layout + \def\@nx\eq@layout{\eq@layout}% + \def\@nx\eq@parshape{\@parshape}% + \def\@nx\eq@measurements{\eq@measurements}% + \def\@nx\adjust@rel@penalty{\adjust@rel@penalty}% + \def\@nx\eq@shiftnumber{\eq@shiftnumber}% + \def\@nx\eq@isIntertext{\@False}% + }% +} +% \end{macrocode} +% +% \end{macro} +% \begin{macro}{\eq@trial@b} +% +% By default this just runs \cs{eq@trial@c}; \cf +% \cs{eq@trial@d}. +% \begin{macrocode} +\def\eq@trial@b{\eq@trial@c} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\eq@trial@c} +% +% Run the equation contents through the current parshape. +% \begin{macrocode} +\def\eq@trial@c#1#2{% + \debugmsg{Trying layout "#1" with^^J||===== parshape\space\@xp\@gobble\@parshape}% + \begingroup + \eq@trial@init + \def\eq@layout{#1}% + \setbox\z@\vbox{% + \hfuzz\maxdimen + \eq@trial@p % run the given parshape + \if\@Not{\eq@badline}% + \eq@trial@save\EQ@trial +% \end{macrocode} +% If there is a number, try the same parshape again with adjustments +% to make room for the number. +% +% This is an awkward place for this: +% It only allows trying to fit the number w/the SAME layout shape! +% \begin{macrocode} + \if\eq@hasNumber\eq@retry@with@number\fi + \if L\eq@layout \eq@check@density + \else + \if\@Not{\eq@badline}% + \eq@trial@succeed + \fi + \fi + \else + \eq@trial@save\EQ@last@trial + \fi + }% + \EQ@fallback{#2}% + \endgroup +} +% \end{macrocode} +% +% \end{macro} +% \begin{macro}{\eq@trial@d} +% \begin{macrocode} +\def\eq@trial@d#1#2{\eq@trial@c{#1}{}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\eq@check@density} +% +% \begin{macrocode} +\def\eq@check@density{% + \debugmsg{Checking density for layout L}% + \if\@Or{\@Not\EQ@hasLHS}{\eq@shortLHS}% + \debugmsg{Density check: No LHS, or is short; OK}% + \eq@trial@succeed + \else\if\eq@dense@enough + \eq@trial@succeed + \fi\fi +} +% \end{macrocode} +% +% \end{macro} +% +% \begin{macro}{\eq@shortLHS} +% +% Test to see if we need to apply the \cs{eq@dense@enough} test. +% \begin{macrocode} +\def\eq@shortLHS{\ifdim\eq@wdL>.44\eq@wdT 1\else 0\fi 0} +% \end{macrocode} +% +% \end{macro} +%\verb|\def\eq@shortLHS{\@False}| +%======================================== +% \begin{macro}{\eq@trial@p} +% Run a trial with the current \cs{@parshape} and measure it. +% \begin{macrocode} +\def\eq@trial@p{% + \@parshape % + \eq@dump@box\unhcopy\EQ@copy + {\@@par}% leave \parshape readable + \eq@lines\prevgraf + \eq@fix@lastline + \let\eq@badline\@False + \if i\eq@layout \ifnum\eq@lines>\@ne \let\eq@badline\@True \fi\fi + \eq@curline\eq@lines % loop counter for eq@measure@lines + \let\eq@measurements\@empty + \eq@ml@record@indents + \eq@measure@lines + \eq@recalc + \debug@showmeasurements +} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\adjust@rel@penalty} +% +% Normally this is a no-op. +% \begin{macrocode} +\let\adjust@rel@penalty\@empty +% \end{macrocode} +% +% \end{macro} +% \begin{macro}{\eq@fix@lastline} +% Remove parfillskip from the last line box. +% \begin{macrocode} +\def\eq@fix@lastline{% + \setbox\tw@\lastbox \dim@b\wd\tw@ + \eq@dp\dp\tw@ +% \end{macrocode} +% Remove \cs{parfillskip} but retain \cs{rightskip}. +% Need to keep the original line width for later shrink testing. +% \begin{macrocode} + \nointerlineskip\hbox to\dim@b{\unhbox\tw@ + \skip@c\lastskip \unskip\unskip\hskip\skip@c + }% +} +% \end{macrocode} +% +% \end{macro} +% \begin{macro}{\eq@recalc} +% +% Calculate \cs{eq@wdT} et cetera. +% \begin{macrocode} +\def\eq@recalc{% + \eq@wdT\z@ \eq@wdMin\maxdimen \eq@vspan\z@skip \eq@badness\z@ + \let\@elt\eq@recalc@a \eq@measurements \let\@elt\relax +} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\eq@recalc@a} +% +% \begin{macrocode} +\def\eq@recalc@a#1x#2+#3\@endelt{% + \eq@firstht#2\relax + \let\@elt\eq@recalc@b + \@elt#1x#2+#3\@endelt +} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\eq@recalc@b} +% +% \begin{macrocode} +\def\eq@recalc@b#1^^J#2,#3x#4+#5@#6\@endelt{% + \setlength\dim@a{#2+#3}% + \ifdim\dim@a>\eq@wdT \eq@wdT\dim@a \fi + \ifdim\dim@a<\eq@wdMin \eq@wdMin\dim@a \fi + \eq@dp#5\relax + \addtolength\eq@vspan{#1+#4+#5}% +% \end{macrocode} +% Record the max badness of all the lines in \cs{eq@badness}. +% \begin{macrocode} + \ifnum#6>\eq@badness \eq@badness#6\relax\fi +} +% \end{macrocode} +% +% \end{macro} +% \begin{macro}{\eq@layout} +% +% A value of \verb"?" for \cs{eq@layout} means that we should +% deduce which layout to use by looking at the size of the components. +% Any other value means we have a user-specified override on the +% layout. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Layout Definitions. +% Based on initial equation measurements, we can choose a sequence of +% candidate parshapes that the equation might fit into. +% We accept the first shape that `works', else fall to next one. +% [The sequence is hardcoded in the \cs{eq@try@layout@} +% Would it be useful be more flexible? (eg. try layouts LDA, in order...)] +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \begin{macrocode} +\def\eq@layout{?} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\eq@try@layout@?} +% +% This is a branching function used to choose a suitable layout if +% the user didn't specify one in particular. +% +% Default layout: +% Try Single line layout first, else try Multiline layouts +% \begin{macrocode} +\@namedef{eq@try@layout@?}{% + \let\eq@trial@b\eq@trial@c + \edef\@parshape{\parshape 1 0pt \the\eq@linewidth\relax}% +% \eq@trial@b{i}{\eq@try@layout@multi}% + \setlength\dim@a{\wd\EQ@copy-2em}% Fudge; can't shrink more than this? + % if we're in a numbered group, try hard to fit within the numbers + \dim@b\eq@linewidth + \if\eq@shiftnumber\else\if\eq@group + \if\eq@hasNumber\addtolength\dim@b{-\wd\EQ@numbox-\eqnumsep}% + \else\if\grp@hasNumber\addtolength\dim@b{-\wd\GRP@numbox-\eqnumsep}% + \fi\fi\fi\fi + \ifdim\dim@a<\dim@b% Do we even have a chance of fitting to one line? + \debugmsg{Choose Shape: (\the\wd\EQ@copy) may fit in \the\dim@b}% +%BRM% + % assuming it might fit, don't push too hard + \setlength\dim@b{\columnwidth-\dim@a+\eq@wdCond}% + \rightskip\z@\@plus\dim@b\@minus\hfuzz +% + \eq@trial@b{i}{\eq@try@layout@multi}% + \else + \debugmsg{Choose Shape: Too long (\the\wd\EQ@copy) for one line (free width=\the\dim@b)}% + \eq@try@layout@multi + \fi +} +% \end{macrocode} +% Layout Multiline layout: +% If no LHS, try Stepped(S) layout +% Else try Stepped(S), Ladder(L), Drop-ladder(D) or Stepladder(l), depending on LHS length. +% \begin{macrocode} +\def\eq@try@layout@multi{% + \if\EQ@hasLHS + \ifdim\eq@wdL>\eq@linewidth + \debugmsg{Choose Shape: LHS \the\eq@wdL > linewidth}% +% \end{macrocode} +% Find the total width of the RHS. +% If it is relatively short, a step layout is the thing to try. +% \begin{macrocode} + \setlength\dim@a{\wd\EQ@copy-\eq@wdL}% + \ifdim\dim@a<.25\eq@linewidth \eq@try@layout@S + \else \eq@try@layout@l + \fi + % BRM: Originally .7: Extreme for L since rhs has to wrap within the remaining 30+%! + \else\ifdim\eq@wdL>.50\eq@linewidth + \debugmsg{Choose Shape: LHS (\the\eq@wdL) > .50 linewidth (linewidth=\the\eq@linewidth)}% + \eq@try@layout@D + \else + \debugmsg{Choose Shape: LHS (\the\eq@wdL) not extraordinarily wide}% + \eq@try@layout@L + \fi\fi + \else + \debugmsg{Choose Shape: No LHS here}% +% \end{macrocode} +% Try one-line layout first, then step layout. +% \begin{macrocode} + \eq@try@layout@S % (already checked case i) + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\eq@try@layout@D} +% +% Change the penalty before the first mathrel symbol to encourage a +% break there. +% +% Layout D=Drop-Ladder Layout, for wide LHS. +% \begin{literalcode} +% LOOOOOOOONG LHS +% = RHS +% = ... +% \end{literalcode} +% If fails, try Almost-Columnar layout +% \begin{macrocode} +\def\eq@try@layout@D{% + \setlength\dim@a{\eq@linewidth -\eq@indentstep}% + \edef\@parshape{\parshape 2 + 0pt \the\eq@wdL\space \the\eq@indentstep\space \the\dim@a\relax + }% + \def\adjust@rel@penalty{\penalty-99 }% + \eq@trial@b{D}{\eq@try@layout@A}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\eq@try@layout@L} +% Try a straight ladder layout. +% Preliminary filtering ensures that \cs{eq@wdL} is less than 70% +% of the current line width. +% \begin{literalcode} +% Layout L=Ladder layout +% LHS = RHS +% = RHS +% ... +% \end{literalcode} +% If fails, try Drop-ladder layout. +% NOTE: This is great for some cases (multi relations?), but +% tends to break really badly when it fails.... +% \begin{macrocode} +\def\eq@try@layout@L{% + \setlength\dim@b{\eq@linewidth-\eq@wdL}% + \edef\@parshape{\parshape 2 0pt \the\eq@linewidth\space + \the\eq@wdL\space \the\dim@b\relax + }% + \eq@trial@b{L}{\eq@try@layout@D}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\eq@try@layout@S} +% +% In the \dquoted{stepped} layout there is no LHS, or LHS +% is greater than the line width and RHS is small. +% Then we want to split up the equation into lines of roughly equal +% width and stagger them downwards to the right, leaving a small amount of +% whitespace on both sides. +% But also, if there is an equation number, we want to try first a +% layout that leaves room for the number. +% Otherwise it would nearly always be the case that the number would +% get thrown on a separate line. +% +% Layout S=Stepped layout, typically no LHS or very long, variations on +% \begin{literalcode} +% STUFF .... +% + MORE STUFF ... +% + MORE STUFF ... +% \end{literalcode} +% If fails, try Almost-Columnar layout +% \begin{macrocode} +\def\eq@try@layout@S{% + \setlength\dim@b{\eq@linewidth-2\eqmargin}% \advance\dim@b-1em% +% \end{macrocode} +% About how many lines will we need if dim@b is the line width? +% \begin{macrocode} + \int@a\wd\EQ@copy \divide\int@a\dim@b +% \end{macrocode} +% Adjust the target width by number of lines times indentstep. +% We don't need to decrement \cs{int@a} because \tex +% division is integer division with truncation. +% \begin{macrocode} + \addtolength\dim@b{-\int@a\eq@indentstep}% +% \end{macrocode} +% Adjust for equation number. +% But try not to leave too little room for the equation body. +% \begin{macrocode} + \if\eq@hasNumber + \ifdim\dim@b>15em% +% \advance\dim@b-\eqnumsep \advance\dim@b-\wd\EQ@numbox + \addtolength\dim@b{-\eq@wdNum}% + \fi + \fi +% \end{macrocode} +% Now some hand-waving to set up the parshape. +% \begin{macrocode} + \int@b\z@ + \def\@tempa{\dim}% + \edef\@parshape{\parshape 2 0pt \the\dim@b\space + \the\eqmargin\space\the\dim@b\relax}% + \eq@trial@b{S}{\eq@try@layout@A}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\eq@try@layout@l} +% +% This is the \dquoted{step-ladder} layout: similar to the drop-ladder +% layout but the LHS is too wide and needs to be broken up. +% +% Layout l = Stepladder +% Similar to Drop-Ladder, but LHS is long and needs to be broken up. +% If fails, try Almost-Columnar layout +% \begin{macrocode} +\def\eq@try@layout@l{% + \setlength\dim@a{\eq@linewidth -\eq@indentstep}% + \int@a\eq@wdL \divide\int@a\dim@a + \advance\int@a\tw@ + \edef\@parshape{\parshape \number\int@a\space + 0pt \the\eq@linewidth + }% + \advance\int@a-\tw@ + \setlength\dim@b{2\eq@indentstep}% + \setlength\dim@c{\eq@linewidth -\dim@b}% + \edef\@parshape{\@parshape + \replicate{\int@a}{\space\the\eq@indentstep\space\the\dim@a}% + \space\the\dim@b\space\the\dim@c\relax + }% + \eq@trial@b{l}{\eq@try@layout@A}% +} +% \end{macrocode} +% +% \end{macro} +% +% \begin{macro}{\eq@try@layout@A} +% +% In the \dquoted{almost-columnar} layout, which is the layout of last +% resort, we let all lines run to the full width and leave the adjusting +% of the indents to later. +% +% Layout A = Almost-Columnar layout. +% Pretty much straight full width, more of a last-resort. +% If fails, give up. +% \begin{macrocode} +\def\eq@try@layout@A{% + \edef\@parshape{\parshape 1 0pt \the\eq@linewidth\relax}% + \if\EQ@hasLHS \def\adjust@rel@penalty{\penalty-99 }\fi + \eq@trial@b{A}{}% +} +% \end{macrocode} +% +% \end{macro} +% \begin{macro}{\eq@shiftnumber} +% MH: Should be moved to a section where all keys are set to defaults. +% \begin{macrocode} +\let\eq@shiftnumber\@False +% \end{macrocode} +% +% \end{macro} +% +% \begin{macro}{\eq@retry@with@number@a} +% Number placement adjustments +% \begin{macrocode} +\def\eq@retry@with@number{% + \if\eq@shiftnumber + \debugmsg{Place number: Shifted number requested}% + \else +% \end{macrocode} +% Condition and right numbers? We're just going to have to shift. +% \begin{macrocode} + \ifdim\eq@wdCond>\z@\if R\eqnumside + \debugmsg{Place number: Condition w/Right number => Shift number}% + \let\eq@shiftnumber\@True + \fi\fi +% \end{macrocode} +% Compute free space. +% \begin{macrocode} +% \dim@b\eqnumsep\advance\dim@b\wd\EQ@numbox + \dim@b\eq@wdNum + \if L\eqnumside + \ifdim\@totalleftmargin>\dim@b\dim@b\@totalleftmargin\fi + \else + \addtolength\dim@b{\@totalleftmargin}% + \fi + \setlength\dim@a{\eq@linewidth-\dim@b}%\advance\dim@a1em\relax% Allowance for shrink? +% \end{macrocode} +% Set up test against 1-line case only if not in a group +% \begin{macrocode} + \int@a\@ne\if\eq@group\int@a\maxint\fi +% \end{macrocode} +% Now check for cases. +% \begin{macrocode} + \if\eq@shiftnumber % Already know we need to shift + \else\ifdim\eq@wdT<\dim@a % Fits! +% \end{macrocode} +% left \& right skips will be done later, and parshape adjusted if +% needed. +% \begin{macrocode} + \debugmsg{Place number: eqn and number fit together}% +% \else\ifnum\eq@lines=\int@a % Shift, if single line, unless inside a dgroup. +% \end{macrocode} +% NOTE: this is too strong for dgroup! +% \begin{macrocode} +% \debugmsg{Place number: single line too long with number => Shift number \the\int@a}% +% \let\eq@shiftnumber\@True + \else +% \end{macrocode} +% % Retry: use leftskip for space for number(for now; whether +% % right/left) \& adjust parshape +% \begin{macrocode} +% \leftskip\wd\EQ@numbox\advance\leftskip\eqnumsep + \setlength\leftskip{\eq@wdNum}% + \setlength\rightskip{\z@\@plus\dim@a}% + \adjust@parshape\@parshape + \debugmsg{Place number: Try with \leftskip=\the\leftskip, \rightskip=\the\rightskip, + ^^J||===== parshape\space\@xp\@gobble\@parshape}% + \nointerlineskip + \edef\eq@prev@lines{\the\eq@lines}% + \edef\eq@prev@badness{\the\eq@badness}% BRM + \eq@trial@p + \int@a\eq@prev@badness\relax\advance\int@a 50\relax%? + \int@b\eq@prev@lines \if\eq@group\advance\int@b\@ne\fi% Allow 1 extra line in group + \ifnum\eq@lines>\int@b % \eq@prev@lines + \debugmsg{Adjustment causes more breaks => Shift number}% + \let\eq@shiftnumber\@True + \else\if\eq@badline + \debugmsg{Adjustment causes bad lines (\the\eq@badness) => Shift}% + \let\eq@shiftnumber\@True + \else\ifnum\eq@badness>\int@a % BRM: New case + \debugmsg{Adjustment is badder than previous (\the\eq@badness >> \eq@prev@badness) => Shift}% + \let\eq@shiftnumber\@True + \else + \debugmsg{Adjustment succeeded}% + \fi\fi%\fi + \fi\fi\fi +% \end{macrocode} +% If we got shifted, restore parshape, etc, +% \begin{macrocode} + \if\eq@shiftnumber + \EQ@trial% Restore parshape & other params, + \leftskip\z@\let\eq@shiftnumber\@True % But set shift & leftskip + \edef\@parshape{\eq@parshape}% And copy saved parshape back to `working copy' !?!? + \fi + \eq@trial@save\EQ@trial % Either way, save the trial state. + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\adjust@parshape} +% +% Varies depending on the layout. +% +% Adjust a parshape variable for a given set of left\textbar right skips. +% Note that the fixed part of the left\textbar right skips effectively +% comes out of the parshape widths (NOT in addition to it). +% We also must trim the widths so that the sum of skips, indents +% and widths add up to no more than the \cs{eq@linewidth}. +% \begin{macrocode} +\def\adjust@parshape#1{% + \@xp\adjust@parshape@a#1\relax + \edef#1{\temp@a}% +} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\adjust@parshape@a} +% \begin{macro}{\adjust@parshape@b} +% +% \begin{macrocode} +\def\adjust@parshape@a#1 #2\relax{% + \setlength\dim@a{\leftskip+\rightskip}% + \edef\temp@a{#1}% + \adjust@parshape@b#2 @ @ \relax +} +\def\adjust@parshape@b#1 #2 {% + \ifx @#1\edef\temp@a{\temp@a\relax}% + \@xp\@gobble + \else + \dim@b#1\relax + \dim@c#2\relax + \addtolength\dim@c{\dim@a+\dim@b}% + \ifdim\dim@c>\eq@linewidth\setlength\dim@c{\eq@linewidth}\fi + \addtolength\dim@c{-\dim@b}% + \edef\temp@a{\temp@a\space\the\dim@b\space\the\dim@c}% + \fi + \adjust@parshape@b +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\eq@ml@record@indents} +% +% Plunk the parshape's indent values into an array for easy access +% when constructing \cs{eq@measurements}. +% \begin{macrocode} +\def\eq@ml@record@indents{% + \int@a\z@ + \def\@tempa{% + \advance\int@a\@ne + \@xp\edef\csname eq@i\number\int@a\endcsname{\the\dim@a}% + \ifnum\int@a<\int@b \afterassignment\@tempb \fi + \dim@a + }% + \def\@tempb{\afterassignment\@tempa \dim@a}% + \def\@tempc##1##2 {\int@b##2\afterassignment\@tempa\dim@a}% + \@xp\@tempc\@parshape +} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\@endelt} +% +% This is a scan marker. +% It should get a non-expandable definition. +% It could be \cs{relax}, but let's try a chardef instead. +% \begin{macrocode} +\chardef\@endelt=`\? +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\eq@measurements} +% +% This is similar to a parshape spec but for each line we record more +% info: space above, indent, width x height + dp, and badness. +% \begin{macrocode} +\def\eq@measurements{% + \@elt 4.5pt/5.0pt,66.0ptx6.8pt+2.4pt@27\@endelt + ... +} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\eq@measure@lines} +% Loop through the list of boxes to measure things like total +% height (including interline stretch), \etc . We check the +% actual width of the current line against the natural width \mdash +% after removing rightskip \mdash in case the former is +% \emph{less} than the latter because of shrinkage. In that +% case we do not want to use the natural width for RHS-max-width because +% it might unnecessarily exceed the right margin. +% \begin{macrocode} +\def\eq@measure@lines{% + \let\eq@ml@continue\eq@measure@lines + \setbox\tw@\lastbox \dim@b\wd\tw@ % find target width of line + \setbox\z@\hbox to\dim@b{\unhbox\tw@}% check for overfull + \eq@badness\badness + \ifnum\eq@badness<\inf@bad \else \let\eq@badline\@True \fi + \eq@ml@a \eq@ml@continue +} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\eq@ml@a} +% +% \begin{macrocode} +\def\eq@ml@a{% + \setbox\tw@\hbox{\unhbox\z@ \unskip}% find natural width + \debug\ifnum\eq@badness<\inf@bad\else\debugmsg{!?! Overfull: \the\wd\tw@ >\the\dim@b}\fi\gubed +% \end{macrocode} +% Is actual width less than natural width? +% \begin{macrocode} + \ifdim\dim@b<\wd\tw@ \setlength\dim@a{\dim@b}% shrunken line + \else \setlength\dim@a{\wd\tw@}% OK to use natural width + \fi + \addtolength\dim@a{-\leftskip}% BRM: Deduct the skip if we're retrying w/number +% \end{macrocode} +% If there's no aboveskip, assume we've reached the top of the +% equation. +% \begin{macrocode} + \skip@a\lastskip \unskip \unpenalty + \ifdim\skip@a=\z@ + \let\eq@ml@continue\relax % end the recursion + \else + % Sum repeated vskips if present + \def\@tempa{% + \ifdim \lastskip=\z@ + \else \addtolength\skip@a{\lastskip}\unskip\unpenalty \@xp\@tempa + \fi + }% + \fi + \edef\eq@measurements{\@elt + \the\skip@a\space^^J% extra space to facilitate extracting only the + % dimen part later + \csname eq@i% + \ifnum\eq@curline<\parshape \number\eq@curline + \else\number\parshape + \fi + \endcsname,\the\dim@a x\the\ht\tw@+\the\dp\tw@ @\the\eq@badness\@endelt + \eq@measurements + }% + \advance\eq@curline\m@ne + \ifnum\eq@curline=\z@ \let\eq@ml@continue\relax\fi +} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\eq@ml@vspace} +% +% Handle an embedded vspace. +% \begin{macrocode} +\def\eq@ml@vspace{% + \global\advance\eq@vspan\lastskip \unskip\unpenalty + \ifdim\lastskip=\z@ \else \@xp\eq@ml@vspace \fi +} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\eq@dense@enough} +% +% \begin{macrocode} +\def\eq@dense@enough{% + \ifnum\eq@lines<\thr@@ + \debugmsg{Density check: less than 3 lines; OK}% + \@True + \else + \ifdim\eq@wdL >.7\eq@wdT + \debugmsg{Density check: LHS too long; NOT OK}% + \@False + \else \@xp\@xp\@xp\eq@dense@enough@a + \fi + \fi +} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\true@false@true} +% \begin{macrocode} +\def\true@false@true{\fi\fi\iftrue\iffalse\iftrue} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\false@false@false} +% \begin{macrocode} +\def\false@false@false{\fi\fi\iffalse\iffalse\iffalse} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\false@true@false} +% \begin{macrocode} +\def\false@true@false{\fi\fi\iffalse\iftrue\iffalse} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\eq@density@factor} +% +% This number specifies, for the ladder layout, how much of the +% equation's bounding box should contain visible material rather than +% whitespace. +% If the amount of visible material drops below this value, then we +% switch to the drop-ladder layout. +% The optimality of this factor is highly dependent on the equation +% contents; .475 was chosen as the default just because it worked well +% with the sample equation, designed to be as average as possible, that I +% used for testing. +% \begin{macrocode} +\def\eq@density@factor{.475} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\eq@dense@enough@a} +% +% Calculate whether there is more +% visible material than whitespace within the equation's bounding box. +% Sum up the actual line widths and compare to the total +% \dquoted{area} of the bounding box. +% But if we have an extremely large number of lines, fall back to an +% approximate calculation that is more conservative about the danger of +% exceeding \cs{maxdimen}. +% \begin{macrocode} +\def\eq@dense@enough@a{% + \@True \fi + \ifnum\eq@lines>\sixt@@n + \eq@dense@enough@b + \else + \dim@b\z@ \let\@elt\eq@delt \eq@measurements + \dim@c\eq@density@factor\eq@wdT \multiply\dim@c\eq@lines + \debugmsg{Density check: black \the\dim@b/\eq@density@factor total \the\dim@c}% + \ifdim\dim@b>\dim@c \true@false@true \else \false@false@false \fi + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\eq@delt} +% Args are space-above, indent, width, height, depth, badness. +% \begin{macrocode} +\def\eq@delt#1^^J#2,#3x#4+#5@#6\@endelt{\addtolength\dim@b{#3}}% +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\eq@dense@enough@b} +% +% This is an approximate calculation used to keep from going over +% \cs{maxdimen} if the number of lines in our trial break is large +% enough to make that a threat. +% If l, t, n represent left-side-width, total-width, and number of +% lines, the formula is +% \begin{literalcode} +% l/t < .4n/(.9n-1) +% \end{literalcode} +% or equivalently, since rational arithmetic is awkward in \tex : +% b +% \begin{literalcode} +% l/t < 4n/(9n-10) +% \end{literalcode} +% . +% \begin{macrocode} +\def\eq@dense@enough@b{% + \int@b\eq@wdT \divide\int@b\p@ + \dim@b\eq@wdL \divide\dim@b\int@b + \dim@c\eq@lines\p@ \multiply\dim@c\f@ur + \int@b\eq@lines \multiply\int@b 9 \advance\int@b -10% + \divide\dim@c\int@b + \debugmsg{Density check: l/t \the\dim@b\space< \the\dim@c\space 4n/(9n-10)?}% + \ifdim\dim@b<\dim@c \true@true@true \else \false@true@false \fi +} +% \end{macrocode} +% +% \end{macro} +% +% \begin{macro}{\eq@parshape} +% +% \begin{macrocode} +\let\eq@parshape\@empty +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\eq@params} +% The interline spacing and penalties in \cs{eq@params} +% are used during both preliminary line breaking and final typesetting. +% \begin{macrocode} +\def\eq@params{% + \baselineskip\eqlinespacing + \lineskip\eqlineskip \lineskiplimit\eqlineskiplimit +% \end{macrocode} +% Forbid absolutely a pagebreak that separates the first line or last +% line of a multiline equation from the rest of it. Or in other +% words: no equation of three lines or less will be broken at the bottom +% of a page; instead it will be moved whole to the top of the next +% page. If you really really need a page break that splits the +% first or last line from the rest of the equation, you can always fall +% back to\cs{pagebreak}, I suppose9. +% +% \begin{macrocode} + \clubpenalty\@M \widowpenalty\@M \interlinepenalty\eqinterlinepenalty + \linepenalty199 \exhyphenpenalty5000 % was 9999: make breaks at, eg. \* a bit easier. +% \end{macrocode} +% For equations, hfuzz should be at least 1pt. +% But we have to fake it a little because we are running the equation +% through \tex 's paragrapher. +% In our trials we use minus 1pt in the rightskip rather than hfuzz; +% and we must do the same during final breaking of the equation, otherwise +% in borderline cases \tex will use two lines instead of one when our +% trial indicated that one line would be enough. +% \begin{macrocode} + \ifdim\hfuzz<\p@ \hfuzz\p@ \fi +%\hfuzz=2pt +% \ifdim\hfuzz<2pt\relax \hfuzz2pt \fi + \parfillskip\z@skip +% \hfuzz\z@ +% \end{macrocode} +% Make sure we skip \tex 's preliminary line-breaking pass to save +% processing time. +% \begin{macrocode} + \tolerance9999 \pretolerance\m@ne +} +% \end{macrocode} +% \end{macro} +% +% +% +% +% \section{Equation layout options} +% Using the notation C centered, I indented (applied to +% the equation body), T top, B bottom, M +% middle, L left, R right (applied to the equation number), +% the commonly used equation types are C, CRM, CRB, CLM, CLT, +% I, IRM, IRB, ILM, ILT. In other words, CLM stands for Centered equation +% body with Left-hand Middle-placed equation number, and IRB stands for +% Indented equation with Right-hand Bottom-placed equation number. +% +% +% \section{Centered Right-Number Equations} +% +% \begin{macro}{\eq@dump@box} +% +% \arg1 might be \cs{unhbox} or \cs{unhcopy}; \arg2 is +% the box name. +% \begin{macrocode} +\def\eq@dump@box#1#2{% +%\debug@box#1% + \noindent #1#2\setbox\f@ur\lastbox \setbox\tw@\lastbox +% \end{macrocode} +% If the LHS contains shrinkable glue, in an L layout the alignment +% could be thrown off if the first line is shrunk noticeably. +% For the time being, disable shrinking on the left-hand side. +% The proper solution requires more work \begin{dn} +% mjd,1999/03/17 +% \end{dn} +% . +% \begin{macrocode} + \if L\eq@layout \box\tw@ \else\unhbox\tw@\fi + \adjust@rel@penalty \unhbox\f@ur +} +% \end{macrocode} +% +% \end{macro} +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Various typesetting bits, invoked from \cs{eq@finish} +% BRM: This has been extensively refactored from the original breqn, +% initially to get left\textbar right skips and parshape used consistently, +% ultimately to get most things handled the same way, in the same order. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Given that left and right skips have been set, +% typeset the frame, number and equation with the +% given number side and placement +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \begin{macrocode} +\def\eq@typeset@Unnumbered{% + \eq@typeset@frame + \eq@typeset@equation +} +\def\eq@typeset@LM{% + \addtolength\dim@a{(\eq@vspan+\ht\EQ@numbox-\dp\EQ@numbox)/2}% + \eq@typeset@leftnumber + \eq@typeset@frame + \eq@typeset@equation +} +% \end{macrocode} +% Typeset equation and left-top number (and shifted) +% \begin{macrocode} +\def\eq@typeset@LT{% + \dim@a\eq@firstht + \eq@typeset@leftnumber + \eq@typeset@frame + \eq@typeset@equation +} +% \end{macrocode} +% Typeset equation and left shifted number +% \begin{macrocode} +\def\eq@typeset@LShifted{% + % place number + \copy\EQ@numbox \penalty\@M + \dim@a\eqlineskip + \if F\eq@frame\else + \setlength\dim@a{\eq@framesep+\eq@framewd}% + \fi + \kern\dim@a + \eq@typeset@frame + \eq@typeset@equation +} +% \end{macrocode} +% Typeset equation and right middle number +% \begin{macrocode} +\def\eq@typeset@RM{% + \setlength\dim@a{(\eq@vspan+\ht\EQ@numbox-\dp\EQ@numbox)/2} + \eq@typeset@rightnumber + \eq@typeset@frame + \eq@typeset@equation +} +% \end{macrocode} +% Typeset equation and right bottom number +% \begin{macrocode} +\def\eq@typeset@RB{% + % NOTE: is \eq@dp useful here + \setlength\dim@a{\eq@vspan-\ht\EQ@numbox-\dp\EQ@numbox}% + \eq@typeset@rightnumber + \eq@typeset@frame + \eq@typeset@equation +} +% \end{macrocode} +% Typeset equation and right shifted number +% \begin{macrocode} +\def\eq@typeset@RShifted{% + % place number + \eq@typeset@frame + \eq@typeset@equation + \penalty\@M + \dim@a\eqlineskip + \if F\eq@frame\else + \addtolength\dim@a{\eq@framesep+\eq@framewd}% + \fi + \parskip\dim@a + \hbox to\hsize{\hfil\copy\EQ@numbox}\@@par% +} +% \end{macrocode} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Debugging aid to show all relevant formatting info for a given eqn. +% \begin{macrocode} +\def\debug@showformat{% + \debugmsg{Formatting Layout:\eq@layout\space Center/indent: \eqindent\space Number placement \eqnumside\eqnumplace: + ^^J||===== \eq@linewidth=\the\eq@linewidth, \@totalleftmargin=\the\@totalleftmargin, + ^^J||===== Centered Lines=\theb@@le\eq@centerlines, Shift Number=\theb@@le\eq@shiftnumber, + ^^J||===== \eq@wdT=\the\eq@wdT, \eq@wdMin=\the\eq@wdMin, + ^^J||===== LHS=\theb@@le\EQ@hasLHS: \eq@wdL=\the\eq@wdL, + ^^J||===== \eq@firstht=\the\eq@firstht, \eq@vspan=\the\eq@vspan + ^^J||===== \eq@wdNum=\the\eq@wdNum + ^^J||===== \eq@wdCond=\the\eq@wdCond, \conditionsep=\the\conditionsep, + ^^J||===== \leftskip=\the\leftskip, \rightskip=\the\rightskip, + ^^J||===== \abovedisplayskip=\the\abovedisplayskip, + ^^J||===== \belowdisplayskip=\the\belowdisplayskip + ^^J||===== parshape=\eq@parshape}% +} +% \end{macrocode} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Set left \& right skips for centered equations, +% making allowances for numbers (if any, right, left) and constraint. +% === +% Amazingly, I've managed to collect all the positioning logic for +% centered equations in one place, so it's more manageable. +% Unfortunately, by the time it does all it needs to do, +% it has evolved I'm (re)using so many temp variables, it's becoming +% unmanageble! +% +% \begin{macrocode} +\def\eq@C@setsides{% + % \dim@c = space for number, if any, and not shifted. + \dim@c\z@ + \if\eq@hasNumber\if\eq@shiftnumber\else + \dim@c\eq@wdNum + \fi\fi + % \dim@e = space for condition(on right), if any and formula is only a single line.(to center nicely) + % but only count it as being right-aligned if we're not framing, since the frame must enclose it. + \dim@e\z@ + \if F\eq@frame + \ifnum\eq@lines=\@ne\ifdim\eq@wdCond>\z@ + \setlength\dim@e{\eq@wdCond+\conditionsep}% + \fi\fi\fi + % \dim@b = minimum needed on left max(totalleftmargin, left number space) + \dim@b\z@ + \if L\eqnumside\ifdim\dim@b<\dim@c + \dim@b\dim@c + \fi\fi + \ifdim\dim@b<\@totalleftmargin + \dim@b\z@ + \else + \addtolength\dim@b{-\@totalleftmargin}% + \fi + % \dim@d = minimum needed on right max(condition, right number space) + \dim@d\dim@e + \if R\eqnumside\ifdim\dim@d<\dim@c + \dim@d\dim@c + \fi\fi + % \dim@a = left margin; initially half available space + % \dim@c = right margin; ditto + \setlength\dim@a{(\eq@linewidth-\eq@wdT+\dim@e+\@totalleftmargin)/2}% + \dim@c=\dim@a + % If too far to the left + \ifdim\dim@a<\dim@b + \addtolength\dim@c{\dim@a-\dim@b}% + \ifdim\dim@c<\z@\dim@c=\z@\fi + \dim@a=\dim@b + % Or if too far to the right + \else\ifdim\dim@c<\dim@d + \addtolength\dim@a{\dim@c-\dim@d}% + \ifdim\dim@a<\z@\dim@a=\z@\fi + \dim@c=\dim@d + \fi\fi + % Now, \dim@d,\dim@e is the left & right glue to center each line for centerlines + \setlength\dim@e{\eq@wdT-\eq@wdMin}\dim@d=\z@ +% NOTE: Need some work here centering when there's a condition +% \advance\dim@e-\eq@wdT\multiply\dim@e-1\relax +% \if\eq@wdMin<\dim@e\dim@e\eq@wdMin\fi +% \multiply\dim@e-1\relax\advance\dim@e\eq@wdT + \dim@d\z@ + \if\eq@centerlines + \divide\dim@e2\relax\dim@d\dim@e + \fi + \setlength\leftskip{\dim@a\@plus\dim@d}% + \addtolength\dim@e{\dim@c}% + \setlength\rightskip{\z@\@plus\dim@e}%\@minus5\p@ + % Special case: if framing, reduce the stretchiness of the formula (eg. condition) + % Or if we have a right number, FORCE space for it + \dim@b\z@ + \if F\eq@frame\else + \dim@b\dim@c + \fi + \if\eq@hasNumber\if\eq@shiftnumber\else\if R\eqnumside + \dim@c\eq@wdNum + \ifdim\dim@c>\dim@b\dim@b\dim@c\fi + \fi\fi\fi + % If either of those cases requires hard rightskip, move that part from glue. + \ifdim\dim@b>\z@ + \addtolength\dim@e{-\dim@c}% + \rightskip\dim@b\@plus\dim@e%\@minus5\p@ + \fi + % And peculiar further special case: in indented environs, width isn't where it would seem + \ifdim\eq@wdCond>\z@ + \addtolength\rightskip{-\@totalleftmargin}% + \fi + \parfillskip\z@skip +} +% \end{macrocode} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Set the left and right side spacing for indented equations +% Some things handled by eq@C@setsides that probably apply here???? +% * centerlines +% * \cs{@totalleftmargin}: SHOULD we move farther right? +% \begin{macrocode} +\def\eq@I@setsides{% + % Leftskip is normally just the requested indentation + \leftskip\mathindent + % But move left, if shifted number presumably because of clashed w/ number? + \if\eq@shiftnumber + \setlength\dim@a{\eq@linewidth-\eq@wdT-\mathindent}% + \ifdim\dim@a<\z@ + \leftskip=\z@ % Or something minimal? + \fi\fi + % Push gently from right. + \dim@a=\z@ + \setlength\dim@b{\eq@linewidth-\leftskip-\eq@wdMin}% + % Special case: if framing be much more rigid(?) + \if F\eq@frame\else + \setlength\dim@a{\eq@linewidth-\leftskip-\eq@wdT} + \addtolength\dim@b{-\dim@a}% + \fi + % Or force the space for right number, if needed + \if\eq@hasNumber\if\eq@shiftnumber\else\if R\eqnumside + \dim@c=\eq@wdNum + \if\dim@c>\dim@a + \addtolength\dim@b{-\dim@c}% + \dim@a=\dim@c + \fi\fi\fi\fi + \setlength\rightskip{\dim@a\@plus\dim@b \@minus\hfuzz }%\hfuzz\z@ + \parfillskip\z@skip +} +% \end{macrocode} +% \paragraph{Typesetting pieces: frame, equation and number (if any)} +% \cs{dim@a} should contain the downward displacement of number's baseline +% \begin{macrocode} +\def\eq@typeset@leftnumber{% + \setlength\skip@c{\dim@a-\ht\EQ@numbox}% + \vglue\skip@c% NON discardable + \copy\EQ@numbox \penalty\@M + \kern-\dim@a +} +\def\eq@typeset@rightnumber{% + \setlength\skip@c{\dim@a-\ht\EQ@numbox}% + \vglue\skip@c% NON discardable + \hbox to \hsize{\hfil\copy\EQ@numbox}\penalty\@M + \kern-\dim@a +} +\def\eq@typeset@equation{% + \nobreak + \eq@params\eq@parshape + \nointerlineskip\noindent + \add@grp@label + \eq@dump@box\unhbox\EQ@box\@@par +} +% \end{macrocode} +% +% \section{Framing an equation} +% \begin{macro}{\eqframe} +% The \cs{eqframe} function is called in vertical mode +% with the reference point at the top left corner of the equation, including +% any allowance for \cs{fboxsep}. Its arguments are the width +% and height of the equation body, plus fboxsep. +% \changes{v0.95}{2007/12/03}{Made \cs{eqframe} obey the key settings +% for frame and framesep.} +% \begin{macrocode} +\newcommand\eqframe[2]{% + \begingroup + \fboxrule=\eq@framewd\relax\fboxsep=\eq@framesep\relax + \framebox{\z@rule\@height#2\kern#1}% + \endgroup +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\def\eq@addframe{% + \hbox to\z@{% + \setlength\dim@a{\eq@framesep+\eq@framewd}% + \kern-\dim@a + \vbox to\z@{\kern-\dim@a + \hbox{\eqframe{\eq@wdT}{\eq@vspan}}% + \vss + }% + \hss + }% +} +\def\eq@typeset@frame{% + \if F\eq@frame\else + % Tricky: put before \noindent, so it's not affected by glue in \leftskip + \nobreak\nointerlineskip + \vbox to\eq@firstht{\moveright\leftskip\hbox to\z@{\eq@addframe\hss}\vss}% + \kern-\eq@firstht + \fi +} +% \end{macrocode} +% +% +% +% +% \section{Delimiter handling} +% The special handling of delimiters is rather complex, but +% everything is driven by two motives: to mark line breaks inside +% delimiters as less desirable than line breaks elsewhere, and to make it +% possible to break open left-right boxes so that line breaks between +% \cs{left} and \cs{right} delimiters are not absolutely +% prohibited. To control the extent to which line breaks will be +% allowed inside delimiters, set \cs{eqbreakdepth} to the maximum +% nesting depth. Depth 0 means never break inside delimiters. +% +% Note: \cs{eqbreakdepth} is not implemented as a \latex +% counter because changes done by \cs{setcounter} \etc are always +% global. +% +% It would be natural to use grouping in the implementation +% \mdash at an open delimiter, start a group and increase mathbin +% penalties; at a close delimiter, close the group. But this gives us +% trouble in situations like the \env{array} environment, where a +% close delimiter might fall in a different cell of the \cs{halign} +% than the open delimiter. +% Ok then, here's what we want the various possibilities to +% expand to. Note that \cs{right} and \cs{biggr} are +% being unnaturally applied to a naturally open-type delimiter. +% \begin{literalcode} +% ( -> \delimiter"4... \after@open +% \left( -> +% \@@left \delimiter"4... \after@open +% \right( -> +% \@@right \delimiter"4... \after@close +% \biggl( -> +% \mathopen{\@@left \delimiter... \vrule...\@@right.} +% \after@open +% \biggr( -> +% \mathclose{\@@left \delimiter... \vrule...\@@right.} +% \after@close +% \bigg\vert -> +% \mathord{\@@left \delimiter... \vrule...\@@right.} +% \biggm\vert -> +% \mathrel{\@@left \delimiter... \vrule...\@@right.} +% \end{literalcode} +% +% +% First save the primitive meanings of \cs{left} and +% \cs{right}. +% \begin{macrocode} +\@saveprimitive\left\@@left +\@saveprimitive\right\@@right +% \end{macrocode} +% +% +% The variable \cs{lr@level} is used by the first mathrel in +% an equation to tell whether it is at top level: yes? break and measure +% the LHS, no? keep going. +% \begin{macrocode} +\newcount\lr@level +% \end{macrocode} +% +% +% It would be nice to have better error checking here if the +% argument is not a delimiter symbol at all. +% \begin{macrocode} +\def\eq@left{% + \@ifnext .{\eq@nullleft}{\begingroup \let\delimiter\eq@left@a}% +} +\def\eq@right{% + \@ifnext .{\eq@nullright}{\begingroup \let\delimiter\eq@right@a}% +} +% \end{macrocode} +% The arguments are: \arg1 delim symbol, \arg2 . +% \begin{macrocode} +\def\eq@left@a#1 #2{\endgroup\@@left\delimiter#1 \after@open} +\def\eq@right@a#1 #2{\endgroup + \@@right\delimiter#1 \after@close \ss@scan{#1}% +} +% \end{macrocode} +% The null versions. +% \begin{macrocode} +\def\eq@nullleft#1{\@@left#1\after@open} +\def\eq@nullright#1{\@@right#1\after@close} +% \end{macrocode} +% +% +% Here is the normal operation of \cs{biggl}, for example. +% \begin{literalcode} +% \biggl ->\mathopen \bigg +% {\mathopen} +% +% \bigg #1->{\hbox {$\left #1\vbox to14.5\p@ {}\right .\n@space $}} +% #1<-( +% \end{literalcode} + % For paren matching: ) +% Like \cs{left}, \cs{biggl} coerces its delimiter to be of +% mathopen type even if its natural inclination is towards closing. +% +% The function \cs{delim@reset} makes delimiter characters +% work just about the same as they would in normal \latex . +% \begin{macrocode} +\def\delim@reset{% + \let\after@open\relax \let\after@close\relax + \let\left\@@left \let\right\@@right +} +% \end{macrocode} +% If the \pkg{amsmath} or \pkg{exscale} package is loaded, it +% will have defined \cs{bBigg@}; if not, the macros \cs{big} and +% variants will have hard-coded point sizes as inherited through the ages +% from \fn{plain.tex}. In this case we can kluge a little by +% setting \cs{big@size} to \cs{p@}, so that our definition of +% \cs{bBigg@} will work equally well with the different multipliers. +% \begin{macrocode} +\@ifundefined{bBigg@}{% not defined + \let\big@size\p@ + \def\big{\bBigg@{8.5}}\def\Big{\bBigg@{11.5}}% + \def\bigg{\bBigg@{14.5}}\def\Bigg{\bBigg@{17.5}}% + \def\biggg{\bBigg@{20.5}}\def\Biggg{\bBigg@{23.5}}% +}{} +\def\bBigg@#1#2{% + {\delim@reset + \left#2% + \vrule\@height#1\big@size\@width-\nulldelimiterspace + \right. + }% +} +% \end{macrocode} +% . +% \begin{macrocode} +\def\bigl#1{\mathopen\big{#1}\after@open} +\def\Bigl#1{\mathopen\Big{#1}\after@open} +\def\biggl#1{\mathopen\bigg{#1}\after@open} +\def\Biggl#1{\mathopen\Bigg{#1}\after@open} +\def\bigggl#1{\mathopen\biggg{#1}\after@open} +\def\Bigggl#1{\mathopen\Biggg{#1}\after@open} + +\def\bigr#1{\mathclose\big{#1}\after@close} +\def\Bigr#1{\mathclose\Big{#1}\after@close} +\def\biggr#1{\mathclose\bigg{#1}\after@close} +\def\Biggr#1{\mathclose\Bigg{#1}\after@close} +\def\bigggr#1{\mathclose\biggg{#1}\after@close} +\def\Bigggr#1{\mathclose\Biggg{#1}\after@close} + +%% No change needed, I think. [mjd,1998/12/04] +%%\def\bigm{\mathrel\big} +%%\def\Bigm{\mathrel\Big} +%%\def\biggm{\mathrel\bigg} +%%\def\Biggm{\mathrel\Bigg} +%%\def\bigggm{\mathrel\biggg} +%%\def\Bigggm{\mathrel\Biggg} +% \end{macrocode} +% +% +% \begin{macro}{\m@@DeL} \begin{macro}{\d@@DeL} +% \begin{macro}{\m@@DeR} \begin{macro}{\d@@DeR} +% \begin{macro}{\m@@DeB} \begin{macro}{\d@@DeB} +% Original definition of \cs{m@DeL} from +% \pkg{flexisym} is as follows. \cs{m@DeR} and +% \cs{m@DeB} are the same except for the math class number. +% \begin{literalcode} +% \def\m@DeL#1#2#3{% +% \delimiter"4\@xp\delim@a\csname sd@#1#2#3\endcsname #1#2#3 } +% \end{literalcode} +% +% Save the existing meanings of \cs{m@De[LRB]}. +% \begin{macrocode} +\let\m@@DeL\m@DeL \let\m@@DeR\m@DeR \let\m@@DeB\m@DeB +\def\d@@DeL#1#2#3{% + \delimiter"4\@xp\delim@a\csname sd@#1#2#3\endcsname #1#2#3 \after@open +} +\def\d@@DeR#1#2#3{% + \delimiter"5\@xp\delim@a\csname sd@#1#2#3\endcsname #1#2#3 \after@close +} +\def\d@@DeB#1#2#3{% + \delimiter"0\@xp\delim@a\csname sd@#1#2#3\endcsname #1#2#3 \after@bidir +} +% \end{macrocode} +%%BRM: These weren't defined, but apparently should be. +% Are these the right values??? +% \begin{macrocode} +\let\m@@DeA\m@DeA\let\d@@DeA\m@DeA% +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\after@open} +% \begin{macro}{\after@close} +% \begin{macro}{\after@bidir} +% \begin{macro}{\zero@bop} +% \begin{macro}{\bop@incr} +% \cs{after@open} and \cs{after@close} are carefully +% written to avoid the use of grouping and to run as fast as possible. +% \cs{zero@bop} is the value used for \cs{prebinoppenalty} at +% delimiter level 0, while \cs{bop@incr} is added for each level of +% nesting. The standard values provide that breaks will be prohibited +% within delimiters below nesting level 2. +% \begin{macrocode} +\let\after@bidir\@empty +\mathchardef\zero@bop=888 \relax +\mathchardef\bop@incr=4444 \relax +\def\after@open{% + \global\advance\lr@level\@ne + \prebinoppenalty\bop@incr \multiply\prebinoppenalty\lr@level + \advance\prebinoppenalty\zero@bop + \ifnum\eqbreakdepth<\lr@level + \let\m@Bin\m@@Bin +% \end{macrocode} +% Inside delimiters, add some fillglue before binops so that a broken off +% portion will get thrown flush right. Also shift it slightly +% further to the right to ensure that it clears the opening delimiter. +% \begin{macrocode} + \else + \eq@binoffset=\eqbinoffset + \advance\eq@binoffset\lr@level\eqdelimoffset plus1fill\relax + \def\dt@fill@cancel{\hskip\z@ minus1fill\relax}% + \fi + \penalty\@M % BRM: discourage break after an open fence? +} +\def\after@close{% + \global\advance\lr@level\m@ne + \prebinoppenalty\bop@incr \multiply\prebinoppenalty\lr@level + \advance\prebinoppenalty\zero@bop + \ifnum\eqbreakdepth<\lr@level + \else \let\m@Bin\d@@Bin + \fi +% \end{macrocode} +% When we get back to level 0, no delimiters, remove the stretch +% component of \cs{eqbinoffset}. +% \begin{macrocode} + \ifnum\lr@level<\@ne \eq@binoffset=\eqbinoffset\relax \fi +} +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\subsup@flag} +% \begin{macro}{\ss@scan} +% \cs{ss@scan} is called after a \cs{right} delimiter and +% looks ahead for sub and superscript tokens. +% If sub and/or superscripts are present, we adjust the line-ending +% penalty to distinguish the various cases (sub, sup, or both). +% This facilitates the later work of excising the sub/sup box and +% reattaching it with proper shifting. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Sub/Superscript measurement +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% BRM: There's possibly a problem here. +% When \cs{ss@scan} gets invoked after a \cs{left}...\cs{right} pair in the LHS +% during \cs{eq@measure}, it produces an extra box (marked with \cs{penalty} 3); +% Apparently \cs{eq@repack} expects only one for the LHS. +% The end result is \cs{eq@wdL} => 0.0pt !!! (or at least very small) +% \begin{macrocode} +\let\subsup@flag=\count@ +\def\ss@delim@a#1#2#3#4{\xdef\right@delim@code{\number"#2#3#4}} +% \end{macrocode} +% The argument of \cs{ss@scan} is an expanded form of a +% right-delimiter macro. +% We want to use the last three digits in the expansion +% to define \cs{right@delim@code}. +% The assignment to a temp register is just a way to scan away the +% leading digits that we don't care about. +% \begin{macrocode} +\def\ss@scan#1{% +% \end{macrocode} +% This part of the code. +% \begin{macrocode} + \begingroup + \let\delim@a\ss@delim@a \@tempcnta#1\relax + \endgroup + \subsup@flag\@M \afterassignment\ss@scan@a \let\@let@token=} +\def\ss@scan@a{% + \ifx\@let@token\sb \advance\subsup@flag\@ne\else + \ifx\@let@token\sp \advance\subsup@flag\tw@\else + \ss@finish + \expandafter\@firstoftwo % gobble \ss@scan@b + \fi\fi + \ss@scan@b\@let@token +} +% \end{macrocode} +% +% \begin{macrocode} +\def\ss@scan@b#1#2{#1{% +% \end{macrocode} +% hack! coff! +% \begin{macrocode} + \let\m@Bin\m@@Bin \let\m@Rel\m@@Rel + #2}\afterassignment\ss@scan@a \let\@let@token=}% +% \end{macrocode} +% We need to keep following glue from disappearing +% \mdash \eg , a thickmuskip or medmuskip from a following mathrel or +% mathbin symbol. +% \begin{macrocode} +\def\ss@finish{% + \@@vadjust{\penalty\thr@@}% + \penalty\right@delim@code \penalty-\subsup@flag \keep@glue +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\eq@lrunpack} +% For \cs{eq@lrunpack} we need to break open a left-right box and +% reset it just in case it contains any more special breaks. After +% it is unpacked the recursion of \cs{eq@repack} will continue, +% acting on the newly created lines. +% \begin{macrocode} +\def\eq@lrunpack{\setbox\z@\lastbox +% \end{macrocode} +% We remove the preceding glue item and deactivate +% baselineskip for the next line, otherwise we would end up with +% three items of glue (counting parskip) at this point instead of +% the single one expected by our recursive repacking +% procedure. +% \begin{macrocode} + \unskip \nointerlineskip +% \end{macrocode} +% Then we open box 0, take the left-right box at the right end of +% it, and break that open. If the line-ending penalty is greater than +% 10000, it means a sub and/or superscript is present on the right +% delimiter and the box containing them must be taken off first. +% \begin{macrocode} + \noindent\unhbox\z@ \unskip + \subsup@flag-\lastpenalty \unpenalty + \xdef\right@delim@code{\number\lastpenalty}% + \unpenalty + \ifnum\subsup@flag>\@M + \advance\subsup@flag-\@M + \setbox\tw@\lastbox + \else \setbox\tw@\box\voidb@x + \fi + \setbox\z@\lastbox + \ifvoid\tw@ \unhbox\z@ + \else \lrss@reattach % uses \subsup@flag, box\z@, box\tw@ + \fi +% \end{macrocode} +% The reason for adding a null last line here is that the last +% line will contain parfillskip in addition to rightskip, and a final +% penalty of $10000$ instead of $-1000N$ +% ($1\leq N\leq 9$), which would interfere with the usual +% processing. Setting a null last line and discarding it dodges +% this complication. The penalty value $-10001$ is a no-op case +% in the case statement of \cs{eq@repacka}. +% \begin{macrocode} + \penalty-\@Mi\z@rule\@@par + \setbox\z@\lastbox \unskip\unpenalty +%%{\showboxbreadth\maxdimen\showboxdepth99\showlists}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\lrss@reattach} +% +% Well, for a small self-contained computation, carefully +% hand-allocated dimens should be safe enough. But let the +% maintainer beware! This code cannot be arbitrarily transplanted +% or shaken up without regard to grouping and interaction with other +% hand-allocated dimens. +% \begin{macrocode} +\dimendef\sub@depth=8 \dimendef\sup@base=6 +\dimendef\prelim@sub@depth=4 \dimendef\prelim@sup@base=2 +\def\sym@xheight{\fontdimen5\textfont\tw@} +\def\sup@base@one{\fontdimen13\textfont\tw@} +\def\sub@base@one{\fontdimen16\textfont\tw@} +\def\sub@base@two{\fontdimen17\textfont\tw@} +% \end{macrocode} +% Note that only \cs{sup@drop} and \cs{sub@drop} come from +% the next smaller math style. +% \begin{macrocode} +\def\sup@drop{\fontdimen18\scriptfont\tw@} +\def\sub@drop{\fontdimen19\scriptfont\tw@} +% \end{macrocode} +% Provide a mnemonic name for the math axis fontdimen, if it's not +% already defined. +% \begin{macrocode} +\providecommand{\mathaxis}{\fontdimen22\textfont\tw@} +% \end{macrocode} +% +% Assumes box 2 contains the sub/sup and box 0 contains the left-right +% box. This is just a repeat of the algorithm in \fn{tex.web}, +% with some modest simplifications from knowing that this is only going to +% be called at top level in a displayed equation, thus always mathstyle = +% uncramped displaystyle. +% \begin{macrocode} +\def\lrss@reattach{% + \begingroup + % "The TeXbook" Appendix G step 18: + \setlength\prelim@sup@base{\ht\z@-\sup@drop}% + \setlength\prelim@sub@depth{\dp\z@ +\sub@drop}% + \unhbox\z@ + \ifcase\subsup@flag % case 0: this can't happen + \or \lr@subscript % case 1: subscript only + \or \lr@superscript % case 2: superscript only + \else \lr@subsup % case 3: sub and superscript both + \fi + \endgroup +} +% \end{macrocode} +% \begin{macrocode} +\def\lr@subscript{% + \sub@depth\sub@base@one + \ifdim\prelim@sub@depth>\sub@depth \sub@depth\prelim@sub@depth\fi + \setlength\dim@a{\ht\tw@ -.8\sym@xheight}% + \ifdim\dim@a>\sub@depth \sub@depth=\dim@a \fi + \twang@adjust\sub@depth + \lower\sub@depth\box\tw@ +} +% \end{macrocode} +% +% \begin{macrocode} +\def\lr@superscript{% + \sup@base\sup@base@one + \ifdim\prelim@sup@base>\sup@base \sup@base\prelim@sup@base\fi + \setlength\dim@a{\dp\tw@ -.25\sym@xheight}% + \ifdim\dim@a>\sup@base \sup@base\dim@a \fi + \twang@adjust\sup@base + \raise\sup@base\box\tw@ +} +% \end{macrocode} +% +% \begin{macrocode} +\def\lr@subsup{% + \sub@depth\sub@base@two + \ifdim\prelim@sub@depth>\sub@depth \sub@depth\prelim@sub@depth \fi + \twang@adjust\sub@depth + \lower\sub@depth\box\tw@ +} +% \end{macrocode} +% +% For delimiters that curve top and bottom, the twang factor allows +% horizontal shifting of the sub and superscripts so they don't +% fall too far away (or too close for that matter). This is +% accomplished by arranging for (\eg ) \verb"\right\rangle" to leave +% a penalty $N$ in the math list before the subsup penalty that triggers +% \cs{lrss@reattach}, where $N$ is the mathcode of +% \cs{rangle} (ignoring \dquoted{small} variant). +% \begin{macrocode} +\def\twang@adjust#1{% + \begingroup + \@ifundefined{twang@\right@delim@code}{}{% + \setlength\dim@d{#1-\mathaxis}% + % put an upper limit on the adjustment + \ifdim\dim@d>1em \dim@d 1em \fi + \kern\csname twang@\right@delim@code\endcsname\dim@d + }% + \endgroup +} +% \end{macrocode} +% The method used to apply a \dquoted{twang} adjustment is just an +% approximate solution to a complicated problem. +% We make the following assumptions that hold true, approximately, +% for the most common kinds of delimiters: +% \begin{enumerate} +% \item +% The right delimiter is symmetrical top to bottom. +% +% +% \item There is an upper limit on the size of the adjustment. +% +% +% \item When we have a superscript, the amount of left-skew that we +% want to apply is linearly proportional to the distance of the bottom +% left corner of the superscript from the math axis, with the ratio +% depending on the shape of the delimiter symbol. +% +% +% \end{enumerate} +% . +% By symmetry, Assumption 3 is true also for subscripts (upper left +% corner). +% Assumption 2 is more obviously true for parens and braces, where the +% largest super-extended versions consist of truly vertical parts with +% slight bending on the ends, than it is for a \cs{rangle}. +% But suppose for the sake of expediency that it is +% approximately true for rangle symbols also. +% +% +% Here are some passable twang factors for the most common types of +% delimiters in \fn{cmex10}, as determined by rough measurements from +% magnified printouts. +% \begin{literalcode} +% vert bar, double vert: 0 +% square bracket: -.1 +% curly brace: -.25 +% parenthesis: -.33 +% rangle: -.4 +% \end{literalcode} +% Let's provide a non-private command for changing the twang factor of +% a given symbol. +% \begin{macrocode} +\newcommand{\DeclareTwang}[2]{% + \ifcat.\@nx#1\begingroup + \lccode`\~=`#1\lowercase{\endgroup \DeclareTwang{~}}{#2}% + \else + \@xp\decl@twang#1?\@nil{#2}% + \fi +} +% \end{macrocode} +% Note that this is dependent on a fixed interpretation of the +% mathgroup number \arg4 . +% \begin{macrocode} +\def\decl@twang#1#2#3#4#5#6#7\@nil#8{% + \@namedef{twang@\number"#4#5#6}{#8}% +} +\DeclareTwang{\rangle}{-.4} +\DeclareTwang{)}{-.33} +\DeclareTwang{\rbrace}{-.25} +% \end{macrocode} +% +% \end{macro} +% +% +% +% \section{Series of expressions} +% The \env{dseries} environment is for a display +% containing a series of expressions of the form \quoted{A, B} or \quoted{A and +% B} or \quoted{A, B, and C} and so on. Typically the expressions +% are separated by a double quad of space. If the expressions in a +% series don't all fit in a single line, they are continued onto extra +% lines in a ragged-center format. +% \begin{macrocode} +\newenvironment{dseries}{\let\eq@hasNumber\@True \@optarg\@dseries{}}{}% +\def\enddseries#1{\check@punct@or@qed}% +% \end{macrocode} +% +% And the unnumbered version of same. +% \begin{macrocode} +\newenvironment{dseries*}{\let\eq@hasNumber\@False \@optarg\@dseries{}}{}% +\@namedef{enddseries*}#1{\check@punct@or@qed}% +\@namedef{end@dseries*}{\end@dseries}% +\def\@dseries[#1]{% +% \end{macrocode} +% Turn off the special breaking behavior of mathrels \etc for math +% formulas embedded in a \env{dseries} environment. +% +%BRM: DS Expermient: Use alternative display setup. +% \begin{macrocode} +% \def\display@setup{\displaystyle}% + \let\display@setup\dseries@display@setup + % Question: should this be the default for dseries??? +% \let\eq@centerlines\@True + \global\eq@wdCond\z@ +% \end{macrocode} +% BRM: use special layout for dseries +% \begin{macrocode} +% \@dmath[#1]% + \@dmath[layout={M},#1]% + \mathsurround\z@\@@math \penalty\@Mi + \let\endmath\ends@math + \def\premath{% +% \end{macrocode} +% BRM: Tricky to cleanup space OR add space ONLY BETWEEN math! +% \begin{macrocode} + \ifdim\lastskip<.3em \unskip + \else\ifnum\lastpenalty<\@M \dquad\fi\fi +}% +% \end{macrocode} +%BRM: Tricky; if a subformula breaks, we'd like to start the next on new line! +% \begin{macrocode} + \def\postmath{\unpenalty\eq@addpunct \penalty\intermath@penalty \dquad \@ignoretrue}% +\ignorespaces +} +\def\end@dseries{% + \unskip\unpenalty + \@@endmath \mathsurround\z@ \end@dmath +} +% \end{macrocode} +% BRM: Try this layout for dseries: Essentially layout i, but w/o +% limit to 1 line. And no fallback! +% \begin{macrocode} +\def\eq@try@layout@M{% + \edef\@parshape{\parshape 1 0pt \the\eq@linewidth\relax}% + \eq@trial@b{M}{}% +} +% \end{macrocode} +% BRM: Tricky to get right value here. +% Prefer breaks between formula if we've got to break at all. +% \begin{macrocode} +%\def\intermath@penalty{-201}% +\def\intermath@penalty{-221}% +% \end{macrocode} +% BRM: A bit tighter than it was ( 1em minus.25em ) +% \begin{macrocode} +%\newcommand\dquad{\hskip0.4em} +\newcommand\dquad{\hskip0.6em minus.3em} +\newcommand\premath{}\newcommand\postmath{} +% \end{macrocode} +% +% Change the \env{math} environment to add +% \cs{premath} and \cs{postmath}. They are no-ops except +% inside a \env{dseries} environment. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Redefinition of math environment to take advantage of dseries env. +% \begin{macrocode} +\renewenvironment{math}{% + \leavevmode \premath + \ifmmode\@badmath\else\@@math\fi +}{% + \ifmmode\@@endmath\else\@badmath\fi +} +\def\ends@math#1{\check@punct@or@qed} +\def\end@math{% + \ifmmode\@@endmath\else\@badmath\fi + \postmath +} +% \end{macrocode} +% +% +% +% +% \section{Equation groups} +% For many equation groups the strategy is easy: just center each +% equation individually following the normal rules for a single +% equation. In some groups, each equation gets its own number; in +% others, a single number applies to the whole group (and may need to be +% vertically centered on the height of the group). In still other +% groups, the equations share a parent number but get individual equation +% numbers consisting of parent number plus a letter. +% +% If the main relation symbols in a group of equations are to be +% aligned, then the final alignment computations cannot be done until the +% end of the group \mdash \ie , the horizontal positioning of the first +% $n - 1$ equations cannot be done immediately. Yet because of +% the automatic line breaking, we cannot calculate an initial value of +% RHS-max over the whole group unless we do a trial run on each equation +% first to find an RHS-max for that equation. Once we know RHS-group-max +% and LHS-group-max we must redo the trial set of each equation because +% they may affect the line breaks. If the second trial for an +% equation fails (one of its lines exceeds the available width), but +% the first one succeeded, fall back to the first trial, \ie let that +% equation fall out of alignment with the rest of the group. +% +% +% All right then, here is the general idea of the whole algorithm for +% group alignment. +% To start with, ignore the possibility of equation numbers so that +% our equation group has the form: +% \begin{literalcode} +% LHS[1] RHS[1,1] RHS[1,2] ... RHS[1,n[1]] +% LHS[2] RHS[2,1] RHS[2,2] ... RHS[2,n[2]] +% ... +% LHS[3] RHS[3,1] RHS[3,2] ... RHS[3,n[3]] +% \end{literalcode} +% The number of RHS's might not be the same for all of the +% equations. +% First, accumulate all of the equation contents in a queue, checking +% along the way to find the maximum width of all the LHS's and the maximum +% width of all the RHS's. +% Call these widths maxwd\_L and maxwd\_R. +% Clearly if maxwd\_L + maxwd\_R is less than or equal to the available +% equation width then aligning all of the equations is going to be simple. +% +% +% Otherwise we are going to have to break at least one of the RHS's +% and/or at least one of the LHS's. +% The first thing to try is using maxwd\_L for the LHS's and breaking +% all the RHS's as needed to fit in the remaining space. +% However, this might be a really dumb strategy if one or more of the +% LHS's is extraordinarily wide. +% So before trying that we check whether maxwd\_L exceeds some +% threshold width beyond which it would be unsensible not to break the LHS. +% Such as, max(one-third of the available width; six ems), or +% something like that. +% Or how about this? +% Compare the average LHS width and RHS width and divide up the available +% width in the same ratio for line breaking purposes. +% +% +% BRM: Fairly broad changes; it mostly didn't work before (for me). +% +% \begin{description} +% \item[\cs{begin}\csarg{dgroup} produces a `numbered' group] +% The number is the next equation number. +% There are 2 cases: +% \begin{itemize} +% \item If ANY contained equations are numbered (|\begin{dmath}|), +% then they will be subnumbered: eg 1.1a +% and the group number is not otherwise displayed. +% \item If ALL contained equations are unnumbered (|\begin{dmath*}|) +% then the group, as a whole, gets a number displayed, +% using the same number placement as for equations. +% \end{itemize} +% \item[\cs{begin}\csarg{dgroup*} produces an unnumbered group.] +% Contained equations are numbered, or not, as normal. +% But note that in the mixed case, it's too late to +% force the unnumbered eqns to \cs{retry@with@number} +% We'll just do a simple check of dimensions, after the fact, +% and force a shiftnumber if we're stuck. +% +% NOTE: Does this work for dseries, as well? (alignment?) +% +% NOTE: Does \cs{label} attach to the expected thing? +% +% \item[For number placement] We use shiftnumber placement on ALL equations +% if ANY equations need it, or if an unnumbered equation is too +% wide to be aligned, given that the group or other eqns are numbered. +% [does this latter case interract with the chosen alignment?] +% +% \item[For Alignment] +% As currently coded, it tries to align on relations, by default. +% If LHS's are not all present, or too long, it switches to left-justify. +% Maybe there are other cases that should switch? +% Should there be a case for centered? +% +% NOTE: Should there be some options to choose alignment? +% \end{description} +% +% \begin{macro}{\eq@group} +% \begin{macro}{\GRP@top} +% +% \begin{macrocode} +\let\eq@group\@False +\let\grp@shiftnumber\@False +\let\grp@hasNumber\@False +\let\grp@eqs@numbered\@False +\let\grp@aligned\@True +\global\let\GRP@top\@True +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% +% +% Definition of the \env{dgroup} environment. +% \begin{macrocode} +\newenvironment{dgroup}{% + \let\grp@hasNumber\@True\@optarg\@dgroup{}% +}{% + \end@dgroup +} +% \end{macrocode} +% And the. +% \begin{macrocode} +\newtoks\GRP@queue +\newenvironment{dgroup*}{% + \let\grp@hasNumber\@False\@optarg\@dgroup{}% +}{% + \end@dgroup +} +\def\@dgroup[#1]{% + \debugmsg{=== DGROUP ==================================================}% + \let\eq@group\@True \global\let\GRP@top\@True + \global\GRP@queue\@emptytoks \global\setbox\GRP@box\box\voidb@x + \global\let\GRP@label\@empty + \global\grp@wdL\z@\global\grp@wdR\z@\global\grp@wdT\z@ + \global\grp@linewidth\z@\global\grp@wdNum\z@ + \global\let\grp@eqs@numbered\@False + \global\let\grp@aligned\@True + \global\let\grp@shiftnumber\@False + \eq@prelim + \setkeys{breqn}{#1}% + \if\grp@hasNumber \grp@setnumber \fi +} +\def\end@dgroup{% + \EQ@displayinfo \grp@finish + \if\grp@hasNumber\grp@resetnumber\fi +} +% \end{macrocode} +% If the \pkg{amsmath} package is not loaded the parentequation +% counter will not be defined. +% \begin{macrocode} +\@ifundefined{c@parentequation}{\newcounter{parentequation}}{} +% \end{macrocode} +% Init. +% \begin{macrocode} +\global\let\GRP@label\@empty +\def\add@grp@label{% + \ifx\@empty\GRP@label + \else \GRP@label \global\let\GRP@label\@empty + \fi +} +% \end{macrocode} +% Before sending down the `equation' counter to the subordinate level, +% set the current number in \cs{EQ@numbox}. The +% \cs{eq@setnumber} function does everything we need here. If +% the child equations are unnumbered, \cs{EQ@numbox} will retain the +% group number at the end of the group. +% \begin{macrocode} +\def\grp@setnumber{% + \global\let\GRP@label\next@label \global\let\next@label\@empty + % Trick \eq@setnumber to doing our work for us. + \let\eq@hasNumber\@True + \eq@setnumber +% \end{macrocode} +% Define \cn{theparentequation} equivalent to current +% \cn{theequation}. \cn{edef} is necessary to expand the +% current value of the equation counter. This might in rare cases +% cause something to blow up, in which case the user needs to add +% \cn{protect}. +% \begin{macrocode} + \global\sbox\GRP@numbox{\unhbox\EQ@numbox}% + \grp@wdNum\eq@wdNum + \let\eq@hasNumber\@False + \let\eq@number\@empty + \eq@wdNum\z@ +% + \protected@edef\theparentequation{\theequation}% + \setcounter{parentequation}{\value{equation}}% +% \end{macrocode} +% And set the equation counter to 0, so that the normal incrementing +% processes will produce the desired results if the child equations are +% numbered. +% \begin{macrocode} + \setcounter{equation}{0}% + \def\theequation{\theparentequation\alph{equation}}% + \debugmsg{Group Number \theequation}% +} +% \end{macrocode} +% At the end of a group, need to reset the equation counter. +% \begin{macrocode} +\def\grp@resetnumber{% + \setcounter{equation}{\value{parentequation}}% +} +\newbox\GRP@box +\newbox\GRP@wholebox +% \end{macrocode} +% Save data for this equation in the group +% * push the trial data onto end of \cs{GRP@queue} +% * push an hbox onto the front of \cs{GRP@box} +% containing: \cs{EQ@box}, \cs{EQ@copy}, \cs{penalty} 1 and \cs{EQ@numbox} +% \begin{macro}{\grp@push} +% +% For putting the equation on a queue. +% \begin{macrocode} +\def\grp@push{% + \global\GRP@queue\@xp\@xp\@xp{\@xp\the\@xp\GRP@queue + \@xp\@elt\@xp{\EQ@trial}% + }% + \global\setbox\GRP@box\vbox{% + \hbox{\box\EQ@box\box\EQ@copy\penalty\@ne\copy\EQ@numbox}% + \unvbox\GRP@box + }% + \global\let\GRP@top\@False + \EQ@trial + \if\eq@isIntertext\else + \ifdim\eq@wdL>\grp@wdL \global\grp@wdL\eq@wdL \fi + \ifdim\eq@wdT>\grp@wdT \global\grp@wdT\eq@wdT \fi + \setlength\dim@a{\eq@wdT-\eq@wdL}% + \ifdim\dim@a>\grp@wdR \global\grp@wdR\dim@a \fi + \ifdim\eq@linewidth>\grp@linewidth \global\grp@linewidth\eq@linewidth\fi + \if\eq@hasNumber + \global\let\grp@eqs@numbered\@True + \ifdim\eq@wdNum>\grp@wdNum\global\grp@wdNum\eq@wdNum\fi + \fi + \if\EQ@hasLHS\else\global\let\grp@aligned\@False\fi + \if D\eq@layout \global\let\grp@aligned\@False\fi % Layout D (usually) puts rel on 2nd line. + \if\eq@shiftnumber\global\let\grp@shiftnumber\@True\fi % One eq shifted forces all. + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\grp@finish} +% +% Set accumulated equations from a \env{dgroup} environment. +% +% BRM: Questionable patch!! +% When processing the \cs{GRP@queue}, put it into a \cs{vbox}, then \cs{unvbox} it. +% This since there's a bizarre problem when the \cs{output} routine +% gets invoked at an inopportune moment: All the not-yet-processed +% \cs{GRP@queue} ends up in the \cs{@freelist} and bad name clashes happen. +% Of course, it could be due to some other problem entirely!!! +% \begin{macrocode} +\def\grp@finish{% +% \debug@box\GRP@box +% \debugmsg{\GRP@queue: \the\GRP@queue}% +% \end{macrocode} +% == Now that we know the collective measurements, make final decision +% about alignment \& shifting. Check if alignment is still possible +% \begin{macrocode} + \setlength\dim@a{\grp@wdL+\grp@wdR-4em}% Allowance for shrink? + \if\grp@aligned\ifdim\dim@a>\grp@linewidth + \global\let\grp@aligned\@False + \fi\fi +% \end{macrocode} +% If we're adding an unshifted group number that equations didn't know +% about, re-check shifting +% \begin{macrocode} + \addtolength\dim@a{\grp@wdNum }% Effective length + \if\grp@shiftnumber\else\if\grp@hasNumber\if\grp@eqs@numbered\else\ifdim\dim@a>\grp@linewidth + \global\let\grp@shiftnumber\@True + \fi\fi\fi\fi +% \end{macrocode} +% If we can still align, total width is sum of maximum LHS \& RHS +% \begin{macrocode} + \if\grp@aligned + \global\grp@wdT\grp@wdL\global\advance\grp@wdT\grp@wdR + \fi + \debugmsg{======= DGROUP Formatting + ^^J||===== \grp@wdL=\the\grp@wdL, \grp@wdR=\the\grp@wdR + ^^J||===== Shift Number=\theb@@le\grp@shiftnumber, Eqns. numbered=\theb@@le\grp@eqs@numbered + ^^J||===== Aligned=\theb@@le\grp@aligned + ^^J||===== \grp@wdNum=\the\grp@wdNum}% +% \end{macrocode} +% BRM: Originally this stuff was dumped directly, without capturing it +% in a \cs{vbox} +% \begin{macrocode} + \setbox\GRP@wholebox\vbox{% + \let\@elt\eqgrp@elt + \the\GRP@queue + }% +% \end{macrocode} +% If we're placing a group number (not individual eqn numbers) +% NOTE: For now, just code up LM number +% NOTE: Come back and handle other cases. +% NOTE: Vertical spacing is off, perhaps because of inter eqn. glue +% \begin{macrocode} + \eq@topspace{\vskip\parskip}% + \if\grp@hasNumber\if\grp@eqs@numbered\else +% \eq@topspace{\vskip\parskip}% + \if\grp@shiftnumber + \copy\GRP@numbox \penalty\@M + \kern\eqlineskip + \else + \setlength\dim@a{% + (\ht\GRP@wholebox+\dp\GRP@wholebox+\ht\GRP@numbox-\dp\GRP@numbox)/2}% + \setlength\skip@c{\dim@a-\ht\GRP@numbox}% + \vglue\skip@c% NON discardable + \copy\GRP@numbox \penalty\@M +\debugmsg{GROUP NUMBER: preskip:\the\skip@c, postkern:\the\dim@a, height:\the\ht\GRP@wholebox, + ^^J||===== box height:\the\ht\GRP@numbox, box depth:\the\dp\GRP@numbox}% + \kern-\dim@a + \kern-\abovedisplayskip % To cancel the topspace above the first eqn. + \fi + \fi\fi +%\debug@box\GRP@wholebox + \unvbox\GRP@wholebox + \let\@elt\relax +% \end{macrocode} +% We'd need to handle shifted, right number here, too!!! +% \begin{macrocode} + \eq@botspace % not needed unless bottom number? +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\eqgrp@elt} +% +% Mission is to typeset the next equation from the group queue. +% +% The arg is an \cs{EQ@trial} +% \begin{macrocode} +\def\eqgrp@elt#1{% + \global\setbox\GRP@box\vbox{% + \unvbox\GRP@box + \setbox\z@\lastbox + \setbox\tw@\hbox{\unhbox\z@ + \ifnum\lastpenalty=\@ne + \else + \global\setbox\EQ@numbox\lastbox + \fi + \unpenalty + \global\setbox\EQ@copy\lastbox + \global\setbox\EQ@box\lastbox + }% + }% + \begingroup \let\eq@botspace\relax + #1% + \if\eq@isIntertext + \vskip\belowdisplayskip + \unvbox\EQ@copy + \else + \grp@override + \eq@finish + \fi + \endgroup +} +% \end{macrocode} +% \end{macro} +% Override the \cs{eq@trial} data as needed for this equation in this group +% NOTE: w/ numbering variations (see above), we may need to tell +% \cs{eq@finish} to allocate space for a number, but not actually have one +% \begin{macrocode} +\def\grp@override{% +% \end{macrocode} +% For aligned (possibly becomes an option?) +% For now ASSUMING we started out as CLM!!! +% \begin{macrocode} + \def\eqindent{I}% +% \end{macrocode} +% compute nominal left for centering the group +% \begin{macrocode} + \setlength\dim@a{(\grp@linewidth-\grp@wdT)/2}% +% \end{macrocode} +% Make sure L+R not too wide; should already have unset alignment +% \begin{macrocode} + \ifdim\dim@a<\z@\dim@a=\z@\fi + \dim@b\if L\eqnumside\grp@wdNum\else\z@\fi +% \end{macrocode} +% make sure room for number on left, if needed. +% \begin{macrocode} + \if\grp@shiftnumber\else + \ifdim\dim@b>\dim@a\dim@a\dim@b\fi + \fi + \if\grp@aligned + \addtolength\dim@a{\grp@wdL-\eq@wdL}% + \fi + \mathindent\dim@a + \ifdim\dim@b>\dim@a + \let\eq@shiftnumber\@True + \fi +% \end{macrocode} +% Could set |\def\eqnumplace{T}| (or even (m) if indentation is enough). +% +% NOTE: Work out how this should interact with the various formats!!! +% NOTE: should recognize the case where the LHS's are a bit Wild, +% and then do simple left align (not on relation) +% \begin{macrocode} +} +% \end{macrocode} +% +% +% +% \section{The \env{darray} environment} +% There are two potential applications for darray. One +% is like eqnarray where the natural structure of the material crosses the +% table cell boundaries, and math operator spacing needs to be preserved +% across cell boundaries. And there is also the feature of +% attaching an equation number to each row. The other application +% is like a regular array but with automatic displaystyle math in each +% cell and better interline spacing to accommodate outsize cell +% contents. In this case it is difficult to keep the vert ruling +% capabilities of the standard \env{array} environment without +% redoing the implementation along the lines of Arseneau's +% \pkg{tabls} package. Because the vert ruling feature is at +% cross purposes with the feature of allowing interline stretch and page +% breaks within a multiline array of equations, the \env{darray} +% environment is targeted primarily as an alternative to +% \env{eqnarray}, and does not support vertical ruling. +% +% Overall strategy for \env{darray} is to use +% \cs{halign} for the body. In the case of a group, use a +% single halign for the whole group! +% \begin{aside} +% What about intertext? +% \end{aside} +% +% That's the most reliable way +% to get accurate column widths. Don't spread the halign to the +% column width, just use the natural width. Then, if we repack the +% contents of the halign into \cs{EQ@box} and \cs{EQ@copy}, as +% done for dmath, and twiddle a bit with the widths of the first and last +% cell in each row, we can use the same algorithms for centering and +% equation number placement as dmath! As well as handling footnotes +% and vadjust objects the same way. +% +% We can't just use \cs{arraycolsep} for \env{darray}, if +% we want to be able to change it without screwing up interior arrays. +% So let's make a new colsep variable. The initial value is +% \quoted{2em, but let it shrink if necessary}. +% \begin{macrocode} +\newskip\darraycolsep \darraycolsep 20pt plus1fil minus12pt +% \end{macrocode} +% Let's make a nice big default setup with eighteen columns, split up +% into six sets of lcr like \env{eqnarray}. +% \begin{macrocode} +\newcount\cur@row \newcount\cur@col +\def\@tempa#1#2#3{% + \cur@col#1 \hfil + \setbox\z@\hbox{$\displaystyle####\m@th$}\@nx\col@box + \tabskip\z@skip + &\cur@col#2 \hfil + \setbox\z@\hbox{$\displaystyle\mathord{}####\mathord{}\m@th$}\@nx\col@box + \hfil + &\cur@col#3 \setbox\z@\hbox{$\displaystyle####\m@th$}\@nx\col@box + \hfil\tabskip\darraycolsep +} +\xdef\darray@preamble{% + \@tempa 123&\@tempa 456&\@tempa 789% + &\@tempa{10}{11}{12}&\@tempa{13}{14}{15}&\@tempa{16}{17}{18}% + \cr +} +\@ifundefined{Mathstrut@}{\let\Mathstrut@\strut}{} +\def\darray@cr{\Mathstrut@\cr} +\def\col@box{% +%\debugmsg{Col \number\cur@row,\number\cur@col: \the\wd\z@\space x \the\ht\z@+\the\dp\z@}% + \unhbox\z@ +} +\newenvironment{darray}{\@optarg\@darray{}}{} +\def\@darray[#1]{% + \debugmsg{=== DARRAY ==================================================}% + \if\eq@group\else\eq@prelim\fi +% \end{macrocode} +% Init the halign preamble to empty, then unless the \quoted{cols} key is +% used to provide a non-null preamble just use the +% default darray preamble which is a multiple lcr. +% \begin{macrocode} + \global\let\@preamble\@empty + \setkeys{breqn}{#1}% + \the\eqstyle \eq@setnumber + \ifx\@preamble\@empty \global\let\@preamble\darray@preamble \fi + \check@mathfonts + % \let\check@mathfonts\relax % tempting, but too risky + \@xp\let\csname\string\ \endcsname\darray@cr + \setbox\z@\vbox\bgroup + \everycr{\noalign{\global\advance\cur@row\@ne}}% + \tabskip\z@skip \cur@col\z@ + \global\cur@row\z@ + \penalty\@ne % flag for \dar@repack + \halign\@xp\bgroup\@preamble +} +% \end{macrocode} +% Assimilate following punctuation. +% \begin{macrocode} +\def\enddarray#1{\check@punct@or@qed} +\def\end@darray{% + \ifvmode\else \eq@addpunct \Mathstrut@\fi\crcr \egroup + \dar@capture + \egroup +} +% \end{macrocode} +% +% The \cs{dar@capture} function steps back through the +% list of row boxes and grinds them up in the best possible way. +% \begin{macrocode} +\def\dar@capture{% +%% \showboxbreadth\maxdimen\showboxdepth99\showlists + \eq@wdL\z@ \eq@wdRmax\z@ + \dar@repack +} +% \end{macrocode} +% +% The \cs{dar@repack} function is a variation of +% \cs{eq@repack}. +% \begin{macrocode} +\def\dar@repack{% + \unpenalty + \setbox\tw@\lastbox +%\batchmode{\showboxbreadth\maxdimen\showboxdepth99\showbox\tw@}\errorstopmode + \global\setbox\EQ@box\hbox{% + \hbox{\unhcopy\tw@\unskip}\penalty-\@M \unhbox\EQ@box}% + \global\setbox\EQ@copy\hbox{% + \hbox{\unhbox\tw@\unskip}\penalty-\@M \unhbox\EQ@copy}% + \unskip + \ifcase\lastpenalty \else\@xp\@gobble\fi + \dar@repack +} +% \end{macrocode} +% +% +% +% +% \section{Miscellaneous} +% The \cs{condition} command. With +% the star form, set the argument in math mode instead of text mode. +% In a series of conditions, use less space between members of the +% series than between the conditions and the main equation body. +% +% BRM: Some modifications here, since I like for the condition +% to go flush right. (thus, it also affects centering, margins, etc) +% \begin{macrocode} +\newskip\conditionsep \conditionsep=10pt minus5pt% +\newcommand{\conditionpunct}{,} +\let\cond@gobble\@firstofone +\newcommand\condition{% + \begingroup\@tempswatrue + \@ifstar{\@tempswafalse \condition@a}\condition@a +} +\newcommand\condition@a[2][\conditionpunct]{% + \unpenalty\unskip\unpenalty\unskip % BRM Added + \hbox{#1}% + \penalty -201\relax\hbox{}% Penalty to allow breaks here. + \hskip\conditionsep + \if@tempswa \@xp\hbox \else \@xp\condition@b\fi + {#2}% + \endgroup +% \end{macrocode} +% BRM: Testing if I can measure conditions? +% \begin{macrocode} + \setbox\z@\if@tempswa\hbox{#2}\else\hbox{\textmath@setup #2}\fi + \global\eq@wdCond\wd\z@ + \let\cond@gobble\@gobble +} +% \end{macrocode} +% For a math condition. +% This is called inside a group so we don't need extra grouping to +% localize the effect of \cs{textmath@setup} which turns off the +% line-breaking features of bin, rel, and delimiter symbols. +% \begin{macrocode} +\newcommand\condition@b[1]{% + \cond@gobble{\hskip\conditionsep}% + \textmath@setup #1% +} +% \end{macrocode} +% +% The \env{dsuspend} environment. First the old one that didn't work. +% \begin{macrocode} +\newenvironment{XXXXdsuspend}{% + \global\setbox\EQ@box\vbox\bgroup \@parboxrestore +% \end{macrocode} +% If we are inside a list environment, \cs{displayindent} and +% \cs{displaywidth} give us \cs{@totalleftmargin} and +% \cs{linewidth}. +% \begin{macrocode} + \parshape 1 \displayindent \displaywidth\relax + \hsize=\columnwidth \noindent\ignorespaces +}{% + \par\egroup +% \end{macrocode} +% Let's try giving \cs{EQ@box} the correct height for the first +% line and \cs{EQ@copy} the depth of the last line. +% \begin{macrocode} + \global\setbox\GRP@box\vbox{% + \vbox{\copy\EQ@box\vtop{\unvbox\EQ@box}}% + \unvbox\GRP@box + }% +% \end{macrocode} +% Need to add a dummy element to \cs{GRP@queue}. +% \begin{macrocode} + \global\GRP@queue\@xp{\the\GRP@queue + \@elt{\gdef\EQ@trial{}}% + }% +} +% \end{macrocode} +% And then the one that does work. +% \begin{macrocode} +\newenvironment{dsuspend}{% + \global\setbox\EQ@box\vbox\bgroup \@parboxrestore + \parshape 1 \displayindent \displaywidth\relax + \hsize=\columnwidth \noindent\ignorespaces +}{% + \par\egroup + \global\setbox\GRP@box\vbox{% + \hbox{\copy\EQ@box\vtop{\unvbox\EQ@box}}% + \unvbox\GRP@box + }% + \global\GRP@queue\@xp{\the\GRP@queue +% \@elt{\gdef\EQ@trial{\let\eq@isIntertext\@True}}% + \@elt{\let\eq@isIntertext\@True}% + }% +} +% \end{macrocode} +% Allow \cn{intertext} as a short form of the \env{dsuspend} +% environment; it's more convenient to write, but it doesn't support +% embedded verbatim because it reads the material as a macro argument. +% To support simultaneous use of \pkg{amsmath} and +% \pkg{breqn}, the user command \cs{intertext} is left alone +% until we enter a \pkg{breqn} environment. +% \begin{macrocode} +\newcommand\breqn@intertext[1]{\dsuspend#1\enddsuspend} +% \end{macrocode} +% +% +% \begin{macro}{\*} +% \begin{macro}{\discretionarytimes} +% Discretionary times sign. Standard \latex definition +% serves only for inline math. Should the thin space be +% included? Not sure. +% \begin{macrocode} +\renewcommand{\*}{% + \if@display +% \end{macrocode} +% Since \cs{eq@binoffset} is mu-glue, we can't use it directly +% with \cs{kern} but have to measure it separately in a box. +% \begin{macrocode} + \setbox\z@\hbox{\mathsurround\z@$\mkern\eq@binoffset$}% + \discretionary{}{% + \kern\the\wd\z@ \textchar\discretionarytimes + }{}% + \thinspace + \else + \discretionary{\thinspace\textchar\discretionarytimes}{}{}% + \fi +} +% \end{macrocode} +% This is only the symbol; it can be changed to some other symbol if +% desired. +% \begin{macrocode} +\newcommand{\discretionarytimes}{\times} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\nref} +% +% This is like \cs{ref} but doesn't apply font changes or other +% guff if the reference is undefined. +% And it is fully expandable for use as a label value. +% \begin{aside} +% +% Can break with Babel if author uses active characters in label key; +% need to address that \begin{dn} +% mjd,1999/01/21 +% \end{dn} +% . +% \end{aside} +% +% \begin{macrocode} +\def\nref#1{\@xp\@nref\csname r@#1\endcsname} +\def\@nref#1#2{\ifx\relax#1??\else \@xp\@firstoftwo#1\fi} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \end{macrocode} +% +% \end{macro} +% +% +% +% +% +% \section{Wrap-up} +% The usual endinput. +% \begin{macrocode} +% +% \end{macrocode} +% +% +% +% +% \section{To do} +% \begin{enumerate} +% \item Alignment for equation groups. +% +% +% \item +% Use dpc's code for package options in keyval form. +% +% \item +% Encapsulate \dquoted{break math} into a subroutine taking suitable +% arguments. +% +% \item +% Need a density check for layout S when linewidth is very small. +% +% \item +% Make \verb":=" trigger a warning about using \cs{coloneq} +% instead. +% +% \item Ill-centered multiline equation (three-line case) in +% test008. +% +% \item Attaching a single group number. +% +% +% \item +% Make sure to dump out box registers after done using them. +% +% \item Do the implementation for \cs{eq@resume@parshape}. +% +% +% \item Check on stackrel and buildrel and relbar and ???. +% +% +% \item Test math symbols at the beginning of array cells. +% +% \item Test \dbslash cmd in and out of delims. +% +% \item Framing the equation body: the parshape and number placement +% need adjusting when a frame is present. +% +% +% \item Cascading line widths in list env. +% +% +% \item Noalign option for dmath = multline arrangement? +% +% +% \item Nocompact option, suggested 1998/05/19 by Andrew +% Swann. +% +% +% \item \cs{delbreak} cmd to add discretionary space at a break +% within delimiters. +% +% +% \item Reduce above/below skip when the number is shifted. +% +% +% \item Need a \cs{middelim} command for marking a delimiter symbol +% as nondirectional if it has an innate directionality \verb"()[]" \etc . +% +% +% \item +% \cs{xrightarrow} from amsmath won't participate in line +% breaking unless something extra is done. +% Make \cs{BreakingRel} and \cs{BreakingBin} functions? +% +% \item Placement of number in an indented quotation or +% abstract. +% +% \item If $LHSwd > 2em$, it might be a good idea to try with +% eq@indentstep = 2em before shifting the number. Currently this +% doesn't happen if the first trial pass (without the number) +% succeeds with $indentstep = LHSwd > 2em$. +% +% +% \item Read past \verb"\end{enumerate}" when checking +% for \verb"\end{proof}"? +% +% \item +% Look into using a \dquoted{qed-list} of environment names instead of +% checking the existence of \cs{proofqed}. +% +% \item Pick up the vadjust\slash footnote\slash mark handling. +% +% +% \item Forcing\slash prohibiting page breaks after\slash before +% an equation. +% +% +% \item Adding a spanner brace on the left and individual numbers on +% the right (indy-numbered cases). +% +% +% \item Provide \cs{shiftnumber}, \cs{holdnumber} to +% override the decision. +% +% \item Provide a mechanism for adjusting the vertical position of +% the number. Here a version-specific selection macro would be +% useful. +% \begin{literalcode} +% \begin{dmath}[ +% style={\foredition{1}{\raisenumber{13pt}}} +% ] +% \end{literalcode} +% +% +% \item +% Add an alignleft option for an equation group to mean, break and +% align to a ladder layout as usual within the equations, but for the +% group alignment used the leftmost point (for equations that don't +% have an LHS, this makes no difference). +% +% \item +% Test with Arseneau's wrapfig for parshape\slash everypar +% interaction. +% +% +% \item Fix up the macro/def elements. +% +% \item Convert the literal examples in section \quoted{Equation types and +% forms} to typeset form. +% +% +% \item Compile comparison-examples: \eg , a standard equation +% env with big left-right objects that don't shrink, versus how shrinking +% can allow it to fit. +% +% +% \item Frame the \dquoted{figures} since they are mostly +% text. +% +% \end{enumerate} +% +% +% +% Possible enhancements: +% \begin{enumerate} +% \item Provide a \opt{pull} option meaning to pull the first +% and last lines out to the margin, like the \env{multline} +% environment of the \pkg{amsmath} package. Maybe this should +% get an optional argument, actually, to specify the amount of space left +% at the margin. +% +% \item With the draft option, one would like to see the equation +% labels in the left margin. Need to check with the +% \pkg{showkeys} package. +% +% +% \item Options for break preferences: if there's not enough room, do +% we first shift the number, or first try to break up the equation +% body?. In an aligned group, does sticking to the group alignment +% take precedence over minimizing the number of line breaks needed for +% individual equations?. And the general preferences probably need +% to be overridable for individual instances. +% +% \item Extend suppress-breaks-inside-delimiters support to inline +% math (suggestion of Michael Doob). +% +% \item Use belowdisplayshortskip above a dsuspend fragment if the +% fragment is only one line and short enough compared to the equation line +% above it. +% +% +% \item Add \cs{eqfuzz} distinct from \cs{hfuzz}. +% Make use of it in the measuring phase. +% +% +% \item Provision for putting in a \quoted{continued} note. +% +% \item Conserve box mem: modify frac, sub, sup, overline, underline, +% sqrt, to turn off \cs{bin@break} and (less urgently) +% \cs{rel@break}. +% +% +% \item More explicit support for Russian typesetting conventions (cf +% Grinchuk article). +% +% +% \item With package option \opt{refnumbers}, +% leave unnumbered all uncited equations, even if they are not done with +% the star form (Bertolazzi's easyeqn idea). +% +% \item In an equation group, use a vertical bracket with the +% equation number to mark the lines contained in that equation. +% +% +% \item For a two-line multline thingamabob, try to +% make sure that the lines overlap in the middle by 2 em or whatever +% (settable design variable). +% +% \item Provide a separate vertical column for the principal mathrel +% symbols and center them within the column if they aren't all the same +% width. Maybe an option for \env{dmath}: relwidth=x, so that two +% passes are not required to get the max width of all the mathrels. +% Or, no, just require it to be an halign or provide a macro to be +% applied to all the shorter rels: +% \begin{literalcode} +% lhs \widerel{19pt}{=} ... +% \xrightarrow{foo} ... +% \end{literalcode} +% +% +% \item try to use vadjust for keepglue +% +% \end{enumerate} diff --git a/Master/texmf-dist/source/latex/mh/empheq.dtx b/Master/texmf-dist/source/latex/mh/empheq.dtx index 32f5fadbbd4..8f46877b052 100644 --- a/Master/texmf-dist/source/latex/mh/empheq.dtx +++ b/Master/texmf-dist/source/latex/mh/empheq.dtx @@ -1,38 +1,136 @@ % \iffalse meta-comment -% File `empheq.dtx'. -% Copyright 2002-2004 Morten H\o gholm. -% moho01ab@student.cbs.dk -% -% It 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 2003/12/01 or later. +% +% Copyright (C) 2002-2007 by Morten Hoegholm +% +% 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 Morten H\o gholm. -% -% This work consists of the files empheq.dtx and empheq.ins and the -% derived files empheq.sty and ntheorem.fix. -% \fi -% \iffalse -%\NeedsTeXFormat{LaTeX2e} -%\ProvidesPackage{empheq} -%\ProvidesFile{ntheorem.fix} -%<*dtx> - \ProvidesFile{empheq.dtx} -% - [2004/10/10 v2.11a -% Emphasizing equations (MH) -% empheq support and fixes for ntheorem (MH) - ] +% This Current Maintainer of this work is Morten Hoegholm. +% +% This work consists of the main source file empheq.dtx +% and the derived files +% empheq.sty, empheq.pdf, empheq.ins, empheq.drv. +% +% Distribution: +% CTAN:macros/latex/contrib/mh/empheq.dtx +% CTAN:macros/latex/contrib/mh/empheq.pdf +% +% Unpacking: +% (a) If empheq.ins is present: +% tex empheq.ins +% (b) Without empheq.ins: +% tex empheq.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{empheq.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If empheq.drv is present: +% latex empheq.drv +% (b) Without empheq.drv: +% latex empheq.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex empheq.dtx +% makeindex -s gind.ist empheq.idx +% pdflatex empheq.dtx +% makeindex -s gind.ist empheq.idx +% pdflatex empheq.dtx +% +% Installation: +% TDS:tex/latex/mh/empheq.sty +% TDS:doc/latex/mh/empheq.pdf +% TDS:source/latex/mh/empheq.dtx +% +%<*ignore> +\begingroup + \def\x{LaTeX2e} +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +% +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: empheq 2007/12/03 v2.12 empheq (MH)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\preamble + +This is a generated file. + +Copyright (C) 2002-2007 by Morten Hoegholm + +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 empheq.dtx +and the derived files + empheq.sty, empheq.pdf, empheq.ins, empheq.drv. + +\endpreamble + +\generate{% + \file{empheq.ins}{\from{empheq.dtx}{install}}% + \file{empheq.drv}{\from{empheq.dtx}{driver}}% + \usedir{tex/latex/mh}% + \file{empheq.sty}{\from{empheq.dtx}{package}}% +} + +\obeyspaces +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* empheq.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `empheq.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +% +%<*ignore> +\fi +% %<*driver> -\documentclass[a4paper]{ltxdoc} +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{empheq.drv}% + [2007/12/03 v2.12 Emphasizing equations (MH)] +\documentclass{ltxdoc} +\usepackage{mathpazo} \usepackage[overload]{empheq} -\usepackage{color,varioref,booktabs,fancybox} +\usepackage{xcolor,varioref,booktabs,fancybox} \pagestyle{headings} \hyphenation{emph-eq} @@ -211,7 +309,7 @@ \makeatother \usepackage{graphicx} -\usepackage[final,breaklinks=true,hyperindex=false,linkbordercolor=false]{hyperref} +\usepackage[final,breaklinks=true,hyperindex=false]{hyperref} \renewcommand*\usage[1]{\textit{\hyperpage{#1}}} \OnlyDescription @@ -252,7 +350,7 @@ % \changes{v0.5}{2002/12/30}{First experimental and very limited % release} % -% \GetFileInfo{empheq.dtx} +% \GetFileInfo{empheq.drv} % \CheckSum{2495} % % \title{The \pkg{empheq} package\thanks{This file has version number @@ -629,8 +727,8 @@ % \subsubsection{Compatibility with the old version} % % The current version (\fileversion) of \pkg{empheq} is incompatible with -% versions prior to and including~0.7d. If you have documents produced -% with versions prior to~0.7d, then you have to load the package +% versions prior to and including~0.7e. If you have documents produced +% with versions prior to~0.7e, then you have to load the package % \pkg{empheq07} instead. \pkg{empheq07} now exists as a separate package % package with its own documentation, but I strongly recommend switching % to the new version because it is so much better. @@ -1449,7 +1547,7 @@ % Should you have any feature request, suggestions, or bug reports % then feel free to contact me at % \begin{quote} -% \email{moho01ab@student.cbs.dk} +% \email{mh.ctan@gmail.com} % \end{quote} % Please put `empheq' in the subject line. % @@ -1560,7 +1658,9 @@ % \section{Requirements, Options, and Strategy} % Lets start the package. We'll need the tools from \pkg{mhsetup}. % \begin{macrocode} -%<*empheq> +%<*package> +\ProvidesPackage{empheq}% + [2007/12/03 v2.12 Emphasizing equations (MH)] % \end{macrocode} % \begin{macrocode} \RequirePackage{mhsetup}[2004/10/10] @@ -1603,7 +1703,8 @@ % % Load the \pkg{ntheorem} support file. % \begin{macrocode} -\DeclareOption{ntheorem}{\AtEndOfPackage{\input{ntheorem.fix}}} +\gdef\g@EQ@ntheorem@support@bool{01} +\DeclareOption{ntheorem}{\gdef\g@EQ@ntheorem@support@bool{00}} % \end{macrocode} % Pass other options to \pkg{mathtools}. % \begin{macrocode} @@ -3196,7 +3297,18 @@ \MH_let:NwN \hyper@refstepcounter\@gobble } % \end{macrocode} +% +% \subsection{\pkg{nccmath}} % +% Must disable this macro, otherwise the spacing is wrong. +% \begin{macrocode} + \g@addto@macro\EQ_typeset_display_hook:{ + \let\NCC@ignorepar\relax + } + \g@addto@macro\EQ_typeset_tags_hook:{ + \let\NCC@ignorepar\relax + } +% \end{macrocode} % % \subsection{Basic \pkg{ntheorem} support} % \begin{macrocode} @@ -3460,11 +3572,16 @@ } % \end{macrocode} % End of \cs{AtBeginDocument} additions. +% +% If we need to load \pkg{ntheorem} support this is where it +% happens. Otherwise we just stop here. % \begin{macrocode} -% +\if\g@EQ@ntheorem@support@bool +\else + \expandafter\endinput +\fi % \end{macrocode} % -% % \section{Patching Things up for \pkg{ntheorem}} % \label{sec:impl:ntheorem} % @@ -3480,7 +3597,6 @@ % in \pkg{amsmath} that could cause tags to cross page boundaries % without warning. The \cs{nobreak} is the addition. % \begin{macrocode} -%<*ntheorem> \def\default_raisetag:{\nobreak} \def\raisetag#1{ \skip@#1\relax @@ -3752,7 +3868,7 @@ \hfil \fi: \strut@ - $\m@th\displaystyle{}##\endmultline@math + $\m@th\displaystyle{}##\endmultline@math%$ \hfil }% \crcr @@ -4042,9 +4158,9 @@ % \end{macrocode} % \end{macro} % -% End of \pkg{ntheorem} patches. +% End of \pkg{ntheorem} patches and package. % \begin{macrocode} -% +% % \end{macrocode} % \Finale \endinput diff --git a/Master/texmf-dist/source/latex/mh/empheq07.dtx b/Master/texmf-dist/source/latex/mh/empheq07.dtx index 09bb2c6f3c0..a8921940f1a 100644 --- a/Master/texmf-dist/source/latex/mh/empheq07.dtx +++ b/Master/texmf-dist/source/latex/mh/empheq07.dtx @@ -1,31 +1,133 @@ -%\iffalse meta-comment -% File `empheq07.dtx'. -% Copyright 2002-2004 Morten H\o gholm. -% moho01ab@student.cbs.dk +% \iffalse meta-comment % -% It 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 2003/12/01 or later. +% Copyright (C) 2002-2007 by Morten Hoegholm +% +% 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 Morten H\o gholm. +% This Current Maintainer of this work is Morten Hoegholm. +% +% This work consists of the main source file empheq07.dtx +% and the derived files +% empheq07.sty, empheq07.pdf, empheq07.ins, empheq07.drv. +% +% Distribution: +% CTAN:macros/latex/contrib/mh/empheq07.dtx +% CTAN:macros/latex/contrib/mh/empheq07.pdf +% +% Unpacking: +% (a) If empheq07.ins is present: +% tex empheq07.ins +% (b) Without empheq07.ins: +% tex empheq07.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{empheq07.dtx} +% (quote the arguments according to the demands of your shell) % -% This work consists of the files empheq07.dtx and empheq07.ins -% and the derived file empheq07.sty. +% Documentation: +% (a) If empheq07.drv is present: +% latex empheq07.drv +% (b) Without empheq07.drv: +% latex empheq07.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} % -%<*dtx> - \ProvidesFile{empheq07.dtx} -% -%\NeedsTeXFormat{LaTeX2e} -%\ProvidesPackage{empheq07} - [2004/07/27 v0.7d Emphasizing equations (MH)] +% Programm calls to get the documentation (example): +% pdflatex empheq07.dtx +% makeindex -s gind.ist empheq07.idx +% pdflatex empheq07.dtx +% makeindex -s gind.ist empheq07.idx +% pdflatex empheq07.dtx +% +% Installation: +% TDS:tex/latex/mh/empheq07.sty +% TDS:doc/latex/mh/empheq07.pdf +% TDS:source/latex/mh/empheq07.dtx +% +%<*ignore> +\begingroup + \def\x{LaTeX2e} +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +% +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: empheq07 2007/12/03 v0.7e empheq07 (MH)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\preamble + +This is a generated file. + +Copyright (C) 2002-2007 by Morten Hoegholm + +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 empheq07.dtx +and the derived files + empheq07.sty, empheq07.pdf, empheq07.ins, empheq07.drv. + +\endpreamble + +\generate{% + \file{empheq07.ins}{\from{empheq07.dtx}{install}}% + \file{empheq07.drv}{\from{empheq07.dtx}{driver}}% + \usedir{tex/latex/mh}% + \file{empheq07.sty}{\from{empheq07.dtx}{package}}% +} + +\obeyspaces +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* empheq07.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `empheq07.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +% +%<*ignore> +\fi +% %<*driver> -\documentclass[a4paper]{ltxdoc} +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{empheq07.drv}% + [2007/12/03 v0.7e Emphasizing equations (MH)] +\documentclass{ltxdoc} \usepackage{empheq07} \usepackage{color,fancybox,ifpdf} \ifpdf\else @@ -62,7 +164,7 @@ % \ifpdf\else % \BonusExampletrue % \fi -% \GetFileInfo{empheq07.dtx} +% \GetFileInfo{empheq07.drv} % \CheckSum{1273} % \title{The \EQ\ package\thanks{This file % has version number \fileversion, last @@ -357,6 +459,8 @@ % \LaTeX\ system. % \begin{macrocode} %<*package> +\ProvidesPackage{empheq07}% + [2007/12/03 v0.7e Emphasizing equations (MH)] \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{amsmath}} \ProcessOptions\relax \RequirePackage{amsmath}[2000/07/18] diff --git a/Master/texmf-dist/source/latex/mh/flexisym.dtx b/Master/texmf-dist/source/latex/mh/flexisym.dtx new file mode 100644 index 00000000000..3ce279e4e82 --- /dev/null +++ b/Master/texmf-dist/source/latex/mh/flexisym.dtx @@ -0,0 +1,1279 @@ +% \iffalse meta-comment +% +% Copyright (C) 1997-2003 by Michael J. Downes +% Copyright (C) 2007 by Morten Hoegholm +% +% 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 flexisym.dtx +% and the derived files +% flexisym.sty, flexisym.pdf, flexisym.ins, flexisym.drv, +% cmbase.sym, msabm.sym. +% +% Distribution: +% CTAN:macros/latex/contrib/mh/flexisym.dtx +% CTAN:macros/latex/contrib/mh/flexisym.pdf +% +% Unpacking: +% (a) If flexisym.ins is present: +% tex flexisym.ins +% (b) Without flexisym.ins: +% tex flexisym.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{flexisym.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If flexisym.drv is present: +% latex flexisym.drv +% (b) Without flexisym.drv: +% latex flexisym.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex flexisym.dtx +% makeindex -s gind.ist flexisym.idx +% pdflatex flexisym.dtx +% makeindex -s gind.ist flexisym.idx +% pdflatex flexisym.dtx +% +% Installation: +% TDS:tex/latex/mh/flexisym.sty +% TDS:tex/latex/mh/cmbase.sym +% TDS:tex/latex/mh/mathpazo.sym +% TDS:tex/latex/mh/mathptmx.sym +% TDS:tex/latex/mh/msabm.sym +% TDS:doc/latex/mh/flexisym.pdf +% TDS:source/latex/mh/flexisym.dtx +% +%<*ignore> +\begingroup + \def\x{LaTeX2e} +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +% +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: flexisym 2007/12/10 v0.95 Flexisym (MH)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\preamble + +This is a generated file. + +Copyright (C) 1997-2003 by Michael J. Downes +Copyright (C) 2007 by Morten Hoegholm + +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 flexisym.dtx +and the derived files + flexisym.sty, flexisym.pdf, flexisym.ins, flexisym.drv, + cmbase.sym, mathpazo.sym, mathptmx.sym, msabm.sym. + +\endpreamble + +\generate{% + \file{flexisym.ins}{\from{flexisym.dtx}{install}}% + \file{flexisym.drv}{\from{flexisym.dtx}{driver}}% + \usedir{tex/latex/mh}% + \file{flexisym.sty}{\from{flexisym.dtx}{package}}% + \file{cmbase.sym}{\from{flexisym.dtx}{cmbase}}% + \file{mathpazo.sym}{\from{flexisym.dtx}{mathpazo}}% + \file{mathptmx.sym}{\from{flexisym.dtx}{mathptmx}}% + \file{msabm.sym}{\from{flexisym.dtx}{msabm}}% +} + +\obeyspaces +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* flexisym.sty, cmbase.sym, mathpazo.sym, mathptmx.sym, msabm.sym} +\Msg{*} +\Msg{* To produce the documentation run the file `flexisym.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +% +%<*ignore> +\fi +% +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{flexisym.drv}% + [2007/12/10 v0.95 flexisym (MH)] +\documentclass{ltxdoc} +\providecommand*\pkg[1]{\textsf{#1}} +\providecommand*\cls[1]{\textsf{#1}} +\providecommand*\opt[1]{\texttt{#1}} +\providecommand*\env[1]{\texttt{#1}} +\providecommand*\fn[1]{\texttt{#1}} +\makeatletter +\providecommand{\AmS}{{\protect\AmSfont + A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}} +\providecommand{\AmSfont}{% + \usefont{OMS}{cmsy}{\if\expandafter\@car\f@series\@nil bb\else m\fi}{n}} +\makeatother +\newenvironment{aside}{\begin{quote}\bfseries}{\end{quote}} +\begin{document} + \DocInput{flexisym.dtx} +\end{document} +% +% \fi +% +% \title{The \textsf{flexisym} package} +% \date{2007/12/10 v0.95} +% \author{Morten H\o gholm \\\texttt{mh.ctan@gmail.com}} +% +% \maketitle +% +% \part*{User's guide} +% +% For now, the user's guide is in breqn. +% +% \StopEventually{} +% \part*{Implementation} +% +% \section{flexisym} +% +% \begin{macrocode} +%<*package> +\ProvidesPackage{flexisym}[2007/12/10 v0.95] +\let\@xp\expandafter \let\@nx\noexpand +\edef\do{% + \@nx\AtEndOfPackage{% + \catcode\number`\"=\number\catcode`\" + \relax + }% +} +\do \let\do\relax +\catcode`\"=12 +\let\@sym\@gobble +\DeclareOption{robust}{% + \def\@sym#1{% + \ifx\protect\@typeset@protect \else\protect#1\@xp\@gobblefour\fi + }% +} +\def\mg@bin{2}% binary operators +\def\mg@rel{2}% relations +%%\def\mg@nre{B}% negated relations +\def\mg@del{3}% delimiters +%%\def\mg@arr{B}% arrows +\def\mg@acc{0}% accents +\def\mg@cop{3}% cumulative operators (sum, int) +\def\mg@latin{1}% (Latin) letters +\def\mg@greek{1}% (lowercase) Greek +\def\mg@Greek{0}% (capital) Greek +%%\def\mg@bflatin{4}% bold upright Latin letters ? +%%\def\mg@Bbb{B}% blackboard bold +\def\mg@cal{2}% script/calligraphic +%%\def\mg@frak{5}% Fraktur letters +\def\mg@digit{0}% decimal digits % 1 = oldstyle, 0 = capital +\expandafter\let\csname MathChar \endcsname\mathchar +\expandafter\let\csname Delimiter \endcsname\delimiter +\expandafter\let\csname Radical \endcsname\radical +\newcommand{\MathChar}{} +\edef\MathChar{\csname MathChar \endcsname\noexpand\string} +\newcommand{\Delimiter}{} +\edef\Delimiter{\csname Delimiter \endcsname\noexpand\string} +\newcommand{\Radical}{} +\edef\Radical{\csname Radical \endcsname\noexpand\string} +\let\sumlimits\displaylimits +\let\intlimits\nolimits +\let\namelimits\displaylimits +\edef\m@Ord#1#2#3{\csname MathChar \endcsname"0#1#2#3 } +\edef\m@Var#1#2#3{\csname MathChar \endcsname"7#1#2#3 } +\edef\m@Bin#1#2#3{\csname MathChar \endcsname"2#1#2#3 } +\edef\m@Rel#1#2#3{\csname MathChar \endcsname"3#1#2#3 } +\edef\m@Pun#1#2#3{\csname MathChar \endcsname"6#1#2#3 } +\edef\m@COs#1#2#3{\csname MathChar \endcsname"1#1#2#3 \sumlimits} +\edef\m@COi#1#2#3{\csname MathChar \endcsname"1#1#2#3 \intlimits} +\def\delim@a#1#2#3#4{\ifx\relax#1#2#3#4\else#1\fi #2#3#4} +\def\delim@b#1#2#3#4{\ifx\relax#1#2#3#4\else#1\fi } +\def\@tempa{% + \@nx\@xp\@nx\delim@a\@nx\csname sd@##1##2##3\@nx\endcsname ##1##2##3 } +\edef\m@DeL#1#2#3{\csname Delimiter \endcsname"4\@tempa} +\edef\m@DeR#1#2#3{\csname Delimiter \endcsname"5\@tempa} +\edef\m@DeB#1#2#3{\csname Delimiter \endcsname"0\@tempa} +\edef\m@DeA#1#2#3{\csname Delimiter \endcsname"3\@tempa} +\edef\m@Rad#1#2#3{\csname Radical \endcsname"\@tempa} +\def\do#1#2{\@xp\def\csname sd@#1\endcsname{#2}} +\do{300}{028} +\do{301}{029} +\do{302}{05B} +\do{303}{05D} +\do{304}{262} +\do{305}{263} +\do{306}{264} +\do{307}{265} +\do{308}{266} +\do{309}{267} +\do{30A}{268} +\do{30B}{269} +\do{30C}{26A} +\do{30D}{26B} +\do{30E}{13D} +\do{30F}{26E} +\do{340}{37A} +\do{341}{37B} +\do{33A}{33A} +\do{33B}{33B} +\do{33E}{33E} +\do{33C}{26A} +\do{33D}{26B} +\do{378}{222} +\do{379}{223} +\do{33F}{26C} +\do{37E}{22A} +\do{37F}{22B} +\do{377}{26D} +\do{30F}{26E} +\def\m@Acc#1#2#3#4{\mathaccent"#1#2#3{#4}} +\def\@symAcc{\@sym} +\let\@symtype\@firstofone +\def\@symOrd#1#2{\@symtype\mathord{\OrdSymbol{#2}}} +\def\@symVar{\@symOrd} +\def\@symBin#1#2{\@symtype\mathbin{\OrdSymbol{#2}}} +\def\@symRel#1#2{\@symtype\mathrel{\OrdSymbol{#2}}} +\def\@symPun#1#2{\@symtype\mathpunct{\OrdSymbol{#2}}} +\def\@symCOi#1#2{\@symtype{\mathop{\OrdSymbol{#2}}\intlimits}} +\def\@symCOs#1#2{\@symtype{\mathop{\OrdSymbol{#2}}\sumlimits}} +\def\@symOpe#1#2{\@symtype\mathopen{\OrdSymbol{#2}}} +\def\@symClo#1#2{\@symtype\mathclose{\OrdSymbol{#2}}} +\def\@symDeL#1#2{\@symtype\mathopen{\OrdSymbol{#2}}} +\def\@symDeR#1#2{\@symtype\mathclose{\OrdSymbol{#2}}} +\def\@symDeB#1#2{\@symtype\mathord{\OrdSymbol{#2}}} +\def\@symInn#1#2{\@symtype\mathinner{\OrdSymbol{#2}}} +\def\@xnce#1{\@xp\@nx\csname#1\endcsname} +\let\sym@global\global +\def\DeclareFlexSymbol#1#2#3#4{% + \begingroup + \edef\@tempb{\@nx\@sym\@nx#1\@xnce{m@#2}\@xnce{mg@#3}#4}% + \ifcat\@nx#1\relax + \sym@global\let#1\@tempb + \else + \sym@global\mathcode`#1="8000\relax + \lccode`\~=`#1\relax + \lowercase{\sym@global\let~\@tempb}% + \fi + \endgroup +} +\def\DeclareFlexCompoundSymbol#1#2#3{% + \@xp\DeclareRobustCommand\@xp#1\@xp{\csname @sym#2\endcsname#1{#3}}% + \sym@global\let#1#1\relax +} +\DeclareRobustCommand\textchar{\text@char\textfont} +\DeclareRobustCommand\scriptchar{\text@char\scriptfont}% +\def\text@char@a{\?\endgroup}% +\def\text@char@sym#1#2#3{% + \begingroup + \let\@sym\relax % defense against infinite loops + \the\text@script@char#3% + \afterassignment\text@char@a + \chardef\?="% +} +\def\text@char#1#2{\begingroup\check@mathfonts + \let\text@script@char#1\let\@sym\text@char@sym + \let\@symtype\@secondoftwo \let\OrdSymbol\@firstofone + \let\ifmmode\iftrue \everymath{$\@gobble}%$ + \def\mkern{\muskip\z@}\let\mskip\mkern + \ifcat\relax\noexpand#2#2% + \else + \lccode`\~=\expandafter`\string#2\relax + \lowercase{~}% + \fi + \endgroup +} +\providecommand\textprime{} +\DeclareRobustCommand\textprime{\leavevmode + \raise.8ex\hbox{\text@char\scriptfont\prime}% +} +\@ifundefined{resetMathstrut@}{}{% + \def\resetMathstrut@{% + \setbox\z@\hbox{\textchar\vert}% + \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@ + }% +} +\@ifundefined{rightarrowfill@}{}{% + \def\rightarrowfill@#1{\m@th\setboxz@h{$#1\relbar$}\ht\z@\z@ + $#1\copy\z@\mkern-6mu\cleaders + \hbox{$#1\mkern-2mu\box\z@\mkern-2mu$}\hfill + \mkern-6mu\OrdSymbol{\rightarrow}$} + \def\leftarrowfill@#1{\m@th\setboxz@h{$#1\relbar$}\ht\z@\z@ + $#1\OrdSymbol{\leftarrow}\mkern-6mu\cleaders + \hbox{$#1\mkern-2mu\copy\z@\mkern-2mu$}\hfill + \mkern-6mu\box\z@$} + \def\leftrightarrowfill@#1{\m@th\setboxz@h{$#1\relbar$}\ht\z@\z@ + $#1\OrdSymbol{\leftarrow}\mkern-6mu\cleaders + \hbox{$#1\mkern-2mu\box\z@\mkern-2mu$}\hfill + \mkern-6mu\OrdSymbol{\rightarrow}$} +} +\def\binrel@sym#1#2#3#4#5{% + \xdef\binrel@@##1{% + \ifx\m@Ord#2\@nx\@symOrd + \else\ifx\m@Var#2\@nx\@symVar + \else\ifx\m@COs#2\@nx\@symCOs + \else\ifx\m@COi#2\@nx\@symCOi + \else\ifx\m@Bin#2\@nx\@symBin + \else\ifx\m@Rel#2\@nx\@symRel + \else\ifx\m@Pun#2\@nx\@symPun + \else\@nx\@symErr \fi\fi\fi\fi\fi\fi\fi + ?{\@nx\OrdSymbol{##1}}}% +} +\def\binrel@a{% + \def\@symOrd##1##2{\gdef\binrel@@####1{\@symOrd##1{\OrdSymbol{####1}}}}% + \def\@symVar##1##2{\gdef\binrel@@####1{\@symVar##1{\OrdSymbol{####1}}}}% + \def\@symCOs##1##2{\gdef\binrel@@####1{\@symCOs##1{\OrdSymbol{####1}}}}% + \def\@symCOi##1##2{\gdef\binrel@@####1{\@symCOi##1{\OrdSymbol{####1}}}}% + \def\@symBin##1##2{\gdef\binrel@@####1{\@symBin##1{\OrdSymbol{####1}}}}% + \def\@symRel##1##2{\gdef\binrel@@####1{\@symRel##1{\OrdSymbol{####1}}}}% + \def\@symPun##1##2{\gdef\binrel@@####1{\@symPun##1{\OrdSymbol{####1}}}}% +} +\def\binrel@#1{% + \setbox\z@\hbox{$% + \let\mathchoice\@gobblethree + \let\@sym\binrel@sym \binrel@a + #1$}% +} +\def\@symextension{sym} +\newcommand\usesymbols[1]{% + \@for\@tempb:=#1\do{% + \@xp\@onefilewithoptions\@xp{\@tempb}[][]\@symextension + }% +} +\newcommand\ProvidesSymbols[1]{\ProvidesFile{#1.sym}} +\DeclareRobustCommand{\not}[1]{\@symRel\not{\OrdSymbol{\notRel#1}}} +\DeclareRobustCommand{\OrdSymbol}[1]{% + \begingroup\mathchars@reset#1\endgroup +} +\def\mathchars@reset{\let\@sym\@sym@ord \let\@symtype\@symtype@ord + \let\OrdSymbol\relax} +\def\@symtype@ord#1#{}% a strange sort of \@gobble +\def\@sym@ord#1#2{\@xp\@sym@ord@a\string#2\@nil}% +\begingroup +\lccode`\.=`\@ \lowercase{\endgroup +\def\@sym@ord@a#1.}#2#3\@nil#4#5#6{% + \csname MathChar \endcsname"0% + \if D#2\@xp\delim@b\csname sd@#4#5#6\endcsname#4#5#6 + \else #4#5#6 + \fi +} +% \end{macrocode} +% +% +% Before declaring any math characters active, we have to take care of +% a small problem with \pkg{amsmath} v2.x, if it is loaded before +% \pkg{flexisym}. \cs{std@minus} and \cs{std@equal} are defined as +% \begin{verbatim} +% \mathchardef\std@minus\mathcode`\-\relax +% \mathchardef\std@equal\mathcode`\=\relax +% \end{verbatim} +% in \fn{amsmath.sty} and again \cs{AtBeginDocument}. The +% latter is because +% \begin{quote} +% In case some alternative math fonts are loaded +% later. [\fn{amsmath.dtx}] +% \end{quote} +% The problem arises because \pkg{flexisym} sets the mathcode of all +% symbols to $32768$ which is illegal for a \cs{mathchardef}. +% +% We have to remove the assignments from the \cs{AtBeginDocument} hook +% as they will cause an error there. +% \begin{macrocode} +\@ifpackageloaded{amsmath}{% + \begingroup +% \end{macrocode} +% Split the contents of \cs{@begindocumenthook} by reading what we +% search for as a delimited argument and ensure these two assignments +% do not take place. It is questionable if anything reasonable can be +% done to them. In the case of a package such as \pkg{mathpazo} which defines +% \begin{verbatim} +%\DeclareMathSymbol{=}{\mathrel}{upright}{"3D} +% \end{verbatim} +% the \cs{Relbar} will look wrong if we don't use the correct +% symbol. The way to solve this is define additional \fn{.sym} files +% which contain the definition of \cs{relbar} and \cs{Relbar} +% needed. We need those additional files anyway for things like +% \cs{joinord}. +% \begin{macrocode} + \long\def\next#1\mathchardef\std@minus\mathcode`\-\relax + \mathchardef\std@equal\mathcode`\=\relax#2\flexi@stop{% + \toks@{#1#2}% + \xdef\@begindocumenthook{\the\toks@}% + }% + \expandafter\next\@begindocumenthook\flexi@stop + \endgroup +}{} +% \end{macrocode} +% +% There is problem when using \cs{DeclareMathOperator} as the +% operators defined call a command \cs{newmcodes@} which relies on the +% mathcode of \texttt{-} being less than 32768. We delay the +% definition \cs{AtBeginDocument} in case \pkg{amssymb} hasn't been +% loaded yet. +% \begin{macrocode} +\AtBeginDocument{% +\def\newmcodes@{% + \mathcode `\'39\mathcode `\*42\mathcode `\."613A + \ifnum\mathcode`\-=45 + \else +% \end{macrocode} +% The extra check. Don't do anything if \texttt{-} is math active. +% \begin{macrocode} + \ifnum\mathcode`\-=32768 + \else + \mathchardef \std@minus \mathcode `\-\relax + \fi + \fi + \mathcode `\-45 \mathcode `\/47\mathcode `\:"603A\relax +} +} +% \end{macrocode} +% +% And we then continue with the options. +% \begin{macrocode} +\DeclareOption{cmbase}{\usesymbols{cmbase}} +\DeclareOption{mathpazo}{\usesymbols{mathpazo}} +\DeclareOption{mathptmx}{\usesymbols{mathptmx}} +\ProcessOptions\relax +\renewcommand{\lnot}{\neg} +\renewcommand{\land}{\wedge} +\renewcommand{\lor}{\vee} +\renewcommand{\le}{\leq} +\renewcommand{\ge}{\geq} +\renewcommand{\ne}{\neq} +\renewcommand{\owns}{\ni} +\renewcommand{\gets}{\leftarrow} +\renewcommand{\to}{\rightarrow} +\renewcommand{\|}{\Vert} +\@ifpackagewith{flexisym}{mathstyleoff}{}{% + \RequirePackage[activechars]{mathstyle}\relax +} +%\endinput +% \end{macrocode} +% +% \section{cmbase, mathpazo, mathptmx} +% +% +% For each math font package we define a corresponding symbol file +% with extension \fn{sym}. The Computer Modern base is called +% \opt{cmbase} and \opt{mathpazo} and \opt{mathptmx} corresponds to +% the packages. The definitions are almost identical as they mostly +% concern the positions in the math font encodings. Look for +% differences in \cs{joinord}, \cs{relbar} and \cs{Relbar}. If you +% inspect the source code, you'll see that the support for +% \pkg{mathptmx} didn't require any work but I thought it better to +% create a \fn{sym} file to maintain a uniform interface. +% +% \begin{aside} +% Open question on \verb"!" and \verb"?": maybe they +% should have type `Pun' instead of `DeR'. Need to +% search for uses in math in AMS archives. Or, maybe add a special +% `Clo' type for them: non-extensible closing delimiter. +% \end{aside} +% +% +% +% Default mathgroup setup. +% \begin{macrocode} +%<*cmbase|mathpazo|mathptmx> +%\ProvidesSymbols{cmbase}[2001/09/07 v0.91] +%\ProvidesSymbols{mathpazo}[2007/12/09 v0.1] +%\ProvidesSymbols{mathptmx}[2007/12/09 v0.1] +\@xp\xdef\csname mg@OT1\endcsname{\hexnumber@\symoperators} +\@xp\xdef\csname mg@OML\endcsname{\hexnumber@\symletters} +\@xp\xdef\csname mg@OMS\endcsname{\hexnumber@\symsymbols} +\@xp\xdef\csname mg@OMX\endcsname{\hexnumber@\symlargesymbols} +\gdef\mg@bin{\mg@OMS} +\gdef\mg@del{\mg@OMX} +\xdef\mg@digit{\@xp\@nx\csname mg@OT1\endcsname} +\gdef\mg@latin{\mg@OML} +\global\let\mg@Latin\mg@latin +\global\let\mg@greek\mg@latin +\global\let\mg@Greek\mg@digit +\global\let\mg@rel\mg@bin +\global\let\mg@ord\mg@bin +\global\let\mg@cop\mg@del +% \end{macrocode} +% +% +% Symbols from the 128-character \fn{cmr} encoding. +% Paren and square bracket delimiters from this encoding are covered +% by the definitions in the \fn{cmex} section, however. +% \begin{macrocode} +\DeclareFlexSymbol{!} {Pun}{OT1}{21} +\DeclareFlexSymbol{+} {Bin}{OT1}{2B} +\DeclareFlexSymbol{:} {Rel}{OT1}{3A} +\DeclareFlexSymbol{\colon}{Pun}{OT1}{3A} +\DeclareFlexSymbol{;} {Pun}{OT1}{3B} +\DeclareFlexSymbol{=} {Rel}{OT1}{3D} +\DeclareFlexSymbol{?} {Pun}{OT1}{3F} +% \end{macrocode} +% \AmS\TeX, and therefore the \pkg{amsmath} package, make the +% uppercase Greek letters class 0 (nonvariable) instead of 7 +% (variable), to eliminate the glaring inconsistency with lowercase +% Greek. (In plain \TeX , \verb"{\bf\Delta}" works, while +% \verb"{\bf\delta}" doesn't. ) Let us try to make them both +% variable (fonts permitting) instead of nonvariable. +% \begin{macrocode} +\DeclareFlexSymbol{\Gamma} {Var}{Greek}{00} +\DeclareFlexSymbol{\Delta} {Var}{Greek}{01} +\DeclareFlexSymbol{\Theta} {Var}{Greek}{02} +\DeclareFlexSymbol{\Lambda} {Var}{Greek}{03} +\DeclareFlexSymbol{\Xi} {Var}{Greek}{04} +\DeclareFlexSymbol{\Pi} {Var}{Greek}{05} +\DeclareFlexSymbol{\Sigma} {Var}{Greek}{06} +\DeclareFlexSymbol{\Upsilon}{Var}{Greek}{07} +\DeclareFlexSymbol{\Phi} {Var}{Greek}{08} +\DeclareFlexSymbol{\Psi} {Var}{Greek}{09} +\DeclareFlexSymbol{\Omega} {Var}{Greek}{0A} +% \end{macrocode} +% Decimal digits. +% \begin{macrocode} +\DeclareFlexSymbol{0}{Var}{digit}{30} +\DeclareFlexSymbol{1}{Var}{digit}{31} +\DeclareFlexSymbol{2}{Var}{digit}{32} +\DeclareFlexSymbol{3}{Var}{digit}{33} +\DeclareFlexSymbol{4}{Var}{digit}{34} +\DeclareFlexSymbol{5}{Var}{digit}{35} +\DeclareFlexSymbol{6}{Var}{digit}{36} +\DeclareFlexSymbol{7}{Var}{digit}{37} +\DeclareFlexSymbol{8}{Var}{digit}{38} +\DeclareFlexSymbol{9}{Var}{digit}{39} +% \end{macrocode} +% Symbols from the 128-character \fn{cmmi} encoding. +% \begin{macrocode} +\DeclareFlexSymbol{,}{Pun}{OML}{3B} +\DeclareFlexSymbol{.}{Ord}{OML}{3A} +\DeclareFlexSymbol{/}{Ord}{OML}{3D} +\DeclareFlexSymbol{<}{Rel}{OML}{3C} +\DeclareFlexSymbol{>}{Rel}{OML}{3E} +% \end{macrocode} +% To do: make the Var property of lc Greek work properly. +% \begin{macrocode} +\DeclareFlexSymbol{\alpha}{Var}{greek}{0B} +\DeclareFlexSymbol{\beta}{Var}{greek}{0C} +\DeclareFlexSymbol{\gamma}{Var}{greek}{0D} +\DeclareFlexSymbol{\delta}{Var}{greek}{0E} +\DeclareFlexSymbol{\epsilon}{Var}{greek}{0F} +\DeclareFlexSymbol{\zeta}{Var}{greek}{10} +\DeclareFlexSymbol{\eta}{Var}{greek}{11} +\DeclareFlexSymbol{\theta}{Var}{greek}{12} +\DeclareFlexSymbol{\iota}{Var}{greek}{13} +\DeclareFlexSymbol{\kappa}{Var}{greek}{14} +\DeclareFlexSymbol{\lambda}{Var}{greek}{15} +\DeclareFlexSymbol{\mu}{Var}{greek}{16} +\DeclareFlexSymbol{\nu}{Var}{greek}{17} +\DeclareFlexSymbol{\xi}{Var}{greek}{18} +\DeclareFlexSymbol{\pi}{Var}{greek}{19} +\DeclareFlexSymbol{\rho}{Var}{greek}{1A} +\DeclareFlexSymbol{\sigma}{Var}{greek}{1B} +\DeclareFlexSymbol{\tau}{Var}{greek}{1C} +\DeclareFlexSymbol{\upsilon}{Var}{greek}{1D} +\DeclareFlexSymbol{\phi}{Var}{greek}{1E} +\DeclareFlexSymbol{\chi}{Var}{greek}{1F} +\DeclareFlexSymbol{\psi}{Var}{greek}{20} +\DeclareFlexSymbol{\omega}{Var}{greek}{21} +\DeclareFlexSymbol{\varepsilon}{Var}{greek}{22} +\DeclareFlexSymbol{\vartheta}{Var}{greek}{23} +\DeclareFlexSymbol{\varpi}{Var}{greek}{24} +\DeclareFlexSymbol{\varrho}{Var}{greek}{25} +\DeclareFlexSymbol{\varsigma}{Var}{greek}{26} +\DeclareFlexSymbol{\varphi}{Var}{greek}{27} +% \end{macrocode} +% Note that in plain \TeX\ \cs{imath} and \cs{jmath} are +% not variable-font. But if a \verb"j" changes font to, let's +% say, sans serif or calligraphic, a dotless \verb"j" in the same +% context should change font in the same way. +% \begin{macrocode} +\DeclareFlexSymbol{\imath}{Var}{OML}{7B} +\DeclareFlexSymbol{\jmath}{Var}{OML}{7C} +\DeclareFlexSymbol{\ell}{Ord}{OML}{60} +\DeclareFlexSymbol{\wp}{Ord}{OML}{7D} +\DeclareFlexSymbol{\partial}{Ord}{OML}{40} +\DeclareFlexSymbol{\flat}{Ord}{OML}{5B} +\DeclareFlexSymbol{\natural}{Ord}{OML}{5C} +\DeclareFlexSymbol{\sharp}{Ord}{OML}{5D} +\DeclareFlexSymbol{\triangleleft}{Bin}{OML}{2F} +\DeclareFlexSymbol{\triangleright}{Bin}{OML}{2E} +\DeclareFlexSymbol{\star}{Bin}{OML}{3F} +\DeclareFlexSymbol{\smile}{Rel}{OML}{5E} +\DeclareFlexSymbol{\frown}{Rel}{OML}{5F} +\DeclareFlexSymbol{\leftharpoonup}{Rel}{OML}{28} +\DeclareFlexSymbol{\leftharpoondown}{Rel}{OML}{29} +\DeclareFlexSymbol{\rightharpoonup}{Rel}{OML}{2A} +\DeclareFlexSymbol{\rightharpoondown}{Rel}{OML}{2B} +\DeclareFlexSymbol{a}{Var}{latin}{61} +\DeclareFlexSymbol{b}{Var}{latin}{62} +\DeclareFlexSymbol{c}{Var}{latin}{63} +\DeclareFlexSymbol{d}{Var}{latin}{64} +\DeclareFlexSymbol{e}{Var}{latin}{65} +\DeclareFlexSymbol{f}{Var}{latin}{66} +\DeclareFlexSymbol{g}{Var}{latin}{67} +\DeclareFlexSymbol{h}{Var}{latin}{68} +\DeclareFlexSymbol{i}{Var}{latin}{69} +\DeclareFlexSymbol{j}{Var}{latin}{6A} +\DeclareFlexSymbol{k}{Var}{latin}{6B} +\DeclareFlexSymbol{l}{Var}{latin}{6C} +\DeclareFlexSymbol{m}{Var}{latin}{6D} +\DeclareFlexSymbol{n}{Var}{latin}{6E} +\DeclareFlexSymbol{o}{Var}{latin}{6F} +\DeclareFlexSymbol{p}{Var}{latin}{70} +\DeclareFlexSymbol{q}{Var}{latin}{71} +\DeclareFlexSymbol{r}{Var}{latin}{72} +\DeclareFlexSymbol{s}{Var}{latin}{73} +\DeclareFlexSymbol{t}{Var}{latin}{74} +\DeclareFlexSymbol{u}{Var}{latin}{75} +\DeclareFlexSymbol{v}{Var}{latin}{76} +\DeclareFlexSymbol{w}{Var}{latin}{77} +\DeclareFlexSymbol{x}{Var}{latin}{78} +\DeclareFlexSymbol{y}{Var}{latin}{79} +\DeclareFlexSymbol{z}{Var}{latin}{7A} +\DeclareFlexSymbol{A}{Var}{Latin}{41} +\DeclareFlexSymbol{B}{Var}{Latin}{42} +\DeclareFlexSymbol{C}{Var}{Latin}{43} +\DeclareFlexSymbol{D}{Var}{Latin}{44} +\DeclareFlexSymbol{E}{Var}{Latin}{45} +\DeclareFlexSymbol{F}{Var}{Latin}{46} +\DeclareFlexSymbol{G}{Var}{Latin}{47} +\DeclareFlexSymbol{H}{Var}{Latin}{48} +\DeclareFlexSymbol{I}{Var}{Latin}{49} +\DeclareFlexSymbol{J}{Var}{Latin}{4A} +\DeclareFlexSymbol{K}{Var}{Latin}{4B} +\DeclareFlexSymbol{L}{Var}{Latin}{4C} +\DeclareFlexSymbol{M}{Var}{Latin}{4D} +\DeclareFlexSymbol{N}{Var}{Latin}{4E} +\DeclareFlexSymbol{O}{Var}{Latin}{4F} +\DeclareFlexSymbol{P}{Var}{Latin}{50} +\DeclareFlexSymbol{Q}{Var}{Latin}{51} +\DeclareFlexSymbol{R}{Var}{Latin}{52} +\DeclareFlexSymbol{S}{Var}{Latin}{53} +\DeclareFlexSymbol{T}{Var}{Latin}{54} +\DeclareFlexSymbol{U}{Var}{Latin}{55} +\DeclareFlexSymbol{V}{Var}{Latin}{56} +\DeclareFlexSymbol{W}{Var}{Latin}{57} +\DeclareFlexSymbol{X}{Var}{Latin}{58} +\DeclareFlexSymbol{Y}{Var}{Latin}{59} +\DeclareFlexSymbol{Z}{Var}{Latin}{5A} +% \end{macrocode} +% The \cs{ldotPun} glyph is used in constructing the +% \cs{ldots} symbol. It is just a period with a different math +% symbol class. \cs{lhookRel} and \cs{rhookRel} are used +% in a similar way for building hooked arrow symbols. +% \begin{macrocode} +\DeclareFlexSymbol{\ldotPun}{Pun}{OML}{3A} +\def\ldotp{\ldotPun} +\DeclareFlexSymbol{\lhookRel}{Rel}{OML}{2C} +\DeclareFlexSymbol{\rhookRel}{Rel}{OML}{2D} +% \end{macrocode} +% Symbols from the 128-character \fn{cmsy} encoding. +% \begin{macrocode} +\DeclareFlexSymbol{*}{Bin}{bin}{03} % \ast +\DeclareFlexSymbol{-}{Bin}{bin}{00} +\DeclareFlexSymbol{|}{Ord}{OMS}{6A} +\DeclareFlexSymbol{\aleph}{Ord}{ord}{40} +\DeclareFlexSymbol{\Re}{Ord}{ord}{3C} +\DeclareFlexSymbol{\Im}{Ord}{ord}{3D} +\DeclareFlexSymbol{\infty}{Ord}{ord}{31} +\DeclareFlexSymbol{\prime}{Ord}{ord}{30} +\DeclareFlexSymbol{\emptyset}{Ord}{ord}{3B} +\DeclareFlexSymbol{\nabla}{Ord}{ord}{72} +\DeclareFlexSymbol{\top}{Ord}{ord}{3E} +\DeclareFlexSymbol{\bot}{Ord}{ord}{3F} +\DeclareFlexSymbol{\triangle}{Ord}{ord}{34} +\DeclareFlexSymbol{\forall}{Ord}{ord}{38} +\DeclareFlexSymbol{\exists}{Ord}{ord}{39} +\DeclareFlexSymbol{\neg}{Ord}{ord}{3A} +\DeclareFlexSymbol{\clubsuit}{Ord}{ord}{7C} +\DeclareFlexSymbol{\diamondsuit}{Ord}{ord}{7D} +\DeclareFlexSymbol{\heartsuit}{Ord}{ord}{7E} +\DeclareFlexSymbol{\spadesuit}{Ord}{ord}{7F} +\DeclareFlexSymbol{\smallint}{COs}{OMS}{73} +% \end{macrocode} +% Binary operators. +% \begin{macrocode} +\DeclareFlexSymbol{\bigtriangleup}{Bin}{bin}{34} +\DeclareFlexSymbol{\bigtriangledown}{Bin}{bin}{35} +\DeclareFlexSymbol{\wedge}{Bin}{bin}{5E} +\DeclareFlexSymbol{\vee}{Bin}{bin}{5F} +\DeclareFlexSymbol{\cap}{Bin}{bin}{5C} +\DeclareFlexSymbol{\cup}{Bin}{bin}{5B} +\DeclareFlexSymbol{\ddagger}{Bin}{bin}{7A} +\DeclareFlexSymbol{\dagger}{Bin}{bin}{79} +\DeclareFlexSymbol{\sqcap}{Bin}{bin}{75} +\DeclareFlexSymbol{\sqcup}{Bin}{bin}{74} +\DeclareFlexSymbol{\uplus}{Bin}{bin}{5D} +\DeclareFlexSymbol{\amalg}{Bin}{bin}{71} +\DeclareFlexSymbol{\diamond}{Bin}{bin}{05} +\DeclareFlexSymbol{\bullet}{Bin}{bin}{0F} +\DeclareFlexSymbol{\wr}{Bin}{bin}{6F} +\DeclareFlexSymbol{\div}{Bin}{bin}{04} +\DeclareFlexSymbol{\odot}{Bin}{bin}{0C} +\DeclareFlexSymbol{\oslash}{Bin}{bin}{0B} +\DeclareFlexSymbol{\otimes}{Bin}{bin}{0A} +\DeclareFlexSymbol{\ominus}{Bin}{bin}{09} +\DeclareFlexSymbol{\oplus}{Bin}{bin}{08} +\DeclareFlexSymbol{\mp}{Bin}{bin}{07} +\DeclareFlexSymbol{\pm}{Bin}{bin}{06} +\DeclareFlexSymbol{\circ}{Bin}{bin}{0E} +\DeclareFlexSymbol{\bigcirc}{Bin}{bin}{0D} +\DeclareFlexSymbol{\setminus}{Bin}{bin}{6E} +\DeclareFlexSymbol{\cdot}{Bin}{bin}{01} +\DeclareFlexSymbol{\ast}{Bin}{bin}{03} +\DeclareFlexSymbol{\times}{Bin}{bin}{02} +% \end{macrocode} +% Relation symbols. +% \begin{macrocode} +\DeclareFlexSymbol{\propto}{Rel}{rel}{2F} +\DeclareFlexSymbol{\sqsubseteq}{Rel}{rel}{76} +\DeclareFlexSymbol{\sqsupseteq}{Rel}{rel}{77} +\DeclareFlexSymbol{\parallel}{Rel}{rel}{6B} +\DeclareFlexSymbol{\mid}{Rel}{rel}{6A} +\DeclareFlexSymbol{\dashv}{Rel}{rel}{61} +\DeclareFlexSymbol{\vdash}{Rel}{rel}{60} +\DeclareFlexSymbol{\nearrow}{Rel}{rel}{25} +\DeclareFlexSymbol{\searrow}{Rel}{rel}{26} +\DeclareFlexSymbol{\nwarrow}{Rel}{rel}{2D} +\DeclareFlexSymbol{\swarrow}{Rel}{rel}{2E} +\DeclareFlexSymbol{\Leftrightarrow}{Rel}{rel}{2C} +\DeclareFlexSymbol{\Leftarrow}{Rel}{rel}{28} +\DeclareFlexSymbol{\Rightarrow}{Rel}{rel}{29} +\DeclareFlexSymbol{\leq}{Rel}{rel}{14} +\DeclareFlexSymbol{\geq}{Rel}{rel}{15} +\DeclareFlexSymbol{\succ}{Rel}{rel}{1F} +\DeclareFlexSymbol{\prec}{Rel}{rel}{1E} +\DeclareFlexSymbol{\approx}{Rel}{rel}{19} +\DeclareFlexSymbol{\succeq}{Rel}{rel}{17} +\DeclareFlexSymbol{\preceq}{Rel}{rel}{16} +\DeclareFlexSymbol{\supset}{Rel}{rel}{1B} +\DeclareFlexSymbol{\subset}{Rel}{rel}{1A} +\DeclareFlexSymbol{\supseteq}{Rel}{rel}{13} +\DeclareFlexSymbol{\subseteq}{Rel}{rel}{12} +\DeclareFlexSymbol{\in}{Rel}{rel}{32} +\DeclareFlexSymbol{\ni}{Rel}{rel}{33} +\DeclareFlexSymbol{\gg}{Rel}{rel}{1D} +\DeclareFlexSymbol{\ll}{Rel}{rel}{1C} +\DeclareFlexSymbol{\leftrightarrow}{Rel}{rel}{24} +\DeclareFlexSymbol{\leftarrow}{Rel}{rel}{20} +\DeclareFlexSymbol{\rightarrow}{Rel}{rel}{21} +\DeclareFlexSymbol{\sim}{Rel}{rel}{18} +\DeclareFlexSymbol{\simeq}{Rel}{rel}{27} +\DeclareFlexSymbol{\perp}{Rel}{rel}{3F} +\DeclareFlexSymbol{\equiv}{Rel}{rel}{11} +\DeclareFlexSymbol{\asymp}{Rel}{rel}{10} +% \end{macrocode} +% The \cs{notRel} glyph is a special zero-width glyph intended only +% for use in constructing negated symbols. \cs{mapstoRel} and +% \cs{cdotPun} have similar but more restricted applications. +% \begin{macrocode} +\DeclareFlexSymbol{\notRel}{Rel}{rel}{36} +\DeclareFlexSymbol{\mapstoOrd}{Ord}{OMS}{37} +\DeclareFlexSymbol{\cdotOrd}{Ord}{OMS}{01} +\def\cdotp{\mathpunct{\cdotOrd}} +% \end{macrocode} +% Symbols from the 128-character \fn{cmex} encoding. +% \verb"COs" stands for `cumulative operator +% (sum-like)'. +% \verb"COi" stands for `cumulative operator +% (integral-like)'. These typically differ only in the +% default placement of limits. \verb"cop" stands for +% `cumulative operator math group'. +% \begin{macrocode} +\DeclareFlexSymbol{\coprod}{COs}{cop}{60} +\DeclareFlexSymbol{\bigvee}{COs}{cop}{57} +\DeclareFlexSymbol{\bigwedge}{COs}{cop}{56} +\DeclareFlexSymbol{\biguplus}{COs}{cop}{55} +\DeclareFlexSymbol{\bigcap}{COs}{cop}{54} +\DeclareFlexSymbol{\bigcup}{COs}{cop}{53} +\DeclareFlexSymbol{\int}{COi}{cop}{52} +\DeclareFlexSymbol{\prod}{COs}{cop}{51} +\DeclareFlexSymbol{\sum}{COs}{cop}{50} +\DeclareFlexSymbol{\bigotimes}{COs}{cop}{4E} +\DeclareFlexSymbol{\bigoplus}{COs}{cop}{4C} +\DeclareFlexSymbol{\bigodot}{COs}{cop}{4A} +\DeclareFlexSymbol{\oint}{COi}{cop}{48} +\DeclareFlexSymbol{\bigsqcup}{COs}{cop}{46} +% \end{macrocode} +% Delimiter symbols. +% \verb"DeL" stands for `delimiter (left)'. +% \verb"DeR" stands for `delimiter (right)'. +% \verb"DeB" stands for `delimiter (bidirectional)'. +% The principal encoding point for an extensible delimiter is the +% first link in the list of linked sizes as specified in the font metric +% information. +% For a math encoding such as OT1/OML/OMS/OMX where not all sizes of a +% given delimiter reside in a given font, the extra encoding point for the +% smallest delimiter must be supplied by defining +% \begin{verbatim} +% \sd@GXX +% \end{verbatim} +% where G is the mathgroup and XX is the hexadecimal glyph position. +% \begin{macrocode} +\DeclareFlexSymbol{\rangle}{DeR}{del}{0B} +\DeclareFlexSymbol{\langle}{DeL}{del}{0A} +\DeclareFlexSymbol{\rbrace}{DeR}{del}{09} +\DeclareFlexSymbol{\lbrace}{DeL}{del}{08} +\DeclareFlexSymbol{\rceil}{DeR}{del}{07} +\DeclareFlexSymbol{\lceil}{DeL}{del}{06} +\DeclareFlexSymbol{\rfloor}{DeR}{del}{05} +\DeclareFlexSymbol{\lfloor}{DeL}{del}{04} +\DeclareFlexSymbol{(}{DeL}{del}{00} +\DeclareFlexSymbol{)}{DeR}{del}{01} +\DeclareFlexSymbol{[}{DeL}{del}{02} +\DeclareFlexSymbol{]}{DeR}{del}{03} +\DeclareFlexSymbol{\lVert}{DeL}{del}{0D} +\DeclareFlexSymbol{\rVert}{DeR}{del}{0D} +\DeclareFlexSymbol{\lvert}{DeL}{del}{0C} +\DeclareFlexSymbol{\rvert}{DeR}{del}{0C} +\DeclareFlexSymbol{\Vert}{DeB}{del}{0D} +\DeclareFlexSymbol{\vert}{DeB}{del}{0C} +% \end{macrocode} +% Maybe make the vert bars mathord instead of delimiter, to discourage +% poor usage. +% \begin{macrocode} +\DeclareFlexSymbol{|}{DeB}{del}{0C} +\DeclareFlexSymbol{/}{DeB}{del}{0E} +% \end{macrocode} +% +% +% These wacky delimiters need to be supported I guess for +% compabitility reasons. +% The DeA delimiter type is a special case used only for these +% arrows. +% \begin{macrocode} +\DeclareFlexSymbol{\lmoustache}{DeL}{del}{40} +\DeclareFlexSymbol{\rmoustache}{DeR}{del}{41} +\DeclareFlexSymbol{\lgroup}{DeL}{del}{3A} +\DeclareFlexSymbol{\rgroup}{DeR}{del}{3B} +\DeclareFlexSymbol{\bracevert}{DeB}{del}{3E} +\DeclareFlexSymbol{\arrowvert}{DeB}{del}{3C} +\DeclareFlexSymbol{\Arrowvert}{DeB}{del}{3D} +\DeclareFlexSymbol{\uparrow}{DeA}{del}{78} +\DeclareFlexSymbol{\downarrow}{DeA}{del}{79} +\DeclareFlexSymbol{\updownarrow}{DeA}{del}{3F} +\DeclareFlexSymbol{\Uparrow}{DeA}{del}{7E} +\DeclareFlexSymbol{\Downarrow}{DeA}{del}{7F} +\DeclareFlexSymbol{\Updownarrow}{DeA}{del}{77} +\DeclareFlexSymbol{\backslash}{DeB}{del}{0F} +% \end{macrocode} +% +% +% +% +% \section{Some compound symbols} +% The following symbols are not robust in standard \LaTeX\ +% because they use \verb"#" or \cs{mathpalette} (which is not +% robust and contains a \verb"#" in its expansion): \cs{angle}, +% \cs{cong}, \cs{notin}, \cs{rightleftharpoons}. +% +% In this definition of \cs{hbar}, the symbol is cobbled together +% from a math italic h and the cmr overbar accent glyph. +% \begin{macrocode} +\DeclareFlexSymbol{\hbarOrd}{Ord}{OT1}{16} +\DeclareFlexCompoundSymbol{\hbar}{Ord}{\hbarOrd\mkern-9mu h} +% \end{macrocode} +% For \cs{surd}, the interior symbol gets math class 1 +% (cumulative operator) to make the glyph vertically centered on the +% math axis, but the desired horizontal spacing is the spacing for a +% mathord. (Couldn't it just be class mathopen, though? ) +% \begin{macrocode} +\DeclareFlexSymbol{\surdOrd}{Ord}{OMS}{70} +\DeclareFlexCompoundSymbol{\surd}{Ord}{\mathop{\surdOrd}} +% \end{macrocode} +% As shown in this definition of \cs{angle}, rule dimens are not +% allowed to use math-units, unfortunately. +% \begin{macrocode} +\DeclareFlexCompoundSymbol{\angle}{Ord}{% + \vbox{\ialign{% + $\m@th\scriptstyle##$\crcr + \notRel\mathrel{\mkern14mu}\crcr + \noalign{\nointerlineskip}% + \mkern2.5mu\leaders\hrule \@height.34pt\hfill\mkern2.5mu\crcr + }}% +} +% \end{macrocode} +% The \cs{not} function, which is defined in the \pkg{flexisym} +% package, requires a suitably defined \cs{notRel} symbol. +% \begin{macrocode} +\DeclareFlexCompoundSymbol{\neq}{Rel}{\not{=}} +% \end{macrocode} +% . +% \begin{macrocode} +\DeclareFlexCompoundSymbol{\mapsto}{Rel}{\mapstoOrd\rightarrow} +% \end{macrocode} +% The \cs{@vereq} function ends by centering the whole +% construction on the math axis, unlike \cs{buildrel} where the base +% symbol remains at its normal altitude. Furthermore, +% \cs{@vereq} leaves the math style of the top symbol as given +% instead of downsizing to scriptstyle. +% \begin{macrocode} +\DeclareFlexCompoundSymbol{\cong}{Rel}{\mathpalette\@vereq\sim} +% \end{macrocode} +% The \cs{m@th} in the \fn{fontmath.ltx} definition of +% \cs{notin} is superfluous unless \cs{c@ncel} doesn't include +% it (which was perhaps true in an older version of +% \fn{plain.tex}?). +% \begin{macrocode} +%\newcommand*\joinord{\mkern-3mu } +%\newcommand*\joinord{\mkern-3.45mu } +\DeclareFlexCompoundSymbol{\notin}{Rel}{\mathpalette\c@ncel\in} +\DeclareFlexCompoundSymbol{\rightleftharpoons}{Rel}{\mathpalette\rlh@{}} +\DeclareFlexCompoundSymbol{\doteq}{Rel}{\buildrel\textstyle.\over=} +\DeclareFlexCompoundSymbol{\hookrightarrow}{Rel}{\lhookRel\joinord\rightarrow} +\DeclareFlexCompoundSymbol{\hookleftarrow}{Rel}{\leftarrow\joinord\rhookRel} +\DeclareFlexCompoundSymbol{\bowtie}{Rel}{\triangleright\joinord\triangleleft} +\DeclareFlexCompoundSymbol{\models}{Rel}{\vert\joinord=} +\DeclareFlexCompoundSymbol{\Longrightarrow}{Rel}{\Relbar\joinord\Rightarrow} +\DeclareFlexCompoundSymbol{\longrightarrow}{Rel}{\relbar\joinord\rightarrow} +\DeclareFlexCompoundSymbol{\Longleftarrow}{Rel}{\Leftarrow\joinord\Relbar} +\DeclareFlexCompoundSymbol{\longleftarrow}{Rel}{\leftarrow\joinord\relbar} +\DeclareFlexCompoundSymbol{\longmapsto}{Rel}{\mapstochar\longrightarrow} +\DeclareFlexCompoundSymbol{\longleftrightarrow}{Rel}{\leftarrow\joinord\rightarrow} +\DeclareFlexCompoundSymbol{\Longleftrightarrow}{Rel}{\Leftarrow\joinord\Rightarrow} +% \end{macrocode} +% Here is what you get from the old definition of \cs{iff}. +% \begin{verbatim} +% \glue 2.77771 plus 2.77771 +% \glue(\thickmuskip) 2.77771 plus 2.77771 +% \OMS/cmsy/m/n/10 ( +% \hbox(0.0+0.0)x-1.66663 +% .\kern -1.66663 +% \OMS/cmsy/m/n/10 ) +% \penalty 500 +% \glue 2.77771 plus 2.77771 +% \glue(\thickmuskip) 2.77771 plus 2.77771 +% \end{verbatim} +% Looks like it could be simplified slightly. But it's not so +% easy as it looks to do it without screwing up the line breaking +% possibilities. +% \begin{macrocode} +\renewcommand*\iff{% + \mskip\thickmuskip\Longleftrightarrow\mskip\thickmuskip +} +% \end{macrocode} +% Some dotly symbols. +% \begin{macrocode} +\DeclareFlexCompoundSymbol{\cdots}{Inn}{\cdotp\cdotp\cdotp}% +\DeclareFlexCompoundSymbol{\vdots}{Ord}{% + \vbox{\baselineskip4\p@ \lineskiplimit\z@ + \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} +\DeclareFlexCompoundSymbol{\ddots}{Inn}{% + \mkern1mu\raise7\p@ + \vbox{\kern7\p@\hbox{.}}\mkern2mu% + \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu% +} +% \end{macrocode} +% . +% \begin{macrocode} +\def\relbar{\begingroup \def\smash@{tb}% in case amsmath is loaded + \mathpalette\mathsm@sh{\mathchar"200 }\endgroup} +% \end{macrocode} +% For \cs{Relbar} we take an equal sign of class $0$ (Ord) from the +% operator family. For \fn{cmr} and \pkg{mathptmx} we know this is +% family $0$. +% \begin{macrocode} +%\def\Relbar{\mathchar"3D } +% \end{macrocode} +% For the \pkg{mathpazo} setup we need to use the equal sign from +% \fn{cmr} and so must insert class $0$ and use the symbol from the +% upright symbols. +% \begin{macrocode} +%\edef\Relbar{\mathchar\string"\hexnumber@\symupright3D } +% \end{macrocode} +% Done. +% \begin{macrocode} +% +% \end{macrocode} +% Various synonyms such as \cs{le} for \cs{leq} and +% \cs{to} for \cs{rightarrow} are defined in +% \pkg{flexisym} with \cs{def} instead of \cs{let}, for +% slower execution speed but smaller chance of synchronization +% problems. +% +% +% +% \begin{macrocode} +%<*msabm> +\ProvidesSymbols{msabm}[2001/09/08 v0.91] +% \end{macrocode} +% \begin{macrocode} +\RequirePackage{amsfonts}\relax +% \end{macrocode} +% \begin{macrocode} +\@xp\xdef\csname mg@MSA\endcsname{\hexnumber@\symAMSa}% +\@xp\xdef\csname mg@MSB\endcsname{\hexnumber@\symAMSb}% +% \end{macrocode} +% \begin{macrocode} +\DeclareFlexSymbol{\boxdot} {Bin}{MSA}{00} +\DeclareFlexSymbol{\boxplus} {Bin}{MSA}{01} +\DeclareFlexSymbol{\boxtimes} {Bin}{MSA}{02} +\DeclareFlexSymbol{\square} {Ord}{MSA}{03} +\DeclareFlexSymbol{\blacksquare} {Ord}{MSA}{04} +\DeclareFlexSymbol{\centerdot} {Bin}{MSA}{05} +\DeclareFlexSymbol{\lozenge} {Ord}{MSA}{06} +\DeclareFlexSymbol{\blacklozenge} {Ord}{MSA}{07} +\DeclareFlexSymbol{\circlearrowright} {Rel}{MSA}{08} +\DeclareFlexSymbol{\circlearrowleft} {Rel}{MSA}{09} +% \end{macrocode} +% In amsfonts.sty: +% \begin{macrocode} +%%\DeclareFlexSymbol{\rightleftharpoons}{Rel}{MSA}{0A} +\DeclareFlexSymbol{\leftrightharpoons} {Rel}{MSA}{0B} +\DeclareFlexSymbol{\boxminus} {Bin}{MSA}{0C} +\DeclareFlexSymbol{\Vdash} {Rel}{MSA}{0D} +\DeclareFlexSymbol{\Vvdash} {Rel}{MSA}{0E} +\DeclareFlexSymbol{\vDash} {Rel}{MSA}{0F} +\DeclareFlexSymbol{\twoheadrightarrow} {Rel}{MSA}{10} +\DeclareFlexSymbol{\twoheadleftarrow} {Rel}{MSA}{11} +\DeclareFlexSymbol{\leftleftarrows} {Rel}{MSA}{12} +\DeclareFlexSymbol{\rightrightarrows} {Rel}{MSA}{13} +\DeclareFlexSymbol{\upuparrows} {Rel}{MSA}{14} +\DeclareFlexSymbol{\downdownarrows} {Rel}{MSA}{15} +\DeclareFlexSymbol{\upharpoonright} {Rel}{MSA}{16} + \let\restriction\upharpoonright +\DeclareFlexSymbol{\downharpoonright} {Rel}{MSA}{17} +\DeclareFlexSymbol{\upharpoonleft} {Rel}{MSA}{18} +\DeclareFlexSymbol{\downharpoonleft}{Rel}{MSA}{19} +\DeclareFlexSymbol{\rightarrowtail} {Rel}{MSA}{1A} +\DeclareFlexSymbol{\leftarrowtail} {Rel}{MSA}{1B} +\DeclareFlexSymbol{\leftrightarrows}{Rel}{MSA}{1C} +\DeclareFlexSymbol{\rightleftarrows}{Rel}{MSA}{1D} +\DeclareFlexSymbol{\Lsh} {Rel}{MSA}{1E} +\DeclareFlexSymbol{\Rsh} {Rel}{MSA}{1F} +\DeclareFlexSymbol{\rightsquigarrow} {Rel}{MSA}{20} +\DeclareFlexSymbol{\leftrightsquigarrow}{Rel}{MSA}{21} +\DeclareFlexSymbol{\looparrowleft} {Rel}{MSA}{22} +\DeclareFlexSymbol{\looparrowright} {Rel}{MSA}{23} +\DeclareFlexSymbol{\circeq} {Rel}{MSA}{24} +\DeclareFlexSymbol{\succsim} {Rel}{MSA}{25} +\DeclareFlexSymbol{\gtrsim} {Rel}{MSA}{26} +\DeclareFlexSymbol{\gtrapprox} {Rel}{MSA}{27} +\DeclareFlexSymbol{\multimap} {Rel}{MSA}{28} +\DeclareFlexSymbol{\therefore} {Rel}{MSA}{29} +\DeclareFlexSymbol{\because} {Rel}{MSA}{2A} +\DeclareFlexSymbol{\doteqdot} {Rel}{MSA}{2B} + \let\Doteq\doteqdot +\DeclareFlexSymbol{\triangleq} {Rel}{MSA}{2C} +\DeclareFlexSymbol{\precsim} {Rel}{MSA}{2D} +\DeclareFlexSymbol{\lesssim} {Rel}{MSA}{2E} +\DeclareFlexSymbol{\lessapprox} {Rel}{MSA}{2F} +\DeclareFlexSymbol{\eqslantless} {Rel}{MSA}{30} +\DeclareFlexSymbol{\eqslantgtr} {Rel}{MSA}{31} +\DeclareFlexSymbol{\curlyeqprec} {Rel}{MSA}{32} +\DeclareFlexSymbol{\curlyeqsucc} {Rel}{MSA}{33} +\DeclareFlexSymbol{\preccurlyeq} {Rel}{MSA}{34} +\DeclareFlexSymbol{\leqq} {Rel}{MSA}{35} +\DeclareFlexSymbol{\leqslant} {Rel}{MSA}{36} +\DeclareFlexSymbol{\lessgtr} {Rel}{MSA}{37} +\DeclareFlexSymbol{\backprime} {Ord}{MSA}{38} +\DeclareFlexSymbol{\risingdotseq} {Rel}{MSA}{3A} +\DeclareFlexSymbol{\fallingdotseq}{Rel}{MSA}{3B} +\DeclareFlexSymbol{\succcurlyeq} {Rel}{MSA}{3C} +\DeclareFlexSymbol{\geqq} {Rel}{MSA}{3D} +\DeclareFlexSymbol{\geqslant} {Rel}{MSA}{3E} +\DeclareFlexSymbol{\gtrless} {Rel}{MSA}{3F} +% \end{macrocode} +% in amsfonts.sty +% \begin{macrocode} +%% \DeclareFlexSymbol{\sqsubset} {Rel}{MSA}{40} +%% \DeclareFlexSymbol{\sqsupset} {Rel}{MSA}{41} +\DeclareFlexSymbol{\vartriangleright}{Rel}{MSA}{42} +\DeclareFlexSymbol{\vartriangleleft} {Rel}{MSA}{43} +\DeclareFlexSymbol{\trianglerighteq} {Rel}{MSA}{44} +\DeclareFlexSymbol{\trianglelefteq} {Rel}{MSA}{45} +\DeclareFlexSymbol{\bigstar} {Ord}{MSA}{46} +\DeclareFlexSymbol{\between} {Rel}{MSA}{47} +\DeclareFlexSymbol{\blacktriangledown} {Ord}{MSA}{48} +\DeclareFlexSymbol{\blacktriangleright} {Rel}{MSA}{49} +\DeclareFlexSymbol{\blacktriangleleft} {Rel}{MSA}{4A} +\DeclareFlexSymbol{\vartriangle} {Rel}{MSA}{4D} +\DeclareFlexSymbol{\blacktriangle} {Ord}{MSA}{4E} +\DeclareFlexSymbol{\triangledown} {Ord}{MSA}{4F} +\DeclareFlexSymbol{\eqcirc} {Rel}{MSA}{50} +\DeclareFlexSymbol{\lesseqgtr} {Rel}{MSA}{51} +\DeclareFlexSymbol{\gtreqless} {Rel}{MSA}{52} +\DeclareFlexSymbol{\lesseqqgtr} {Rel}{MSA}{53} +\DeclareFlexSymbol{\gtreqqless} {Rel}{MSA}{54} +\DeclareFlexSymbol{\Rrightarrow} {Rel}{MSA}{56} +\DeclareFlexSymbol{\Lleftarrow} {Rel}{MSA}{57} +\DeclareFlexSymbol{\veebar} {Bin}{MSA}{59} +\DeclareFlexSymbol{\barwedge} {Bin}{MSA}{5A} +\DeclareFlexSymbol{\doublebarwedge} {Bin}{MSA}{5B} +% \end{macrocode} +% In amsfonts.sty +% \begin{macrocode} +%%\DeclareFlexSymbol{\angle} {Ord}{MSA}{5C} +\DeclareFlexSymbol{\measuredangle} {Ord}{MSA}{5D} +\DeclareFlexSymbol{\sphericalangle} {Ord}{MSA}{5E} +\DeclareFlexSymbol{\varpropto} {Rel}{MSA}{5F} +\DeclareFlexSymbol{\smallsmile} {Rel}{MSA}{60} +\DeclareFlexSymbol{\smallfrown} {Rel}{MSA}{61} +\DeclareFlexSymbol{\Subset} {Rel}{MSA}{62} +\DeclareFlexSymbol{\Supset} {Rel}{MSA}{63} +\DeclareFlexSymbol{\Cup} {Bin}{MSA}{64} + \let\doublecup\Cup +\DeclareFlexSymbol{\Cap} {Bin}{MSA}{65} + \let\doublecap\Cap +\DeclareFlexSymbol{\curlywedge} {Bin}{MSA}{66} +\DeclareFlexSymbol{\curlyvee} {Bin}{MSA}{67} +\DeclareFlexSymbol{\leftthreetimes} {Bin}{MSA}{68} +\DeclareFlexSymbol{\rightthreetimes}{Bin}{MSA}{69} +\DeclareFlexSymbol{\subseteqq} {Rel}{MSA}{6A} +\DeclareFlexSymbol{\supseteqq} {Rel}{MSA}{6B} +\DeclareFlexSymbol{\bumpeq} {Rel}{MSA}{6C} +\DeclareFlexSymbol{\Bumpeq} {Rel}{MSA}{6D} +\DeclareFlexSymbol{\lll} {Rel}{MSA}{6E} + \let\llless\lll +\DeclareFlexSymbol{\ggg} {Rel}{MSA}{6F} + \let\gggtr\ggg +\DeclareFlexSymbol{\circledS} {Ord}{MSA}{73} +\DeclareFlexSymbol{\pitchfork} {Rel}{MSA}{74} +\DeclareFlexSymbol{\dotplus} {Bin}{MSA}{75} +\DeclareFlexSymbol{\backsim} {Rel}{MSA}{76} +\DeclareFlexSymbol{\backsimeq} {Rel}{MSA}{77} +\DeclareFlexSymbol{\complement} {Ord}{MSA}{7B} +\DeclareFlexSymbol{\intercal} {Bin}{MSA}{7C} +\DeclareFlexSymbol{\circledcirc} {Bin}{MSA}{7D} +\DeclareFlexSymbol{\circledast} {Bin}{MSA}{7E} +\DeclareFlexSymbol{\circleddash} {Bin}{MSA}{7F} +% \end{macrocode} +% Begin AMSb declarations +% \begin{macrocode} +\DeclareFlexSymbol{\lvertneqq} {Rel}{MSB}{00} +\DeclareFlexSymbol{\gvertneqq} {Rel}{MSB}{01} +\DeclareFlexSymbol{\nleq} {Rel}{MSB}{02} +\DeclareFlexSymbol{\ngeq} {Rel}{MSB}{03} +\DeclareFlexSymbol{\nless} {Rel}{MSB}{04} +\DeclareFlexSymbol{\ngtr} {Rel}{MSB}{05} +\DeclareFlexSymbol{\nprec} {Rel}{MSB}{06} +\DeclareFlexSymbol{\nsucc} {Rel}{MSB}{07} +\DeclareFlexSymbol{\lneqq} {Rel}{MSB}{08} +\DeclareFlexSymbol{\gneqq} {Rel}{MSB}{09} +\DeclareFlexSymbol{\nleqslant} {Rel}{MSB}{0A} +\DeclareFlexSymbol{\ngeqslant} {Rel}{MSB}{0B} +\DeclareFlexSymbol{\lneq} {Rel}{MSB}{0C} +\DeclareFlexSymbol{\gneq} {Rel}{MSB}{0D} +\DeclareFlexSymbol{\npreceq} {Rel}{MSB}{0E} +\DeclareFlexSymbol{\nsucceq} {Rel}{MSB}{0F} +\DeclareFlexSymbol{\precnsim} {Rel}{MSB}{10} +\DeclareFlexSymbol{\succnsim} {Rel}{MSB}{11} +\DeclareFlexSymbol{\lnsim} {Rel}{MSB}{12} +\DeclareFlexSymbol{\gnsim} {Rel}{MSB}{13} +\DeclareFlexSymbol{\nleqq} {Rel}{MSB}{14} +\DeclareFlexSymbol{\ngeqq} {Rel}{MSB}{15} +\DeclareFlexSymbol{\precneqq} {Rel}{MSB}{16} +\DeclareFlexSymbol{\succneqq} {Rel}{MSB}{17} +\DeclareFlexSymbol{\precnapprox} {Rel}{MSB}{18} +\DeclareFlexSymbol{\succnapprox} {Rel}{MSB}{19} +\DeclareFlexSymbol{\lnapprox} {Rel}{MSB}{1A} +\DeclareFlexSymbol{\gnapprox} {Rel}{MSB}{1B} +\DeclareFlexSymbol{\nsim} {Rel}{MSB}{1C} +\DeclareFlexSymbol{\ncong} {Rel}{MSB}{1D} +\DeclareFlexSymbol{\diagup} {Ord}{MSB}{1E} +\DeclareFlexSymbol{\diagdown} {Ord}{MSB}{1F} +\DeclareFlexSymbol{\varsubsetneq} {Rel}{MSB}{20} +\DeclareFlexSymbol{\varsupsetneq} {Rel}{MSB}{21} +\DeclareFlexSymbol{\nsubseteqq} {Rel}{MSB}{22} +\DeclareFlexSymbol{\nsupseteqq} {Rel}{MSB}{23} +\DeclareFlexSymbol{\subsetneqq} {Rel}{MSB}{24} +\DeclareFlexSymbol{\supsetneqq} {Rel}{MSB}{25} +\DeclareFlexSymbol{\varsubsetneqq} {Rel}{MSB}{26} +\DeclareFlexSymbol{\varsupsetneqq} {Rel}{MSB}{27} +\DeclareFlexSymbol{\subsetneq} {Rel}{MSB}{28} +\DeclareFlexSymbol{\supsetneq} {Rel}{MSB}{29} +\DeclareFlexSymbol{\nsubseteq} {Rel}{MSB}{2A} +\DeclareFlexSymbol{\nsupseteq} {Rel}{MSB}{2B} +\DeclareFlexSymbol{\nparallel} {Rel}{MSB}{2C} +\DeclareFlexSymbol{\nmid} {Rel}{MSB}{2D} +\DeclareFlexSymbol{\nshortmid} {Rel}{MSB}{2E} +\DeclareFlexSymbol{\nshortparallel} {Rel}{MSB}{2F} +\DeclareFlexSymbol{\nvdash} {Rel}{MSB}{30} +\DeclareFlexSymbol{\nVdash} {Rel}{MSB}{31} +\DeclareFlexSymbol{\nvDash} {Rel}{MSB}{32} +\DeclareFlexSymbol{\nVDash} {Rel}{MSB}{33} +\DeclareFlexSymbol{\ntrianglerighteq}{Rel}{MSB}{34} +\DeclareFlexSymbol{\ntrianglelefteq}{Rel}{MSB}{35} +\DeclareFlexSymbol{\ntriangleleft} {Rel}{MSB}{36} +\DeclareFlexSymbol{\ntriangleright} {Rel}{MSB}{37} +\DeclareFlexSymbol{\nleftarrow} {Rel}{MSB}{38} +\DeclareFlexSymbol{\nrightarrow} {Rel}{MSB}{39} +\DeclareFlexSymbol{\nLeftarrow} {Rel}{MSB}{3A} +\DeclareFlexSymbol{\nRightarrow} {Rel}{MSB}{3B} +\DeclareFlexSymbol{\nLeftrightarrow}{Rel}{MSB}{3C} +\DeclareFlexSymbol{\nleftrightarrow}{Rel}{MSB}{3D} +\DeclareFlexSymbol{\divideontimes} {Bin}{MSB}{3E} +\DeclareFlexSymbol{\varnothing} {Ord}{MSB}{3F} +\DeclareFlexSymbol{\nexists} {Ord}{MSB}{40} +\DeclareFlexSymbol{\Finv} {Ord}{MSB}{60} +\DeclareFlexSymbol{\Game} {Ord}{MSB}{61} +% \end{macrocode} +% In amsfonts.sty: +% \begin{macrocode} +%%\DeclareFlexSymbol{\mho} {Ord}{MSB}{66} +\DeclareFlexSymbol{\eth} {Ord}{MSB}{67} +\DeclareFlexSymbol{\eqsim} {Rel}{MSB}{68} +\DeclareFlexSymbol{\beth} {Ord}{MSB}{69} +\DeclareFlexSymbol{\gimel} {Ord}{MSB}{6A} +\DeclareFlexSymbol{\daleth} {Ord}{MSB}{6B} +\DeclareFlexSymbol{\lessdot} {Bin}{MSB}{6C} +\DeclareFlexSymbol{\gtrdot} {Bin}{MSB}{6D} +\DeclareFlexSymbol{\ltimes} {Bin}{MSB}{6E} +\DeclareFlexSymbol{\rtimes} {Bin}{MSB}{6F} +\DeclareFlexSymbol{\shortmid} {Rel}{MSB}{70} +\DeclareFlexSymbol{\shortparallel} {Rel}{MSB}{71} +\DeclareFlexSymbol{\smallsetminus} {Bin}{MSB}{72} +\DeclareFlexSymbol{\thicksim} {Rel}{MSB}{73} +\DeclareFlexSymbol{\thickapprox} {Rel}{MSB}{74} +\DeclareFlexSymbol{\approxeq} {Rel}{MSB}{75} +\DeclareFlexSymbol{\succapprox} {Rel}{MSB}{76} +\DeclareFlexSymbol{\precapprox} {Rel}{MSB}{77} +\DeclareFlexSymbol{\curvearrowleft} {Rel}{MSB}{78} +\DeclareFlexSymbol{\curvearrowright}{Rel}{MSB}{79} +\DeclareFlexSymbol{\digamma} {Ord}{MSB}{7A} +\DeclareFlexSymbol{\varkappa} {Ord}{MSB}{7B} +\DeclareFlexSymbol{\Bbbk} {Ord}{MSB}{7C} +\DeclareFlexSymbol{\hslash} {Ord}{MSB}{7D} +% \end{macrocode} +% In amsfonts.sty: +% \begin{macrocode} +%%\DeclareFlexSymbol{\hbar} {Ord}{MSB}{7E} +\DeclareFlexSymbol{\backepsilon} {Rel}{MSB}{7F} +% +% \end{macrocode} \ No newline at end of file diff --git a/Master/texmf-dist/source/latex/mh/mathstyle.dtx b/Master/texmf-dist/source/latex/mh/mathstyle.dtx new file mode 100644 index 00000000000..ca8fede5aed --- /dev/null +++ b/Master/texmf-dist/source/latex/mh/mathstyle.dtx @@ -0,0 +1,396 @@ +% \iffalse meta-comment +% +% Copyright (C) 1997-2003 by Michael J. Downes +% Copyright (C) 2007 by Morten Hoegholm +% +% 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 mathstyle.dtx +% and the derived files +% mathstyle.sty, mathstyle.pdf, mathstyle.ins, mathstyle.drv. +% +% Distribution: +% CTAN:macros/latex/contrib/mh/mathstyle.dtx +% CTAN:macros/latex/contrib/mh/mathstyle.pdf +% +% Unpacking: +% (a) If mathstyle.ins is present: +% tex mathstyle.ins +% (b) Without mathstyle.ins: +% tex mathstyle.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{mathstyle.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If mathstyle.drv is present: +% latex mathstyle.drv +% (b) Without mathstyle.drv: +% latex mathstyle.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex mathstyle.dtx +% makeindex -s gind.ist mathstyle.idx +% pdflatex mathstyle.dtx +% makeindex -s gind.ist mathstyle.idx +% pdflatex mathstyle.dtx +% +% Installation: +% TDS:tex/latex/mh/mathstyle.sty +% TDS:doc/latex/mh/mathstyle.pdf +% TDS:source/latex/mh/mathstyle.dtx +% +%<*ignore> +\begingroup + \def\x{LaTeX2e} +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +% +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: mathstyle 2007/12/10 v0.83 Mathstyle (MH)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\preamble + +This is a generated file. + +Copyright (C) 1997-2003 by Michael J. Downes +Copyright (C) 2007 by Morten Hoegholm + +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 mathstyle.dtx +and the derived files + mathstyle.sty, mathstyle.pdf, mathstyle.ins, mathstyle.drv. + +\endpreamble + +\generate{% + \file{mathstyle.ins}{\from{mathstyle.dtx}{install}}% + \file{mathstyle.drv}{\from{mathstyle.dtx}{driver}}% + \usedir{tex/latex/mh}% + \file{mathstyle.sty}{\from{mathstyle.dtx}{package}}% +} + +\obeyspaces +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* mathstyle.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `mathstyle.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +% +%<*ignore> +\fi +% +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{mathstyle.drv}% + [2007/12/10 v0.83 mathstyle (MH)] +\documentclass{ltxdoc} +\providecommand*\pkg[1]{\textsf{#1}} +\begin{document} + \DocInput{mathstyle.dtx} +\end{document} +% +% \fi +% +% \title{The \textsf{mathstyle} package} +% \date{2007/12/10 v0.83} +% \author{Morten H\o gholm \\\texttt{mh.ctan@gmail.com}} +% +% +% \maketitle +% +% \part*{User's guide} +% +% This package exists for two reasons: +% \begin{itemize} +% \item The primitive operations for creating a super- or subscript in +% \TeX\ work almost as if \verb|^| and \verb|_| are macros taking an +% argument. However, that is not quite the case, and +% some things that you'd expect to work don't (e.g., \verb|^\cong|) +% whereas others which you'd think shouldn't work actually +% do (such as |^\mathsf{s}|). We do everyone a favor if it behaves +% consistently, i.e., if the superscript and subscript operations +% act as if they are macros taking exactly one argument. +% +% \item Because the \TeX\ math typesetting engine uses infix notation +% for fractions, one has to use \cs{mathchoice} or \cs{mathpalette} +% whenever trying to do anything requiring boxing or measuring +% math. This creates problems for loading fonts on demand as the +% font loading mechanism has to load fonts for all styles without +% even knowing if the font is going to be used. Getting the timing +% of \cs{mathchoice} right can be tricky as well. Since \LaTeX\ does +% not promote the primitive infix notation, this package keeps track +% of a current mathstyle parameter. +% \end{itemize} +% +% +% \section{Some usage tips} +% +% If you want to use this package with \pkg{amsmath}, it is important +% \pkg{mathstyle} is loaded \emph{after} \pkg{amsmath}. +% +% The current mathstyle is stored in the variable \cs{mathstyle}. The +% command \cs{currentmathstyle} can be used to switch to the mode +% currently active. Below is shown how the macro \cs{mathrlap} from +% \pkg{mathtools} is implemented without knowing about the current +% mathstyle using \cs{mathpalette}. +% \begin{verbatim} +% \providecommand*\mathrlap[1][]{% +% \ifx\@empty#1\@empty +% \expandafter \mathpalette \expandafter \@mathrlap +% \else +% \expandafter \@mathrlap \expandafter #1% +% \fi} +% \providecommand*\@mathrlap #1#2{{}\rlap{$\m@th#1{#2}$}} +% \end{verbatim} +% The same definition using \cs{currentmathstyle} from this package. +% \begin{verbatim} +% \providecommand*\mathrlap[2][]{% +% #1 {}\rlap{$\m@th \currentmathstyle {#2}$}} +% \end{verbatim} +% +% +% +% \StopEventually{} +% \part*{Implementation} +% +% +% +% \begin{macrocode} +%<*package> +\ProvidesPackage{mathstyle}[2007/12/10 v0.83] +% \end{macrocode} +% \begin{macro}{\@saveprimitive} +% A straight copy from \pkg{breqn}, see implementation details +% there. Of course, with a recent pdf\TeX\ (v1.40+), one can just +% use \cs{primitive} to get the original. We will implement that +% some day. +% \begin{macrocode} +\providecommand\@saveprimitive[2]{% + \begingroup + \edef\@tempa{\string#1}\edef\@tempb{\meaning#1}% + \ifx\@tempa\@tempb \global\let#2#1% + \else + \edef\@tempb{\meaning#2}% + \ifx\@tempa\@tempb + \else \@saveprimitive@a#1#2% + \fi + \fi + \endgroup +} +\providecommand\@saveprimitive@a[2]{% + \begingroup + \def\@tempb##1#1##2{\edef\@tempb{##2}\@car{}}% + \@tempb\nullfont{select font nullfont}% + \topmark{\string\topmark:}% + \firstmark{\string\firstmark:}% + \botmark{\string\botmark:}% + \splitfirstmark{\string\splitfirstmark:}% + \splitbotmark{\string\splitbotmark:}% + #1{\string#1}% + \edef\@tempa{\expandafter\strip@prefix\meaning\@tempb}% + \edef\@tempb{\meaning#1}% + \ifx\@tempa\@tempb \global\let#2#1% + \else + \PackageError{mathstyle}% + {Unable to properly define \string#2; primitive + \noexpand#1no longer primitive}\@eha + \fi + \fi + \endgroup +} +% \end{macrocode} +% \end{macro} +% Do initial \cs{chardef} of \cs{mathstyle}. +% \begin{macrocode} +\chardef\mathstyle=\z@ +% \end{macrocode} +% Save the four style changing primitives, \cs{mathchoice} and the +% fraction commands. +% \begin{macrocode} +\@saveprimitive\displaystyle\@@displaystyle +\@saveprimitive\textstyle\@@textstyle +\@saveprimitive\scriptstyle\@@scriptstyle +\@saveprimitive\scriptscriptstyle\@@scriptscriptstyle +\@saveprimitive\mathchoice\@@mathchoice +\@saveprimitive\over\@@over +\@saveprimitive\atop\@@atop +\@saveprimitive\above\@@above +\@saveprimitive\overwithdelims\@@overwithdelims +\@saveprimitive\atopwithdelims\@@atopwithdelims +\@saveprimitive\abovewithdelims\@@abovewithdelims +% \end{macrocode} +% Then we redeclare the four style changing primitives. +% \begin{macrocode} +\DeclareRobustCommand{\displaystyle}{% + \@@displaystyle \chardef\mathstyle\z@} +\DeclareRobustCommand{\textstyle}{% + \@@textstyle \chardef\mathstyle\@ne} +\DeclareRobustCommand{\scriptstyle}{% + \@@scriptstyle \chardef\mathstyle\tw@} +\DeclareRobustCommand{\scriptscriptstyle}{% + \@@scriptscriptstyle \chardef\mathstyle\thr@@} +% \end{macrocode} +% First we get the primitive operations. These should have been +% control sequences in \TeX\ just like operations for begin math, end +% math, begin display, end display. +% \begin{macrocode} +\begingroup \catcode`\^=7\relax \catcode`\_=8\relax % just in case +\lowercase{\endgroup +\let\@@superscript=^ \let\@@subscript=_ +}% +% \end{macrocode} +% If we enter a sub- or superscript the \cs{mathstyle} must be +% adjusted. Since all is happening in a group, we do not have to worry +% about resetting. +% \begin{macrocode} +\def\subsupstyle{% + \ifnum\mathstyle<\tw@ \chardef\mathstyle\tw@ + \else \chardef\mathstyle\thr@@ + \fi +} +% \end{macrocode} +% Provide commands with meaningful names for the two primitives, cf.\ +% \cs{mathrel}. +% \begin{macrocode} +\let\mathsup=\@@superscript +\let\mathsub=\@@subscript +% \end{macrocode} +% \cs{sb} and \cs{sp} are then defined as macros. +% \begin{macrocode} +\def\sb#1{\mathsub{\protect\subsupstyle#1}}% +\def\sp#1{\mathsup{\protect\subsupstyle#1}}% +% \end{macrocode} +% \cs{mathchoice} is now just a switch. Note that this redefinition +% does not allow the arbitrary \meta{filler} of the \TeX\ +% primitive. Very rarely used anyway. +% \begin{macrocode} +\def\mathchoice{% + \relax\ifcase\mathstyle + \expandafter\@firstoffour + \or + \expandafter\@secondoffour + \or + \expandafter\@thirdoffour + \else + \expandafter\@fourthoffour + \fi +} +% \end{macrocode} +% Helper macros. +% \begin{macrocode} +\providecommand\@firstoffour[4]{#1} +\providecommand\@secondoffour[4]{#2} +\providecommand\@thirdoffour[4]{#3} +\providecommand\@fourthoffour[4]{#4} +% \end{macrocode} +% The fractions. Note that this uses the same names as in +% \pkg{amsmath}. Much the same except here they call \cs{fracstyle}. +% \begin{macrocode} +\DeclareRobustCommand\genfrac[6]{% + {\fracstyle #1% + {\begingroup #5\endgroup + \csname @@\ifx\maxdimen#4\maxdimen over\else above\fi + \if @#2@\else withdelims\fi\endcsname #2#3#4\relax + #6}% + }% +} +\renewcommand{\frac}{\genfrac{}{}{}{}} +\providecommand{\dfrac}{} +\providecommand{\tfrac}{} +\renewcommand{\dfrac}{\genfrac\displaystyle{}{}{}} +\renewcommand{\tfrac}{\genfrac\textstyle{}{}{}} +\providecommand{\binom}{} +\providecommand{\tbinom}{} +\providecommand{\dbinom}{} +\renewcommand{\binom}{\genfrac{}(){0pt}} +\renewcommand{\dbinom}{\genfrac\displaystyle(){0pt}} +\renewcommand{\tbinom}{\genfrac\textstyle(){0pt}} +% \end{macrocode} +% The \cs{fracstyle} command is a switch to go one level down but no +% further than three. +% \begin{macrocode} +\def\fracstyle{\ifcase\mathstyle + \chardef\mathstyle=\@ne + \or + \chardef\mathstyle=\tw@ + \else + \chardef\mathstyle=\thr@@ + \fi +} +% \end{macrocode} +% The \cs{currentmathstyle} checks the value of \cs{mathstyle} and +% switches to it so it is in essence the opposite of \cs{displaystyle} +% and friends. +% \begin{macrocode} +\def\currentmathstyle{% + \ifcase\mathstyle + \@@displaystyle + \or + \@@textstyle + \or + \@@scriptstyle + \or + \@@scriptscripstyle + \fi} +% \end{macrocode} +% Finally, we declare the package options. +% \begin{macrocode} +\DeclareOption{activechars}{\catcode`\^=13\relax \catcode`\_=13\relax } +\ProcessOptions\relax +\ifnum\catcode`\^=13\relax + \let^=\sp \let_=\sb +\else + \mathcode`\^="8000\relax \mathcode`\_="8000\relax + \begingroup \catcode`\^=\active \catcode`\_=\active + \global\let^=\sp \global\let_=\sb + \endgroup +\fi +% +% \end{macrocode} +% \Finale diff --git a/Master/texmf-dist/source/latex/mh/mathtools.dtx b/Master/texmf-dist/source/latex/mh/mathtools.dtx index 96ac01a4a9a..585ec5d9b9c 100644 --- a/Master/texmf-dist/source/latex/mh/mathtools.dtx +++ b/Master/texmf-dist/source/latex/mh/mathtools.dtx @@ -1,31 +1,134 @@ -% \iffalse meta-comment -% File `mathtools.dtx'. -% Copyright 2004 Morten H\o gholm. -% moho01ab@student.cbs.dk -% -% It 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 2003/12/01 or later. -% -% This work has the LPPL maintenance status "maintained". +% \iffalse meta-comment % -% The Current Maintainer of this work is Morten H\o gholm. +% Copyright (C) 2004-2007 by Morten Hoegholm % -% This work consists of the files mathtools.dtx and mathtools.ins -% and the derived file mathtools.sty. -% -%\NeedsTeXFormat{LaTeX2e} -%\ProvidesPackage{mathtools} -%<*dtx> - \ProvidesFile{mathtools.dtx} -% - [2004/10/10 v1.01a mathematical typesetting tools (MH)] +% 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. +% +% Distribution: +% CTAN:macros/latex/contrib/mh/mathtools.dtx +% CTAN:macros/latex/contrib/mh/mathtools.pdf +% +% Unpacking: +% (a) If mathtools.ins is present: +% tex mathtools.ins +% (b) Without mathtools.ins: +% tex mathtools.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{mathtools.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If mathtools.drv is present: +% latex mathtools.drv +% (b) Without mathtools.drv: +% latex mathtools.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex mathtools.dtx +% makeindex -s gind.ist mathtools.idx +% pdflatex mathtools.dtx +% makeindex -s gind.ist mathtools.idx +% pdflatex mathtools.dtx +% +% Installation: +% TDS:tex/latex/mh/mathtools.sty +% TDS:doc/latex/mh/mathtools.pdf +% TDS:source/latex/mh/mathtools.dtx +% +%<*ignore> +\begingroup + \def\x{LaTeX2e} +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +% +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: mathtools 2007/12/03 v1.03 (MH)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\preamble + +This is a generated file. + +Copyright (C) 2002-2007 by Morten Hoegholm + +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. + +\endpreamble + +\generate{% + \file{mathtools.ins}{\from{mathtools.dtx}{install}}% + \file{mathtools.drv}{\from{mathtools.dtx}{driver}}% + \usedir{tex/latex/mh}% + \file{mathtools.sty}{\from{mathtools.dtx}{package}}% +} + +\obeyspaces +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* mathtools.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `mathtools.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +% +%<*ignore> +\fi +% %<*driver> -\documentclass[a4paper]{ltxdoc} +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{mathtools.drv}% + [2007/12/03 v1.03 mathematical typesetting tools (MH)] +\documentclass{ltxdoc} +\IfFileExists{fourier.sty}{\usepackage{fourier}}{} \addtolength\marginparwidth{-25pt} \usepackage{mathtools} @@ -36,7 +139,7 @@ \providecommand*\email[1]{\href{mailto:#1}{\texttt{#1}}} \providecommand*\mode[1]{\texttt{[#1]}} \providecommand*\file[1]{\texttt{#1}} -\usepackage{color,varioref} +\usepackage{xcolor,varioref} \makeatletter \newcommand*\thinfbox[2][black]{\fboxsep0pt\textcolor{#1}{\rulebox{{\normalcolor#2}}}} \newcommand*\thinboxed[2][black]{\thinfbox[#1]{\ensuremath{\displaystyle#2}}} @@ -131,7 +234,7 @@ \let\MTtheindex\theindex \def\theindex{\MTtheindex\MakePrivateLetters} -\usepackage[final,hyperindex=false,linkbordercolor=false]{hyperref} +\usepackage[final,hyperindex=false]{hyperref} \renewcommand*\usage[1]{\textit{\hyperpage{#1}}} \OnlyDescription @@ -143,7 +246,7 @@ % % \changes{v1.0}{2004/07/26}{Initial release} % -% \GetFileInfo{mathtools.dtx} +% \GetFileInfo{mathtools.drv} % % \CheckSum{2004} % @@ -189,7 +292,7 @@ % if you have any good macros or just macros that help you when % writing mathematics, then don't hesitate to report them to me. I % can be reached at -% \begin{quote}\email{moho01ab@student.cbs.dk}\end{quote} +% \begin{quote}\email{mh.ctan@gmail.com}\end{quote} % This is of course also the address to use in case of bug reports. % % \section{Package loading} @@ -1653,10 +1756,12 @@ % Lets start the package. % \begin{macrocode} %<*package> +\ProvidesPackage{mathtools}% + [2007/12/03 v1.03 mathematical typesetting tools (MH)] % \end{macrocode} % \begin{macrocode} \RequirePackage{keyval,calc} -\RequirePackage{mhsetup}[2004/10/10] +\RequirePackage{mhsetup}[2007/12/03] \MHInternalSyntaxOn % \end{macrocode} % @@ -1845,15 +1950,16 @@ \def\MT_extended_tagform:n #1{ \MH_set_boolean_F:n {raw_maketag} % \end{macrocode} -% We test if the equation was labelled. We already know if it was tagged -% manually. +% We test if the equation was labelled. We already know if it was +% tagged manually. Have to watch out for \TeX\ inserting a blank line +% so do not let the tag have width zero. % \begin{macrocode} \if_meaning:NN \df@label\@empty - \MH_if_boolean:nT {manual_tag} - { \MH_if_boolean:nTF {show_manual_tags} - { \MT_prev_tagform:n {#1} } - { \stepcounter{equation} } - } + \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} @@ -2089,9 +2195,9 @@ \kern-\wd0 \lower.22ex\box0}} \providecommand*\xrightleftharpoons[2][]{\mathrel{% \raise.22ex\hbox{% - $\ext@arrow 3095\MT_rightharpoonup_fill:{\phantom{#1}}{#2}$}% + $\ext@arrow 0359\MT_rightharpoonup_fill:{\phantom{#1}}{#2}$}% \setbox0=\hbox{% - $\ext@arrow 0359\MT_leftharpoondown_fill:{#1}{\phantom{#2}}$}% + $\ext@arrow 3095\MT_leftharpoondown_fill:{#1}{\phantom{#2}}$}% \kern-\wd0 \lower.22ex\box0}} % \end{macrocode} % \end{macro} @@ -2366,6 +2472,7 @@ % \begin{macro}{\l_MT_multwidth_dim} % Helpers. % \begin{macrocode} +\let \AMS@math@cr@@ \math@cr@@ \MH_new_boolean:n {mult_firstline} \MH_new_boolean:n {outer_mult} \newcount\g_MT_multlinerow_int @@ -2585,7 +2692,7 @@ % The user environment. Scan for an optional argument. % \begin{macrocode} \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}} @@ -2599,7 +2706,7 @@ \MT_multlined_second_arg:w } { - \hfilneg \endaligned + \hfilneg \endaligned \MH_group_align_safe_end: } \MHPrecedingSpacesOn % \end{macrocode} @@ -2644,12 +2751,11 @@ % \begin{macrocode} \newcommand*\DeclarePairedDelimiter[3]{% \@ifdefinable{#1}{ - \edef\MT_next: {\MH_cs_to_str:N #1} % \end{macrocode} % Define the starred command to just put \cs{left} and \cs{right} % before the delimiters. % \begin{macrocode} - \@namedef{MT_delim_\MT_next: _star:}##1 + \@namedef{MT_delim_\MH_cs_to_str:N #1 _star:}##1 {\left#2 ##1 \right #3}% % \end{macrocode} % The command with optional argument. It should be \cs{bigg} or @@ -2657,13 +2763,15 @@ % \begin{macrocode} \@xp\@xp\@xp \newcommand - \@xp\csname MT_delim_\MT_next: _nostar:\endcsname[2][\\@gobble] - { \edef\MT_next: {\MH_cs_to_str:N ##1} + \@xp\csname MT_delim_\MH_cs_to_str:N #1 _nostar:\endcsname + [2][\\@gobble] + { % \end{macrocode} % With the default optional argument we wind up with \cs{relax}, % else we get \cs{biggr} and \cs{biggl} etc. % \begin{macrocode} - \@nameuse {\MT_next: l} #2 ##2 \@nameuse {\MT_next: r} #3} + \mathopen{\@nameuse {\MH_cs_to_str:N ##1 l} #2} ##2 + \mathclose{\@nameuse {\MH_cs_to_str:N ##1 r} #3}} % \end{macrocode} % The user command comes here. Just check for the star and choose % the right internal command. @@ -2680,50 +2788,54 @@ % % \subsection{A \texttt{\textbackslash displaystyle} \env{cases} environment} % -% \begin{macro}{\MT_start_cases:nn} +% \begin{macro}{\MT_start_cases:nnn} % We define a single command that does all the hard work. % \begin{macrocode} -\def\MT_start_cases:nn #1#2{ - \RIfM@\else - \nonmatherr@{\begin{\@currenvir}}% - \fi -% \end{macrocode} -% Put in the brace and center the contents (nothing else makes -% sense). -% \begin{macrocode} - \left\lbrace - \vcenter \bgroup - \Let@ \chardef\dspbrk@context\@ne \restore@math@cr - \spread@equation - \ialign\bgroup +\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 % \end{macrocode} % Set the first column flush left in \cs{displaystyle} math and the % second as specified by the second argument. The first argument is % the separation between the columns. It could be a \cs{quad} or % something entirely different. % \begin{macrocode} - \strut@$\m@th\displaystyle{##}$\hfil\strut@ + \strut@$\m@th \displaystyle{##}$\hfil \strut@ + #2 + \crcr +} % \end{macrocode} -% Insert the specification of the second column. +% \end{macro} +% \begin{macro}{\MH_end_cases:} % \begin{macrocode} - #2 - \crcr +\def\MH_end_cases:{\crcr\egroup + \restorecolumn@ + \egroup + \MH_group_align_safe_end: } % \end{macrocode} -% \end{macro} +% \end{macro} % \begin{macro}{\newcases} % \begin{macro}{\renewcases} % Easy creation of new \env{cases}-like environments. % \begin{macrocode} -\newcommand*\newcases[3]{ - \newenvironment{#1} - {\MT_start_cases:nn {#2}{#3}} - {\endaligned\right.} +\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[3]{ - \renewenvironment{#1} - {\MT_start_cases:nn {#2}{#3}} - {\endaligned\right.} +\newcommand*\renewcases[5]{ + \renewenvironment{#1} + {\MT_start_cases:nnn {#2}{#3}{#4}} + {\MH_end_cases:\right#5} } % \end{macrocode} % \begin{environment}{dcases} @@ -2731,8 +2843,8 @@ % \env{dcases} is a traditional cases with display style math in % both columns, while \env{dcases*} has text in the second column. % \begin{macrocode} -\newcases{dcases}{\quad}{$\m@th\displaystyle{##}$\hfil} -\newcases{dcases*}{\quad}{{##}\hfil} +\newcases{dcases}{\quad}{$\m@th\displaystyle{##}$\hfil}{\lbrace}{.} +\newcases{dcases*}{\quad}{{##}\hfil}{\lbrace}{.} % \end{macrocode} % \end{environment} % \end{environment} diff --git a/Master/texmf-dist/source/latex/mh/mhsetup.dtx b/Master/texmf-dist/source/latex/mh/mhsetup.dtx index ac168a685d9..75bbb8b43b6 100644 --- a/Master/texmf-dist/source/latex/mh/mhsetup.dtx +++ b/Master/texmf-dist/source/latex/mh/mhsetup.dtx @@ -1,31 +1,133 @@ -% \iffalse meta-comment -% File `mhsetup.dtx'. -% Copyright 2004 Morten H\o gholm. -% moho01ab@student.cbs.dk -% -% It 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 +% \iffalse meta-comment +% +% Copyright (C) 2002-2007 by Morten Hoegholm +% +% 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 2003/12/01 or later. +% 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 mhsetup.dtx +% and the derived files +% mhsetup.sty, mhsetup.pdf, mhsetup.ins, mhsetup.drv. +% +% Distribution: +% CTAN:macros/latex/contrib/mh/mhsetup.dtx +% CTAN:macros/latex/contrib/mh/mhsetup.pdf +% +% Unpacking: +% (a) If mhsetup.ins is present: +% tex mhsetup.ins +% (b) Without mhsetup.ins: +% tex mhsetup.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{mhsetup.dtx} +% (quote the arguments according to the demands of your shell) % -% This work has the LPPL maintenance status "maintained". +% Documentation: +% (a) If mhsetup.drv is present: +% latex mhsetup.drv +% (b) Without mhsetup.drv: +% latex mhsetup.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} % -% The Current Maintainer of this work is Morten H\o gholm. +% Programm calls to get the documentation (example): +% pdflatex mhsetup.dtx +% makeindex -s gind.ist mhsetup.idx +% pdflatex mhsetup.dtx +% makeindex -s gind.ist mhsetup.idx +% pdflatex mhsetup.dtx % -% This work consists of the files mhsetup.dtx and mhsetup.ins and the -% derived file mhsetup.sty. +% Installation: +% TDS:tex/latex/mh/mhsetup.sty +% TDS:doc/latex/mh/mhsetup.pdf +% TDS:source/latex/mh/mhsetup.dtx % -%\NeedsTeXFormat{LaTeX2e} -%\ProvidesPackage{mhsetup} -%<*dtx> - \ProvidesFile{mhsetup.dtx} -% - [2004/10/10 v1.0b programming setup (MH)] +%<*ignore> +\begingroup + \def\x{LaTeX2e} +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +% +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: mhsetup 2007/12/03 v1.2 mhsetup (MH)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\preamble + +This is a generated file. + +Copyright (C) 2002-2007 by Morten Hoegholm + +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 mhsetup.dtx +and the derived files + mhsetup.sty, mhsetup.pdf, mhsetup.ins, mhsetup.drv. + +\endpreamble + +\generate{% + \file{mhsetup.ins}{\from{mhsetup.dtx}{install}}% + \file{mhsetup.drv}{\from{mhsetup.dtx}{driver}}% + \usedir{tex/latex/mh}% + \file{mhsetup.sty}{\from{mhsetup.dtx}{package}}% +} + +\obeyspaces +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* mhsetup.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `mhsetup.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +% +%<*ignore> +\fi +% %<*driver> -\documentclass[a4paper]{ltxdoc} +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{mhsetup.drv}% + [2007/12/03 v1.2 programming setup (MH)] +\documentclass{ltxdoc} \usepackage{mhsetup} \addtolength\oddsidemargin{30pt} @@ -53,9 +155,9 @@ % % \fi % -% \CheckSum{286} +% \CheckSum{297} % -% \GetFileInfo{mhsetup.dtx} +% \GetFileInfo{mhsetup.drv} % % \title{The \pkg{mhsetup} package\thanks{This package has version % number \fileversion, last revised on \filedate.}} @@ -71,8 +173,12 @@ % packages. % \end{abstract} % +% The description below was made before the extensive changes made to +% the expl3 code available from the LaTeX Project website. +% % \section{The new internal syntax} % +% % The \LaTeX3 package \pkg{ldcsetup} defines the command % \cs{InternalSyntaxOn} which makes |_| and |:| letters and then % automatically restores the category codes at the end of the @@ -188,6 +294,8 @@ % % \begin{macrocode} %<*package> +\ProvidesPackage{mhsetup}% + [2007/12/03 v1.2 programming setup (MH)] % \end{macrocode} % \subsection{The new internal syntax} % \begin{macro}{\MHInternalSyntaxOn} @@ -520,6 +628,16 @@ % \end{macro} % \end{macro} % \end{macro} +% +% \begin{macro}{\MH_group_align_safe_begin:} +% \begin{macro}{\MH_group_align_safe_end:} +% \begin{macrocode} +\def \MH_group_align_safe_begin: {\iffalse{\fi\ifnum0=`}\fi} +\def \MH_group_align_safe_end: {\ifnum0=`{}\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \begin{macrocode} % % \end{macrocode} diff --git a/Master/texmf-dist/tex/latex/mh/breqn.sty b/Master/texmf-dist/tex/latex/mh/breqn.sty new file mode 100644 index 00000000000..e69a67473b5 --- /dev/null +++ b/Master/texmf-dist/tex/latex/mh/breqn.sty @@ -0,0 +1,2056 @@ +%% +%% This is file `breqn.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% breqn.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% Copyright (C) 1997-2003 by Michael J. Downes +%% Copyright (C) 2007 by Morten Hoegholm +%% +%% 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 breqn.dtx +%% and the derived files +%% breqn.sty, breqn.pdf, breqn.ins, breqn.drv. +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{breqn}[2007/12/10 v0.96] +\edef\breqnpopcats{% + \catcode\number`\"=\number\catcode`\" + \relax} +\AtEndOfPackage{\breqnpopcats}% +\catcode`\^=7 \catcode`\_=8 \catcode`\"=12 \relax +\DeclareOption{debug}{\errorcontextlines=2000\relax} +\DeclareOption{mathstyleoff}{% + \PassOptionsToPackage{mathstyleoff}{flexisym}% +} +\ProcessOptions\relax +\@ifpackageloaded{flexisym}{}{% + \RequirePackage[cmbase]{flexisym}[2007/12/10] + \edef\breqnpopcats{\breqnpopcats + \catcode\number`\^=\number\catcode`\^ + \catcode\number`\_=\number\catcode`\_ + }% + \catcode`\^=7 \catcode`\_=8 \catcode`\"=12 \relax +} +\RequirePackage{keyval,calc}\relax +\@ifundefined{options}{% +\newcommand{\options}[2]{% + \expandafter\options@a\csname opt@#1.sty\endcsname{#2}% + \setkeys{#1}{#2}% +} +\def\options@a#1#2{% + \edef\@tempa{\options@b#2,\@empty\@nil}% + \ifx#1\relax \let#1\@empty\fi + \xdef#1{#1\ifx#1\@empty\@xp\@gobble\@tempa\@empty\else\@tempa \fi}% +} +\def\options@b#1,#2#3\@nil{% + \options@c#1 \@nil + \ifx#2\@empty \else\options@b#2#3\@nil\fi +} +\def\options@c#1 #2\@nil{\options@d#1=\@nil} +\def\options@d#1=#2\@nil{\ifx\@empty #1\@empty\else,\fi#1} +}{}% end @ifundefined test +\let\@nx\noexpand +\let\@xp\expandafter +\@ifundefined{@emptytoks}{\newtoks\@emptytoks}{} +\chardef\f@ur=4 +\newcount\inf@bad \inf@bad=1000000 +\newcount\maxint \maxint=2147483647 +\let\int@a=\@tempcnta +\let\int@b=\@tempcntb +\let\int@c=\count@ +\let\dim@a\@tempdima +\let\dim@b\@tempdimb +\let\dim@c\@tempdimc +\let\dim@d\dimen@ +\let\dim@e\dimen@ii +\let\dim@A\dimen@i +\let\skip@a\@tempskipa +\let\skip@b\@tempskipb +\let\skip@c\skip@ +\let\toks@a\@temptokena +\let\toks@b\toks@ +\toksdef\toks@c=2 +\toksdef\toks@d=4 +\toksdef\toks@e=6 +\toksdef\toks@f=8 +\def\abs@num#1{\ifnum#1<\z@-\fi#1} +\def\@ifnext#1#2#3{% + \let\@tempd= #1\def\@tempa{#2}\def\@tempb{#3}% + \futurelet\@tempc\@ifnexta +} +\def\@ifnexta{\ifx\@tempc\@tempd \let\@tempb\@tempa \fi \@tempb} +\def\@ifstar#1#2{% + \let\@tempd*\def\@tempa*{#1}\def\@tempb{#2}% + \futurelet\@tempc\@ifnexta +} +\def\@optarg#1#2{\@ifnext[{#1}{#1[#2]}} +\def\@True{00} +\def\@False{01} +\def\@Not#1{0\ifcase#11 \or\@xp 1\else \@xp 0\fi} +\def\@And#1#2{0\ifcase#1#2 \@xp 0\else \@xp 1\fi} +\def\@Or#1#2{0\ifnum#1#2<101 \@xp 0\else \@xp 1\fi} +\def\theb@@le#1{\if#1 True\else False\fi} +\def\freeze@glue#1{#11#1\relax} +\def\z@rule{\vrule\@width\z@}% no \relax ! use with care +\def\keep@glue{\z@rule\relax} +\begingroup \catcode`\&=11 +\gdef\replicate#1{% + \csname &\expandafter\replicate@a\romannumeral\number\number#1 000q\endcsname +} +\endgroup +\long\def\replicate@a#1#2\endcsname#3{#1\endcsname{#3}#2} +\begingroup \catcode`\&=11 +\long\gdef\&m#1#2{#1\csname \endcsname{#1}} +\endgroup +\@xp\let\csname\string &q\endcsname\@gobble +\g@addto@macro\mathchars@reset{% + \let\@symRel\@secondoftwo \let\@symBin\@secondoftwo + \let\@symDeL\@secondoftwo \let\@symDeR\@secondoftwo + \let\@symDeB\@secondoftwo +} +\def\eq@cons#1#2{% + \begingroup \let\@elt\relax \xdef#1{\@elt{#2}#1}\endgroup +} +\providecommand{\@saveprimitive}[2]{% + \begingroup + \edef\@tempa{\string#1}\edef\@tempb{\meaning#1}% + \ifx\@tempa\@tempb \global\let#2#1% + \else + \edef\@tempb{\meaning#2}% + \ifx\@tempa\@tempb + \else \@saveprimitive@a#1#2% + \fi + \fi + \endgroup +} +\providecommand\@saveprimitive@a[2]{% + \begingroup + \def\@tempb##1#1##2{\edef\@tempb{##2}\@car{}}% + \@tempb\nullfont{select font nullfont}% + \topmark{\string\topmark:}% + \firstmark{\string\firstmark:}% + \botmark{\string\botmark:}% + \splitfirstmark{\string\splitfirstmark:}% + \splitbotmark{\string\splitbotmark:}% + #1{\string#1}% + \edef\@tempa{\expandafter\strip@prefix\meaning\@tempb}% + \edef\@tempb{\meaning#1}% + \ifx\@tempa\@tempb \global\let#2#1% + \else + \PackageError{breqn}% + {Unable to properly define \string#2; primitive + \noexpand#1no longer primitive}\@eha + \fi + \fi + \endgroup +} +\begingroup \catcode`\$=\thr@@ % just to make sure + \global\let\@@math=$ \gdef\@@display{$$}% $$$ +\endgroup +\let\@@endmath=\@@math +\let\@@enddisplay=\@@display +\@saveprimitive\vadjust\@@vadjust +\@saveprimitive\insert\@@insert +\@saveprimitive\mark\@@mark +\let\debug=\begingroup +\let\gubed=\endgroup +\def\debugmsg{\message{||= \iffalse}\fi + \@xp\@gobble\string +} +\def\debugwr#1{\immediate\write\sixt@@n{||= #1}} +\def\debug@box#1{% + \batchmode{\showboxbreadth\maxdimen\showboxdepth99\showbox#1}% + \errorstopmode +} +\def\eqinfo{% + \debug@box\EQ@copy + \wlog{!! EQ@copy: \the\wd\EQ@copy\space x + \the\ht\EQ@copy+\the\dp\EQ@copy + }% +} +\def\debug@para{% + \debugwr{\hsize\the\hsize, \parfillskip\the\parfillskip}% + \debugmsg{\leftskip\the\leftskip, \rightskip\the\rightskip}% + \debugmsg{\linepenalty\the\linepenalty, \adjdemerits\the\adjdemerits}% + \debugmsg{\pretolerance\the\pretolerance, \tolerance\the\tolerance, + \parindent\the\parindent}% +} +\@ifpackagewith{breqn}{debug}{}{% + \let\debug\relax \let\gubed\relax + \let\debugmsg\@gobble \let\debug@lines\relax \let\debug@para\relax + \let\debugwr\@gobble + \let\debug@box\@gobble \let\debug@push\@gobbletwo +} +\@ifundefined{listwidth}{\newdimen\listwidth}{} +\listwidth=\z@ +\def\eqfontsize{} % Inherit from context [NOT USED?] +\def\eqcolor{black} % Default to black [NOT USED?] +\newdimen\eqnumsep \eqnumsep=10pt % Min space between equ number and body +\newdimen\eqmargin \eqmargin=8pt % For `multline' gap emulation +\def\eqindent{C}% % C or I, centered or indented +\def\eqnumside{R}% % R or L, right or left +\def\eqnumplace{M}% % M or T or B, middle top or bottom +\def\eqnumfont{}% % Null for easier debugging [mjd,1997/09/26] +\def\eqnumform#1{(#1\@@italiccorr)} % Add parens +\def\eqnumsize{} % Allow numbers to have different typesize ... +\def\eqnumcolor{} % ... or color than eq body e.g. \color{blue} +\newlength\eqlinespacing \eqlinespacing=14pt plus2pt % Base-to-base space between lines +\newlength\eqlineskip \eqlineskip=3pt plus2pt % Min space if eqlinespacing too small +\newdimen\eqlineskiplimit \eqlineskiplimit=2pt % Threshold for switching to eqlineskip +\newmuskip \eqbinoffset \eqbinoffset=15mu minus-3mu % Offset from mathrel alignment pt for mathbins +\newmuskip\eqdelimoffset \eqdelimoffset=2mu % Additional offset for break inside delims +\newdimen\eqindentstep \eqindentstep=8pt % Indent used when LHS wd is n/a or too large +\newtoks\eqstyle % Customization hook +\newcount\eqbreakdepth \eqbreakdepth=2 % Allow breaks within delimiters to this depth +\newcount \eqinterlinepenalty \eqinterlinepenalty=10000 % No page breaks between equation lines +\newcount \intereqpenalty \intereqpenalty=1000 % Pagebreak penalty between equations [BRM: Was \@M] +\newlength \intereqskip \intereqskip=3pt plus2pt % Additional vert space between equations +\newcount\prerelpenalty \prerelpenalty=-\@M % Linebreak penalty before mathrel symbols +\newcount\prebinoppenalty \prebinoppenalty=888 % Linebreak penalty before mathbins +\newmuskip \Dmedmuskip \Dmedmuskip=4mu minus 3mu % medmuskip in displays +\newmuskip \Dthickmuskip \Dthickmuskip=5mu minus 2mu % thickmuskip in displays +\def\eq@number{} % Internal variable +\newlength\eqleftskip \eqleftskip=\@centering % Space on the left [NOT USED?] +\newlength\eqrightskip \eqrightskip=\@centering % Space on the right [NOT USED?] +\newlength\eq@vspan \eq@vspan=\z@skip % Glue used to vcenter the eq number +\newmuskip\eq@binoffset \eq@binoffset=\eqbinoffset % Roughly, \eqbinoffset + \eqdelimoffset +\newsavebox\EQ@box % Storage for equation body +\newsavebox\EQ@copy % For eq body sans vadjust/insert/mark material +\newsavebox\EQ@numbox % For equation number +\newdimen\eq@wdNum % width of number + separation [NEW] +\newsavebox\GRP@numbox % For group number [NEW] +\newdimen\grp@wdNum % width of number + separation [NEW] +%%B\EQ@vimbox % Vadjust, insert, or mark material +%%B\EQ@vimcopy % Spare copy of same +%%B\eq@impinging % Temporary box for measuring number placement +\newcount \eq@lines % Internal counter, actual number of lines +\newcount \eq@curline % Loop counter +\newcount \eq@badness % Used in testing for overfull lines +\newcount \EQ@vims % For bookkeeping +\def\@eq@numbertrue{\let\eq@hasNumber\@True}% +\def\@eq@numberfalse{\let\eq@hasNumber\@False}% +\let\eq@hasNumber\@False +\newdimen\eq@dp % Depth of last line +\newdimen\eq@wdL % Width of the left-hand-side +\newdimen\eq@wdT % Total width for framing +\newdimen\eq@wdMin % Width of narrowest line in equation +\newdimen\grp@wdL % Max width of LHS's in a group +\newdimen\grp@wdR % Max RHS of all equations in a group +\newdimen\grp@wdT +\newdimen\eq@wdRmax +\newdimen\eq@firstht % Height of first line +\newdimen\eq@wdCond +\newdimen\eq@indentstep % Indent amount when LHS is not present +\newdimen\eq@linewidth % Width actually used for display +\newdimen\grp@linewidth % Max eq@linewidth over a group +\newdimen\eq@hshift +\let\eq@isIntertext\@False +\eq@indentstep=\maxdimen +\newdimen\eq@given@sidespace +\def\eq@overrun{0pt} +\@ifpackagewith{amsmath}{leqno}{% + \@ifpackagewith{amsmath}{reqno}{}{\def\eqnumside{L}}% +}{% + \def\@tempa#1,leqno.clo,#2#3\@nil{% + \ifx @#2\relax\else \def\eqnumside{L}\fi + }% + \@xp\@tempa\@filelist,leqno.clo,@\@nil + \if L\eqnumside + \else + \@ifundefined{iftagsleft@}{}{% + \edef\eqnumside{% + \if TT\csname fi\endcsname\csname iftagsleft@\endcsname + L\else R\fi + }% + } + \fi +} +\@ifpackagewith{amsmath}{fleqn}{% + \def\eqindent{I}% +}{% + \def\@tempa#1,fleqn.clo,#2#3\@nil{% + \ifx @#2\relax\else \def\eqindent{I}\fi + }% + \@xp\@tempa\@filelist,fleqn.clo,@\@nil + \if I\eqindent + \else + \@ifundefined{if@fleqn}{}{% + \edef\eqindent{% + \if TT\csname fi\endcsname\csname if@fleqn\endcsname + I\else C\fi + }% + }% + \fi +} + \@ifundefined{mathindent}{% + \newdimen\mathindent + }{% + \@ifundefined{@mathmargin}{}{% + \mathindent\@mathmargin + }% + } +\let\EQ@hasLHS=\@False +\let\EQ@QED=\@empty +\def\mark@lhs#1{% + \ifnum\lr@level<\@ne + \let\mark@lhs\relax + \global\let\EQ@hasLHS=\@True + \global\let\EQ@prebin@space\EQ@prebin@space@a + \mark@lhs@a + \penalty9999 % instead of normal \rel@break + % else no penalty = forbid break + \fi +} +\def\mark@lhs@a{% + \mskip\thickmuskip \@@vadjust{\penalty\tw@}\penalty-\@Mi\@@vadjust{}% +} +\newcommand\hiderel[1]{\mathrel{\advance\lr@level\@ne#1}} +\let\m@@Bin\m@Bin +\let\m@@Rel\m@Rel +\let\EQ@prebin@space\relax +\def\EQ@prebin@space@a{\mskip-\eq@binoffset \keep@glue \mskip\eq@binoffset} +\def\bin@break{\ifnum\lastpenalty=\z@\penalty\prebinoppenalty\fi + \EQ@prebin@space} +\def\rel@break{% + \ifnum\abs@num\lastpenalty <\abs@num\prerelpenalty + \penalty\prerelpenalty + \fi +} +\def\d@@Bin{\bin@break \m@@Bin} +\def\d@@Rel{\mark@lhs \rel@break \m@@Rel} +\let\m@@symRel\@symRel \def\d@@symRel{\mark@lhs \rel@break \m@@symRel} +\let\m@@symBin\@symBin \def\d@@symBin{\bin@break \m@@symBin} +\let\m@@symDel\@symDel +\let\m@@symDeR\@symDeR +\let\m@@symDeB\@symDeB +\let\m@@symDeA\@symDeA +\def\display@setup{% + \medmuskip\Dmedmuskip \thickmuskip\Dthickmuskip + \let\m@Bin\d@@Bin \let\m@Rel\d@@Rel + \let\@symRel\d@@symRel \let\@symBin\d@@symBin + \let\m@DeL\d@@DeL \let\m@DeR\d@@DeR \let\m@DeB\d@@DeB + \let\m@DeA\d@@DeA + \let\@symDeL\d@@symDeL \let\@symDeR\d@@symDeR + \let\@symDeB\d@@symDeB \let\@symDeA\d@@symDeA + \let\left\eq@left \let\right\eq@right \global\lr@level\z@ + \global\eq@wdCond\z@ %BRM: new + \everyhbox{\everyhbox\@emptytoks + \let\display@setup\relax \textmath@setup \let\textmath@setup\relax + }% + \everyvbox{\everyvbox\@emptytoks + \let\display@setup\relax \textmath@setup \let\textmath@setup\relax + }% +} +\def\dseries@display@setup{% + \medmuskip\Dmedmuskip \thickmuskip\Dthickmuskip + \let\m@Bin\d@@Bin + \let\@symBin\d@@symBin + \let\m@DeL\d@@DeL \let\m@DeR\d@@DeR \let\m@DeB\d@@DeB + \let\m@DeA\d@@DeA + \let\@symDeL\d@@symDeL \let\@symDeR\d@@symDeR + \let\@symDeB\d@@symDeB \let\@symDeA\d@@symDeA + \let\left\eq@left \let\right\eq@right \global\lr@level\z@ + \everyhbox{\everyhbox\@emptytoks + \let\display@setup\relax \textmath@setup \let\textmath@setup\relax + }% + \everyvbox{\everyvbox\@emptytoks + \let\display@setup\relax \textmath@setup \let\textmath@setup\relax + }% + \displaystyle +} +\def\textmath@setup{% + \let\m@Bin\m@@Bin \let\m@Rel\m@@Rel + \let\@symRel\m@@symRel \let\@symBin\m@@symBin + \let\m@DeL\m@@DeL \let\m@DeR\m@@DeR \let\m@DeB\m@@DeB + \let\m@DeA\m@@DeA + \let\@symDeL\m@@symDeL \let\@symDeR\m@@symDeR + \let\@symDeB\m@@symDeB \let\@symDeA\m@@symDeA + \let\left\@@left \let\right\@@right +} +\@ifundefined{@displaytrue}{% + \@xp\newif\csname if@display\endcsname + \everydisplay\@xp{\the\everydisplay \@displaytrue}% +}{} +\define@key{breqn}{label}{\def\next@label{\label{#1}}} +\global\let\next@label\@empty +\define@key{breqn}{number}{\def\eq@number{#1}% + \let\@currentlabel\eq@number +} +\define@key{breqn}{shiftnumber}{\let\eq@shiftnumber\@True} +\define@key{breqn}{holdnumber}{\let\eq@holdnumber\@True} +\define@key{breqn}{density}{\def\eq@density@factor{#1}} +\define@key{breqn}{indentstep}{\eqindentstep#1\relax} +\define@key{breqn}{compact}[-99]{\prerelpenalty=#1\relax} +\define@key{breqn}{layout}[?]{% + \edef\eq@layout{\@car#1?\@nil}% +} +\define@key{breqn}{spread}{% + \addtolength\eqlinespacing{#1}% + \addtolength\eqlineskip{#1}% + \eqlineskiplimit\eqlineskip +} +\define@key{breqn}{sidespace}{% + \setlength\eq@given@sidespace{#1}% +} +\define@key{breqn}{style}{\eqstyle\@xp{\the\eqstyle #1}} +\define@key{breqn}{frame}[\fboxrule]{\def\eq@frame{T}% + \dim@a#1\relax\edef\eq@framewd{\the\dim@a}% + \freeze@glue\eqlinespacing \freeze@glue\eqlineskip +} +\define@key{breqn}{fullframe}[]{\def\eq@frame{U}% + \freeze@glue\eqlinespacing \freeze@glue\eqlineskip +} +\def\eq@frame{F} % no frame +\def\eq@framewd{\fboxrule} +\define@key{breqn}{framesep}[\fboxsep]{% + \if\eq@frame F\def\eq@frame{T}\fi + \dim@a#1\relax \edef\eq@framesep{\the\dim@a}% + \freeze@glue\eqlinespacing \freeze@glue\eqlineskip +} +\def\eq@framesep{\fboxsep} +\define@key{breqn}{background}{\def\eq@background{#1}% + \freeze@glue\eqlinespacing \freeze@glue\eqlineskip +} +\define@key{breqn}{color}{\def\eq@foreground{#1}} +\define@key{breqn}{center}[]{\let\eq@centerlines\@True} +\define@key{breqn}{nocenter}[]{\let\eq@centerlines\@False} +\let\eq@centerlines\@False +\define@key{breqn}{noalign}[]{\let\grp@aligned\@False} +\let\grp@aligned\@True % default +\define@key{breqn}{breakdepth}{\eqbreakdepth#1\relax} +\define@key{breqn}{cols}{\global\let\@preamble\@empty + \darray@mkpream#1\@percentchar +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%BRM: The following incorporates several changes: +%% 1) modifications supplied by MJD to fix the eaten \cs{paragraph} problem. +%% 2) Added \cs{display@setup} here, rather than globally. +\newenvironment{dmath}{% + \let\eq@hasNumber\@True \@optarg\@dmath{}}{} +\def\@dmath[#1]{% + \debugmsg{=== DMATH ==================================================}% + \everydisplay\expandafter{\the\everydisplay \display@setup}% + \if@noskipsec \leavevmode \fi + \if@inlabel \leavevmode \global\@inlabelfalse \fi + \if\eq@group\else\eq@prelim\fi + \setkeys{breqn}{#1}% + \the\eqstyle + \eq@setnumber + \begingroup + \eq@setup@a + \eq@startup +} +\def\enddmath#1{\check@punct@or@qed} +\def\end@dmath{% + \gdef\EQ@setwdL{}% Occasionally undefined ??? + \eq@capture + \endgroup + \EQ@setwdL + \eq@measure + \if\eq@group \grp@push \else \eq@finish\fi +} +\newenvironment{dmath*}{% + \let\eq@hasNumber\@False \@optarg\@dmath{}% +}{} +\@namedef{end@dmath*}{\end@dmath} +\@namedef{enddmath*}#1{\check@punct@or@qed} +\def\eq@prelim{% + \if@inlabel \indent \par \fi + \if@nobreak \global\@nobreakfalse \predisplaypenalty\@M \fi + \everypar\@emptytoks + \noindent + \eq@nulldisplay + \par %% \eq@saveparinfo %% needs work + \let\intertext\breqn@intertext +} +\def\breqn@parshape@warning{% + \PackageWarning{breqn}{% + Complex paragraph shape cannot be followed by this equation}% +} +\let\eq@prevshape\@empty +\def\eq@saveparinfo{% + \count@\prevgraf \advance\count@-\thr@@ % for the null display + \edef\eq@prevshape{\prevgraf\the\count@\space}% + \ifcase\parshape + % case 0: no action required + \or \edef\eq@prevshape{\eq@prevshape + \parshape\@ne\displayindent\displaywidth\relax + }% + \else + \breqn@parshape@warning + \fi +} +\def\eq@setnumber{% + \eq@wdNum\z@ + \if\eq@hasNumber + \ifx\eq@number\@empty + \stepcounter{equation}\let\eq@number\theequation + \fi + % This sets up numbox, etc, even if unnumbered????? + \ifx\eq@number\@empty + \else + \debugmsg{Number \eq@number}% + \set@label{equation}\eq@number + \global\sbox\EQ@numbox{% + \next@label \global\let\next@label\@empty + \eqnumcolor\eqnumsize\eqnumfont{\eqnumform{\eq@number}}% + }% + \global\eq@wdNum\wd\EQ@numbox\global\advance\eq@wdNum\eqnumsep + \fi + \fi +} +\def\eq@finish{% + \begingroup + \debugmsg{Formatting equation}% + \debug@showmeasurements + \if F\eq@frame\else + \freeze@glue\eqlinespacing \freeze@glue\eqlineskip + \fi + \csname eq@\eqindent @setsides\endcsname % Compute \leftskip,\rightskip + \adjust@parshape\eq@parshape% Final adjustment of parshape for left|right skips + \eq@topspace{\vskip\parskip}% Set top spacing + \debug@showformat + % Now, invoke the appropriate typesetter according to number placement + \if\eq@hasNumber + \if\eq@shiftnumber + \csname eq@typeset@\eqnumside Shifted\endcsname + \else + \csname eq@typeset@\eqnumside\eqnumplace\endcsname + \fi + \else + \eq@typeset@Unnumbered + \fi + \endgroup + \eq@botspace +} +\def\peek@branch#1#2{% + \let\peek@b#1\let\peek@space#2\futurelet\@let@token\peek@a +} +\def\peek@skipping@spaces#1{\peek@branch#1\peek@skip@space} +\def\peek@a{% + \ifx\@let@token\@sptoken \expandafter\peek@space + \else \expandafter\peek@b\fi +} +\lowercase{\def\peek@skip@space} {\futurelet\@let@token\peek@a}% +\def\check@punct{\futurelet\@let@token\check@punct@a} +\def\check@punct@a{% + \edef\@tempa{% + \ifx\@let@token\@sptoken\@nx\finish@end + \else\ifx\@let@token ,\@nx\check@qed + \else\ifx\@let@token .\@nx\check@qed + \else\check@punct@b % check the less common possibilities + \fi\fi\fi + }% + \@tempa +} +\begingroup +\toks@a{% + \ifx\@let@token ;\@nx\check@qed + \else\ifx\@let@token ?\@nx\check@qed + \else\ifx\@let@token !\@nx\check@qed +} +\toks@c{\fi\fi\fi}% matching with \toks@a +\catcode`\.=\active \catcode`\,=\active \catcode`\;=\active +\catcode`\?=\active \catcode`\!=\active +\toks@b{% + \else\ifx\@let@token ,\@nx\check@qed + \else\ifx\@let@token .\@nx\check@qed + \else\ifx\@let@token ;\@nx\check@qed + \else\ifx\@let@token ?\@nx\check@qed + \else\ifx\@let@token !\@nx\check@qed + \fi\fi\fi\fi\fi +} +\xdef\check@punct@b{% + \the\toks@a\the\toks@b\the\toks@c +} +\endgroup +\let\found@punct\@empty +\def\check@qed#1{% + \gdef\found@punct{#1}% + \peek@skipping@spaces\check@qed@a +} +\def\check@qed@a{% + \ifx\end\@let@token \@xp\check@qed@b + \else \@xp\finish@end + \fi +} +\def\check@qed@b#1#2{% + \@ifundefined{#2qed}{}{% + \toks@\@xp{\found@punct\csname#2qed\endcsname}% + \xdef\found@punct{\the\toks@}% + }% + \finish@end + \end{#2}% +} +\def\@tempa#1\endcsname#2\@nil{\def\latex@end##1{#2}} +\expandafter\@tempa\end{#1}\@nil +\def\end#1{\csname end#1\endcsname \latex@end{#1}}% +\def\check@punct@or@qed#1{% + \xdef\found@punct{\@empty}% BRM: punctuation was being remembered past this eqn. + \def\finish@end{\csname end@#1\endcsname\latex@end{#1}}% + \check@punct +} +\newcommand\eqpunct[1]{\thinspace#1} +\providecommand\set@label[2]{\protected@edef\@currentlabel{#2}} +\def\eq@topspace#1{% + \begingroup + \global\let\EQ@shortskips\@False + \if\@And{\eq@group}{\@Not\GRP@top}% + \parskip\intereqskip \penalty\intereqpenalty + \else + \eq@check@shortskip + \if\EQ@shortskips + \parskip\abovedisplayshortskip + \aftergroup\belowdisplayskip\aftergroup\belowdisplayshortskip + \ifdim\predisplaysize>\z@\nointerlineskip\fi + \else + \parskip\abovedisplayskip + \fi + \fi + \if F\eq@frame + \else + \addtolength\parskip{\eq@framesep+\eq@framewd}% + \fi +\debugmsg{Topspace: \theb@@le\EQ@shortskips, \parskip=\the\parskip, \predisplaysize=\the\predisplaysize}% + #1% + \endgroup +} +\def\eq@check@shortskip{% + \global\let\EQ@shortskips\@False + \setlength\dim@a{\abovedisplayskip+\ht\EQ@numbox}% + \addtolength\leftskip{-2em}% standard TeX value + \ifdim\leftskip<\predisplaysize + \else\if R\eqnumside \global\let\EQ@shortskips\@True + \else\if\eq@shiftnumber + \else\if T\eqnumplace + \ifdim\dim@a<\eq@firstht + \global\let\EQ@shortskips\@True + \fi + \else + \setlength\dim@b{\eq@vspan/2}% + \ifdim\dim@a<\dim@b + \global\let\EQ@shortskips\@True + \fi + \fi\fi\fi\fi +} +\def\eq@botspace{% + \penalty\postdisplaypenalty + \if F\eq@frame + \else + \addtolength\belowdisplayskip{\eq@framesep+\eq@framewd}% + \fi + \vskip\belowdisplayskip + \@endpetrue % kill parindent if current paragraph continues + \global\@ignoretrue % ignore following spaces + \eq@resume@parshape +} +\def\eq@resume@parshape{} +\def\eq@startup{% + \global\let\EQ@hasLHS\@False + \setbox\z@\vbox\bgroup + \noindent \@@math \displaystyle + \penalty-\@Mi +} +\def\eq@setup@a{% + \everymath\everydisplay + %\let\@newline\eq@newline % future possibility? + \let\\\eq@newline + \let\insert\eq@insert \let\mark\eq@mark \let\vadjust\eq@vadjust + \hsize\maxdimen \pretolerance\@M + \linepenalty\@m + \rightskip\z@\@plus\@M\p@ \leftskip\z@skip \parfillskip\z@skip + \clubpenalty\@ne \widowpenalty\z@ \interlinepenalty\z@ + \global\let\EQ@prebin@space\relax + \binoppenalty\@M \relpenalty\@M +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newdimen\eq@wdR\eq@wdR\z@%BRM +\def\eq@capture{% + \ifnum\lastpenalty>-\@M \penalty-\@Mi \fi + \keep@glue\@@endmath + \eq@addpunct + \@@par + \eq@wdL\z@ + \setbox\tw@\lastbox + \global\setbox\EQ@box\hbox{\unhbox\tw@\unskip\unskip\unpenalty}% + \unskip\unpenalty + \global\setbox\EQ@copy\copy\EQ@box +%% \global\setbox\EQ@vimcopy\copy\EQ@vimbox + \clubpenalty\z@ + \eq@wdR\z@%BRM: eq@wdL patch + \eq@repack % recursive + \setbox\tw@\lastbox + \global\setbox\EQ@box\hbox{\unhcopy\tw@\unskip\unpenalty \unhbox\EQ@box}% + \global\setbox\EQ@copy\hbox{\unhbox\tw@\unskip\unpenalty \unhbox\EQ@copy}% + \ifdim\eq@wdR>\z@% BRM: eq@wdL patch + \setlength\dim@a{\wd\EQ@box-\eq@wdR + % Apparently missing a \thickmuskip = 5mu = 5/18em=0.27777777777.. ? + + 0.2777777777777em}% FUDGE??!?!?! + \ifdim\dim@a>\eq@wdL + \debugmsg{Correcting LHS from \the\eq@wdL\space to \the\dim@a = \the\wd\EQ@box - \the\eq@wdR}% + \eq@wdL\dim@a + \xdef\EQ@setwdL{\eq@wdL\the\eq@wdL\relax}% + \fi + \fi + \debugmsg{Capture: total length=\the\wd\EQ@box + ^^J||===== has LHS=\theb@@le\EQ@hasLHS, \eq@wdL=\the\eq@wdL, \eq@wdR=\the\eq@wdR, + ^^J||===== \eq@wdCond=\the\eq@wdCond}% + \egroup % end vbox started earlier +} +\def\eq@addpunct{% + \ifx\found@punct\@empty + \else \eqpunct{\found@punct}% + \fi + % BRM: Added; the punctuation kept getting carried to following environs + \xdef\found@punct{\@empty}% + \EQ@afterspace +} +\global\let\EQ@afterspace\@empty +\def\eq@repack{% + \ifcase\lastpenalty + % case 0: normal case + \setbox\tw@\lastbox + \eq@repacka\EQ@copy \eq@repacka\EQ@box + \unskip + \or % case 1: finished recursing + \unpenalty + \setbox\tw@\lastbox + \eq@repacka\EQ@copy \eq@repacka\EQ@box + \@xp\@gobble + \or % case 2: save box width = LHS width + \unpenalty + \setbox\tw@\lastbox + \setbox\z@\copy\tw@ \setbox\z@\hbox{\unhbox\z@\unskip\unpenalty}% + \addtolength\eq@wdL{\wd\z@} + \setlength\eq@wdR{\wd\EQ@box}% BRM: eq@wdL patch + \xdef\EQ@setwdL{\eq@wdL\the\eq@wdL\relax}% + \global\setbox\EQ@copy\hbox{% + \hbox{\unhcopy\tw@\unskip\unpenalty\unskip}% + \box\EQ@copy + }% + \global\setbox\EQ@box\hbox{% + \hbox{\unhbox\tw@\unskip\unpenalty\unskip}% + \box\EQ@box + }% + \unskip + \or % case 3: unpack left-right box + \unpenalty + \eq@lrunpack + \else + \breqn@repack@err + \fi + \eq@repack % RECURSE +} +\def\breqn@repack@err{% + \PackageError{breqn}{eq@repack penalty neq 0,1,2,3}\relax +} +\def\eq@repacka#1{% + \global\setbox#1\hbox{\unhcopy\tw@ \unskip + \count@-\lastpenalty + \ifnum\count@<\@M \else \advance\count@-\@M \fi + \unpenalty + \ifx\EQ@copy#1\ifnum\count@>\thr@@ \count@\@ne\fi\fi + \ifcase\count@ + % case 0, normal line break + \penalty-\@M % put back the linebreak penalty + \or % case 1, do nothing (end of equation) + \relax + \or % case 2, no-op (obsolete case) + \or % case 3, transfer vspace and/or penalty + \ifx#1\EQ@box \eq@revspace \else \eq@revspaceb \fi + \or % case 4, put back an insert + \eq@reinsert + \or % case 5, put back a mark + \eq@remark + \or % case 6, put back a vadjust + \eq@readjust + \else % some other break penalty + \penalty-\count@ + \fi + \unhbox#1}% +} +\def\eq@nulldisplay{% + \begingroup \frozen@everydisplay\@emptytoks + \@@display + \predisplaypenalty\@M \postdisplaypenalty\@M + \abovedisplayskip\z@skip \abovedisplayshortskip\z@skip + \belowdisplayskip\z@skip \belowdisplayshortskip\z@skip + \xdef\EQ@displayinfo{% + \prevgraf\the\prevgraf \predisplaysize\the\predisplaysize + \displaywidth\the\displaywidth \displayindent\the\displayindent + \listwidth\the\linewidth + \ifdim\displayindent>\z@ + \advance\listwidth\the\leftmargin + \advance\listwidth\the\rightmargin + \fi + \relax}% + \halign{##\cr}% + \@@enddisplay + \par + \endgroup + \EQ@displayinfo +} +\def\eq@newline{% + \@ifstar{\eq@newlinea\@M}{\eq@newlinea\eqinterlinepenalty}} +\def\eq@newlinea#1{% + \@ifnext[{\eq@newlineb{#1}}{\eq@newlineb{#1}[\maxdimen]}} +\def\eq@newlineb#1[#2]{\penalty-\@M} +\def\eq@revspace{% + \global\setbox\EQ@vimbox\vbox{\unvbox\EQ@vimbox + \unpenalty + \global\setbox\@ne\lastbox}% + \@@vadjust{\unvbox\@ne}% + \penalty-\@M +} +\def\eq@revspaceb{% + \global\setbox\EQ@vimcopy\vbox{\unvbox\EQ@vimcopy + \unpenalty + \global\setbox\@ne\lastbox}% + \@@vadjust{\unvbox\@ne}% + \penalty-\@M +} +\def\eq@break#1{\penalty-1000#1 \keep@glue} +\let\@parshape\@empty +\def\eq@measure{% + \ifdim\eq@indentstep=\maxdimen \eq@indentstep\eqindentstep \fi + \ifdim\eq@linewidth=\z@ \else \edef\eq@linewidths{{\the\eq@linewidth}}\fi + \begingroup \eq@params + \leftskip\z@skip + \rightskip\z@\@plus\columnwidth\@minus\hfuzz + \global\EQ@continue{\eq@trial}% + \eq@trial % uses \eq@linewidths + \eq@failout % will be a no-op if the trial succeeded + \endgroup + \EQ@trial +} +\def\debug@showmeasurements{% + \debugmsg{=> \number\eq@lines\space lines}% + \debug + \def\@elt##1^^J##2{^^J||===== \space\space##1/##2}% + \let\@endelt\@empty + \debugmsg{=> trial info:\eq@measurements}% + \debugmsg{=> bounding box: \the\eq@wdT x\the\eq@vspan, badness=\the\eq@badness}% + \let\@elt\relax \let\@endelt\relax + \gubed +} +\def\debug@showmeasurements{% + \begingroup + \def\@elt##1^^J##2{^^J||===== ##1/##2}% + \let\@endelt\@empty + \debugmsg{===> Measurements: \number\eq@lines\space lines + \eq@measurements + ^^J||===== bounding box: \the\eq@wdT x\the\eq@vspan, badness=\the\eq@badness + ^^J||===== \leftskip=\the\leftskip, \rightskip=\the\rightskip}% + \endgroup +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\let\EQ@trial\@empty +\newtoks\EQ@continue +\let\EQ@widths\@empty +\let\EQ@fallback\@empty +\def\eq@linewidths{\displaywidth\linewidth\columnwidth} +\def\eq@trial{% + \ifx\@empty\eq@linewidths + \global\EQ@continue{}% + \else + \iffalse{\fi \@xp\eq@trial@a \eq@linewidths}% + \fi + \the\EQ@continue +} +\def\eq@trial@a#1{% + \dim@c#1\relax + \if T\eq@frame \eq@frame@adjust\dim@c \fi + \ifdim\dim@c>\eq@linewidth + \eq@linewidth\dim@c + \debugmsg{Choose Shape for width(#1)=\the\eq@linewidth}% + \let\eq@trial@b\eq@trial@d + \csname eq@try@layout@\eq@layout\endcsname + \else + \debugmsg{Next width (#1) is shorter; skip it}% + \fi + \edef\eq@linewidths{\iffalse}\fi +} +\def\eq@frame@adjust#1{% + \addtolength#1{-2\eq@framewd-2\eq@framesep}% +} +\def\eq@trial@succeed{% + \aftergroup\@gobbletwo % cancel the \EQ@fallback code; see \eq@trial@c (?) + \global\EQ@continue{\eq@trial@done}% +} +\def\eq@trial@done{% + \debugmsg{End trial: Success!}% + \let\eq@failout\relax +} +\def\eq@trial@init{\global\let\EQ@fallback\eq@nextlayout} +\def\eq@nextlayout#1{% + \endgroup + \debugmsg{Nope ... that ain't gonna work.}% + \begingroup #1% +} +\def\eq@failout{% +\debugmsg{End trial: failout}% + \global\let\EQ@trial\EQ@last@trial +} +\def\eq@trial@save#1{% + \xdef#1{% + \eq@linewidth\the\eq@linewidth + % save info about the fit + \eq@lines\the\eq@lines \eq@badness\the\eq@badness \def\@nx\eq@badline{\eq@badline}% + % save size info + \eq@wdT\the\eq@wdT \eq@wdMin\the\eq@wdMin + \eq@vspan\the\eq@vspan \eq@dp\the\eq@dp \eq@firstht\the\eq@firstht + % save info about the LHS + \eq@wdL\the\eq@wdL \def\@nx\EQ@hasLHS{\EQ@hasLHS}% + % save info about the numbering + \def\@nx\eq@hasNumber{\eq@hasNumber}% + % save info about the chosen layout + \def\@nx\eq@layout{\eq@layout}% + \def\@nx\eq@parshape{\@parshape}% + \def\@nx\eq@measurements{\eq@measurements}% + \def\@nx\adjust@rel@penalty{\adjust@rel@penalty}% + \def\@nx\eq@shiftnumber{\eq@shiftnumber}% + \def\@nx\eq@isIntertext{\@False}% + }% +} +\def\eq@trial@b{\eq@trial@c} +\def\eq@trial@c#1#2{% + \debugmsg{Trying layout "#1" with^^J||===== parshape\space\@xp\@gobble\@parshape}% + \begingroup + \eq@trial@init + \def\eq@layout{#1}% + \setbox\z@\vbox{% + \hfuzz\maxdimen + \eq@trial@p % run the given parshape + \if\@Not{\eq@badline}% + \eq@trial@save\EQ@trial + \if\eq@hasNumber\eq@retry@with@number\fi + \if L\eq@layout \eq@check@density + \else + \if\@Not{\eq@badline}% + \eq@trial@succeed + \fi + \fi + \else + \eq@trial@save\EQ@last@trial + \fi + }% + \EQ@fallback{#2}% + \endgroup +} +\def\eq@trial@d#1#2{\eq@trial@c{#1}{}} +\def\eq@check@density{% + \debugmsg{Checking density for layout L}% + \if\@Or{\@Not\EQ@hasLHS}{\eq@shortLHS}% + \debugmsg{Density check: No LHS, or is short; OK}% + \eq@trial@succeed + \else\if\eq@dense@enough + \eq@trial@succeed + \fi\fi +} +\def\eq@shortLHS{\ifdim\eq@wdL>.44\eq@wdT 1\else 0\fi 0} +\def\eq@trial@p{% + \@parshape % + \eq@dump@box\unhcopy\EQ@copy + {\@@par}% leave \parshape readable + \eq@lines\prevgraf + \eq@fix@lastline + \let\eq@badline\@False + \if i\eq@layout \ifnum\eq@lines>\@ne \let\eq@badline\@True \fi\fi + \eq@curline\eq@lines % loop counter for eq@measure@lines + \let\eq@measurements\@empty + \eq@ml@record@indents + \eq@measure@lines + \eq@recalc + \debug@showmeasurements +} +\let\adjust@rel@penalty\@empty +\def\eq@fix@lastline{% + \setbox\tw@\lastbox \dim@b\wd\tw@ + \eq@dp\dp\tw@ + \nointerlineskip\hbox to\dim@b{\unhbox\tw@ + \skip@c\lastskip \unskip\unskip\hskip\skip@c + }% +} +\def\eq@recalc{% + \eq@wdT\z@ \eq@wdMin\maxdimen \eq@vspan\z@skip \eq@badness\z@ + \let\@elt\eq@recalc@a \eq@measurements \let\@elt\relax +} +\def\eq@recalc@a#1x#2+#3\@endelt{% + \eq@firstht#2\relax + \let\@elt\eq@recalc@b + \@elt#1x#2+#3\@endelt +} +\def\eq@recalc@b#1^^J#2,#3x#4+#5@#6\@endelt{% + \setlength\dim@a{#2+#3}% + \ifdim\dim@a>\eq@wdT \eq@wdT\dim@a \fi + \ifdim\dim@a<\eq@wdMin \eq@wdMin\dim@a \fi + \eq@dp#5\relax + \addtolength\eq@vspan{#1+#4+#5}% + \ifnum#6>\eq@badness \eq@badness#6\relax\fi +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\eq@layout{?} +\@namedef{eq@try@layout@?}{% + \let\eq@trial@b\eq@trial@c + \edef\@parshape{\parshape 1 0pt \the\eq@linewidth\relax}% + \setlength\dim@a{\wd\EQ@copy-2em}% Fudge; can't shrink more than this? + % if we're in a numbered group, try hard to fit within the numbers + \dim@b\eq@linewidth + \if\eq@shiftnumber\else\if\eq@group + \if\eq@hasNumber\addtolength\dim@b{-\wd\EQ@numbox-\eqnumsep}% + \else\if\grp@hasNumber\addtolength\dim@b{-\wd\GRP@numbox-\eqnumsep}% + \fi\fi\fi\fi + \ifdim\dim@a<\dim@b% Do we even have a chance of fitting to one line? + \debugmsg{Choose Shape: (\the\wd\EQ@copy) may fit in \the\dim@b}% + % assuming it might fit, don't push too hard + \setlength\dim@b{\columnwidth-\dim@a+\eq@wdCond}% + \rightskip\z@\@plus\dim@b\@minus\hfuzz + \eq@trial@b{i}{\eq@try@layout@multi}% + \else + \debugmsg{Choose Shape: Too long (\the\wd\EQ@copy) for one line (free width=\the\dim@b)}% + \eq@try@layout@multi + \fi +} +\def\eq@try@layout@multi{% + \if\EQ@hasLHS + \ifdim\eq@wdL>\eq@linewidth + \debugmsg{Choose Shape: LHS \the\eq@wdL > linewidth}% + \setlength\dim@a{\wd\EQ@copy-\eq@wdL}% + \ifdim\dim@a<.25\eq@linewidth \eq@try@layout@S + \else \eq@try@layout@l + \fi + % BRM: Originally .7: Extreme for L since rhs has to wrap within the remaining 30+%! + \else\ifdim\eq@wdL>.50\eq@linewidth + \debugmsg{Choose Shape: LHS (\the\eq@wdL) > .50 linewidth (linewidth=\the\eq@linewidth)}% + \eq@try@layout@D + \else + \debugmsg{Choose Shape: LHS (\the\eq@wdL) not extraordinarily wide}% + \eq@try@layout@L + \fi\fi + \else + \debugmsg{Choose Shape: No LHS here}% + \eq@try@layout@S % (already checked case i) + \fi +} +\def\eq@try@layout@D{% + \setlength\dim@a{\eq@linewidth -\eq@indentstep}% + \edef\@parshape{\parshape 2 + 0pt \the\eq@wdL\space \the\eq@indentstep\space \the\dim@a\relax + }% + \def\adjust@rel@penalty{\penalty-99 }% + \eq@trial@b{D}{\eq@try@layout@A}% +} +\def\eq@try@layout@L{% + \setlength\dim@b{\eq@linewidth-\eq@wdL}% + \edef\@parshape{\parshape 2 0pt \the\eq@linewidth\space + \the\eq@wdL\space \the\dim@b\relax + }% + \eq@trial@b{L}{\eq@try@layout@D}% +} +\def\eq@try@layout@S{% + \setlength\dim@b{\eq@linewidth-2\eqmargin}% \advance\dim@b-1em% + \int@a\wd\EQ@copy \divide\int@a\dim@b + \addtolength\dim@b{-\int@a\eq@indentstep}% + \if\eq@hasNumber + \ifdim\dim@b>15em% + \addtolength\dim@b{-\eq@wdNum}% + \fi + \fi + \int@b\z@ + \def\@tempa{\dim}% + \edef\@parshape{\parshape 2 0pt \the\dim@b\space + \the\eqmargin\space\the\dim@b\relax}% + \eq@trial@b{S}{\eq@try@layout@A}% +} +\def\eq@try@layout@l{% + \setlength\dim@a{\eq@linewidth -\eq@indentstep}% + \int@a\eq@wdL \divide\int@a\dim@a + \advance\int@a\tw@ + \edef\@parshape{\parshape \number\int@a\space + 0pt \the\eq@linewidth + }% + \advance\int@a-\tw@ + \setlength\dim@b{2\eq@indentstep}% + \setlength\dim@c{\eq@linewidth -\dim@b}% + \edef\@parshape{\@parshape + \replicate{\int@a}{\space\the\eq@indentstep\space\the\dim@a}% + \space\the\dim@b\space\the\dim@c\relax + }% + \eq@trial@b{l}{\eq@try@layout@A}% +} +\def\eq@try@layout@A{% + \edef\@parshape{\parshape 1 0pt \the\eq@linewidth\relax}% + \if\EQ@hasLHS \def\adjust@rel@penalty{\penalty-99 }\fi + \eq@trial@b{A}{}% +} +\let\eq@shiftnumber\@False +\def\eq@retry@with@number{% + \if\eq@shiftnumber + \debugmsg{Place number: Shifted number requested}% + \else + \ifdim\eq@wdCond>\z@\if R\eqnumside + \debugmsg{Place number: Condition w/Right number => Shift number}% + \let\eq@shiftnumber\@True + \fi\fi + \dim@b\eq@wdNum + \if L\eqnumside + \ifdim\@totalleftmargin>\dim@b\dim@b\@totalleftmargin\fi + \else + \addtolength\dim@b{\@totalleftmargin}% + \fi + \setlength\dim@a{\eq@linewidth-\dim@b}%\advance\dim@a1em\relax% Allowance for shrink? + \int@a\@ne\if\eq@group\int@a\maxint\fi + \if\eq@shiftnumber % Already know we need to shift + \else\ifdim\eq@wdT<\dim@a % Fits! + \debugmsg{Place number: eqn and number fit together}% + \else + \setlength\leftskip{\eq@wdNum}% + \setlength\rightskip{\z@\@plus\dim@a}% + \adjust@parshape\@parshape + \debugmsg{Place number: Try with \leftskip=\the\leftskip, \rightskip=\the\rightskip, + ^^J||===== parshape\space\@xp\@gobble\@parshape}% + \nointerlineskip + \edef\eq@prev@lines{\the\eq@lines}% + \edef\eq@prev@badness{\the\eq@badness}% BRM + \eq@trial@p + \int@a\eq@prev@badness\relax\advance\int@a 50\relax%? + \int@b\eq@prev@lines \if\eq@group\advance\int@b\@ne\fi% Allow 1 extra line in group + \ifnum\eq@lines>\int@b % \eq@prev@lines + \debugmsg{Adjustment causes more breaks => Shift number}% + \let\eq@shiftnumber\@True + \else\if\eq@badline + \debugmsg{Adjustment causes bad lines (\the\eq@badness) => Shift}% + \let\eq@shiftnumber\@True + \else\ifnum\eq@badness>\int@a % BRM: New case + \debugmsg{Adjustment is badder than previous (\the\eq@badness >> \eq@prev@badness) => Shift}% + \let\eq@shiftnumber\@True + \else + \debugmsg{Adjustment succeeded}% + \fi\fi%\fi + \fi\fi\fi + \if\eq@shiftnumber + \EQ@trial% Restore parshape & other params, + \leftskip\z@\let\eq@shiftnumber\@True % But set shift & leftskip + \edef\@parshape{\eq@parshape}% And copy saved parshape back to `working copy' !?!? + \fi + \eq@trial@save\EQ@trial % Either way, save the trial state. + \fi +} +\def\adjust@parshape#1{% + \@xp\adjust@parshape@a#1\relax + \edef#1{\temp@a}% +} +\def\adjust@parshape@a#1 #2\relax{% + \setlength\dim@a{\leftskip+\rightskip}% + \edef\temp@a{#1}% + \adjust@parshape@b#2 @ @ \relax +} +\def\adjust@parshape@b#1 #2 {% + \ifx @#1\edef\temp@a{\temp@a\relax}% + \@xp\@gobble + \else + \dim@b#1\relax + \dim@c#2\relax + \addtolength\dim@c{\dim@a+\dim@b}% + \ifdim\dim@c>\eq@linewidth\setlength\dim@c{\eq@linewidth}\fi + \addtolength\dim@c{-\dim@b}% + \edef\temp@a{\temp@a\space\the\dim@b\space\the\dim@c}% + \fi + \adjust@parshape@b +} +\def\eq@ml@record@indents{% + \int@a\z@ + \def\@tempa{% + \advance\int@a\@ne + \@xp\edef\csname eq@i\number\int@a\endcsname{\the\dim@a}% + \ifnum\int@a<\int@b \afterassignment\@tempb \fi + \dim@a + }% + \def\@tempb{\afterassignment\@tempa \dim@a}% + \def\@tempc##1##2 {\int@b##2\afterassignment\@tempa\dim@a}% + \@xp\@tempc\@parshape +} +\chardef\@endelt=`\? +\def\eq@measurements{% + \@elt 4.5pt/5.0pt,66.0ptx6.8pt+2.4pt@27\@endelt + ... +} +\def\eq@measure@lines{% + \let\eq@ml@continue\eq@measure@lines + \setbox\tw@\lastbox \dim@b\wd\tw@ % find target width of line + \setbox\z@\hbox to\dim@b{\unhbox\tw@}% check for overfull + \eq@badness\badness + \ifnum\eq@badness<\inf@bad \else \let\eq@badline\@True \fi + \eq@ml@a \eq@ml@continue +} +\def\eq@ml@a{% + \setbox\tw@\hbox{\unhbox\z@ \unskip}% find natural width + \debug\ifnum\eq@badness<\inf@bad\else\debugmsg{!?! Overfull: \the\wd\tw@ >\the\dim@b}\fi\gubed + \ifdim\dim@b<\wd\tw@ \setlength\dim@a{\dim@b}% shrunken line + \else \setlength\dim@a{\wd\tw@}% OK to use natural width + \fi + \addtolength\dim@a{-\leftskip}% BRM: Deduct the skip if we're retrying w/number + \skip@a\lastskip \unskip \unpenalty + \ifdim\skip@a=\z@ + \let\eq@ml@continue\relax % end the recursion + \else + % Sum repeated vskips if present + \def\@tempa{% + \ifdim \lastskip=\z@ + \else \addtolength\skip@a{\lastskip}\unskip\unpenalty \@xp\@tempa + \fi + }% + \fi + \edef\eq@measurements{\@elt + \the\skip@a\space^^J% extra space to facilitate extracting only the + % dimen part later + \csname eq@i% + \ifnum\eq@curline<\parshape \number\eq@curline + \else\number\parshape + \fi + \endcsname,\the\dim@a x\the\ht\tw@+\the\dp\tw@ @\the\eq@badness\@endelt + \eq@measurements + }% + \advance\eq@curline\m@ne + \ifnum\eq@curline=\z@ \let\eq@ml@continue\relax\fi +} +\def\eq@ml@vspace{% + \global\advance\eq@vspan\lastskip \unskip\unpenalty + \ifdim\lastskip=\z@ \else \@xp\eq@ml@vspace \fi +} +\def\eq@dense@enough{% + \ifnum\eq@lines<\thr@@ + \debugmsg{Density check: less than 3 lines; OK}% + \@True + \else + \ifdim\eq@wdL >.7\eq@wdT + \debugmsg{Density check: LHS too long; NOT OK}% + \@False + \else \@xp\@xp\@xp\eq@dense@enough@a + \fi + \fi +} +\def\true@false@true{\fi\fi\iftrue\iffalse\iftrue} +\def\false@false@false{\fi\fi\iffalse\iffalse\iffalse} +\def\false@true@false{\fi\fi\iffalse\iftrue\iffalse} +\def\eq@density@factor{.475} +\def\eq@dense@enough@a{% + \@True \fi + \ifnum\eq@lines>\sixt@@n + \eq@dense@enough@b + \else + \dim@b\z@ \let\@elt\eq@delt \eq@measurements + \dim@c\eq@density@factor\eq@wdT \multiply\dim@c\eq@lines + \debugmsg{Density check: black \the\dim@b/\eq@density@factor total \the\dim@c}% + \ifdim\dim@b>\dim@c \true@false@true \else \false@false@false \fi + \fi +} +\def\eq@delt#1^^J#2,#3x#4+#5@#6\@endelt{\addtolength\dim@b{#3}}% +\def\eq@dense@enough@b{% + \int@b\eq@wdT \divide\int@b\p@ + \dim@b\eq@wdL \divide\dim@b\int@b + \dim@c\eq@lines\p@ \multiply\dim@c\f@ur + \int@b\eq@lines \multiply\int@b 9 \advance\int@b -10% + \divide\dim@c\int@b + \debugmsg{Density check: l/t \the\dim@b\space< \the\dim@c\space 4n/(9n-10)?}% + \ifdim\dim@b<\dim@c \true@true@true \else \false@true@false \fi +} +\let\eq@parshape\@empty +\def\eq@params{% + \baselineskip\eqlinespacing + \lineskip\eqlineskip \lineskiplimit\eqlineskiplimit + \clubpenalty\@M \widowpenalty\@M \interlinepenalty\eqinterlinepenalty + \linepenalty199 \exhyphenpenalty5000 % was 9999: make breaks at, eg. \* a bit easier. + \ifdim\hfuzz<\p@ \hfuzz\p@ \fi + \parfillskip\z@skip + \tolerance9999 \pretolerance\m@ne +} +\def\eq@dump@box#1#2{% + \noindent #1#2\setbox\f@ur\lastbox \setbox\tw@\lastbox + \if L\eq@layout \box\tw@ \else\unhbox\tw@\fi + \adjust@rel@penalty \unhbox\f@ur +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\eq@typeset@Unnumbered{% + \eq@typeset@frame + \eq@typeset@equation +} +\def\eq@typeset@LM{% + \addtolength\dim@a{(\eq@vspan+\ht\EQ@numbox-\dp\EQ@numbox)/2}% + \eq@typeset@leftnumber + \eq@typeset@frame + \eq@typeset@equation +} +\def\eq@typeset@LT{% + \dim@a\eq@firstht + \eq@typeset@leftnumber + \eq@typeset@frame + \eq@typeset@equation +} +\def\eq@typeset@LShifted{% + % place number + \copy\EQ@numbox \penalty\@M + \dim@a\eqlineskip + \if F\eq@frame\else + \setlength\dim@a{\eq@framesep+\eq@framewd}% + \fi + \kern\dim@a + \eq@typeset@frame + \eq@typeset@equation +} +\def\eq@typeset@RM{% + \setlength\dim@a{(\eq@vspan+\ht\EQ@numbox-\dp\EQ@numbox)/2} + \eq@typeset@rightnumber + \eq@typeset@frame + \eq@typeset@equation +} +\def\eq@typeset@RB{% + % NOTE: is \eq@dp useful here + \setlength\dim@a{\eq@vspan-\ht\EQ@numbox-\dp\EQ@numbox}% + \eq@typeset@rightnumber + \eq@typeset@frame + \eq@typeset@equation +} +\def\eq@typeset@RShifted{% + % place number + \eq@typeset@frame + \eq@typeset@equation + \penalty\@M + \dim@a\eqlineskip + \if F\eq@frame\else + \addtolength\dim@a{\eq@framesep+\eq@framewd}% + \fi + \parskip\dim@a + \hbox to\hsize{\hfil\copy\EQ@numbox}\@@par% +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\debug@showformat{% + \debugmsg{Formatting Layout:\eq@layout\space Center/indent: \eqindent\space Number placement \eqnumside\eqnumplace: + ^^J||===== \eq@linewidth=\the\eq@linewidth, \@totalleftmargin=\the\@totalleftmargin, + ^^J||===== Centered Lines=\theb@@le\eq@centerlines, Shift Number=\theb@@le\eq@shiftnumber, + ^^J||===== \eq@wdT=\the\eq@wdT, \eq@wdMin=\the\eq@wdMin, + ^^J||===== LHS=\theb@@le\EQ@hasLHS: \eq@wdL=\the\eq@wdL, + ^^J||===== \eq@firstht=\the\eq@firstht, \eq@vspan=\the\eq@vspan + ^^J||===== \eq@wdNum=\the\eq@wdNum + ^^J||===== \eq@wdCond=\the\eq@wdCond, \conditionsep=\the\conditionsep, + ^^J||===== \leftskip=\the\leftskip, \rightskip=\the\rightskip, + ^^J||===== \abovedisplayskip=\the\abovedisplayskip, + ^^J||===== \belowdisplayskip=\the\belowdisplayskip + ^^J||===== parshape=\eq@parshape}% +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\eq@C@setsides{% + % \dim@c = space for number, if any, and not shifted. + \dim@c\z@ + \if\eq@hasNumber\if\eq@shiftnumber\else + \dim@c\eq@wdNum + \fi\fi + % \dim@e = space for condition(on right), if any and formula is only a single line.(to center nicely) + % but only count it as being right-aligned if we're not framing, since the frame must enclose it. + \dim@e\z@ + \if F\eq@frame + \ifnum\eq@lines=\@ne\ifdim\eq@wdCond>\z@ + \setlength\dim@e{\eq@wdCond+\conditionsep}% + \fi\fi\fi + % \dim@b = minimum needed on left max(totalleftmargin, left number space) + \dim@b\z@ + \if L\eqnumside\ifdim\dim@b<\dim@c + \dim@b\dim@c + \fi\fi + \ifdim\dim@b<\@totalleftmargin + \dim@b\z@ + \else + \addtolength\dim@b{-\@totalleftmargin}% + \fi + % \dim@d = minimum needed on right max(condition, right number space) + \dim@d\dim@e + \if R\eqnumside\ifdim\dim@d<\dim@c + \dim@d\dim@c + \fi\fi + % \dim@a = left margin; initially half available space + % \dim@c = right margin; ditto + \setlength\dim@a{(\eq@linewidth-\eq@wdT+\dim@e+\@totalleftmargin)/2}% + \dim@c=\dim@a + % If too far to the left + \ifdim\dim@a<\dim@b + \addtolength\dim@c{\dim@a-\dim@b}% + \ifdim\dim@c<\z@\dim@c=\z@\fi + \dim@a=\dim@b + % Or if too far to the right + \else\ifdim\dim@c<\dim@d + \addtolength\dim@a{\dim@c-\dim@d}% + \ifdim\dim@a<\z@\dim@a=\z@\fi + \dim@c=\dim@d + \fi\fi + % Now, \dim@d,\dim@e is the left & right glue to center each line for centerlines + \setlength\dim@e{\eq@wdT-\eq@wdMin}\dim@d=\z@ + \dim@d\z@ + \if\eq@centerlines + \divide\dim@e2\relax\dim@d\dim@e + \fi + \setlength\leftskip{\dim@a\@plus\dim@d}% + \addtolength\dim@e{\dim@c}% + \setlength\rightskip{\z@\@plus\dim@e}%\@minus5\p@ + % Special case: if framing, reduce the stretchiness of the formula (eg. condition) + % Or if we have a right number, FORCE space for it + \dim@b\z@ + \if F\eq@frame\else + \dim@b\dim@c + \fi + \if\eq@hasNumber\if\eq@shiftnumber\else\if R\eqnumside + \dim@c\eq@wdNum + \ifdim\dim@c>\dim@b\dim@b\dim@c\fi + \fi\fi\fi + % If either of those cases requires hard rightskip, move that part from glue. + \ifdim\dim@b>\z@ + \addtolength\dim@e{-\dim@c}% + \rightskip\dim@b\@plus\dim@e%\@minus5\p@ + \fi + % And peculiar further special case: in indented environs, width isn't where it would seem + \ifdim\eq@wdCond>\z@ + \addtolength\rightskip{-\@totalleftmargin}% + \fi + \parfillskip\z@skip +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\eq@I@setsides{% + % Leftskip is normally just the requested indentation + \leftskip\mathindent + % But move left, if shifted number presumably because of clashed w/ number? + \if\eq@shiftnumber + \setlength\dim@a{\eq@linewidth-\eq@wdT-\mathindent}% + \ifdim\dim@a<\z@ + \leftskip=\z@ % Or something minimal? + \fi\fi + % Push gently from right. + \dim@a=\z@ + \setlength\dim@b{\eq@linewidth-\leftskip-\eq@wdMin}% + % Special case: if framing be much more rigid(?) + \if F\eq@frame\else + \setlength\dim@a{\eq@linewidth-\leftskip-\eq@wdT} + \addtolength\dim@b{-\dim@a}% + \fi + % Or force the space for right number, if needed + \if\eq@hasNumber\if\eq@shiftnumber\else\if R\eqnumside + \dim@c=\eq@wdNum + \if\dim@c>\dim@a + \addtolength\dim@b{-\dim@c}% + \dim@a=\dim@c + \fi\fi\fi\fi + \setlength\rightskip{\dim@a\@plus\dim@b \@minus\hfuzz }%\hfuzz\z@ + \parfillskip\z@skip +} +\def\eq@typeset@leftnumber{% + \setlength\skip@c{\dim@a-\ht\EQ@numbox}% + \vglue\skip@c% NON discardable + \copy\EQ@numbox \penalty\@M + \kern-\dim@a +} +\def\eq@typeset@rightnumber{% + \setlength\skip@c{\dim@a-\ht\EQ@numbox}% + \vglue\skip@c% NON discardable + \hbox to \hsize{\hfil\copy\EQ@numbox}\penalty\@M + \kern-\dim@a +} +\def\eq@typeset@equation{% + \nobreak + \eq@params\eq@parshape + \nointerlineskip\noindent + \add@grp@label + \eq@dump@box\unhbox\EQ@box\@@par +} +\newcommand\eqframe[2]{% + \begingroup + \fboxrule=\eq@framewd\relax\fboxsep=\eq@framesep\relax + \framebox{\z@rule\@height#2\kern#1}% + \endgroup +} +\def\eq@addframe{% + \hbox to\z@{% + \setlength\dim@a{\eq@framesep+\eq@framewd}% + \kern-\dim@a + \vbox to\z@{\kern-\dim@a + \hbox{\eqframe{\eq@wdT}{\eq@vspan}}% + \vss + }% + \hss + }% +} +\def\eq@typeset@frame{% + \if F\eq@frame\else + % Tricky: put before \noindent, so it's not affected by glue in \leftskip + \nobreak\nointerlineskip + \vbox to\eq@firstht{\moveright\leftskip\hbox to\z@{\eq@addframe\hss}\vss}% + \kern-\eq@firstht + \fi +} +\@saveprimitive\left\@@left +\@saveprimitive\right\@@right +\newcount\lr@level +\def\eq@left{% + \@ifnext .{\eq@nullleft}{\begingroup \let\delimiter\eq@left@a}% +} +\def\eq@right{% + \@ifnext .{\eq@nullright}{\begingroup \let\delimiter\eq@right@a}% +} +\def\eq@left@a#1 #2{\endgroup\@@left\delimiter#1 \after@open} +\def\eq@right@a#1 #2{\endgroup + \@@right\delimiter#1 \after@close \ss@scan{#1}% +} +\def\eq@nullleft#1{\@@left#1\after@open} +\def\eq@nullright#1{\@@right#1\after@close} + % For paren matching: ) +\def\delim@reset{% + \let\after@open\relax \let\after@close\relax + \let\left\@@left \let\right\@@right +} +\@ifundefined{bBigg@}{% not defined + \let\big@size\p@ + \def\big{\bBigg@{8.5}}\def\Big{\bBigg@{11.5}}% + \def\bigg{\bBigg@{14.5}}\def\Bigg{\bBigg@{17.5}}% + \def\biggg{\bBigg@{20.5}}\def\Biggg{\bBigg@{23.5}}% +}{} +\def\bBigg@#1#2{% + {\delim@reset + \left#2% + \vrule\@height#1\big@size\@width-\nulldelimiterspace + \right. + }% +} +\def\bigl#1{\mathopen\big{#1}\after@open} +\def\Bigl#1{\mathopen\Big{#1}\after@open} +\def\biggl#1{\mathopen\bigg{#1}\after@open} +\def\Biggl#1{\mathopen\Bigg{#1}\after@open} +\def\bigggl#1{\mathopen\biggg{#1}\after@open} +\def\Bigggl#1{\mathopen\Biggg{#1}\after@open} + +\def\bigr#1{\mathclose\big{#1}\after@close} +\def\Bigr#1{\mathclose\Big{#1}\after@close} +\def\biggr#1{\mathclose\bigg{#1}\after@close} +\def\Biggr#1{\mathclose\Bigg{#1}\after@close} +\def\bigggr#1{\mathclose\biggg{#1}\after@close} +\def\Bigggr#1{\mathclose\Biggg{#1}\after@close} + +%% No change needed, I think. [mjd,1998/12/04] +%%\def\bigm{\mathrel\big} +%%\def\Bigm{\mathrel\Big} +%%\def\biggm{\mathrel\bigg} +%%\def\Biggm{\mathrel\Bigg} +%%\def\bigggm{\mathrel\biggg} +%%\def\Bigggm{\mathrel\Biggg} +\let\m@@DeL\m@DeL \let\m@@DeR\m@DeR \let\m@@DeB\m@DeB +\def\d@@DeL#1#2#3{% + \delimiter"4\@xp\delim@a\csname sd@#1#2#3\endcsname #1#2#3 \after@open +} +\def\d@@DeR#1#2#3{% + \delimiter"5\@xp\delim@a\csname sd@#1#2#3\endcsname #1#2#3 \after@close +} +\def\d@@DeB#1#2#3{% + \delimiter"0\@xp\delim@a\csname sd@#1#2#3\endcsname #1#2#3 \after@bidir +} +%%BRM: These weren't defined, but apparently should be. +\let\m@@DeA\m@DeA\let\d@@DeA\m@DeA% +\let\after@bidir\@empty +\mathchardef\zero@bop=888 \relax +\mathchardef\bop@incr=4444 \relax +\def\after@open{% + \global\advance\lr@level\@ne + \prebinoppenalty\bop@incr \multiply\prebinoppenalty\lr@level + \advance\prebinoppenalty\zero@bop + \ifnum\eqbreakdepth<\lr@level + \let\m@Bin\m@@Bin + \else + \eq@binoffset=\eqbinoffset + \advance\eq@binoffset\lr@level\eqdelimoffset plus1fill\relax + \def\dt@fill@cancel{\hskip\z@ minus1fill\relax}% + \fi + \penalty\@M % BRM: discourage break after an open fence? +} +\def\after@close{% + \global\advance\lr@level\m@ne + \prebinoppenalty\bop@incr \multiply\prebinoppenalty\lr@level + \advance\prebinoppenalty\zero@bop + \ifnum\eqbreakdepth<\lr@level + \else \let\m@Bin\d@@Bin + \fi + \ifnum\lr@level<\@ne \eq@binoffset=\eqbinoffset\relax \fi +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\let\subsup@flag=\count@ +\def\ss@delim@a#1#2#3#4{\xdef\right@delim@code{\number"#2#3#4}} +\def\ss@scan#1{% + \begingroup + \let\delim@a\ss@delim@a \@tempcnta#1\relax + \endgroup + \subsup@flag\@M \afterassignment\ss@scan@a \let\@let@token=} +\def\ss@scan@a{% + \ifx\@let@token\sb \advance\subsup@flag\@ne\else + \ifx\@let@token\sp \advance\subsup@flag\tw@\else + \ss@finish + \expandafter\@firstoftwo % gobble \ss@scan@b + \fi\fi + \ss@scan@b\@let@token +} +\def\ss@scan@b#1#2{#1{% + \let\m@Bin\m@@Bin \let\m@Rel\m@@Rel + #2}\afterassignment\ss@scan@a \let\@let@token=}% +\def\ss@finish{% + \@@vadjust{\penalty\thr@@}% + \penalty\right@delim@code \penalty-\subsup@flag \keep@glue +} +\def\eq@lrunpack{\setbox\z@\lastbox + \unskip \nointerlineskip + \noindent\unhbox\z@ \unskip + \subsup@flag-\lastpenalty \unpenalty + \xdef\right@delim@code{\number\lastpenalty}% + \unpenalty + \ifnum\subsup@flag>\@M + \advance\subsup@flag-\@M + \setbox\tw@\lastbox + \else \setbox\tw@\box\voidb@x + \fi + \setbox\z@\lastbox + \ifvoid\tw@ \unhbox\z@ + \else \lrss@reattach % uses \subsup@flag, box\z@, box\tw@ + \fi + \penalty-\@Mi\z@rule\@@par + \setbox\z@\lastbox \unskip\unpenalty +%%{\showboxbreadth\maxdimen\showboxdepth99\showlists}% +} +\dimendef\sub@depth=8 \dimendef\sup@base=6 +\dimendef\prelim@sub@depth=4 \dimendef\prelim@sup@base=2 +\def\sym@xheight{\fontdimen5\textfont\tw@} +\def\sup@base@one{\fontdimen13\textfont\tw@} +\def\sub@base@one{\fontdimen16\textfont\tw@} +\def\sub@base@two{\fontdimen17\textfont\tw@} +\def\sup@drop{\fontdimen18\scriptfont\tw@} +\def\sub@drop{\fontdimen19\scriptfont\tw@} +\providecommand{\mathaxis}{\fontdimen22\textfont\tw@} +\def\lrss@reattach{% + \begingroup + % "The TeXbook" Appendix G step 18: + \setlength\prelim@sup@base{\ht\z@-\sup@drop}% + \setlength\prelim@sub@depth{\dp\z@ +\sub@drop}% + \unhbox\z@ + \ifcase\subsup@flag % case 0: this can't happen + \or \lr@subscript % case 1: subscript only + \or \lr@superscript % case 2: superscript only + \else \lr@subsup % case 3: sub and superscript both + \fi + \endgroup +} +\def\lr@subscript{% + \sub@depth\sub@base@one + \ifdim\prelim@sub@depth>\sub@depth \sub@depth\prelim@sub@depth\fi + \setlength\dim@a{\ht\tw@ -.8\sym@xheight}% + \ifdim\dim@a>\sub@depth \sub@depth=\dim@a \fi + \twang@adjust\sub@depth + \lower\sub@depth\box\tw@ +} +\def\lr@superscript{% + \sup@base\sup@base@one + \ifdim\prelim@sup@base>\sup@base \sup@base\prelim@sup@base\fi + \setlength\dim@a{\dp\tw@ -.25\sym@xheight}% + \ifdim\dim@a>\sup@base \sup@base\dim@a \fi + \twang@adjust\sup@base + \raise\sup@base\box\tw@ +} +\def\lr@subsup{% + \sub@depth\sub@base@two + \ifdim\prelim@sub@depth>\sub@depth \sub@depth\prelim@sub@depth \fi + \twang@adjust\sub@depth + \lower\sub@depth\box\tw@ +} +\def\twang@adjust#1{% + \begingroup + \@ifundefined{twang@\right@delim@code}{}{% + \setlength\dim@d{#1-\mathaxis}% + % put an upper limit on the adjustment + \ifdim\dim@d>1em \dim@d 1em \fi + \kern\csname twang@\right@delim@code\endcsname\dim@d + }% + \endgroup +} +\newcommand{\DeclareTwang}[2]{% + \ifcat.\@nx#1\begingroup + \lccode`\~=`#1\lowercase{\endgroup \DeclareTwang{~}}{#2}% + \else + \@xp\decl@twang#1?\@nil{#2}% + \fi +} +\def\decl@twang#1#2#3#4#5#6#7\@nil#8{% + \@namedef{twang@\number"#4#5#6}{#8}% +} +\DeclareTwang{\rangle}{-.4} +\DeclareTwang{)}{-.33} +\DeclareTwang{\rbrace}{-.25} +\newenvironment{dseries}{\let\eq@hasNumber\@True \@optarg\@dseries{}}{}% +\def\enddseries#1{\check@punct@or@qed}% +\newenvironment{dseries*}{\let\eq@hasNumber\@False \@optarg\@dseries{}}{}% +\@namedef{enddseries*}#1{\check@punct@or@qed}% +\@namedef{end@dseries*}{\end@dseries}% +\def\@dseries[#1]{% + \let\display@setup\dseries@display@setup + % Question: should this be the default for dseries??? + \global\eq@wdCond\z@ + \@dmath[layout={M},#1]% + \mathsurround\z@\@@math \penalty\@Mi + \let\endmath\ends@math + \def\premath{% + \ifdim\lastskip<.3em \unskip + \else\ifnum\lastpenalty<\@M \dquad\fi\fi +}% + \def\postmath{\unpenalty\eq@addpunct \penalty\intermath@penalty \dquad \@ignoretrue}% +\ignorespaces +} +\def\end@dseries{% + \unskip\unpenalty + \@@endmath \mathsurround\z@ \end@dmath +} +\def\eq@try@layout@M{% + \edef\@parshape{\parshape 1 0pt \the\eq@linewidth\relax}% + \eq@trial@b{M}{}% +} +\def\intermath@penalty{-221}% +\newcommand\dquad{\hskip0.6em minus.3em} +\newcommand\premath{}\newcommand\postmath{} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\renewenvironment{math}{% + \leavevmode \premath + \ifmmode\@badmath\else\@@math\fi +}{% + \ifmmode\@@endmath\else\@badmath\fi +} +\def\ends@math#1{\check@punct@or@qed} +\def\end@math{% + \ifmmode\@@endmath\else\@badmath\fi + \postmath +} +\let\eq@group\@False +\let\grp@shiftnumber\@False +\let\grp@hasNumber\@False +\let\grp@eqs@numbered\@False +\let\grp@aligned\@True +\global\let\GRP@top\@True +\newenvironment{dgroup}{% + \let\grp@hasNumber\@True\@optarg\@dgroup{}% +}{% + \end@dgroup +} +\newtoks\GRP@queue +\newenvironment{dgroup*}{% + \let\grp@hasNumber\@False\@optarg\@dgroup{}% +}{% + \end@dgroup +} +\def\@dgroup[#1]{% + \debugmsg{=== DGROUP ==================================================}% + \let\eq@group\@True \global\let\GRP@top\@True + \global\GRP@queue\@emptytoks \global\setbox\GRP@box\box\voidb@x + \global\let\GRP@label\@empty + \global\grp@wdL\z@\global\grp@wdR\z@\global\grp@wdT\z@ + \global\grp@linewidth\z@\global\grp@wdNum\z@ + \global\let\grp@eqs@numbered\@False + \global\let\grp@aligned\@True + \global\let\grp@shiftnumber\@False + \eq@prelim + \setkeys{breqn}{#1}% + \if\grp@hasNumber \grp@setnumber \fi +} +\def\end@dgroup{% + \EQ@displayinfo \grp@finish + \if\grp@hasNumber\grp@resetnumber\fi +} +\@ifundefined{c@parentequation}{\newcounter{parentequation}}{} +\global\let\GRP@label\@empty +\def\add@grp@label{% + \ifx\@empty\GRP@label + \else \GRP@label \global\let\GRP@label\@empty + \fi +} +\def\grp@setnumber{% + \global\let\GRP@label\next@label \global\let\next@label\@empty + % Trick \eq@setnumber to doing our work for us. + \let\eq@hasNumber\@True + \eq@setnumber + \global\sbox\GRP@numbox{\unhbox\EQ@numbox}% + \grp@wdNum\eq@wdNum + \let\eq@hasNumber\@False + \let\eq@number\@empty + \eq@wdNum\z@ + \protected@edef\theparentequation{\theequation}% + \setcounter{parentequation}{\value{equation}}% + \setcounter{equation}{0}% + \def\theequation{\theparentequation\alph{equation}}% + \debugmsg{Group Number \theequation}% +} +\def\grp@resetnumber{% + \setcounter{equation}{\value{parentequation}}% +} +\newbox\GRP@box +\newbox\GRP@wholebox +\def\grp@push{% + \global\GRP@queue\@xp\@xp\@xp{\@xp\the\@xp\GRP@queue + \@xp\@elt\@xp{\EQ@trial}% + }% + \global\setbox\GRP@box\vbox{% + \hbox{\box\EQ@box\box\EQ@copy\penalty\@ne\copy\EQ@numbox}% + \unvbox\GRP@box + }% + \global\let\GRP@top\@False + \EQ@trial + \if\eq@isIntertext\else + \ifdim\eq@wdL>\grp@wdL \global\grp@wdL\eq@wdL \fi + \ifdim\eq@wdT>\grp@wdT \global\grp@wdT\eq@wdT \fi + \setlength\dim@a{\eq@wdT-\eq@wdL}% + \ifdim\dim@a>\grp@wdR \global\grp@wdR\dim@a \fi + \ifdim\eq@linewidth>\grp@linewidth \global\grp@linewidth\eq@linewidth\fi + \if\eq@hasNumber + \global\let\grp@eqs@numbered\@True + \ifdim\eq@wdNum>\grp@wdNum\global\grp@wdNum\eq@wdNum\fi + \fi + \if\EQ@hasLHS\else\global\let\grp@aligned\@False\fi + \if D\eq@layout \global\let\grp@aligned\@False\fi % Layout D (usually) puts rel on 2nd line. + \if\eq@shiftnumber\global\let\grp@shiftnumber\@True\fi % One eq shifted forces all. + \fi +} +\def\grp@finish{% + \setlength\dim@a{\grp@wdL+\grp@wdR-4em}% Allowance for shrink? + \if\grp@aligned\ifdim\dim@a>\grp@linewidth + \global\let\grp@aligned\@False + \fi\fi + \addtolength\dim@a{\grp@wdNum }% Effective length + \if\grp@shiftnumber\else\if\grp@hasNumber\if\grp@eqs@numbered\else\ifdim\dim@a>\grp@linewidth + \global\let\grp@shiftnumber\@True + \fi\fi\fi\fi + \if\grp@aligned + \global\grp@wdT\grp@wdL\global\advance\grp@wdT\grp@wdR + \fi + \debugmsg{======= DGROUP Formatting + ^^J||===== \grp@wdL=\the\grp@wdL, \grp@wdR=\the\grp@wdR + ^^J||===== Shift Number=\theb@@le\grp@shiftnumber, Eqns. numbered=\theb@@le\grp@eqs@numbered + ^^J||===== Aligned=\theb@@le\grp@aligned + ^^J||===== \grp@wdNum=\the\grp@wdNum}% + \setbox\GRP@wholebox\vbox{% + \let\@elt\eqgrp@elt + \the\GRP@queue + }% + \eq@topspace{\vskip\parskip}% + \if\grp@hasNumber\if\grp@eqs@numbered\else + \if\grp@shiftnumber + \copy\GRP@numbox \penalty\@M + \kern\eqlineskip + \else + \setlength\dim@a{% + (\ht\GRP@wholebox+\dp\GRP@wholebox+\ht\GRP@numbox-\dp\GRP@numbox)/2}% + \setlength\skip@c{\dim@a-\ht\GRP@numbox}% + \vglue\skip@c% NON discardable + \copy\GRP@numbox \penalty\@M +\debugmsg{GROUP NUMBER: preskip:\the\skip@c, postkern:\the\dim@a, height:\the\ht\GRP@wholebox, + ^^J||===== box height:\the\ht\GRP@numbox, box depth:\the\dp\GRP@numbox}% + \kern-\dim@a + \kern-\abovedisplayskip % To cancel the topspace above the first eqn. + \fi + \fi\fi + \unvbox\GRP@wholebox + \let\@elt\relax + \eq@botspace % not needed unless bottom number? +} +\def\eqgrp@elt#1{% + \global\setbox\GRP@box\vbox{% + \unvbox\GRP@box + \setbox\z@\lastbox + \setbox\tw@\hbox{\unhbox\z@ + \ifnum\lastpenalty=\@ne + \else + \global\setbox\EQ@numbox\lastbox + \fi + \unpenalty + \global\setbox\EQ@copy\lastbox + \global\setbox\EQ@box\lastbox + }% + }% + \begingroup \let\eq@botspace\relax + #1% + \if\eq@isIntertext + \vskip\belowdisplayskip + \unvbox\EQ@copy + \else + \grp@override + \eq@finish + \fi + \endgroup +} +\def\grp@override{% + \def\eqindent{I}% + \setlength\dim@a{(\grp@linewidth-\grp@wdT)/2}% + \ifdim\dim@a<\z@\dim@a=\z@\fi + \dim@b\if L\eqnumside\grp@wdNum\else\z@\fi + \if\grp@shiftnumber\else + \ifdim\dim@b>\dim@a\dim@a\dim@b\fi + \fi + \if\grp@aligned + \addtolength\dim@a{\grp@wdL-\eq@wdL}% + \fi + \mathindent\dim@a + \ifdim\dim@b>\dim@a + \let\eq@shiftnumber\@True + \fi +} +\newskip\darraycolsep \darraycolsep 20pt plus1fil minus12pt +\newcount\cur@row \newcount\cur@col +\def\@tempa#1#2#3{% + \cur@col#1 \hfil + \setbox\z@\hbox{$\displaystyle####\m@th$}\@nx\col@box + \tabskip\z@skip + &\cur@col#2 \hfil + \setbox\z@\hbox{$\displaystyle\mathord{}####\mathord{}\m@th$}\@nx\col@box + \hfil + &\cur@col#3 \setbox\z@\hbox{$\displaystyle####\m@th$}\@nx\col@box + \hfil\tabskip\darraycolsep +} +\xdef\darray@preamble{% + \@tempa 123&\@tempa 456&\@tempa 789% + &\@tempa{10}{11}{12}&\@tempa{13}{14}{15}&\@tempa{16}{17}{18}% + \cr +} +\@ifundefined{Mathstrut@}{\let\Mathstrut@\strut}{} +\def\darray@cr{\Mathstrut@\cr} +\def\col@box{% + \unhbox\z@ +} +\newenvironment{darray}{\@optarg\@darray{}}{} +\def\@darray[#1]{% + \debugmsg{=== DARRAY ==================================================}% + \if\eq@group\else\eq@prelim\fi + \global\let\@preamble\@empty + \setkeys{breqn}{#1}% + \the\eqstyle \eq@setnumber + \ifx\@preamble\@empty \global\let\@preamble\darray@preamble \fi + \check@mathfonts + % \let\check@mathfonts\relax % tempting, but too risky + \@xp\let\csname\string\ \endcsname\darray@cr + \setbox\z@\vbox\bgroup + \everycr{\noalign{\global\advance\cur@row\@ne}}% + \tabskip\z@skip \cur@col\z@ + \global\cur@row\z@ + \penalty\@ne % flag for \dar@repack + \halign\@xp\bgroup\@preamble +} +\def\enddarray#1{\check@punct@or@qed} +\def\end@darray{% + \ifvmode\else \eq@addpunct \Mathstrut@\fi\crcr \egroup + \dar@capture + \egroup +} +\def\dar@capture{% +%% \showboxbreadth\maxdimen\showboxdepth99\showlists + \eq@wdL\z@ \eq@wdRmax\z@ + \dar@repack +} +\def\dar@repack{% + \unpenalty + \setbox\tw@\lastbox + \global\setbox\EQ@box\hbox{% + \hbox{\unhcopy\tw@\unskip}\penalty-\@M \unhbox\EQ@box}% + \global\setbox\EQ@copy\hbox{% + \hbox{\unhbox\tw@\unskip}\penalty-\@M \unhbox\EQ@copy}% + \unskip + \ifcase\lastpenalty \else\@xp\@gobble\fi + \dar@repack +} +\newskip\conditionsep \conditionsep=10pt minus5pt% +\newcommand{\conditionpunct}{,} +\let\cond@gobble\@firstofone +\newcommand\condition{% + \begingroup\@tempswatrue + \@ifstar{\@tempswafalse \condition@a}\condition@a +} +\newcommand\condition@a[2][\conditionpunct]{% + \unpenalty\unskip\unpenalty\unskip % BRM Added + \hbox{#1}% + \penalty -201\relax\hbox{}% Penalty to allow breaks here. + \hskip\conditionsep + \if@tempswa \@xp\hbox \else \@xp\condition@b\fi + {#2}% + \endgroup + \setbox\z@\if@tempswa\hbox{#2}\else\hbox{\textmath@setup #2}\fi + \global\eq@wdCond\wd\z@ + \let\cond@gobble\@gobble +} +\newcommand\condition@b[1]{% + \cond@gobble{\hskip\conditionsep}% + \textmath@setup #1% +} +\newenvironment{XXXXdsuspend}{% + \global\setbox\EQ@box\vbox\bgroup \@parboxrestore + \parshape 1 \displayindent \displaywidth\relax + \hsize=\columnwidth \noindent\ignorespaces +}{% + \par\egroup + \global\setbox\GRP@box\vbox{% + \vbox{\copy\EQ@box\vtop{\unvbox\EQ@box}}% + \unvbox\GRP@box + }% + \global\GRP@queue\@xp{\the\GRP@queue + \@elt{\gdef\EQ@trial{}}% + }% +} +\newenvironment{dsuspend}{% + \global\setbox\EQ@box\vbox\bgroup \@parboxrestore + \parshape 1 \displayindent \displaywidth\relax + \hsize=\columnwidth \noindent\ignorespaces +}{% + \par\egroup + \global\setbox\GRP@box\vbox{% + \hbox{\copy\EQ@box\vtop{\unvbox\EQ@box}}% + \unvbox\GRP@box + }% + \global\GRP@queue\@xp{\the\GRP@queue + \@elt{\let\eq@isIntertext\@True}% + }% +} +\newcommand\breqn@intertext[1]{\dsuspend#1\enddsuspend} +\renewcommand{\*}{% + \if@display + \setbox\z@\hbox{\mathsurround\z@$\mkern\eq@binoffset$}% + \discretionary{}{% + \kern\the\wd\z@ \textchar\discretionarytimes + }{}% + \thinspace + \else + \discretionary{\thinspace\textchar\discretionarytimes}{}{}% + \fi +} +\newcommand{\discretionarytimes}{\times} +\def\nref#1{\@xp\@nref\csname r@#1\endcsname} +\def\@nref#1#2{\ifx\relax#1??\else \@xp\@firstoftwo#1\fi} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\endinput +%% +%% End of file `breqn.sty'. diff --git a/Master/texmf-dist/tex/latex/mh/empheq.sty b/Master/texmf-dist/tex/latex/mh/empheq.sty index 94d5f2bf8b9..f2d447b513b 100644 --- a/Master/texmf-dist/tex/latex/mh/empheq.sty +++ b/Master/texmf-dist/tex/latex/mh/empheq.sty @@ -4,28 +4,30 @@ %% %% The original source files were: %% -%% empheq.dtx (with options: `empheq') +%% empheq.dtx (with options: `package') %% -%% It 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 2003/12/01 or later. +%% This is a generated file. +%% +%% Copyright (C) 2002-2007 by Morten Hoegholm +%% +%% 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 Morten H\o gholm. +%% This Current Maintainer of this work is Morten Hoegholm. %% -%% This work consists of the files empheq.dtx and empheq.ins and the -%% derived files empheq.sty and ntheorem.fix +%% This work consists of the main source file empheq.dtx +%% and the derived files +%% empheq.sty, empheq.pdf, empheq.ins, empheq.drv. %% -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{empheq} - [2004/10/10 v2.11a - Emphasizing equations (MH) - ] +\ProvidesPackage{empheq}% + [2007/12/03 v2.12 Emphasizing equations (MH)] \RequirePackage{mhsetup}[2004/10/10] \MHInternalSyntaxOn \MH_new_boolean:n {overload_ams} @@ -40,7 +42,8 @@ \MH_new_boolean:n {good_mult} \DeclareOption{oldmultline}{\MH_set_boolean_F:n {good_mult}} \DeclareOption{newmultline}{\MH_set_boolean_T:n {good_mult}} -\DeclareOption{ntheorem}{\AtEndOfPackage{\input{ntheorem.fix}}} +\gdef\g@EQ@ntheorem@support@bool{01} +\DeclareOption{ntheorem}{\gdef\g@EQ@ntheorem@support@bool{00}} \DeclareOption*{ \PassOptionsToPackage{\CurrentOption}{mathtools} } @@ -840,6 +843,12 @@ \g@addto@macro\EQ_typeset_display_hook:{ \MH_let:NwN \hyper@refstepcounter\@gobble } + \g@addto@macro\EQ_typeset_display_hook:{ + \let\NCC@ignorepar\relax + } + \g@addto@macro\EQ_typeset_tags_hook:{ + \let\NCC@ignorepar\relax + } \g@addto@macro\EQ_typeset_tags_hook:{ \MH_let:NwN\TagsPlusEndmarks\relax \MH_let:NwN\RestoreTags\relax @@ -980,6 +989,382 @@ } } } +\if\g@EQ@ntheorem@support@bool +\else + \expandafter\endinput +\fi +\def\default_raisetag:{\nobreak} +\def\raisetag#1{ + \skip@#1\relax + \xdef\raise@tag{\default_raisetag: + \vskip\iftagsleft@\else:-\fi:\the\skip@\relax}} +\MH_let:NwN\raise@tag\default_raisetag: +\def\displ@y@{\@display@init{% + \global\column@\z@ \global\dspbrk@lvl\m@ne + \global\tag@false \global\MH_let:NwN\raise@tag\default_raisetag: +}} +\def\MT_gobblelabel:w #1{\@ifnextchar[{\EQ_gobbleoptional:w}{}} +\def\EQ_gobbleoptional:w [#1]{} +\def\gmeasure@#1{% + \begingroup + \measuring@true + \totwidth@\z@ + \global\MH_let:NwN\tag@lengths\@empty + \savecounters@ + \setbox\@ne\vbox{% + \everycr{\noalign{\global\tag@false + \global\MH_let:NwN\raise@tag\default_raisetag: + \global\column@\z@}}% + \MH_let:NwN\label\MT_gobblelabel:w + \halign{% + \setboxz@h{$\m@th\displaystyle{##}$}% + \if_dim:w \wdz@>\totwidth@ + \global\totwidth@\wdz@ + \fi: + &\setboxz@h{\strut@{##}}% + \savetaglength@ + \crcr + #1% + \math@cr@@@ + }% + }% + \restorecounters@ + \if@fleqn + \global\advance\totwidth@\@mathmargin + \fi: + \iftagsleft@ + \if_dim:w \totwidth@>\displaywidth + \global\MH_let:NwN\gdisplaywidth@\totwidth@ + \else: + \global\MH_let:NwN\gdisplaywidth@\displaywidth + \fi: + \fi: + \endgroup +} +\def\measure@#1{% + \begingroup + \measuring@true + \global\eqnshift@\z@ + \global\alignsep@\z@ + \global\MH_let:NwN\tag@lengths\@empty + \global\MH_let:NwN\field@lengths\@empty + \savecounters@ + \global\setbox0\vbox{% + \MH_let:NwN\math@cr@@@\math@cr@@@align@measure + \everycr{\noalign{\global\tag@false + \global\MH_let:NwN\raise@tag\default_raisetag: + \global\column@\z@}}% + \MH_let:NwN\label\MT_gobblelabel:w + \global\row@\z@ + \tabskip\z@ + \halign{\span\align@preamble\crcr + #1% + \math@cr@@@ + \global\column@\z@ + \add@amps\maxfields@\cr + }% + }% + \restorecounters@ + \ifodd\maxfields@ + \global\advance\maxfields@\@ne + \fi: + \if_num:w \xatlevel@=\tw@ + \if_num:w \maxfields@<\thr@@ + \MH_let:NwN\xatlevel@\z@ + \fi: + \fi: + \setbox\z@\vbox{% + \unvbox\z@ \unpenalty \global\setbox\@ne\lastbox + }% + \global\totwidth@\wd\@ne + \if@fleqn \global\advance\totwidth@\@mathmargin \fi: + \global\MH_let:NwN\maxcolumn@widths\@empty + \begingroup + \MH_let:NwN\or:\relax + \loop + \global\setbox\@ne\hbox{% + \unhbox\@ne \unskip \global\setbox\thr@@\lastbox + }% + \ifhbox\thr@@ + \xdef\maxcolumn@widths{ \or: \the\wd\thr@@ \maxcolumn@widths}% + \repeat + \endgroup + \dimen@\displaywidth + \advance\dimen@-\totwidth@ + \if_case:w \xatlevel@ + \global\alignsep@\z@ + \MH_let:NwN\minalignsep\z@ + \@tempcntb\z@ + \if@fleqn + \@tempcnta\@ne + \global\eqnshift@\@mathmargin + \else: + \@tempcnta\tw@ + \global\eqnshift@\dimen@ + \global\divide\eqnshift@\@tempcnta + \fi: + \or: + \@tempcntb\maxfields@ + \divide\@tempcntb\tw@ + \@tempcnta\@tempcntb + \advance\@tempcntb\m@ne + \if@fleqn + \global\eqnshift@\@mathmargin + \global\alignsep@\dimen@ + \global\divide\alignsep@\@tempcnta + \else: + \global\advance\@tempcnta\@ne + \global\eqnshift@\dimen@ + \global\divide\eqnshift@\@tempcnta + \global\alignsep@\eqnshift@ + \fi: + \or: + \@tempcntb\maxfields@ + \divide\@tempcntb\tw@ + \global\advance\@tempcntb\m@ne + \global\@tempcnta\@tempcntb + \global\eqnshift@\z@ + \global\alignsep@\dimen@ + \if@fleqn + \global\advance\alignsep@\@mathmargin\relax + \fi: + \global\divide\alignsep@\@tempcntb + \fi: + \if_dim:w \alignsep@<\minalignsep\relax + \global\alignsep@\minalignsep\relax + \if_dim:w \eqnshift@>\z@ + \if@fleqn\else: + \global\eqnshift@\displaywidth + \global\advance\eqnshift@-\totwidth@ + \global\advance\eqnshift@-\@tempcntb\alignsep@ + \global\divide\eqnshift@\tw@ + \fi: + \fi: + \fi: + \if_dim:w \eqnshift@<\z@ + \global\eqnshift@\z@ + \fi: + \calc@shift@align + \global\tagshift@\totwidth@ + \global\advance\tagshift@\@tempcntb\alignsep@ + \if@fleqn + \if_num:w \xatlevel@=\tw@ + \global\advance\tagshift@-\@mathmargin\relax + \fi: + \else: + \global\advance\tagshift@\eqnshift@ + \fi: + \iftagsleft@ \else: + \global\advance\tagshift@-\displaywidth + \fi: + \dimen@\minalignsep\relax + \global\advance\totwidth@\@tempcntb\dimen@ + \if_dim:w \totwidth@>\displaywidth + \global\MH_let:NwN\displaywidth@\totwidth@ + \else: + \global\MH_let:NwN\displaywidth@\displaywidth + \fi: + \endgroup +} +\def\EQ_multline_labelhack:n #1{% + \begingroup\measuring@false\label@in@display{#1}\endgroup} +\def\EQ_multline_labelhack_opt:nw #1[#2]{% + \begingroup\measuring@false\label@in@display{#1}[#2]\endgroup} +\def\multline@#1{% + \Let@ + \@display@init{\global\advance\row@\@ne \global\dspbrk@lvl\m@ne}% + \chardef\dspbrk@context\z@ + \restore@math@cr + \MH_let:NwN\tag\tag@in@align + \global\tag@false \global\MH_let:NwN\raise@tag\default_raisetag: + \mmeasure@{#1}% + \MH_let:NwN\tag\gobble@tag + \MH_let:NwN\label\MT_gobblelabel:w + \tabskip \if@fleqn \@mathmargin \else: \z@skip \fi: + \totwidth@\displaywidth + \if@fleqn + \advance\totwidth@-\@mathmargin + \fi: + \halign\bgroup + \hbox to\totwidth@{% + \if@fleqn + \hskip \@centering \relax + \else: + \hfil + \fi: + \strut@ + $\m@th\displaystyle{}##\endmultline@math%$ + \hfil + }% + \crcr + \if@fleqn + \hskip-\@mathmargin + \def\multline@indent{\hskip\@mathmargin}% put it back + \else: + \hfilneg + \def\multline@indent{\hskip\multlinegap}% + \fi: + \iftagsleft@ + \iftag@ + \begingroup + \ifshifttag@ + \rlap{\vbox{% + \normalbaselines + \hbox{% + \strut@ + \make@display@tag + }% + \vbox to\lineht@{}% + \raise@tag + }}% + \multline@indent + \else: + \setbox\z@\hbox{\make@display@tag}% + \dimen@\@mathmargin \advance\dimen@-\wd\z@ + \if_dim:w \dimen@<\multlinetaggap + \dimen@\multlinetaggap + \fi: + \box\z@ \hskip\dimen@\relax + \fi: + \endgroup + \else: + \multline@indent + \fi: + \else: + \multline@indent + \fi: + #1% +} +\def\mmeasure@#1{% + \begingroup + \measuring@true + \def\label##1{% + \@ifnextchar[ + {\EQ_multline_labelhack_opt:nw {##1}} + {\EQ_multline_labelhack:n {##1}} + } + \def\math@cr@@@{\cr}% + \MH_let:NwN\shoveleft\@iden \MH_let:NwN\shoveright\@iden + \savecounters@ + \global\row@\z@ + \setbox\@ne\vbox{% + \global\MH_let:NwN\df@tag\@empty + \halign{% + \setboxz@h{\@lign$\m@th\displaystyle{}##$}% + \iftagsleft@ + \if_num:w \row@=\@ne + \global\totwidth@\wdz@ + \global\lineht@\ht\z@ + \fi: + \else: + \global\totwidth@\wdz@ + \global\lineht@\dp\z@ + \fi: + \crcr + #1% + \crcr + }% + }% + \if_meaning:NN + \df@tag\@empty + \else: + \global\tag@true + \fi: + \if@eqnsw\global\tag@true\fi: + \iftag@ + \setboxz@h{% + \if@eqnsw + \stepcounter{equation}% + \tagform@\theequation + \else: + \df@tag + \fi: + }% + \global\tagwidth@\wdz@ + \dimen@\totwidth@ + \advance\dimen@\tagwidth@ + \advance\dimen@\multlinetaggap + \iftagsleft@\else: + \if@fleqn + \advance\dimen@\@mathmargin + \fi: + \fi: + \if_dim:w \dimen@>\displaywidth + \global\shifttag@true + \else: + \global\shifttag@false + \fi: + \fi: + \restorecounters@ + \endgroup +} +\newlength\mintagvsep +\mintagvsep5pt +\def\EQ_only_endmark:{% + \MH_set_boolean_T:n {show_manual_tags} + \global\tag@true + \iftagsleft@ + \gdef\df@tag{% + \hbox to \displaywidth{% + \hss + \raisebox{-\normallineskip + -\depthof{\EQ_outerbox:{}} + -\heightof{\EQ_outerbox:{}} + -\dp\EQ_mathdisplay_box + -\ht\EQ_mathdisplay_box} + [0pt][0pt]{\PotEndMark{\maketag@@@}}}} + \else: + \gdef\df@tag{% + \raisebox{-\dp\EQ_mathdisplay_box + -\depthof{\EQ_outerbox:{}}} + {\PotEndMark{\maketag@@@}}}% + \fi:} +\def\EQ_tag_plus_endmark:{% + \iftagsleft@ + \gdef\maketag@@@##1{% + \hfuzz\displaywidth + \makebox[\widthof{##1}][l]{% + \hbox to \displaywidth{\m@th\normalfont##1\hss + \raisebox{-\dp\EQ_mathdisplay_box + -\depthof{\EQ_outerbox:{}}} + {\PotEndMark{\hss}}}}}% + \else: + \gdef\maketag@@@##1{% + \hbox{\m@th\normalfont##1\llap{\hss\PotEndMark{% + \settoheight{\@tempdima}{\@nameuse{\InTheoType Symbol}}% + \MH_addtolength:dn \@tempdima + {\g_EQ_bottomtag_depth_dim+\mintagvsep} + \setlength{\@tempdimb} + {\g_EQ_bottomrow_depth_dim+\depthof{\EQ_outerbox:{}} + +\depthof{\EQ_innerbox:{}}} + \if_dim:w \@tempdima>\@tempdimb + \MH_setlength:dn \@tempdima{-\dp\EQ_mathdisplay_box + -\@tempdima+\g_EQ_bottomrow_depth_dim} + \addtolength{\@tempdima}{\depthof{\EQ_innerbox:{}}}% + \def\EQ_next:{\raisebox{\@tempdima}}% + \else: + \def\EQ_next:{ + \raisebox{-\dp\EQ_mathdisplay_box + -\depthof{\EQ_outerbox:{}}}}% + \fi:\EQ_next:}}}}% + \fi:} +\MH_let:NwN \MT_nonumber: \nonumber +\def\g_EQ_latest_nonzerodepth_row_fint{\z@} +\renewcommand*\nonumber{ + \@tempcnta=\row@ + \if_num:w \l_EQ_equationtype_int=\thr@@ + \advance\@tempcnta\m@ne + \else: + \if_num:w \l_EQ_equationtype_int=4\relax + \advance\@tempcnta\m@ne + \fi: + \fi: + \if_num:w \g_EQ_latest_nonzerodepth_row_fint=\@tempcnta + \else: + \global\g_EQ_bottomtag_depth_dim=-\baselineskip + \fi: + \MT_nonumber: +} \endinput %% %% End of file `empheq.sty'. diff --git a/Master/texmf-dist/tex/latex/mh/empheq07.sty b/Master/texmf-dist/tex/latex/mh/empheq07.sty index 2ca5134e715..581acf10a6c 100644 --- a/Master/texmf-dist/tex/latex/mh/empheq07.sty +++ b/Master/texmf-dist/tex/latex/mh/empheq07.sty @@ -6,24 +6,28 @@ %% %% empheq07.dtx (with options: `package') %% -%% It 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 2003/12/01 or later. +%% This is a generated file. +%% +%% Copyright (C) 2002-2007 by Morten Hoegholm +%% +%% 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 Morten H\o gholm. +%% This Current Maintainer of this work is Morten Hoegholm. %% -%% This work consists of the files empheq07.dtx and empheq07.ins and -%% the derived file empheq07.sty. +%% This work consists of the main source file empheq07.dtx +%% and the derived files +%% empheq07.sty, empheq07.pdf, empheq07.ins, empheq07.drv. %% -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{empheq07} - [2004/07/27 v0.7d Emphasizing equations (MH)] +\ProvidesPackage{empheq07}% + [2007/12/03 v0.7e Emphasizing equations (MH)] \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{amsmath}} \ProcessOptions\relax \RequirePackage{amsmath}[2000/07/18] diff --git a/Master/texmf-dist/tex/latex/mh/flexisym.sty b/Master/texmf-dist/tex/latex/mh/flexisym.sty new file mode 100644 index 00000000000..6d41ac66367 --- /dev/null +++ b/Master/texmf-dist/tex/latex/mh/flexisym.sty @@ -0,0 +1,293 @@ +%% +%% This is file `flexisym.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% flexisym.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% Copyright (C) 1997-2003 by Michael J. Downes +%% Copyright (C) 2007 by Morten Hoegholm +%% +%% 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 flexisym.dtx +%% and the derived files +%% flexisym.sty, flexisym.pdf, flexisym.ins, flexisym.drv, +%% cmbase.sym, mathpazo.sym, mathptmx.sym, msabm.sym. +%% +\ProvidesPackage{flexisym}[2007/12/10 v0.95] +\let\@xp\expandafter \let\@nx\noexpand +\edef\do{% + \@nx\AtEndOfPackage{% + \catcode\number`\"=\number\catcode`\" + \relax + }% +} +\do \let\do\relax +\catcode`\"=12 +\let\@sym\@gobble +\DeclareOption{robust}{% + \def\@sym#1{% + \ifx\protect\@typeset@protect \else\protect#1\@xp\@gobblefour\fi + }% +} +\def\mg@bin{2}% binary operators +\def\mg@rel{2}% relations +%%\def\mg@nre{B}% negated relations +\def\mg@del{3}% delimiters +%%\def\mg@arr{B}% arrows +\def\mg@acc{0}% accents +\def\mg@cop{3}% cumulative operators (sum, int) +\def\mg@latin{1}% (Latin) letters +\def\mg@greek{1}% (lowercase) Greek +\def\mg@Greek{0}% (capital) Greek +%%\def\mg@bflatin{4}% bold upright Latin letters ? +%%\def\mg@Bbb{B}% blackboard bold +\def\mg@cal{2}% script/calligraphic +%%\def\mg@frak{5}% Fraktur letters +\def\mg@digit{0}% decimal digits % 1 = oldstyle, 0 = capital +\expandafter\let\csname MathChar \endcsname\mathchar +\expandafter\let\csname Delimiter \endcsname\delimiter +\expandafter\let\csname Radical \endcsname\radical +\newcommand{\MathChar}{} +\edef\MathChar{\csname MathChar \endcsname\noexpand\string} +\newcommand{\Delimiter}{} +\edef\Delimiter{\csname Delimiter \endcsname\noexpand\string} +\newcommand{\Radical}{} +\edef\Radical{\csname Radical \endcsname\noexpand\string} +\let\sumlimits\displaylimits +\let\intlimits\nolimits +\let\namelimits\displaylimits +\edef\m@Ord#1#2#3{\csname MathChar \endcsname"0#1#2#3 } +\edef\m@Var#1#2#3{\csname MathChar \endcsname"7#1#2#3 } +\edef\m@Bin#1#2#3{\csname MathChar \endcsname"2#1#2#3 } +\edef\m@Rel#1#2#3{\csname MathChar \endcsname"3#1#2#3 } +\edef\m@Pun#1#2#3{\csname MathChar \endcsname"6#1#2#3 } +\edef\m@COs#1#2#3{\csname MathChar \endcsname"1#1#2#3 \sumlimits} +\edef\m@COi#1#2#3{\csname MathChar \endcsname"1#1#2#3 \intlimits} +\def\delim@a#1#2#3#4{\ifx\relax#1#2#3#4\else#1\fi #2#3#4} +\def\delim@b#1#2#3#4{\ifx\relax#1#2#3#4\else#1\fi } +\def\@tempa{% + \@nx\@xp\@nx\delim@a\@nx\csname sd@##1##2##3\@nx\endcsname ##1##2##3 } +\edef\m@DeL#1#2#3{\csname Delimiter \endcsname"4\@tempa} +\edef\m@DeR#1#2#3{\csname Delimiter \endcsname"5\@tempa} +\edef\m@DeB#1#2#3{\csname Delimiter \endcsname"0\@tempa} +\edef\m@DeA#1#2#3{\csname Delimiter \endcsname"3\@tempa} +\edef\m@Rad#1#2#3{\csname Radical \endcsname"\@tempa} +\def\do#1#2{\@xp\def\csname sd@#1\endcsname{#2}} +\do{300}{028} +\do{301}{029} +\do{302}{05B} +\do{303}{05D} +\do{304}{262} +\do{305}{263} +\do{306}{264} +\do{307}{265} +\do{308}{266} +\do{309}{267} +\do{30A}{268} +\do{30B}{269} +\do{30C}{26A} +\do{30D}{26B} +\do{30E}{13D} +\do{30F}{26E} +\do{340}{37A} +\do{341}{37B} +\do{33A}{33A} +\do{33B}{33B} +\do{33E}{33E} +\do{33C}{26A} +\do{33D}{26B} +\do{378}{222} +\do{379}{223} +\do{33F}{26C} +\do{37E}{22A} +\do{37F}{22B} +\do{377}{26D} +\do{30F}{26E} +\def\m@Acc#1#2#3#4{\mathaccent"#1#2#3{#4}} +\def\@symAcc{\@sym} +\let\@symtype\@firstofone +\def\@symOrd#1#2{\@symtype\mathord{\OrdSymbol{#2}}} +\def\@symVar{\@symOrd} +\def\@symBin#1#2{\@symtype\mathbin{\OrdSymbol{#2}}} +\def\@symRel#1#2{\@symtype\mathrel{\OrdSymbol{#2}}} +\def\@symPun#1#2{\@symtype\mathpunct{\OrdSymbol{#2}}} +\def\@symCOi#1#2{\@symtype{\mathop{\OrdSymbol{#2}}\intlimits}} +\def\@symCOs#1#2{\@symtype{\mathop{\OrdSymbol{#2}}\sumlimits}} +\def\@symOpe#1#2{\@symtype\mathopen{\OrdSymbol{#2}}} +\def\@symClo#1#2{\@symtype\mathclose{\OrdSymbol{#2}}} +\def\@symDeL#1#2{\@symtype\mathopen{\OrdSymbol{#2}}} +\def\@symDeR#1#2{\@symtype\mathclose{\OrdSymbol{#2}}} +\def\@symDeB#1#2{\@symtype\mathord{\OrdSymbol{#2}}} +\def\@symInn#1#2{\@symtype\mathinner{\OrdSymbol{#2}}} +\def\@xnce#1{\@xp\@nx\csname#1\endcsname} +\let\sym@global\global +\def\DeclareFlexSymbol#1#2#3#4{% + \begingroup + \edef\@tempb{\@nx\@sym\@nx#1\@xnce{m@#2}\@xnce{mg@#3}#4}% + \ifcat\@nx#1\relax + \sym@global\let#1\@tempb + \else + \sym@global\mathcode`#1="8000\relax + \lccode`\~=`#1\relax + \lowercase{\sym@global\let~\@tempb}% + \fi + \endgroup +} +\def\DeclareFlexCompoundSymbol#1#2#3{% + \@xp\DeclareRobustCommand\@xp#1\@xp{\csname @sym#2\endcsname#1{#3}}% + \sym@global\let#1#1\relax +} +\DeclareRobustCommand\textchar{\text@char\textfont} +\DeclareRobustCommand\scriptchar{\text@char\scriptfont}% +\def\text@char@a{\?\endgroup}% +\def\text@char@sym#1#2#3{% + \begingroup + \let\@sym\relax % defense against infinite loops + \the\text@script@char#3% + \afterassignment\text@char@a + \chardef\?="% +} +\def\text@char#1#2{\begingroup\check@mathfonts + \let\text@script@char#1\let\@sym\text@char@sym + \let\@symtype\@secondoftwo \let\OrdSymbol\@firstofone + \let\ifmmode\iftrue \everymath{$\@gobble}%$ + \def\mkern{\muskip\z@}\let\mskip\mkern + \ifcat\relax\noexpand#2#2% + \else + \lccode`\~=\expandafter`\string#2\relax + \lowercase{~}% + \fi + \endgroup +} +\providecommand\textprime{} +\DeclareRobustCommand\textprime{\leavevmode + \raise.8ex\hbox{\text@char\scriptfont\prime}% +} +\@ifundefined{resetMathstrut@}{}{% + \def\resetMathstrut@{% + \setbox\z@\hbox{\textchar\vert}% + \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@ + }% +} +\@ifundefined{rightarrowfill@}{}{% + \def\rightarrowfill@#1{\m@th\setboxz@h{$#1\relbar$}\ht\z@\z@ + $#1\copy\z@\mkern-6mu\cleaders + \hbox{$#1\mkern-2mu\box\z@\mkern-2mu$}\hfill + \mkern-6mu\OrdSymbol{\rightarrow}$} + \def\leftarrowfill@#1{\m@th\setboxz@h{$#1\relbar$}\ht\z@\z@ + $#1\OrdSymbol{\leftarrow}\mkern-6mu\cleaders + \hbox{$#1\mkern-2mu\copy\z@\mkern-2mu$}\hfill + \mkern-6mu\box\z@$} + \def\leftrightarrowfill@#1{\m@th\setboxz@h{$#1\relbar$}\ht\z@\z@ + $#1\OrdSymbol{\leftarrow}\mkern-6mu\cleaders + \hbox{$#1\mkern-2mu\box\z@\mkern-2mu$}\hfill + \mkern-6mu\OrdSymbol{\rightarrow}$} +} +\def\binrel@sym#1#2#3#4#5{% + \xdef\binrel@@##1{% + \ifx\m@Ord#2\@nx\@symOrd + \else\ifx\m@Var#2\@nx\@symVar + \else\ifx\m@COs#2\@nx\@symCOs + \else\ifx\m@COi#2\@nx\@symCOi + \else\ifx\m@Bin#2\@nx\@symBin + \else\ifx\m@Rel#2\@nx\@symRel + \else\ifx\m@Pun#2\@nx\@symPun + \else\@nx\@symErr \fi\fi\fi\fi\fi\fi\fi + ?{\@nx\OrdSymbol{##1}}}% +} +\def\binrel@a{% + \def\@symOrd##1##2{\gdef\binrel@@####1{\@symOrd##1{\OrdSymbol{####1}}}}% + \def\@symVar##1##2{\gdef\binrel@@####1{\@symVar##1{\OrdSymbol{####1}}}}% + \def\@symCOs##1##2{\gdef\binrel@@####1{\@symCOs##1{\OrdSymbol{####1}}}}% + \def\@symCOi##1##2{\gdef\binrel@@####1{\@symCOi##1{\OrdSymbol{####1}}}}% + \def\@symBin##1##2{\gdef\binrel@@####1{\@symBin##1{\OrdSymbol{####1}}}}% + \def\@symRel##1##2{\gdef\binrel@@####1{\@symRel##1{\OrdSymbol{####1}}}}% + \def\@symPun##1##2{\gdef\binrel@@####1{\@symPun##1{\OrdSymbol{####1}}}}% +} +\def\binrel@#1{% + \setbox\z@\hbox{$% + \let\mathchoice\@gobblethree + \let\@sym\binrel@sym \binrel@a + #1$}% +} +\def\@symextension{sym} +\newcommand\usesymbols[1]{% + \@for\@tempb:=#1\do{% + \@xp\@onefilewithoptions\@xp{\@tempb}[][]\@symextension + }% +} +\newcommand\ProvidesSymbols[1]{\ProvidesFile{#1.sym}} +\DeclareRobustCommand{\not}[1]{\@symRel\not{\OrdSymbol{\notRel#1}}} +\DeclareRobustCommand{\OrdSymbol}[1]{% + \begingroup\mathchars@reset#1\endgroup +} +\def\mathchars@reset{\let\@sym\@sym@ord \let\@symtype\@symtype@ord + \let\OrdSymbol\relax} +\def\@symtype@ord#1#{}% a strange sort of \@gobble +\def\@sym@ord#1#2{\@xp\@sym@ord@a\string#2\@nil}% +\begingroup +\lccode`\.=`\@ \lowercase{\endgroup +\def\@sym@ord@a#1.}#2#3\@nil#4#5#6{% + \csname MathChar \endcsname"0% + \if D#2\@xp\delim@b\csname sd@#4#5#6\endcsname#4#5#6 + \else #4#5#6 + \fi +} +\@ifpackageloaded{amsmath}{% + \begingroup + \long\def\next#1\mathchardef\std@minus\mathcode`\-\relax + \mathchardef\std@equal\mathcode`\=\relax#2\flexi@stop{% + \toks@{#1#2}% + \xdef\@begindocumenthook{\the\toks@}% + }% + \expandafter\next\@begindocumenthook\flexi@stop + \endgroup +}{} +\AtBeginDocument{% +\def\newmcodes@{% + \mathcode `\'39\mathcode `\*42\mathcode `\."613A + \ifnum\mathcode`\-=45 + \else + \ifnum\mathcode`\-=32768 + \else + \mathchardef \std@minus \mathcode `\-\relax + \fi + \fi + \mathcode `\-45 \mathcode `\/47\mathcode `\:"603A\relax +} +} +\DeclareOption{cmbase}{\usesymbols{cmbase}} +\DeclareOption{mathpazo}{\usesymbols{mathpazo}} +\DeclareOption{mathptmx}{\usesymbols{mathptmx}} +\ProcessOptions\relax +\renewcommand{\lnot}{\neg} +\renewcommand{\land}{\wedge} +\renewcommand{\lor}{\vee} +\renewcommand{\le}{\leq} +\renewcommand{\ge}{\geq} +\renewcommand{\ne}{\neq} +\renewcommand{\owns}{\ni} +\renewcommand{\gets}{\leftarrow} +\renewcommand{\to}{\rightarrow} +\renewcommand{\|}{\Vert} +\@ifpackagewith{flexisym}{mathstyleoff}{}{% + \RequirePackage[activechars]{mathstyle}\relax +} +\endinput +%% +%% End of file `flexisym.sty'. diff --git a/Master/texmf-dist/tex/latex/mh/mathstyle.sty b/Master/texmf-dist/tex/latex/mh/mathstyle.sty new file mode 100644 index 00000000000..f95e9ad2a22 --- /dev/null +++ b/Master/texmf-dist/tex/latex/mh/mathstyle.sty @@ -0,0 +1,161 @@ +%% +%% This is file `mathstyle.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% mathstyle.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% Copyright (C) 1997-2003 by Michael J. Downes +%% Copyright (C) 2007 by Morten Hoegholm +%% +%% 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 mathstyle.dtx +%% and the derived files +%% mathstyle.sty, mathstyle.pdf, mathstyle.ins, mathstyle.drv. +%% +\ProvidesPackage{mathstyle}[2007/12/10 v0.83] +\providecommand\@saveprimitive[2]{% + \begingroup + \edef\@tempa{\string#1}\edef\@tempb{\meaning#1}% + \ifx\@tempa\@tempb \global\let#2#1% + \else + \edef\@tempb{\meaning#2}% + \ifx\@tempa\@tempb + \else \@saveprimitive@a#1#2% + \fi + \fi + \endgroup +} +\providecommand\@saveprimitive@a[2]{% + \begingroup + \def\@tempb##1#1##2{\edef\@tempb{##2}\@car{}}% + \@tempb\nullfont{select font nullfont}% + \topmark{\string\topmark:}% + \firstmark{\string\firstmark:}% + \botmark{\string\botmark:}% + \splitfirstmark{\string\splitfirstmark:}% + \splitbotmark{\string\splitbotmark:}% + #1{\string#1}% + \edef\@tempa{\expandafter\strip@prefix\meaning\@tempb}% + \edef\@tempb{\meaning#1}% + \ifx\@tempa\@tempb \global\let#2#1% + \else + \PackageError{mathstyle}% + {Unable to properly define \string#2; primitive + \noexpand#1no longer primitive}\@eha + \fi + \fi + \endgroup +} +\chardef\mathstyle=\z@ +\@saveprimitive\displaystyle\@@displaystyle +\@saveprimitive\textstyle\@@textstyle +\@saveprimitive\scriptstyle\@@scriptstyle +\@saveprimitive\scriptscriptstyle\@@scriptscriptstyle +\@saveprimitive\mathchoice\@@mathchoice +\@saveprimitive\over\@@over +\@saveprimitive\atop\@@atop +\@saveprimitive\above\@@above +\@saveprimitive\overwithdelims\@@overwithdelims +\@saveprimitive\atopwithdelims\@@atopwithdelims +\@saveprimitive\abovewithdelims\@@abovewithdelims +\DeclareRobustCommand{\displaystyle}{% + \@@displaystyle \chardef\mathstyle\z@} +\DeclareRobustCommand{\textstyle}{% + \@@textstyle \chardef\mathstyle\@ne} +\DeclareRobustCommand{\scriptstyle}{% + \@@scriptstyle \chardef\mathstyle\tw@} +\DeclareRobustCommand{\scriptscriptstyle}{% + \@@scriptscriptstyle \chardef\mathstyle\thr@@} +\begingroup \catcode`\^=7\relax \catcode`\_=8\relax % just in case +\lowercase{\endgroup +\let\@@superscript=^ \let\@@subscript=_ +}% +\def\subsupstyle{% + \ifnum\mathstyle<\tw@ \chardef\mathstyle\tw@ + \else \chardef\mathstyle\thr@@ + \fi +} +\let\mathsup=\@@superscript +\let\mathsub=\@@subscript +\def\sb#1{\mathsub{\protect\subsupstyle#1}}% +\def\sp#1{\mathsup{\protect\subsupstyle#1}}% +\def\mathchoice{% + \relax\ifcase\mathstyle + \expandafter\@firstoffour + \or + \expandafter\@secondoffour + \or + \expandafter\@thirdoffour + \else + \expandafter\@fourthoffour + \fi +} +\providecommand\@firstoffour[4]{#1} +\providecommand\@secondoffour[4]{#2} +\providecommand\@thirdoffour[4]{#3} +\providecommand\@fourthoffour[4]{#4} +\DeclareRobustCommand\genfrac[6]{% + {\fracstyle #1% + {\begingroup #5\endgroup + \csname @@\ifx\maxdimen#4\maxdimen over\else above\fi + \if @#2@\else withdelims\fi\endcsname #2#3#4\relax + #6}% + }% +} +\renewcommand{\frac}{\genfrac{}{}{}{}} +\providecommand{\dfrac}{} +\providecommand{\tfrac}{} +\renewcommand{\dfrac}{\genfrac\displaystyle{}{}{}} +\renewcommand{\tfrac}{\genfrac\textstyle{}{}{}} +\providecommand{\binom}{} +\providecommand{\tbinom}{} +\providecommand{\dbinom}{} +\renewcommand{\binom}{\genfrac{}(){0pt}} +\renewcommand{\dbinom}{\genfrac\displaystyle(){0pt}} +\renewcommand{\tbinom}{\genfrac\textstyle(){0pt}} +\def\fracstyle{\ifcase\mathstyle + \chardef\mathstyle=\@ne + \or + \chardef\mathstyle=\tw@ + \else + \chardef\mathstyle=\thr@@ + \fi +} +\def\currentmathstyle{% + \ifcase\mathstyle + \@@displaystyle + \or + \@@textstyle + \or + \@@scriptstyle + \or + \@@scriptscripstyle + \fi} +\DeclareOption{activechars}{\catcode`\^=13\relax \catcode`\_=13\relax } +\ProcessOptions\relax +\ifnum\catcode`\^=13\relax + \let^=\sp \let_=\sb +\else + \mathcode`\^="8000\relax \mathcode`\_="8000\relax + \begingroup \catcode`\^=\active \catcode`\_=\active + \global\let^=\sp \global\let_=\sb + \endgroup +\fi +\endinput +%% +%% End of file `mathstyle.sty'. diff --git a/Master/texmf-dist/tex/latex/mh/mathtools.sty b/Master/texmf-dist/tex/latex/mh/mathtools.sty index e91b6692726..aa4391daa6c 100644 --- a/Master/texmf-dist/tex/latex/mh/mathtools.sty +++ b/Master/texmf-dist/tex/latex/mh/mathtools.sty @@ -6,26 +6,30 @@ %% %% mathtools.dtx (with options: `package') %% -%% It 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 2003/12/01 or later. +%% This is a generated file. +%% +%% Copyright (C) 2002-2007 by Morten Hoegholm +%% +%% 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 Morten H\o gholm. +%% This Current Maintainer of this work is Morten Hoegholm. %% -%% This work consists of the files mathtools.dtx and mathtools.ins -%% and the derived file mathtools.sty. +%% This work consists of the main source file mathtools.dtx +%% and the derived files +%% mathtools.sty, mathtools.pdf, mathtools.ins, mathtools.drv. %% -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mathtools} - [2004/10/10 v1.01a mathematical typesetting tools (MH)] +\ProvidesPackage{mathtools}% + [2007/12/03 v1.03 mathematical typesetting tools (MH)] \RequirePackage{keyval,calc} -\RequirePackage{mhsetup}[2004/10/10] +\RequirePackage{mhsetup}[2007/12/03] \MHInternalSyntaxOn \def\MT_options_name:{mathtools} \newcommand*\mathtoolsset[1]{\setkeys{\MT_options_name:}{#1}} @@ -117,11 +121,11 @@ \def\MT_extended_tagform:n #1{ \MH_set_boolean_F:n {raw_maketag} \if_meaning:NN \df@label\@empty - \MH_if_boolean:nT {manual_tag} - { \MH_if_boolean:nTF {show_manual_tags} - { \MT_prev_tagform:n {#1} } - { \stepcounter{equation} } - } + \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} @@ -255,9 +259,9 @@ \kern-\wd0 \lower.22ex\box0}} \providecommand*\xrightleftharpoons[2][]{\mathrel{% \raise.22ex\hbox{% - $\ext@arrow 3095\MT_rightharpoonup_fill:{\phantom{#1}}{#2}$}% + $\ext@arrow 0359\MT_rightharpoonup_fill:{\phantom{#1}}{#2}$}% \setbox0=\hbox{% - $\ext@arrow 0359\MT_leftharpoondown_fill:{#1}{\phantom{#2}}$}% + $\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}} @@ -376,6 +380,7 @@ \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 @@ -511,7 +516,7 @@ \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}} @@ -525,7 +530,7 @@ \MT_multlined_second_arg:w } { - \hfilneg \endaligned + \hfilneg \endaligned \MH_group_align_safe_end: } \MHPrecedingSpacesOn \define@key{\MT_options_name:} @@ -545,14 +550,15 @@ \def\MT_gobblelabel:w #1{} \newcommand*\DeclarePairedDelimiter[3]{% \@ifdefinable{#1}{ - \edef\MT_next: {\MH_cs_to_str:N #1} - \@namedef{MT_delim_\MT_next: _star:}##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_\MT_next: _nostar:\endcsname[2][\\@gobble] - { \edef\MT_next: {\MH_cs_to_str:N ##1} - \@nameuse {\MT_next: l} #2 ##2 \@nameuse {\MT_next: r} #3} + \@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}} \newcommand{#1}{ \@ifstar {\@nameuse{MT_delim_\MH_cs_to_str:N #1 _star:}} @@ -560,31 +566,38 @@ } } } -\def\MT_start_cases:nn #1#2{ - \RIfM@\else - \nonmatherr@{\begin{\@currenvir}}% - \fi - \left\lbrace - \vcenter \bgroup - \Let@ \chardef\dspbrk@context\@ne \restore@math@cr - \spread@equation - \ialign\bgroup - \strut@$\m@th\displaystyle{##}$\hfil\strut@ - #2 - \crcr -} -\newcommand*\newcases[3]{ - \newenvironment{#1} - {\MT_start_cases:nn {#2}{#3}} - {\endaligned\right.} -} -\newcommand*\renewcases[3]{ - \renewenvironment{#1} - {\MT_start_cases:nn {#2}{#3}} - {\endaligned\right.} -} -\newcases{dcases}{\quad}{$\m@th\displaystyle{##}$\hfil} -\newcases{dcases*}{\quad}{{##}\hfil} +\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 diff --git a/Master/texmf-dist/tex/latex/mh/mhsetup.sty b/Master/texmf-dist/tex/latex/mh/mhsetup.sty index de71af7767c..e85b4b86b3a 100644 --- a/Master/texmf-dist/tex/latex/mh/mhsetup.sty +++ b/Master/texmf-dist/tex/latex/mh/mhsetup.sty @@ -6,24 +6,28 @@ %% %% mhsetup.dtx (with options: `package') %% -%% It 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 2003/12/01 or later. +%% This is a generated file. +%% +%% Copyright (C) 2002-2007 by Morten Hoegholm +%% +%% 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 Morten H\o gholm. +%% This Current Maintainer of this work is Morten Hoegholm. %% -%% This work consists of the files mhsetup.dtx and mhsetup.ins and -%% the derived file mhsetup.sty. +%% This work consists of the main source file mhsetup.dtx +%% and the derived files +%% mhsetup.sty, mhsetup.pdf, mhsetup.ins, mhsetup.drv. %% -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mhsetup} - [2004/10/10 v1.0b programming setup (MH)] +\ProvidesPackage{mhsetup}% + [2007/12/03 v1.2 programming setup (MH)] \def\MHInternalSyntaxOn{ \edef\MHInternalSyntaxOff{% \catcode`\noexpand\~=\the\catcode`\~\relax @@ -161,6 +165,8 @@ \providecommand*\MHPrecedingSpacesOn{ \MH_let:NwN \@xargdef \MH_kernel_xargdef:nwwn } +\def \MH_group_align_safe_begin: {\iffalse{\fi\ifnum0=`}\fi} +\def \MH_group_align_safe_end: {\ifnum0=`{}\fi} \endinput %% %% End of file `mhsetup.sty'. diff --git a/Master/texmf-dist/tex/latex/mh/ntheorem.fix b/Master/texmf-dist/tex/latex/mh/ntheorem.fix deleted file mode 100644 index fb310ef9c57..00000000000 --- a/Master/texmf-dist/tex/latex/mh/ntheorem.fix +++ /dev/null @@ -1,402 +0,0 @@ -%% -%% This is file `ntheorem.fix', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% empheq.dtx (with options: `ntheorem') -%% -%% It 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 2003/12/01 or later. -%% -%% This work has the LPPL maintenance status "maintained". -%% -%% The Current Maintainer of this work is Morten H\o gholm. -%% -%% This work consists of the files empheq.dtx and empheq.ins and the -%% derived files empheq.sty and ntheorem.fix -%% -\ProvidesFile{ntheorem.fix} - [2004/10/10 v2.11a - empheq support and fixes for ntheorem (MH) - ] -\def\default_raisetag:{\nobreak} -\def\raisetag#1{ - \skip@#1\relax - \xdef\raise@tag{\default_raisetag: - \vskip\iftagsleft@\else:-\fi:\the\skip@\relax}} -\MH_let:NwN\raise@tag\default_raisetag: -\def\displ@y@{\@display@init{% - \global\column@\z@ \global\dspbrk@lvl\m@ne - \global\tag@false \global\MH_let:NwN\raise@tag\default_raisetag: -}} -\def\MT_gobblelabel:w #1{\@ifnextchar[{\EQ_gobbleoptional:w}{}} -\def\EQ_gobbleoptional:w [#1]{} -\def\gmeasure@#1{% - \begingroup - \measuring@true - \totwidth@\z@ - \global\MH_let:NwN\tag@lengths\@empty - \savecounters@ - \setbox\@ne\vbox{% - \everycr{\noalign{\global\tag@false - \global\MH_let:NwN\raise@tag\default_raisetag: - \global\column@\z@}}% - \MH_let:NwN\label\MT_gobblelabel:w - \halign{% - \setboxz@h{$\m@th\displaystyle{##}$}% - \if_dim:w \wdz@>\totwidth@ - \global\totwidth@\wdz@ - \fi: - &\setboxz@h{\strut@{##}}% - \savetaglength@ - \crcr - #1% - \math@cr@@@ - }% - }% - \restorecounters@ - \if@fleqn - \global\advance\totwidth@\@mathmargin - \fi: - \iftagsleft@ - \if_dim:w \totwidth@>\displaywidth - \global\MH_let:NwN\gdisplaywidth@\totwidth@ - \else: - \global\MH_let:NwN\gdisplaywidth@\displaywidth - \fi: - \fi: - \endgroup -} -\def\measure@#1{% - \begingroup - \measuring@true - \global\eqnshift@\z@ - \global\alignsep@\z@ - \global\MH_let:NwN\tag@lengths\@empty - \global\MH_let:NwN\field@lengths\@empty - \savecounters@ - \global\setbox0\vbox{% - \MH_let:NwN\math@cr@@@\math@cr@@@align@measure - \everycr{\noalign{\global\tag@false - \global\MH_let:NwN\raise@tag\default_raisetag: - \global\column@\z@}}% - \MH_let:NwN\label\MT_gobblelabel:w - \global\row@\z@ - \tabskip\z@ - \halign{\span\align@preamble\crcr - #1% - \math@cr@@@ - \global\column@\z@ - \add@amps\maxfields@\cr - }% - }% - \restorecounters@ - \ifodd\maxfields@ - \global\advance\maxfields@\@ne - \fi: - \if_num:w \xatlevel@=\tw@ - \if_num:w \maxfields@<\thr@@ - \MH_let:NwN\xatlevel@\z@ - \fi: - \fi: - \setbox\z@\vbox{% - \unvbox\z@ \unpenalty \global\setbox\@ne\lastbox - }% - \global\totwidth@\wd\@ne - \if@fleqn \global\advance\totwidth@\@mathmargin \fi: - \global\MH_let:NwN\maxcolumn@widths\@empty - \begingroup - \MH_let:NwN\or:\relax - \loop - \global\setbox\@ne\hbox{% - \unhbox\@ne \unskip \global\setbox\thr@@\lastbox - }% - \ifhbox\thr@@ - \xdef\maxcolumn@widths{ \or: \the\wd\thr@@ \maxcolumn@widths}% - \repeat - \endgroup - \dimen@\displaywidth - \advance\dimen@-\totwidth@ - \if_case:w \xatlevel@ - \global\alignsep@\z@ - \MH_let:NwN\minalignsep\z@ - \@tempcntb\z@ - \if@fleqn - \@tempcnta\@ne - \global\eqnshift@\@mathmargin - \else: - \@tempcnta\tw@ - \global\eqnshift@\dimen@ - \global\divide\eqnshift@\@tempcnta - \fi: - \or: - \@tempcntb\maxfields@ - \divide\@tempcntb\tw@ - \@tempcnta\@tempcntb - \advance\@tempcntb\m@ne - \if@fleqn - \global\eqnshift@\@mathmargin - \global\alignsep@\dimen@ - \global\divide\alignsep@\@tempcnta - \else: - \global\advance\@tempcnta\@ne - \global\eqnshift@\dimen@ - \global\divide\eqnshift@\@tempcnta - \global\alignsep@\eqnshift@ - \fi: - \or: - \@tempcntb\maxfields@ - \divide\@tempcntb\tw@ - \global\advance\@tempcntb\m@ne - \global\@tempcnta\@tempcntb - \global\eqnshift@\z@ - \global\alignsep@\dimen@ - \if@fleqn - \global\advance\alignsep@\@mathmargin\relax - \fi: - \global\divide\alignsep@\@tempcntb - \fi: - \if_dim:w \alignsep@<\minalignsep\relax - \global\alignsep@\minalignsep\relax - \if_dim:w \eqnshift@>\z@ - \if@fleqn\else: - \global\eqnshift@\displaywidth - \global\advance\eqnshift@-\totwidth@ - \global\advance\eqnshift@-\@tempcntb\alignsep@ - \global\divide\eqnshift@\tw@ - \fi: - \fi: - \fi: - \if_dim:w \eqnshift@<\z@ - \global\eqnshift@\z@ - \fi: - \calc@shift@align - \global\tagshift@\totwidth@ - \global\advance\tagshift@\@tempcntb\alignsep@ - \if@fleqn - \if_num:w \xatlevel@=\tw@ - \global\advance\tagshift@-\@mathmargin\relax - \fi: - \else: - \global\advance\tagshift@\eqnshift@ - \fi: - \iftagsleft@ \else: - \global\advance\tagshift@-\displaywidth - \fi: - \dimen@\minalignsep\relax - \global\advance\totwidth@\@tempcntb\dimen@ - \if_dim:w \totwidth@>\displaywidth - \global\MH_let:NwN\displaywidth@\totwidth@ - \else: - \global\MH_let:NwN\displaywidth@\displaywidth - \fi: - \endgroup -} -\def\EQ_multline_labelhack:n #1{% - \begingroup\measuring@false\label@in@display{#1}\endgroup} -\def\EQ_multline_labelhack_opt:nw #1[#2]{% - \begingroup\measuring@false\label@in@display{#1}[#2]\endgroup} -\def\multline@#1{% - \Let@ - \@display@init{\global\advance\row@\@ne \global\dspbrk@lvl\m@ne}% - \chardef\dspbrk@context\z@ - \restore@math@cr - \MH_let:NwN\tag\tag@in@align - \global\tag@false \global\MH_let:NwN\raise@tag\default_raisetag: - \mmeasure@{#1}% - \MH_let:NwN\tag\gobble@tag - \MH_let:NwN\label\MT_gobblelabel:w - \tabskip \if@fleqn \@mathmargin \else: \z@skip \fi: - \totwidth@\displaywidth - \if@fleqn - \advance\totwidth@-\@mathmargin - \fi: - \halign\bgroup - \hbox to\totwidth@{% - \if@fleqn - \hskip \@centering \relax - \else: - \hfil - \fi: - \strut@ - $\m@th\displaystyle{}##\endmultline@math - \hfil - }% - \crcr - \if@fleqn - \hskip-\@mathmargin - \def\multline@indent{\hskip\@mathmargin}% put it back - \else: - \hfilneg - \def\multline@indent{\hskip\multlinegap}% - \fi: - \iftagsleft@ - \iftag@ - \begingroup - \ifshifttag@ - \rlap{\vbox{% - \normalbaselines - \hbox{% - \strut@ - \make@display@tag - }% - \vbox to\lineht@{}% - \raise@tag - }}% - \multline@indent - \else: - \setbox\z@\hbox{\make@display@tag}% - \dimen@\@mathmargin \advance\dimen@-\wd\z@ - \if_dim:w \dimen@<\multlinetaggap - \dimen@\multlinetaggap - \fi: - \box\z@ \hskip\dimen@\relax - \fi: - \endgroup - \else: - \multline@indent - \fi: - \else: - \multline@indent - \fi: - #1% -} -\def\mmeasure@#1{% - \begingroup - \measuring@true - \def\label##1{% - \@ifnextchar[ - {\EQ_multline_labelhack_opt:nw {##1}} - {\EQ_multline_labelhack:n {##1}} - } - \def\math@cr@@@{\cr}% - \MH_let:NwN\shoveleft\@iden \MH_let:NwN\shoveright\@iden - \savecounters@ - \global\row@\z@ - \setbox\@ne\vbox{% - \global\MH_let:NwN\df@tag\@empty - \halign{% - \setboxz@h{\@lign$\m@th\displaystyle{}##$}% - \iftagsleft@ - \if_num:w \row@=\@ne - \global\totwidth@\wdz@ - \global\lineht@\ht\z@ - \fi: - \else: - \global\totwidth@\wdz@ - \global\lineht@\dp\z@ - \fi: - \crcr - #1% - \crcr - }% - }% - \if_meaning:NN - \df@tag\@empty - \else: - \global\tag@true - \fi: - \if@eqnsw\global\tag@true\fi: - \iftag@ - \setboxz@h{% - \if@eqnsw - \stepcounter{equation}% - \tagform@\theequation - \else: - \df@tag - \fi: - }% - \global\tagwidth@\wdz@ - \dimen@\totwidth@ - \advance\dimen@\tagwidth@ - \advance\dimen@\multlinetaggap - \iftagsleft@\else: - \if@fleqn - \advance\dimen@\@mathmargin - \fi: - \fi: - \if_dim:w \dimen@>\displaywidth - \global\shifttag@true - \else: - \global\shifttag@false - \fi: - \fi: - \restorecounters@ - \endgroup -} -\newlength\mintagvsep -\mintagvsep5pt -\def\EQ_only_endmark:{% - \MH_set_boolean_T:n {show_manual_tags} - \global\tag@true - \iftagsleft@ - \gdef\df@tag{% - \hbox to \displaywidth{% - \hss - \raisebox{-\normallineskip - -\depthof{\EQ_outerbox:{}} - -\heightof{\EQ_outerbox:{}} - -\dp\EQ_mathdisplay_box - -\ht\EQ_mathdisplay_box} - [0pt][0pt]{\PotEndMark{\maketag@@@}}}} - \else: - \gdef\df@tag{% - \raisebox{-\dp\EQ_mathdisplay_box - -\depthof{\EQ_outerbox:{}}} - {\PotEndMark{\maketag@@@}}}% - \fi:} -\def\EQ_tag_plus_endmark:{% - \iftagsleft@ - \gdef\maketag@@@##1{% - \hfuzz\displaywidth - \makebox[\widthof{##1}][l]{% - \hbox to \displaywidth{\m@th\normalfont##1\hss - \raisebox{-\dp\EQ_mathdisplay_box - -\depthof{\EQ_outerbox:{}}} - {\PotEndMark{\hss}}}}}% - \else: - \gdef\maketag@@@##1{% - \hbox{\m@th\normalfont##1\llap{\hss\PotEndMark{% - \settoheight{\@tempdima}{\@nameuse{\InTheoType Symbol}}% - \MH_addtolength:dn \@tempdima - {\g_EQ_bottomtag_depth_dim+\mintagvsep} - \setlength{\@tempdimb} - {\g_EQ_bottomrow_depth_dim+\depthof{\EQ_outerbox:{}} - +\depthof{\EQ_innerbox:{}}} - \if_dim:w \@tempdima>\@tempdimb - \MH_setlength:dn \@tempdima{-\dp\EQ_mathdisplay_box - -\@tempdima+\g_EQ_bottomrow_depth_dim} - \addtolength{\@tempdima}{\depthof{\EQ_innerbox:{}}}% - \def\EQ_next:{\raisebox{\@tempdima}}% - \else: - \def\EQ_next:{ - \raisebox{-\dp\EQ_mathdisplay_box - -\depthof{\EQ_outerbox:{}}}}% - \fi:\EQ_next:}}}}% - \fi:} -\MH_let:NwN \MT_nonumber: \nonumber -\def\g_EQ_latest_nonzerodepth_row_fint{\z@} -\renewcommand*\nonumber{ - \@tempcnta=\row@ - \if_num:w \l_EQ_equationtype_int=\thr@@ - \advance\@tempcnta\m@ne - \else: - \if_num:w \l_EQ_equationtype_int=4\relax - \advance\@tempcnta\m@ne - \fi: - \fi: - \if_num:w \g_EQ_latest_nonzerodepth_row_fint=\@tempcnta - \else: - \global\g_EQ_bottomtag_depth_dim=-\baselineskip - \fi: - \MT_nonumber: -} -\endinput -%% -%% End of file `ntheorem.fix'. diff --git a/Master/tlpkg/bin/ctan2tds b/Master/tlpkg/bin/ctan2tds index ad6076e5d40..be35ca9fb8e 100755 --- a/Master/tlpkg/bin/ctan2tds +++ b/Master/tlpkg/bin/ctan2tds @@ -220,7 +220,6 @@ chdir $startdir || die "chdir($startdir) failed: $!"; # back to raw 'metauml', "&MAKEmetauml", 'mflogo', "&MAKEmflogo", 'mfpic', "&MAKEflatten", - 'mh', "&MAKEflatten", 'minitoc', "&MAKEunzip", 'misc', "&MAKEmisc", 'mkbangtex', "die 'skipping, no copyright (and python)'", @@ -707,6 +706,7 @@ $standarddocfmt='latex'; 'lettre', 'NULL', 'localloc', 'localloc.dtx', 'makecell', 'makecell.dtx', + 'mh', '.*\.dtx', 'minitoc', 'NULL', # takes forever, and files are pregenerated 'namespc', 'namespc.dtx', 'paper', 'install.02', @@ -720,12 +720,13 @@ $standardins='\.ins'; %specialinsrunner = ( 'bullcntr', 'latex', # requires interaction, ugh + 'mh', 'etex', ); $standardinsrunner="latex -interaction=nonstopmode"; %specialins_postdelete = ( 'dateiliste', 'dateiliste.README*', # already in dist - 'ednotes', 'perpage.sty', # copy from bigfoor + 'ednotes', 'perpage.sty', # copy from bigfoot 'gfsartemisia', 'A*Specimen.pdf', # nonfree 'gfsbodoni', 'B*Specimen.pdf', # nonfree 'gfscomplutum', 'C*Specimen.pdf', # nonfree @@ -734,6 +735,7 @@ $standardinsrunner="latex -interaction=nonstopmode"; 'jknapltx', 'ubbold.fd', # clashes with Ubbold.fd from bbold, # plus sauter bbold doesn't work? 'mathexam', 'sample.tex~', + 'mh', '*.drv *.ins', # derived from dtx's ); %specialmakeindex= ( @@ -812,7 +814,6 @@ $standardtex='\.cfg|\.sty|\.clo|\.ldf|\.cls|\.def|\.fd$'; 'metatex', 'metatex.tex', 'mff', '\.sty|mf[^f].*\.tex', 'mfpic', 'mfpic.tex|mfpic.sty|mfppatch.tex', - 'mh', '\.sty|\.cls|\.fix', 'minitoc', "\.ml[do]|$standardtex", 'misc', '\.sty|\.ltx|\.cls', 'mkpattern', 'mkpatter.tex', diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index 87d2300d57e..7c4d6003e4c 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -111,7 +111,7 @@ my @WorkingTLP = qw( makeplot maple marginnote marvosym mathdots mathexam mathmode maybemath mcaption mceinleger mdwtools memoir MemoirChapStyles mentis - menu metaobj metaplot metatex metauml mff mfpic mftinc mhchem + menu metaobj metaplot metatex metauml mff mfpic mftinc mh mhchem mhs microtype minipage-marginpar minitoc minutes mkpattern mla-paper mlist mnsymbol moderncv mongolian-babel moreverb movie15 mp3d ms msg multicap -- cgit v1.2.3