%\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} % %\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} % % \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} % % \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} % % \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} % % \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} % % \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} % % \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} % % \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} % % \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} % % \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} % % \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} % % \end{macrocode} %\Finale