% \CheckSum{635} % \iffalse % % File `eulervm.dtx'. % Copyright (c) 1999--2005 Walter Schmidt % % This file is part of the `Euler-VM Bundle'. % ------------------------------------------- % % It may be distributed and/or modified under the conditions % of the LaTeX Project Public License, either version 1.1 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.1 or later is part of all distributions of LaTeX % version 1999/06/01 or later. % % The list of all files belonging to the `Euler-VM Bundle' is % given in the file `manifest.txt'. % % \fi % % \iffalse %<*driver> \ProvidesFile{eulervm.dtx} % % %\ProvidesPackage{eulervm} %\ProvidesFile{uzeur.fd}% %\ProvidesFile{uzeus.fd}% %\ProvidesFile{uzeuex.fd}% [2005/01/11 v4.0 (WaS)] % %<*driver> \documentclass{ltxdoc} \OnlyDescription \usepackage{flafter} \usepackage{caption}[2004/01/23] \renewcommand{\rmdefault}{pplx} \linespread{1.06} \usepackage[euler-digits]{eulervm} % *** We are using Palatino and Euler-VM at 10pt. *** % *** Do NOT change this through ltxdoc.cfg! *** \def\tempa{cmss}\ifx\sfdefault\tempa \usepackage[scaled]{helvet} \fi \usepackage{url,mflogo} \captionsetup{labelfont={small,bf},textfont={small}} \DeclareMathAccent\eulerhat\mathalpha{symbols}{222} \renewcommand{\TeX}{TeX\@} \renewcommand{\LaTeX}{La\TeX} \begin{document} \DocInput{eulervm.dtx} \end{document} % % \fi % % \GetFileInfo{eulervm.dtx} % \renewcommand{\labelitemi}{$\triangleright$} % \newcommand\Lopt[1]{\textsf{#1}} % \let\Lpack\Lopt % \title{The Euler Virtual Math Fonts \\ for use with \LaTeX} % \author{Walter Schmidt\thanks{\texttt{w-a-schmidt@gmx.net}}} % \date{\fileversion{} -- \filedate} % % \maketitle % % \begin{abstract}\noindent % The Euler math fonts are suitable for math typesetting in conjunction with a % variety of popular text fonts which do not provide math character sets % of their own. % Euler-VM is a set of virtual math fonts based on Euler and CM, accompanied % by a macro package for easy use with \LaTeX. % \end{abstract} % % \tableofcontents % % % % \section{The Euler math fonts} % `With Donald Knuth's assistance and encouragement, Hermann Zapf, one of the % premier font designers of this century, was commissioned to create designs % for Fraktur and script, and for a somewhat experimental, upright cursive % alphabet that would represent a mathematician's handwriting on a blackboard % and that could be used in place of italic. The designs that resulted were % named Euler, in honor of Leonhard Euler, a prominent mathematician of the % eighteenth century. Zapf's designs were rendered in \MF{} code by graduate % students at Stanford, working under Knuth's direction. [\dots] % Knuth also noticed that the % style of some symbols in the Computer Modern extension font, in particular % the integral sign, was too slanted to be attractive with Euler, and % consequently he prepared a new (partial) extension font for use with Euler.' % \cite{amsfndoc} % % Knuth's book \textit{Concrete Mathematics} was typeset using % the Concrete font family for text and the Euler fonts for math. % With \LaTeX, the particular math font setup of this book can be mimicked % by means of the package \Lpack{euler}, see \cite{euler}. % In the meantime it became % obvious that the Euler fonts match other text font families equally well. % % Unfortunately, the Euler fonts do not comprise all symbols required for % mathematical typesetting with \LaTeX. As a result, the \Lpack{euler} package % needs to redefine most of \LaTeX's math font setup, so that certain % symbols are taken from Euler, whereas others must still come from the % CM math fonts. % % % \section{The Euler-VM fonts} % Euler Virtual Math (Euler-VM) % is a set of \emph{virtual} fonts based primarily on the Euler fonts. % The missing symbols are taken from Computer Modern, and the encoding % follows CM-Math as closely as possible. % This approach has several advantages over immediately using the % \emph{real} Euler fonts, as practiced in the \Lpack{euler} package: % Most noticeably, less \TeX{} resources are consumed, % the quality of various math symbols is improved, % and there will be far lesser compatibility problems with other packages. % % Actually, the reason for creating Euler-VM was the fact that the % \Lpack{euler} package does not provide a usable \cmd{\hbar} or % \cmd{\hslash}, and that the \cmd{\hslash} symbol from the % \Lpack{amssymb} package cannot be used, either, because it follows CM Roman style. % This made the beautiful Euler fonts more or less unusable for % physics and related fields. % The only way to fix this was to provide a `faked' Euler-style \cmd{\hslash} % using the virtual font mechanism. % As a side effect, it was possible to make the layout of the virtual fonts % compatible with CM Math to a large extent, and -- since the style file % had to be rewritten anyway -- further improvements were introduced. % % % \section{Suitable text font families} % Beside the above-mentioned Concrete, the font families Palatino, Aldus % and Melior blend well with Euler -- which is not surprising, since they were % designed by H.~Zapf, too. % The Euler math fonts have also proven to go sufficiently well % with other typefaces such Sabon\footnote{the classical one, not Sabon Next -- unfortunately} % or Minion, that do not differ too much from Euler as far as the weight (stroke width) % and x-height are concerned. % % Changing the default text font family is easy, see \cite{fntguide}. % For instance, in the present document the command % \begin{quote} % |\renewcommand{\rmdefault}{pplx}| % \end{quote} % makes \LaTeX{} use Palatino in place of CM~Roman. % % Do \emph{not} use the Euler math fonts in conjunction % with the default Computer Modern text fonts -- this is ugly! % % % \section{The \LaTeX{} package \Lpack{eulervm}} % % Loading the \Lpack{eulervm} package will redefine \LaTeX's % math font setup, so that the Euler-VM fonts and the default body font % are substituted for CM Math and CM Roman. Roughly said: % \begin{itemize} % \item CM Math Italic is replaced with Euler Roman. % \item CM Calligraphic is replaced with Euler Script. % \item Several operator and delimiter symbols are replaced with % alternative variants matching the Euler style. % \item In numbers and operator names, % CM Roman is replaced with the default text font. % \end{itemize} % Figure \ref{fig:roman} shows the Euler Roman and Script alphabets. % % \begin{figure} % {\centering % $ABCDEFGHIJKLMNOPQRSTUVWXYZ$\\ % $abcdefghijklmnopqrstuvwxyz$\\ % $\Gamma \Delta \Theta \Lambda \Xi \Pi \Sigma \Upsilon \Phi \Psi \Omega$\\ % $ \alpha \beta \gamma \delta \epsilon \varepsilon \zeta \eta \theta \vartheta \iota \kappa % \lambda \mu \nu \xi \pi \varpi \rho % \sigma \tau \upsilon \phi \varphi \chi \psi \omega$\\ % $\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$\\} % \caption{The Euler Roman and Script alphabets} % \label{fig:roman} % \end{figure} % % % \subsection{Special features} % % \subsubsection{The package option \Lopt{small}} % \label{sec:small} % Loading the package with the option \Lopt{small} causes the % Euler fonts to be loaded at 95\% of their nominal size, % thus blending better with certain text font families, % for instance Aldus or Minion. % The option acts also on the AMS symbols and Euler Fraktur fonts, % which can be used by means of the \Lpack{amssymb} and \Lpack{eufrak} packages; % any further math fonts used in your document are, however, % unaffected. % % % \subsubsection{Slashed \textit{h}} % In contrast to `normal' \LaTeX, a \cmd{\hslash} symbol $\hslash$ % is provided, but there is no \cmd{\hbar}. % % % \subsubsection{Bold math alphabet} % The package defines a new math alphabet \cmd{\mathbold} to typeset % math variables, incl.\ Greek, in a bold style: % \begin{verse} % Default: $a, b, c, \dots, z$ \qquad \cmd{\mathbold}: $\mathbold{a, b, c, }\dots,\mathbold{z}$ % \end{verse} % Do not mix this up with \cmd{\mathbf}: The latter will produce % characters from the bold \emph{text} font, whereas \cmd{\mathbold} % will use the bold series of the Euler math font. % % % \subsubsection{Size of the `large' math symbols} % The size of the `large' math symbols is automatically adjusted with respect % to the base font size. You need \emph{not} load the extra package % \Lpack{exscale} for this purpose. % % % \subsection{Text fonts in math} % % \subsubsection{Math alphabets} % Function names as well as math accents are taken from the default text font family. % This holds for the math alphabets \cmd{\mathrm} and \cmd{\mathbf}, too. % The \Lpack{eulervm} package determines the default font family % (i.e.,\ the meaning of the macro \cmd{\familydefault}) % at load time and will apply it for the above purposes then. % In the same way, the math alphabets \cmd{\mathsf} and \cmd{\mathtt} % are mapped to \cmd{\sfdefault} and \cmd{\ttdefault}. % Thus, you should redefine the default text fonts \emph{before} % loading the \Lpack{eulervm} package! % % % \subsubsection{Numbers and punctuation in math mode} % The normal behavior is to take the digits, the comma and the period % from the default text font family. % Popular text fonts may, however, not be suitable for typesetting math: % Maybe the numeral `1' cannot be distinguished % clearly enough from the letter `l', or the style of the numerals does % not sufficiently suit the Euler letters, or you are using oldstyle digits. % Furthermore, most text fonts are scaled linearly, so that the digits % may become too thin when used in super- or subscripts. % % The \Lpack{eulervm} package provides the option \Lopt{euler-digits}, % which makes the digits, the comma and the period come from Euler Roman % in math mode. Note that the Euler fonts come with separate designs sizes % of 10\,pt, 7\,pt and 5\,pt\,! % The option should be used with care, because entering % |$1.23$| will yield a different result than |1.23| then, % and you will in each case have to decide whether an input fragment % is a math or a non-math entity. % The samples on page~\pageref{sec:samples} show the Euler digits. % % % \subsubsection{The `hat' accent for math} % By default, the math accent |\hat| is taken from the text font % With the option \Lopt{euler-hat-accent}, % an alternative one from Euler Fraktur will be used. Compare the % default accent (in the present document from Palatino) with the % alternative variant: % \[ % \hat{u} \longleftrightarrow \eulerhat{u} % \] % % % \subsubsection{Encoding} % The default text font encoding % (i.e.\ the meaning of the macro \cmd{\encodingdefault}) % is determined when \Lpack{eulervm} is loaded; this encoding % will then be applied to any text fonts used in math mode (see above.) % The \Lpack{eulervm} package can, however, handle the encodings OT1 (\LaTeX's default), % T1 and LY1 only. If your preferred text font encoding is a different one, % or if you want to override the default setting for one reason or another, % you have to specify one of the above as a package option, e.g.: % \begin{verse} % |\usepackage[OT1]{eulervm}| % \end{verse} % This makes the \Lpack{eulervm} package use the given encoding for the text % fonts in math, without affecting text mode. % Be sure that the text fonts are actually available with this encoding! % % % \subsection{Using PostScript fonts} % The CM as well as the Euler fonts % are available in both \MF\ and Type1 (PostScript) format. % The collection of Type1 fonts distributed by the AMS % (or in conjunction with VTeX, resp.) is, however, % lacking a few sizes. In contrast to the \Lpack{euler} package, % \Lpack{eulervm} does \emph{not} make use of these missing fonts; % thus, you can create documents which do not require any bitmap fonts. % % % \subsection{Options and command summary} % \noindent Options of the \Lpack{eulervm} package: % \begin{itemize} % \item \Lopt{small}\quad Load the Euler fonts at 95\% of their nominal size. % \item \Lopt{euler-digits}\quad Take numerals, comma and period from % Euler Roman in math mode. % \item \Lopt{euler-hat-accent}\quad Use the \cmd{\hat} accent from Euler Fraktur. % \item \Lopt{OT1}\quad Use OT1 encoding for text fonts in math, regardless % of the default text font encoding. % \item \Lopt{T1}\quad ditto, T1 % \item \Lopt{LY1}\quad ditto, LY1 % \end{itemize} % New commands: % \begin{itemize} % \item \cmd{\mathbold}\quad A bold Euler-style math alphabet. % \item \cmd{\hslash}\quad A slashed Euler-style h. % \end{itemize} % % % \subsection{Known problems and deficiencies} % \begin{itemize} % \item Certain symbols in the bold math fonts are far from perfect. % E.g., the bold equals sign of the Euler fonts % is actually smaller than the regular one! % \item The dot-generating macros such as \cmd{\dots}, \cmd{vdots} etc.\ take % their dots from different fonts. This results partially from a design flaw % in \LaTeX, which can be fixed by loading of the package \Lpack{mathdots}; % yet, the macros \cmd{\cdot} and \cmd{\cdots} will always produce dots from the % Computer Modern Symbols font, which may not perfectly match the other dot % symbols used. % \end{itemize} % % % \section{Credits} % Frank Jensen's \Lpack{euler} package \cite{euler} served as a model % for parts of \Lpack{eulervm}. The implementation % of the \Lopt{OT1}, \Lopt{T1} and \Lopt{LY1} options was adopted % from Frank Mittelbach's \Lpack{lucidabr} package \cite{lucidabr}. % Special thanks to Henning `Hraban' Ramm for typographical and % Frank Mittelbach for \TeX{}nical advice. % % % \section{Sample Formulas} % \label{sec:samples} % \subsubsection*{From the \MF\ book, p.\,298} % [...] If $n > 2$, the identity % \[ % t[u_1,\dots,u_n] = t\bigl[t[u_1,\dots,u_{n_1}], t[u_2,\dots,u_n]\bigr] % \] % defines $t[u_1,\dots,u_n]$ recursively, and it can be shown that the alternative definition % \[ % t[u_1,\dots,u_n] = t\bigl[t[u_1,u_2],\dots,t[u_{n-1},u_n]\bigr] % \] % gives the same result. Indeed, we have % \[ % t[u_1,\dots,u_n] = \sum_{k=1}^n{{n-1} \choose {k-1}} (1-t)^{n-k}t^{k-1}u_k\,\mbox{,} % \] % a Bernstein polynomial of order $n-1$. % % \subsubsection*{From the \MF\ book, p.\,59} % \[ % \frac{x_1 + 20}{x_2 - 20} + \sqrt{a^2 - \frac{2}{3}\sqrt b} % \] % % \subsubsection*{From the \TeX\ book, exercise 19.13} % \[ % \int_{-\infty}^{+\infty} \mathrm{e}^{-x^2}\,\mathrm{d}x = \sqrt{\pi} % \] % % % \StopEventually{ % \begin{thebibliography}{1} % \raggedright % \bibitem{amsfndoc} % American Mathematical Society:\\ % \textit{User's Guide to AMSFonts Version 2.2}.\\ % Jan.\ 1995.\\ % CTAN: \path{fonts/amsfonts/doc/amsfndoc.ps} % \bibitem{concrete} % Ronald L.\ Graham, Donald E. Knuth, and % Oren Patashnik:\\ % \textit{Concrete Mathematics}.\\ % Addison-Wesley, 1989. % \bibitem{fntguide} % \LaTeX3 Project Team (Ed.):\\ % \textit{LaTeX2e font selection.} % (Part of the \LaTeX{} online documentation.) % \bibitem{euler} % Frank Jensen:\\ % \textit{The \Lpack{euler} package, v2.5}.\\ % Mar.\ 1995.\\ % CTAN: \path{macros/latex/contrib/euler/} % \bibitem{lucidabr} % Frank Mittelbach:\\ % \textit{The \Lpack{lucidabr} package, v4.10}.\\ % Jan.\ 1998.\\ % CTAN: \path{macros/latex/contrib/psnfssx/lucidabr/} % \end{thebibliography} % } % % {\sloppy % \section{The implementation of the \Lpack{eulervm} package} % % \subsection{Switching off font warnings} % We suppress the annoying `warnings' about math fonts being redefined: % \begin{macrocode} %<*package> \let\evm@info\@font@info \let\evm@warning\@font@warning \let\@font@info\@gobble \let\@font@warning\@gobble % \end{macrocode} % % \subsection{Options} % In addition to usual options processing we also have to memorize the % options via \cmd{\newif}'s in order to handle some cross-dependencies. % % The option \Lopt{small}. % Note that only a fixed scaling of 0.95 is provided, % for the time being. This suits, for instance, the Aldus, % and Minion text fonts. % \begin{macrocode} \DeclareOption{small}{% \def\zeu@Scale{.95}} % \end{macrocode} % % The option \Lopt{euler-digits}: % \begin{macrocode} \newif\ifevm@ed \DeclareOption{euler-digits}{% \evm@edtrue \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 option \Lopt{euler-hat-accent}: % \begin{macrocode} \newif\ifevm@eha \DeclareOption{euler-hat-accent}{\evm@ehatrue} % \end{macrocode} % % The text encoding for the `operators' font: % \begin{macrocode} \edef\operator@encoding{\encodingdefault} \DeclareOption{OT1}{\def\operator@encoding{OT1}} \DeclareOption{T1}{\def\operator@encoding{T1}} \DeclareOption{LY1}{\def\operator@encoding{LY1}} % \end{macrocode} % % The \Lopt{icomma} option is provided only for compatibility % with previous versions. % \begin{macrocode} \newif\ifevm@ic \DeclareOption{icomma}{\evm@ictrue} % \end{macrocode} % % % \subsection{Math font setup} % We redefine the `letters', `symbols' and `largesymbols' % alphabets. % The `operators' font will be redefined only after processing % of the options. % \begin{macrocode} \DeclareSymbolFont{letters} {U}{zeur}{m}{n} \SetSymbolFont{letters}{bold} {U}{zeur}{b}{n} \DeclareSymbolFont{symbols} {U}{zeus}{m}{n} \SetSymbolFont{symbols}{bold} {U}{zeus}{b}{n} \DeclareSymbolFont{largesymbols} {U}{zeuex}{m}{n} \DeclareMathAlphabet{\mathbold} {U}{zeur}{b}{n} % \end{macrocode} % % % \subsection{The `letters' math font} % % The uppercase Greek letters are to be taken from Euler Roman now: % \begin{macrocode} \DeclareMathSymbol\Gamma {\mathalpha}{letters}{"00} \DeclareMathSymbol\Delta {\mathalpha}{letters}{"01} \DeclareMathSymbol\Theta {\mathalpha}{letters}{"02} \DeclareMathSymbol\Lambda {\mathalpha}{letters}{"03} \DeclareMathSymbol\Xi {\mathalpha}{letters}{"04} \DeclareMathSymbol\Pi {\mathalpha}{letters}{"05} \DeclareMathSymbol\Sigma {\mathalpha}{letters}{"06} \DeclareMathSymbol\Upsilon {\mathalpha}{letters}{"07} \DeclareMathSymbol\Phi {\mathalpha}{letters}{"08} \DeclareMathSymbol\Psi {\mathalpha}{letters}{"09} \DeclareMathSymbol\Omega {\mathalpha}{letters}{"0A} % \end{macrocode} % Lowercase Greek letters are made |\mathalpha|, too, because % we want the |\mathbold| command to act on them: % \begin{macrocode} \DeclareMathSymbol{\alpha} {\mathalpha}{letters}{"0B} \DeclareMathSymbol{\beta} {\mathalpha}{letters}{"0C} \DeclareMathSymbol{\gamma} {\mathalpha}{letters}{"0D} \DeclareMathSymbol{\delta} {\mathalpha}{letters}{"0E} \DeclareMathSymbol{\epsilon}{\mathalpha}{letters}{"0F} \DeclareMathSymbol{\zeta} {\mathalpha}{letters}{"10} \DeclareMathSymbol{\eta} {\mathalpha}{letters}{"11} \DeclareMathSymbol{\theta} {\mathalpha}{letters}{"12} \DeclareMathSymbol{\iota} {\mathalpha}{letters}{"13} \DeclareMathSymbol{\kappa} {\mathalpha}{letters}{"14} \DeclareMathSymbol{\lambda} {\mathalpha}{letters}{"15} \DeclareMathSymbol{\mu} {\mathalpha}{letters}{"16} \DeclareMathSymbol{\nu} {\mathalpha}{letters}{"17} \DeclareMathSymbol{\xi} {\mathalpha}{letters}{"18} \DeclareMathSymbol{\pi} {\mathalpha}{letters}{"19} \DeclareMathSymbol{\rho} {\mathalpha}{letters}{"1A} \DeclareMathSymbol{\sigma} {\mathalpha}{letters}{"1B} \DeclareMathSymbol{\tau} {\mathalpha}{letters}{"1C} \DeclareMathSymbol{\upsilon}{\mathalpha}{letters}{"1D} \DeclareMathSymbol{\phi} {\mathalpha}{letters}{"1E} \DeclareMathSymbol{\chi} {\mathalpha}{letters}{"1F} \DeclareMathSymbol{\psi} {\mathalpha}{letters}{"20} \DeclareMathSymbol{\omega} {\mathalpha}{letters}{"21} \DeclareMathSymbol{\varepsilon}{\mathalpha}{letters}{"22} \DeclareMathSymbol{\vartheta}{\mathalpha}{letters}{"23} \DeclareMathSymbol{\varpi} {\mathalpha}{letters}{"24} \DeclareMathSymbol{\varphi} {\mathalpha}{letters}{"27} % \end{macrocode} % % {\sloppy % When the upper-case Greek letters are of type |\mathalpha| % and do \emph{not} come from the operators font, |\mathrm{\Omega}| % yields garbage. % This is likely to happen in conjunction with the packages % \Lpack{gensymb} and \Lpack{units}. As a countermeasure, we provide % a macro |\upOmega| with type |\mathord|. The \Lpack{gensymb} package will % automatically use this macro, rather than |\Omega|. This is the only way % to make |\unit{\ohm}| work as expected. % For the sake of full compatibility with other packages, a corresponding % |\upDelta| is made available, too. % } % \begin{macrocode} \DeclareMathSymbol\upOmega {\mathord}{letters}{"0A} \DeclareMathSymbol\upDelta {\mathord}{letters}{"01} % \end{macrocode} % % Euler doesn't have the special variants of |\sigma| and |\rho|: % \begin{macrocode} \let\varsigma=\sigma \let\varrho=\rho % \end{macrocode} % % Euler-VM has its own |\hslash|, but there is no |\hbar|: % \begin{macrocode} \DeclareMathSymbol{\evm@hslash}{\mathord}{letters}{128} \def\evm@hbar{\evm@hslash% \PackageWarning{eulervm}{% Symbol \protect\hbar\space not available;\MessageBreak \protect\hslash\space will be used instead}} % \end{macrocode} % The actual macros \cmd{\hbar} and \cmd{\hslash} will be defined % after the preamble. % % The slash used to come from `operators': % \begin{macrocode} \DeclareMathDelimiter{/}{\mathord}{letters}{61}{largesymbols}{"0E} % \end{macrocode} % % % \subsection{The `symbols' math font} % The following characters are usually taken from the `operators' % font; now they come from `symbols': % \begin{macrocode} \DeclareMathSymbol{+}\mathbin {symbols}{171} \DeclareMathSymbol{:}\mathrel {symbols}{186} \DeclareMathSymbol{=}\mathrel {symbols}{189} % \end{macrocode} % \begin{macrocode} \DeclareMathDelimiter{(}{\mathopen} {symbols}{168}{largesymbols}{"00} \DeclareMathDelimiter{)}{\mathclose}{symbols}{169}{largesymbols}{"01} \DeclareMathDelimiter{[}{\mathopen} {symbols}{219}{largesymbols}{"02} \DeclareMathDelimiter{]}{\mathclose}{symbols}{221}{largesymbols}{"03} % \end{macrocode} % % The font family \texttt{zeus} provides a semicolon in slot~187, % an exclamation mark in slot~161, and a question mark in slot~191, too; % for the time being these are unused. % % % \subsection{Extensible arrows} % % 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. % These characters come, however, from Euler Fraktur now. Thus we % have to redefine the |\Relbar| and |\relbar| macros so as to use % appropriately scaled characters from CM, which are % provided in our virtual `letters' font. % \begin{macrocode} \DeclareMathSymbol{\cm@minus}{\mathord}{letters}{129} \def\relbar{\mathrel{\smash\cm@minus}} \let\Relbar\undefined \DeclareMathSymbol{\Relbar}{\mathrel}{letters}{130} % \end{macrocode} % 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} % % % \subsection{Miscellaneous} % Our virtual `largesymbols' font comprises \texttt{euex10}, which % provides also the $\infty$ symbol. % \begin{macrocode} \DeclareMathSymbol{\infty}{\mathord}{largesymbols}{153} % \end{macrocode} % % Knuth wanted a little extra space before the prime superscript: % \begin{macrocode} \begingroup \catcode`\'=\active \gdef'{^\bgroup\mskip2mu\prim@s} \endgroup % \end{macrocode} % % % \subsection{Options procesing} % This must be done before the `operators' font is defined. % \begin{macrocode} \ProcessOptions\relax % \end{macrocode} % We still have to map the comma and the period to the text font, % in case the \Lopt{euler-digits} option has \emph{not} been selected: % \begin{macrocode} \ifevm@ed\relax\else \DeclareMathSymbol{,}{\mathpunct}{operators}{44} \DeclareMathSymbol{.}{\mathord}{operators}{46} \DeclareMathSymbol{\ldotp}{\mathpunct}{operators}{46} \fi % \end{macrocode} % % % \subsection{Text fonts in math}\label{text-fonts} % % The text fonts used in particular math alphabets and in 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 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 have already determined which encoding has been selected % as the default encoding. % % We redefine the `operators' symbol font and the math alphabets % |\mathsf|, |\mathit| and |\mathtt|. % Due to the current implementation of math accents % which take their glyphs from text fonts, % all text fonts must be used in a common encoding. % \begin{macrocode} \DeclareSymbolFont{operators}{\operator@encoding}{\familydefault}{m}{n} \SetSymbolFont{operators}{bold}{\operator@encoding}{\familydefault}{b}{n} \SetSymbolFont{operators}{normal}{\operator@encoding}{\familydefault}{m}{n} % \end{macrocode} % % \begin{macrocode} % \DeclareSymbolFontAlphabet{\mathrm} {operators} % \DeclareSymbolFontAlphabet{\mathnormal} {letters} \DeclareMathAlphabet{\mathsf} {\operator@encoding}{\sfdefault}{m}{n} \DeclareMathAlphabet{\mathit} {\operator@encoding}{\rmdefault}{m}{it} \DeclareMathAlphabet{\mathtt} {\operator@encoding}{\ttdefault}{m}{n} \SetMathAlphabet{\mathsf}{bold}{\operator@encoding}{\sfdefault}{b}{n} \SetMathAlphabet{\mathit}{bold}{\operator@encoding}{\rmdefault}{b}{it} \SetMathAlphabet{\mathtt}{bold}{\operator@encoding}{\ttdefault}{b}{n} \DeclareMathAlphabet\mathbf \operator@encoding{\rmdefault}{b}{n} % \end{macrocode} % Note that |\mathrm| and |\mathnormal| will automatically follow % the `operators' font. % % Before redefining the math accents with respect to the actual % encoding of the `operators' symbol font, they should be `undefined'. % This is required for compatibility with older versions of the \Lpack{amsmath} % package. % \begin{macrocode} \let\acute\undefined \let\grave\undefined \let\ddot\undefined \let\tilde\undefined \let\bar\undefined \let\breve\undefined \let\check\undefined \let\hat\undefined \let\dot\undefined % \end{macrocode} % % \begin{macrocode} \def\@tempa{T1} \ifx\operator@encoding\@tempa \DeclareMathAccent{\acute}{\mathalpha}{operators}{1} \DeclareMathAccent{\grave}{\mathalpha}{operators}{0} \DeclareMathAccent{\ddot}{\mathalpha}{operators}{4} \DeclareMathAccent{\tilde}{\mathalpha}{operators}{3} \DeclareMathAccent{\bar}{\mathalpha}{operators}{9} \DeclareMathAccent{\breve}{\mathalpha}{operators}{8} \DeclareMathAccent{\check}{\mathalpha}{operators}{7} \DeclareMathAccent{\hat}{\mathalpha}{operators}{2} \DeclareMathAccent{\dot}{\mathalpha}{operators}{10} % \end{macrocode} % % \begin{macrocode} \else \def\@tempa{OT1} \ifx\operator@encoding\@tempa \DeclareMathAccent{\acute}{\mathalpha}{operators}{19} \DeclareMathAccent{\grave}{\mathalpha}{operators}{18} \DeclareMathAccent{\ddot}{\mathalpha}{operators}{127} \DeclareMathAccent{\tilde}{\mathalpha}{operators}{126} \DeclareMathAccent{\bar}{\mathalpha}{operators}{22} \DeclareMathAccent{\breve}{\mathalpha}{operators}{21} \DeclareMathAccent{\check}{\mathalpha}{operators}{20} \DeclareMathAccent{\hat}{\mathalpha}{operators}{94} \DeclareMathAccent{\dot}{\mathalpha}{operators}{95} % \end{macrocode} % % \begin{macrocode} \else \def\@tempa{LY1} \ifx\operator@encoding\@tempa \DeclareMathAccent{\acute}{\mathalpha}{operators}{19} \DeclareMathAccent{\grave}{\mathalpha}{operators}{18} \DeclareMathAccent{\ddot}{\mathalpha}{operators}{127} \DeclareMathAccent{\tilde}{\mathalpha}{operators}{126} \DeclareMathAccent{\bar}{\mathalpha}{operators}{22} \DeclareMathAccent{\breve}{\mathalpha}{operators}{21} \DeclareMathAccent{\check}{\mathalpha}{operators}{20} \DeclareMathAccent{\hat}{\mathalpha}{operators}{94} \DeclareMathAccent{\dot}{\mathalpha}{operators}{5} % \end{macrocode} % % \begin{macrocode} \else \PackageWarningNoLine{eulervm} {Unknown Operator Encoding!\MessageBreak Math accents may be wrong: assuming OT1 positions} \fi\fi\fi % \end{macrocode} % The \cmd{\hat} accent is normally taken from the `operators' symbol font. % With the option \Lopt{euler-hat accent}, however, we take an alternative % one from Euler Fraktur, which is provided in the `symbols' alphabet. % The above definition must be overwritten then: % \begin{macrocode} \ifevm@eha \DeclareMathAccent\hat\mathalpha{symbols}{222} \fi % \end{macrocode} % % \subsection{An intelligent comma} % \label{sec:icomma} % An `intelligent' comma for use within decimal numbers, % which was once posted by Donald Arseneau on the % \path{comp.text.tex} news group. % It does not work with arbitarily long numbers, so % it is no longer advertised, and I recommend to use the % newer package \path{icomma.sty} instead. % \begin{macrocode} \ifevm@ic \mathchardef\mathcomma\mathcode`\, \mathcode`\,="8000 \catcode`,=\active \def,{\afterassignment\domathcomma\finalhyphendemerits=1} \def\domathcomma{\ifnum\finalhyphendemerits>1\mathord\fi \mathcomma \expandafter\@gobble\number\finalhyphendemerits} \catcode`\,=12 \fi % \end{macrocode} % % \subsection{Using extra AMS fonts} % Euler Fraktur and the AMS symbol fonts should be used with the same design sizes % as the Euler-VM fonts, and should honor the \Lopt{small} option. % We defer the font definitions until |\AtBeginDocument|, to ensure % against loading of \Lpack{eufrak} or \Lpack{ammssymb} with the \Lopt{psamsfonts} option. % \begin{macrocode} \AtBeginDocument{% \begingroup \nfss@catcodes \expandafter\ifx\csname zeu@Scale\endcsname\relax \let\zeu@@Scale\@empty \else \edef\zeu@@Scale{s*[\csname zeu@Scale\endcsname]}% \fi \DeclareFontFamily{U}{euf}{} \DeclareFontShape{U}{euf}{m}{n}{% <-6>\zeu@@Scale eufm5% <6-9>\zeu@@Scale eufm7% <9->\zeu@@Scale eufm10% }{} \DeclareFontShape{U}{euf}{b}{n}{% <-6>\zeu@@Scale eufb5% <6-9>\zeu@@Scale eufb7% <9->\zeu@@Scale eufb10% }{} \DeclareFontFamily{U}{msa}{}% \DeclareFontShape{U}{msa}{m}{n}{% <-6>\zeu@@Scale msam5% <6-9>\zeu@@Scale msam7% <9->\zeu@@Scale msam10% }{}% \DeclareFontFamily{U}{msb}{}% \DeclareFontShape{U}{msb}{m}{n}{% <-6>\zeu@@Scale msbm5% <6-9>\zeu@@Scale msbm7% <9->\zeu@@Scale msbm10% }{}% \endgroup } % \end{macrocode} % \subsection{Peaceful coexistence with the AMS packages} % % We define \cmd{\hslash} and \cmd{\hbar} after the premable only, % in order to protect them from being overwritten by \Lpack{amsfonts}: % \begin{macrocode} \AtBeginDocument{ \let\hslash\evm@hslash\let\hbar\evm@hbar % \end{macrocode} % When the \texttt{amsmath} package is loaded, the % multiple integral signs must be fixed wrt.\ the Euler extension font, % and we have to take care of the macros \cmd{\relbar} and % \cmd{\Relbar}: % \begin{macrocode} \@ifpackageloaded{amsmath}{% \def\intkern@{\mkern -4mu }% \def\relbar{\mathrel{\smash\cm@minus}} \let\Relbar\undefined \DeclareMathSymbol{\Relbar}{\mathrel}{letters}{130} }% % \end{macrocode} % Scaling of the math extension font requires the following patches % (see the description of the \Lpack{exscale} package), unless \Lpack{amsmath} % is also loaded: % \begin{macrocode} {% \newdimen\big@size \addto@hook\every@math@size{\setbox\z@\vbox{\hbox{$($}\kern\z@}% \global\big@size 1.2\ht\z@} \def\bBigg@#1#2{% {\hbox{$\left#2\vcenter to#1\big@size{}\right.\n@space$}}} \def\big{\bBigg@\@ne} \def\Big{\bBigg@{1.5}} \def\bigg{\bBigg@\tw@} \def\Bigg{\bBigg@{2.5}} } } % \end{macrocode} % % \subsection{Restoring normal font warnings} % \begin{macrocode} \let\@font@info\evm@info \let\@font@warning\evm@warning % % \end{macrocode} % % \section{The font definition files} % % \subsection{Common code for scaling} % \begin{macrocode} % \expandafter\ifx\csname zeu@Scale\endcsname\relax % \let\zeu@@Scale\@empty % \else % \edef\zeu@@Scale{s*[\csname zeu@Scale\endcsname]}% % \fi % \end{macrocode} % % \subsection{Euler Roman} % \begin{macrocode} %<*uzeur> \DeclareFontFamily{U}{zeur}{\skewchar \font =127} \DeclareFontShape{U}{zeur}{m}{n}{ <9-> \zeu@@Scale zeurm10 <6-9> \zeu@@Scale zeurm7 <-6> \zeu@@Scale zeurm5 }{} \DeclareFontShape{U}{zeur}{b}{n}{ <9-> \zeu@@Scale zeurb10 <6-9> \zeu@@Scale zeurb7 <-6> \zeu@@Scale zeurb5 }{} \DeclareFontShape{U}{zeur}{bx}{n}{<->ssub * zeur/b/n}{} % % \end{macrocode} % % \subsection{Euler Script} % \begin{macrocode} %<*uzeus> \DeclareFontFamily{U}{zeus}{\skewchar \font =176} \DeclareFontShape{U}{zeus}{m}{n}{ <9-> \zeu@@Scale zeusm10 <6-9> \zeu@@Scale zeusm7 <-6> \zeu@@Scale zeusm5 }{} \DeclareFontShape{U}{zeus}{b}{n}{ <9-> \zeu@@Scale zeusb10 <6-9> \zeu@@Scale zeusb7 <-6> \zeu@@Scale zeusb5 }{} \DeclareFontShape{U}{zeus}{bx}{n}{<->ssub * zeus/b/n}{} % % \end{macrocode} % % \subsection{Euler Extension} % \begin{macrocode} %<*uzeuex> \DeclareFontFamily{U}{zeuex}{} \DeclareFontShape{U}{zeuex}{m}{n}{ <-> \zeu@@Scale zeuex10 }{} % % \end{macrocode} % % } % % \Finale % % \iffalse % The next line of code prevents DocStrip from adding the % character table to all modules: \endinput % \fi % %% \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 \~} %%