% \iffalse %<*never> \documentclass{ltxdoc} \usepackage[T1]{fontenc} \usepackage{undertilde} \parindent=15pt \AtBeginDocument{\CodelineIndex\EnableCrossrefs} \AtEndDocument{\PrintIndex} \begin{document} \def\docdate{2000/08/08} \CheckSum{213} \DocInput{undertilde.dtx} \end{document} % % \fi % % \DoNotIndex{\newline,\rightslice,\small,\itshape,\@@apports,\@@competence} % \DoNotIndex{\@@date,\@@descr,\@@duree,\@@lieu,\@@titre,\\,\aftergroup} % \DoNotIndex{\bigskip,\csname,\def,\edef,\else,\empty} % \DoNotIndex{\endcsname,\endtabularx,\ensuremath,\expandafter} % \DoNotIndex{\fi,\global,\ifx,\large,\largeurcolonne,\let} % \DoNotIndex{\linewidth,\medskip,\newcommand,\newenvironment} % \DoNotIndex{\newlength,\pagestyle,\par,\parindent,\phantom} % \DoNotIndex{\RequirePackage,\scshape,\setlength,\ta,\tb} % \DoNotIndex{\tabularx,\tb,\textbf,\the,\toksdef,\triangleright} % % \setcounter{tocdepth}{1} % \GetFileInfo{undertilde.sty} % % \title{The \textsf{undertilde} package} % \author{Benjamin \textsc{Bayart}\\ % French Data Network\\ % \texttt{bayartb@edgard.fdn.fr}} % \date{Printed on \today\\Last change on \filedate} % \maketitle % % \begin{abstract} % This document describes the use and implementation of the package \textsf{undertilde} % to typeset a tilde under one or several math symbols. % \end{abstract} % % \section{Usage} % % This package provides a |\utilde| command, which behave more or % less like the \TeX\ |\tilde| accent, except that the resulting % accent is put under the letter. One can think about extending % the package to other ``growing accents'' like hat and so on, it % is not yet done, maybe in a future release. % % The syntax is rather evident: % \begin{verbatim} % \utilde{a} \neq \tilde{a} % \end{verbatim} % % Which produces, in math mode: $\utilde{a} \neq \tilde{a}$. % The under accent behaves correctly in all the circumstances where % it was tried. The only limit is the one encoded in the font itself, % there is a size limit for such accents. % % It can be used in fractions, square-roots, and so on. It can also % span several letters. In some cases, the resulting maths can look % strange, like that: %\begin{verbatim} %\frac{\utilde{ab}}{c} \neq \frac{ab}{c} %\end{verbatim} % % Which result in $\frac{\utilde{ab}}{c} \neq \frac{ab}{c}$. % % Lets consider this to be a feature and not a bug. % % \section{How to make this work?} % % In fact, it's rather easy. In the math fonts, at least the one % considered here, the fifth dimension is the minimal amount of % white space to be put under a math accent (cf. \TeX{book}). % % Thus, proceed in N steps: % \begin{enumerate} % \item Typeset the argument, measure its width. % \item Typeset a normal tilde over a ``nothing'' of the same width % and of no height. % \item Make a stack with the argument, then the tilde, then a negative % space to remove the white vertical space added by \TeX. % \end{enumerate} % % \section{Details of the implementation} % % The usual proclamations: % \begin{macrocode} %<*package> \ProvidesPackage{undertilde}[2000/08/08 v1.0 Tilde under a math object] % \end{macrocode} % % First, we allocate a register to store the value of the fifth % fontdimen in the context of the mathematical stuff that is to % be typeset (the right font, the right style, the right size). % % A command to store the current style (display, text, script, etc) % that is in use just before the call (|\mathpal@save|). % % \begin{macrocode} \newlength\knuthian@fdfive \def\mathpal@save#1{\let\was@math@style=#1\relax} % \end{macrocode} % % Then, the real thing. First, we save the style; then we typeset % the argument in box 124. % % \begin{macrocode} \def\utilde#1{\mathpalette\mathpal@save {\setbox124=\hbox{$\was@math@style#1$}% % \end{macrocode} % % Now, the hard thing. The box 125 will, in a firt time contain % nothing (it is used to measure the fontdimen 5). % % \begin{macrocode} \setbox125=\hbox{$\fam=3\global\knuthian@fdfive=\fontdimen5\font$} % \end{macrocode} % % Then after, it contains the tilde typeseted over a white rule % of the same width than box 124 (the math material that have to % be under-tilded). % % \begin{macrocode} \setbox125=\hbox{$\widetilde{\vrule height 0pt depth 0pt width \wd124}$}% % \end{macrocode} % % Then we display, directly in the math formula a box containing % the math material (box 124), the tilde (box 125) and a negative % skip to ``remove'' the offset added by \TeX\ (the minimal height % of the accent, from baseline). % % \begin{macrocode} \baselineskip=1pt\relax \vtop{\copy124\copy125\vskip -\knuthian@fdfive}}} % % \end{macrocode} % % \end{document}