\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}