PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Test, ob Argument von Makro leer ist



infutura
07-12-2010, 14:41
Hallo,

ich möchte ein Makro erstellen, was zwei Argumente hat und sich unterschiedlich verhält, je nachdem, ob die Argumente leer sind oder nicht. Ich habe dazu vor Jahren bereits ein paar Codezeilen auf

http://www.foren.uni-oldenburg.de/fs/fsmath/messages/1/50.html?1118213579

aufgeschnappt, die ich bis heute nicht wirklich standen habe. Aber damit konnte ich die Aufgabe lösen. Heute existiert diese Webseite nicht mehr. Hier ein Minimalbeispiel, das die Benutzung illustriert:



\documentclass[11pt]{amsart}
\usepackage{amssymb}
\usepackage[all,cmtip]{xy} % xymatrix

% I may as well include my robust expandable definions, which can be
% used in \edef or \write where the \def would not be executed:
%
% \if\blank --- checks if parameter is blank (Spaces count as blank)
% \if\given --- checks if parameter is not blank: like \if\blank{#1}\else
% \if\nil --- checks if parameter is null (spaces are NOT null)
% use \if\given{ } ... \else ... \fi etc.
%

{\catcode`\!=8 % funny catcode so ! will be a delimiter
\catcode`\Q=3 % funny catcode so Q will be a delimiter
\long\gdef\given#1{88\fi\Ifbl@nk#1QQQ\empty!}
\long\gdef\blank#1{88\fi\Ifbl@nk#1QQ..!}% if null or spaces
\long\gdef\nil#1{\IfN@Ught#1* {#1}!}% if null
\long\gdef\IfN@Ught#1 #2!{\blank{#2}}
\long\gdef\Ifbl@nk#1#2Q#3!{\ifx#3}% same as above
}

\newcommand{\mycommand}[2]{ \if\blank{#2}
{\phi_{#1}}
\else
{\phi_{#1}^{(#2)}}
\fi }

\begin{document}

$\mycommand{1}{2}$
$\mycommand{1}{}$

%\begin{align}
%\xymatrix{
% \mycommand{1}{2}
%}
%\end{align}

\end{document}

Leider funktioniert das ganze nicht innerhalb von xymatrix. Kann mir dabei jemand helfen? Oder gibt es eine andere stabile Alternative?

Vielen Dank,
infutura

voss
07-12-2010, 16:07
ich möchte ein Makro erstellen, was zwei Argumente hat und sich unterschiedlich verhält, je nachdem, ob die Argumente leer sind oder nicht. Ich habe dazu vor Jahren bereits ein paar Codezeilen auf

Leider funktioniert das ganze nicht innerhalb von xymatrix. Kann mir dabei jemand helfen? Oder gibt es eine andere stabile Alternative?

Vielen Dank,
infutura


\documentclass[11pt]{amsart}
\usepackage{amssymb}
\usepackage[all,cmtip]{xy}

\newcommand\mycommand[2]{%
\ifx\relax#2\relax\phi_{#1}
\else\ifx\relax#1\relax
\else\phi_{#1}^{(#2)}\fi\fi}

\begin{document}

$\mycommand{1}{2}$
$\mycommand{1}{}$

\begin{align}
\xymatrix{\protect\mycommand{1}{2}}
\end{align}

\end{document}


Herbert