% \iffalse
%
% mathfixs.dtx Copyright (C) 2018-2024 Niklas Beisert
%
% 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
%   https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2008 or later.
%
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Niklas Beisert.
%
% This work consists of the files mathfixs.dtx and mathfixs.ins
% and the derived files mathfixs.sty and mafxsamp.tex.
%
%<package|sample>\NeedsTeXFormat{LaTeX2e}[1996/12/01]
%<package>\ProvidesPackage{mathfixs}[2024/10/23 v1.1 various fixes for math mode]
%<sample>\ProvidesFile{mafxsamp.tex}[2024/10/23 v1.1 sample for mathfixs]
%<*driver>
\def\thedate#1{2024/10/23}\def\theversion#1{v1.1}
\ProvidesFile{mathfixs.dtx}[\thedate{} \theversion{} mathfixs reference manual file]
\PassOptionsToClass{10pt,a4paper}{article}
\documentclass{ltxdoc}

\usepackage[margin=35mm]{geometry}
\usepackage{hyperref}
\usepackage{hyperxmp}
\usepackage[usenames]{color}
\usepackage{amssymb}

\hypersetup{colorlinks=true}
\hypersetup{pdfstartview=FitH}
\hypersetup{pdfpagemode=UseNone}
\hypersetup{pdfsource={}}
\hypersetup{pdflang={en-UK}}
\hypersetup{pdfcopyright={Copyright 2018-2024 Niklas Beisert.
  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.}}
\hypersetup{pdflicenseurl={https://www.latex-project.org/lppl.txt}}
\hypersetup{pdfcontactaddress={ETH Zurich, ITP, HIT K,
  Wolfgang-Pauli-Strasse 27}}
\hypersetup{pdfcontactpostcode={8093}}
\hypersetup{pdfcontactcity={Zurich}}
\hypersetup{pdfcontactcountry={Switzerland}}
\hypersetup{pdfcontactemail={nbeisert@itp.phys.ethz.ch}}
\hypersetup{pdfcontacturl={https://people.phys.ethz.ch/\xmptilde nbeisert/}}

\newcommand{\secref}[1]{\hyperref[#1]{section \ref*{#1}}}
\newcommand{\ctanref}[2]{\href{https://ctan.org/#1}{#2}}
\newcommand{\ctanpkg}[1]{\ctanref{pkg/#1}{\textsf{#1}}}

\parskip1ex
\parindent0pt
\let\olditemize\itemize
\def\itemize{\olditemize\parskip0pt}

\begin{document}

\title{The \textsf{mathfixs} Package}
\hypersetup{pdftitle={The mathfixs Package}}
\author{Niklas Beisert\\[2ex]
  Institut f\"ur Theoretische Physik\\
  Eidgen\"ossische Technische Hochschule Z\"urich\\
  Wolfgang-Pauli-Strasse 27, 8093 Z\"urich, Switzerland\\[1ex]
  \href{mailto:nbeisert@itp.phys.ethz.ch}
  {\texttt{nbeisert@itp.phys.ethz.ch}}}
\hypersetup{pdfauthor={Niklas Beisert}}
\hypersetup{pdfsubject={Manual for the LaTeX2e Package mathfixs}}
\date{\thedate{}, \theversion{}}
\maketitle

\begin{abstract}\noindent
\textsf{mathfixs} is a \LaTeXe{} package
to fix some odd behaviour in math mode such as
spacing around fractions and roots,
math symbols within bold text
as well as
capital Greek letters.
It also adds some related macros.
\end{abstract}

\begingroup
\parskip0ex
\tableofcontents
\endgroup

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Introduction}

Undoubtedly, \TeX{} and \LaTeX{} are excellent at
producing visually appealing mathematical expressions.
However, some commonly used macros produce output which
sometimes appears unbalanced under certain conditions.
Depending on the level of sophistication, such artefacts
are typically either ignored or fixed by some manual adjustments
wherever they appear.
This package addresses some of the issues
encountered commonly (by the author),
and provides fixes or additional macros to handle such situations.
At present the package is mainly concerned with:
%
\begin{itemize}
\item
spacing of fractions, roots and symbols
\item
alternative versions of fractions
\item
representation of (capital) Greek letters
\item
math symbols within bold text
\end{itemize}
%
Additional fixes and features may be added
to the package in later versions.
All of these features can be selected and customised
to some extent to accommodate for the desired style.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Usage}

To use the package \textsf{mathfixs} add the command
%
\begin{center}
|\usepackage{mathfixs}|
\end{center}
%
to the preamble of your \LaTeX{} document.
Furthermore you must select the desired features explicitly
as described below, otherwise the package will have no effect.
This is to avoid having to agree on
all the provided features and to allow for forward compatibility:
the package should remain open for future extensions
which may modify the default behaviour in an unintended fashion.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Package Features}

\DescribeMacro{\ProvideMathFix}
Features and options can be selected by the commands:
%
\begin{center}
\begin{tabular}{rl}
&|\usepackage[|\textit{opts}|]{mathfixs}|
\\
or&|\PassOptionsToPackage{|\textit{opts}|}{mathfixs}|
\\
or&|\ProvideMathFix{|\textit{opts}|}|
\end{tabular}
\end{center}
%
|\PassOptionsToPackage| must be used before |\usepackage|;
|\ProvideMathFix| must be used afterwards.
Note that if |\ProvideMathFix| is invoked within a block,
its definitions are valid only locally within the block.
\textit{opts} is a comma-separated list of features or options.
The available features and options are described below.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Fractions}

The package offers some improvements for the spacing of fractions
as well as definitions to typeset small rational numbers.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{frac}.}
\DescribeMacro{frac}
%
In many situations, \LaTeX{} typesets fractions with an
insufficient amount of surrounding space.
For example, the space between two consecutive fractions
almost make them appear as a single one:
%
\begin{center}
|x\frac{a+b}{c+d}\frac{e}{f}.|
\quad$\longrightarrow$\quad
$\displaystyle x\frac{a+b}{c+d}\frac{e}{f}.$
\end{center}
%
Also the space towards other symbols and punctuation marks
arguably is too small.
To make expressions more legible, sequences of fractions
are often coded with various custom spaces
(`|\,|', `|\:|', `|\;|', `|\ |', `|~|', etc.)
inserted, e.g.
%
\begin{center}
|x\,\frac{a+b}{c+d}\;\frac{e}{f}\ .|
\quad$\longrightarrow$\quad
$\displaystyle x\,\frac{a+b}{c+d}\;\frac{e}{f}\ .$
\end{center}
%
This looks better, but requires a lot of intervention
and depends very much on personal conventions.

The underlying technical reason for the shortcoming in spacing
around fractions
is that the latter are defined
to have the math class of ordinary objects (|\mathord|)
which results in no surrounding space.
A simple resolution is to assign the math class
of inner objects (|\mathinner|) to fractions
as described in the \textsf{\TeX{}book}, e.g.
%
\begin{center}
|x\mathinner{\frac{a+b}{c+d}}\mathinner{\frac{e}{f}}.|
\end{center}
%
Inner objects behave almost like ordinary objects,
but some space is added between them and
other inner or ordinary objects, e.g.:
%
\[
x\mathinner{\frac{a+b}{c+d}}\mathinner{\frac{e}{f}}.
\]
%
Importantly, no space is added between inner objects
and the ends of the math expression or subexpression in parentheses.
Also, no space is generated
in the script styles (|\|[|script|]|scriptstyle|).

\DescribeMacro{\frac}
The feature |frac| redefines the macro |\frac|
such that all fractions have the inner math class
producing some surrounding space in selected situations, e.g.:
%
\begin{center}
|x\frac{a+b}{c+d}\frac{e}{f}.|
\quad$\longrightarrow$\quad
$\displaystyle x\mathinner{\frac{a+b}{c+d}}\mathinner{\frac{e}{f}}.$
\end{center}
%
This makes adding custom space around fractions
unnecessary in almost all situations,
and leads to a rather uniform appearance
without further adjustments.

\DescribeMacro{\genfrac}
\DescribeMacro{\dfrac}
\DescribeMacro{\tfrac}
The macro |\genfrac| of the package \ctanpkg{amsmath}
is modified suitably when the latter is loaded.
This also affects the macros |\dfrac| and |\tfrac| for fractions
in styles |\displaystyle| and |\textstyle|, respectively.
For |\genfrac| fractions with delimiters,
the inner math class is not applied
because the default math class is appropriate.

Note that when the |frac| feature is used,
spaces around fractions can be eliminated by using:
%
\begin{center}
|\mathord{\frac{|\textit{num}|}{|\textit{denom}|}}|
\end{center}
%
or simply (a block enclosed by braces |{|\ldots|}|
is considered an object with ordinary math class):
%
\begin{center}
|{\frac{|\textit{num}|}{|\textit{denom}|}}|
\end{center}
%
Furthermore, note that unlike the original macro |\frac|,
the redefined macro must be enclosed in a block
when passed as an argument. For example, |x^\frac{1}{2}|
produces an error and must be written as |x^{\frac{1}{2}}|.

\DescribeMacro{fracclass}
\DescribeMacro{fracdelimclass}
The option |fracclass=|\textit{class}
can be used to customise the math class of fractions
to any desired command \textit{class} accepting
the expression for the fraction as its single parameter.
Likewise, the option |fracdelimclass=|\textit{class}
customises the math class of fractions with delimiters
generated by |\genfrac| such as |\|[|d|$\vert$|t|]|binom|.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{rfrac}.}
\DescribeMacro{rfrac}
%
Rational numbers as coefficients to
some simple terms often stick out visually
from displayed math expressions, e.g.:
%
\[
\frac{1}{2}x^2 + \frac{1}{6} y^3 + \frac{1}{4} x^2 y^2
\]
%
Arguably, typesetting such fractions in text style
has a more uniform appearance:
%
\[
{\textstyle\frac{1}{2}}x^2
+ {\textstyle\frac{1}{6}} y^3
+ {\textstyle\frac{1}{4}} x^2 y^2
\]
%

\DescribeMacro{\rfrac}
The feature |rfrac| defines the macro |\rfrac|
to typeset a fraction in text style or smaller.
It is similar to |\tfrac| of the package \ctanpkg{amsmath},
but it will not choose text style when in the script styles
and it will not produce surrounding space
when the feature |frac| is used.
The optional argument |rfrac={\|\textit{cmd}|}| specifies
an alternative command name |\|\textit{cmd} for |\rfrac|.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{vfrac}.}
\DescribeMacro{vfrac}
\DescribeMacro{\vfrac}
%
Common or vulgar fractions such as $^1\!/\!_2$
can be typeset in a simple fashion
as a superscript numerator followed by a slash
and a subscript denominator.
The spacing around the slash should be reduced
to join the expression.
The package provides this representation
as the feature |vfrac| defining the macro |\vfrac|.
It is similar to |\nicefrac| of the package \ctanpkg{nicefrac}
or the more advanced implementation |\sfrac| of the package \ctanpkg{xfrac}.
As vulgar fractions are often (mainly) used within plain text,
the macro |\vfrac| also works in text mode.
The optional argument |vfrac={\|\textit{cmd}|}| specifies
an alternative command name |\|\textit{cmd} for |\vfrac|.

\DescribeMacro{vfracclass}
\DescribeMacro{vfracskippre}
\DescribeMacro{vfracskippost}
The option |vfracclass=|\textit{class}
can be used to customise the math class of the vulgar fraction.
The options |vfracskippre=|\textit{muskip}
and |vfracskippost=|\textit{muskip}
defines the (negative) skip around the slash
(must be given in math units |mu|).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Roots}

The \TeX{} implementations of radicals, mostly those with exponents,
have some uneven spacing, e.g.:
%
\[
y\sqrt{x}z,\qquad
y\sqrt[]{x}z,\qquad
y\sqrt[i]{x}z,\qquad
y\sqrt[n]{x}z,\qquad
y\sqrt[3]{x}z,\qquad
y\sqrt[123]{x}z
\]
%
They work best if no exponent is specified
or if the exponent is a single numerical digit.
The spacing is slightly different if the exponent is $n$ or $i$.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{root}.}
\DescribeMacro{root}
\DescribeMacro{\sqrt}
\DescribeMacro{\root}
%
The package provides an alternative mechanism for the
placement of the exponent next to the radical.
It first measures the extents of the exponent
and the radical sign and then places them accordingly.
It also adds some space at the end of the radicand.
The refined definition produces the following representation
without further spacing adjustments
%
\[
y\sqrt{x\mskip2mu}z,\qquad
y\sqrt{x\mskip2mu}z,\qquad
y\mskip5mu
  \sqrt[{\makebox[0pt][r]{$\scriptscriptstyle i$}}]{x\mskip2mu}z,\qquad
y\mskip5mu
  \sqrt[{\makebox[0pt][r]{$\scriptscriptstyle n$}}]{x\mskip2mu}z,\qquad
y\mskip5mu
  \sqrt[{\makebox[0pt][r]{$\scriptscriptstyle 3$}}]{x\mskip2mu}z,\qquad
y\mskip-5mu
  \sqrt[123]{x\mskip2mu}z
\]
%

\DescribeMacro{rootclass}
\DescribeMacro{rootskipend}
\DescribeMacro{rootskippre}
\DescribeMacro{rootskippost}
The option |rootclass=|\textit{class}
can be used to customise the math class of the root.
The option |rootskipend=|\textit{muskip}
defines the additional skip at the end of the radicand
within the radical (must be given in math units |mu|).
The options |rootskippre=|\textit{muskip}
and |rootskippost=|\textit{muskip}
define additional skip around the radical.

\DescribeMacro{rootclose}
The option |rootclose| adds a closing mark
to the end of the top bar of radicals:
%
\[
\setbox0\hbox{$\sqrt{a\mskip2mu}$}\copy0\lower\fontdimen8\textfont3
\hbox{\vrule width\fontdimen8\textfont3 height \ht0 depth -0.8\ht0}
\]
%
The optional argument |rootclose=|\textit{height}
specifies the starting height with a default value of $0.8$.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Space Representing Multiplication Signs}

Mathematical expressions regularly omit explicit multiplication signs
between factors, e.g.\ $x^2yz$. All is well unless
some of the factors are compound expressions such as
$\Delta x$ or differentials $dx$ (or $\mathrm{d}x$)
where additional space is typically inserted by
commands like `|\,|'.

A simple method to declare (or define) compound expressions
with a suitable amount of surrounding space
is to encapsulate them in a |\mathinner| block, e.g.
%
\begin{center}
|12c\mathinner{\Delta x}\mathinner{\Delta y}z|
\quad$\longrightarrow$\quad
$12c\mathinner{\Delta x}\mathinner{\Delta y}$
\\
|\int x\mathinner{dx}|
\quad$\longrightarrow$\quad
$\displaystyle\int x\mathinner{dx}$
\end{center}
%
Importantly, |\mathinner| will not add any space
at the ends of an expression
(or a subexpression in parentheses).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{multskip}.}
\DescribeMacro{multskip}
\DescribeMacro{\.}
%
Furthermore, the package provides the feature |multskip|
to encode a space representing an omitted multiplication sign
by the short command `|\.|', e.g.:
%
\begin{center}
|12c\.\Delta x\.\Delta y\.z|
\qquad or\qquad
|\int x\.dx|
\end{center}
%
The macro `|\.|' produces some amount of space in math mode
(while retaining its original definition as an accent in text mode)
and by default it is equivalent to `|\,|'.
However, the macro `|\.|' is intended to describe this space unambiguously
as a multiplication sign.
In particular, the amount of space can be configured by
the option |multskip=|\textit{muskip} (given in math units |mu|),
or the command could be customised further
to a visually different representation.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Greek Letters}

\TeX{} defines Greek letters in math mode somewhat differently
from Latin letters. The following two features redefine
to the standard \TeX{} Greek letters.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{greekcaps}.}
\DescribeMacro{greekcaps}
%
Capital Greek letters are declared as operators instead of plain letters,
and therefore they are typeset in an upright shape.
To typeset them in italic shape
(as all the other letters representing variables)
one can use |\mathnormal|,
but this may be tedious if most capital Greek letters in a document
actually represent variables.

The feature |greekcaps| redefines the 11 capital Greek letters
|\Gamma|, |\Delta|, |\Theta|, |\Lambda|, |\Xi|, |\Pi|,
|\Sigma|, |\Upsilon|, |\Phi|, |\Psi| and |\Omega|
provided by \TeX{} to have a default italic shape.
Upright capital Greek letters remain accessible
by switching to the upright shape using |\mathrm|
or by declaring them as part of an operator,
e.g.\ |\operatorname| or |\DeclareMathOperator|
(package \ctanpkg{amsopt} within \ctanpkg{amsmath}).

The optional argument |greekcaps=|\textit{pre} will
instead define the macros |\|\textit{pre}|Gamma|, etc.,
and keep the original definitions.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{greeklower}.}
\DescribeMacro{greeklower}
%
Lowercase Greek letters are fixed to the default math italic
font because (unfortunately) no upright counterparts exist
in the Compute Modern family of fonts.

The feature |greeklower| redefines the 23 lowercase Greek letters
|\alpha|, \ldots, |\omega|
as well as their 6 variants
|\varepsilon|, |\vartheta|, |\varpi|, |\varphi|, |\varrho| and |\varsigma|
defined by \TeX{}
to be elements of the regular math alphabet.
This allows them to be typeset in different font series
such as |\mathbold| described below.
However, when trying to cast them in upright shape
they will be typeset as altogether different symbols,
e.g.\ |\mathrm{\alpha}| becomes the ligature `ff'
which occupies the same slot in the \TeX{} font encodings OML vs.\ OT1.
Hence, some caution is needed when this feature is used.
Note that math font redefinitions may clash with this feature.

The optional argument |greeklower=|\textit{pre} will
instead define the macros |\|\textit{pre}|alpha|, etc.,
and keep the original definitions.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Bold Fonts}

