Elementi interni di "\ DeclareMathOperator"

Nov 23 2020

Pongo due domande di seguito, che sono unificate in una terza meta-domanda. Grazie al commento di @ DavidCarlisle , mi rendo conto che le mie domande sono tali che la risposta può dipendere dal fatto che siano interpretate nel contesto di MathJax o di LaTeX + amsmath. Mi interessano le risposte in entrambi i contesti.

Sono costantemente alla ricerca di imporre (ammetto che io stesso definisco) le migliori pratiche sul TeX a volte barocco che affiora a MO . Molte volte questo implica cambiare, ad esempio, $Hom(A, B)$a $\operatorname{Hom}(A, B)$, e spesso lascio una nota per un nuovo utente per fargli conoscere \DeclareMathOperatore per i fratelli.

Ho notato in un post che un utente aveva raccolto questo consiglio con una svolta e ha iniziato a usarlo \DeclareMathOperator\Hom{\operatorname{Hom}}.

D : È \DeclareMathOperator\Hom{\operatorname{Hom}}sinonimo di \DeclareMathOperator\Hom{Hom}?

Recentemente ho notato un altro utente che ha utilizzato una costruzione come \DeclareMathOperator\Set{\mathit{Set}}.

D : È \DeclareMathOperator\Set{\mathit{Set}}sinonimo di \newcommand\Set{\mathit{Set}}? In caso contrario, è sinonimo di \newcommand\Set{\mathop{\mathit{Set}}}?

Ovviamente c'è una meta-domanda in agguato qui, a cui sarei in grado di rispondere se fossi più a mio agio a immergermi - immagino sia - la amsmathfonte:

D : A livello di codice, non solo il quadro generale "questo è quello che vuoi per il nome di un operatore", cosa fare \DeclareMathOperatore \operatornamecosa fare?

Risposte

1 egreg Nov 24 2020 at 09:15

Non toccherò MathJax, perché il suo modello è completamente diverso da LaTeX.

Prima domanda

Qualcosa di simile \DeclareMathOperator{\Hom}{\operatorname{Hom}}ovviamente funziona, ma \Homfarà il doppio delle stesse cose. In amsopn.sty, troviamo

\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}}}}

Supponendo che \foonon sia definito, \DeclareMathOperator{\foo}{???}

\DeclareRobustCommand{\foo}{\qopname\newmcodes@ o{???}}

che è una versione abbreviata di

\DeclareRobustCommand{\foo}{\operatorname{???}}

D'altra parte, \operatorname{+++}andrà bene

\qopname\newmcodes@ o{+++}

Quindi il tuo \Homfarebbe

\qopname\newmcodes@ o{\qopname\newmcodes@ o{Hom}}

che sembra piuttosto complicato per niente: è essenzialmente lo stesso che fare

\operatorname{\operatorname{Hom}}

ogni volta \Homviene utilizzato.

Seconda domanda

Le definizioni

\DeclareMathOperator\Set{\mathit{Set}}
\newcommand\Set{\mathit{Set}}
\newcommand\Set{\mathop{\mathit{Set}}}

farà cose diverse. Possiamo vedere le differenze con un semplice esempio

\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}

La risposta alla tua prima domanda mostra che \fooafter \DeclareMathOperator{\foo}{foo}è uguale all'uso \operatorname{foo}, quindi la riga (1) è la stessa che avresti da \DeclareMathOperator{\Set}{\mathit{Set}}.

Sono gli stessi? No.

Terza domanda

Da utilizzare \operatornamenel documento per operatori che compaiono una o due volte. Per gli operatori che vengono utilizzati più volte, aggiungere la \DeclareMathOperatorriga appropriata , in modo da facilitare la digitazione e ridurre il disordine.

Addendum

Vi lascio come esercizio per trovare le differenze tra

\DeclareMathOperator*{\tlim}{t-lim}

e

\newcommand{\tlim}{\mathop{t-lim}}