PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : \def oder \newcommand



Joerka
07-06-2010, 14:24
Hallo,

ich bin mal wieder am Vereinheitlichen und Komprimieren eines LaTeX-Codes.

In diesem Code nutze ich...

\newcommand, wenn ich wirklich eine lange "Kommandoabfolge" zusammenstelle, für die außerdem optinale Argumente nötig sind, bspw.:

\newcommand{\zeichneKoordinatensystem}[4]{...}

(benötigt jeweils Anfang und Ende für x-Achse und y-Achse: 4 Argumente)

\def, wenn ich nur eine Variable ohne optionales Argument benötige:

\def\variableKosten{\Kosten-\Fixkosten}

Was spricht aber dagegen, einheitlich \def zu verwenden und was sind die Vor- bzw. Nachteile von \newcommand?

lockstep
07-06-2010, 14:42
Die Länge einer Kommandoabfolge und das Vorhandensein bzw. die Zahl optionaler Argumente sollten deine Entscheidung zwischen \def und \newcommand nicht beeinflussen. Wichtig ist: \newcommand testet im Gegensatz zu \def darauf, ob ein Befehl bereits vorhanden ist und gibt ggf. eine Fehlermeldung aus - teste mal \newcommand{\dh}{blabla} vs. \def\dh{blabla}.

Ach ja: Mit \newcommand definierte Befehle erlauben Absätze in ihrem Argument - \newcommand ist also eigentlich die LaTeX-Entsprechung zu \long\def. Als Ersatz für \def gibt es \newcommand*.

lockstep

Joerka
07-06-2010, 14:52
Vielen Dank für die Informationen... wovon genau soll ich denn die Verwendung abhängig machen? Ist es eine reine "Geschmacksfrage"?

Momentan tendiere ich eher zu \def, da es geringfügig unkomplizierter ist (erst newcommand, später renewcommand…) und ich keine Absätze benötige...

lockstep
07-06-2010, 15:01
Nun ja, wenn du mittels \def versehentlich einen Befehl überschreibst, der durch ein von dir verwendetes Paket (oder im LaTeX-Kern, oder in TeX) definiert wurde, treten meist unerwünschte Nebenwirkungen auf.

lockstep

Joerka
07-06-2010, 15:05
Danke für die Antwort! Das leuchtet ein...

voss
07-06-2010, 15:06
Vielen Dank für die Informationen... wovon genau soll ich denn die Verwendung abhängig machen? Ist es eine reine "Geschmacksfrage"?

Momentan tendiere ich eher zu \def, da es geringfügig unkomplizierter ist (erst newcommand, später renewcommand…) und ich keine Absätze benötige...

das hängt davon ab, ob du die Variablenübergabe standardmäßig handhaben willst, d.h. _ein_ optionales Argument grundsätzlich in
eckigen Klammern. Willst du dieses in spitzen Klamemrn haben, nützt dir \newcommand nichts, dann musst du \def nehmen. Man sollte unter LaTeX imemr erst einmal \providecommand oder \newcommand nehmen. Reichen diese nicht, dann geht man eine Ebene zurück.

Herbert

lockstep
07-06-2010, 15:57
das hängt davon ab, ob du die Variablenübergabe standardmäßig handhaben willst, d.h. _ein_ optionales Argument grundsätzlich in
eckigen Klammern. Willst du dieses in spitzen Klamemrn haben, nützt dir \newcommand nichts, dann musst du \def nehmen.

Für Experimentierfreudige gibt es neuerdings auch NewDocumentCommand (http://www.texdev.net/2010/05/23/from-newcommand-to-newdocumentcommand/) aus dem LaTeX3-Paket xparse.

lockstep

voss
07-06-2010, 16:59
Für Experimentierfreudige gibt es neuerdings auch NewDocumentCommand (http://www.texdev.net/2010/05/23/from-newcommand-to-newdocumentcommand/) aus dem LaTeX3-Paket xparse.


das nützt genauso wenig, wenn ich spezielle Makrodefinitionen habe ...

Herbert

lockstep
07-06-2010, 17:31
Es dürfte u.a. dann nützen, wenn man ein optionales Argument in spitzen Klammern haben möchte.

lockstep

EDIT: Oder auch (vielleicht interessanter für fortgeschrittene AnwenderInnen) einen Befehl mit zwei optionalen Argumenten.