% \iffalse
%
%% File `euler.dtx'.
%% Copyright (C) 1992 Frank Jensen.  All rights reserved.
%% Copyright (C) 1993--1995 Frank Jensen and Frank Mittelbach.
%% All rights reserved.
%
% Please send error reports and suggestions for improvements to:
%
%                          Frank Jensen
%                          Aalborg University
%                          DK-9220 Aalborg \O
%                          Denmark
%               Internet:  <fj@iesd.auc.dk>
%
% \fi

\def\fileversion{v2.5}
\def\filedate{1995/03/05}

% \CheckSum{606}
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%
% \iffalse
%<*driver>
\documentclass{ltxdoc}
\begin{document}
   \DocInput{euler.dtx}
\end{document}
%</driver>
% \fi
%
% \newcommand\beton{\texttt{beton}}
% \newcommand\euler{\texttt{euler}}
% \newcommand\MF{Metafont}
%
% \title{The \euler\ package}
% \author{Frank Jensen\thanks{Updates by Frank Mittelbach.}}
% \date{\filedate}
%
% \maketitle
%
% \section{Introduction}
%
% The \euler\ package provides a setup for using the AMS Euler family
% of fonts for math in \LaTeX\ documents.  The AMS Euler family was
% designed by Hermann Zapf, commissioned by the American Mathematical
% Society.  ``The underlying philosophy of Zapf's Euler design was to
% capture the flavor of mathematics as it might be written by a
% mathematician with excellent handwriting.''~\cite{concrete-tug} 
%
% The \euler\ package is based on Knuth's macros for the book
% ``Concrete Mathematics''~\cite{concrete}.  Knuth's macros can be
% found through anonymous ftp to \texttt{labrea.\allowbreak
% stanford.edu}: look for the file \texttt{gkpmac.tex} in directory
% \texttt{pub/tex/local/lib}.  The Euler fonts can be found through
% anonymous ftp to \texttt{e-math.ams.org}: look in directory
% \texttt{pub/tex/amsfonts}.
%
% The purpose of the \euler\ package is to provide the math part of
% the look of~\cite{concrete}.  The other part (text fonts) is
% provided by the \beton\ package.  The reason for creating two
% packages is to make it easy to use the Euler math fonts together
% with other text fonts (in particular, it appears that the Euler
% fonts match many of the popular PostScript fonts pretty well).
%
% Basically, the \euler\ package provides the same setup (the same
% definitions, math codes, etc.)\ as \texttt{gkpmac.tex} with respect
% to the Euler fonts.  However, Knuth~\cite{concrete-tug} admits that
% the macros were written for one specific project, namely to typeset
% the ``Concrete Mathematics'' book~\cite{concrete}.  So, the \euler\
% package actually does a little more than \texttt{gkpmac.tex}: for
% example, some `exotic' symbols, present in CM math italic, are
% missing from the Euler fonts; the \euler\ package takes care of this
% (whereas \texttt{gkpmac.tex} does not).
%
% The use of the \euler\ package requires a lot of care when entering
% the manuscript, since the package will cause, e.g., math numerals to
% come from the Euler Roman fonts; these numerals are easily
% distinguished from the normal text numerals.  This implies that
% sloppy typing is clearly exposed: imagine how 
% ``|$x$ is either 1 or $-1$|'' will appear when typeset!  In general,
% the typist will in each case have to decide whether an input
% fragment is a math or a non-math entity.  This holds true even for
% the tiniest details, such as punctuation characters (parentheses,
% colons, semicolons, commas, and periods).
%
% Finally, a few words about the technical quality of the fonts (there
% are no doubts about their artistic quality): The fonts are not tuned
% for low resolution rendering: I recommend at least 600dpi.  The
% fonts employ none of the tuning machinery of CM: e.g., they do not
% use the `blacker' parameter specified in each \MF\ mode definition,
% indicating that they might look somewhat light on printers that
% normally require a large `blacker' value.
%
% \section{What the \euler\ package provides}
%
% The \euler\ package defines two new math alphabet identifiers,
% |\mathscr| (Euler Script, uppercase letters only) and |\mathfrak|
% (Euler Fraktur, both lowercase and uppercase letters).
%
% By default, the original meaning of |\mathcal| is preserved, but if
% the \euler\ package is loaded with the \texttt{mathcal} option,
% |\mathcal| will produce Euler Script letters instead of the usual
% Computer Modern calligraphic letters.
%
% Also, by default, the \euler\ package does not redefine the
% |\mathbf| math alphabet identifier; it will still produce bold CM
% letters and digits.  However, loading the \euler\ package with the
% \texttt{mathbf} option will cause |\mathbf| to produce bold Euler
% Roman letters and digits.  Another way to get bold symbols is to use
% the |\boldsymbol| command provided by the \texttt{amsbsy} package
% (part of AMS-\LaTeX).
%
% Some users do not like the |\hat| accent glyph present in the Euler
% fonts (the \euler\ package uses this accent glyph be default).  To
% use the |\hat| accent glyph from the text font instead, load the
% \euler\ package with the \texttt{text-hat-accent} option.
%
% In \cite{concrete}, the space around relations in displays was
% increased (from `5mu plus 5mu' to `10mu minus 3mu').  The \euler\
% package does not change this space, since this is (for most cases)
% controlled by the \LaTeX\ \texttt{eqnarray} environment.  Also,
% in~\cite{concrete}, displays are left justified with a suitable
% indentation; we leave such matters to the general layout.
%
% \StopEventually {
% \begin{thebibliography}{1}
%    \bibitem{concrete}
%       \textsc{R. L. Graham}, \textsc{D. E. Knuth}, and
%       \textsc{O. Patashnik}.
%       \newblock \textit{Concrete Mathematics}.
%       \newblock Addison-Wesley, 1989. 
%    \bibitem{concrete-tug}
%       \textsc{D. E. Knuth}.
%       \newblock Typesetting Concrete Mathematics.
%       \newblock \textsl{TUGboat} 10(1):31--36, 1989.
% \end{thebibliography}
% }
%
% \section{Hello world}
%
% First, we announce the package.
%    \begin{macrocode}
%<*package>
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
\ProvidesPackage{euler}[\filedate\space\fileversion]
\typeout{Package: `euler' \fileversion\space <\filedate> (FJ and FMi)}
%    \end{macrocode}
%
% \section{Font and other definitions}
%
% The AMS Euler family consists of: Euler Roman (medium and bold),
% Euler Fraktur (medium and bold), Euler Script (medium and bold), and
% Euler Extension (medium only).  The \texttt{.fd} files for these
% fonts are defined in the \texttt{amsfonts.fdd} file (part of the
% AMSFonts distribution).
%
% \subsection{Euler Roman}
%
% The Euler Roman fonts replace the Computer Modern Math Italic fonts,
% located in the `letters' math symbol font:
%    \begin{macrocode}
\DeclareSymbolFont{letters}{U}{eur}{m}{n}
\SetSymbolFont{letters}{bold}{U}{eur}{b}{n}
%    \end{macrocode}
%
% In math mode, digits should come from the Euler Roman fonts.  As in
% standard \LaTeX, we assign the type |\mathalpha| to the digits which
% means that they will vary with math alphabets.  One of the reasons
% for this is that footnote numbers are set in math mode, and we want
% these numbers to come from the text font; this is accomplished by
% setting the \TeX\ primitive |\fam| to zero.  (See
% Section~\ref{footnotes} below.)
%    \begin{macrocode}
\DeclareMathSymbol{0}\mathalpha{letters}{"30}
\DeclareMathSymbol{1}\mathalpha{letters}{"31}
\DeclareMathSymbol{2}\mathalpha{letters}{"32}
\DeclareMathSymbol{3}\mathalpha{letters}{"33}
\DeclareMathSymbol{4}\mathalpha{letters}{"34}
\DeclareMathSymbol{5}\mathalpha{letters}{"35}
\DeclareMathSymbol{6}\mathalpha{letters}{"36}
\DeclareMathSymbol{7}\mathalpha{letters}{"37}
\DeclareMathSymbol{8}\mathalpha{letters}{"38}
\DeclareMathSymbol{9}\mathalpha{letters}{"39}
%    \end{macrocode}
% The uppercase greek letters are also taken from the Euler Roman
% fonts.  We make them ordinary symbols (i.e., of type |\mathord|) as
% opposed to \texttt{plain.tex}, \texttt{gkpmac.tex}, and standard
% \LaTeX, which make them vary according to |\fam|.
%    \begin{macrocode}
\DeclareMathSymbol\Gamma  \mathord{letters}{"00}
\DeclareMathSymbol\Delta  \mathord{letters}{"01}
\DeclareMathSymbol\Theta  \mathord{letters}{"02}
\DeclareMathSymbol\Lambda \mathord{letters}{"03}
\DeclareMathSymbol\Xi     \mathord{letters}{"04}
\DeclareMathSymbol\Pi     \mathord{letters}{"05}
\DeclareMathSymbol\Sigma  \mathord{letters}{"06}
\DeclareMathSymbol\Upsilon\mathord{letters}{"07}
\DeclareMathSymbol\Phi    \mathord{letters}{"08}
\DeclareMathSymbol\Psi    \mathord{letters}{"09}
\DeclareMathSymbol\Omega  \mathord{letters}{"0A}
%    \end{macrocode}
% Euler doesn't have the special variants of |\sigma| and |\rho|:
%    \begin{macrocode}
\let\varsigma=\sigma
\let\varrho=\rho
%    \end{macrocode}
%
% \begin{macro}{\mathbf}
% If the \euler\ package is loaded with the \texttt{mathbf}
% option, |\mathbf| should produce bold Euler Roman letters and
% digits.
%    \begin{macrocode}
\DeclareOption{mathbf}
   {\AtBeginDocument{\DeclareMathAlphabet\mathbf{U}{eur}{b}{n}}}
%    \end{macrocode}
% \end{macro}
% Note the use of |\AtBeginDocument|; it ensures that the redefinition
% overrides the default settings (Section~\ref{text-fonts}).
%
% \subsection{Euler Fraktur}
%
% \begin{macro}{\mathfrak}
% The Euler Fraktur fonts get their own math symbol font.  We define a
% math alphabet identifier---|\mathfrak|---to access this symbol font.
% For compatibility with previous versions of the \euler\
% package, we define |\frak| as an alias for |\mathfrak| (the
% \texttt{amsfonts} package also provides this alias).
%    \begin{macrocode}
\DeclareSymbolFont{EulerFraktur}{U}{euf}{m}{n}
\SetSymbolFont{EulerFraktur}{bold}{U}{euf}{b}{n}
\DeclareSymbolFontAlphabet\mathfrak{EulerFraktur}
\@ifpackageloaded{amsfonts}{}{\newcommand\frak{\mathfrak}}
%    \end{macrocode}
% \end{macro}
%
% The following characters come from the Euler Fraktur symbol font (as
% defined in \texttt{gkpmac.tex}):
%    \begin{macrocode}
\DeclareMathSymbol{!}\mathord  {EulerFraktur}{"21}
\DeclareMathSymbol{(}\mathopen {EulerFraktur}{"28} 
\DeclareMathSymbol{)}\mathclose{EulerFraktur}{"29} 
\DeclareMathSymbol{+}\mathbin  {EulerFraktur}{"2B}
\DeclareMathSymbol{-}\mathbin  {EulerFraktur}{"2D}
\DeclareMathSymbol{=}\mathrel  {EulerFraktur}{"3D}
\DeclareMathSymbol{[}\mathopen {EulerFraktur}{"5B}
\DeclareMathSymbol{]}\mathclose{EulerFraktur}{"5D}
%    \end{macrocode}
% There is a curious detail here: The type of `!' is |\mathclose| in
% \texttt{plain.tex} (and standard \LaTeX) but |\mathord| in
% \texttt{gkpmac.tex}.  The reason for this is probably that one
% should not use Euler punctuation characters as part of the
% text,\footnote{In particular, one should watch out for punctuation
% characters in displays: Is, e.g., an exclamation point part of a
% formula or part of the text?  (With Computer Modern, it didn't
% really matter, but it does matter with Euler!)} and punctuation
% characters in math are usually operators.  E.g., in CSP
% (Communicating Sequential Processes), `!'~denotes an output
% operation, a tightly binding binary operator; there is usually no
% space around this operator (to indicate the high precedence).
%
% The Euler Fraktur symbol font contains more punctuation characters
% than defined above.  We want to use these characters as they look
% better when they appear in math formulas (there are some strange
% looking formulas in~\cite{concrete}).  Even if one may argue that,
% e.g., semicolon is most often used in the text sense (in displays),
% it is more consistent and easier to remember if everything in math
% mode is Euler.
%    \begin{macrocode}
\DeclareMathSymbol{"}\mathord  {EulerFraktur}{"7D}
\DeclareMathSymbol{&}\mathord  {EulerFraktur}{"26}
\DeclareMathSymbol{:}\mathrel  {EulerFraktur}{"3A}
\DeclareMathSymbol{;}\mathpunct{EulerFraktur}{"3B}
\DeclareMathSymbol{?}\mathord  {EulerFraktur}{"3F}
\DeclareMathSymbol{^}\mathord  {EulerFraktur}{"5E}
\DeclareMathSymbol{`}\mathord  {EulerFraktur}{"12}
%    \end{macrocode}
% Here, we also changed the type of `?' to |\mathord| to be consistent
% with the type of~`!'.  Regarding the math codes assigned by
% \texttt{INITEX}: The Euler fonts do not have the glyphs for |\#|,
% |\$|, |\%|, and \texttt{@}, so these glyphs are still taken from the
% text fonts.  Note also that we do not set the math code for the
% other quote character: it is active in math mode (code
% \texttt{"8000}); it produces primes (and should continue to do so).
%    \begin{macrocode}
\DeclareMathDelimiter{(}{EulerFraktur}{"28}{largesymbols}{"00}
\DeclareMathDelimiter{)}{EulerFraktur}{"29}{largesymbols}{"01}
\DeclareMathDelimiter{[}{EulerFraktur}{"5B}{largesymbols}{"02}
\DeclareMathDelimiter{]}{EulerFraktur}{"5D}{largesymbols}{"03}
%    \end{macrocode}
%
% \begin{macro}{\oldstylenums}
% \begin{macro}{\TextOldstyle}\begin{macro}{\MathOldstyle}
% We provide a new definition of the |\oldstylenums| macro: this
% definition allows us to modify the generation of non-aligning (aka
% ``oldstyle'') numerals in text and in math separately, using two
% hooks, |\TextOldstyle| and |\MathOldstyle|.
%    \begin{macrocode}
\DeclareRobustCommand\oldstylenums[1]%
  {\begingroup
      \spaceskip\fontdimen\tw@\font
      \TextOldstyle \MathOldstyle #1%
   \endgroup}
%    \end{macrocode}
% In math, the |\oldstylenums| macro should produce Euler oldstyle
% digits (located in the Euler Fraktur fonts):
%    \begin{macrocode}
\def\MathOldstyle{\mathgroup\symEulerFraktur}
%    \end{macrocode}
% By default, oldstyle digits in text come from the Computer Modern
% fonts:
%    \begin{macrocode}
\providecommand\TextOldstyle{\usefont{OML}{cmm}\f@series{it}}
%    \end{macrocode}
% \end{macro}\end{macro}\end{macro}
%
% \subsection{Euler Script}
%
% \begin{macro}{\mathscr}
% Like the Euler Fraktur fonts, the Euler Script fonts also get their
% own symbol font.  We define a math alphabet
% identifier---|\mathscr|---to access this symbol font.  For
% compatibility with previous versions of the \euler\ package,
% we define |\scr| as an alias for |\mathscr|.
%    \begin{macrocode}
\DeclareSymbolFont{EulerScript}{U}{eus}{m}{n}
\SetSymbolFont{EulerScript}{bold}{U}{eus}{b}{n}
\DeclareSymbolFontAlphabet\mathscr{EulerScript}
\newcommand\scr{\mathscr}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\mathcal}
% If the \euler\ package is loaded with the \texttt{mathcal}
% option, |\mathcal| should produce Euler Script letters.
%    \begin{macrocode}
\DeclareOption{mathcal}{\renewcommand\mathcal{\mathscr}}
%    \end{macrocode}
% \end{macro}
%
% The following is equivalent to the definitions in \texttt{gkpmac.tex}
% concerning the Euler Script fonts:
%    \begin{macrocode}
\DeclareMathSymbol\aleph\mathord{EulerScript}{"40}
%\DeclareMathSymbol\equiv\mathrel{EulerScript}{"11}
%\let\cong=\equiv % lowres bars weren't spaced right
%\DeclareMathSymbol\leq \mathrel{EulerScript}{"14} 
%\let\le=\leq % seems to have been eliminated
%\DeclareMathSymbol\geq \mathrel{EulerScript}{"15} 
%\let\ge=\geq % ditto
\DeclareMathSymbol\Re   \mathord{EulerScript}{"3C}
\DeclareMathSymbol\Im   \mathord{EulerScript}{"3D}
%    \end{macrocode}
% Knuth used a slightly different version of the Euler Script fonts
% that had special `$\le$' and `$\ge$' glyphs.  Actually, the source
% for the AMS Euler Script medium (but not the bold) font also
% contains these glyphs; however, they are commented out (no
% explanation is given).  The definitions of |\equiv| and |\cong| are
% also commented out in \texttt{gkpmac.tex} (with the reason as given
% above, i.e., problems with low resolution rendering).
%    \begin{macrocode}
\DeclareMathDelimiter\vert
                 \mathord{EulerScript}{"6A}{largesymbols}{"0C}
\DeclareMathDelimiter\backslash
                 \mathord{EulerScript}{"6E}{largesymbols}{"0F}
%    \end{macrocode}
%
% The Euler Script fonts constitute a partial replacement for the
% Computer Modern `symbols' math symbol fonts.  (None of the remaining
% definitions in this section were included in \texttt{gkpmac.tex}.)
%    \begin{macrocode}
%\DeclareMathSymbol{-}\mathbin{EulerScript}{"00} % already done
\DeclareMathSymbol{|}\mathord{EulerScript}{"6A}
\DeclareMathDelimiter{|}{EulerScript}{"6A}{largesymbols}{"0C}
%    \end{macrocode}
% (The minus signs in the Euler Fraktur and Script fonts are
% identical, i.e., the sources are identical.)
%    \begin{macrocode}
\DeclareMathSymbol\neg     \mathord{EulerScript}{"3A}
\let\lnot=\neg
\DeclareMathSymbol\wedge   \mathbin{EulerScript}{"5E}
\let\land=\wedge
\DeclareMathSymbol\vee     \mathbin{EulerScript}{"5F}
\let\lor=\vee
\DeclareMathSymbol\setminus\mathbin{EulerScript}{"6E}
\DeclareMathSymbol\sim     \mathrel{EulerScript}{"18}
\DeclareMathSymbol\mid     \mathrel{EulerScript}{"6A}
\DeclareMathDelimiter\arrowvert
        \mathord{EulerScript}{"6A}{largesymbols}{"3C} % ???
%    \end{macrocode}
% (There are no |\approx| or |\simeq| to go with |\sim|.)  In Plain
% \TeX\null, the characters |{|, |\|, and~|}| are assigned math codes
% (and |\| is also given a delimiter code); these are the only visible
% ASCII (7-bit) characters that we don't give a math code (we don't
% assign math codes to any of the invisible ASCII characters).
%
% The Euler Script fonts also contain a section sign~(\S):
%    \begin{macrocode}
\DeclareMathSymbol\mathsection\mathord{EulerScript}{"78}
%    \end{macrocode}
%
% \subsection{Euler Extension}
%
% We allocate a new symbol font group for this font:
%    \begin{macrocode}
\DeclareSymbolFont{EulerExtension}{U}{euex}{m}{n}
%    \end{macrocode}
% This font contains some alternative versions of some Computer Modern
% symbols.  The \texttt{amsmath} package (part of AMS-\LaTeX)
% redefines the |\coprod|, |\prod|, and |\sum| symbols; to make the
% \euler\ package work correctly with the \texttt{amsmath}
% package, we need to take different actions depending on whether the
% \texttt{amsmath} package has been loaded before the \euler\
% package or not.  Note: This will \emph{not} work with the
% \texttt{amstex} package.
%    \begin{macrocode}
\@ifpackageloaded{amsmath}
   {\DeclareMathSymbol\coprod@\mathop{EulerExtension}{"60}%
    \DeclareMathSymbol\prod@  \mathop{EulerExtension}{"51}%
    \DeclareMathSymbol\sum@   \mathop{EulerExtension}{"50}}
   {\DeclareMathSymbol\coprod \mathop{EulerExtension}{"60}%
    \DeclareMathSymbol\prod   \mathop{EulerExtension}{"51}%
    \DeclareMathSymbol\sum    \mathop{EulerExtension}{"50}}
%    \end{macrocode}
% We shall respectfully ask the user not to use the \texttt{amstex}
% package.
%    \begin{macrocode}
\AtBeginDocument
   {\@ifpackageloaded{amstex}%
       {\PackageWarningNoLine{euler}{Please do not use `amstex'.
                 Use `amsmath' instead}{}}}
%    \end{macrocode}
%    \begin{macrocode}
\DeclareMathSymbol\intop  \mathop {EulerExtension}{"52}
\DeclareMathSymbol\ointop \mathop {EulerExtension}{"48}
\DeclareMathSymbol\braceld\mathord{EulerExtension}{"7A} 
\DeclareMathSymbol\bracerd\mathord{EulerExtension}{"7B}
\DeclareMathSymbol\bracelu\mathord{EulerExtension}{"7C} 
\DeclareMathSymbol\braceru\mathord{EulerExtension}{"7D}
\DeclareMathSymbol\infty  \mathord{EulerExtension}{"31}
%    \end{macrocode}
% It is not enough to substitute the Euler integral sign for the
% Computer Modern integral sign, if we are using the \texttt{amsmath}
% package.  The multiple integral signs will look bad.  The following
% will make them look better.
%    \begin{macrocode}
\AtBeginDocument
   {\@ifpackageloaded{amsmath}%
       {\def\intkern@{\mkern -6mu }%
        \def\ints@#1{\mkern -3mu
           \mathop{\mkern 3mu
              \intop
              \ifnum #1=\z@ \intdots@ \else
                 \intkern@
                 \ifnum #1>\tw@ \intop\intkern@
                    \ifnum #1>\thr@@ \intop\intkern@ \fi
                 \fi
              \fi
              \intop
           }\ilimits@
        }%
       }{}}
%    \end{macrocode}
% All Euler arrows come from the Euler Extension font:
%    \begin{macrocode}
\DeclareMathSymbol\nearrow\mathrel{EulerExtension}{"25}
\DeclareMathSymbol\searrow\mathrel{EulerExtension}{"26}
\DeclareMathSymbol\nwarrow\mathrel{EulerExtension}{"2D}
\DeclareMathSymbol\swarrow\mathrel{EulerExtension}{"2E}
%    \end{macrocode}
%    \begin{macrocode}
\DeclareMathSymbol\Leftrightarrow\mathrel{EulerExtension}{"2C}
\DeclareMathSymbol\Leftarrow     \mathrel{EulerExtension}{"28}
\DeclareMathSymbol\Rightarrow    \mathrel{EulerExtension}{"29}
\DeclareMathSymbol\leftrightarrow\mathrel{EulerExtension}{"24}
\DeclareMathSymbol\leftarrow     \mathrel{EulerExtension}{"20} 
\let\gets=\leftarrow
\DeclareMathSymbol\rightarrow    \mathrel{EulerExtension}{"21} 
\let\to=\rightarrow
%    \end{macrocode}
%    \begin{macrocode}
\DeclareMathDelimiter\uparrow
              \mathrel{EulerExtension}{"22}{largesymbols}{"78}
\DeclareMathDelimiter\downarrow
              \mathrel{EulerExtension}{"23}{largesymbols}{"79}
\DeclareMathDelimiter\updownarrow
              \mathrel{EulerExtension}{"6C}{largesymbols}{"3F}
\DeclareMathDelimiter\Uparrow
              \mathrel{EulerExtension}{"2A}{largesymbols}{"7E}
\DeclareMathDelimiter\Downarrow
              \mathrel{EulerExtension}{"2B}{largesymbols}{"7F}
\DeclareMathDelimiter\Updownarrow
              \mathrel{EulerExtension}{"6D}{largesymbols}{"77}
%    \end{macrocode}
%    \begin{macrocode}
\DeclareMathSymbol\leftharpoonup   \mathrel{EulerExtension}{"18}
\DeclareMathSymbol\leftharpoondown \mathrel{EulerExtension}{"19}
\DeclareMathSymbol\rightharpoonup  \mathrel{EulerExtension}{"1A}
\DeclareMathSymbol\rightharpoondown\mathrel{EulerExtension}{"1B}
%    \end{macrocode}
%
% Note the funny mixture of the Euler Script and Extension fonts:
%    \begin{macrocode}
\DeclareMathDelimiter\lbrace
              \mathopen{EulerScript}{"66}{EulerExtension}{"08}
\DeclareMathDelimiter\rbrace
             \mathclose{EulerScript}{"67}{EulerExtension}{"09}
%    \end{macrocode}
%
% \section{More math}
%
% Actually, we still need some Computer Modern fonts: We need the
% equals sign for long/extensible (horizontal) double arrows, and we
% need the minus sign for the single arrows!  The Euler Extension font
% is based on the \MF\ code for Computer Modern, and we need the
% Computer Modern equals and minus signs to make long/extensible arrows.
%
% We allocate math alphabets to produce the equals and minus signs for
% arrows.  Note that since Euler arrows are only available in medium
% weight (they come from the Euler Extension font which is only
% available in medium weight), we let all math versions of these math
% alphabets refer to medium weight fonts.
%    \begin{macrocode}
\DeclareMathAlphabet\cm@equals@alphabet{OT1}{cmr}{m}{n}
\DeclareMathAlphabet\cm@minus@alphabet{OMS}{cmsy}{m}{n}
%    \end{macrocode}
% Note that we use OT1 encoding for the |\cm@equals@alphabet|, even
% though T1 encoding may be the default for the users system.
%
% Also, note that we already have the Computer Modern \texttt{cmsy}
% family assigned to a symbol font (namely the `symbols' symbol font).
% However, taking the minus sign directly from this symbol font would
% make long/extensible arrows come out wrong in the `bold' math
% version.  (It is perhaps ``overkill'' to allocate a math alphabet
% just for this purpose?)
%
% \begin{macro}{\Relbar}\begin{macro}{\relbar}
% The long arrows are made using the macros |\Relbar| (for double
% arrows) and |\relbar| (for single arrows).  The standard \LaTeX\
% definitions of these macros use the `\texttt{=}' and `\texttt{-}'
% characters to produce the extension part of the long arrows.  Since
% we have changed the math codes of these characters (they are now
% taken from the Euler Fraktur fonts in math mode), we have to
% redefine the |\Relbar| and |\relbar| macros.
%    \begin{macrocode}
\def\Relbar{\mathrel{\cm@equals@alphabet{\mathchar"703D}}}
\def\cm@minus{{\cm@minus@alphabet{\mathchar"7000}}}
\def\relbar{\mathrel{\smash\cm@minus}}
          % \smash, because - has the same height as +
%    \end{macrocode}
% \end{macro}\end{macro}
%
% \begin{macro}{\leftarrowfill}\begin{macro}{\rightarrowfill}
% Unfortunately, since the definitions of the ``arrow-filling'' macros
% (|\leftarrowfill| and |\rightarrowfill|) in standard \LaTeX\ still
% use explicit minus signs (instead of |\relbar|), we also have to
% redefine those macros:
%    \begin{macrocode}
\def\leftarrowfill
   {$\m@th\mathord\leftarrow\mkern-6mu%
     \cleaders\hbox{$\mkern-2mu\cm@minus\mkern-2mu$}\hfill
     \mkern-6mu\cm@minus$}
\def\rightarrowfill
   {$\m@th\cm@minus\mkern-6mu%
     \cleaders\hbox{$\mkern-2mu\cm@minus\mkern-2mu$}\hfill
     \mkern-6mu\mathord\rightarrow$}
%    \end{macrocode}
% We have defined |\cm@minus| to produce a Computer Modern minus sign
% of type |\mathord|.  We thereby save a few |\mathord| tokens
% (compared to the definitions of |\leftarrowfill| and
% |\rightarrowfill| in standard \LaTeX).
% \end{macro}\end{macro}
%
% There are a few symbols in the original Computer Modern Math Italic
% fonts that are not present in the Euler fonts.  We simply take them
% from the CM fonts.
%    \begin{macrocode}
\DeclareSymbolFont{cmmigroup}{OML}{cmm}{m}{it}
\SetSymbolFont{cmmigroup}{bold}{OML}{cmm}{b}{it}
\DeclareMathAccent\vec          \mathord{cmmigroup}{"7E}
\DeclareMathSymbol\triangleleft \mathbin{cmmigroup}{"2F}
\DeclareMathSymbol\triangleright\mathbin{cmmigroup}{"2E}
\DeclareMathSymbol\star         \mathbin{cmmigroup}{"3F}
\DeclareMathSymbol\lhook        \mathrel{cmmigroup}{"2C}
\DeclareMathSymbol\rhook        \mathrel{cmmigroup}{"2D}
\DeclareMathSymbol\flat         \mathord{cmmigroup}{"5B}
\DeclareMathSymbol\natural      \mathord{cmmigroup}{"5C}
\DeclareMathSymbol\sharp        \mathord{cmmigroup}{"5D}
\DeclareMathSymbol\smile        \mathrel{cmmigroup}{"5E}
\DeclareMathSymbol\frown        \mathrel{cmmigroup}{"5F}
%    \end{macrocode}
% Note that the arrow head of |\vec| is slanted; this looks a bit
% strange in combination with an upright font such as Euler Roman.
%
% Also, note that in the `bold' math version, arrows with hooks will
% come out wrong (the hooks will be bold, but the arrow heads will be
% of medium weight).  This can be repaired in a similar way as the
% long/extensible arrows, but is it worth it to allocate a math
% alphabet just for this purpose?
%
% Finally, Knuth wanted a little extra space before the prime
% superscript:
%    \begin{macrocode}
\begingroup
   \catcode`\'=\active
   \gdef'{^\bgroup\mskip2mu\prim@s} % more space before '
\endgroup
%    \end{macrocode}
%
% Open question: The |\dots| and |\ldots| macros produce dots
% (periods) from the Euler fonts; the |\ddots| and |\vdots| macros
% produce dots from the text font; and the |\cdots| macro produces
% dots from the Computer Modern `symbols' math symbol font.  Should we
% do something about this?
%
% \section{Text fonts in math}\label{text-fonts}
%
% The text fonts used in math through math alphabets and the
% `operators' symbol font should be the same as the fonts used for the
% main text.  (It is now easy to replace the fonts for the `operators'
% symbol font, since the uppercase greek letters are now taken from
% the Euler Roman fonts.)
%
% In order to reduce the total number of fonts needed, we shall---if
% possible---use text fonts in the same encoding for both text and
% math.  We therefore determine whether T1 encoding has been selected
% as the default encoding.  We define a switch---|\ifCorkEncoding|---for
% that purpose.
%    \begin{macrocode}
\newif\ifCorkEncoding
\edef\@tempa{\encodingdefault}\def\@tempb{T1}
\ifx\@tempa\@tempb
   \CorkEncodingtrue
\else
   \CorkEncodingfalse
\fi
%    \end{macrocode}
% Note that we determine the encoding to use at the time the \euler\
% package is loaded (\emph{not} at the end of the preamble).  This
% allows the user to retain OT1 encoding for text fonts used in math
% (other packages may depend on that) by selecting T1 encoding
% \emph{after} the \euler\ package has been loaded.
%
% We redefine the `operators' symbol font and all math alphabets
% defined by the \LaTeX\ kernel.  Due to the current implementation of
% math accents that take their glyphs from text fonts, all text fonts
% must be used in a common encoding.  The only \LaTeX\ `base' package
% that defines extra math alphabets is the \texttt{oldlfont} package.
% However, this package cannot be used together with the \euler\
% package (it allocates too many symbol fonts).  In other words, the
% following setup should suffice for most users.
%    \begin{macrocode}
\ifCorkEncoding
  \AtBeginDocument
    {\DeclareSymbolFont{operators}{T1}\rmdefault\mddefault\updefault
     \SetSymbolFont{operators}{bold}{T1}\rmdefault\bfdefault\updefault
     \DeclareMathAlphabet\mathbf{T1}\rmdefault\bfdefault\updefault
     \DeclareMathAlphabet\mathsf{T1}\sfdefault\mddefault\updefault
     \DeclareMathAlphabet\mathit{T1}\rmdefault\mddefault\itdefault
     \DeclareMathAlphabet\mathtt{T1}\ttdefault\mddefault\updefault
     \SetMathAlphabet\mathsf{bold}{T1}\sfdefault\bfdefault\updefault
     \SetMathAlphabet\mathit{bold}{T1}\rmdefault\bfdefault\itdefault}
\else
  \AtBeginDocument
    {\DeclareSymbolFont{operators}{OT1}\rmdefault\mddefault\updefault
     \SetSymbolFont{operators}{bold}{OT1}\rmdefault\bfdefault\updefault
     \DeclareMathAlphabet\mathbf{OT1}\rmdefault\bfdefault\updefault
     \DeclareMathAlphabet\mathsf{OT1}\sfdefault\mddefault\updefault
     \DeclareMathAlphabet\mathit{OT1}\rmdefault\mddefault\itdefault
     \DeclareMathAlphabet\mathtt{OT1}\ttdefault\mddefault\updefault
     \SetMathAlphabet\mathsf{bold}{OT1}\sfdefault\bfdefault\updefault
     \SetMathAlphabet\mathit{bold}{OT1}\rmdefault\bfdefault\itdefault}
\fi
%    \end{macrocode}
% Note that we perform the setup at the end of the preamble (and not
% while the \euler\ package is being input).  This implies that any
% changes made to, e.g., |\rmdefault| by a package loaded after the
% \euler\ package are seen.
%
% The standard \LaTeX\ math setup assumes that OT1 encoded text fonts
% are used in math.  When using T1 encoded fonts, we have to redefine
% the macros that access accents from the text fonts.
%    \begin{macrocode}
\ifCorkEncoding
   \DeclareMathAccent\grave\mathalpha{operators}{"00}
   \DeclareMathAccent\acute\mathalpha{operators}{"01}
   \DeclareMathAccent\tilde\mathalpha{operators}{"03}
   \DeclareMathAccent\ddot \mathalpha{operators}{"04}
   \DeclareMathAccent\check\mathalpha{operators}{"07}
   \DeclareMathAccent\breve\mathalpha{operators}{"08}
   \DeclareMathAccent\bar  \mathalpha{operators}{"09}
   \DeclareMathAccent\dot  \mathalpha{operators}{"0A}
\fi
%    \end{macrocode}
%
% \begin{macro}{\hat}
% There is one more accent that is normally taken from the `operators'
% symbol font, namely the |\hat| accent.  This is the only accent
% provided by the Euler fonts; we shall use this accent by default.
% (A curious fact is that Knuth devoted a fairly large portion of
% \texttt{gkpmac.tex} to the construction of a $\phi$ with a hat
% accent---using the |\widehat| macro).
%    \begin{macrocode}
\DeclareMathAccent\hat\mathalpha{EulerFraktur}{"5E}
%    \end{macrocode}
% However, some users do not like this |\hat| accent.  They prefer the
% accent glyph to be taken from the text font (similar to the other
% accents).
%    \begin{macrocode}
\DeclareOption{text-hat-accent}
   {\ifCorkEncoding
       \DeclareMathAccent\hat\mathalpha{operators}{"02}%
    \else
       \DeclareMathAccent\hat\mathalpha{operators}{"5E}%
    \fi}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\hbar}
% The |\hbar| macro in standard \LaTeX\ is composed of the letter~`h'
% from the `letters' symbol font and the macron (`bar') accent from
% the `operators' symbol font.  With the `letters' symbol font now
% being Euler Roman, the bar is no longer positioned correctly.  We
% choose the following definition (the \texttt{9mu} in the original
% definition has been changed to \texttt{8mu}):
%    \begin{macrocode}
\ifCorkEncoding
   \DeclareMathSymbol\euler@hbar\mathord{operators}{"09}
\else
   \DeclareMathSymbol\euler@hbar\mathord{operators}{"16}
\fi
\def\hbar{{\euler@hbar\mkern-8muh}}
%    \end{macrocode}
% \end{macro}
%
% \section{Footnotes}\label{footnotes}
%
% \begin{macro}{\@makefnmark}
% Footnote numbers are not math entities, so they should be produced
% by digits from the text font.  Since footnote markers (whether they
% are numbers or symbols) are produced in math mode, we can accomplish
% this by selecting |\operator@font|; this will cause digits to be
% taken from the `operators' symbol font (which is the same as the
% font used for text; see previous section).
%    \begin{macrocode}
\def\@makefnmark{\hbox{$\operator@font^{\@thefnmark}\m@th$}}
%    \end{macrocode}
% \end{macro}
%
% \section{Processing options}
%
% Finally, we must remember to process the options:
%    \begin{macrocode}
\ProcessOptions
%</package>
%    \end{macrocode}
%
% \Finale
\endinput
