`\ _ DeclareMathOperator` इंटर्नल

Nov 23 2020

मैं नीचे दो प्रश्न पूछता हूं, जो एक तीसरे मेटा-प्रश्न में एकीकृत हैं। @ DavidCarlisle की टिप्पणी के लिए धन्यवाद , मुझे पता है कि मेरे प्रश्न ऐसे हैं कि उत्तर इस बात पर निर्भर कर सकता है कि क्या उन्हें MathJax या LaTeX + के संदर्भ में व्याख्यायित किया गया है amsmath। मुझे दोनों संदर्भों में जवाब में दिलचस्पी है।

मैं कभी-कभी बारोक टीएक्स पर सर्वोत्तम प्रथाओं को लागू करने के लिए शिकार पर हूं (जो कि कभी-कभी बारोक टीएक्स पर सर्वोत्तम प्रथाएं हैं जो एमओ पर फसलें लगाती हैं । बार इस बदलते कहते हैं, शामिल है, का एक बहुत $Hom(A, B)$करने के लिए $\operatorname{Hom}(A, B)$, और मैं अक्सर एक नोट एक नया उपयोगकर्ता के लिए उन्हें के बारे में पता छोड़ \DeclareMathOperatorऔर भाई बहन।

मैंने एक पोस्ट पर ध्यान दिया कि एक उपयोगकर्ता ने इस सलाह को एक मोड़ के साथ उठाया, और उपयोग करना शुरू कर दिया \DeclareMathOperator\Hom{\operatorname{Hom}}

प्र : \DeclareMathOperator\Hom{\operatorname{Hom}}पर्यायवाची है \DeclareMathOperator\Hom{Hom}?

मैंने हाल ही में एक अन्य उपयोगकर्ता पर ध्यान दिया है जो एक निर्माण का उपयोग करता है \DeclareMathOperator\Set{\mathit{Set}}

प्र : \DeclareMathOperator\Set{\mathit{Set}}पर्यायवाची है \newcommand\Set{\mathit{Set}}? यदि नहीं, तो क्या यह पर्यायवाची है \newcommand\Set{\mathop{\mathit{Set}}}?

जाहिर है कि यहाँ एक मेटा-प्रश्न दुबला है, जिसे मैं उत्तर देने में सक्षम होऊंगा अगर मैं अधिक आरामदायक डाइविंग में था - मुझे लगता है कि यह amsmathस्रोत है:

प्रश्न : कोड के स्तर पर, न केवल बड़ी तस्वीर "यह वही है जो आप ऑपरेटर नाम के लिए चाहते हैं", क्या करें \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}

आपके पहले प्रश्न का उत्तर बताता है कि उपयोग करने के \fooबाद \DeclareMathOperator{\foo}{foo}भी ऐसा ही है \operatorname{foo}, इसलिए लाइन (1) वैसी ही है जैसी आप से प्राप्त करेंगे \DeclareMathOperator{\Set}{\mathit{Set}}

क्या यह वही है? नहीं।

तीसरा सवाल

\operatornameएक या दो बार दिखाई देने वाले ऑपरेटरों के लिए दस्तावेज़ में उपयोग करें । \DeclareMathOperatorटाइपिंग को आसान बनाने और अव्यवस्था को कम करने के लिए, ऑपरेटरों को कई बार उपयोग किया जाता है।

परिशिष्ट

मैं आप के बीच मतभेदों को खोजने के लिए एक अभ्यास के रूप में छोड़ता हूं

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

तथा

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