Набор квадрата математического оператора

Набор квадрата математического оператора

Предположим, я хочу набрать квадрат некоторого математического оператора A. Используя \operatorname(amsmathpackage), есть два основных способа сделать это:

  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 по-разному набирает верхние индексы, независимо от того, следуют ли они за символом или за рамкой, как описано в правиле 18a Приложения G кTeXbook. Так как макрос \operatornameупаковывает свое содержимое (потому что он вызывает \mathopwhich делает), поэтому \operatorname{A}^2и \operatorname{A^2}отличаются (первый верхний индекс относится к ящику, тогда как второй только к предшествующему A). Вы можете легко увидеть, что \operatornameи \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(без определителя «звезда») выглядит следующим образом:

\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

Вы получили несколько замечательных ответов, объясняющих TeXnicalities (и, таким образом, отвечающих на ваш вопрос). Я хотел бы отметить, что вам следуетникогдаиспользуйте \(\operatorname{A^{2}}\), и что вы, вероятно, просто хотите \(A^2\):

Если у вас есть какой-то математический оператор, то вы можете использоватьпеременнаяA для обозначения этого оператора. В этом случае вам следует просто использовать A^2. Только для специальных (непеременных) операторов следует использовать \operatorname, например, \operatorname{E}дляожидаемое значение. (В этом примере это \operatorname{E}^{2}не совсем имеет смысл, но вы всегда будете ставить квадратснаружи\operatorname. )

Связанный контент