Combining bold fonts and math mode in \LaTeX\ sometimes
yields unintuitive results.
The following two features assist
the intuitive use of bold fonts in math mode.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{autobold}.}
\DescribeMacro{autobold}
%
Sectioning commands such as |\chapter|, |\section|, |\paragraph|,
etc., but also |\maketitle| often change the font series to bold.
However, any math symbols contained in the titles
are typeset in the regular, non-bold series by default leading to
a non-uniform appearance or calling for further manual adjustments
using |\boldmath|.
One might argue that it is bad practice to have math symbols in titles
in the first place,
but this point of view perhaps does not apply universally.

\DescribeMacro{\bfseries}
\DescribeMacro{\mdseries}
The feature |autobold| overwrites the \LaTeX{} font commands
|\bfseries|, |\mdseries| as well as |\normalfont|
to automatically switch the math fonts to their bold version.
Derived commands such as |\section|, etc., will also
switch the math fonts to the bold series.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{mathbold}.}
\DescribeMacro{mathbold}
\DescribeMacro{\mathbold}
%
The feature |mathbold| defines a bold italic math font |\mathbold|.
To typeset bold italic letters simply use |\mathbold{abc}|.
To make this work for lowercase Greek letters as well,
the feature |greeklower| must be activated.
The optional argument |mathbold={\|\textit{cmd}|}| specifies
an alternative command name |\|\textit{cmd} for |\mathbold|,
e.g.\ |mathbold={\mathbit}|.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Mathematical Functions and Operators}

\LaTeX\ defines many basic standard mathematical functions and operators,
see below.
The following features fill some gaps in the collection of functions
and they provide worthwhile alternative representations for some
functions and operators. All of the following features require
that the package \ctanpkg{amsopn} (part of \ctanpkg{amsmath})
is loaded \emph{before} \textsf{mathfixs}.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Native \LaTeX{} Functions and Operators.}

As a reference, \LaTeX{} supplies the following functions and operators.
All of them are overwritten by \ctanpkg{amsopn} within \ctanpkg{amsmath}.

Exponential and logarithm functions:
%
\begin{center}
\begin{tabular}{lll}
macro & output & description \\
\hline
|\exp| & $\exp$ & exponential function \\
|\log| & $\log$ & logarithm function \\
|\lg| & $\lg$ & common logarithm function \\
|\ln| & $\ln$ & natural logarithm function \\
\end{tabular}
\end{center}

