\documentclass[DIV=8, parskip=half, pagesize=auto]{scrartcl}

\usepackage{fixltx2e}
\usepackage{etex}
\usepackage{xspace}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[svgnames]{xcolor}
\usepackage{array}
\usepackage{microtype}
\usepackage{hyperref}

\newcommand*{\angleurl}[1]{\href{#1}{\texttt{<#1>}}}
\newcommand*{\pkg}[1]{\textsf{#1}}
\newcommand*{\cs}[1]{\texttt{\textbackslash#1}}
\makeatletter
\newcommand*{\cmd}[1]{\cs{\expandafter\@gobble\string#1}}
\makeatother
\newcommand*{\meta}[1]{\textlangle\textsl{#1}\textrangle}
\newcommand*{\marg}[1]{\texttt{\{}\meta{#1}\texttt{\}}}

\addtokomafont{title}{\rmfamily}

\title{The \pkg{ifmtarg} package\thanks{This manual corresponds to \pkg{ifmtarg}~v1.2a, dated~2009/09/02.}}
\author{Author: Peter Wilson, Herries Press\\Maintainer: Will Robertson\thanks{will dot robertson at latex-project dot org}}
\date{2009/09/02}


\begin{document}

\maketitle

Provides an if--then--else command for an empty macro argument
(empty = zero or more spaces only)
Use as \cmd{\@ifmtarg}\marg{arg1}\marg{Code for arg1 empty}\marg{Code for arg1 not empty}

The \cmd{\@ifmtarg} command takes 3~arguments and \cmd{\@ifnotmtarg} takes 2~arguments.
\cmd{\@ifnotmtarg} is slightly more efficient when code is only required
for a non-empty argument.

Example usages:
%
\begin{verbatim}
\newcommand{\isempty}{1]{%
  \@ifmtarg{#1}{\typeout{YES}}{\typeout{NO}}}
\end{verbatim}
%
\begin{tabular}{@{}>{\color{SeaGreen}}l@{$\quad\to\quad$}>{\ttfamily}l@{}}
  \verb+\isempty{}+    & YES \\
  \verb+\isempty{   }+ & YES \\
  \verb+\isempty{E}+   & NO  \\
  \verb+\isempty{ E }+ & NO
\end{tabular}
%
\begin{verbatim}
\newcommand{\isnotempty}[1]{%
   \@ifnotmtarg{#1}{\typeout{YES}}}
\end{verbatim}
%
\begin{tabular}{@{}>{\color{SeaGreen}}l@{$\quad\to\quad$}>{\ttfamily}l@{}}
  \verb+\isnotempty{}+    &     \\
  \verb+\isnotempty{   }+ &     \\
  \verb+\isnotempty{E}+   & YES \\
  \verb+\isnotempty{ E }+ & YES
\end{tabular}

In an Email to me on 13 March 2000, Donald Arseneau pointed out some
failings with my original definition of the \cmd{\@ifmtarg} command:
%
\begin{verbatim}
\newcommand{\@ifmtarg}[3]{%
  \edef\@mtarg{\zap@space#1 \@empty}%  
  \ifx\@empty\@mtarg\relax #2\else #3\fi}
\end{verbatim}
%
It works most of the time correctly but Donald showed that it can 
give unexpected results 
under conditions that I had not thought of. He suggested the coding 
that now appears in the package above for the \cmd{\@ifmtarg} and 
\cmd{\@ifnotmtarg} commands. For a discussion on detecting empty arguments 
see \href{http://www.ctan.org/pub/tex-archive/info/aro-bend/answer.002}{\texttt{CTAN/info/aro-bend/answer.002}}


\minisec{Change History}

\begin{labeling}[\hspace{\labelsep}--]{v1.2a}
\item[v1.2a] New maintainer (Will Robertson)
\end{labeling}

\bigskip

\begin{quote}
  \footnotesize
  Copyright Peter Wilson, 1996 \\
  Copyright Peter Wilson and Donald Arseneau, 2000
  
  This work may be distributed and/or modified under the
  conditions of the \LaTeX\ Project Public License, either
  version~1.3c of this license or (at your option) any 
  later version: \angleurl{http://www.latex-project.org/lppl.txt}
  
  This work has the LPPL maintenance status ``maintained''.
  The Current Maintainer of this work is Will Robertson.
\end{quote}

\end{document}
