PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kombination von \DeclareRobustCommand und \providecommand



infutura
09-12-2010, 14:10
Hallo!

Gibt es eine Kombination der beiden Kommandos \DeclareRobustCommand und \providecommand ? Ich möchte gewissermaßen ein \DeclareRobustCommand, was aber nur zu einer Definition führt, wenn das besagte Kommando noch nicht definiert ist.

Danke,
infutura

sommerfee
09-12-2010, 19:03
\unless\ifdefined\blah
\DeclareRobustCommand\blah{...}%
\fi


oder



\unless\ifcsname blah \endcsname
\DeclareRobustCommand\blah{...}%
\fi


(Benötigt e-TeX, aber das sollte heute ja nun wirklich kein Problem mehr sein.)

Siehe auch: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=isdef

LuPi
10-12-2010, 08:31
Hier könnte eventuell auch das Paket robustcommand (http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=robustcommand) von Interesse sein.

sommerfee
10-12-2010, 18:23
Hier könnte eventuell auch das Paket robustcommand (http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=robustcommand) von Interesse sein.

Das von diesem Paket bereitgestellte Makro wirft aber eine Fehlermeldung, wenn der betroffene Befehl schon definiert ist, ist also für die Problemstellung des Threadstarters nicht einsetzbar.

rais
12-12-2010, 09:00
Moin moin,


Gibt es eine Kombination der beiden Kommandos \DeclareRobustCommand und \providecommand ?

Im etoolbox (http://dante.ctan.org/tex-archive/help/Catalogue/entries/etoolbox.html)-Paket ist ein \providerobustcmd-Befehl definiert...


Ich möchte gewissermaßen ein \DeclareRobustCommand, was aber nur zu einer Definition führt, wenn das besagte Kommando noch nicht definiert ist.

...und tut genau das. Was soll aber geschehen, wenn das Makro bereits definiert ist, aber zerbrechlich ist? Evtl. lohnt ein Umweg, etwa


\usepackage{etoolbox}
\providecommand\blah{...}
\robustify{\blah}

oder


\providecommand\blah{...}
\let\blubb\blah
\DeclareRobustCommand\blah{\blubb}

dann sollte \blah ggf. die originale Definition behalten aber nicht mehr fragil sein.;)

MfG