% \iffalse % ------------------------------------------------------------------- % % Copyright 2001--2006, Daniel H. Luecking % % Mathdots may be distributed and/or modified under the conditions of the % LaTeX Project Public License, either version 1.3 of this license or (at % your option) any later version. The latest version of this license is in % % and version 1.3 or later is part of all distributions of LaTeX version % 2003/12/01 or later. % % Mathdots has maintenance status "author-maintained". The Current % Maintainer is Daniel H. Luecking. The Base Interpreters associated with % mathdots are TeX and LaTeX. % %<*sty|tex> %<*driver> \ProvidesFile{mathdots.dtx}% % %\ifx\documentclass\UndEfInEd\input mathdots \expandafter\endinput\fi %\ProvidesPackage{mathdots} %<*sty> [2006/03/16 v0.8 Improve and add various macros for dots in math.]% % %\def\mathdotsfiledate{2006/03/16}% %\def\mathdotsfileversion{0.8}% %<*driver> \documentclass[draft]{ltxdoc} \addtolength{\textwidth}{.5878pt} \def\mytt{\upshape\mdseries\ttfamily} \renewcommand\marg[1]{{\mytt \{#1\}}} \renewcommand\oarg[1]{{\mytt [#1]}} \renewcommand\parg[1]{{\mytt (#1)}} \renewcommand\arg[1]{{\mytt\##1}} \renewcommand{\meta}[1]{{$\langle$\rmfamily\itshape#1\/$\rangle$}} \DeclareRobustCommand\cs[1]{{\mytt\char`\\#1}} \def\prog#1{{\mdseries\scshape #1}} \def\opt#1{{\sffamily\upshape#1}} \def\mtt#1{{\mytt#1}} \let\env\mtt \let\file\mtt \def\MD{\prog{mathdots}} \renewcommand\{{\mtt{\char`\{}} \renewcommand\}{\mtt{\char`\}}} \renewcommand\|{${}\mathrel{|}{}$} \makeatletter \newcommand\bsl{{\mytt\@backslashchar}} % Stupid lists! \def\@listi{\leftmargin\leftmargini \parsep \z@ \@plus\p@ \@minus\z@ \topsep 4\p@ \@plus\p@ \@minus2\p@ \itemsep\parsep} \let\@listI\@listi \@listi \renewcommand\labelitemi{\normalfont\bfseries \textendash} \renewcommand\labelitemii{\textasteriskcentered} \renewcommand\labelitemiii{\textperiodcentered} \leftmargini\parindent % Stupid index! \def\usage#1{\textrm{#1}} \def\index@prologue{\section*{Index}\markboth{Index}{Index}% Numbers refer to the page where the corresponding entry is described. } \def\IndexParms{% \parindent \z@ \columnsep 15pt \parskip 0pt plus 1pt \rightskip 5pt plus2em \mathsurround \z@ \parfillskip-5pt \small % less hanging: \def\@idxitem{\par\hangindent 20pt}% \def\subitem{\@idxitem\hspace*{15pt}}% \def\subsubitem{\@idxitem\hspace*{25pt}}% \def\indexspace{\par\vspace{10pt plus 2pt minus 3pt}}} \makeatother \title{The \MD{} package\thanks{This file has version number \fileversion, last revised \filedate.}} \author{Dan Luecking} \date{\filedate} \DisableCrossrefs \CodelineIndex \AlsoImplementation \begin{document} \DeleteShortVerb{\|} \DocInput{mathdots.dtx} \end{document} % %\fi % \CheckSum{327} % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % \catcode`\_=12 % \GetFileInfo{mathdots.dtx} % \maketitle % % \begin{abstract} % This package provides vertical dots and diagonal dots in math, slanting % in either direction. It should work equally well in \LaTeX{} or plain % \TeX{}. It improves on the default definitions of plain \TeX{} and % \LaTeX{}. Similar improvements are provided for the triple and % quadruple dot accents of AMS\TeX{}/\LaTeX{}. % \end{abstract} % % \StopEventually{\PrintIndex} % % \section{Introduction} % % Running \LaTeX{} or \TeX{} on \file{mathdots.ins} generates % \file{mathdots.sty}, a \LaTeX{} package, and \file{mathdots.tex} a plain % \TeX{} input file. If one puts \verb"\input mathdots.sty" in a plain % \TeX{} file, it will cause \file{mathdots.tex} to be input. This is for % backward compatibility. % % Unlike the commands \cs{vdots} and \cs{ddots} provided by \LaTeX{}, % the versions defined by \MD{} change size with \LaTeX{} size % changing commands, as well as in \{sub[sub]\|super[super]\}scripts. % After \MD{} is loaded, \verb"\Large$\ddots$" will be larger and % \verb"\small$\ddots$" will be smaller than \verb"$\ddots$". Moreover, % \verb"$2^{2^\ddots}$" will also produce a smaller symbol. This last % example is very unlikely to be needed, but the version with the % opposite slant is very common. % % The default \LaTeX{} (and plain \TeX) definition changes the size of the % dots, and the horizontal dimensions, but not the vertical dimensions. % Using the default version in 'scripts produces symbols identical to % those produced elsewhere. Finally, the default takes the dots from the % current text font, whereas the \MD{} package takes them from the % current math symbol font, so they should match other dots in math mode. % This is only really a concern in \mtt{17pt} sizes or larger where % \file{cmr17} is scaled to get text dots, but \file{cmsy12} is scaled to % get math dots. % % \cs{iddots} is similar to \cs{ddots}, except it produces the other % diagonal. This command is not provided in basic \TeX{} or \LaTeX{}. % % \cs{vdots} produces vertical dots (as in standard \TeX{} or \LaTeX{}), % but again, the \MD{} version will change size with size % changing commands. % % The old behavior is stored in \cs{fixedddots} and \cs{fixedvdots}. % If you wish \cs{iddots} to behave similarly then use \cs{fixediddots}. % % The \cs{fixed...} versions try to maintain the (awful) default behavior, % which is to let the horizontal dimensions change size, as well as the % dots themselves, but hard code unchanging vertical dimensions. % % On the chance that some other package changes the behavior before \MD{} % is loaded, use \cs{originalddots}, \cs{originalvdots}, and % \cs{originaliddots} to obtain the versions in force before the \MD{} is % loaded. % % If the \LaTeX{} and the \prog{amsmath} package are detected, the % commands \cs{dddot} and \cs{ddddot} are modified to get the same % size changing behavior in 'scripts. They also correct a positioning bug % in the \prog{amsmath} code. The correction requires the command % \cs{text}, and so is only applied if \prog{amsmath} has been loaded % \emph{before} \MD{}. The old amsmath commands are saved % in \cs{originaldddot} and \cs{originalddddot}. Similar comments apply % to plain \TeX{} with regard to \file{amstex.tex}. % % In \LaTeX{}, all these commands have been made robust as of version 0.6. % % \section{The implementation} % % We define the version and date for plain\TeX{}. The file % \file{mathdots.sty} immediately switches to \file{mathdots.tex} if % \LaTeX{} is not being used. % \iffalse %<*dtx> % \fi % \begin{macrocode} %\def\mathdotsfiledate{2006/02/07}% %\def\mathdotsfileversion{0.7}% %\ifx\documentclass\UndEfInEd\input mathdots \expandafter\endinput\fi % \end{macrocode} % \iffalse % % \fi % % The following are commands for plain \TeX{} that prevent double loading, % announce the package name, and change/restore the category of \mtt{@}. % \begin{macrocode} %<*tex> \expandafter \ifx\csname MathDots\mathdotsfileversion\endcsname\relax \else \immediate\write16{Mathdots already loaded.}\expandafter\endinput \fi \immediate\write16{Package mathdots, \mathdotsfiledate\space version \mathdotsfileversion.}% \expandafter\edef\csname MathDots\mathdotsfileversion\endcsname{% \catcode`\noexpand\@=\the\catcode`@}% \catcode`\@=11 \def\@nameuse#1{\csname#1\endcsname}% % % \end{macrocode} % % Now various shorthands. For example `\cs{MD@us}\cs{MD@t}' becomes % `\cs{textstyle}' and `\cs{MD@uf}\cs{MD@ss}' produces % `\cs{scriptscriptfont 0}'. % \begin{macrocode} \def\MD@us#1{\@nameuse{#1style}}% \def\MD@uf#1{\@nameuse{#1font}0}% \def\MD@t{text}\def\MD@s{script}\def\MD@ss{scriptscript}% \newdimen\MD@unit \MD@unit\p@ % \end{macrocode} % % The following are the main utility macros to implement changes of style. % Since most of our symbols are built with boxes, they have to exit math % mode and need \cs{mathchoice} so we know the current style (i.e., size) % when we re-enter math mode. % % We detect differences in sizes (for example, after \cs{large}) by % examining the appropriate \cs{fontdimen} of family 0. Instead of the % hard coded \mtt{1pt}, we use \mtt{0.1em} from this family. % % We pass along the current style via \cs{everymath}. % % In \cs{MD@palette}, \arg1 is a command which we feed the current % style name. For example, \cs{MD@palette}\cs{MD@ddots} will be our % definition of \cs{ddots}. Then \cs{MD@ddots} will see the current style % as its first argument. % \begin{macrocode} \def\MD@changestyle#1{\relax\MD@unit0.1\fontdimen6\MD@uf{#1}% \everymath\expandafter{\the\everymath\MD@us{#1}}}% \def\MD@dot{$\m@th\ldotp$}% \def\MD@palette#1{\mathchoice{#1\MD@t}{#1\MD@t}{#1\MD@s}{#1\MD@ss}}% % \end{macrocode} % % In the following commands, \arg1 is the current style (supplied via % \cs{MD@palette}). Except for the change in the unit used and the dot % used, the first two definitions are essentially the same as plain's % \cs{ddots} and \cs{vdots}, and the third is the same as the first with % the oxes reversed. % \begin{macrocode} \def\MD@ddots#1{{\MD@changestyle{#1}% \mkern1mu\raise7\MD@unit\vbox{\kern7\MD@unit\hbox{\MD@dot}}% \mkern2mu\raise4\MD@unit\hbox{\MD@dot}% \mkern2mu\raise \MD@unit\hbox{\MD@dot}\mkern1mu}}% \def\MD@vdots#1{\vbox{\MD@changestyle{#1}% \baselineskip4\MD@unit\lineskiplimit\z@ \kern6\MD@unit\hbox{\MD@dot}\hbox{\MD@dot}\hbox{\MD@dot}}}% \def\MD@iddots#1{{\MD@changestyle{#1}% \mkern1mu\raise \MD@unit\hbox{\MD@dot}% \mkern2mu\raise4\MD@unit\hbox{\MD@dot}% \mkern2mu\raise7\MD@unit\vbox{\kern7\MD@unit\hbox{\MD@dot}}}}% % \end{macrocode} % % \DescribeMacro{\fixedddots} % \DescribeMacro{\fixedvdots} % We include current (2005/12/01) \LaTeX{}/plain\TeX{} definitions % so a user can choose them. \LaTeX{} and plain\TeX{} don't have the other % diagonal, so we provide a \DescribeMacro{fixediddots}\cs{fixediddots} % which is just \cs{fixedddots} with the boxes reversed. % % \DescribeMacro{\originalvdots} % \DescribeMacro{\originalddots} % We save the versions at load time so user can use them in case he % loads \MD{} for its other features. Chances are the original % \DescribeMacro{\originaliddots}\cs{iddots} is undefined. % \begin{macrocode} %\DeclareRobustCommand\fixedvdots{% %\def\fixedvdots{% \vbox{\baselineskip4\p@ \lineskiplimit\z@ \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}% %\DeclareRobustCommand\fixedddots{% %\def\fixedddots{% \mathinner{\mkern1mu \raise7\p@\vbox{\kern7\p@\hbox{.}}\mkern2mu \raise4\p@\hbox{.}\mkern2mu \raise\p@\hbox{.}\mkern1mu}}% %\DeclareRobustCommand\fixediddots{% %\def\fixediddots{% \mathinner{\mkern1mu \raise\p@\hbox{.}\mkern2mu \raise4\p@\hbox{.}\mkern2mu \raise7\p@\vbox{\kern7\p@\hbox{.}}\mkern1mu}}% \let\originalddots=\ddots \let\originalvdots=\vdots \let\originaliddots=\iddots % \end{macrocode} % % \DescribeMacro{\ddots} % \DescribeMacro{\vdots} % \DescribeMacro{\iddots} % Here are the actual (re)definitions of these three commands. The % plain\TeX{} version emits messages similar to that produced by % \LaTeX{}'s \cs{DeclareRobustCommand}. % \begin{macrocode} %\DeclareRobustCommand\ddots{% %\def\ddots{% \mathinner{\MD@palette\MD@ddots}}% %\DeclareRobustCommand\iddots{% %\def\iddots{% \mathinner{\MD@palette\MD@iddots}}% %\DeclareRobustCommand\vdots{% %\def\vdots{% \mathinner{\MD@palette\MD@vdots}}% %\wlog{Mathdots Info: Redefining \string\ddots.}% %\wlog{Mathdots Info: Redefining \string\vdots.}% % \end{macrocode} % % Now we try to get AMS \cs{dddot} and \cs{ddddot} accents to behave. % % \DescribeMacro{\dddot} % \DescribeMacro{\ddddot} % We add a \verb"\kern\z@" to prevent \TeX{} from vertically centering % \arg1. I don't know if the \cs{text} command is necessary, but it % doesn't seem to hurt. I included it in the original version because that % one used text dots and needed the text to change size. Now I use a math % symbol (the dot accent) and mathpalette to implement the change. % Still, I don't really understand how \cs{ex@} works in the AMS packages, % so I leave it in. For possible tuning, I have used two macros that % represent the math spacing placed before and after the sequence of % dots (\cs{MD@prekern} and \cs{MD@postkern}). Also, the actual dot is in % the definition of \cs{MD@D} where another spacing command follows the % dot (\cs{MD@dotkern}). In fact, by redefining \cs{MD@D} and possibly the % spacing, one can define other double accent commands. % % \DescribeMacro{\originaldddot} % \DescribeMacro{\originalddddot} % We also save the original \prog{amsmath} versions. % \begin{macrocode} \newbox\MD@dotsbox \newmuskip\MD@prekern \newmuskip\MD@postkern \newmuskip\MD@dotkern \MD@prekern 0mu \MD@postkern -1mu \MD@dotkern -1.3mu \def\MD@dotsaccent#1{\mathpalette{\MD@@dotsaccent{#1}}}% \def\MD@@dotsaccent#1#2#3{% {\setbox\MD@dotsbox\hbox{$#2\mkern\MD@prekern#1\mkern\MD@postkern$}% \mathop{#3\kern\z@}\limits^{% \text{\vbox to-1.4\ex@{\kern-1.8\ex@\copy\MD@dotsbox\vss}}}}% }% \let\originaldddot \dddot \let\originalddddot\ddddot %<*sty> \@ifpackageloaded{amsmath}{% \def\MD@D{\mathchar"5F\mkern\MD@dotkern}% \DeclareRobustCommand\dddot {\MD@dotsaccent{\MD@D\MD@D\MD@D}}% \DeclareRobustCommand\ddddot{\MD@dotsaccent{\MD@D\MD@D\MD@D\MD@D}}% }{}% % %<*tex> \def\amstexfmtname{AmS-TeX}% \ifx\amstexfmtname\fmtname \def\MD@D{\mathchar"5F\mkern\MD@dotkern}% \wlog{Mathdots Info: Redefining \string\dddot.}% \wlog{Mathdots Info: Redefining \string\ddddot.}% \def\dddot {\MD@dotsaccent{\MD@D\MD@D\MD@D}}% \def\ddddot{\MD@dotsaccent{\MD@D\MD@D\MD@D\MD@D}}% \fi \csname MathDots\mathdotsfileversion\endcsname % % % \end{macrocode} %\Finale