`\ DeclareMathOperator` 내부

Nov 23 2020

아래에 세 번째 메타 질문으로 통합 된 두 가지 질문을합니다. @DavidCarlisle의 의견 덕분에 내 질문이 MathJax 또는 LaTeX +의 맥락에서 해석되는지 여부에 따라 대답이 달라질 수 있다는 것을 알고 있습니다 amsmath. 두 가지 맥락에서 답변에 관심이 있습니다.

나는 MO 에서 발생하는 때로 바로크 양식의 TeX에 모범 사례를 적용하기 위해 끊임없이 노력하고 있습니다. 이 말, 변경 포함 시대의 많은 $Hom(A, B)$합니다 $\operatorname{Hom}(A, B)$, 나는 종종 대해 알려주는 새로운 사용자에 대한 메모를 남겨 \DeclareMathOperator형제 자매.

한 게시물에서 사용자가이 조언을 꼬집어서 \DeclareMathOperator\Hom{\operatorname{Hom}}.

Q : \DeclareMathOperator\Hom{\operatorname{Hom}}과 동의어 \DeclareMathOperator\Hom{Hom}입니까?

나는 최근에 같은 구조를 사용하는 다른 사용자를 발견했습니다 \DeclareMathOperator\Set{\mathit{Set}}.

Q : \DeclareMathOperator\Set{\mathit{Set}}과 동의어 \newcommand\Set{\mathit{Set}}입니까? 그렇지 않은 경우 \newcommand\Set{\mathop{\mathit{Set}}}? 와 동의어 입니까?

분명히 여기에 숨어있는 메타 질문이 있습니다. 제가 좀 더 편안하게 다이빙을한다면 대답 할 수있을 것입니다 amsmath.

Q : 무엇을, "이것이 당신이 연산자의 이름을 원하는 것입니다"코드뿐만 아니라 큰 그림의 수준에 \DeclareMathOperator\operatorname있습니까?

답변

1 egreg Nov 24 2020 at 09:15

MathJax는 모델이 LaTeX와 완전히 다르기 때문에 건드리지 않겠습니다.

첫 번째 질문

같은 뭔가 \DeclareMathOperator{\Hom}{\operatorname{Hom}}물론 작동하지만, \Hom두 번 같은 일을 할 것입니다. 에서 amsopn.sty, 우리는 발견

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

가정하면 \foo정의되어 있지 \DeclareMathOperator{\foo}{???}않습니다

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

단축 된 버전입니다

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

반면에 \operatorname{+++}할 것이다

\qopname\newmcodes@ o{+++}

따라서 당신 \Hom은 할 것입니다

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

아무것도하기에는 꽤 복잡해 보입니다. 기본적으로하는 것과 동일합니다.

\operatorname{\operatorname{Hom}}

매번 \Hom사용됩니다.

두 번째 질문

정의

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

다른 일을 할 것입니다. 간단한 예를 통해 차이점을 확인할 수 있습니다.

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

첫 번째 질문에 대한 대답은 \fooafter \DeclareMathOperator{\foo}{foo}가를 사용하는 것과 동일 \operatorname{foo}하므로 줄 (1)이에서 얻은 것과 동일 하다는 것을 보여줍니다 \DeclareMathOperator{\Set}{\mathit{Set}}.

동일합니까? 아니.

세 번째 질문

사용하여 \operatorname하나 또는 두 번 나타날 사업자 문서에. 여러 번 사용되는 연산자의 경우 \DeclareMathOperator입력을 용이하게하고 혼란을 줄이려면 적절한 줄을 추가하십시오 .

추가

나는 당신에게 차이점을 찾기 위해 연습으로 남겨 둡니다.

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

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