`\ DeclareMathOperator` 내부
아래에 세 번째 메타 질문으로 통합 된 두 가지 질문을합니다. @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
있습니까?
답변
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}
첫 번째 질문에 대한 대답은 \foo
after \DeclareMathOperator{\foo}{foo}
가를 사용하는 것과 동일 \operatorname{foo}
하므로 줄 (1)이에서 얻은 것과 동일 하다는 것을 보여줍니다 \DeclareMathOperator{\Set}{\mathit{Set}}
.

동일합니까? 아니.
세 번째 질문
사용하여 \operatorname
하나 또는 두 번 나타날 사업자 문서에. 여러 번 사용되는 연산자의 경우 \DeclareMathOperator
입력을 용이하게하고 혼란을 줄이려면 적절한 줄을 추가하십시오 .
추가
나는 당신에게 차이점을 찾기 위해 연습으로 남겨 둡니다.
\DeclareMathOperator*{\tlim}{t-lim}
과
\newcommand{\tlim}{\mathop{t-lim}}