Trigonometric functions:
%
\begin{center}
\begin{tabular}{lll}
macro & output & description \\
\hline
|\sin| & $\sin$ & sine function \\
|\cos| & $\cos$ & cosine function \\
|\tan| & $\tan$ & tangent function \\
|\cot| & $\cot$ & cotangent function \\
|\sec| & $\sec$ & secant function \\
|\csc| & $\csc$ & cosecant function \\
|\arcsin| & $\arcsin$ & inverse sine function \\
|\arccos| & $\arccos$ & inverse cosine function \\
|\arctan| & $\arctan$ & inverse tangent function \\
\end{tabular}
\end{center}

Hyperbolic functions:
%
\begin{center}
\begin{tabular}{lll}
macro & output & description \\
\hline
|\sinh| & $\sinh$ & hyperbolic sine function \\
|\cosh| & $\cosh$ & hyperbolic cosine function \\
|\tanh| & $\tanh$ & hyperbolic tangent function \\
|\coth| & $\coth$ & hyperbolic cotangent function \\
\end{tabular}
\end{center}

Extremal values:
%
\begin{center}
\begin{tabular}{lll}
macro & output & description \\
\hline
|\max| & $\max$ & maximum of a set \\
|\min| & $\min$ & minimum of a set \\
|\sup| & $\sup$ & supremum of a set \\
|\inf| & $\inf$ & infimum of a set \\
\end{tabular}
\end{center}

Limits:
%
\begin{center}
\begin{tabular}{lll}
macro & output & description \\
\hline
|\lim| & $\lim$ & limit operator \\
|\limsup| & $\limsup$ & limit superior operator \\
|\liminf| & $\liminf$ & limit inferior operator \\
|\injlim| & inj\,lim & ? (\ctanpkg{amsopn}/\ctanpkg{amsmath} only) \\
|\projlim| & proj\,lim & ? (\ctanpkg{amsopn}/\ctanpkg{amsmath} only) \\
\end{tabular}
\end{center}

Assorted functions and operators:
%
\begin{center}
\begin{tabular}{lll}
macro & output & description \\
\hline
|\arg| & $\arg$ & argument of a complex number \\
|\det| & $\det$ & determinant of a matrix \\
|\ker| & $\ker$ & kernel of a map \\
|\dim| & $\dim$ & dimension of \ldots \\
|\deg| & $\deg$ & degree of \ldots \\
|\gcd| & $\gcd$ & greatest common divisor \\
|\hom| & $\hom$ & ? \\
|\Pr| & $\Pr$ & ? \\
\end{tabular}
\end{center}

Modulo statements:
%
\begin{center}
\begin{tabular}{lll}
macro & output & description \\
\hline
|\bmod| & $X \bmod Y$ & modulo statement \\
|\pmod| & $X \pmod Y$ & modulo statement in parentheses \\
|\mod| & $X\mkern18mu \bmod Y$ & modulo statement with space
(\ctanpkg{amsmath} only) \\
\end{tabular}
\end{center}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{genop}.}
\DescribeMacro{genop}
\DescribeMacro{...}
%
The package defines several
additional mathematical functions, operators and symbols
which are not included in the \LaTeX\ macro library.
These may be provided by other packages as well,
or they can easily be defined by |\DeclareMathOperator|
or used by |\operatorname|.
Nevertheless, it is convenient to have these objects declared
by a simple switch rather than by issuing a formal \LaTeX{} clause.

The additional macros are grouped by category
and each category is included as a feature.
The first category describes
assorted mathematical functions, operators and symbols.
Further categories are provided in the following paragraphs.

In order to evade clashes, the package allows to
individually select the desired definitions
from the assorted section
with optionally defined macro names:
%
\begin{center}
\begin{tabular}{llll}
feature & macro & output & description \\
\hline
|sgn| & |\sgn| & sgn & signum function \\
|res| & |\res| & res & residue operator \\
|lcm| & |\lcm| & lcm & least common multiple \\
|span| & |\Span| & span & span \\
|diag| & |\diag| & diag & diagonal matrix \\
|spec| & |\spec| & spec & spectrum \\
|const| & |\const| & const & anything constant \\
\hline
|genop| & & & all of the above
\end{tabular}
\end{center}
%
The following two-letter operators
are not included in the above class
and must be implemented individually:
%
\begin{center}
\begin{tabular}{llll}
feature & macro & output & description \\
\hline
|id| & |\id| & id & identity map \\
|tr| & |\tr| & tr & trace \\
\end{tabular}
\end{center}
%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{reim}.}
\DescribeMacro{reim}
\DescribeMacro{\Re}
\DescribeMacro{\Im}
%
\LaTeX{} assigns the symbols `$\Re$' and `$\Im$' to projectors
to the real and imaginary parts of complex numbers.
Another established representation for these projectors is given by
`Re' and `Im'.
The feature |reim| overwrites the predefined macros |\Re| and |\Im|
with a textual representation:
%
\begin{center}
\begin{tabular}{lll}
macro & output & description \\
\hline
|\Re| & Re & real part of a complex number \\
|\Im| & Im & imaginary part of a complex number \\
\end{tabular}
\end{center}
%
The optional argument |reim={\|\textit{cmdr}|\|\textit{cmdi}|}| specifies
alternative command names |\|\textit{cmdr} and |\|\textit{cmdi}
for |\Re| and |\Im|.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{trig}.}
\DescribeMacro{trig}
\DescribeMacro{\arccot}
\DescribeMacro{\arcsec}
\DescribeMacro{\arccsc}
%
\LaTeX{} defines most trigonometric functions and their inverses
like $\sin$, $\cos$ and $\arctan$, but three of their inverses are omitted.
The feature |trig| supplies the remaining
three inverse trigonometric functions:
\begin{center}
\begin{tabular}{lll}
macro & output & description \\
\hline
|\arccot| & arccot & inverse cotangent function \\
|\arcsec| & arcsec & inverse secant function \\
|\arccsc| & arccsc & inverse cosecant function \\
\end{tabular}
\end{center}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{hyp}.}
\DescribeMacro{hyp}
\DescribeMacro{\sech}
\DescribeMacro{\csch}
\DescribeMacro{\ar...h}
%
\LaTeX{} defines four hyperbolic functions $\sinh$, $\cosh$ and $\tanh$,
but two of them and all inverses are omitted.
The feature |hyp| supplies the remaining two hyperbolic functions
along with all inverse hypberbolic functions:
\begin{center}
\begin{tabular}{lll}
macro & output & description \\
\hline
|\sech| & sech & hyperbolic secant function \\
|\csch| & csch & hyperbolic cosecant function \\
|\arsinh| & arsinh & inverse hyperbolic sine function \\
|\arcosh| & arcosh & inverse hyperbolic cosine function \\
|\artanh| & artanh & inverse hyperbolic tangent function \\
|\arcoth| & arcoth & inverse hyperbolic cotangent function \\
|\arsech| & arsech & inverse hyperbolic secant function \\
|\arcsch| & arcsch & inverse hyperbolic cosecant function \\
\end{tabular}
\end{center}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{mapchar}.}
\DescribeMacro{mapchar}
\DescribeMacro{\dom}
\DescribeMacro{\codom}
\DescribeMacro{\supp}
\DescribeMacro{\im}
\DescribeMacro{\coker}
\DescribeMacro{\rank}
%
The feature |mapchar| supplies further characteristics of maps:
%
\begin{center}
\begin{tabular}{lll}
macro & output & description \\
\hline
|\dom| & dom & domain \\
|\codom| & codom & codomain \\
|\supp| & supp & support \\
|\im| & im & image \\
|\coker| & coker & cokernel \\
|\rank| & rank & rank \\
\end{tabular}
\end{center}
%
The optional argument |mapchar={\|\textit{cmdim}|}| specifies
an alternative command name |\|\textit{cmdim} for |\im|
which has only two letters and might easily clash with other definitions.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{mapclass}.}
\DescribeMacro{mapclass}
\DescribeMacro{\Hom}
\DescribeMacro{\End}
\DescribeMacro{\Isom}
\DescribeMacro{\Aut}
%
The feature |mapclass| supplies symbols for the sets of
homomorphisms, endomorphisms, isomorphisms and automorphisms
as classes/categories of structure-preserving maps:
%
\begin{center}
\begin{tabular}{lll}
macro & output & description \\
\hline
|\Hom| & Hom & homomorphisms \\
|\End| & End & endomorphisms \\
|\Isom| & Isom & isomorphisms \\
|\Aut| & Aut & automorphisms
\end{tabular}
\end{center}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{vecdiff}.}
\DescribeMacro{vecdiff}
\DescribeMacro{vecrot}
\DescribeMacro{\grad}
\DescribeMacro{\div}
\DescribeMacro{\curl}
%
The feature |vecdiff| supplies the three common differential operators
gradient, divergence and curl for vectors:
%
\begin{center}
\begin{tabular}{llll}
macro & output & description \\
\hline
|\grad| & grad & gradient \\
|\div| & div & divergence \\
|\curl| & curl (rot) & curl (alternative form)
\end{tabular}
\end{center}
%
The feature |vecrot|[|={\|\textit{cmd}|}|]
supplies the alternative form `rot' for curl/rotor on top of |\curl|
with the option to specify an alternative command name.
The feature |lapl|, see below, supplies the Laplace operator.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Particular Symbols}

The package provides a couple of standard mathematical symbols.
Of course, users can be trusted to define these symbols themselves
or, more likely, use them straight away.
Nevertheless, here we go \ldots

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Mathematical Constants.}
\DescribeMacro{econst}
\DescribeMacro{iunit}
\DescribeMacro{piconst}
%
Three of the most relevant mathematical constants are Euler's number $e$,
the imaginary unit $i$ and the circle's constant $\pi$
(with the relation $e^{i\pi}=-1$).
The package provides macros for these
with either upright or math italic representations:
%
\begin{center}
\begin{tabular}{llll}
feature & macro & output & description \\
\hline
|econst| & |\econst| & e & Euler's number (upright) \\
|econst*| & |\econst| & $e$ & Euler's number (math italic) \\
|iunit| & |\iunit| & i & imaginary unit (upright) \\
|iunit*| & |\iunit| & $i$ & imaginary unit (math italic) \\
|iunit*nb| & |\iunit| & $\mathring{\imath}$ & imaginary unit
                        (NB's silly circle version) \\
|piconst| & |\piconst| & $\mathrm{\pi}$ & circle constant $\pi$
                         (upright, if only \ldots)\\
|piconst*| & |\piconst| & $\pi$ & circle constant $\pi$ (math italic)
\end{tabular}
\end{center}
%
Each macro and representation is provided as an individual feature
\textit{feature}[|={\|\textit{cmd}|}|]
which offers the option to customise the macro name to |\|\textit{cmd}.

\DescribeMacro{econstclass}
As Euler's number is commonly used within exponentiation
which looks dense in compound expressions
(e.g.\ $2e^{\sin x}F$),
|\econst| is defined as |\mathinner|
which adds some space around the exponentiation in such a situation
(e.g.\ $2\mathinner{e}^{\sin x}F$).
Use |{\econst}| if such spacing is undesired.
The option |econstclass=|\textit{class}
can be used to customise the math class of |\econst|.

An upright version of |\pi| needs to be supplied
for the feature |piconst| to work properly.
If the macro |\uppi| from the package \ctanpkg{upgreek}
in the bundle \ctanpkg{was} is available
at the time of loading, it will be used.
Otherwise an upright |\pi| can be supplied by package \ctanpkg{unicode-math}.
Note that the feature |piconst| (without |*|) may interfere
with the feature |greeklower|. 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Derivative Symbols.}
\DescribeMacro{\der}
\DescribeMacro{\diff}
%
The package provides some assorted elementary symbols and compounds:
%
\begin{center}
\begin{tabular}{llll}
feature & macro & output & description \\
\hline
|der| & |\der| & d & derivative symbol (upright) \\
|der*| & |\der| & $d$ & derivative symbol (math italic) \\
|diff| & |\diff{|$x$|}| & d$x$ & coordinate differential (upright) \\
|diff*| & |\diff{|$x$|}| & $dx$ & coordinate differential (math italic) \\
\end{tabular}
\end{center}
%
Each macro and representation is provided as an individual feature
\textit{feature}[|={\|\textit{cmd}|}|]
which offers the option to customise the macro name to |\|\textit{cmd}.

The coordinate differential |\diff| is meant to be used
within integrals and as a differential form,
and it can be used in the denominator of differentiation expressions.
In all of these, it is understood as a compound which should be
separated from surrounding symbols.
Therefore |\diff{|$x$|}| is declared as |\mathinner|
which adds spacing where needed.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Assorted Symbols.}
\DescribeMacro{\order}
\DescribeMacro{\Order}
\DescribeMacro{\lapl}
\DescribeMacro{\defeq}
\DescribeMacro{\eqdef}
%
The package provides some assorted elementary symbols and compounds:
%
\begin{center}
\begin{tabular}{llll}
feature & macro & output & description \\
\hline
|order| & |\order| & $o$ & anything of order less than \\
|Order| & |\Order| & $O$ & anything of order at most \\
|Order*| & |\Order| & $\mathcal{O}$ & anything of order at most
                                      (calligraphic) \\
|lapl| & |\lapl| & $\mathnormal{\Delta}$ & Laplace operator \\
|defeq| & |\defeq| & $\mathrel{\mathop:}=$ & is defined as \\
|eqdef| & |\eqdef| & $=\mathrel{\mathop:}$ & defines \\
\end{tabular}
\end{center}
%
Each macro and representation is provided as an individual feature
\textit{feature}[|={\|\textit{cmd}|}|]
which offers the option to customise the macro name to |\|\textit{cmd}.

The defining symbols |\defeq| and |\eqdef| both typeset
the colon to be vertically aligned with the equation sign.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Feature \texttt{numset}.}
\DescribeMacro{numset}
\DescribeMacro{numsetfont}
\DescribeMacro{\numset}
%
The feature |numset| provides the macro |\numset|
to typeset a number set such as the integers
which is commonly denoted by a (blackboard) bold letter
such as $\mathbb{Z}$ or $\mathbf{Z}$.
The feature |numset={\|\textit{cmd}|}|
offers the option to customise the macro name to |\|\textit{cmd}.
The default font for this feature is |\mathbb| of \ctanpkg{amssymb}
if available at the time of loading, otherwise |\mathbf|;
it can be adjusted by |numsetfont={|\textit{mathfont}|}|.

\DescribeMacro{numsets}
The standard number fields are provided by the feature |numsets|
as follows:
%
\begin{center}
\begin{tabular}{llll}
macro & output & description \\
\hline
|\Natural| & $\mathbb{N}$ & set of natural numbers \\
|\Integer| & $\mathbb{Z}$ & field of integer numbers \\
|\Rational| & $\mathbb{Q}$ & field of rational numbers \\
|\Real| & $\mathbb{R}$ & field of real numbers \\
|\Complex| & $\mathbb{C}$ & field of complex numbers \\
|\Quaternion| & $\mathbb{H}$ & skew field of quaternions \\
|\Octonion| & $\mathbb{O}$ & division algebra of quaternions \\
\end{tabular}
\end{center}
%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Information}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Copyright}

Copyright \copyright{} 2018--2024 Niklas Beisert

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
  \url{https://www.latex-project.org/lppl.txt}
and version 1.3c or later is part of all distributions of \LaTeX{}
version 2008 or later.

This work has the LPPL maintenance status `maintained'.

