`\ DeclareMathOperator` ภายใน
ฉันถามคำถามสองข้อด้านล่างซึ่งรวมอยู่ในคำถามเมตาที่สาม ขอขอบคุณที่ @ DavidCarlisle ของความคิดเห็นของฉันตระหนักดีว่าคำถามของฉันเป็นเช่นที่คำตอบอาจขึ้นอยู่กับว่าพวกเขาจะถูกตีความในบริบทของ MathJax หรือของน้ำยาง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ทำอย่างไร
คำตอบ
ฉันจะไม่แตะ 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}}