\documentclass[11pt,a4paper]{article} \usepackage[a4paper,margin=3cm]{geometry} \setlength{\parskip}{2pt} \makeatletter \newcommand\cs[1]{\texttt{\char`\\#1}} \renewcommand\arg[1]{\nolinebreak[2]\mbox{\texttt{\string{#1\string}}}} \newcommand\oarg[1]{\nolinebreak[2]\mbox{\texttt{[#1]}}} \newcommand\sarg{\texttt{*}} \newcommand\meta[1]{\mbox{\ensuremath{\langle}\textit{#1}\ensuremath{\rangle}}} \newcommand\prototype[1]{\par\pagebreak[1]\bigskip\begingroup \noindent\samepage #1\par \nopagebreak \smallskip \endgroup \@afterheading} % meaningful names, as in faq.sty \let\environment\texttt \let\Package\textsf \makeatother \begin{document} \title{The \Package{tabto} package} \author{Donald Arseneau\thanks{Documentation file assembled by Robin Fairbairns}} \date{Mar 2013, version 1.3} \maketitle \section*{Tabbing to fixed positions in a paragraph} Two new text positioning commands are defined: \cs{tabto} and \cs{tab}. \prototype{\cs{tabto}\arg{\meta{length}}} Tab to a position relative to the left margin in a paragraph (any indentation due to a list is part of the `margin' in this context). If the text on the line already goes past the desired position, the tab starts a new line and moves to the requested horizontal position. \prototype{\cs{tabto}\sarg\arg{\meta{length}}} Similar to \cs{tabto}, except it will perform backspacing, and over-print previous text on the line whenever that text is already longer than the specified length (i.e., no linebreak is produced). Line-breaks are suppressed immediately after \cs{tabto} or \cs{tabto*}. The length register \cs{CurrentLineWidth} will report the width of the existing text on the line, and it may be used in the \meta{length} argument (using calc.sty, for example). Also, there is \cs{TabPrevPos} which stores the \cs{CurrentLineWidth} from the previous tab command, and can be used to return to that position if no line breaks have occurred in between. \prototype{\cs{tab}} Tab to the next tab-stop chosen from a list of tab positions, in the traditional style of typewriters. A \cs{tab} will always move to the next tab stop (or the next line), even if it is already exactly at a tab stop. Thus, ``\cs{tab}\cs{tab}'' skips a position. A linebreak is permitted immediately following a \cs{tab}, in case the ensuing text does not fit well in the remaining space. The tab-stop positions are declared using either \cs{TabPositions} or \cs{NumTabs}: \prototype{\cs{TabPositions}\arg{\meta{length}, \meta{length}, \textrm{\dots}\meta{length}}} Declares the tab stops as a comma-separated list of positions relative to the left margin. A tab-stop at \texttt{0pt} is implicit, and need not be listed. \prototype{\cs{NumTabs}\arg{\meta{number}}} Declares a list of \meta{number} equally-spaced tabs, starting at the left margin and spanning \cs{linewidth}. For example \cs{NumTabs}\arg{2} declares tab-stops at \texttt{0pt} and \texttt{0.5}\cs{linewidth}, the same as \cs{TabPositions}\arg{0pt, 0.5\cs{linewidth}} or \cs{TabPositions}\arg{0.5\cs{linewidth}}. \end{document}