From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/trimspaces/trimspaces.tex | 240 +++++++++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 macros/latex/contrib/trimspaces/trimspaces.tex (limited to 'macros/latex/contrib/trimspaces/trimspaces.tex') diff --git a/macros/latex/contrib/trimspaces/trimspaces.tex b/macros/latex/contrib/trimspaces/trimspaces.tex new file mode 100644 index 0000000000..d8041d36c7 --- /dev/null +++ b/macros/latex/contrib/trimspaces/trimspaces.tex @@ -0,0 +1,240 @@ +\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} -- cgit v1.2.3