The Current Maintainer of this work is Niklas Beisert.

This work consists of the files |README.txt|, |mathfixs.ins| and |mathfixs.dtx|
as well as the derived files |mathfixs.sty|, |mafxsamp.tex| and |mathfixs.pdf|.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Files and Installation}

The package consists of the files:
%
\begin{center}
\begin{tabular}{ll}
    |README.txt|   & readme file \\
    |mathfixs.ins| & installation file \\
    |mathfixs.dtx| & source file \\
    |mathfixs.sty| & package file \\
    |mafxsamp.tex| & sample file \\
    |mathfixs.pdf| & manual
\end{tabular}
\end{center}
%
The distribution consists of the files
|README.txt|, |mathfixs.ins| and |mathfixs.dtx|.
%
\begin{itemize}
\item
Run (pdf)\LaTeX{} on |mathfixs.dtx|
to compile the manual |mathfixs.pdf| (this file).
\item
Run \LaTeX{} on |mathfixs.ins| to create the package |mathfixs.sty|
and the sample |mafxsamp.tex|.
Copy the file |mathfixs.sty| to an appropriate directory of your \LaTeX{}
distribution, e.g.\ \textit{texmf-root}|/tex/latex/mathfixs|.
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Related CTAN Packages}

The package is related to other packages available at CTAN:
\begin{itemize}
\item
This package uses the package \ctanpkg{keyval}
to process the options for the package, environments and macros.
Compatibility with the \ctanpkg{keyval} package
has been tested with v1.15 (2014/10/28).
\item
This package is designed to be compatible with
the package \ctanpkg{amsmath}.
To prevent \ctanpkg{amsmath} from overwriting some features,
it should be loaded \emph{before} the present package.
Compatibility with the \ctanpkg{amsmath} package
has been tested with v2.17a (2017/09/02).
\item
This package reproduces the functionality of the
package \ctanpkg{fixmath} v0.9 (2000/04/11)
from the bundle \ctanpkg{was}.
\item
Functionality to typeset common fractions is also provided by
the packages \ctanpkg{nicefrac}
from the bundle \ctanpkg{units}
and \ctanpkg{xfrac}
offering a more advanced implementation.
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\subsection{Feature Suggestions}
%
%The following is a list of features which may be useful for future
%versions of this package:
%%
%\begin{itemize}
%\item
% set of elliptic functions and constants
%\item
% improvement for vector accent plancement
%\item
% transpose sign
%\item
% \mathup: no need as \mathrm does just that in whatever font
%\item
% standard classes of Lie groups
%\item
% alternative representations for some operators
%\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Revision History}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{v1.1:} 2024/10/23

\begin{itemize}
\item
added feature |genop| for additional functions, operators and symbols
\item
added feature |reim| to change the definitions
of |\Re| and |\Im| to `Re' and `Im'
\item
added features |trig| and |hyp| to complete the definitions
of trigonometric and hypberbolic functions
\item
added feature |mapchar| to represent characteristics of maps
\item
added feature |mapclass| to represent structure-preserving maps
\item
added feature |vecdiff| to represent vector differential operators
\item
added representation for mathematical constants $e$, $i$, $\pi$
\item
added features |der| and |diff| to represent derivative symbols
\item
added assorted symbols
\item
added feature |numset| and |numset| to represent number sets
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{v1.01:} 2018/12/30

\begin{itemize}
\item
fix for |\vfrac| in aligned math
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{v1.0:} 2018/01/17

\begin{itemize}
\item
first version published on CTAN
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\appendix

\settowidth\MacroIndent{\rmfamily\scriptsize 000\ }

 \DocInput{mathfixs.dtx}

\end{document}
%</driver>
% \fi
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Sample File}
%\iffalse
%<*sample>
%\fi
%
% In this section we provide an example of how to use
% some of the \textsf{mathfixs} features.
% We also test the behaviour in some special cases.
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Preamble.}
%
% Standard document class:
%    \begin{macrocode}
\documentclass[12pt]{article}
%    \end{macrocode}

% Use package \textsf{geometry} to adjust the page layout,
% adjust the paragraph shape:
%    \begin{macrocode}
\usepackage{geometry}
\geometry{layout=a4paper}
\geometry{paper=a4paper}
\geometry{margin=3cm}
\parindent0pt
%    \end{macrocode}

% Include \ctanpkg{amsmath}, \ctanpkg{amssymb}
% and the \textsf{mathfixs} package:
%    \begin{macrocode}
\RequirePackage{amsmath,amssymb}
\RequirePackage[autobold]{mathfixs}
%    \end{macrocode}

% Declare features to be implemented globally:
%    \begin{macrocode}
\ProvideMathFix{greekcaps,mathbold}
\ProvideMathFix{frac,rfrac,vfrac}
\ProvideMathFix{multskip}
\ProvideMathFix{der,diff}
%    \end{macrocode}

% Start document body:
%    \begin{macrocode}
\begin{document}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Fractions.}
%    \begin{macrocode}
\paragraph{Fractions.}
%    \end{macrocode}

% Fraction spacing:
%    \begin{macrocode}
\[
x\frac{a+b}{c+d}\frac{e}{f}.
\]
%    \end{macrocode}

