假设我想排版某个数学运算符 A 的平方。使用\operatorname
(amsmath
包),基本上有两种方法可以做到这一点:
\(\operatorname{A^{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 中所述。TeXbook。由于宏\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
。请注意,此解释简化为使用此命令的情况没有*
(“star”) 限定符。(请参阅了解amsopn.sty
完整详情。)
该\operatorname
指令(不带“星号”限定符)设置为
\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
,上标 2 之前的字母高度似乎不会影响 的垂直定位2
。例如,检查2
中的字形位置
$\mathop{\kern0pt \operator@font ln^2}$
$\mathop{\kern0pt \operator@font sin^2}$
$\mathop{\kern0pt \operator@font cos}^2$`
它们都一样。
相反,如果“平方指令”是不在里面指令\mathop
,起作用的是包含指令“名称”部分的整个框的高度\operatorname
;如果“名称”部分包含带上升部的字母,则框的高度会增加,这将影响上标-2 的定位。例如,对于$\ln^2$
、$\det^2$
和,上标的高度不同,因为包含、和$\cos^2$
的框的高度不同。ln
sin
cos
答案3
你得到了一些很好的答案,解释了技术细节(从而回答了你的问题)。我想指出的是,你应该绝不使用\(\operatorname{A^{2}}\)
,你可能只是想要\(A^2\)
:
如果你有一些数学运算符,那么你可以使用多变的A 表示该运算符。在这种情况下,你应该只使用A^2
。只有对于特殊(非变量)运算符,才应该使用\operatorname
,例如\operatorname{E}
例如期望值.(在这个例子中\operatorname{E}^{2}
实际上没有任何意义,但你总是把正方形外部这\operatorname
。)