\RequirePackage{filecontents} \begin{filecontents*}{README.txt} ______________________ The TRIMSPACES package v1.1 This package provides commands that allow you to expandably remove spaces around a token list or remove surrounding spaces within a macro definition. Will Robertson Copyright 2009 Released under the LaTeX Project Public License \end{filecontents*} \begin{filecontents}{trimspaces.sty} \ProvidesPackage{trimspaces}[2009/09/17 v1.1 Trim spaces around a token list] % Trimming surrounding spaces: \catcode`\Q=3 \newcommand\trim@spaces[1]{% \romannumeral-`\q\trim@trim@\noexpand#1Q Q% } \long\def\trim@trim@#1 Q{\trim@trim@@#1Q} \long\def\trim@trim@@#1Q#2{#1} \catcode`\Q=11 \newcommand\trim@spaces@noexp[1]{% \unexpanded\expandafter\expandafter\expandafter {\trim@spaces{#1}}% } \newcommand\trim@spaces@in[1]{% \edef#1{\expandafter\trim@spaces@noexp\expandafter{#1}}% } % Trimming preceding spaces: \newcommand\trim@pre@space[1]{% \romannumeral-`\.\expandafter\noexpand#1% } \newcommand\trim@pre@space@noexp[1]{% \unexpanded\expandafter{% \romannumeral-`\.\expandafter\noexpand#1% }% } \newcommand\trim@pre@space@in[1]{% \expandafter\def\expandafter#1\expandafter{% \romannumeral-`\.\expandafter\noexpand#1% }% } % Trimming trailing space: \catcode`\Q=3 \newcommand\trim@post@space[1]{\trim@trim@#1Q Q} \catcode`\Q=11 \newcommand\trim@post@space@noexp[1]{% \unexpanded\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter\expandafter {\trim@post@space{#1}}% } \newcommand\trim@post@space@in[1]{% \edef#1{\expandafter\trim@post@space@noexp\expandafter{#1}}% } % That's it. \end{filecontents} %%%%%%%%%1%%%%%%%%%2%%%%%%%%%3%%%%%%%%%4%%%%%%%%%5 % Conditionally compile the documentation & generate the .ins file: \providecommand\pstoolCompile{Y} \if\pstoolCompile N \expandafter\endinput \fi \begin{filecontents*}{trimspaces.ins} %&latex \def\pstoolCompile{N} \input pstool.tex \csname @@end\endcsname \end{filecontents*} \makeatletter \documentclass{article} \usepackage[rm,medium]{titlesec} \usepackage{xcolor} \usepackage[colorlinks,linktocpage]{hyperref} \usepackage{gmdoc} \usepackage{gmverb} \dekclubs \stanzaskip=\bigskipamount \CodeSpacesGrey \let\pkg\textsf \usepackage{trimspaces} \usepackage[T1]{fontenc} \usepackage{microtype} \usepackage{lmodern} \usepackage[sc,osf]{mathpazo} \linespread{1.1} \frenchspacing \GetFileInfo{trimspaces.sty} \begin{document} \title{The \pkg{trimspaces} package} \author{Package author: Will Robertson\\Code thanks to Morten H\o gholm} \date{\fileversion\qquad\filedate} \maketitle \tableofcontents \section{Use of the package} This package provides a collection of space trimming macros for the \LaTeX\ programmer. Tools are provided to remove either preceding space, trailing space, or both from a token list or the contents of a macro. For an extensive discussion on this topic, see chapter fifteen of Peter Wilson's compendium of Michael Downes' `Around the Bend' exercises: \par\centerline{\url{http://tug.ctan.org/pkg/around-the-bend}} The code that this package is based on, however, originates with Morten H\o gholm. Thanks! \subsection{Trimming spaces} \begin{itemize} \item \cs{trim@spaces} \marg{text}\\ \cs{trim@pre@space} \marg{text}\\ \cs{trim@post@space} \marg{text}\par Fully expandable, removes spaces at the beginning and/or end of \meta{text}. \item \cs{trim@spaces@noexp} \marg{text}\\ \cs{trim@pre@space@noexp} \marg{text}\\ \cs{trim@post@space@noexp} \marg{text}\par Variants of the above that after full expansion result in the original unexpanded text stripped of surrounding spaces. (\textit{Requires $\varepsilon$-\TeX}.) \item \cs{trim@spaces@in} \meta{macro}\\ \cs{trim@pre@space@in} \meta{macro}\\ \cs{trim@post@space@in} \meta{macro}\par Re-defines \meta{macro} as itself stripped of its surrounding spaces (these commands are obviously not expandable). \end{itemize} \subsection{Examples} Trimming surrounding spaces: \begin{verbatim} \def\foo{bar} \edef\a{\trim@spaces{ a \foo ! }} \edef\aa{\trim@spaces@noexp{ aa \foo ! }} \def\b{ b \foo ! } \trim@spaces@in\b a: [\detokenize\expandafter{\a}] \\ aa: [\detokenize\expandafter{\aa}] \\ b: [\detokenize\expandafter{\b}] \end{verbatim} which produces: \begin{quote} \makeatletter \def\foo{bar} \edef\a{\trim@spaces{ a \foo ! }} \edef\aa{\trim@spaces@noexp{ aa \foo ! }} \def\b{ b \foo ! } \trim@spaces@in\b a: [\detokenize\expandafter{\a}] \\ aa: [\detokenize\expandafter{\aa}] \\ b: [\detokenize\expandafter{\b}] \end{quote} Only removing preceding spaces: \begin{verbatim} \def\foo{bar} \edef\a{\trim@pre@space{ a \foo ! }} \edef\aa{\trim@pre@space@noexp{ aa \foo ! }} \def\b{ b \foo ! } \trim@pre@space@in\b a: [\detokenize\expandafter{\a}] \\ aa: [\detokenize\expandafter{\aa}] \\ b: [\detokenize\expandafter{\b}] \end{verbatim} which produces: \begin{quote} \makeatletter \def\foo{bar} \edef\a{\trim@pre@space{ a \foo ! }} \edef\aa{\trim@pre@space@noexp{ aa \foo ! }} \def\b{ b \foo ! } \trim@pre@space@in\b a: [\detokenize\expandafter{\a}] \\ aa: [\detokenize\expandafter{\aa}] \\ b: [\detokenize\expandafter{\b}] \end{quote} Only removing trailing spaces: \begin{verbatim} \def\foo{bar} \edef\a{\trim@post@space{ a \foo ! }} \edef\aa{\trim@post@space@noexp{ aa \foo ! }} \def\b{ b \foo ! } \trim@post@space@in\b a: [\detokenize\expandafter{\a}] \\ aa: [\detokenize\expandafter{\aa}] \\ b: [\detokenize\expandafter{\b}] \end{verbatim} which produces: \begin{quote} \makeatletter \def\foo{bar} \edef\a{\trim@post@space{ a \foo ! }} \edef\aa{\trim@post@space@noexp{ aa \foo ! }} \def\b{ b \foo ! } \trim@post@space@in\b a: [\detokenize\expandafter{\a}] \\ aa: [\detokenize\expandafter{\aa}] \\ b: [\detokenize\expandafter{\b}] \end{quote} \section{Package information} The most recent publicly released version of \pkg{trimspaces} is available at \textsc{ctan}: \url{http://tug.ctan.org/pkg/trimspaces/}. Historical and developmental versions are available at GitHub: \url{http://github.com/wspr/trimspaces/}. While general feedback via email is welcomed, specific bugs or feature requests should be reported through the issue tracker: \url{http://github.com/wspr/trimspaces/issues}. \subsection{Licence} This package is freely modifiable and distributable under the terms and conditions of the \LaTeX\ Project Public License,\footnote{Available at the \LaTeX\ Project website: \url{http://www.latex-project.org/lppl/}} version 1.3c or greater (your choice). This work consists of the source file \texttt{\jobname.tex} and the derived files \texttt{\jobname.sty}, \texttt{\jobname.ins}, and the documentation \texttt{\jobname.pdf}. This work is author-maintained by \textsc{Will Robertson}. \section{Implementation} \parindent=0pt \DocInput{trimspaces.sty} \end{document}