排版數學運算子的平方

排版數學運算子的平方

假設我想排版某個數學運算子 A 的平方\operatornameamsmath包),基本上有兩種方法可以做到這一點:

  1. \(\operatorname{A^{2}}\)(即,指數被視為運算子名稱的一部分)
  2. \(\operatorname{A}^{2}\)(即,指數不被視為運算子名稱的一部分)

但根據我的測試,上述兩個公式並不等效。事實上,第一個公式的高度比第二個公式的高度要小。最小的例子:

\documentclass{article}

\usepackage{amsmath}

\newlength{\len}

\begin{document}

\begin{enumerate}
\item
  \settoheight{\len}{\(\operatorname{A^{2}}\)}
  \(\operatorname{A^{2}}\): height = \the\len
\item
  \settoheight{\len}{\(\operatorname{A}^{2}\)}
  \(\operatorname{A}^{2}\): height = \the\len
\end{enumerate}

\end{document}

誰能解釋一下我的觀察結果是什麼?

答案1

造成差異的原因是 TeX 對上標的排版方式不同,無論它是在字元後面還是在方框後面,如附錄 G 的規則 18a 中所述。教材。由於巨集\operatorname將其內容裝箱(因為它調用\mathop了which),這就是\operatorname{A}^2\operatorname{A^2}不同的原因(第一個上標涉及一個框,而第二個上標僅涉及前面的A)。您可以很容易地看到 an\operatorname和 an 的\hbox行為類似:

程式碼的結果

\documentclass{article}

\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{xcolor}

\begin{document}

\begin{tabular}{ccc}
\scalebox{5}{$\operatorname{A}^2$} & \scalebox{5}{$\hbox{A}^2$} & \scalebox{5}{$\operatorname{A^2}$} \\
\verb"$\operatorname{A}^2$" & \verb"$\hbox{A}^2$" & \verb"$\operatorname{A^2}$" \\
\end{tabular}

\raisebox{1.22cm}[0pt]{\color{red}\rule{\textwidth}{0.4pt}}

\end{document}

以下是 TeX 在本例中實際計算的技術細節:

程式碼的結果

\documentclass[a4paper]{article}

\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{geometry}

\begin{document}

\setbox0=\hbox{$a$}% to initialize the maths fonts

\begingroup
\newdimen\h
\newdimen\q
\newdimen\boxedu
\newdimen\unboxedu
\newdimen\sigmafourteen
\newdimen\sigmafive
\q=\the\fontdimen18\scriptfont2
\sigmafourteen=\the\fontdimen14\textfont2
\sigmafive=\the\fontdimen5\textfont2
\def\tabularheading{\itshape\color{red!70!black}}

\noindent List of relevant font parameters and their values:
\begin{quote}
\begin{tabular}{lll}
\tabularheading Name & \tabularheading Symbol & \tabularheading Value \\
\texttt{x\_height} & $\sigma_5$ & \the\sigmafive \\
\texttt{sup2}      & $\sigma_{14}$ & \the\sigmafourteen \\
\texttt{sup\_drop} & $q$ (it's $\sigma_{18}$ of superscript font) & \the\q \\
\end{tabular}
\end{quote}
Comparison of the amount the superscript is shifted up for a boxed and unboxed $A$:
\begin{quote}
\setbox0=\hbox{$A$}
\h=\the\ht0
\def\maxof#1#2{%
  \ifdim#1>#2%
      #1%
    \else
      #2%
    \fi}
