summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/esvect
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/esvect
Initial commit
Diffstat (limited to 'macros/latex/contrib/esvect')
-rw-r--r--macros/latex/contrib/esvect/README37
-rw-r--r--macros/latex/contrib/esvect/dvips/esvect.map6
-rw-r--r--macros/latex/contrib/esvect/esvect.dtx1436
-rw-r--r--macros/latex/contrib/esvect/esvect.ins35
-rw-r--r--macros/latex/contrib/esvect/esvect.pdfbin0 -> 45210 bytes
-rw-r--r--macros/latex/contrib/esvect/pfb/vect10.pfbbin0 -> 18279 bytes
-rw-r--r--macros/latex/contrib/esvect/pfb/vect5.pfbbin0 -> 18504 bytes
-rw-r--r--macros/latex/contrib/esvect/pfb/vect6.pfbbin0 -> 18531 bytes
-rw-r--r--macros/latex/contrib/esvect/pfb/vect7.pfbbin0 -> 18366 bytes
-rw-r--r--macros/latex/contrib/esvect/pfb/vect8.pfbbin0 -> 18418 bytes
-rw-r--r--macros/latex/contrib/esvect/pfb/vect9.pfbbin0 -> 18345 bytes
11 files changed, 1514 insertions, 0 deletions
diff --git a/macros/latex/contrib/esvect/README b/macros/latex/contrib/esvect/README
new file mode 100644
index 0000000000..2d86f0a03c
--- /dev/null
+++ b/macros/latex/contrib/esvect/README
@@ -0,0 +1,37 @@
+%
+% esvect
+%
+%
+
+Change: november 2013. Rename \vecteur internal macro into \ESV@vecteur in order to avoid conflit with tdsfrmath.sty package.
+
+Change : december 2001. Add Type1 PostScript font. Conversion from
+METAFONT files made by Olivier Crouzet. Thank's a lot !
+
+Run Latex on esvect.ins. You got the files:
+
+-- mathvect.mf, vecsym.mf, vsymbol.mf, vect5.mf,
+ vect6.mf, vect7.mf, vect8.mf, vect9.mf, vect10.mf;
+-- esvect.sty;
+-- uesvect.fd.
+
+Run METAFONT on vect5.mf, vect6.mf, vect7.mf, vect8.mf, vect9.mf and vect10.mf
+to obtain .tfm files :
+
+ mf \mode=localfont; input vect5.mf
+
+Put *.mf files on your MFINPUT directory.
+Put *.tfm files on your TFM directory.
+Put esvect.sty and uesvect.fd on your TEXINPUT directory.
+
+Then if you run Latex on esvect.dtx, you obtain the documentation.
+
+You will find ready to use *.mf, *.tfm, *.sty and *.fd files in
+the mfinput, mf and texinput directories.
+
+If you want to use Type1 PostScript font, put *.pfb files in a directory
+where dvips can find them, and add the content of the esvect.map file
+to your psnfss.map file.
+
+e.saudrais@wanadoo.fr
+http://phylam.org \ No newline at end of file
diff --git a/macros/latex/contrib/esvect/dvips/esvect.map b/macros/latex/contrib/esvect/dvips/esvect.map
new file mode 100644
index 0000000000..dff303e674
--- /dev/null
+++ b/macros/latex/contrib/esvect/dvips/esvect.map
@@ -0,0 +1,6 @@
+vect5 TeX-vect5 <vect5.pfb
+vect6 TeX-vect6 <vect6.pfb
+vect7 TeX-vect7 <vect7.pfb
+vect8 TeX-vect8 <vect8.pfb
+vect9 TeX-vect9 <vect9.pfb
+vect10 TeX-vect10 <vect10.pfb \ No newline at end of file
diff --git a/macros/latex/contrib/esvect/esvect.dtx b/macros/latex/contrib/esvect/esvect.dtx
new file mode 100644
index 0000000000..0b5cd57630
--- /dev/null
+++ b/macros/latex/contrib/esvect/esvect.dtx
@@ -0,0 +1,1436 @@
+%\iffalse
+%
+%esvect.dtx version 1.3 november 2013
+%
+%version 1.1 june 2000 : first version
+%version 1.2 july 2000 : second version
+%version 1.3 november 2013 : second version
+%
+%Eddie Saudrais (e.saudrais@wanadoo.fr)
+%http://phylam.org
+%
+%
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\usepackage{esvect}
+\usepackage{mflogo}
+\DeclareMathSymbol{\fldrap}{\mathrel}{esvector}{'021}
+\DeclareMathSymbol{\fldrbp}{\mathrel}{esvector}{'022}
+\DeclareMathSymbol{\fldrcp}{\mathrel}{esvector}{'023}
+\DeclareMathSymbol{\fldrdp}{\mathrel}{esvector}{'024}
+\DeclareMathSymbol{\fldrep}{\mathrel}{esvector}{'025}
+\DeclareMathSymbol{\fldrfp}{\mathrel}{esvector}{'026}
+\DeclareMathSymbol{\fldrgp}{\mathrel}{esvector}{'027}
+\DeclareMathSymbol{\fldrhp}{\mathrel}{esvector}{'030}
+\parindent 0cm
+\topmargin -1cm
+\begin{document}
+\DocInput{esvect.dtx}
+\end{document}
+%</driver>
+%\fi
+%\title{Typesetting vectors with beautiful arrow with \LaTeXe{}}
+%\author{Eddie Saudrais}
+%\date{version 1.3 11/07/2013}
+%\maketitle
+%\MakeShortVerb{\|}
+%\begin{abstract}
+%The package \textsf{esvect.sty} allows typesetting vectors.
+%Several arrows are available.
+%\end{abstract}
+%\section{Installation}
+%Run \LaTeXe{} on esvect.ins to generate files:
+%\begin{enumerate}
+%\item
+%Put \textsf{esvect.sty} on TEXINPUT.
+%\item
+%Put \textsf{uesvect.fd} on TEXINPUT, for example with \textsf{esvect.sty}.
+%\item
+%Put \textsf{vect5.mf}, \textsf{vect6.mf}, \textsf{vect7.mf}, \textsf{vect8.mf},
+%\textsf{vect9.mf} and \textsf{vect10.mf} on MFINPUT.
+%\end{enumerate}
+%
+%Run METAFONT on *.mf file to generate *.tfm files. For example:
+%
+%\verb|mf \mode=localfont; input vect5.mf|
+%
+%Put \textsf{vect5.tfm}, ..., \textsf{vect10.tfm} on the right
+%place.
+%\section{Using esvect}
+%Load the package with \verb|\usepackage{esvect}|, and enjoy!
+%
+%To obtain a vector, use the command \verb|\vv{arg}|.
+%
+%For example, \verb|$\vv{E$}|, \verb|$\vv{AB}$|,
+%\verb|$\vv{\imath}$| and \verb|$\vv{u}$| give $\vv{E}$,
+%$\vv{AB}$, $\vv{\imath}$ and $\vv{u}$.
+%
+%A star version \verb|\vv*{arg}{ind}| is available to typeset correctly a vector with a subscript:
+%\verb|$\vv*{e}{r}$| and \verb|$\vv*{L}{\Delta}$| give $\vv*{e}{r}$
+%and $\vv*{L}{\Delta}$.
+%
+%Height differents arrows are available. You have to select one
+%using an option when you load the package:
+%\verb|\usepackage[a]{esvect}|, ..., \verb|\usepackage[h]{esvect}|.
+%The option \verb|d| is selected by default.
+%
+%Corresponding arrows are:
+%
+%\vskip1em
+%\begin{tabular}{c c c c c c c c c}
+%option & a & b & c & d & e & f & g & h \\
+%fl\`eche & $\fldrap$ & $\fldrbp$ & $\fldrcp$ & $\fldrdp$ & $\fldrep$
+%& $\fldrfp$ & $\fldrgp$ & $\fldrhp$\\
+%\end{tabular}
+%
+%The size of the arrow is automatically calculated according to
+%the math environment:
+%
+%\verb|$$\vv{E}_{\vv{u}_{\vv{u}}}}$$| gives
+%$$\vv{E}_{\vv{u}_{\vv{u}}}$$
+%
+%\StopEventually{}
+%\section{The code}
+%The package identifies himself
+% \begin{macrocode}
+%<*package>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{esvect}
+% \end{macrocode}
+%Definition of the symbol font:
+% \begin{macrocode}
+\DeclareSymbolFont{esvector} {U}{esvect}{m}{n}
+% \end{macrocode}
+%Options processing:
+% \begin{macrocode}
+\DeclareMathSymbol{\fldr}{\mathrel}{esvector}{'024} %default
+\DeclareOption{a}{\DeclareMathSymbol{\fldr}{\mathrel}{esvector}{'021}}
+\DeclareOption{b}{\DeclareMathSymbol{\fldr}{\mathrel}{esvector}{'022}}
+\DeclareOption{c}{\DeclareMathSymbol{\fldr}{\mathrel}{esvector}{'023}}
+\DeclareOption{d}{\DeclareMathSymbol{\fldr}{\mathrel}{esvector}{'024}}
+\DeclareOption{e}{\DeclareMathSymbol{\fldr}{\mathrel}{esvector}{'025}}
+\DeclareOption{f}{\DeclareMathSymbol{\fldr}{\mathrel}{esvector}{'026}}
+\DeclareOption{g}{\DeclareMathSymbol{\fldr}{\mathrel}{esvector}{'027}}
+\DeclareOption{h}{\DeclareMathSymbol{\fldr}{\mathrel}{esvector}{'030}}
+\ProcessOptions\relax
+% \end{macrocode}
+%Defition of the lines:
+% \begin{macrocode}
+\DeclareMathSymbol{\montraita}{\mathrel}{esvector}{'040}
+\DeclareMathSymbol{\montraitd}{\mathrel}{esvector}{'043}
+\def\relbareda{\mathrel{\mathpalette\mathsm@sh\montraita}}
+\def\relbaredd{\mathrel{\mathpalette\mathsm@sh\montraitd}}
+% \end{macrocode}
+%Definition of the command:
+% \begin{macrocode}
+\def\vv{\@ifstar{\vvstar}{\ESV@vecteur}}
+\def\vvstar#1#2{\ESV@vecteur{#1}_{\mkern-1mu\relax#2}}
+\newcommand{\ESV@vecteur}{%
+ \mathpalette{\overvect@\vectfill@}}
+% \end{macrocode}
+%Definition of the characters used to draw the vector:
+% \begin{macrocode}
+\def\vectfill@{\traitfill@\relbaredd\relbareda\fldr}
+%\end{macrocode}
+%Construction of the arrow:
+% \begin{macrocode}
+\def\traitfill@#1#2#3#4{%
+ $\m@th\mkern2mu\relax#4#1\mkern-1.5mu%on met \relbaredd au d\'ebut
+ \cleaders\hbox{$#4\mkern0mu#2\mkern0mu$}\hfill%remplit avec relbareda
+ \mkern-1.5mu#3$%
+}
+% \end{macrocode}
+%Construction of the whole vector:
+% \begin{macrocode}
+\def\overvect@#1#2#3{\vbox{\ialign{##\crcr%
+ \noalign{\kern-.7pt\nointerlineskip}#1#2\crcr%
+ \noalign{\kern-.3pt\nointerlineskip}$\m@th\hfil#2#3\hfil$\crcr}}}
+% \end{macrocode}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+% \begin{macrocode}
+%<*fdfile>
+% \end{macrocode}
+%Font definition file:
+% \begin{macrocode}
+\ProvidesFile{uesvect.fd}
+\DeclareFontFamily{U}{esvect}{}
+\DeclareFontShape{U}{esvect}{m}{n}{%
+ <5><6><7><8><9><10>gen*vect%
+ <10.95><12><14.4><17.28><20.74><24.88>vect10%
+ }{}
+% \end{macrocode}
+% \begin{macrocode}
+%</fdfile>
+% \end{macrocode}
+%\end{document}
+% \begin{macrocode}
+%<*mffilea>
+% Vector Symbols, from Computer Modern Math Symbols 5 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="VECT"; font_size 5pt#;
+
+u#:=12.5/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=2/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=10/36pt#; % extra space added to all sidebars
+
+body_height#:=135/36pt#; % height of tallest characters
+asc_height#:=125/36pt#; % height of lowercase ascenders
+cap_height#:=123/36pt#; % height of caps
+fig_height#:=116/36pt#; % height of numerals
+x_height#:=77.5/36pt#; % height of lowercase without ascenders
+math_axis#:=45/36pt#; % axis of symmetry for math symbols
+bar_height#:=43.5/36pt#; % height of crossbar in lowercase e
+comma_depth#:=35/36pt#; % depth of comma below baseline
+desc_depth#:=35/36pt#; % depth of lowercase descenders
+
+crisp#:=6/36pt#; % diameter of serif corners
+tiny#:=6/36pt#; % diameter of rounded corners
+fine#:=5/36pt#; % diameter of sharply rounded corners
+thin_join#:=5/36pt#; % width of extrafine details
+hair#:=7.5/36pt#; % lowercase hairline breadth
+stem#:=15.5/36pt#; % lowercase stem breadth
+curve#:=17.5/36pt#; % lowercase curve breadth
+ess#:=12/36pt#; % breadth in middle of lowercase s
+flare#:=18.5/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=22/36pt#; % diameter of dots
+cap_hair#:=8/36pt#; % uppercase hairline breadth
+cap_stem#:=18.5/36pt#; % uppercase stem breadth
+cap_curve#:=20.5/36pt#; % uppercase curve breadth
+cap_ess#:=13.5/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.28pt#; % thickness of lines in math symbols
+
+dish#:=.7/36pt#; % amount erased at top or bottom of serifs
+bracket#:=10/36pt#; % vertical distance from serif base to tangent
+jut#:=17/36pt#; % protrusion of lowercase serifs
+cap_jut#:=20/36pt#; % protrusion of uppercase serifs
+beak_jut#:=6/36pt#; % horizontal protrusion of beak serifs
+beak#:=35/36pt#; % vertical protrusion of beak serifs
+vair#:=6/36pt#; % vertical diameter of hairlines
+notch_cut#:=5pt#; % maximum breadth above or below notches
+bar#:=8/36pt#; % lowercase bar thickness
+slab#:=8/36pt#; % serif and arm thickness
+cap_bar#:=8/36pt#; % uppercase bar thickness
+cap_band#:=8/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=5pt#; % max breadth above/below uppercase notches
+serif_drop#:=2/36pt#; % vertical drop of sloped serifs
+stem_corr#:=.7/36pt#; % for small refinements of stem breadth
+vair_corr#:=.5/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=4/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=1; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=1; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+% the following font parameters are explained in {\sl The \TeX book}, Appendix G
+subs:=5/5; % subscripts to 5pt will normally be in 5pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+36/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+3/36pt#, % num2
+ math_axis#+1.51rth#+24/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-63/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-3/36pt#), % denom2
+ 5.99pt#-subs*asc_height#, % sup1
+ 5.49pt#-subs*asc_height#, % sup2
+ 53/36pt#, % sup3
+ 36/36pt#, % sub1
+ 72/36pt#, % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 9.9pt#, % delim1
+ 7.1pt#, % delim2
+ math_axis#; % axis\_height
+
+generate mathvec % switch to the driver file
+% \end{macrocode}
+% \begin{macrocode}
+%</mffilea>
+% \end{macrocode}
+% \begin{macrocode}
+%<*mffileb>
+% Vector Symbols, from Computer Modern Math Symbols 6 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="VECT"; font_size 6pt#;
+
+u#:=14/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=2.8/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=6/36pt#; % extra space added to all sidebars
+
+body_height#:=162/36pt#; % height of tallest characters
+asc_height#:=150/36pt#; % height of lowercase ascenders
+cap_height#:=147.6/36pt#; % height of caps
+fig_height#:=139.2/36pt#; % height of numerals
+x_height#:=93/36pt#; % height of lowercase without ascenders
+math_axis#:=54/36pt#; % axis of symmetry for math symbols
+bar_height#:=52.2/36pt#; % height of crossbar in lowercase e
+comma_depth#:=42/36pt#; % depth of comma below baseline
+desc_depth#:=42/36pt#; % depth of lowercase descenders
+
+crisp#:=6.5/36pt#; % diameter of serif corners
+tiny#:=6.5/36pt#; % diameter of rounded corners
+fine#:=6/36pt#; % diameter of sharply rounded corners
+thin_join#:=6/36pt#; % width of extrafine details
+hair#:=8/36pt#; % lowercase hairline breadth
+stem#:=17.5/36pt#; % lowercase stem breadth
+curve#:=20/36pt#; % lowercase curve breadth
+ess#:=17/36pt#; % breadth in middle of lowercase s
+flare#:=20.5/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=26/36pt#; % diameter of dots
+cap_hair#:=8.5/36pt#; % uppercase hairline breadth
+cap_stem#:=21/36pt#; % uppercase stem breadth
+cap_curve#:=23.5/36pt#; % uppercase curve breadth
+cap_ess#:=18.5/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.31pt#; % thickness of lines in math symbols
+
+dish#:=.8/36pt#; % amount erased at top or bottom of serifs
+bracket#:=12/36pt#; % vertical distance from serif base to tangent
+jut#:=19/36pt#; % protrusion of lowercase serifs
+cap_jut#:=23/36pt#; % protrusion of uppercase serifs
+beak_jut#:=6.8/36pt#; % horizontal protrusion of beak serifs
+beak#:=42/36pt#; % vertical protrusion of beak serifs
+vair#:=7/36pt#; % vertical diameter of hairlines
+notch_cut#:=6pt#; % maximum breadth above or below notches
+bar#:=8.5/36pt#; % lowercase bar thickness
+slab#:=8.5/36pt#; % serif and arm thickness
+cap_bar#:=8.5/36pt#; % uppercase bar thickness
+cap_band#:=8.5/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=6pt#; % max breadth above/below uppercase notches
+serif_drop#:=2.4/36pt#; % vertical drop of sloped serifs
+stem_corr#:=.8/36pt#; % for small refinements of stem breadth
+vair_corr#:=.7/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=4.5/36pt#; % amount of overshoot for curves
+apex_o#:=4.5/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=.8; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+% the following font parameters are explained in {\sl The \TeX book}, Appendix G
+subs:=5/6; % subscripts to 6pt will normally be in 5pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+36/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+9/36pt#, % num2
+ math_axis#+1.51rth#+29/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-74/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-9/36pt#), % denom2
+ 6.49pt#-subs*asc_height#, % sup1
+ 5.99pt#-subs*asc_height#, % sup2
+ 62/36pt#, % sup3
+ 36/36pt#, % sub1
+ 72/36pt#, % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 11.9pt#, % delim1
+ 8.1pt#, % delim2
+ math_axis#; % axis\_height
+
+generate mathvec % switch to the driver file
+% \end{macrocode}
+% \begin{macrocode}
+%</mffileb>
+% \end{macrocode}
+% \begin{macrocode}
+%<*mffilec>
+% Vector Symbols, from Computer Modern Math Symbols 7 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="VECT"; font_size 7pt#;
+
+u#:=15.5/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=3.5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=4/36pt#; % extra space added to all sidebars
+
+body_height#:=189/36pt#; % height of tallest characters
+asc_height#:=175/36pt#; % height of lowercase ascenders
+cap_height#:=172.2/36pt#; % height of caps
+fig_height#:=162.4/36pt#; % height of numerals
+x_height#:=108.5/36pt#; % height of lowercase without ascenders
+math_axis#:=63/36pt#; % axis of symmetry for math symbols
+bar_height#:=60.9/36pt#; % height of crossbar in lowercase e
+comma_depth#:=49/36pt#; % depth of comma below baseline
+desc_depth#:=49/36pt#; % depth of lowercase descenders
+
+crisp#:=7/36pt#; % diameter of serif corners
+tiny#:=7/36pt#; % diameter of rounded corners
+fine#:=6/36pt#; % diameter of sharply rounded corners
+thin_join#:=6/36pt#; % width of extrafine details
+hair#:=8.5/36pt#; % lowercase hairline breadth
+stem#:=19.5/36pt#; % lowercase stem breadth
+curve#:=22.5/36pt#; % lowercase curve breadth
+ess#:=21/36pt#; % breadth in middle of lowercase s
+flare#:=23.5/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=29/36pt#; % diameter of dots
+cap_hair#:=9/36pt#; % uppercase hairline breadth
+cap_stem#:=23.5/36pt#; % uppercase stem breadth
+cap_curve#:=26.5/36pt#; % uppercase curve breadth
+cap_ess#:=22.5/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.34pt#; % thickness of lines in math symbols
+
+dish#:=.9/36pt#; % amount erased at top or bottom of serifs
+bracket#:=14/36pt#; % vertical distance from serif base to tangent
+jut#:=21/36pt#; % protrusion of lowercase serifs
+cap_jut#:=26/36pt#; % protrusion of uppercase serifs
+beak_jut#:=7.6/36pt#; % horizontal protrusion of beak serifs
+beak#:=49/36pt#; % vertical protrusion of beak serifs
+vair#:=7/36pt#; % vertical diameter of hairlines
+notch_cut#:=7pt#; % maximum breadth above or below notches
+bar#:=9/36pt#; % lowercase bar thickness
+slab#:=9/36pt#; % serif and arm thickness
+cap_bar#:=9/36pt#; % uppercase bar thickness
+cap_band#:=9/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=7pt#; % max breadth above/below uppercase notches
+serif_drop#:=2.8/36pt#; % vertical drop of sloped serifs
+stem_corr#:=.9/36pt#; % for small refinements of stem breadth
+vair_corr#:=.9/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=5/36pt#; % amount of overshoot for curves
+apex_o#:=5/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=.6; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+% the following font parameters are explained in {\sl The \TeX book}, Appendix G
+subs:=5/7; % subscripts to 7pt will normally be in 5pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+36/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+12/36pt#, % num2
+ math_axis#+1.51rth#+34/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-86/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-12/36pt#), % denom2
+ 6.99pt#-subs*asc_height#, % sup1
+ 6.49pt#-subs*asc_height#, % sup2
+ 72/36pt#, % sup3
+ 36/36pt#, % sub1
+ 72/36pt#, % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 11.9pt#, % delim1
+ 8.1pt#, % delim2
+ math_axis#; % axis\_height
+
+generate mathvec % switch to the driver file
+% \end{macrocode}
+% \begin{macrocode}
+%</mffilec>
+% \end{macrocode}
+% \begin{macrocode}
+%<*mffiled>
+% Vector Symbols, from Computer Modern Math Symbols 8 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="VECT"; font_size 8pt#;
+
+u#:=17/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=4.1/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=216/36pt#; % height of tallest characters
+asc_height#:=200/36pt#; % height of lowercase ascenders
+cap_height#:=196.8/36pt#; % height of caps
+fig_height#:=185.6/36pt#; % height of numerals
+x_height#:=124/36pt#; % height of lowercase without ascenders
+math_axis#:=72/36pt#; % axis of symmetry for math symbols
+bar_height#:=69.6/36pt#; % height of crossbar in lowercase e
+comma_depth#:=56/36pt#; % depth of comma below baseline
+desc_depth#:=56/36pt#; % depth of lowercase descenders
+
+crisp#:=8/36pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7/36pt#; % width of extrafine details
+hair#:=9/36pt#; % lowercase hairline breadth
+stem#:=21.5/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+ess#:=23/36pt#; % breadth in middle of lowercase s
+flare#:=26.5/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=32/36pt#; % diameter of dots
+cap_hair#:=9.5/36pt#; % uppercase hairline breadth
+cap_stem#:=25.5/36pt#; % uppercase stem breadth
+cap_curve#:=29/36pt#; % uppercase curve breadth
+cap_ess#:=26/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.36pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=16/36pt#; % vertical distance from serif base to tangent
+jut#:=24/36pt#; % protrusion of lowercase serifs
+cap_jut#:=29/36pt#; % protrusion of uppercase serifs
+beak_jut#:=8.4/36pt#; % horizontal protrusion of beak serifs
+beak#:=56/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=8pt#; % maximum breadth above or below notches
+bar#:=9.5/36pt#; % lowercase bar thickness
+slab#:=9.5/36pt#; % serif and arm thickness
+cap_bar#:=9.5/36pt#; % uppercase bar thickness
+cap_band#:=9.5/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=8pt#; % max breadth above/below uppercase notches
+serif_drop#:=3.2/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=6/36pt#; % amount of overshoot for curves
+apex_o#:=6/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=.4; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+% the following font parameters are explained in {\sl The \TeX book}, Appendix G
+subs:=6/8; % subscripts to 8pt will normally be in 6pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+36/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+24/36pt#, % num2
+ math_axis#+1.51rth#+38/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-98/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-24/36pt#), % denom2
+ 7.49pt#-subs*asc_height#, % sup1
+ 6.99pt#-subs*asc_height#, % sup2
+ 82/36pt#, % sup3
+ 36/36pt#, % sub1
+ 72/36pt#, % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 11.9pt#, % delim1
+ 9.1pt#, % delim2
+ math_axis#; % axis\_height
+
+generate mathvec % switch to the driver file
+% \end{macrocode}
+% \begin{macrocode}
+%</mffiled>
+% \end{macrocode}
+% \begin{macrocode}
+%<*mffilee>
+% Vector Symbols, from Computer Modern Math Symbols 9 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="VECT"; font_size 9pt#;
+
+u#:=18.5/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=4.6/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=243/36pt#; % height of tallest characters
+asc_height#:=225/36pt#; % height of lowercase ascenders
+cap_height#:=221.4/36pt#; % height of caps
+fig_height#:=208.8/36pt#; % height of numerals
+x_height#:=139.5/36pt#; % height of lowercase without ascenders
+math_axis#:=81/36pt#; % axis of symmetry for math symbols
+bar_height#:=78.3/36pt#; % height of crossbar in lowercase e
+comma_depth#:=63/36pt#; % depth of comma below baseline
+desc_depth#:=63/36pt#; % depth of lowercase descenders
+
+crisp#:=8/36pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7/36pt#; % width of extrafine details
+hair#:=9/36pt#; % lowercase hairline breadth
+stem#:=23/36pt#; % lowercase stem breadth
+curve#:=27/36pt#; % lowercase curve breadth
+ess#:=25/36pt#; % breadth in middle of lowercase s
+flare#:=29/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=35/36pt#; % diameter of dots
+cap_hair#:=10/36pt#; % uppercase hairline breadth
+cap_stem#:=28/36pt#; % uppercase stem breadth
+cap_curve#:=32/36pt#; % uppercase curve breadth
+cap_ess#:=30/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.38pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=18/36pt#; % vertical distance from serif base to tangent
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=33/36pt#; % protrusion of uppercase serifs
+beak_jut#:=9.2/36pt#; % horizontal protrusion of beak serifs
+beak#:=63/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=9pt#; % maximum breadth above or below notches
+bar#:=10/36pt#; % lowercase bar thickness
+slab#:=10/36pt#; % serif and arm thickness
+cap_bar#:=10/36pt#; % uppercase bar thickness
+cap_band#:=10/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=9pt#; % max breadth above/below uppercase notches
+serif_drop#:=3.6/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=7/36pt#; % amount of overshoot for curves
+apex_o#:=7/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=.2; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+% the following font parameters are explained in {\sl The \TeX book}, Appendix G
+subs:=6/9; % subscripts to 9pt will normally be in 6pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+36/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+30/36pt#, % num2
+ math_axis#+1.51rth#+43/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-111/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2
+ 8.49pt#-subs*asc_height#, % sup1
+ 7.99pt#-subs*asc_height#, % sup2
+ 93/36pt#, % sup3
+ 36/36pt#, % sub1
+ -(7.99pt#-2subs*asc_height#-3.1rth#), % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 23.9pt#, % delim1
+ 9.1pt#, % delim2
+ math_axis#; % axis\_height
+
+generate mathvec % switch to the driver file
+% \end{macrocode}
+% \begin{macrocode}
+%</mffilee>
+% \end{macrocode}
+% \begin{macrocode}
+%<*mffilef>
+% Vector symbols, from Computer Modern Math Symbols 10 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="VECT"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=250/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=232/36pt#; % height of numerals
+x_height#:=155/36pt#; % height of lowercase without ascenders
+math_axis#:=90/36pt#; % axis of symmetry for math symbols
+bar_height#:=87/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=70/36pt#; % depth of lowercase descenders
+
+crisp#:=8/36pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7/36pt#; % width of extrafine details
+hair#:=9/36pt#; % lowercase hairline breadth
+stem#:=24/36pt#; % lowercase stem breadth
+curve#:=29/36pt#; % lowercase curve breadth
+ess#:=27/36pt#; % breadth in middle of lowercase s
+flare#:=32/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=38/36pt#; % diameter of dots
+cap_hair#:=11/36pt#; % uppercase hairline breadth
+cap_stem#:=30/36pt#; % uppercase stem breadth
+cap_curve#:=35/36pt#; % uppercase curve breadth
+cap_ess#:=33/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=20/36pt#; % vertical distance from serif base to tangent
+jut#:=30/36pt#; % protrusion of lowercase serifs
+cap_jut#:=37/36pt#; % protrusion of uppercase serifs
+beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs
+beak#:=70/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=10pt#; % maximum breadth above or below notches
+bar#:=11/36pt#; % lowercase bar thickness
+slab#:=11/36pt#; % serif and arm thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+cap_band#:=11/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=10pt#; % max breadth above/below uppercase notches
+serif_drop#:=4/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=8/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+% the following font parameters are explained in {\sl The \TeX book}, Appendix G
+subs:=7/10; % subscripts to 10pt will normally be in 7pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+30/36pt#, % num2
+ math_axis#+1.51rth#+48/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2
+ 8.99pt#-subs*asc_height#, % sup1
+ 8.49pt#-subs*asc_height#, % sup2
+ 104/36pt#, % sup3
+ 54/36pt#, % sub1
+ -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 23.9pt#, % delim1
+ 10.1pt#, % delim2
+ math_axis#; % axis\_height
+
+generate mathvec % switch to the driver file
+% \end{macrocode}
+% \begin{macrocode}
+%</mffilef>
+% \end{macrocode}
+% \begin{macrocode}
+%<*mfmath>
+% Parameters from The Computer Modern Symbols family (by D. E. Knuth, 1979--1985)
+
+font_coding_scheme:="TeX math symbols";
+mode_setup; font_setup;
+
+autorounding:=0;
+
+font_slant slant; font_x_height x_height#;
+font_quad 18u# if not monospace:+4letter_fit# fi;
+% (The spacing is zero so that \TeX\ will always add the italic correction.)
+% (The calling file should give the other math symbol font parameters.)
+
+slant:=mono_charic#:=0; % the remaining characters will not be slanted
+currenttransform:=identity yscaled aspect_ratio scaled granularity;
+input vsymbol; % the symbols
+
+bye.
+% \end{macrocode}
+% \begin{macrocode}
+%</mfmath>
+% \end{macrocode}
+% \begin{macrocode}
+%<*mfsymbol>
+% D\'efinition des caract\`eres
+% Character codes \0000--\014, \0020--\0034 and \0040--\0057 are generated.
+
+% Italic corrections have not been computed for most of these characters,
+% since they are generally not slanted.
+
+% Fl\`eches longues
+
+r_arrow1=oct"000";
+r_arrow2=oct"001";
+r_arrow3=oct"002";
+r_arrow4=oct"003";
+r_arrow5=oct"004";
+r_arrow6=oct"005";
+r_arrow7=oct"006";
+r_arrow8=oct"007";
+r_arrow9=oct"010";
+r_arrow10=oct"011";
+r_arrow11=oct"012";
+r_arrow12=oct"013";
+r_arrow13=oct"014";
+
+% Fl\`eches courtes
+
+r_arrow21=oct"020";
+r_arrow22=oct"021";
+r_arrow23=oct"022";
+r_arrow24=oct"023";
+r_arrow25=oct"024";
+r_arrow26=oct"025";
+r_arrow27=oct"026";
+r_arrow28=oct"027";
+r_arrow29=oct"030";
+r_arrow30=oct"031";
+r_arrow31=oct"032";
+r_arrow32=oct"033";
+r_arrow33=oct"034";
+
+% Traits
+
+trait01=oct"040";
+trait02=oct"041";
+trait03=oct"042";
+trait04=oct"043";
+trait05=oct"044";
+trait06=oct"045";
+trait07=oct"046";
+trait08=oct"047";
+
+% Traits avec extr\'emit\'es
+
+traittest01=oct"050";
+traittest02=oct"051";
+traittest03=oct"052";
+traittest04=oct"053";
+traittest05=oct"054";
+traittest06=oct"055";
+traittest07=oct"056";
+traittest08=oct"057";
+
+input vecsym; % Les symboles
+% \end{macrocode}
+% \begin{macrocode}
+%</mfsymbol>
+% \end{macrocode}
+% \begin{macrocode}
+%<*mfvecsym>
+% This file generates the following characters when their codes are known:
+% |right_arrow|.
+
+
+iff known r_arrow1: cmchar "Dessin original";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow1,18u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup fine.nib;%crisp -> fine pour tester
+pos1(rule_thickness,90); pos2(rule_thickness,90);%Trait horizontal
+pos3(rule_thickness,0); pos4(rule_thickness,0);%Extr\'emit\'e fl\`eche
+y0=y1=y2=math_axis;%Axe horizontal
+x1-.5rule_thickness=eps;%Extr\'emit\'e gauche
+rt x0=hround(w)-eps;%Extr\'emit\'e droite
+y3-y0=y0-y4=if monospace:.24 else:.36 fi asc_height+eps;%largeur
+%fl\`eche
+x3=x4=x0-if monospace:3u else:4u fi-eps;%longueur fl\`eche
+pos5(rule_thickness,angle(z4-z0)); z5l=z0;%Pointe inf\'erieure fl\`eche
+pos6(rule_thickness,angle(z3-z0)); z6l=z0;%Pointe sup\'erieure fl\`eche
+z9=.2[.5[z3,z4],z0];%tangente extr\'emit\'es
+numeric t; path p; p=z4l{z9-z4}..z6r;%Courbe fl\`eche
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));%Intersection
+%courbe avec ligne horizontale inf\'erieure
+x2=xpart point t of p;%Abscisse de cette intersection
+filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r)
+ --z3r{z9-z3}..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,5,6,9); endchar;
+
+iff known r_arrow5: cmchar "Fl\`eche grande";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow5,18u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup fine.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+y0=y1=y2=math_axis; x1-.5rule_thickness=eps; rt x0=hround(w)-eps;
+y3-y0=y0-y4=2.5u+eps;
+x3=x4=x0-4.5u-eps;
+z9=.35[.5[z3,z4],z0];
+numeric t; path p; p=z4..z9;
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+filldraw z0..z4--subpath (0,t) of\\(z4..z9)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3..z9)
+ --z3..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,9); endchar;
+
+iff known r_arrow3: cmchar "Fl\`eche normale";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow3,18u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup fine.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+y0=y1=y2=math_axis; x1-.5rule_thickness=eps; rt x0=hround(w)-eps;
+y3-y0=y0-y4=2.1u+eps;
+x3=x4=x0-3.8u-eps;
+z9=.35[.5[z3,z4],z0];
+numeric t; path p; p=z4..z9;
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+filldraw z0..z4--subpath (0,t) of\\(z4..z9)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3..z9)
+ --z3..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,9); endchar;
+
+iff known r_arrow6: cmchar "Fl\`eche \'etroite";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow6,18u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup fine.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+y0=y1=y2=math_axis; x1-.5rule_thickness=eps; rt x0=hround(w)-eps;
+y3-y0=y0-y4=1.5u+eps;
+x3=x4=x0-4.5u-eps;
+z9=.35[.5[z3,z4],z0];
+numeric t; path p; p=z4..z9;
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+filldraw z0..z4--subpath (0,t) of\\(z4..z9)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3..z9)
+ --z3..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,9); endchar;
+
+iff known r_arrow8: cmchar "Fleche droite";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow8,18u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup fine.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,-90);
+pos3(hair,0); pos6(hair,0);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+y1=y2=math_axis; x1-.5rule_thickness=eps; rt x2=hround(w-2u);
+y3-y1=y1-y6=2.2u+eps;
+x3=x6=x2-3.5u-eps;
+x4=x5=hround(w)-0.4rule_thickness;
+y4-y1=y1-y5=.2hair;
+filldraw z2l{dir 165}...{z3-z2}z3l--z3r{z4-z3}...
+z4--z5...{z6-z5}z6r--z6l{z2-z6}...{dir 15}z2r---z1l..z1r---z2l & cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known r_arrow2: cmchar "cmsy plus \'etroit";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow2,18u#,v_center(spread#+rule_thickness#));%18u->12u
+adjust_fit(0,0); pickup fine.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+y0=y1=y2=math_axis;%Axe horizontal
+x1-.5rule_thickness=eps;%Extr\'emit\'e gauche
+rt x0=hround(w)-eps;%Extr\'emit\'e droite
+y3-y0=y0-y4=if monospace:.16 else:.22 fi asc_height+eps;%largeur
+%fl\`eche
+x3=x4=x0-if monospace:4u else:4u fi-eps;%longueur fl\`eche
+pos5(rule_thickness,angle(z4-z0)); z5l=z0;%Pointe inf\'erieure fl\`eche
+pos6(rule_thickness,angle(z3-z0)); z6l=z0;%Pointe sup\'erieure fl\`eche
+z9=.5[.5[z3,z4],z0];%tangente extr\'emit\'es
+numeric t; path p; p=z4l{z9-z4}..z6r;%Courbe fl\`eche
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));%Intersection
+%courbe avec ligne horizontale inf\'erieure
+x2=xpart point t of p;%Abscisse de cette intersection
+filldraw z0--z5..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r)
+ --z3r{z9-z3}..z6--z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,5,6,9); endchar;
+
+iff known r_arrow4: cmchar "Triangle";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow4,18u#,v_center(spread#+rule_thickness#));%18u->12u
+adjust_fit(0,0); pickup fine.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+y0=y1=y2=math_axis; x1-.5rule_thickness=eps; rt x0=hround(w)-eps;
+y3-y0=y0-y4=2.1u+eps;
+x3=x4=x0-3.8u-eps;
+%z9=.35[.5[z3,z4],z0];
+numeric t; path p; p=z4..z3;
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+filldraw z0..z4--subpath (0,t) of\\(z4..z3)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3..z4)
+ --z3..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4); endchar;
+
+iff known r_arrow9: cmchar "Triangle pench\'e";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow9,18u#,v_center(spread#+rule_thickness#));%18u->12u
+adjust_fit(0,0); pickup fine.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,76);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+y0=y1=y2=math_axis; x1-.5rule_thickness=eps; rt x0=hround(w)-eps;
+y3-y0=y0-y4=2.1u+eps;
+x2=hround(w-4u);
+x3=.25(y3-y2)+x2-eps;
+x4=-.25(y2-y4)+x2-eps;
+filldraw z0..z3--z2r---z1r..z1l---z2l--z4..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4); endchar;
+
+iff known r_arrow7: cmchar "Harpon";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow7,18u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup fine.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,-90);
+pos3(hair,0); pos6(hair,0);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+y1=y2=math_axis; x1-.5rule_thickness=eps; rt x2=hround(w-2u);
+y3-y1=y1-y6=2.5u+eps;
+x3=x6=x2-2u-eps;
+x4=x5=hround(w)-0.4rule_thickness;
+y4-y1=y1-y5=.2hair;
+filldraw z2l{dir 175}...{dir 110}z3l--z3r{dir -60}...{dir
+-5}z4--z5{dir 185}...{dir -120}z6r--z6l{dir 70}...{dir
+5}z2r---z1l..z1r---z2l & cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Version plus \'etroite
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+iff known r_arrow21: cmchar "Dessin original";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow21,10u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup fine.nib;%crisp -> fine pour tester
+pos1(rule_thickness,90); pos2(rule_thickness,90);%Trait horizontal
+pos3(rule_thickness,0); pos4(rule_thickness,0);%Extr\'emit\'e fl\`eche
+y0=y1=y2=math_axis;%Axe horizontal
+x1-.5rule_thickness=eps;%Extr\'emit\'e gauche
+rt x0=hround(w-u);%Extr\'emit\'e droite
+y3-y0=y0-y4=if monospace:.24 else:.36 fi asc_height+eps;%largeur
+%fl\`eche
+x3=x4=x0-if monospace:3u else:4u fi-eps;%longueur fl\`eche
+pos5(rule_thickness,angle(z4-z0)); z5l=z0;%Pointe inf\'erieure fl\`eche
+pos6(rule_thickness,angle(z3-z0)); z6l=z0;%Pointe sup\'erieure fl\`eche
+z9=.2[.5[z3,z4],z0];%tangente extr\'emit\'es
+numeric t; path p; p=z4l{z9-z4}..z6r;%Courbe fl\`eche
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));%Intersection
+%courbe avec ligne horizontale inf\'erieure
+x2=xpart point t of p;%Abscisse de cette intersection
+filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r)
+ --z3r{z9-z3}..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,5,6,9); endchar;
+
+iff known r_arrow25: cmchar "Fl\`eche grande";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow25,10u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup fine.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+y0=y1=y2=math_axis; x1-.5rule_thickness=eps; rt x0=hround(w)-eps;
+y3-y0=y0-y4=2.5u+eps;
+x3=x4=x0-4.5u-eps;
+z9=.35[.5[z3,z4],z0];
+numeric t; path p; p=z4..z9;
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+filldraw z0..z4--subpath (0,t) of\\(z4..z9)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3..z9)
+ --z3..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,9); endchar;
+
+iff known r_arrow23: cmchar "Fl\`eche normale";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow23,10u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup fine.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+y0=y1=y2=math_axis; x1-.5rule_thickness=eps; rt x0=hround(w)-eps;
+y3-y0=y0-y4=2.1u+eps;
+x3=x4=x0-3.8u-eps;
+z9=.35[.5[z3,z4],z0];
+numeric t; path p; p=z4..z9;
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+filldraw z0..z4--subpath (0,t) of\\(z4..z9)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3..z9)
+ --z3..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,9); endchar;
+
+iff known r_arrow26: cmchar "Fl\`eche \'etroite";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow26,10u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup fine.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+y0=y1=y2=math_axis; x1-.5rule_thickness=eps; rt x0=hround(w)-eps;
+y3-y0=y0-y4=1.5u+eps;
+x3=x4=x0-4.5u-eps;
+z9=.35[.5[z3,z4],z0];
+numeric t; path p; p=z4..z9;
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+filldraw z0..z4--subpath (0,t) of\\(z4..z9)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3..z9)
+ --z3..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,9); endchar;
+
+iff known r_arrow28: cmchar "Fl\`eche droite";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow28,10u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup fine.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,-90);
+pos3(hair,0); pos6(hair,0);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+y1=y2=math_axis; x1-.5rule_thickness=eps; rt x2=hround(w-2u);
+y3-y1=y1-y6=2.2u+eps;
+x3=x6=x2-3.5u-eps;
+x4=x5=hround(w)-0.4rule_thickness;
+y4-y1=y1-y5=.2hair;
+filldraw z2l{dir 165}...{z3-z2}z3l--z3r{z4-z3}...
+z4--z5...{z6-z5}z6r--z6l{z2-z6}...{dir 15}z2r---z1l..z1r---z2l & cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known r_arrow22: cmchar "cmsy plus \'etroit";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow22,10u#,v_center(spread#+rule_thickness#));%18u->12u
+adjust_fit(0,0); pickup fine.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+y0=y1=y2=math_axis;%Axe horizontal
+x1-.5rule_thickness=eps;%Extr\'emit\'e gauche
+rt x0=hround(w)-eps;%Extr\'emit\'e droite
+y3-y0=y0-y4=if monospace:.16 else:.22 fi asc_height+eps;%largeur
+%fl\`eche
+x3=x4=x0-if monospace:4u else:4u fi-eps;%longueur fl\`eche
+pos5(rule_thickness,angle(z4-z0)); z5l=z0;%Pointe inf\'erieure fl\`eche
+pos6(rule_thickness,angle(z3-z0)); z6l=z0;%Pointe sup\'erieure fl\`eche
+z9=.5[.5[z3,z4],z0];%tangente extr\'emit\'es
+numeric t; path p; p=z4l{z9-z4}..z6r;%Courbe fl\`eche
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));%Intersection
+%courbe avec ligne horizontale inf\'erieure
+x2=xpart point t of p;%Abscisse de cette intersection
+filldraw z0--z5..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r)
+ --z3r{z9-z3}..z6--z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,5,6,9); endchar;
+
+iff known r_arrow24: cmchar "Triangle";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow24,10u#,v_center(spread#+rule_thickness#));%18u->12u
+adjust_fit(0,0); pickup fine.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+y0=y1=y2=math_axis; x1-.5rule_thickness=eps; rt x0=hround(w)-eps;
+y3-y0=y0-y4=2.1u+eps;
+x3=x4=x0-3.8u-eps;
+%z9=.35[.5[z3,z4],z0];
+numeric t; path p; p=z4..z3;
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+filldraw z0..z4--subpath (0,t) of\\(z4..z3)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3..z4)
+ --z3..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4); endchar;
+
+iff known r_arrow29: cmchar "Triangle pench\'e";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow29,10u#,v_center(spread#+rule_thickness#));%18u->12u
+adjust_fit(0,0); pickup fine.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,76);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+y0=y1=y2=math_axis; x1-.5rule_thickness=eps; rt x0=hround(w)-eps;
+y3-y0=y0-y4=2.1u+eps;
+x2=hround(w-4u);
+x3=.25(y3-y2)+x2-eps;
+x4=-.25(y2-y4)+x2-eps;
+filldraw z0..z3--z2r---z1r..z1l---z2l--z4..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4); endchar;
+
+iff known r_arrow27: cmchar "Harpon";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(r_arrow27,10u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup fine.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,-90);
+pos3(hair,0); pos6(hair,0);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+y1=y2=math_axis; x1-.5rule_thickness=eps; rt x2=hround(w-2u);
+y3-y1=y1-y6=2.5u+eps;
+x3=x6=x2-2u-eps;
+x4=x5=hround(w)-0.4rule_thickness;
+y4-y1=y1-y5=.2hair;
+filldraw z2l{dir 175}...{dir 110}z3l--z3r{dir -60}...{dir
+-5}z4--z5{dir 185}...{dir -120}z6r--z6l{dir 70}...{dir
+5}z2r---z1l..z1r---z2l & cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+%%%%%%%%%%%%%%%%%%%% Trait pour remplissage
+
+iff known trait01: cmchar "trait 3u";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(trait01,3u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=eps;
+x2=w-eps;
+y1=y2=math_axis;
+draw z1--z2;
+penlabels(1,2);
+endchar;
+
+iff known trait02: cmchar "trait 4u";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(trait02,4u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=eps;
+x2=w-eps;
+y1=y2=math_axis;
+draw z1--z2;
+penlabels(1,2);
+endchar;
+
+iff known trait03: cmchar "trait 5u";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(trait03,5u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=eps;
+x2=w-eps;
+y1=y2=math_axis;
+draw z1--z2;
+penlabels(1,2);
+endchar;
+
+iff known trait04: cmchar "trait 6u";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(trait04,6u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=eps;
+x2=w-eps;
+y1=y2=math_axis;
+draw z1--z2;
+penlabels(1,2);
+endchar;
+
+iff known trait05: cmchar "trait 7u";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(trait05,7u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=eps;
+x2=w-eps;
+y1=y2=math_axis;
+draw z1--z2;
+penlabels(1,2);
+endchar;
+
+iff known trait06: cmchar "trait 8u";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(trait06,8u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=eps;
+x2=w-eps;
+y1=y2=math_axis;
+draw z1--z2;
+penlabels(1,2);
+endchar;
+
+iff known trait07: cmchar "trait 9u";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(trait07,9u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=eps;
+x2=w-eps;
+y1=y2=math_axis;
+draw z1--z2;
+penlabels(1,2);
+endchar;
+
+iff known trait08: cmchar "trait 10u";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(trait08,10u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=eps;
+x2=w-eps;
+y1=y2=math_axis;
+draw z1--z2;
+penlabels(1,2);
+endchar;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \`a virer traits pour tester
+
+iff known traittest01: cmchar "traittest 3u";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(traittest01,3u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=eps;
+x2=w-eps;
+y1=y2=math_axis;
+x3=x4=x1;
+y3-y1=y1-y4=1.5u;
+x5=x6=x2;
+y5-y2=y2-y6=1.5u;
+draw z1--z2;
+draw z3--z4;
+draw z5--z6;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known traittest02: cmchar "traittest 4u";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(traittest02,4u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=eps;
+x2=w-eps;
+y1=y2=math_axis;
+x3=x4=x1;
+y3-y1=y1-y4=1.5u;
+x5=x6=x2;
+y5-y2=y2-y6=1.5u;
+draw z1--z2;
+draw z3--z4;
+draw z5--z6;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known traittest03: cmchar "traittest 5u";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(traittest03,5u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=eps;
+x2=w-eps;
+y1=y2=math_axis;
+x3=x4=x1;
+y3-y1=y1-y4=1.5u;
+x5=x6=x2;
+y5-y2=y2-y6=1.5u;
+draw z1--z2;
+draw z3--z4;
+draw z5--z6;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known traittest04: cmchar "traittest 6u";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(traittest04,6u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=eps;
+x2=w-eps;
+y1=y2=math_axis;
+x3=x4=x1;
+y3-y1=y1-y4=1.5u;
+x5=x6=x2;
+y5-y2=y2-y6=1.5u;
+draw z1--z2;
+draw z3--z4;
+draw z5--z6;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known traittest05: cmchar "traittest 7u";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(traittest05,7u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=eps;
+x2=w-eps;
+y1=y2=math_axis;
+x3=x4=x1;
+y3-y1=y1-y4=1.5u;
+x5=x6=x2;
+y5-y2=y2-y6=1.5u;
+draw z1--z2;
+draw z3--z4;
+draw z5--z6;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known traittest06: cmchar "traittest 8u";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(traittest06,8u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=eps;
+x2=w-eps;
+y1=y2=math_axis;
+x3=x4=x1;
+y3-y1=y1-y4=1.5u;
+x5=x6=x2;
+y5-y2=y2-y6=1.5u;
+draw z1--z2;
+draw z3--z4;
+draw z5--z6;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known traittest07: cmchar "traittest 9u";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(traittest07,9u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=eps;
+x2=w-eps;
+y1=y2=math_axis;
+x3=x4=x1;
+y3-y1=y1-y4=1.5u;
+x5=x6=x2;
+y5-y2=y2-y6=1.5u;
+draw z1--z2;
+draw z3--z4;
+draw z5--z6;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known traittest08: cmchar "traittest 10u";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(traittest08,10u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=eps;
+x2=w-eps;
+y1=y2=math_axis;
+x3=x4=x1;
+y3-y1=y1-y4=1.5u;
+x5=x6=x2;
+y5-y2=y2-y6=1.5u;
+draw z1--z2;
+draw z3--z4;
+draw z5--z6;
+penlabels(1,2,3,4,5,6);
+endchar;
+% \end{macrocode}
+% \begin{macrocode}
+%</mfvecsym>
+% \end{macrocode}
+%\Finale
diff --git a/macros/latex/contrib/esvect/esvect.ins b/macros/latex/contrib/esvect/esvect.ins
new file mode 100644
index 0000000000..8b5c640a33
--- /dev/null
+++ b/macros/latex/contrib/esvect/esvect.ins
@@ -0,0 +1,35 @@
+\def\batchfile{esvect.ins}
+\input docstrip.tex
+\keepsilent
+\preamble
+
+esvect package to typeset vectors.
+
+See also http://perso.wanadoo.fr/eddie.saudrais (in french)
+
+Run LaTeX on escevt.ins to generate files.
+
+Install the files:
+
+-- esvect.sty and uesvect.fd on TEXINPUT;
+-- vect5.mf, vect6.mf, vect7.mf, vect8.mf, vect9.mf, vect10.mf on
+MFINPUT;
+-- generate tfm files running METAFONT on *.mf files, and put
+*.tfm files on the right location.
+
+Run LaTeX on esvect.dtx to generate
+documentation.
+
+\endpreamble
+\generate{\file{esvect.sty}{\from{esvect.dtx}{package}}}
+\generate{\file{uesvect.fd}{\from{esvect.dtx}{fdfile}}}
+\generate{\file{vect5.mf}{\from{esvect.dtx}{mffilea}}}
+\generate{\file{vect6.mf}{\from{esvect.dtx}{mffileb}}}
+\generate{\file{vect7.mf}{\from{esvect.dtx}{mffilec}}}
+\generate{\file{vect8.mf}{\from{esvect.dtx}{mffiled}}}
+\generate{\file{vect9.mf}{\from{esvect.dtx}{mffilee}}}
+\generate{\file{vect10.mf}{\from{esvect.dtx}{mffilef}}}
+\generate{\file{mathvec.mf}{\from{esvect.dtx}{mfmath}}}
+\generate{\file{vsymbol.mf}{\from{esvect.dtx}{mfsymbol}}}
+\generate{\file{vecsym.mf}{\from{esvect.dtx}{mfvecsym}}}
+\endinput
diff --git a/macros/latex/contrib/esvect/esvect.pdf b/macros/latex/contrib/esvect/esvect.pdf
new file mode 100644
index 0000000000..eb33485dd2
--- /dev/null
+++ b/macros/latex/contrib/esvect/esvect.pdf
Binary files differ
diff --git a/macros/latex/contrib/esvect/pfb/vect10.pfb b/macros/latex/contrib/esvect/pfb/vect10.pfb
new file mode 100644
index 0000000000..7a72dec91e
--- /dev/null
+++ b/macros/latex/contrib/esvect/pfb/vect10.pfb
Binary files differ
diff --git a/macros/latex/contrib/esvect/pfb/vect5.pfb b/macros/latex/contrib/esvect/pfb/vect5.pfb
new file mode 100644
index 0000000000..f7e60e200f
--- /dev/null
+++ b/macros/latex/contrib/esvect/pfb/vect5.pfb
Binary files differ
diff --git a/macros/latex/contrib/esvect/pfb/vect6.pfb b/macros/latex/contrib/esvect/pfb/vect6.pfb
new file mode 100644
index 0000000000..1b56d4215d
--- /dev/null
+++ b/macros/latex/contrib/esvect/pfb/vect6.pfb
Binary files differ
diff --git a/macros/latex/contrib/esvect/pfb/vect7.pfb b/macros/latex/contrib/esvect/pfb/vect7.pfb
new file mode 100644
index 0000000000..e12c1587f9
--- /dev/null
+++ b/macros/latex/contrib/esvect/pfb/vect7.pfb
Binary files differ
diff --git a/macros/latex/contrib/esvect/pfb/vect8.pfb b/macros/latex/contrib/esvect/pfb/vect8.pfb
new file mode 100644
index 0000000000..e71535bdcc
--- /dev/null
+++ b/macros/latex/contrib/esvect/pfb/vect8.pfb
Binary files differ
diff --git a/macros/latex/contrib/esvect/pfb/vect9.pfb b/macros/latex/contrib/esvect/pfb/vect9.pfb
new file mode 100644
index 0000000000..f40def9608
--- /dev/null
+++ b/macros/latex/contrib/esvect/pfb/vect9.pfb
Binary files differ