On Fri, 15 Sep 2006, Aditya Mahajan wrote:

> On Fri, 15 Sep 2006, Hans Hagen wrote:
>
>> Aditya Mahajan wrote:
>>> On Thu, 14 Sep 2006, Hans Hagen wrote:
>>>
>>>
>>>> Aditya Mahajan wrote:
>>>>
>>>>> On Thu, 14 Sep 2006, WN wrote:
>>>>>
>>>>>
>>>>>
>>>>>> Hello,
>>>>>> I need to use \dddot and \ddddot in one of my documents, does anyone
>>>>>> know how to
>>>>>> define these math symbols.
>>>>>>
>>>>>>
>>>>> The trouble is that most fonts do not contain these accents.
>>>>> amsmath.sty gets over this definition by faking these symbols. It is
>>>>> easy to port these definitions to context.
>>>>>
>>>>> amsmath.sty definition
>>>>>
>>>>> \newcommand{\dddot}[1]{%
>>>>>    {\mathop{#1}\limits^{\vbox [EMAIL PROTECTED]@\ex@
>>>>>     \hbox{\normalfont ...}\vss}}}}
>>>>> \newcommand{\ddddot}[1]{%
>>>>>    {\mathop{#1}\limits^{\vbox [EMAIL PROTECTED]@\ex@
>>>>>     \hbox{\normalfont....}\vss}}}}
>>>>>
>>>>>
>>>>> Converting to context
>>>>>
>>>>> %--------------------%<------------------------------------
>>>>> \unprotect
>>>>>
>>>>> % The true copy of amsmath definitions
>>>>> \def\amsdddot {\limits^{\vbox to -1.4ex{\kern-2ex\hbox{\the\textfont\z@ 
>>>>> ...}\vss}}}
>>>>> \def\amsddddot{\limits^{\vbox to [EMAIL PROTECTED]
>>>>>
>>>>> % I do not understand why you need to give negative height
>>>>>
>>>>>
>>>> \setbox\scratchbox{..} \ht\scratchbox0pt \dp\scratchbox-2pt
>>>>
>>>
>>> I was wondering why amstex definition does this, as the 1.4ex depth
>>> was too big. Then I realized that it is not 1.4ex but 1.4\ex@ with
>>> \ex@ as .2326ex. ughh....the ugly syntax of plain tex...
>>>
>>> So here is a more reliable reproduction of amstex dddot and ddddot
>>>
>>> \newdimen\amstexex
>>>
>>> \amstexex = .2326ex
>>>
>> what's this funny number based on, somehow related to interlinespace?
>>
>> one cannot define a measure globally this way, since an ex is font
>> dependent,;
>>
>> \def\amstexex{\dimexpr.08\lineheight\relax}
>
> The latex package amsgen.sty define it more carefully
>
> \newdimen\ex@
> [EMAIL PROTECTED]@[EMAIL PROTECTED]@[EMAIL PROTECTED]
> [EMAIL PROTECTED]@{%
>   \begingroup
>   [EMAIL PROTECTED]@size\p@
>   \ifdim\dimen@<-20\p@
>     \global\ex@ 1.5\p@
>   \else
>     [EMAIL PROTECTED]@ [EMAIL PROTECTED]@
>     [EMAIL PROTECTED]@>\z@ -\fi}%
>     \dimen@ \ifdim\dimen@<\z@ -\fi \dimen@
>     [EMAIL PROTECTED]@m sp % fudge factor
>     \vfuzz\p@
>     \def\do{\ifdim\dimen@>\z@
>       \vfuzz=.97\vfuzz
>       \advance\dimen@ -\p@
>       [EMAIL PROTECTED] \fi}%
>     \do
>     [EMAIL PROTECTED]@ [EMAIL PROTECTED]
>     [EMAIL PROTECTED]@
>     \global\advance\ex@ [EMAIL PROTECTED]@
>   \fi
>   \endgroup
> }

A bit of explaination incase someone is wondering what is going on

% [EMAIL PROTECTED]
%    The [EMAIL PROTECTED] variable provides a small unit of space for use in
%    math-mode constructions, that varies according to the current type
%    size. For example, the \cn{pmb} command uses [EMAIL PROTECTED] units.
%    Since a macro or mu unit solution for the \meta{dimen} [EMAIL PROTECTED] 
won't
%    work without changing a lot of current code in the \pkg{amsmath}
%    package, we set [EMAIL PROTECTED] through the [EMAIL PROTECTED]@size} hook.
%    The value of [EMAIL PROTECTED] is scaled nonlinearly in a range of roughly
%    0.5pt to 1.5pt, by the function [EMAIL PROTECTED]@}.
%    \begin{macrocode}
\newdimen\ex@
[EMAIL PROTECTED]@[EMAIL PROTECTED]@[EMAIL PROTECTED]
%    \end{macrocode}
% \end{macro}
%
%    [EMAIL PROTECTED]@} computes [EMAIL PROTECTED] as a nonlinear scaling from 
10pt
%    to current font size ([EMAIL PROTECTED]). Using .97 as the multiplier 
makes 1
%    |ex@| $\approx$ .9pt when the current type size is 8pt and 1 |ex@|
%    $\approx$ 1.1pt when the current type size is 12pt.
%
%    The formula is essentially
% \begin{displaymath}
% \newcommand{\points}{\mbox{pt}}
% \newcommand{\floor}[1]{\lfloor#1\rfloor}
%      1\points \pm (1\points - (.97)^{\floor{\vert 10 - n\vert}})
% \end{displaymath}
%    where $n$ = current type size, but adjusted to differentiate
%    half-point sizes as well as whole point sizes, and there is a
%    cutoff for extraordinarily large values of [EMAIL PROTECTED] ($>$ 20pt)
%    so that the value of [EMAIL PROTECTED] never exceeds 1.5pt.
%
%    \begin{macrocode}
[EMAIL PROTECTED]@{%
   \begingroup
   [EMAIL PROTECTED]@size\p@
   \ifdim\dimen@<-20\p@
%    \end{macrocode}
%    Never make [EMAIL PROTECTED] larger than 1.5pt.
%    \begin{macrocode}
     \global\ex@ 1.5\p@
   \else
%    \end{macrocode}
%    Adjust by the reference size and multiply by 2 to allow for
%    half-point sizes.
%    \begin{macrocode}
     [EMAIL PROTECTED]@ [EMAIL PROTECTED]@
%    \end{macrocode}
%    Save information about the current sign of [EMAIL PROTECTED]
%    \begin{macrocode}
     [EMAIL PROTECTED]@>\z@ -\fi}%
%    \end{macrocode}
%    Get the absolute value of [EMAIL PROTECTED]
%    \begin{macrocode}
     \dimen@ \ifdim\dimen@<\z@ -\fi \dimen@
     [EMAIL PROTECTED]@m sp % fudge factor
%    \end{macrocode}
%    Here we use \cs{vfuzz} merely as a convenient scratch register
%    \begin{macrocode}
     \vfuzz\p@
%    \end{macrocode}
%    Multiply in a loop.
%    \begin{macrocode}
     \def\do{\ifdim\dimen@>\z@
       \vfuzz=.97\vfuzz
       \advance\dimen@ -\p@
%\message{\vfuzz: \the\vfuzz, \dimen@: [EMAIL PROTECTED]
       [EMAIL PROTECTED] \fi}%
     \do
     [EMAIL PROTECTED]@ [EMAIL PROTECTED]
     [EMAIL PROTECTED]@
     \global\advance\ex@ [EMAIL PROTECTED]@
   \fi
   \endgroup

Aditya
_______________________________________________
ntg-context mailing list
ntg-context@ntg.nl
http://www.ntg.nl/mailman/listinfo/ntg-context

Reply via email to