%\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
