`\ DeclareMathOperator` dahili öğeleri

Nov 23 2020

Aşağıda üçüncü bir meta soruda birleştirilmiş iki soru soruyorum. @ DavidCarlisle'ın yorumu sayesinde , sorularımın yanıtın MathJax veya LaTeX + bağlamında yorumlanıp yorumlanmadığına bağlı olabileceğinin farkındayım amsmath. Her iki bağlamda da cevaplarla ilgileniyorum.

Ben de ekinler kadar bazen barok TeX üzerinde (benim kuşkusuz öz tanımlanan) en iyi uygulamaları empoze etmek ava sürekli duyuyorum MO . Bu mesela değiştirmeyi kez, bir sürü $Hom(A, B)$etmek $\operatorname{Hom}(A, B)$ve sık sık onları oluşturulduğunu bildiren yeni bir kullanıcı için bir not bırakın \DeclareMathOperatorve kardeşleri.

Bir gönderide, bir kullanıcının bu tavsiyeyi bir bükülme ile aldığını ve kullanmaya başladığını fark ettim \DeclareMathOperator\Hom{\operatorname{Hom}}.

S : \DeclareMathOperator\Hom{\operatorname{Hom}}ile eşanlamlıdır \DeclareMathOperator\Hom{Hom}?

Son zamanlarda gibi bir yapı kullanan başka bir kullanıcı fark ettim \DeclareMathOperator\Set{\mathit{Set}}.

S : \DeclareMathOperator\Set{\mathit{Set}}ile eşanlamlıdır \newcommand\Set{\mathit{Set}}? Değilse, o zaman eşanlamlı \newcommand\Set{\mathop{\mathit{Set}}}mı?

Açıkçası, burada gizlenen bir meta-soru var, bu soruyu daha rahat daldığımda cevaplayabileceğim - sanırım öyle - amsmathkaynak:

S : Kod düzeyinde, sadece büyük resim değil, "bir operatör adı için istediğiniz budur", ne yapmalı \DeclareMathOperatorve ne \operatornameyapmalı?

Yanıtlar

1 egreg Nov 24 2020 at 09:15

MathJax'e dokunmayacağım çünkü modeli LaTeX'ten tamamen farklı.

İlk soru

\DeclareMathOperator{\Hom}{\operatorname{Hom}}Tabii ki benzer bir şey işe yarıyor, ancak \Homaynı şeyleri iki kez yapacak. İçinde amsopn.stybuluyoruz

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

Bunun \footanımsız olduğunu varsayarsak \DeclareMathOperator{\foo}{???},

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

kısaltılmış versiyonu olan

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

Öte yandan, \operatorname{+++}yapacak

\qopname\newmcodes@ o{+++}

Bu yüzden \Homyaparsın

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

bu hiçbir şey için oldukça karmaşık görünüyor: aslında yapmakla aynı şey

\operatorname{\operatorname{Hom}}

her seferinde \Homkullanılır.

İkinci soru

Tanımlar

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

farklı şeyler yapacak. Farklılıkları basit bir örnekle görebiliriz

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

İlk sorunuzun cevabı, \foosonrasının \DeclareMathOperator{\foo}{foo}kullanmakla aynı olduğunu gösterir \operatorname{foo}, bu nedenle (1) satırından aldığınızla aynıdır \DeclareMathOperator{\Set}{\mathit{Set}}.

Bunlar aynı mı? Hayır.

Üçüncü soru

\operatornameBelgede bir veya iki kez görünen operatörler için kullanın . Birkaç kez kullanılan operatörler için, \DeclareMathOperatoryazmayı kolaylaştırmak ve karmaşayı azaltmak için uygun satırı ekleyin .

Ek

Aralarındaki farkları bulmak için bir egzersiz olarak size bırakıyorum

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

ve

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