% Vulgar fractions:
%    \begin{macrocode}
Recipe for $\approx 3$ pancakes (scale accordingly):
Whisk together one large egg, $\vfrac{1}{8} \ell$ milk,
$50\mathinner{\mathrm{g}}$ flour
(mix \vfrac{2}{3} wholemeal flour and \vfrac{1}{3} white flour); fry in pan.
Feel free to use more flour than indicated.
%    \end{macrocode}

% Rational numbers:
%    \begin{macrocode}
\[
\rfrac{1}{2}x^2 + \rfrac{1}{6} y^3 + \rfrac{1}{4} x^2 y^2
\]
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Radicals.}
%    \begin{macrocode}
\paragraph{Radicals.}
%    \end{macrocode}

% Original radicals spacing:
%    \begin{macrocode}
\[
y\sqrt{x}z,\qquad
y\sqrt[]{x}z,\qquad
y\sqrt[i]{x}z,\qquad
y\sqrt[n]{x}z,\qquad
y\sqrt[3]{x}z,\qquad
y\sqrt[123]{x}z
\]
%    \end{macrocode}

% Radicals spacing
% (feature introduced in document body):
%    \begin{macrocode}
\ProvideMathFix{root}
\[
y\sqrt{x}z,\qquad
y\sqrt[]{x}z,\qquad
y\sqrt[i]{x}z,\qquad
y\sqrt[n]{x}z,\qquad
y\sqrt[3]{x}z,\qquad
y\sqrt[123]{x}z
\]
%    \end{macrocode}

% Radicals with closing mark
% (using a locally defined option):
%    \begin{macrocode}
\[
\ProvideMathFix{rootclose}
y\sqrt{x}z,\qquad
y\sqrt[]{x}z,\qquad
y\sqrt[i]{x}z,\qquad
y\sqrt[n]{x}z,\qquad
y\sqrt[3]{x}z,\qquad
y\sqrt[123]{x}z
\]
%    \end{macrocode}

% Radicals with class |\mathinner|:
%    \begin{macrocode}
\[
\ProvideMathFix{rootclass={\mathinner}}
y\sqrt{x}z,\qquad
y\sqrt[]{x}z,\qquad
y\sqrt[i]{x}z,\qquad
y\sqrt[n]{x}z,\qquad
y\sqrt[3]{x}z,\qquad
y\sqrt[123]{x}z
\]
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Spaces Representing Multiplication and Derivative Symbols.}
%    \begin{macrocode}
\paragraph{Spaces Representing Multiplication and Derivative Symbols.}
%    \end{macrocode}

% Explicit spacing:
%    \begin{macrocode}
\[
\int x\.\der x
\]
%    \end{macrocode}

% Implicit spacing:
%    \begin{macrocode}
\[
\int x\diff{x}
\]
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Greek Letters.}
%    \begin{macrocode}
\paragraph{Greek Letters.}
%    \end{macrocode}

% Capital letters:
%    \begin{macrocode}
\[
\Gamma \qquad
\mathrm{\Gamma} \qquad
c\operatorname{\Gamma}(x)
\]
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Bold Text with Math Symbols.}
%    \begin{macrocode}
\paragraph{Bold Text with Math Symbols: $abc123\alpha\Gamma$.}
%    \end{macrocode}

% Bold text:
%    \begin{macrocode}
\[
aG\alpha\Gamma
\qquad\mathbold{aG\alpha\Gamma}
\qquad\ProvideMathFix{greeklower}\mathbold{aG\alpha\Gamma}
\]
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Real and Imaginary Parts.}
%    \begin{macrocode}
\paragraph{Real and Imaginary Parts.}
%    \end{macrocode}

% Change representation for |\Re| and |\Im|:
%    \begin{macrocode}
\[
\Re(z),\Im(z)
\qquad\ProvideMathFix{reim}
\Re(z),\Im(z)
\qquad\ProvideMathFix{reim={\nRe\nIm}}
\nRe(z),\nIm(z)
\]
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Functions, Operators, Symbols.}
%    \begin{macrocode}
\paragraph{Functions, Operators, Symbols.}
%    \end{macrocode}

% Some examples of vector differential operators:
%    \begin{macrocode}
\[
\ProvideMathFix{vecdiff,lapl,defeq}
\lapl f=\div\grad f,
\qquad
\lapl v=\grad\div v-\curl\curl v,
\]
%    \end{macrocode}
% Some examples of mathematical constants:
%    \begin{macrocode}
\[
\ProvideMathFix{econst,iunit,piconst}
\econst^{\iunit\piconst}=-1,
\qquad
\ProvideMathFix{econst*,iunit*,piconst*}
\econst^{\iunit\piconst}=-1,
\qquad
\ProvideMathFix{econst,defeq,iunit*nb,numsets}
z\defeq x+\iunit y=r\econst^{\iunit\theta}\in\Complex,
\quad x,y,r,\theta\in\Real
\]
%    \end{macrocode}
% Some examples of operators and symbols:
%    \begin{macrocode}
\[
\ProvideMathFix{res,hyp,iunit*,piconst*}
\res_{z=\iunit \piconst n} \csch(z)=(-1)^n
\]
%    \end{macrocode}

% End of document body:
%    \begin{macrocode}
\end{document}
%    \end{macrocode}
%\iffalse
%</sample>
%\fi
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Implementation}
%\iffalse
%<*package>
%\fi
%
% In this section we describe the package |mathfixs.sty|.

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Required Packages.}
%
% The package loads the package
% \ctanpkg{keyval}
% if not yet present.
% \ctanpkg{keyval} is used for extended options processing:
%    \begin{macrocode}
\RequirePackage{keyval}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Automatically Bold Maths.}
%
% \macro{\bfseries}
% \macro{\mdseries}
% \macro{\normalfont}
% Define replacements for |\bfseries|, |\mdseries| and |\normalfont|
% by appending |\boldmath| or |\unboldmath|
% (if not already in math mode where font selection works differently).
% The chain of |\expandafter| directives fills in the original definition:
%    \begin{macrocode}
\expandafter\def\expandafter\mafx@bfseries\expandafter
  {\bfseries\ifmmode\else\boldmath\fi}
\expandafter\def\expandafter\mafx@mdseries\expandafter
  {\mdseries\ifmmode\else\unboldmath\fi}
\expandafter\def\expandafter\mafx@normalfont\expandafter
  {\normalfont\ifmmode\else\unboldmath\fi}
%    \end{macrocode}

% \macro{autobold}
% Implement the |autobold| fix:
%    \begin{macrocode}
\define@key{mafx@}{autobold}[]{%
  \let\bfseries=\mafx@bfseries
  \let\mdseries=\mafx@mdseries
  \let\normalfont=\mafx@normalfont
}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Bold Italic Math.}
%
% \macro{mathbold}
% \macro{\mathbold}
% Define a new math alphabet |\mathbold|
% as the bold series and italic shape
% of the standard computer modern math font
% (see package \ctanpkg{fixmath}):
%
%    \begin{macrocode}
\DeclareMathAlphabet{\mafx@mathbold}{OML}{cmm}{b}{it}
%    \end{macrocode}

