Elementos internos de `\ DeclareMathOperator`
Hago dos preguntas a continuación, que se unifican en una tercera metapregunta. Gracias al comentario de @ DavidCarlisle , me doy cuenta de que mis preguntas son tales que la respuesta puede depender de si se interpretan en el contexto de MathJax o de LaTeX + amsmath. Me interesan las respuestas en ambos contextos.
Estoy constantemente en la búsqueda de imponer (mis autodefinidas) las mejores prácticas en el TeX, a veces barroco, que surge en MO . Muchas veces esto implica cambiar, digamos, $Hom(A, B)$a $\operatorname{Hom}(A, B)$, y a menudo dejo una nota para un nuevo usuario informándole acerca de sus \DeclareMathOperatorhermanos.
Noté en una publicación que un usuario había aprendido este consejo con un giro y comenzó a usar \DeclareMathOperator\Hom{\operatorname{Hom}}.
P : ¿Es \DeclareMathOperator\Hom{\operatorname{Hom}}sinónimo de \DeclareMathOperator\Hom{Hom}?
Recientemente me di cuenta de que otro usuario usaba una construcción como \DeclareMathOperator\Set{\mathit{Set}}.
P : ¿Es \DeclareMathOperator\Set{\mathit{Set}}sinónimo de \newcommand\Set{\mathit{Set}}? Si no es así, ¿es sinónimo de \newcommand\Set{\mathop{\mathit{Set}}}?
Obviamente, hay una metapregunta acechando aquí, que podría responder si me sintiera más cómodo sumergiéndome en, supongo que sí, la amsmathfuente:
P : En el nivel de código, no solo en el panorama general "esto es lo que desea para un nombre de operador", ¿qué hacer \DeclareMathOperatory \operatornamequé hacer?
Respuestas
No tocaré MathJax, porque su modelo es completamente diferente al de LaTeX.
Primera pregunta
Algo como, \DeclareMathOperator{\Hom}{\operatorname{Hom}}por supuesto, funciona, pero \Homhará dos veces las mismas cosas. En 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}}}}
Suponiendo que \foono está definido, \DeclareMathOperator{\foo}{???}¿
\DeclareRobustCommand{\foo}{\qopname\newmcodes@ o{???}}
que es una versión abreviada de
\DeclareRobustCommand{\foo}{\operatorname{???}}
Por otro lado, \operatorname{+++}haré
\qopname\newmcodes@ o{+++}
Por \Homlo tanto tu harías
\qopname\newmcodes@ o{\qopname\newmcodes@ o{Hom}}
que parece bastante complicado para nada: es esencialmente lo mismo que hacer
\operatorname{\operatorname{Hom}}
cada vez \Homse utiliza.
Segunda pregunta
Las definiciones
\DeclareMathOperator\Set{\mathit{Set}}
\newcommand\Set{\mathit{Set}}
\newcommand\Set{\mathop{\mathit{Set}}}
Hará cosas diferentes. Podemos ver las diferencias con un simple ejemplo.
\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 respuesta a su primera pregunta muestra que \foodespués \DeclareMathOperator{\foo}{foo}es lo mismo que usar \operatorname{foo}, por lo que la línea (1) es la misma de la que obtendría \DeclareMathOperator{\Set}{\mathit{Set}}.
¿Son lo mismo? No.
Tercera pregunta
Úselo \operatornameen el documento para los operadores que aparecen una o dos veces. Para los operadores que se utilizan varias veces, agregue la \DeclareMathOperatorlínea adecuada , para facilitar la escritura y reducir el desorden.
Apéndice
Te dejo como ejercicio para encontrar las diferencias entre
\DeclareMathOperator*{\tlim}{t-lim}
y
\newcommand{\tlim}{\mathop{t-lim}}