summaryrefslogtreecommitdiff
path: root/fonts/eulervm/source/latex/eulervm/eulervm.dtx
blob: b8e7a8290eac5f454e7d30fb8700cf4c88b3fd81 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
% \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}
%</driver>
%
%<package>\ProvidesPackage{eulervm}
%<uzeur>\ProvidesFile{uzeur.fd}%
%<uzeus>\ProvidesFile{uzeus.fd}%
%<uzeuex>\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}
%</driver>
% \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
%</package>
%    \end{macrocode}
%
% \section{The font definition files}
%
% \subsection{Common code for scaling}
%    \begin{macrocode}
%<uzeur|uzeus|uzeuex> \expandafter\ifx\csname zeu@Scale\endcsname\relax
%<uzeur|uzeus|uzeuex>  \let\zeu@@Scale\@empty
%<uzeur|uzeus|uzeuex> \else
%<uzeur|uzeus|uzeuex>  \edef\zeu@@Scale{s*[\csname zeu@Scale\endcsname]}%
%<uzeur|uzeus|uzeuex> \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}{}
%</uzeur>
%    \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}{}
%</uzeus>
%    \end{macrocode}
%
% \subsection{Euler Extension}
%    \begin{macrocode}
%<*uzeuex>
\DeclareFontFamily{U}{zeuex}{}
\DeclareFontShape{U}{zeuex}{m}{n}{
   <-> \zeu@@Scale zeuex10
}{}
%</uzeuex>
%    \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         \~}
%%