DeclareMathOperator vs. newcommand

Neue Frage »

Mathespezialschüler Auf diesen Beitrag antworten »
DeclareMathOperator vs. newcommand
Hallo!
Kann mir jemand erklären, was der Unterschied zwischen DeclareMathOperator und newcommand ist? Kann es sein, dass man bei DeclareMathOperator Operatoren definieren kann, die ähnlich wie Summenzeichen sind, unter die man dann standardmäßig einfach durch _{...} etwas direkt drunter schreiben kann? Und wenn ja wie geht das? Also was ich muss ich dafür ins Argument von DeclareMathOperator schreiben, damit er mir so etwas erzeugt?

Danke.
Mathespezialschüler Auf diesen Beitrag antworten »

Ich habe jetzt herausgefunden, dass man mit "\DeclareMathOperator*{\befehl}{Name oder mathematisches Symbol}" erzwingen kann, dass die Supersubscripts (tiefgestellte Symbole) wirklich unter dem mathematischen Symbol und nicht daneben tiefgestellt werden.

Was allerdings der genaue Unterschied zwischen DeclareMathOperator und newcommand ist, habe ich noch nicht verstanden. Auch der Unterschied zwischen "\newcommand" und "\newcommand*" bleibt mir bisher verborgen. Irgendwo stand, dass man bei ersterem im Argument des Befehls Paragraphenumbrüche machen kann oder so ähnlich, aber ich habe leider nicht verstanden, was mir das sagen sollte. Weiß jemand Rat?
Stefan_K Auf diesen Beitrag antworten »
\DeclareMathOperator, \newcommand*
Zitat:
Original von Mathespezialschüler
Was allerdings der genaue Unterschied zwischen DeclareMathOperator und newcommand ist, habe ich noch nicht verstanden.

\DeclareMathOperator definiert ein "nicht zebrechliches" Kommando über \DeclareRobustCommand, es wird sich um Super- und Subscript gekümmert, weiterhin wird sowohl für korrekte Schrift (Operator-Schrift, aufrecht) als auch passende Abstände gesorgt, das Kommando wird durch \mathop als Operator deklariert. Das braucht man nicht mehr alles durch \newcommand selbst zu tun und zu berücksichtigen.

Zitat:
Original von Mathespezialschüler
Auch der Unterschied zwischen "\newcommand" und "\newcommand*" bleibt mir bisher verborgen.

Das hast zu schonmal richtig gelesen - Parameter in der zweiten Form dürfen nicht mehr als einen Absatz enthalten. Diese Einschränkung erleichtert ggf. die Fehlersuche - ist ein Absatz im Parametertext, zeigt LaTeX beim Auftreten eines Fehler evtl. auf eine Position im Text, die nicht ursächlich für den Fehler ist, einen Absatz zu weit o.ä. wenn ich mich recht erinnere. Es ist ansonsten nicht wirklich wichtig, die *-Form kennen nicht viele, sie wird kaum verwendet oder genannt. Ich mache es automatisch, wenn eh kein Parameter definiert ist oder wenn er eben keine Absätze enthält, oder wenn ich Makros redefiniere, die mit \def programmiert sind, denn \newcommand entspräche \long\def.

Stefan


--
TeXblog
Mathespezialschüler Auf diesen Beitrag antworten »

Hm ok bisher habe ich das aufrechte Schriftbild z.B. erzeugt durch

code:
1:
\newcommand{\Abb}{\operatorname{Abb}}

das ist natürlich auch etwas mehr zu schreiben. Aber der Befehl \operatorname sorgt auch für passende Abstände oder? Es ist dann zwar nicht als mathoperator deklariert, aber bis auf die Subscripts dürfte es dann keine Unterschiede geben, denke ich mal?! Was bedeutet denn genau das "nicht zerbrechlich" - kannst du dafür vielleicht ein konkretes Beispiel geben? Und sind \operatorname-Befehle auch "nicht zerbrechlich"?

Danke!
Stefan_K Auf diesen Beitrag antworten »
Zerbrechliche Befehle
Hallo,

\Abb "zerbricht" z.B. hier in seine Bestandteile:
code:
1:
2:
3:
4:
5:
6:
7:
8:
\documentclass[a4paper,10pt]{article}
\usepackage{amsmath}
\newcommand{\Abb}{\operatorname{Abb}}
\begin{document}
\tableofcontents
\section{Test von $\Abb $}
text
\end{document}

In der toc-Datei steht nämlich
code:
1:
\contentsline {section}{\numberline {1}Test von $\operatorname {Abb}$}{1}

und nicht etwa
code:
1:
\contentsline {section}{\numberline {1}Test von $\Abb $

Das ist hier unproblematisch, in anderen Fällen kann dieses Expandieren Probleme verursachen. Das kann man vermeiden, wenn man \protect voranstellt:
code:
1:
\section{Test von $\protect\Abb$}

Dann erscheint die andere Ausgabe im toc, nämlich $\Abb $. Das wäre von vornherein der Fall, wenn man \DeclareMathOperator{\Abb}{Abb} geschrieben hätte.
\operatorname ist robust.

Stefan
Mathespezialschüler Auf diesen Beitrag antworten »

Ok, ich denke, das habe ich jetzt verstanden. Danke! smile
 
 
Mathespezialschüler Auf diesen Beitrag antworten »

Ist es richtig, dass ich mit \DeclareMathOperator die Befehle für Operatoren mit Eingabeparametern nicht umdefinieren kann? Siehe folgendes Minimalbeispiel.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
\documentclass[11pt,parskip=full]{scrartcl}

\usepackage{amsmath}  								% Mathe-Improvements

\DeclareMathOperator{\discup}{\mathbin{\dot{\cup}}}
\DeclareMathOperator*{\bigdiscup}{\mathbin{\dot{\bigcup}}}

\DeclareMathOperator{\inter}{\mathring}
\DeclareMathOperator{\cl}{\overline}

\begin{document}
$\inter M$ und $\cl M$ geht nicht, $A\discup B$ und $\bigdiscup\limits_{\alpha\in I}~U_{\alpha}$ aber schon.
\end{document}

Das heißt wohl, dass ich bei solchen Dingen doch newcommand nutzen muss?!
Stefan_K Auf diesen Beitrag antworten »
Makrodefinition
\DeclareMathOperator ist ja auch nicht für Akzente, Pfeildrübersetzen o.ä. gedacht, sondern für solche Textkürzel-Operatoren wie sin, log, lim etc.
\mathring ist ein Akzent, kein Operator (original: \DeclareMathAccent{\mathring}{\mathalpha}{operators}{"17}).

Dann nimmt man eben \newcommand oder eben auch \DeclareRobustCommand.

Stefan
Mathespezialschüler Auf diesen Beitrag antworten »

Ok danke. smile
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »