% ifmtarg.sty % % Provides an if-then-else command for an empty macro argument % (empty = zero or more spaces only) % Use as \@ifmtarg{arg1}{Code for arg1 empty}{Code for arg1 not empty} % % author: Peter Wilson (CUA) % (now at peter.r.wilson@boeing.com) % Copyright Peter Wilson, 1996 % Copyright Peter Wilson and Donald Arseneau, 2000 % Released under the LaTeX Project Public License % % \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{ifmtarg}[2000/03/24 v1.2 check for an empty argument] %% Commands by Donald Arseneau \begingroup \catcode`\Q=3 \long\gdef\@ifmtarg#1{\@xifmtarg#1QQ\@secondoftwo\@firstoftwo\@nil} \long\gdef\@xifmtarg#1#2Q#3#4#5\@nil{#4} \long\gdef\@ifnotmtarg#1{\@xifmtarg#1QQ\@firstofone\@gobble\@nil} \endgroup \endinput % % The \@ifmtarg command takes 3 arguments and \@ifnotmtarg takes 2 arguments. % \@ifnotmtarg is slightly more efficient when code is only required % for a non-empty argument. % % Example usages: % \newcommand{\isempty}{1]{% % \@ifmtarg{#1}{\typeout{YES}}{\typeout{NO}}} % % \isempty{} -> YES % \isempty{ } -> YES % \isempty{E} -> NO % \isempty{ E } -> NO % % \newcommand{\isnotempty}[1]{% % \@ifnotmtarg{#1}{\typeout{YES}}} % % \isnotempty{} -> % \isnotempty{ } -> % \isnotempty{E} -> YES % \isnotempty{ E } -> YES % % In an Email to me on 13 March 2000, Donald Arseneau pointed out some % failings with my original definition of the \@ifmtarg command: % \newcommand{\@ifmtarg}[3]{% % \edef\@mtarg{\zap@space#1 \@empty}% % \ifx\@empty\@mtarg\relax #2\else #3\fi} % % 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 \@ifmtarg and % \@ifnotmtarg commands. For a discussion on detecting empty arguments % see CTAN/info/aro-bend/answer.002 % % Peter W. %