% \macro{autobold}
% Implement |\mathbold| (or alterantive macro name):
%    \begin{macrocode}
\define@key{mafx@}{mathbold}[\mathbold]{\let#1=\mafx@mathbold}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Spacing Adjustment for Fractions.}
%
% Save primitive definition of |\over| into |\@@over|
% (compatible with \ctanpkg{amsmath}):
%
%    \begin{macrocode}
\ifdefined\@@over\else\let\@@over=\over\fi
%    \end{macrocode}

% Define math class selectors for fractions (without/with delimiters):
%    \begin{macrocode}
\let\mafx@frac@class=\mathinner
\def\mafx@frac@delimclass{\mathopen{}\mathclose}
%    \end{macrocode}

% \macro{\frac}
% Define replacement for |\frac| which uses a configurable
% math class selector:
%    \begin{macrocode}
\DeclareRobustCommand{\mafx@frac}[2]{%
    \mafx@frac@class{\begingroup#1\endgroup\@@over#2}}
%    \end{macrocode}

% \macro{\genfrac}
% Define replacement for |\@genfrac| (called by |\genfrac|)
% which uses the appropriate math class selector.
% If the package \ctanpkg{amsmath} is not loaded, this definition will
% have no impact:
%    \begin{macrocode}
\def\mafx@@genfrac#1#2#3#4#5{\begingroup
  \ifx#2\@@overwithdelims\let\mafx@frac@class\mafx@frac@delimclass\fi
  \ifx#2\@@abovewithdelims\let\mafx@frac@class\mafx@frac@delimclass\fi
  \ifx#2\@@atopwithdelims\let\mafx@frac@class\mafx@frac@delimclass\fi
  \mafx@frac@class{#1{\begingroup#4\endgroup#2#3\relax#5}}%
  \endgroup}
%    \end{macrocode}

% \macro{frac}
% Implement the replacement for |\frac| and |\genfrac|:
%    \begin{macrocode}
\define@key{mafx@}{frac}[]{%
  \let\frac=\mafx@frac
  \let\@genfrac=\mafx@@genfrac
}
%    \end{macrocode}

% \macro{fracclass}
% \macro{fracdelimclass}
% Configure the math classes for fractions (without/with delimiters):
%    \begin{macrocode}
\define@key{mafx@}{fracclass}{\def\mafx@frac@class{#1}}
\define@key{mafx@}{fracdelimclass}{\def\mafx@frac@delimclass{#1}}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Small Fractions.}
%
% \macro{\rfrac}
% Define a fraction in text style or smaller
% using the ordinary math class (no surrounding space), e.g.: $\frac{1}{2}$:
%    \begin{macrocode}
\DeclareRobustCommand{\mafx@rfrac}[2]{{\mathchoice
  {\textstyle{\begingroup#1\endgroup\@@over#2}}%
  {\begingroup#1\endgroup\@@over#2}%
  {\begingroup#1\endgroup\@@over#2}%
  {\begingroup#1\endgroup\@@over#2}}}
%    \end{macrocode}

% \macro{rfrac}
% Implement |\rfrac| (or alternative macro name):
%    \begin{macrocode}
\define@key{mafx@}{rfrac}[\rfrac]{\let#1=\mafx@rfrac}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Vulgar Fractions.}
%
% Define the math class and spacing parameters as (negative) spaces
% around the dividing slash:
%    \begin{macrocode}
\let\mafx@vfrac@class=\mathinner
\def\mafx@vfrac@preskip{\thinmuskip}
\def\mafx@vfrac@postskip{0.6667\thinmuskip}
%    \end{macrocode}
%
% \macro{\vfrac}
% Define a vulgar representation of a rational number, e.g.: $^1\!/\!_2$.
% Automatically switch to math mode if in text mode:
%    \begin{macrocode}
\DeclareRobustCommand{\mafx@vfrac}[2]{\ifmmode%
  \mafx@vfrac@class{\textstyle%
    ^{#1}\mkern-\mafx@vfrac@preskip/\mkern-\mafx@vfrac@postskip_{#2}}%
  \else$\mafx@vfrac{#1}{#2}$\fi}
%    \end{macrocode}

% \macro{vfrac}
% Implement |\vfrac| (or alternative macro name):
%    \begin{macrocode}
\define@key{mafx@}{vfrac}[\vfrac]{\let#1=\mafx@vfrac}
%    \end{macrocode}

% \macro{vfracclass}
% \macro{vfracskippre}
% \macro{vfracskippost}
% Define configurable skip parameters for |\vfrac|:
%    \begin{macrocode}
\define@key{mafx@}{vfracclass}{\def\mafx@vfrac@class{#1}}
\define@key{mafx@}{vfracskippre}{\def\mafx@vfrac@preskip{#1}}
\define@key{mafx@}{vfracskippost}{\def\mafx@vfrac@postskip{#1}}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Spacing Adjustment for Roots.}
%
% Define some parameters for the improved root macros.
% |\mafx@root@close| stores the relative height
% where the closing bar for the radical starts;
% empty disables the closing bar.
% |\mafx@root@class| stores the math class for a root.
% |\mafx@root@endskip| stores space to be added after the radicant
% but within the radical in math units.
% |\mafx@root@preskip| and |\mafx@root@postskip| store space to be added
% before or after the radical sign:
%    \begin{macrocode}
\let\mafx@root@close=\@empty
\def\mafx@root@class{}
\def\mafx@root@endskip{0.6667\thinmuskip}
\def\mafx@root@preskip{0mu}
\def\mafx@root@postskip{0.3333\thinmuskip}
%    \end{macrocode}

% \macro{\sqrt}
% Replacement for |\sqrt| which passes an
% empty first argument instead of calling |\sqrtsign|:
%    \begin{macrocode}
\DeclareRobustCommand\mafx@sqrt{\@ifnextchar[\@sqrt{\@sqrt[]}}
\def\mafx@@sqrt[#1]{\root#1\of}
%    \end{macrocode}

% \macro{\root}
% Replacement for |\root| \ldots|\of|
% which stores the |\leftroot| and |\uproot| parameters
% specified in the exponent (see package \ctanpkg{amsmath}).
% It does so by first storing them in global parameters
% and then converting them to local ones to avoid
% interference with nested radicals.
% As usual, the macro then passes on to |\r@@t|
% with |\mathpalette|:
%    \begin{macrocode}
\def\mafx@root#1\of{%
  \setbox\rootbox\hbox{$\m@th\scriptscriptstyle{%
    \gdef\mafx@gleftroot{0}\gdef\mafx@guproot{0}%
    \def\leftroot##1{\gdef\mafx@gleftroot{##1}}%
    \def\uproot##1{\gdef\mafx@guproot{##1}}%
    #1}$}%
  \let\mafx@leftroot=\mafx@gleftroot
  \let\mafx@uproot=\mafx@guproot
  \mathpalette\r@@t}
%    \end{macrocode}

% The replacement for |\r@@t| typesets the radical by
% placing the exponent in an elevated box.
% First, select desirect math class:
%    \begin{macrocode}
\def\mafx@r@@t#1#2{\mafx@root@class{%
%    \end{macrocode}
% Determine the font selector for the current style:
%    \begin{macrocode}
  \ifx#1\scriptstyle\let\mafx@tmp@fontsel=\scriptfont\else
  \ifx#1\scriptscriptstyle\let\mafx@tmp@fontsel=\scriptscriptfont\else
  \let\mafx@tmp@fontsel=\textfont\fi\fi
%    \end{macrocode}
% Generate a radical with empty radicand in cramped style
% (see package \ctanpkg{mathtools})
% at the desired height and depth and store in a box
% for subsequent measurements:
%    \begin{macrocode}
  \sbox\z@{$\m@th#1\nulldelimiterspace=\z@\radical\z@{#2}$}%
  \setlength\dimen@{\ht\z@}%
  \ifx#1\displaystyle
    \addtolength\dimen@{-\fontdimen8\textfont3}%
    \addtolength\dimen@{-0.25\fontdimen5\textfont2}%
  \else
    \addtolength\dimen@{-1.25\fontdimen8\mafx@tmp@fontsel3}%
  \fi
  \setbox\z@=\hbox{$\m@th#1\sqrtsign{%
    \vrule width0pt height\dimen@ depth\dp\z@}$}%
%    \end{macrocode}
% Shift to start of exponent box such that end
% will reside at 60\% of radical sign.
% Do not shift if exponent box is sufficiently wide:
%    \begin{macrocode}
  \setlength\dimen@{-\wd\rootbox}%
  \addtolength\dimen@{0.6\wd\z@}%
  \ifdim\dimen@>0pt\else\setlength\dimen@{0pt}\fi%
  \kern\dimen@%
%    \end{macrocode}
% Compute elevation of exponent box as 60\% of radical sign.
% Add length specified by |\uproot|:
%    \begin{macrocode}
  \setlength\dimen@{0.6\ht\z@}\addtolength\dimen@{-0.6\dp\z@}%
  \setbox\@ne\hbox{$\m@th#1\mskip\mafx@uproot mu$}%
  \addtolength\dimen@{\wd\@ne}%
%    \end{macrocode}
% Place exponent box and return to intended start of radical sign:
%    \begin{macrocode}
  \mkern-\mafx@leftroot mu%
  \raise\dimen@\copy\rootbox
  \mkern\mafx@leftroot mu%
  \kern-0.6\wd\z@%
%    \end{macrocode}
% Place radical adding extra kernings |\mafx@root@preskip| and
% |\mafx@root@endskip|:
%    \begin{macrocode}
  \mkern\mafx@root@preskip\sqrtsign{#2\mskip\mafx@root@endskip}%
%    \end{macrocode}
% Add a closing bar to the radical,
% see \url{http://en.wikibooks.org/wiki/LaTeX/Mathematics}.
% If |\mafx@root@close| is empty, ignore.
% Determine the thickness of the rule as font dimension x8.
% Draw a vertical rule starting from relative height |\mafx@root@close|
% of the radical:
%    \begin{macrocode}
  \ifx\mafx@root@close\@empty\else
  \setlength\dimen@{\fontdimen8\mafx@tmp@fontsel3}%
  \lower\dimen@\hbox{%
    \vrule width\dimen@ height\ht\z@ depth -\mafx@root@close\ht\z@}%
  \fi%
%    \end{macrocode}
% Finally, add kerning |\mafx@root@postskip|:
%    \begin{macrocode}
  \mkern\mafx@root@postskip}}
%    \end{macrocode}

% \macro{root}
% Implement replacement |\sqrt| and |\root|:
%    \begin{macrocode}
\define@key{mafx@}{root}[]{%
  \let\sqrt=\mafx@sqrt
  \let\@sqrt=\mafx@@sqrt
  \let\root=\mafx@root
  \let\r@@t=\mafx@r@@t
}
%    \end{macrocode}

% \macro{rootclose}
% \macro{rootclass}
% \macro{rootskipend}
% \macro{rootskippre}
% \macro{rootskipbefore}
% Define configurable parameters for alternative root:
%    \begin{macrocode}
\define@key{mafx@}{rootclose}[0.8]{\def\mafx@root@close{#1}}
\define@key{mafx@}{rootclass}{\let\mafx@root@class=#1}
\define@key{mafx@}{rootskipend}{\def\mafx@root@endskip{#1}}
\define@key{mafx@}{rootskippre}{\def\mafx@root@preskip{#1}}
\define@key{mafx@}{rootskippost}{\def\mafx@root@postskip{#1}}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Space Representing Multiplication.}
%
% \macro{\.}
% Define |\.| to represent a thin math skip when in math mode.
% Retain original definition as an accent in text mode.
% Switch is performed by temporarily storing the appropriate macro
% which is subsequently issued so that the correct number of
% arguments are fetched:
%    \begin{macrocode}
\let\mafx@old@dot=\.
\def\mafx@dot@skip{\thinmuskip}
\def\mafx@dot{\mskip\mafx@dot@skip}
\def\mafx@per@dot{\begingroup\ifmmode\def\mafx@tmp{\mafx@dot}\else
  \def\mafx@tmp{\mafx@old@dot}\fi\expandafter\endgroup\mafx@tmp}
%    \end{macrocode}

% \macro{multskip}
% Implement definition of |\.|:
%    \begin{macrocode}
\define@key{mafx@}{multskip}[\thinmuskip]{%
  \let\.=\mafx@per@dot
  \def\mafx@dot@skip{#1}%
}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Italic Capital Greek Letters.}
%
% \macro{\Gamma}
% \macro{...}
% Define capital Greek letters as letters
% (instead of the default assignment as operators).
% This implementation follows the package \ctanpkg{fixmath}:
%    \begin{macrocode}
\DeclareMathSymbol{\mafx@Gamma}{\mathalpha}{letters}{0}
\DeclareMathSymbol{\mafx@Delta}{\mathalpha}{letters}{1}
\DeclareMathSymbol{\mafx@Theta}{\mathalpha}{letters}{2}
\DeclareMathSymbol{\mafx@Lambda}{\mathalpha}{letters}{3}
\DeclareMathSymbol{\mafx@Xi}{\mathalpha}{letters}{4}
\DeclareMathSymbol{\mafx@Pi}{\mathalpha}{letters}{5}
\DeclareMathSymbol{\mafx@Sigma}{\mathalpha}{letters}{6}
\DeclareMathSymbol{\mafx@Upsilon}{\mathalpha}{letters}{7}
\DeclareMathSymbol{\mafx@Phi}{\mathalpha}{letters}{8}
\DeclareMathSymbol{\mafx@Psi}{\mathalpha}{letters}{9}
\DeclareMathSymbol{\mafx@Omega}{\mathalpha}{letters}{10}
%    \end{macrocode}

% \macro{greekcaps}
% Implement italic capital Greek letters.
% The optional argument is used as a prefix for the definitions:
%    \begin{macrocode}
\define@key{mafx@}{greekcaps}[]{%
  \expandafter\let\csname #1Gamma\endcsname=\mafx@Gamma
  \expandafter\let\csname #1Delta\endcsname=\mafx@Delta
  \expandafter\let\csname #1Theta\endcsname=\mafx@Theta
  \expandafter\let\csname #1Lambda\endcsname=\mafx@Lambda
  \expandafter\let\csname #1Xi\endcsname=\mafx@Xi
  \expandafter\let\csname #1Pi\endcsname=\mafx@Pi
  \expandafter\let\csname #1Sigma\endcsname=\mafx@Sigma
  \expandafter\let\csname #1Upsilon\endcsname=\mafx@Upsilon
  \expandafter\let\csname #1Phi\endcsname=\mafx@Phi
  \expandafter\let\csname #1Psi\endcsname=\mafx@Psi
  \expandafter\let\csname #1Omega\endcsname=\mafx@Omega
}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Lowercase Greek Letters in Standard Math Type.}
%
% \macro{\alpha}
% \macro{...}
% Define lowercase Greek letters in standard type |\mathalpha|
% (instead of the default assiment |\mathord|).
% This implementation follows the package \ctanpkg{fixmath}:
%    \begin{macrocode}
\DeclareMathSymbol{\mafx@alpha}{\mathalpha}{letters}{11}
\DeclareMathSymbol{\mafx@beta}{\mathalpha}{letters}{12}
\DeclareMathSymbol{\mafx@gamma}{\mathalpha}{letters}{13}
\DeclareMathSymbol{\mafx@delta}{\mathalpha}{letters}{14}
\DeclareMathSymbol{\mafx@epsilon}{\mathalpha}{letters}{15}
\DeclareMathSymbol{\mafx@zeta}{\mathalpha}{letters}{16}
\DeclareMathSymbol{\mafx@eta}{\mathalpha}{letters}{17}
\DeclareMathSymbol{\mafx@theta}{\mathalpha}{letters}{18}
\DeclareMathSymbol{\mafx@iota}{\mathalpha}{letters}{19}
\DeclareMathSymbol{\mafx@kappa}{\mathalpha}{letters}{20}
\DeclareMathSymbol{\mafx@lambda}{\mathalpha}{letters}{21}
\DeclareMathSymbol{\mafx@mu}{\mathalpha}{letters}{22}
\DeclareMathSymbol{\mafx@nu}{\mathalpha}{letters}{23}
\DeclareMathSymbol{\mafx@xi}{\mathalpha}{letters}{24}
\DeclareMathSymbol{\mafx@pi}{\mathalpha}{letters}{25}
\DeclareMathSymbol{\mafx@rho}{\mathalpha}{letters}{26}
\DeclareMathSymbol{\mafx@sigma}{\mathalpha}{letters}{27}
\DeclareMathSymbol{\mafx@tau}{\mathalpha}{letters}{28}
\DeclareMathSymbol{\mafx@upsilon}{\mathalpha}{letters}{29}
\DeclareMathSymbol{\mafx@phi}{\mathalpha}{letters}{30}
\DeclareMathSymbol{\mafx@chi}{\mathalpha}{letters}{31}
\DeclareMathSymbol{\mafx@psi}{\mathalpha}{letters}{32}
\DeclareMathSymbol{\mafx@omega}{\mathalpha}{letters}{33}
\DeclareMathSymbol{\mafx@varepsilon}{\mathalpha}{letters}{34}
\DeclareMathSymbol{\mafx@vartheta}{\mathalpha}{letters}{35}
\DeclareMathSymbol{\mafx@varpi}{\mathalpha}{letters}{36}
\DeclareMathSymbol{\mafx@varphi}{\mathalpha}{letters}{39}
\DeclareMathSymbol{\mafx@varrho}{\mathalpha}{letters}{37}
\DeclareMathSymbol{\mafx@varsigma}{\mathalpha}{letters}{38}
%    \end{macrocode}

% \macro{greeklower}
% Implement standard type lowercase Greek letters.
% The optional argument is used as a prefix for the definitions:
%    \begin{macrocode}
\define@key{mafx@}{greeklower}[]{%
  \expandafter\let\csname #1alpha\endcsname=\mafx@alpha
  \expandafter\let\csname #1beta\endcsname=\mafx@beta
  \expandafter\let\csname #1gamma\endcsname=\mafx@gamma
  \expandafter\let\csname #1delta\endcsname=\mafx@delta
  \expandafter\let\csname #1epsilon\endcsname=\mafx@epsilon
  \expandafter\let\csname #1zeta\endcsname=\mafx@zeta
  \expandafter\let\csname #1eta\endcsname=\mafx@eta
  \expandafter\let\csname #1theta\endcsname=\mafx@theta
  \expandafter\let\csname #1iota\endcsname=\mafx@iota
  \expandafter\let\csname #1kappa\endcsname=\mafx@kappa
  \expandafter\let\csname #1lambda\endcsname=\mafx@lambda
  \expandafter\let\csname #1mu\endcsname=\mafx@mu
  \expandafter\let\csname #1nu\endcsname=\mafx@nu
  \expandafter\let\csname #1xi\endcsname=\mafx@xi
  \expandafter\let\csname #1pi\endcsname=\mafx@pi
  \expandafter\let\csname #1rho\endcsname=\mafx@rho
  \expandafter\let\csname #1sigma\endcsname=\mafx@sigma
  \expandafter\let\csname #1tau\endcsname=\mafx@tau
  \expandafter\let\csname #1upsilon\endcsname=\mafx@upsilon
  \expandafter\let\csname #1phi\endcsname=\mafx@phi
  \expandafter\let\csname #1chi\endcsname=\mafx@chi
  \expandafter\let\csname #1psi\endcsname=\mafx@psi
  \expandafter\let\csname #1omega\endcsname=\mafx@omega
  \expandafter\let\csname #1varepsilon\endcsname=\mafx@varepsilon
  \expandafter\let\csname #1vartheta\endcsname=\mafx@vartheta
  \expandafter\let\csname #1varpi\endcsname=\mafx@varpi
  \expandafter\let\csname #1varphi\endcsname=\mafx@varphi
  \expandafter\let\csname #1varrho\endcsname=\mafx@varrho
  \expandafter\let\csname #1varsigma\endcsname=\mafx@varsigma
}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Assorted Functions, Operators, Symbols.}
%
% Define macros for assorted functions, operators, symbols:
%    \begin{macrocode}
\DeclareMathOperator{\mafx@sgn}{sgn}
\DeclareMathOperator*{\mafx@res}{res}
\DeclareMathOperator{\mafx@lcm}{lcm}
\DeclareMathOperator{\mafx@span}{span}
\DeclareMathOperator{\mafx@diag}{diag}
\DeclareMathOperator{\mafx@spec}{spec}
\DeclareMathOperator{\mafx@const}{const}
\DeclareMathOperator{\mafx@id}{id}
\DeclareMathOperator{\mafx@tr}{tr}
%    \end{macrocode}

% Implement assorted functions, operators and symbols individually
% with the option to adjust their macro names:
%    \begin{macrocode}
\define@key{mafx@}{sgn}[\sgn]{\let#1=\mafx@sgn}
\define@key{mafx@}{res}[\res]{\let#1=\mafx@res}
\define@key{mafx@}{lcm}[\lcm]{\let#1=\mafx@lcm}
\define@key{mafx@}{diag}[\diag]{\let#1=\mafx@diag}
\define@key{mafx@}{span}[\Span]{\let#1=\mafx@span}
\define@key{mafx@}{spec}[\spec]{\let#1=\mafx@spec}
\define@key{mafx@}{const}[\const]{\let#1=\mafx@const}
\define@key{mafx@}{id}[\id]{\let#1=\mafx@id}
\define@key{mafx@}{tr}[\tr]{\let#1=\mafx@tr}
%    \end{macrocode}
%
% \macro{genop}
% Implement all assorted functions, operators and symbols:
%    \begin{macrocode}
\define@key{mafx@}{genop}[]{%
  \ProvideMathFix{sgn,res,lcm,diag,span,spec,const}%
}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Real and Imaginary Part Projectors in Text Form.}
%
% \macro{\Re}
% \macro{\Im}
% Define a different notation for real and imaginary part projectors are the
% textual symbols `Re' and `Im':
%    \begin{macrocode}
\DeclareMathOperator{\mafx@Re}{Re}
\DeclareMathOperator{\mafx@Im}{Im}
%    \end{macrocode}

% \macro{reim}
% Implement textual notation for \verb+\Re+ and \verb+\Im+:
%    \begin{macrocode}
\define@key{mafx@}{reim}[\Re\Im]{%
  \expandafter\let\@firstoftwo#1=\mafx@Re
  \expandafter\let\@secondoftwo#1=\mafx@Im
}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Remaining Inverse Trigonometric Functions.}
%
% \macro{\arccot}
% \macro{\arcsec}
% \macro{\arccsc}
% Define remaining inverse trigonometric functions
% and their inverses:
%    \begin{macrocode}
\DeclareMathOperator{\mafx@arccot}{arccot}
\DeclareMathOperator{\mafx@arcsec}{arcsec}
\DeclareMathOperator{\mafx@arccsc}{arccsc}
%    \end{macrocode}

% \macro{trig}
% Implement remaining trigonometric functions:
%    \begin{macrocode}
\define@key{mafx@}{trig}[]{%
  \let\arccot=\mafx@arccot
  \let\arcsec=\mafx@arcsec
  \let\arccsc=\mafx@arccsc
}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Remaining Hyperbolic Functions.}
%
% \macro{\sech}
% \macro{\csch}
% \macro{\ar...h}
% Define remaining hyperbolic functions
% and their inverses:
%    \begin{macrocode}
\DeclareMathOperator{\mafx@sech}{sech}
\DeclareMathOperator{\mafx@csch}{csch}
\DeclareMathOperator{\mafx@arsinh}{arsinh}
\DeclareMathOperator{\mafx@arcosh}{arcosh}
\DeclareMathOperator{\mafx@artanh}{artanh}
\DeclareMathOperator{\mafx@arcoth}{arcoth}
\DeclareMathOperator{\mafx@arsech}{arsech}
\DeclareMathOperator{\mafx@arcsch}{arcsch}
%    \end{macrocode}

% \macro{hyp}
% Implement remaining hyperbolic functions:
%    \begin{macrocode}
\define@key{mafx@}{hyp}[]{%
  \let\sech=\mafx@sech
  \let\csch=\mafx@csch
  \let\arsinh=\mafx@arsinh
  \let\arcosh=\mafx@arcosh
  \let\artanh=\mafx@artanh
  \let\arcoth=\mafx@arcoth
  \let\arsech=\mafx@arsech
  \let\arcsch=\mafx@arcsch
}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Characteristics of Maps.}
%
% Define macros for characteristics of maps:
%    \begin{macrocode}
\DeclareMathOperator{\mafx@dom}{dom}
\DeclareMathOperator{\mafx@supp}{supp}
\DeclareMathOperator{\mafx@codom}{codom}
\DeclareMathOperator{\mafx@im}{im}
\DeclareMathOperator{\mafx@rank}{rank}
\DeclareMathOperator{\mafx@coker}{coker}
%    \end{macrocode}

% Implement characteristics of maps
% with the option to adjust the macro name for |\im|
% to evade potential clashes for two letter definition:
%    \begin{macrocode}
\define@key{mafx@}{mapchar}[\im]{%
  \let\dom=\mafx@dom
  \let\supp=\mafx@supp
  \let\codom=\mafx@codom
  \let#1=\mafx@im
  \let\rank=\mafx@rank
  \let\coker=\mafx@coker
}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Classes of Structure-Preserving Maps.}
%
% \macro{\Hom}
% \macro{\End}
% \macro{\Isom}
% \macro{\Aut}
% Define classes of structure-preserving maps:
%    \begin{macrocode}
\DeclareMathOperator{\mafx@Hom}{Hom}
\DeclareMathOperator{\mafx@End}{End}
\DeclareMathOperator{\mafx@Isom}{Isom}
\DeclareMathOperator{\mafx@Aut}{Aut}
%    \end{macrocode}

% \macro{mapclass}
% Implement classes of structure-preserving maps:
%    \begin{macrocode}
\define@key{mafx@}{mapclass}[]{%
  \let\Hom=\mafx@Hom
  \let\Eng=\mafx@Eng
  \let\Isom=\mafx@Isom
  \let\Aut=\mafx@Aut
}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Differential Operators for Vectors.}
%
% \macro{\grad}
% \macro{\div}
% \macro{\curl}
% Define differential operators gradient, divergence and curl
% (alternative form rot):
%    \begin{macrocode}
\DeclareMathOperator{\mafx@grad}{grad}
\DeclareMathOperator{\mafx@div}{div}
\DeclareMathOperator{\mafx@curl}{curl}
\DeclareMathOperator{\mafx@rot}{rot}
%    \end{macrocode}

% \macro{vecdiff}
% Implement differential operators for vectors individually
% with the option to adjust their macro names.
% Implement alternative rot for curl/rotor
% with the option to adjust its macro name:
%    \begin{macrocode}
\define@key{mafx@}{vecdiff}[]{%
  \let\grad=\mafx@grad
  \let\div=\mafx@div
  \let\curl=\mafx@curl
}
\define@key{mafx@}{vecrot}[\curl]{\let#1=\mafx@rot}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Mathematical Constants.}
%
% \macro{\econst}
% \macro{\iunit}
% \macro{\piconst}
% Define macros for mathematical constants.
% Use |\uppi| for upright |\pi| if available at the time of loading,
% otherwise use plain |\pi| hoping for availability of an upright version:
%    \begin{macrocode}
\let\mafx@econst@class=\mathinner
\DeclareRobustCommand{\mafx@econstup}{\mafx@econst@class{\operator@font e}}
\DeclareRobustCommand{\mafx@econstit}{\mafx@econst@class{\mathnormal{e}}}
\DeclareRobustCommand{\mafx@iunitup}{{\operator@font i}}
\DeclareRobustCommand{\mafx@iunitit}{{\mathnormal{i}}}
\DeclareRobustCommand{\mafx@iunitnb}{{\mathnormal{\mathring\imath}}}
\ifdefined\uppi
\DeclareRobustCommand{\mafx@piconstup}{{\uppi}}
\else\ifdefined\symup
\DeclareRobustCommand{\mafx@piconstup}{{\symup{\pi}}}
\else
\DeclareRobustCommand{\mafx@piconstup}{{\operator@font\pi}}
\fi\fi
\ifdefined\symit
\DeclareRobustCommand{\mafx@piconstit}{{\symit{\pi}}}
\else
\DeclareRobustCommand{\mafx@piconstit}{{\mathnormal{\pi}}}
\fi
%    \end{macrocode}

% \macro{econst}
% \macro{numsetclass}
% \macro{iunit}
% \macro{piconst}
% Implement mathematical constants individually
% with the option to adjust their macro names:
%    \begin{macrocode}
\define@key{mafx@}{econst}[\econst]{\let#1=\mafx@econstup}
\define@key{mafx@}{econst*}[\econst]{\let#1=\mafx@econstit}
\define@key{mafx@}{econstclass}{\let\mafx@econst@class=#1}
\define@key{mafx@}{iunit}[\iunit]{\let#1=\mafx@iunitup}
\define@key{mafx@}{iunit*}[\iunit]{\let#1=\mafx@iunitit}
\define@key{mafx@}{iunit*nb}[\iunit]{\let#1=\mafx@iunitnb}
\define@key{mafx@}{piconst}[\piconst]{\let#1=\mafx@piconstup}
\define@key{mafx@}{piconst*}[\piconst]{\let#1=\mafx@piconstit}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Derivative Symbols.}
%
% Define macros for derivative symbols:
%    \begin{macrocode}
\DeclareRobustCommand{\mafx@derup}{{\operator@font d}}
\DeclareRobustCommand{\mafx@derit}{{\mathnormal{d}}}
\DeclareRobustCommand{\mafx@diffup}[1]{\mathinner{\mafx@derup#1}}
\DeclareRobustCommand{\mafx@diffit}[1]{\mathinner{\mafx@derit#1}}
%    \end{macrocode}

% Implement derivative symbols individually
% with the option to adjust their macro names:
%    \begin{macrocode}
\define@key{mafx@}{der}[\der]{\let#1=\mafx@derup}
\define@key{mafx@}{der*}[\der]{\let#1=\mafx@derit}
\define@key{mafx@}{diff}[\diff]{\let#1=\mafx@diffup}
\define@key{mafx@}{diff*}[\diff]{\let#1=\mafx@diffit}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Assorted Symbols.}
%
% Define macros for assorted symbols:
%    \begin{macrocode}
\DeclareRobustCommand{\mafx@order}{\mathnormal{o}}
\DeclareRobustCommand{\mafx@Order}{\mathnormal{O}}
\DeclareRobustCommand{\mafx@OrderCal}{\mathcal{O}}
\DeclareRobustCommand{\mafx@defeq}{\mathrel{\mathop:}=}
\DeclareRobustCommand{\mafx@eqdef}{=\mathrel{\mathop:}}
\DeclareRobustCommand{\mafx@lapl}{\mathnormal{\Delta}}
%    \end{macrocode}

% Implement assorted symbols individually
% with the option to adjust their macro names:
%    \begin{macrocode}
\define@key{mafx@}{order}[\order]{\let#1=\mafx@order}
\define@key{mafx@}{Order}[\Order]{\let#1=\mafx@Order}
\define@key{mafx@}{Order*}[\Order]{\let#1=\mafx@OrderCal}
\define@key{mafx@}{defeq}[\defeq]{\let#1=\mafx@defeq}
\define@key{mafx@}{eqdef}[\eqdef]{\let#1=\mafx@eqdef}
\define@key{mafx@}{lapl}[\lapl]{\let#1=\mafx@lapl}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Number Sets.}
%
% \macro{\numset}
% Define macros for number sets.
% Use default font |\mathbb| if available, otherwise |\mathbf|:
%    \begin{macrocode}
\ifdefined\mathbb
\let\mafx@numset@font=\mathbb
\else
\let\mafx@numset@font=\mathbf
\fi
\DeclareRobustCommand{\mafx@numset}{\mafx@numset@font}
\DeclareRobustCommand{\mafx@numsetZ}{\mafx@numset{Z}}
\DeclareRobustCommand{\mafx@numsetQ}{\mafx@numset{Q}}
\DeclareRobustCommand{\mafx@numsetR}{\mafx@numset{R}}
\DeclareRobustCommand{\mafx@numsetC}{\mafx@numset{C}}
\DeclareRobustCommand{\mafx@numsetH}{\mafx@numset{H}}
\DeclareRobustCommand{\mafx@numsetN}{\mafx@numset{N}}
\DeclareRobustCommand{\mafx@numsetO}{\mafx@numset{O}}
%    \end{macrocode}

% \macro{numset}
% \macro{numsetfont}
% \macro{numsets}
% Implement number set font and a collection of standard number sets by name:
%    \begin{macrocode}
\define@key{mafx@}{numset}[\numset]{\let#1=\mafx@numset}
\define@key{mafx@}{numsetfont}{\let\mafx@numset@font=#1}
\define@key{mafx@}{numsets}[]{%
  \let\Integer=\mafx@numsetZ
  \let\Rational=\mafx@numsetQ
  \let\Real=\mafx@numsetR
  \let\Complex=\mafx@numsetC
  \let\Quaternion=\mafx@numsetH
  \let\Natural=\mafx@numsetN
  \let\Octonion=\mafx@numsetO
}
%    \end{macrocode}

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \paragraph{Package Options.}
%
% \macro{\ProvideMathFix}
% Implement a particular fix or option:
%    \begin{macrocode}
\newcommand{\ProvideMathFix}[1]{\setkeys{mafx@}{#1}}
%    \end{macrocode}

% Pass undeclared options on to \ctanpkg{keyval} processing:
%    \begin{macrocode}
\DeclareOption*{\expandafter\ProvideMathFix\expandafter{\CurrentOption}}
%    \end{macrocode}
%
% Process package options:
%    \begin{macrocode}
\ProcessOptions
%    \end{macrocode}

%\iffalse
%</package>
%\fi
%
\endinput
