ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Aditya Mahajan <adityam@umich.edu>
Subject: Re: Missing \dddot and \ddddot
Date: Fri, 15 Sep 2006 22:28:52 -0400 (EDT)	[thread overview]
Message-ID: <Pine.WNT.4.63.0609152226130.2932@nqvgln> (raw)
In-Reply-To: <Pine.WNT.4.63.0609151409040.3316@nqvgln>

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 to-1.4\ex@{\kern-\tw@\ex@
>>>>>     \hbox{\normalfont ...}\vss}}}}
>>>>> \newcommand{\ddddot}[1]{%
>>>>>    {\mathop{#1}\limits^{\vbox to-1.4\ex@{\kern-\tw@\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 -1.4ex{\kern-2ex\hbox{\the\textfont\z@....}\vss}}}
>>>>>
>>>>> % 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@
> \addto@hook\every@math@size{\compute@ex@}
> \def\compute@ex@{%
>   \begingroup
>   \dimen@-\f@size\p@
>   \ifdim\dimen@<-20\p@
>     \global\ex@ 1.5\p@
>   \else
>     \advance\dimen@10\p@ \multiply\dimen@\tw@
>     \edef\@tempa{\ifdim\dimen@>\z@ -\fi}%
>     \dimen@ \ifdim\dimen@<\z@ -\fi \dimen@
>     \advance\dimen@-\@m sp % fudge factor
>     \vfuzz\p@
>     \def\do{\ifdim\dimen@>\z@
>       \vfuzz=.97\vfuzz
>       \advance\dimen@ -\p@
>       \@xp\do \fi}%
>     \do
>     \dimen@\p@ \advance\dimen@-\vfuzz
>     \global\ex@\p@
>     \global\advance\ex@ \@tempa\dimen@
>   \fi
>   \endgroup
> }

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

% \begin{macro}{\ex@}
%    The \cs{ex@} 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 \cs{ex@} units.
%    Since a macro or mu unit solution for the \meta{dimen} \cs{ex@} won't
%    work without changing a lot of current code in the \pkg{amsmath}
%    package, we set \cs{ex@} through the \cs{every@math@size} hook.
%    The value of \cs{ex@} is scaled nonlinearly in a range of roughly
%    0.5pt to 1.5pt, by the function \cs{compute@ex@}.
%    \begin{macrocode}
\newdimen\ex@
\addto@hook\every@math@size{\compute@ex@}
%    \end{macrocode}
% \end{macro}
%
%    \cs{compute@ex@} computes \cs{ex@} as a nonlinear scaling from 10pt
%    to current font size (\cs{f@size}). 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 \cs{f@size} ($>$ 20pt)
%    so that the value of \cs{ex@} never exceeds 1.5pt.
%
%    \begin{macrocode}
\def\compute@ex@{%
   \begingroup
   \dimen@-\f@size\p@
   \ifdim\dimen@<-20\p@
%    \end{macrocode}
%    Never make \cs{ex@} 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}
     \advance\dimen@10\p@ \multiply\dimen@\tw@
%    \end{macrocode}
%    Save information about the current sign of \cs{dimen@}.
%    \begin{macrocode}
     \edef\@tempa{\ifdim\dimen@>\z@ -\fi}%
%    \end{macrocode}
%    Get the absolute value of \cs{dimen@}.
%    \begin{macrocode}
     \dimen@ \ifdim\dimen@<\z@ -\fi \dimen@
     \advance\dimen@-\@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@: \the\dimen@}%
       \@xp\do \fi}%
     \do
     \dimen@\p@ \advance\dimen@-\vfuzz
     \global\ex@\p@
     \global\advance\ex@ \@tempa\dimen@
   \fi
   \endgroup

Aditya

      reply	other threads:[~2006-09-16  2:28 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-09-14 12:07 WN
2006-09-14 13:51 ` Aditya Mahajan
2006-09-14 15:30   ` WN
2006-09-14 18:53   ` Hans Hagen
2006-09-15  1:03     ` Aditya Mahajan
2006-09-15  7:31       ` Hans Hagen
2006-09-15 18:14         ` Aditya Mahajan
2006-09-16  2:28           ` Aditya Mahajan [this message]

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=Pine.WNT.4.63.0609152226130.2932@nqvgln \
    --to=adityam@umich.edu \
    --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).