ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Aditya Mahajan <adityam@umich.edu>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Cc: Mojca Miklavec <mojca.miklavec.lists@gmail.com>
Subject: Re: \overleftrightarrow
Date: Thu, 28 Jun 2007 23:31:32 -0400 (EDT)	[thread overview]
Message-ID: <alpine.WNT.0.999.0706282317540.3712@nqvgln> (raw)
In-Reply-To: <m2zm2jvb10.fsf@stanford.edu>

On Thu, 28 Jun 2007, Jesse Alama wrote:

> I'm preparing a geometry course using ConTeXt and am impressed with the
> system so far.  One thing I need is to do is typeset various geometrical
> symbols.  It looks like ConTeXt already has the \overleftarrow and
> \overrightarrow commands, but one thing I'd like to have is
> \overleftrightarrow, for typesetting the symbol customarily used to
> denote the line determined by two points.  It seems, though, that this
> isn't available in ConTeXt, or, at least, it is not available by
> default.  I tried looking on the contextgarden and google, but didn't
> come across anything.  Is the \overleftrightarrow command already
> available?

Actually just adding overleftrightarrow is easy, but better will be an 
interface to easily define such commands. So ....

> If not, what can I do so that I can use it?

ConTeXt uses overleftarrow and overrightarrow as defined in plain 
tex. This does not work in subscripts.

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

Here is a solution. First we patch math-ext so that arrowfills take a 
style.

\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 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}}$


As an added bonus:

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

$\overtwoheadrightarrow  {XYZ}$
$\overtwoheadleftarrow   {XYZ}$
$\overrightharpoondown   {XYZ}$
$\overrightharpoonup     {XYZ}$
$\overleftharpoondown    {XYZ}$
$\overleftharpoonup      {XYZ}$

There are also underarrows, which will not be too hard to do. I will 
patch math-ext with both overarrows and underarrows. I think that 
there needs to be some "italic correction" for the arrow. It is 
centered on the math box, but the math box is tilted to the right. Any 
way to determine the "correct" horizontal skip that should be added.

Mojca, I remember that you had some trouble with overharpoons. Does 
this take care of that?

Aditya
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


  reply	other threads:[~2007-06-29  3:31 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-29  0:50 \overleftrightarrow Jesse Alama
2007-06-29  3:31 ` Aditya Mahajan [this message]
2007-06-30  8:47   ` \overleftrightarrow Mojca Miklavec
2007-07-01 16:29     ` \overleftrightarrow Hans Hagen
2007-07-19  7:01     ` \overleftrightarrow Aditya Mahajan
2007-07-19 15:42       ` overleftrightarrow Aditya Mahajan
2007-07-11 18:33   ` \overleftrightarrow Jesse Alama
2007-07-11 18:42     ` \overleftrightarrow Aditya Mahajan
2007-07-11 18:57       ` \overleftrightarrow Jesse Alama

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.WNT.0.999.0706282317540.3712@nqvgln \
    --to=adityam@umich.edu \
    --cc=mojca.miklavec.lists@gmail.com \
    --cc=ntg-context@ntg.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).