![](https://secure.gravatar.com/avatar/c5ae4f9aa0d3a9bd5376e92b322c3e50.jpg?s=120&d=mm&r=g)
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