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