% 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, Herries Press % Maintainer: Will Robertson (will dot robertson at latex-project dot org) % 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: % % This work has the LPPL maintenance status "maintained". % The Current Maintainer of this work is Will Robertson. % % \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{ifmtarg}[2009/09/02 v1.2a 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 % % % CHANGE HISTORY % v1.2a - New maintainer (Will Robertson) %