Hi Aditya, Aditya Mahajan <[EMAIL PROTECTED]> writes:
> 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} > [EMAIL PROTECTED] > > \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. Have your changes been integrated into the ConTeXt code base yet? If not, how can I use your code? Is it enough to just include the relevant parts in my project's environment file? Thanks, Jesse -- Jesse Alama ([EMAIL PROTECTED]) *60: Something remains to be proved in this case ___________________________________________________________________________________ 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 ___________________________________________________________________________________