PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mit \renewcommand Befehle "tauschen"



moggahorn
05-10-2008, 16:23
Hallo,

ich würde gerne sowohl das kleine Theta in Latex gegen das Var-Theta als auch das originale große Theta gegen das originale kleine Theta austauschen. Und da ich schreibfaul bin und finde, das man sich schon genug Befehle merken muss, würde ich das gerne so machen:

\renewcommand{\Theta}{\theta}
\renewcommand{\theta}{\vartheta}

Leider klappt da so nicht; es werden immer nur varthetas ausgegeben. Gibts nicht irgendeinen Workaround, der das behebt oder muss ich wirklich meinen eigenen Befehl definieren?

Und weils thematisch so gut passt, noch eine zweite Frage: ich finde den Abstand vor und nach dem "\in" zu groß. Gibt es irgendeine Möglichkeit den Befehl unter Verwendung seiner selbst umzudefinieren, also so wie es das nicht funktionierende Beispiel

\renewcommand{\in}{\! \in \!}

suggeriert?

Vielen Dank und schönen Gruß

Jan

sommerfee
05-10-2008, 16:31
Hallo Jan,


\renewcommand{\Theta}{\theta}
\renewcommand{\theta}{\vartheta}

Bei \newcommand wird der Befehl erst zur Laufzeit expandiert, d.h. ein \Theta wird im Text zu \theta und da du \theta umdefiniert hast, wird das letztendlich immer zu \vartheta. TeX sieht einige Kniffe vor, um Expansion auch während des Definierens zu gestatten (\edef, \expand, \noexpand, ...), in diesem Fall ist es aber zum Glück ganz einfach, das gewünschte zu erreichen:



\let\Theta\theta
\let\theta\vartheta



\renewcommand{\in}{\! \in \!}

Hier haben wir ein Rekursionsproblem: \in wird zu \! \in \!, dies wird zu \! \! \in \! \!, dies wird zu \! \! \! \in \! \! \! usw. Umgehen läßt es sich, indem man mit \let die vorherige Definition von \in in ein anderes Makro kopiert:



\let\OriginalIn\in
\renewcommand{\in}{\! \OriginalIn \!}


Gruß,
Axel

Stefan_K
05-10-2008, 16:44
Hallo Jan,

mal abgesehen von der Überlegung, ob es wirklich sinnvoll ist, vordefinierte Makros zu ändern statt eigene zu definieren, könnte man alternativ zu letzterem Vorschlag von Axel die Klasse von \in von \mathrel zu \mathord ändern, um das spacing anzupassen:

\DeclareMathSymbol{\in}{\mathord}{symbols}{"32}
Viele Grüße,

Stefan