summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/breqn/mathstyle.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/breqn/mathstyle.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/breqn/mathstyle.dtx')
-rw-r--r--macros/latex/contrib/breqn/mathstyle.dtx542
1 files changed, 542 insertions, 0 deletions
diff --git a/macros/latex/contrib/breqn/mathstyle.dtx b/macros/latex/contrib/breqn/mathstyle.dtx
new file mode 100644
index 0000000000..cc99d8b842
--- /dev/null
+++ b/macros/latex/contrib/breqn/mathstyle.dtx
@@ -0,0 +1,542 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 1997-2003 by Michael J. Downes
+% Copyright (C) 2007-2008 by Morten Hoegholm
+% Copyright (C) 2007-2014 by Lars Madsen
+% Copyright (C) 2007-2017 by Will Robertson
+% Copyright (C) 2010-2017 by Joseph Wright
+%
+% 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 Will Robertson.
+%
+% 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:
+% 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/breqn/mathstyle.sty
+% TDS:doc/latex/breqn/mathstyle.pdf
+% TDS:source/latex/breqn/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
+%</ignore>
+%<*install>
+\input docstrip.tex
+\Msg{************************************************************************}
+\Msg{* Installation for package: mathstyle}
+\Msg{************************************************************************}
+
+\keepsilent
+\askforoverwritefalse
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 1997-2003 by Michael J. Downes
+Copyright (C) 2007-2011 by Morten Hoegholm et al
+Copyright (C) 2007-2014 by Lars Madsen
+Copyright (C) 2007-2017 by Will Robertson
+Copyright (C) 2010-2017 by Joseph Wright
+
+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 Will Robertson.
+
+This work consists of the main source file mathstyle.dtx
+and the derived files
+ mathstyle.sty, mathstyle.pdf, mathstyle.ins.
+
+\endpreamble
+
+\generate{%
+ \file{mathstyle.ins}{\from{mathstyle.dtx}{install}}%
+ \usedir{tex/latex/breqn}%
+ \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{* Happy TeXing!}
+\Msg{*}
+\Msg{************************************************************************}
+
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+%</ignore>
+%
+%<*driver>
+\ProvidesFile{mathstyle.drv}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{mathstyle}
+%<*package|driver>
+ [2017/01/27 0.98e Tracking mathstyle implicitly]
+%</package|driver>
+%<*driver>
+\documentclass{ltxdoc}
+\CodelineIndex
+\EnableCrossrefs
+\setcounter{IndexColumns}{2}
+\providecommand*\pkg[1]{\textsf{#1}}
+\begin{document}
+ \DocInput{mathstyle.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{mathstyle.drv}
+% \title{The \textsf{mathstyle} package}
+% \date{\filedate\quad\fileversion}
+% \author{Authors: Michael J. Downes, Morten H\o gholm\\ Maintained by Morten H\o gholm, Will Robertson\\ Feedback: \texttt{https://github.com/wspr/breqn/issues}}
+%
+%
+% \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}
+%
+% \subsection{Package options}
+%
+% This package has one set of options affecting the \verb|_| and \verb|^| characters:
+%
+% \begin{itemize}
+% \item\verb|\usepackage[mathactivechars]{mathstyle}|
+%
+% This is the default behaviour. Here, \verb|_| and \verb|^| are made into harmless
+% characters in text mode and behave as expected (for entering sub/superscript) when
+% inside math mode.
+% Certain code that assumes the catcodes of these characters may get confused about
+% this; see below for a possible fix.
+%
+% \item\verb|\usepackage[activechars]{mathstyle}|
+%
+% With this option, \verb|_| and \verb|^| are made into active characters for
+% entering sub/superscript mode in all cases---therefore, in text mode they will
+% produce a regular error (`Missing \$ inserted') indicating they are being used
+% out of place.
+%
+% \item\verb|\usepackage[noactivechars]{mathstyle}|
+%
+% This is the option most like to solve any compatibility problems. Here,
+% \verb|_| and \verb|^| retain their regular catcodes at all times and behave
+% in their default fashion. \textbf{However}, certain other features of this
+% package (such as \cs{currentmathstyle} inside a subscript) will then fail
+% to work, so only use this option as a last resort.
+% \end{itemize}
+%
+% \StopEventually{}
+% \part*{Implementation}
+%
+% \begin{macrocode}
+%<*package>
+% \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}%
+ \@nil % for the \@car
+ \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}
+%
+% \begin{macro}{\everydisplay}
+% We need to keep track of whether we're in inline or display maths, and the only
+% way to do that is to add a switch inside \verb|\everydisplay|.
+% We act sensibly and preserve any of the previous contents of that token register
+% before adding our own code here. As we'll see in a second, Lua\TeX{}
+% provides a native mechanism for this so we don't need any action in that
+% case. (Various other parts of the code also need to have different paths
+% for Lua\TeX{} use.)
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname directlua\endcsname\relax
+ \everydisplay=\expandafter{\the\everydisplay\chardef\mathstyle\z@}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\mathstyle}
+% A counter for the math style: 0--display, 2--text, 4--script, 6--scriptscript.
+% The logic is that display maths will explicitly
+% set \verb|\mathstyle| to zero (see above), so by default it is set to the
+% `text' maths style. With Lua\TeX{} there is a primitive to do the same
+% so it just has to be enabled. Note that in all cases we use Lua\TeX{}-like
+% numbering for the states.
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname directlua\endcsname\relax
+ \chardef\mathstyle\@ne
+\else
+ \directlua{tex.enableprimitives("", {"mathstyle"})}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% 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: set the value of
+% \cs{mathstyle} if Lua\TeX{} is not in use.q
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname directlua\endcsname\relax
+ \DeclareRobustCommand{\displaystyle}{%
+ \@@displaystyle \chardef\mathstyle\z@}
+ \DeclareRobustCommand{\textstyle}{%
+ \@@textstyle \chardef\mathstyle\tw@}
+ \DeclareRobustCommand{\scriptstyle}{%
+ \@@scriptstyle \chardef\mathstyle4 }
+ \DeclareRobustCommand{\scriptscriptstyle}{%
+ \@@scriptscriptstyle \chardef\mathstyle6 }
+\fi
+% \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=_
+}%
+\begingroup \catcode`\^=12\relax \catcode`\_=12\relax % just in case
+\lowercase{\endgroup
+\let\@@superscript@other=^ \let\@@subscript@other=_
+}%
+% \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. We can't tell the difference between cramped and
+% non-cramped styles unless Lua\TeX{} is in use, in which case this command
+% is a no-op.
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname directlua\endcsname\relax
+ \def\subsupstyle{%
+ \ifnum\mathstyle<5 \chardef\mathstyle4 %
+ \else \chardef\mathstyle6 %
+ \fi
+ }
+\else
+ \def\subsupstyle{}
+\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}
+%
+% \begin{macro}{\mathchoice}
+% \changes{v0.98e}{2016/04/09}{Lua\TeX{} primitive \cs{mathstyle} needs
+% termination}
+% \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\numexpr\mathstyle\relax
+ \expandafter\@firstoffour % Display
+ \or
+ \expandafter\@firstoffour % Cramped display
+ \or
+ \expandafter\@secondoffour % Text
+ \or
+ \expandafter\@secondoffour % Cramped text
+ \or
+ \expandafter\@thirdoffour % Script
+ \or
+ \expandafter\@thirdoffour % Cramped script
+ \else
+ \expandafter\@fourthoffour % (Cramped) Scriptscript
+ \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}
+% \end{macro}
+%
+% \begin{macro}{\genfrac}
+% 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]{%
+ {#1\fracstyle
+ {\begingroup #5\endgroup
+ \csname @@\ifx\maxdimen#4\maxdimen over\else above\fi
+ \if @#2@\else withdelims\fi\endcsname #2#3#4\relax
+ #6}%
+ }%
+}
+% \end{macrocode}
+% \changes{v0.90}{2011/08/03}{\cs{fracstyle} must be called \emph{after}
+% changing to the required style}
+% \changes{v0.98e}{2016/04/09}{Lua\TeX{} primitive \cs{mathstyle} needs
+% termination}
+% \end{macro}
+%
+% \begin{macrocode}
+\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}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname directlua\endcsname\relax
+ \def\fracstyle{%
+ \ifcase\numexpr\mathstyle\relax
+ \chardef\mathstyle=\@ne
+ \or
+ \chardef\mathstyle=\@ne
+ \or
+ \chardef\mathstyle=\tw@
+ \or
+ \chardef\mathstyle=\tw@
+ \else
+ \chardef\mathstyle=\thr@@
+ \fi
+ }
+\else
+ \def\fracstyle{}
+\fi
+% \end{macrocode}
+% \changes{v0.98e}{2016/04/09}{Lua\TeX{} primitive \cs{mathstyle} needs
+% termination}
+% 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\numexpr\mathstyle\relax
+ \@@displaystyle
+ \or
+ \@@displaystyle
+ \or
+ \@@textstyle
+ \or
+ \@@textstyle
+ \or
+ \@@scriptstyle
+ \or
+ \@@scriptstyle
+ \else
+ \@@scriptscriptstyle
+ \fi}
+% \end{macrocode}
+% Finally, we declare the package options.
+% \changes{v0.89}{2010/11/17}{Options should only change catcodes at
+% begin document, not straight away}
+% \begin{macrocode}
+\DeclareOption{mathactivechars}{%
+ % \catcode`\^=12\relax
+ % \catcode`\_=12\relax
+\AtBeginDocument{\catcode`\^=12\relax \catcode`\_=12\relax}%
+}
+\DeclareOption{activechars}{%
+ % \catcode`\^=13\relax
+ % \catcode`\_=13\relax
+\AtBeginDocument{\catcode`\^=13\relax \catcode`\_=13\relax}%
+}
+\DeclareOption{noactivechars}{%
+ % \catcode`\^=7\relax
+ % \catcode`\_=8\relax
+\AtBeginDocument{\catcode`\^=7\relax \catcode`\_=8\relax}%
+}
+\ExecuteOptions{mathactivechars}
+\ProcessOptions\relax
+% \end{macrocode}
+% WSPR: Set up the active behaviours: (this is set even in the
+% |noactivechars| case but they are never activated. no worries?)
+% \begin{macrocode}
+\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
+%</package>
+% \end{macrocode}
+%
+% \PrintIndex
+%
+% \Finale