\begin{tabular}{lll}
& \tabularheading Boxed $A$ & \tabularheading Unboxed $A$ \\
\tabularheading height $h$ & \the\h & \the\h \\
\tabularheading base superscript shift $u_0$ & $h-q = \mathrm{\the\dimexpr\h-\q\relax}$ & 0pt \\
\tabularheading real shift $u = \max(u_0,\sigma_{14},\frac{1}{4}\sigma_5)$ &
\boxedu=\dimexpr\h-\q\relax
\boxedu=\maxof{\boxedu}{\sigmafourteen}%
\global\boxedu=\maxof{\boxedu}{.25\sigmafive}%
\the\boxedu
&
\unboxedu=0pt
\unboxedu=\maxof{\unboxedu}{\sigmafourteen}%
\global\unboxedu=\maxof{\unboxedu}{.25\sigmafive}%
\the\unboxedu
\end{tabular}
\end{quote}
Comparision of the calculations with the real typesetting:
\begin{quote}
\begin{tabular}{cc}
\scalebox{5}{$\hbox{$A$}^2$\hbox{$A$\raise\boxedu\hbox{$\scriptstyle2$}}} & \scalebox{5}{$A^2$\hbox{$A$\raise\unboxedu\hbox{$\scriptstyle2$}}} \\
\tabularheading boxed $A$ & \tabularheading unboxed $A$ \\
\end{tabular}

\raisebox{1.35cm}[0pt]{\color{blue}\rule{9.5cm}{0.4pt}}
\end{quote}
\endgroup

\end{document}

答案2

這是指令執行過程中發生的情況的相當詳細的解釋\operatorname。請注意,此解釋被簡化為使用此命令的情況沒有*(“明星”)限定符。(請參閱amsopn.sty參考資料 以取得完整詳細資訊。)

\operatorname指令(沒有“star”限定符)設定為

\DeclareRobustCommand{\operatorname}{{\qopname\newmcodes@ o}}

其中\qopname又被定義為

\DeclareRobustCommand{\qopname}[3]{%
    \mathop{#1\kern\z@\operator@font#3}%
    \csname n#2limits@\endcsname},

\operator@font是(誰)給的

\def\operator@font{\mathgroup\symoperators},

\newmcodes@給出 - 在 TeX 組內,其"catcode 12 - 由

\gdef\newmcodes@{\mathcode`\'39\mathcode`\*42\mathcode`\."613A%
  \ifnum\mathcode`\-=45 \else
    \mathchardef\std@minus\mathcode`\-\relax
  \fi
  \mathcode`\-45\mathcode`\/47\mathcode`\:"603A\relax} 

(基本上,該\newmcodes@命令修改字元' * . - /及其:“常規”數學模式設定的含義。)最後,該命令\z@相當於0pt(零長度)。

因此,執行該命令\operatorname{xyz}相當於執行

{\qopname\newmcodes@ o xyz}

歸結為執行,在(i)認識到\newmodes@當前示例中不涉及受命令影響的特殊字符,(ii)將複合體中的構造解析\csname ... \endcsname\nolimits,並且(iii)注意到\nolimits如果我們不指定限制:

{\mathop{\kern0pt \operator@font xyz}

因此,$\operatorname{A}^2$決定

${\mathop{\kern0pt \operator@font A}^2$

$\operatorname{A^2}$決心

${\mathop{\kern0pt \operator@font A^2}$

如果「平方指令」是裡面根據指令\mathop,superscript-2 之前的字母高度似乎不會影響 的垂直定位2。例如,檢查2字形的位置

$\mathop{\kern0pt \operator@font ln^2}$
$\mathop{\kern0pt \operator@font sin^2}$
$\mathop{\kern0pt \operator@font cos}^2$`

他們都是一樣的。

相反,如果“平方指令”是不在裡面指令\mathop,起作用的是包含指令的「名稱」部分的整個框的高度\operatorname;如果「name」部分包含帶有上行字母的字母,則框的高度會增加,這將影響 superscript-2 的定位。例如,對於$\ln^2$$\det^2$和,上標的高度不同,因為分別包含、和 的$\cos^2$框的高度不同。lnsincos

答案3

您得到了一些很好的答案來解釋技術(從而回答您的問題)。我想指出的是你應該絕不使用\(\operatorname{A^{2}}\),你可能只是想要\(A^2\)

如果您有一些數學運算符,那麼您可以使用多變的A 表示該運算子。在這種情況下你應該只使用A^2.僅對於特殊(非變數)運算子才應使用\operatorname\operatorname{E}例如期望值。 (在這個例子中,這\operatorname{E}^{2}確實沒有意義,但你總是把平方外部\operatorname

相關內容