`\ DeclareMathOperator` Interna
Ich stelle unten zwei Fragen, die in einer dritten Meta-Frage zusammengefasst sind. Dank des Kommentars von @ DavidCarlisle stelle ich fest, dass meine Fragen so sind, dass die Antwort davon abhängen kann, ob sie im Kontext von MathJax oder von LaTeX + interpretiert werden amsmath
. Ich interessiere mich für Antworten in beiden Kontexten.
Ich bin ständig auf der Suche nach (zugegebenermaßen selbst definierten) Best Practices für das manchmal barocke TeX, das bei MO auftaucht . Eine Menge Zeit ändert dies mit, sagen wir, $Hom(A, B)$
zu $\operatorname{Hom}(A, B)$
, und ich lasse oft eine Notiz für einen neuen Benutzer sie wissen zu lassen \DeclareMathOperator
und Geschwister.
In einem Beitrag bemerkte ich, dass ein Benutzer diesen Rat mit einer Wendung aufgegriffen und mit der Verwendung begonnen hatte \DeclareMathOperator\Hom{\operatorname{Hom}}
.
F : Ist \DeclareMathOperator\Hom{\operatorname{Hom}}
gleichbedeutend mit \DeclareMathOperator\Hom{Hom}
?
Ich habe kürzlich einen anderen Benutzer bemerkt, der eine Konstruktion wie verwendet hat \DeclareMathOperator\Set{\mathit{Set}}
.
F : Ist \DeclareMathOperator\Set{\mathit{Set}}
gleichbedeutend mit \newcommand\Set{\mathit{Set}}
? Wenn nicht, ist es dann auch \newcommand\Set{\mathop{\mathit{Set}}}
?
Offensichtlich lauert hier eine Meta-Frage, die ich beantworten könnte, wenn ich mich wohler fühlen würde - ich denke, es ist - die amsmath
Quelle:
F : Auf der Codeebene, nicht nur das Gesamtbild "Dies ist, was Sie für einen Operatornamen wollen", was tun \DeclareMathOperator
und \operatorname
tun?
Antworten
Ich werde MathJax nicht berühren, da sich sein Modell völlig von LaTeX unterscheidet.
Erste Frage
So etwas \DeclareMathOperator{\Hom}{\operatorname{Hom}}
funktioniert natürlich, macht aber \Hom
doppelt so viel. In amsopn.sty
finden wir
\DeclareRobustCommand{\operatorname}{%
\@ifstar{\qopname\newmcodes@ m}%
{\qopname\newmcodes@ o}}%
\DeclareRobustCommand{\qopname}[3]{%
\mathop{#1\kern\z@\operator@font#3}%
\csname n#2limits@\endcsname}
\newcommand{\DeclareMathOperator}{%
\@ifstar{\@declmathop m}{\@declmathop o}}
\long\def\@declmathop#1#2#3{%
\@ifdefinable{#2}{%
\DeclareRobustCommand{#2}{\qopname\newmcodes@#1{#3}}}}
Unter der Annahme , dass \foo
nicht definiert ist, \DeclareMathOperator{\foo}{???}
tut
\DeclareRobustCommand{\foo}{\qopname\newmcodes@ o{???}}
Das ist eine verkürzte Version von
\DeclareRobustCommand{\foo}{\operatorname{???}}
Auf der anderen Seite \operatorname{+++}
wird tun
\qopname\newmcodes@ o{+++}
Daher \Hom
würden Sie tun
\qopname\newmcodes@ o{\qopname\newmcodes@ o{Hom}}
Das scheint umsonst ziemlich kompliziert zu sein: Es ist im Wesentlichen dasselbe wie zu tun
\operatorname{\operatorname{Hom}}
jedes Mal \Hom
wird verwendet.
Zweite Frage
Die Definitionen
\DeclareMathOperator\Set{\mathit{Set}}
\newcommand\Set{\mathit{Set}}
\newcommand\Set{\mathop{\mathit{Set}}}
wird verschiedene Dinge tun. Wir können die Unterschiede anhand eines einfachen Beispiels erkennen
\documentclass[twocolumn]{article}
\usepackage{amsmath}
\begin{document}
\begin{gather}
x \operatorname{\mathit{Set}}_2 y\\
x \mathit{Set}_2 y \\
x \mathop{\mathit{Set}}_2 y
\end{gather}
\end{document}
Die Antwort auf Ihre erste Frage zeigt , dass \foo
nach \DeclareMathOperator{\foo}{foo}
dem gleichen wie unter Verwendung ist \operatorname{foo}
, so Leitung (1) ist das gleiche , wie Sie von bekommen \DeclareMathOperator{\Set}{\mathit{Set}}
.

Sind sie gleich? Nein.
Dritte Frage
Verwenden Sie \operatorname
im Dokument für Operatoren, die ein- oder zweimal vorkommen. Fügen Sie für Bediener, die mehrmals verwendet werden, die entsprechende \DeclareMathOperator
Zeile hinzu, um die Eingabe zu vereinfachen und die Unordnung zu verringern.
Nachtrag
Ich überlasse es Ihnen als Übung, die Unterschiede zwischen herauszufinden
\DeclareMathOperator*{\tlim}{t-lim}
und
\newcommand{\tlim}{\mathop{t-lim}}