Open main menu

Changes

Created page with "This short article (being far from complete) is about Math and arrows used for vectors, as in <context>$\overrightarrow{AB}$</context>. If anyone feels like writing a more ex..."
This short article (being far from complete) is about Math and arrows used for vectors, as in <context>$\overrightarrow{AB}$</context>.

If anyone feels like writing a more extensive article about math arrows in general, you're wellcome to do so.

== Vectors with arrows ==

=== \vec, <context>$\vec{\strut}$</context> ===

The simplest way to write vectors is to use <code>\vec</code>:
<context source="yes">
$(\vec{\imath}, \vec{\jmath}, \vec{k})$
</context>


However, that solution is not applicable when one needs to use longer arrows, as in:

<context source="yes">
$\vec{AB}$
</context>

=== \overrightarrow, <context>$\overrightarrow{\strut}$</context> ===

For such cases, the plain format provides another command, \overrightarrow:

<context source="yes">
$\overrightarrow{AB}$
</context>


Hovever, again, that command seems to be unsuitable for short letters:
<context source="yes">
$(\overrightarrow{\imath}, \overrightarrow{\jmath}, \overrightarrow{k})$
</context>

which means that one would need to combine both commands at best.

Another nasty property of \overrightarrow is that it doesn't scale down (textstyle, scriptstyle, ...):

<context source="yes">
$(X_{Y_{AB}}, X_{Y_{\overrightarrow{AB}}})$
</context>

''Wait a minute ... has it really been fixed in ConTeXt when compared to plain TeX ???
That's not fair! I cannot demonstrate the problem now! ''
-- [[User:Mojca Miklavec|Mojca]] (crying)

Anyway, here's how it looks like in plain TeX:

<context>
$(X_{Y_{AB}}, X_{Y_{\displaystyle{\overrightarrow{AB}}}})$
</context>

== Vectors with harpoons ==

In some countries vectors are written with harpoons as opposed to arrows. Plain TeX has no support for that, add to that the fact that fonts have no suitable glyphs.

{{todo|clean the code (some might be in the core already), describe Aditya's macros}}

<context>
\unprotect

\def\mtharrowfill#1#2#3#4#5#6#7#8% AM: Added #8 (for displaystyle)
{$\mathsurround 0pt
\thickmuskip0mu\medmuskip\thickmuskip\thinmuskip\thickmuskip
\relax#8#5%
\mkern-#1mu
\cleaders\hbox{$#8\mkern -#2mu#6\mkern -#3mu$}\hfill
\mkern-#4mu#7$}

%D Now we need to make sure that the extensible arrows do not get
%D %D affected. So...

\def\domthxarr#1#2#3#4#5% hm, looks like we do a double mathrel
{\begingroup
\def\mtharrfactor{1}%
\def\mtharrextra {0}%
\processaction[#1] % will be sped up
[ \v!none=>\def\mtharrfactor{0},
\v!small=>\def\mtharrextra{10},
\v!medium=>\def\mtharrextra{15},
\v!big=>\def\mtharrextra{20},
\v!normal=>,
\v!default=>,
\v!unknown=>\doifnumberelse{#1}{\def\mtharrextra{#1}}\donothing]%
\mathsurround\zeropoint
\muskip0=\thirdoffourarguments #2mu
\muskip2=\fourthoffourarguments #2mu
\muskip4=\firstoffourarguments #2mu
\muskip6=\secondoffourarguments #2mu
\muskip0=\mtharrfactor\muskip0 \advance\muskip0 \mtharrextra mu
\muskip2=\mtharrfactor\muskip2 \advance\muskip2 \mtharrextra mu
\setbox0\hbox{$\scriptstyle
\mkern\muskip4\relax
\mkern\muskip0\relax
#5\relax
\mkern\muskip2\relax
\mkern\muskip6\relax
$}%
\setbox4\hbox{#3\displaystyle}% AM: Added displaystyle
\dimen0\wd0
\ifdim\wd4>\dimen0 \dimen0\wd4 \fi
\setbox2\hbox{$\scriptstyle
\mkern\muskip4\relax
\mkern\muskip0\relax
#4\relax
\mkern\muskip2\relax
\mkern\muskip6\relax
$}%
\ifdim\wd2>\dimen0 \dimen0\wd2 \fi
\setbox4\hbox to \dimen0{#3\displaystyle}% AM: added dislaystyle
\mathrel{\mathop{\hbox to
\dimen0{\hss\copy4\hss}}\limits^{\box0}_{\box2}}
\endgroup}

\let\domthxarrsingle\domthxarr

%D Now, for defining overarrows.

\def\definemathoverarrow
{\dotripleargument\dodefinemathoverarrow}

\def\dodefinemathoverarrow[#1][#2][#3]%
{\ifthirdargument
\setvalue{#1}{\dohandlemathoverarrow[#2][#3]}%
\else
\setvalue{#1}{\dohandlemathoverarrow[\zeropoint][#2]}%
\fi}

\def\dohandlemathoverarrow[#1][#2]%
{\mathpalette{\dodohanglemathoverarrow{#1}{#2}}}

% Note: math-pln has \kern-\onepoint, amsmath does not. I keep the
% % kern amount as an option. This is useful with overharpoons.

\def\dodohanglemathoverarrow#1#2#3#4%
{\vbox{\ialign{##\crcr
#2#3\crcr
\noalign{\kern#1\nointerlineskip}
$\m@th\hfil#3#4\hfil$\crcr}}}

\protect

\definemathoverarrow [overleftarrow] [\leftarrowfill]
\definemathoverarrow [overrightarrow] [\rightarrowfill]
\definemathoverarrow [overleftrightarrow] [\leftrightarrowfill]


%$\overleftarrow{A}$ $\overleftarrow{ABC}$
%$a_{\overleftarrow{A}}$ $b_{\overleftarrow{ABC}}$
%
%$\overleftrightarrow{A}$ $\overleftrightarrow{ABC}$
%
%$a_{\overleftrightarrow{A}}$ $b_{\overleftrightarrow{ABC}}$

\definemathoverarrow [overtwoheadrightarrow] [\twoheadrightarrowfill]
\definemathoverarrow [overtwoheadleftarrow] [\twoheadleftarrowfill]
\definemathoverarrow [overrightharpoondown] [1pt] [\rightharpoondownfill]
\definemathoverarrow [overrightharpoonup] [\rightharpoonupfill]
\definemathoverarrow [overleftharpoondown] [1pt] [\leftharpoondownfill]
\definemathoverarrow [overleftharpoonup] [\leftharpoonupfill]


\def\definemathshortarrow
{\dotripleargument\dodefinemathshortarrow}

\def\dodefinemathshortarrow[#1][#2][#3]%
{\ifthirdargument
\setvalue{#1}{\dohandlemathshortarrow[#2][#3]}%
\else
\setvalue{#1}{\dohandlemathshortarrow[\zeropoint][#2]}%
\fi}

\def\dohandlemathshortarrow[#1][#2]%
{\mathpalette{\dodohandlemathshortarrow{#1}{#2}}}

\def\dodohandlemathshortarrow#1#2#3#4%
{\setbox0\hbox{$\m@th#3#4$}%
\vbox{\ialign{##\crcr
\mirror{\clip[width=\wd0]{\mirror{$\m@th#2#3$}}}\crcr
\noalign{\kern#1\nointerlineskip}%
$\m@th\hfil#3#4\hfil$\crcr}}}

\definemathshortarrow [shortoverrightharpoonup]
[\rightharpoonup]

\let\myvec\shortoverrightharpoonup
$(\myvec{\imath},\myvec{\jmath},\myvec{k})$ or $\myvec{\nabla}$, $\myvec{\sigma}$, $\myvec{r}$ or $\displaystyle{A^{\myvec{ABCD}}}$
</context>

=== \overrightharpoonup, <context>$\rightharpoonup$</context> ===

{{todo|compare sizes of different arrows}}

== Antykwa ToruĊ„ska ==

{{todo|Jacko and Janusz have added some extra glyphs - explore, describe the problem & solution and draw}}

\mathchardef\minusleft="32C9
\mathchardef\minusright="32CA
\mathchardef\minusc="32C8

== See also ==

This is a [[This Way - My Way#MyWay|My Way]] about a related topic:
* [http://dl.contextgarden.net/myway/matharrows.pdf Extensible Arrows in ConTeXt] by Aditya Mahajan


[[Category:Math]]
1,005

edits