Elementos internos de `\ DeclareMathOperator`

Nov 23 2020

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

1 egreg Nov 24 2020 at 09:15

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