Supongamos que quiero componer el cuadrado de algún operador matemático A. Usando \operatorname
(amsmath
paquete), hay básicamente dos maneras de hacerlo:
\(\operatorname{A^{2}}\)
(es decir, el exponente se considera parte del nombre del operador)\(\operatorname{A}^{2}\)
(es decir, el exponente no se considera parte del nombre del operador)
Sin embargo, según mis pruebas, las dos fórmulas anteriores no son equivalentes. De hecho, la primera fórmula tiene una altura menor que la segunda. Ejemplo mínimo:
\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}
¿Alguien puede explicar qué hay en el fondo de mi observación?
Respuesta1
La razón de la diferencia es que TeX compone los superíndices de manera diferente ya sea que sigan a un carácter o a un cuadro, como se describe en la regla 18a del Apéndice G deEl libro de texto. Como la macro \operatorname
encuadra su contenido (porque llama \mathop
a cuál lo hace), es por eso que \operatorname{A}^2
difieren \operatorname{A^2}
(el primer superíndice se refiere a un cuadro, mientras que el segundo solo a la A anterior). Puedes ver fácilmente que an \operatorname
y an \hbox
se comportan de manera similar:
\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}
Aquí están los detalles técnicos de los cálculos reales realizados por TeX en el presente caso:
\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}
Respuesta2
Aquí hay una explicación bastante detallada de lo que sucede en la ejecución de una \operatorname
instrucción. Tenga en cuenta que esta explicación se simplifica al caso del uso de este comando.sinel *
calificativo ("estrella"). (Consulte amsopn.sty
para conocer todos los detalles).
La \operatorname
instrucción (sin el calificador "estrella") se configura como
\DeclareRobustCommand{\operatorname}{{\qopname\newmcodes@ o}}
donde \qopname
, a su vez, se define como
\DeclareRobustCommand{\qopname}[3]{%
\mathop{#1\kern\z@\operator@font#3}%
\csname n#2limits@\endcsname},
\operator@font
es dado por
\def\operator@font{\mathgroup\symoperators},
y \newmcodes@
viene dado, dentro de un grupo TeX para el cual "
tiene catcode 12, por
\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}
(Básicamente, el \newmcodes@
comando modifica los significados de los caracteres '
*
.
-
/
y :
de su configuración "normal" del modo matemático). Finalmente, el comando \z@
es equivalente a 0pt
(longitud cero).
Por lo tanto, ejecutar el comando \operatorname{xyz}
es equivalente a ejecutar
{\qopname\newmcodes@ o xyz}
lo que se reduce a ejecutar, después de (i) reconocer que ninguno de los caracteres especiales afectados por el \newmodes@
comando está involucrado en el ejemplo actual, (ii) resolver la construcción en el \csname ... \endcsname
complejo a \nolimits
y (iii) observar que \nolimits
no tiene efectos si no especifique límites:
{\mathop{\kern0pt \operator@font xyz}
Por lo tanto, $\operatorname{A}^2$
resuelve
${\mathop{\kern0pt \operator@font A}^2$
mientras que $\operatorname{A^2}$
resuelve
${\mathop{\kern0pt \operator@font A^2}$
Si la "instrucción de elevar al cuadrado" esadentroSegún la \mathop
instrucción, parece que la altura de las letras que preceden al superíndice-2 no afecta la posición vertical del archivo 2
. Por ejemplo, compruebe las posiciones del 2
glifo en
$\mathop{\kern0pt \operator@font ln^2}$
$\mathop{\kern0pt \operator@font sin^2}$
$\mathop{\kern0pt \operator@font cos}^2$`
Son todos iguales.
Por el contrario, si la "instrucción de elevar al cuadrado" esno en el interiorla \mathop
instrucción, lo que entra en juego es la altura de todo el cuadro que contiene la parte "nombre" de la \operatorname
instrucción; si la parte "nombre" contiene letras con ascendentes, la altura del cuadro aumenta y esto afectará la posición del superíndice-2. Por ejemplo, para $\ln^2$
, $\det^2$
y $\cos^2$
, el superíndice está a diferentes alturas debido a las diferencias en las alturas de los cuadros que contienen ln
, sin
y cos
, respectivamente.
Respuesta3
Obtuviste excelentes respuestas que explican las TeXnicalidades (y, por lo tanto, responden a tu pregunta). Me gustaría señalar que usted debenuncause \(\operatorname{A^{2}}\)
, y que probablemente solo desee \(A^2\)
:
Si tienes algún operador matemático, entonces puedes usar elvariableA para denotar ese operador. En ese caso sólo deberías usar A^2
. Sólo para operadores especiales (no variables) se debe utilizar \operatorname
, por ejemplo \operatorname{E}
para elvalor esperado. (En este ejemplo sucede que eso \operatorname{E}^{2}
no tiene mucho sentido, pero siempre pondrías el cuadradoafuerael \operatorname
.)