Internos de `\ DeclareMathOperator`
Eu faço duas perguntas abaixo, que são unificadas em uma terceira metaquestão. Graças ao comentário de @DavidCarlisle , percebo que minhas perguntas são tais que a resposta pode depender se elas são interpretadas no contexto do MathJax ou do LaTeX + amsmath. Estou interessado em respostas em ambos os contextos.
Estou constantemente em busca de impor (minhas reconhecidamente autodefinidas) melhores práticas ao às vezes barroco TeX que surge em MO . Muitas vezes, isso envolve mudar, digamos, $Hom(A, B)$para $\operatorname{Hom}(A, B)$, e muitas vezes deixo um bilhete para um novo usuário avisando-o sobre seus \DeclareMathOperatorirmãos.
Percebi em uma postagem que um usuário pegou esse conselho de maneira diferente e começou a usar \DeclareMathOperator\Hom{\operatorname{Hom}}.
P : É \DeclareMathOperator\Hom{\operatorname{Hom}}sinônimo de \DeclareMathOperator\Hom{Hom}?
Recentemente notei outro usuário que usou uma construção como \DeclareMathOperator\Set{\mathit{Set}}.
P : É \DeclareMathOperator\Set{\mathit{Set}}sinônimo de \newcommand\Set{\mathit{Set}}? Se não, é sinônimo de \newcommand\Set{\mathop{\mathit{Set}}}?
Obviamente, há uma meta-pergunta à espreita aqui, que eu seria capaz de responder se estivesse mais confortável mergulhando - acho que é - a amsmathfonte:
P : No nível do código, não apenas no quadro geral "isso é o que você deseja para o nome de um operador", o que fazer \DeclareMathOperatore \operatornamefazer?
Respostas
Não tocarei no MathJax, porque seu modelo é completamente diferente do LaTeX.
Primeira pergunta
Algo como \DeclareMathOperator{\Hom}{\operatorname{Hom}}, naturalmente, funciona, mas \Homvai fazer duas vezes as mesmas coisas. Em amsopn.sty, encontramos
\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}}}}
Assumindo que \fooé indefinido, \DeclareMathOperator{\foo}{???}faz
\DeclareRobustCommand{\foo}{\qopname\newmcodes@ o{???}}
que é uma versão abreviada de
\DeclareRobustCommand{\foo}{\operatorname{???}}
Por outro lado, \operatorname{+++}fará
\qopname\newmcodes@ o{+++}
Portanto, você \Homfaria
\qopname\newmcodes@ o{\qopname\newmcodes@ o{Hom}}
o que parece bastante complicado para nada: é essencialmente o mesmo que fazer
\operatorname{\operatorname{Hom}}
cada vez \Homé usado.
Segunda questão
As definições
\DeclareMathOperator\Set{\mathit{Set}}
\newcommand\Set{\mathit{Set}}
\newcommand\Set{\mathop{\mathit{Set}}}
fará coisas diferentes. Podemos ver as diferenças com um exemplo simples
\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}
A resposta à sua primeira pergunta mostra que \foodepois \DeclareMathOperator{\foo}{foo}é o mesmo que usar \operatorname{foo}, então a linha (1) é a mesma que você obteria \DeclareMathOperator{\Set}{\mathit{Set}}.
Eles são os mesmos? Não.
Terceira pergunta
Use \operatornameno documento para operadores que aparecem uma ou duas vezes. Para operadores que são usados várias vezes, adicione a \DeclareMathOperatorlinha apropriada , a fim de facilitar a digitação e reduzir a confusão.
Termo aditivo
Deixo para você como um exercício para encontrar as diferenças entre
\DeclareMathOperator*{\tlim}{t-lim}
e
\newcommand{\tlim}{\mathop{t-lim}}